diff options
author | dsmith <dsmith> | 2006-11-06 16:05:50 +0000 |
---|---|---|
committer | dsmith <dsmith> | 2006-11-06 16:05:50 +0000 |
commit | 27f21e8c049b0cd20fd2d4e2fd9b96cad6c910cc (patch) | |
tree | 78fad282ce4f36ad50a3b944d6c659941591d5f6 /staptree.cxx | |
parent | a90b629e6fe7420caeb0f7494f712c9664afbdc8 (diff) | |
download | systemtap-steved-27f21e8c049b0cd20fd2d4e2fd9b96cad6c910cc.tar.gz systemtap-steved-27f21e8c049b0cd20fd2d4e2fd9b96cad6c910cc.tar.xz systemtap-steved-27f21e8c049b0cd20fd2d4e2fd9b96cad6c910cc.zip |
2006-11-06 David Smith <dsmith@redhat.com>
Added "limit EXP" support to foreach statements.
* translate.cxx (c_tmpcounter::visit_foreach_loop): Handles
"limit" member variable.
(c_unparser::visit_foreach_loop): Ditto.
* staptree.cxx (foreach_loop::print): Prints "limit EXP"
addition.
(traversing_visitor::visit_foreach_loop): Handles "limit" member
variable.
(deep_copy_visitor::visit_foreach_loop): Ditto.
* staptree.h (struct foreach_loop): Added "limit" member
variable.
* stap.1.in: Added documentation for the "limit EXP" addition to
foreach statement.
* parse.cxx (lexer::scan): Added "limit" keyword for foreach
statements.
(parser::parse_foreach_loop): Parses "limit" keyword for foreach
statements.
* elaborate.cxx (symresolution_info::visit_foreach_loop): Handles
"limit" member variable.
(typeresolution_info::visit_foreach_loop): Ditto.
Diffstat (limited to 'staptree.cxx')
-rw-r--r-- | staptree.cxx | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/staptree.cxx b/staptree.cxx index 36712c12..fdfc516c 100644 --- a/staptree.cxx +++ b/staptree.cxx @@ -752,6 +752,11 @@ void foreach_loop::print (ostream& o) const base->print_indexable (o); if (sort_direction != 0 && sort_column == 0) o << (sort_direction > 0 ? "+" : "-"); + if (limit) + { + o << " limit "; + limit->print (o); + } o << ") "; block->print (o); } @@ -1320,6 +1325,10 @@ traversing_visitor::visit_foreach_loop (foreach_loop* s) for (unsigned i=0; i<s->indexes.size(); i++) s->indexes[i]->visit (this); + + if (s->limit) + s->limit->visit (this); + s->block->visit (this); } @@ -1965,6 +1974,7 @@ deep_copy_visitor::visit_foreach_loop (foreach_loop* s) n->sort_direction = s->sort_direction; n->sort_column = s->sort_column; + require <expression*> (this, &(n->limit), s->limit); require <statement*> (this, &(n->block), s->block); provide <foreach_loop*> (this, n); |