summaryrefslogtreecommitdiffstats
path: root/staptree.cxx
diff options
context:
space:
mode:
authordsmith <dsmith>2006-11-06 16:05:50 +0000
committerdsmith <dsmith>2006-11-06 16:05:50 +0000
commit27f21e8c049b0cd20fd2d4e2fd9b96cad6c910cc (patch)
tree78fad282ce4f36ad50a3b944d6c659941591d5f6 /staptree.cxx
parenta90b629e6fe7420caeb0f7494f712c9664afbdc8 (diff)
downloadsystemtap-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.cxx10
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);