diff options
author | Josh Stone <jistone@redhat.com> | 2010-04-07 16:41:41 -0700 |
---|---|---|
committer | Josh Stone <jistone@redhat.com> | 2010-04-07 16:46:57 -0700 |
commit | 1af1e62d9f67237277dd771a0cb78fa6b069742d (patch) | |
tree | 7a168a6caf1649dfe2ea470d43972c65619a06ad | |
parent | ea1e477a78969d44aeea51cfc3cbd2e8ed96cfe4 (diff) | |
download | systemtap-steved-1af1e62d9f67237277dd771a0cb78fa6b069742d.tar.gz systemtap-steved-1af1e62d9f67237277dd771a0cb78fa6b069742d.tar.xz systemtap-steved-1af1e62d9f67237277dd771a0cb78fa6b069742d.zip |
Clean up and clarify semantic_error chaining
I consolidated the copy-construction that every target_symbol::chain
caller was doing. I also removed the comments that target_symbol errors
might be chained due to function wildcards, because it's not true --
each derived instance gets a deep_copy of the probe body. However,
@cast can still chain since it may try multiple modules to resolve the
casting dereference.
-rw-r--r-- | staptree.cxx | 5 | ||||
-rw-r--r-- | staptree.h | 6 | ||||
-rw-r--r-- | tapset-mark.cxx | 2 | ||||
-rw-r--r-- | tapset-procfs.cxx | 2 | ||||
-rw-r--r-- | tapset-utrace.cxx | 2 | ||||
-rw-r--r-- | tapsets.cxx | 17 |
6 files changed, 15 insertions, 19 deletions
diff --git a/staptree.cxx b/staptree.cxx index 4e57ac18..f7ce128e 100644 --- a/staptree.cxx +++ b/staptree.cxx @@ -224,8 +224,11 @@ target_symbol::assert_no_components(const std::string& tapset) } -void target_symbol::chain (semantic_error *e) +void target_symbol::chain (const semantic_error &er) { + semantic_error* e = new semantic_error(er); + if (!e->tok1) + e->tok1 = this->tok; assert (e->chain == 0); e->chain = this->saved_conversion_error; this->saved_conversion_error = e; @@ -33,9 +33,7 @@ struct semantic_error: public std::runtime_error semantic_error *chain; ~semantic_error () throw () {} - semantic_error (const std::string& msg): - runtime_error (msg), tok1 (0), tok2 (0), chain (0) {} - semantic_error (const std::string& msg, const token* t1): + semantic_error (const std::string& msg, const token* t1=0): runtime_error (msg), tok1 (t1), tok2 (0), chain (0) {} semantic_error (const std::string& msg, const token* t1, const std::string& m2, const token* t2): @@ -258,7 +256,7 @@ struct target_symbol: public symbol std::string probe_context_var; // NB: this being set implies that target_symbol is *resolved* semantic_error* saved_conversion_error; // hand-made linked list target_symbol(): addressof(false), saved_conversion_error (0) {} - void chain (semantic_error* e); + void chain (const semantic_error& er); void print (std::ostream& o) const; void visit (visitor* u); void visit_components (visitor* u); diff --git a/tapset-mark.cxx b/tapset-mark.cxx index c672dc7a..6e8191d7 100644 --- a/tapset-mark.cxx +++ b/tapset-mark.cxx @@ -198,7 +198,7 @@ mark_var_expanding_visitor::visit_target_symbol (target_symbol* e) } catch (const semantic_error &er) { - e->chain (new semantic_error(er)); + e->chain (er); provide (e); } } diff --git a/tapset-procfs.cxx b/tapset-procfs.cxx index c888ff74..34b2b005 100644 --- a/tapset-procfs.cxx +++ b/tapset-procfs.cxx @@ -520,7 +520,7 @@ procfs_var_expanding_visitor::visit_target_symbol (target_symbol* e) } catch (const semantic_error &er) { - e->chain (new semantic_error(er)); + e->chain (er); provide (e); } } diff --git a/tapset-utrace.cxx b/tapset-utrace.cxx index 25e0b15e..8e2573ab 100644 --- a/tapset-utrace.cxx +++ b/tapset-utrace.cxx @@ -601,7 +601,7 @@ utrace_var_expanding_visitor::visit_target_symbol (target_symbol* e) } catch (const semantic_error &er) { - e->chain (new semantic_error(er)); + e->chain (er); provide(e); return; } diff --git a/tapsets.cxx b/tapsets.cxx index 4b4fd513..4c070735 100644 --- a/tapsets.cxx +++ b/tapsets.cxx @@ -2683,12 +2683,7 @@ dwarf_var_expanding_visitor::visit_target_symbol (target_symbol *e) // target_symbol to the next pass. We hope that this value ends // up not being referenced after all, so it can be optimized out // quietly. - semantic_error* saveme = new semantic_error (er); // copy it - if (! saveme->tok1) { saveme->tok1 = e->tok; } // fill in token if needed - // NB: we can have multiple errors, since a $target variable - // may be expanded in several different contexts: - // function ("*") { $var } - e->chain (saveme); + e->chain (er); provide (e); } } @@ -2771,9 +2766,9 @@ dwarf_cast_query::handle_query_module() catch (const semantic_error& er) { // NB: we can have multiple errors, since a @cast - // may be expanded in several different contexts: - // function ("*") { @cast(...) } - e.chain (new semantic_error(er)); + // may be attempted using several different modules: + // @cast(ptr, "type", "module1:module2:...") + e.chain (er); } } @@ -3998,7 +3993,7 @@ sdt_var_expanding_visitor::visit_target_symbol (target_symbol *e) } catch (const semantic_error &er) { - e->chain (new semantic_error(er)); + e->chain (er); provide (e); } } @@ -6309,7 +6304,7 @@ tracepoint_var_expanding_visitor::visit_target_symbol (target_symbol* e) } catch (const semantic_error &er) { - e->chain (new semantic_error(er)); + e->chain (er); provide (e); } } |