diff options
author | fche <fche> | 2005-06-02 19:43:55 +0000 |
---|---|---|
committer | fche <fche> | 2005-06-02 19:43:55 +0000 |
commit | 69c68955b910a9f284fa25b9ebb30eff5c040e0b (patch) | |
tree | 3fa502458891d0b54150d678368f7a2dee18fa0f /staptree.h | |
parent | f37b5c92191dd81aad57ade2899a4999099a3e35 (diff) | |
download | systemtap-steved-69c68955b910a9f284fa25b9ebb30eff5c040e0b.tar.gz systemtap-steved-69c68955b910a9f284fa25b9ebb30eff5c040e0b.tar.xz systemtap-steved-69c68955b910a9f284fa25b9ebb30eff5c040e0b.zip |
2005-06-02 Frank Ch. Eigler <fche@redhat.com>
Parse foreach construct. Added fuller copyright notices throughout.
* staptree.h (foreach_loop): New tree node type.
* staptree.cxx: Print it, visit it, love it, leave it.
* parse.cxx: Parse it.
(parse_stmt_block): Don't require ";" separators between statements.
(parse_array_in): Use [] as index group operator instead of ().
* elaborate.cxx (visit_foreach_loop): New code.
* translate.cxx: Slightly tighten errorcount/actioncount handling.
* main.cxx: Accept "-" as script file name standing for stdin.
(visit_arrayindex): Switch to simpler set_arity call.
* configure.ac: Generate DATE macro.
* Makefile.in, configure, config.in: Regenerated.
* testsuite/*: New/updated tests for syntax changes, foreach ().
Diffstat (limited to 'staptree.h')
-rw-r--r-- | staptree.h | 30 |
1 files changed, 27 insertions, 3 deletions
@@ -1,6 +1,10 @@ // -*- C++ -*- -// Copyright 2005 Red Hat Inc. -// GPL +// Copyright (C) 2005 Red Hat Inc. +// +// This file is part of systemtap, and is free software. You can +// redistribute it and/or modify it under the terms of the GNU General +// Public License (GPL); either version 2, or (at your option) any +// later version. #ifndef STAPTREE_H #define STAPTREE_H @@ -124,8 +128,11 @@ struct logical_and_expr: public binary_expression }; -struct array_in: public unary_expression +struct arrayindex; +struct array_in: public expression { + arrayindex* operand; + void print (std::ostream& o); void visit (visitor* u); }; @@ -267,6 +274,7 @@ struct block: public statement void visit (visitor* u); }; + struct for_loop: public statement { expression* init; @@ -278,6 +286,19 @@ struct for_loop: public statement }; +struct foreach_loop: public statement +{ + // this part is a specialization of arrayindex + std::vector<symbol*> indexes; + std::string base; + vardecl* base_referent; + + statement* block; + void print (std::ostream& o); + void visit (visitor* u); +}; + + struct null_statement: public statement { void print (std::ostream& o); @@ -369,6 +390,7 @@ struct visitor virtual void visit_expr_statement (expr_statement *s) = 0; virtual void visit_if_statement (if_statement* s) = 0; virtual void visit_for_loop (for_loop* s) = 0; + 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_literal_string (literal_string* e) = 0; @@ -401,6 +423,7 @@ struct traversing_visitor: public visitor void visit_expr_statement (expr_statement *s); void visit_if_statement (if_statement* s); void visit_for_loop (for_loop* s); + void visit_foreach_loop (foreach_loop* s); void visit_return_statement (return_statement* s); void visit_delete_statement (delete_statement* s); void visit_literal_string (literal_string* e); @@ -438,6 +461,7 @@ struct throwing_visitor: public visitor void visit_expr_statement (expr_statement *s); void visit_if_statement (if_statement* s); void visit_for_loop (for_loop* s); + void visit_foreach_loop (foreach_loop* s); void visit_return_statement (return_statement* s); void visit_delete_statement (delete_statement* s); void visit_literal_string (literal_string* e); |