diff options
author | dsmith <dsmith> | 2006-07-13 20:41:00 +0000 |
---|---|---|
committer | dsmith <dsmith> | 2006-07-13 20:41:00 +0000 |
commit | 493ee2241e4f16b196bbe320bba997c9c3df081d (patch) | |
tree | 9e92b57b1dea188cf670621a2fdb6138cd722b8b /parse.cxx | |
parent | 4eb3a7f59e23c9342fc40db9206d6ac98c2f7ca3 (diff) | |
download | systemtap-steved-493ee2241e4f16b196bbe320bba997c9c3df081d.tar.gz systemtap-steved-493ee2241e4f16b196bbe320bba997c9c3df081d.tar.xz systemtap-steved-493ee2241e4f16b196bbe320bba997c9c3df081d.zip |
2006-07-13 David Smith <dsmith@redhat.com>
* parse.cxx (parser::expect_unknown2): New function that looks for
2 possible token types.
* parse.cxx (parser::expect_ident_or_keyword): New function that
calls parser::expect_unknown2.
* parse.cxx (parser::parse_symbol): Calls
parser::expect_ident_or_keyword to allow keywords to appear when
expanding target symbols (Bugzilla #2913).
* parse.h: Added prototypes for parser::expect_unknown2 and
parser::expect_ident_or_keyword.
* testsuite/parseok/seventeen.stp: New test to check for allowing
keywords when expanding target symbols.
Diffstat (limited to 'parse.cxx')
-rw-r--r-- | parse.cxx | 20 |
1 files changed, 19 insertions, 1 deletions
@@ -375,6 +375,17 @@ parser::expect_unknown (token_type tt, string & target) const token* +parser::expect_unknown2 (token_type tt1, token_type tt2, string & target) +{ + const token *t = next(); + if (!(t && (t->type == tt1 || t->type == tt2))) + throw parse_error ("expected " + tt2str(tt1) + " or " + tt2str(tt2)); + target = t->content; + return t; +} + + +const token* parser::expect_op (std::string const & expected) { return expect_known (tok_operator, expected); @@ -405,6 +416,13 @@ parser::expect_ident (std::string & target) } +const token* +parser::expect_ident_or_keyword (std::string & target) +{ + return expect_unknown2 (tok_identifier, tok_keyword, target); +} + + bool parser::peek_op (std::string const & op) { @@ -2172,7 +2190,7 @@ parser::parse_symbol () if (peek_op ("->")) { next(); - expect_ident (c); + expect_ident_or_keyword (c); tsym->components.push_back (make_pair (target_symbol::comp_struct_member, c)); } |