diff options
author | fche <fche> | 2005-11-01 16:13:35 +0000 |
---|---|---|
committer | fche <fche> | 2005-11-01 16:13:35 +0000 |
commit | 177a8ead26e48a61efd904103a9d189cb27009dd (patch) | |
tree | d27cfc1ba5928e3454cda6dca7b1bee30d9732b9 /parse.h | |
parent | dc2729782a046ea5f60e74f48d1097d2fec4a16b (diff) | |
download | systemtap-steved-177a8ead26e48a61efd904103a9d189cb27009dd.tar.gz systemtap-steved-177a8ead26e48a61efd904103a9d189cb27009dd.tar.xz systemtap-steved-177a8ead26e48a61efd904103a9d189cb27009dd.zip |
2005-11-01 Frank Ch. Eigler <fche@elastic.org>
PR 1425.
* configure.ac: Look for rpm-devel headers and libs.
* configure: Regenerated.
* session.h: New file to contain systemtap_session decl.
* staptree.h: Likewise evict statistics_decl.
* elaborate.h: Corresponding changes.
* main.cxx (usage): Elaborate. Re-enable "-r RELEASE" option.
* parse.cxx (parser): Add systemtap_session& field. Update users.
(scan_pp, eval_pp_conditional): New routines for preprocessing.
(peek, next): Call it.
(lexer::scan): Lex the preprocessor operators.
(parser::parse): Include an extra level of exception catching
for parse errors that occur during recovery.
* parse.h: Corresponding changes.
(parse_error): Allow explicit token parameter.
* stap.1.in: Document preprocessing.
* testsuite/parseok/fourteen.stp: New test.
Diffstat (limited to 'parse.h')
-rw-r--r-- | parse.h | 18 |
1 files changed, 13 insertions, 5 deletions
@@ -46,7 +46,10 @@ std::ostream& operator << (std::ostream& o, const token& t); struct parse_error: public std::runtime_error { - parse_error (const std::string& msg): runtime_error (msg) {} + const token* tok; + parse_error (const std::string& msg): runtime_error (msg), tok (0) {} + parse_error (const std::string& msg, const token* t): runtime_error (msg), + tok (t) {} }; @@ -70,21 +73,26 @@ private: class parser { public: - parser (std::istream& i, bool p); - parser (const std::string& n, bool p); + parser (systemtap_session& s, std::istream& i, bool p); + parser (systemtap_session& s, const std::string& n, bool p); ~parser (); stapfile* parse (); - static stapfile* parse (std::istream& i, bool privileged); - static stapfile* parse (const std::string& n, bool privileged); + static stapfile* parse (systemtap_session& s, std::istream& i, bool privileged); + static stapfile* parse (systemtap_session& s, const std::string& n, bool privileged); private: + systemtap_session& session; std::string input_name; std::istream* free_input; lexer input; bool privileged; + // preprocessing subordinate + std::vector<const token*> enqueued_pp; + const token* scan_pp (); + // scanning state const token* last (); const token* next (); |