diff options
author | ddomingo <ddomingo@redhat.com> | 2008-09-29 16:08:16 +1000 |
---|---|---|
committer | ddomingo <ddomingo@redhat.com> | 2008-09-29 16:08:16 +1000 |
commit | 2e66077954be9d219e0b87926af1dc87138d99dc (patch) | |
tree | 090acfc6e37967ec1e369d943f0a43764d47bfc5 /elaborate.cxx | |
parent | c45b18d71eb8d57db62fced5774c12adcaf4eaba (diff) | |
parent | b487a14d6d160f38dd1dbabe305b373b37972074 (diff) | |
download | systemtap-steved-2e66077954be9d219e0b87926af1dc87138d99dc.tar.gz systemtap-steved-2e66077954be9d219e0b87926af1dc87138d99dc.tar.xz systemtap-steved-2e66077954be9d219e0b87926af1dc87138d99dc.zip |
Merge branch 'master' of ssh://sources.redhat.com/git/systemtap
Diffstat (limited to 'elaborate.cxx')
-rw-r--r-- | elaborate.cxx | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/elaborate.cxx b/elaborate.cxx index b476948b..94bfd1c5 100644 --- a/elaborate.cxx +++ b/elaborate.cxx @@ -1424,26 +1424,43 @@ systemtap_session::print_token (ostream& o, const token* tok) void systemtap_session::print_error (const semantic_error& e) { - string message_str; - stringstream message; + string message_str[2]; // NB: we don't print error messages during listing mode. if (listing_mode) return; - message << "semantic error: " << e.what (); - if (e.tok1 || e.tok2) - message << ": "; - if (e.tok1) print_token (message, e.tok1); - message << e.msg2; - if (e.tok2) print_token (message, e.tok2); - message << endl; - message_str = message.str(); + // We generate two messages. The second one ([1]) is printed + // without token compression, for purposes of duplicate elimination. + // This way, the same message that may be generated once with a + // compressed and once with an uncompressed token still only gets + // printed once. + for (int i=0; i<2; i++) + { + stringstream message; + + message << "semantic error: " << e.what (); + if (e.tok1 || e.tok2) + message << ": "; + if (e.tok1) + { + if (i == 0) print_token (message, e.tok1); + else message << *e.tok1; + } + message << e.msg2; + if (e.tok2) + { + if (i == 0) print_token (message, e.tok2); + else message << *e.tok2; + } + message << endl; + message_str[i] = message.str(); + } // Duplicate elimination - if (seen_errors.find (message_str) == seen_errors.end()) + if (seen_errors.find (message_str[1]) == seen_errors.end()) { - seen_errors.insert (message_str); - cerr << message_str; + seen_errors.insert (message_str[1]); + cerr << message_str[0]; } if (e.chain) |