diff options
Diffstat (limited to 'tapset-mark.cxx')
-rw-r--r-- | tapset-mark.cxx | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/tapset-mark.cxx b/tapset-mark.cxx index 3fd6f11f..5c5fb0ce 100644 --- a/tapset-mark.cxx +++ b/tapset-mark.cxx @@ -182,21 +182,28 @@ mark_var_expanding_visitor::visit_target_symbol (target_symbol* e) { assert(e->base_name.size() > 0 && e->base_name[0] == '$'); - if (e->addressof) - throw semantic_error("cannot take address of marker variable", e->tok); - - if (e->base_name.substr(0,4) == "$arg") - visit_target_symbol_arg (e); - else if (e->base_name == "$format" || e->base_name == "$name" - || e->base_name == "$$parms" || e->base_name == "$$vars") - visit_target_symbol_context (e); - else - throw semantic_error ("invalid target symbol for marker, $argN, $name, $format, $$parms or $$vars expected", - e->tok); + try + { + if (e->addressof) + throw semantic_error("cannot take address of marker variable", e->tok); + + if (e->base_name.substr(0,4) == "$arg") + visit_target_symbol_arg (e); + else if (e->base_name == "$format" || e->base_name == "$name" + || e->base_name == "$$parms" || e->base_name == "$$vars") + visit_target_symbol_context (e); + else + throw semantic_error ("invalid target symbol for marker, $argN, $name, $format, $$parms or $$vars expected", + e->tok); + } + catch (const semantic_error &er) + { + e->chain (new semantic_error(er)); + provide (e); + } } - mark_derived_probe::mark_derived_probe (systemtap_session &s, const string& p_n, const string& p_f, |