From 27f21e8c049b0cd20fd2d4e2fd9b96cad6c910cc Mon Sep 17 00:00:00 2001 From: dsmith Date: Mon, 6 Nov 2006 16:05:50 +0000 Subject: 2006-11-06 David Smith 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. --- staptree.cxx | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'staptree.cxx') 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; iindexes.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 (this, &(n->limit), s->limit); require (this, &(n->block), s->block); provide (this, n); -- cgit