summaryrefslogtreecommitdiffstats
path: root/parse.cxx
diff options
context:
space:
mode:
authorfche <fche>2007-04-03 18:35:28 +0000
committerfche <fche>2007-04-03 18:35:28 +0000
commitcd7116b8cb3e77cf49cd30cb244f25d7c958e5f6 (patch)
tree9eebaeec0ff8b9a4d0e4e89a622793efd7f2dc84 /parse.cxx
parent0cbbf9d1cc127b8671892ca64d9e9202dc8786d0 (diff)
downloadsystemtap-steved-cd7116b8cb3e77cf49cd30cb244f25d7c958e5f6.tar.gz
systemtap-steved-cd7116b8cb3e77cf49cd30cb244f25d7c958e5f6.tar.xz
systemtap-steved-cd7116b8cb3e77cf49cd30cb244f25d7c958e5f6.zip
2007-04-03 Frank Ch. Eigler <fche@elastic.org>
Improve error messages for underprivileged scripts. * parse.h (parse_error): Add skip_some member, true default. * parse.cxx (parse_embedded_code): Send false on missing -g. * parse.cxx (parser::parse): Respect flag during parse error recovery.
Diffstat (limited to 'parse.cxx')
-rw-r--r--parse.cxx40
1 files changed, 21 insertions, 19 deletions
diff --git a/parse.cxx b/parse.cxx
index 41784430..74cb72d0 100644
--- a/parse.cxx
+++ b/parse.cxx
@@ -803,24 +803,25 @@ parser::parse ()
catch (parse_error& pe)
{
print_error (pe);
- try
- {
- // Quietly swallow all tokens until the next '}'.
- while (1)
- {
- const token* t = peek ();
- if (! t)
- break;
- next ();
- if (t->type == tok_operator && t->content == "}")
- break;
- }
- }
- catch (parse_error& pe2)
- {
- // parse error during recovery ... ugh
- print_error (pe2);
- }
+ if (pe.skip_some) // for recovery
+ try
+ {
+ // Quietly swallow all tokens until the next '}'.
+ while (1)
+ {
+ const token* t = peek ();
+ if (! t)
+ break;
+ next ();
+ if (t->type == tok_operator && t->content == "}")
+ break;
+ }
+ }
+ catch (parse_error& pe2)
+ {
+ // parse error during recovery ... ugh
+ print_error (pe2);
+ }
}
}
@@ -927,7 +928,8 @@ parser::parse_embeddedcode ()
throw parse_error ("expected '%{'");
if (! privileged)
- throw parse_error ("embedded code in unprivileged script");
+ throw parse_error ("embedded code in unprivileged script",
+ false /* don't skip tokens for parse resumption */);
e->tok = t;
e->code = t->content;