00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #include <lestes/common.hh>
00035 #include <lestes/std/source_location.hh>
00036 #include <lestes/msg/message.hh>
00037 #include <lestes/msg/report_ostream.hh>
00038 #include <lestes/msg/formatter.hh>
00039
00040 package(lestes);
00041 package(msg);
00042
00043
00044
00045
00046
00047
00048 report_ostream::report_ostream(const ptr<report_filter> &a_output,
00049 const ptr<ostream_wrapper> &a_stream):
00050 report_filter(checked(a_output)),
00051 stream(checked(a_stream))
00052 {
00053 }
00054
00055
00056
00057
00058
00059
00060
00061
00062 void report_ostream::process(const ptr<message> &a_message,
00063 const ptr<source_location> &a_location)
00064 {
00065 lassert(a_message);
00066 lassert(a_location);
00067
00068 ostream_wrapper::stream_type o(stream->stream_get());
00069
00070 ptr<source_location> parent = a_location->file_get()->origin_get();
00071 if (parent) {
00072 ptr<file_info> file;
00073 bool first = true;
00074
00075 while (parent) {
00076 file = parent->file_get();
00077
00078
00079 (*o) <<
00080 (first ?
00081 "In file included from " :
00082 ",\n from " ) <<
00083 file->name_get() <<
00084 ':' << parent->line_get();
00085 parent = file->origin_get();
00086 first = false;
00087 }
00088
00089 (*o) << ":\n";
00090 }
00091
00092 (*o) << a_location->file_get()->name_get() << ':' <<
00093 a_location->line_get() << ':' <<
00094 a_location->column_get() <<
00095 (a_message->flags_get() == message::FLG_WARNING ? ": warning: " : ": ") <<
00096 a_message->text_get() << '\n';
00097
00098
00099 process_output(a_message,a_location);
00100 }
00101
00102
00103
00104
00105 void report_ostream::gc_mark(void)
00106 {
00107 stream.gc_mark();
00108 report_filter::gc_mark();
00109 }
00110
00111
00112
00113
00114
00115
00116
00117
00118 ptr<report_ostream> report_ostream::create(const ptr<report_filter> &a_output,
00119 const ptr<ostream_wrapper> &a_stream)
00120 {
00121 return new report_ostream(a_output,a_stream);
00122 }
00123
00124 end_package(msg);
00125 end_package(lestes);
00126