summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfche <fche>2006-09-05 02:08:52 +0000
committerfche <fche>2006-09-05 02:08:52 +0000
commit9b48ce88f4a8aebb8ad176f4e7fe6bbbe36e1fe7 (patch)
treedcf516db39087ad7e66dcd647cf9a122fa326a4b
parent331edd21f3c4f79fb71456d5550d75657b34b80f (diff)
downloadsystemtap-steved-9b48ce88f4a8aebb8ad176f4e7fe6bbbe36e1fe7.tar.gz
systemtap-steved-9b48ce88f4a8aebb8ad176f4e7fe6bbbe36e1fe7.tar.xz
systemtap-steved-9b48ce88f4a8aebb8ad176f4e7fe6bbbe36e1fe7.zip
2006-09-04 Frank Ch. Eigler <fche@elastic.org>
Improve unresolved target-symbol error messages. * staptree.h (target_symbol): Add new field saved_conversion_error. * elaborate.cxx (typeresolution_info::visit_target_symbol): Throw that if found instead of generic error. * tapsets.cxx (t_v_f_c_v::visit_target_symbol): Set it.
-rw-r--r--ChangeLog8
-rw-r--r--elaborate.cxx5
-rw-r--r--staptree.h2
-rw-r--r--tapsets.cxx4
4 files changed, 17 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index aa6bd429..6949a7f5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2006-09-04 Frank Ch. Eigler <fche@elastic.org>
+
+ Improve unresolved target-symbol error messages.
+ * staptree.h (target_symbol): Add new field saved_conversion_error.
+ * elaborate.cxx (typeresolution_info::visit_target_symbol): Throw
+ that if found instead of generic error.
+ * tapsets.cxx (t_v_f_c_v::visit_target_symbol): Set it.
+
2006-08-30 Li Guanglei <guanglei@cn.ibm.com>
* stapprobes.5.in: document signal.*
diff --git a/elaborate.cxx b/elaborate.cxx
index 957f5ea5..3fa5dda0 100644
--- a/elaborate.cxx
+++ b/elaborate.cxx
@@ -2173,7 +2173,10 @@ typeresolution_info::visit_target_symbol (target_symbol* e)
// later unused-expression-elimination pass didn't get rid of it
// either. So we have a target symbol that is believed to be of
// genuine use, yet unresolved by the provider.
- throw semantic_error("unresolved target-symbol expression", e->tok);
+ if (e->saved_conversion_error)
+ throw (* (e->saved_conversion_error));
+ else
+ throw semantic_error("unresolved target-symbol expression", e->tok);
}
diff --git a/staptree.h b/staptree.h
index 8c18f276..11243c98 100644
--- a/staptree.h
+++ b/staptree.h
@@ -229,6 +229,8 @@ struct target_symbol : public expression
};
std::string base_name;
std::vector<std::pair<component_type, std::string> > components;
+ semantic_error* saved_conversion_error;
+ target_symbol(): saved_conversion_error (0) {}
void print (std::ostream& o) const;
void visit (visitor* u);
};
diff --git a/tapsets.cxx b/tapsets.cxx
index 1d491cc2..451867a2 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -2198,8 +2198,10 @@ target_variable_flavour_calculating_visitor::visit_target_symbol (target_symbol
lvalue,
ty);
}
- catch (const semantic_error& e)
+ catch (const semantic_error& x)
{
+ e->saved_conversion_error = new semantic_error (x);
+ e->saved_conversion_error->tok1 = e->tok;
ty = pe_unknown;
}