diff options
author | fche <fche> | 2005-06-05 16:35:28 +0000 |
---|---|---|
committer | fche <fche> | 2005-06-05 16:35:28 +0000 |
commit | f3c26ea55e2f2c1d222312bf75035359c439ed21 (patch) | |
tree | 1a58dfcdebe04941002e7e0203f765b619ca9c67 /staptree.h | |
parent | 8846477c222cdae649b02117cc96999b0be6ad40 (diff) | |
download | systemtap-steved-f3c26ea55e2f2c1d222312bf75035359c439ed21.tar.gz systemtap-steved-f3c26ea55e2f2c1d222312bf75035359c439ed21.tar.xz systemtap-steved-f3c26ea55e2f2c1d222312bf75035359c439ed21.zip |
2005-06-05 Frank Ch. Eigler <fche@elastic.org>
Implement for/next/continue/break/while statements.
* staptree.h: Declare new 0-arity statement types. Tweak for_loop.
* parse.cxx: Parse them all.
* translate.cxx (c_unparser): Maintain break/continue label stack.
(visit_for_loop, *_statement): New implementations.
* elaborate.*, staptree.cxx: Mechanical changes.
* testsuite/parseok/ten.stp, semko/twelve.stp, transko/two.stp,
transok/five.stp: New tests.
Diffstat (limited to 'staptree.h')
-rw-r--r-- | staptree.h | 35 |
1 files changed, 33 insertions, 2 deletions
@@ -275,11 +275,12 @@ struct block: public statement }; +struct expr_statement; struct for_loop: public statement { - expression* init; + expr_statement* init; expression* cond; - expression* incr; + expr_statement* incr; statement* block; void print (std::ostream& o); void visit (visitor* u); @@ -338,6 +339,27 @@ struct delete_statement: public expr_statement }; +struct break_statement: public statement +{ + void print (std::ostream& o); + void visit (visitor* u); +}; + + +struct continue_statement: public statement +{ + void print (std::ostream& o); + void visit (visitor* u); +}; + + +struct next_statement: public statement +{ + void print (std::ostream& o); + void visit (visitor* u); +}; + + struct probe; struct stapfile { @@ -393,6 +415,9 @@ struct visitor virtual void visit_foreach_loop (foreach_loop* s) = 0; virtual void visit_return_statement (return_statement* s) = 0; virtual void visit_delete_statement (delete_statement* s) = 0; + virtual void visit_next_statement (next_statement* s) = 0; + virtual void visit_break_statement (break_statement* s) = 0; + virtual void visit_continue_statement (continue_statement* s) = 0; virtual void visit_literal_string (literal_string* e) = 0; virtual void visit_literal_number (literal_number* e) = 0; virtual void visit_binary_expression (binary_expression* e) = 0; @@ -426,6 +451,9 @@ struct traversing_visitor: public visitor void visit_foreach_loop (foreach_loop* s); void visit_return_statement (return_statement* s); void visit_delete_statement (delete_statement* s); + void visit_next_statement (next_statement* s); + void visit_break_statement (break_statement* s); + void visit_continue_statement (continue_statement* s); void visit_literal_string (literal_string* e); void visit_literal_number (literal_number* e); void visit_binary_expression (binary_expression* e); @@ -464,6 +492,9 @@ struct throwing_visitor: public visitor void visit_foreach_loop (foreach_loop* s); void visit_return_statement (return_statement* s); void visit_delete_statement (delete_statement* s); + void visit_next_statement (next_statement* s); + void visit_break_statement (break_statement* s); + void visit_continue_statement (continue_statement* s); void visit_literal_string (literal_string* e); void visit_literal_number (literal_number* e); void visit_binary_expression (binary_expression* e); |