diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2016-08-09 11:31:53 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2016-08-12 17:04:22 +0200 |
commit | 9fa5f73d00905568e8979d0c93ec4a8f645c81d5 (patch) | |
tree | f2bf937fa256c0ef2c9bbe05d3655d1985719405 /build2/diagnostics | |
parent | a1b2319ff2ddc8a6f139ee364cabe236ca62e23e (diff) |
Implement support for C compilation
We now have two new modules: cc (c-common) and c.
Diffstat (limited to 'build2/diagnostics')
-rw-r--r-- | build2/diagnostics | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/build2/diagnostics b/build2/diagnostics index 8aedf13..5441df1 100644 --- a/build2/diagnostics +++ b/build2/diagnostics @@ -259,14 +259,18 @@ namespace build2 struct simple_prologue_base { explicit - simple_prologue_base (const char* type, const char* name, uint16_t sverb) - : type_ (type), name_ (name), sverb_ (sverb) {} + simple_prologue_base (const char* type, + const char* mod, + const char* name, + uint16_t sverb) + : type_ (type), mod_ (mod), name_ (name), sverb_ (sverb) {} void operator() (const diag_record& r) const; private: const char* type_; + const char* mod_; const char* name_; const uint16_t sverb_; }; @@ -290,16 +294,18 @@ namespace build2 struct location_prologue_base { location_prologue_base (const char* type, + const char* mod, const char* name, const location& l, uint16_t sverb) - : type_ (type), name_ (name), loc_ (l), sverb_ (sverb) {} + : type_ (type), mod_ (mod), name_ (name), loc_ (l), sverb_ (sverb) {} void operator() (const diag_record& r) const; private: const char* type_; + const char* mod_; const char* name_; const location loc_; const uint16_t sverb_; @@ -311,23 +317,24 @@ namespace build2 explicit basic_mark_base (uint16_t (*sverb) (), const char* type, + const char* mod = nullptr, const char* name = nullptr, const void* data = nullptr, diag_epilogue epilogue = nullptr) : sverb_ (sverb), - type_ (type), name_ (name), data_ (data), + type_ (type), mod_ (mod), name_ (name), data_ (data), epilogue_ (epilogue) {} simple_prologue operator() () const { - return simple_prologue (epilogue_, type_, name_, sverb_ ()); + return simple_prologue (epilogue_, type_, mod_, name_, sverb_ ()); } location_prologue operator() (const location& l) const { - return location_prologue (epilogue_, type_, name_, l, sverb_ ()); + return location_prologue (epilogue_, type_, mod_, name_, l, sverb_ ()); } template <typename L> @@ -335,12 +342,13 @@ namespace build2 operator() (const L& l) const { return location_prologue ( - epilogue_, type_, name_, get_location (l, data_), sverb_ ()); + epilogue_, type_, mod_, name_, get_location (l, data_), sverb_ ()); } protected: uint16_t (*sverb_) (); const char* type_; + const char* mod_; const char* name_; const void* data_; const diag_epilogue epilogue_; @@ -358,8 +366,15 @@ namespace build2 { explicit trace_mark_base (const char* name, const void* data = nullptr) - : basic_mark_base ([]() {return stream_verb_max;}, "trace", name, data) - {} + : trace_mark_base (nullptr, name, data) {} + + trace_mark_base (const char* mod, + const char* name, + const void* data = nullptr) + : basic_mark_base ([]() {return stream_verb_max;}, + "trace", + mod, name, + data) {} }; typedef diag_mark<trace_mark_base> trace_mark; @@ -372,8 +387,11 @@ namespace build2 { explicit fail_mark_base (const void* data = nullptr) - : basic_mark_base (&stream_verb_map, "error", nullptr, data, &epilogue) - {} + : basic_mark_base (&stream_verb_map, + "error", + nullptr, nullptr, + data, + &epilogue) {} static void epilogue (const diag_record&) {throw E ();} |