diff options
author | Josh Stone <jistone@redhat.com> | 2009-02-05 13:08:44 -0800 |
---|---|---|
committer | Josh Stone <jistone@redhat.com> | 2009-02-10 16:45:29 -0800 |
commit | 4ed05b152284d9d4b8545f6e70c57ebdcd993f46 (patch) | |
tree | c13bd42de015fd37927b4353938bc68189676e1a /staptree.cxx | |
parent | 4b7b5c032203bec067abc74800cdd0a444395574 (diff) | |
download | systemtap-steved-4ed05b152284d9d4b8545f6e70c57ebdcd993f46.tar.gz systemtap-steved-4ed05b152284d9d4b8545f6e70c57ebdcd993f46.tar.xz systemtap-steved-4ed05b152284d9d4b8545f6e70c57ebdcd993f46.zip |
Simplify require() and provide()
* staptree.h (require, provide): Simplify stack operations with less
pointer magic, and move to be deep_copy_visitor members.
* staptree.h (deep_copy_visitor::deep_copy): Templatize
* staptree.cxx, tapsets.cxx: Refactor require/provide callers
Diffstat (limited to 'staptree.cxx')
-rw-r--r-- | staptree.cxx | 217 |
1 files changed, 82 insertions, 135 deletions
diff --git a/staptree.cxx b/staptree.cxx index cc618111..869af80a 100644 --- a/staptree.cxx +++ b/staptree.cxx @@ -2103,12 +2103,8 @@ deep_copy_visitor::visit_block (block* s) block* n = new block; n->tok = s->tok; for (unsigned i = 0; i < s->statements.size(); ++i) - { - statement* ns; - require <statement*> (this, &ns, s->statements[i]); - n->statements.push_back(ns); - } - provide <block*> (this, n); + n->statements.push_back(require (s->statements[i])); + provide (n); } void @@ -2117,7 +2113,7 @@ deep_copy_visitor::visit_embeddedcode (embeddedcode* s) embeddedcode* n = new embeddedcode; n->tok = s->tok; n->code = s->code; - provide <embeddedcode*> (this, n); + provide (n); } void @@ -2125,7 +2121,7 @@ deep_copy_visitor::visit_null_statement (null_statement* s) { null_statement* n = new null_statement; n->tok = s->tok; - provide <null_statement*> (this, n); + provide (n); } void @@ -2133,8 +2129,8 @@ deep_copy_visitor::visit_expr_statement (expr_statement* s) { expr_statement* n = new expr_statement; n->tok = s->tok; - require <expression*> (this, &(n->value), s->value); - provide <expr_statement*> (this, n); + n->value = require (s->value); + provide (n); } void @@ -2142,10 +2138,10 @@ deep_copy_visitor::visit_if_statement (if_statement* s) { if_statement* n = new if_statement; n->tok = s->tok; - require <expression*> (this, &(n->condition), s->condition); - require <statement*> (this, &(n->thenblock), s->thenblock); - require <statement*> (this, &(n->elseblock), s->elseblock); - provide <if_statement*> (this, n); + n->condition = require (s->condition); + n->thenblock = require (s->thenblock); + n->elseblock = require (s->elseblock); + provide (n); } void @@ -2153,11 +2149,11 @@ deep_copy_visitor::visit_for_loop (for_loop* s) { for_loop* n = new for_loop; n->tok = s->tok; - require <expr_statement*> (this, &(n->init), s->init); - require <expression*> (this, &(n->cond), s->cond); - require <expr_statement*> (this, &(n->incr), s->incr); - require <statement*> (this, &(n->block), s->block); - provide <for_loop*> (this, n); + n->init = require (s->init); + n->cond = require (s->cond); + n->incr = require (s->incr); + n->block = require (s->block); + provide (n); } void @@ -2166,20 +2162,16 @@ deep_copy_visitor::visit_foreach_loop (foreach_loop* s) foreach_loop* n = new foreach_loop; n->tok = s->tok; for (unsigned i = 0; i < s->indexes.size(); ++i) - { - symbol* sym; - require <symbol*> (this, &sym, s->indexes[i]); - n->indexes.push_back(sym); - } + n->indexes.push_back(require (s->indexes[i])); - require <indexable*> (this, &(n->base), s->base); + n->base = require (s->base); n->sort_direction = s->sort_direction; n->sort_column = s->sort_column; - require <expression*> (this, &(n->limit), s->limit); + n->limit = require (s->limit); - require <statement*> (this, &(n->block), s->block); - provide <foreach_loop*> (this, n); + n->block = require (s->block); + provide (n); } void @@ -2187,8 +2179,8 @@ deep_copy_visitor::visit_return_statement (return_statement* s) { return_statement* n = new return_statement; n->tok = s->tok; - require <expression*> (this, &(n->value), s->value); - provide <return_statement*> (this, n); + n->value = require (s->value); + provide (n); } void @@ -2196,8 +2188,8 @@ deep_copy_visitor::visit_delete_statement (delete_statement* s) { delete_statement* n = new delete_statement; n->tok = s->tok; - require <expression*> (this, &(n->value), s->value); - provide <delete_statement*> (this, n); + n->value = require (s->value); + provide (n); } void @@ -2205,7 +2197,7 @@ deep_copy_visitor::visit_next_statement (next_statement* s) { next_statement* n = new next_statement; n->tok = s->tok; - provide <next_statement*> (this, n); + provide (n); } void @@ -2213,7 +2205,7 @@ deep_copy_visitor::visit_break_statement (break_statement* s) { break_statement* n = new break_statement; n->tok = s->tok; - provide <break_statement*> (this, n); + provide (n); } void @@ -2221,7 +2213,7 @@ deep_copy_visitor::visit_continue_statement (continue_statement* s) { continue_statement* n = new continue_statement; n->tok = s->tok; - provide <continue_statement*> (this, n); + provide (n); } void @@ -2229,7 +2221,7 @@ deep_copy_visitor::visit_literal_string (literal_string* e) { literal_string* n = new literal_string(e->value); n->tok = e->tok; - provide <literal_string*> (this, n); + provide (n); } void @@ -2237,7 +2229,7 @@ deep_copy_visitor::visit_literal_number (literal_number* e) { literal_number* n = new literal_number(e->value); n->tok = e->tok; - provide <literal_number*> (this, n); + provide (n); } void @@ -2246,9 +2238,9 @@ deep_copy_visitor::visit_binary_expression (binary_expression* e) binary_expression* n = new binary_expression; n->op = e->op; n->tok = e->tok; - require <expression*> (this, &(n->left), e->left); - require <expression*> (this, &(n->right), e->right); - provide <binary_expression*> (this, n); + n->left = require (e->left); + n->right = require (e->right); + provide (n); } void @@ -2257,8 +2249,8 @@ deep_copy_visitor::visit_unary_expression (unary_expression* e) unary_expression* n = new unary_expression; n->op = e->op; n->tok = e->tok; - require <expression*> (this, &(n->operand), e->operand); - provide <unary_expression*> (this, n); + n->operand = require (e->operand); + provide (n); } void @@ -2267,8 +2259,8 @@ deep_copy_visitor::visit_pre_crement (pre_crement* e) pre_crement* n = new pre_crement; n->op = e->op; n->tok = e->tok; - require <expression*> (this, &(n->operand), e->operand); - provide <pre_crement*> (this, n); + n->operand = require (e->operand); + provide (n); } void @@ -2277,8 +2269,8 @@ deep_copy_visitor::visit_post_crement (post_crement* e) post_crement* n = new post_crement; n->op = e->op; n->tok = e->tok; - require <expression*> (this, &(n->operand), e->operand); - provide <post_crement*> (this, n); + n->operand = require (e->operand); + provide (n); } @@ -2288,9 +2280,9 @@ deep_copy_visitor::visit_logical_or_expr (logical_or_expr* e) logical_or_expr* n = new logical_or_expr; n->op = e->op; n->tok = e->tok; - require <expression*> (this, &(n->left), e->left); - require <expression*> (this, &(n->right), e->right); - provide <logical_or_expr*> (this, n); + n->left = require (e->left); + n->right = require (e->right); + provide (n); } void @@ -2299,9 +2291,9 @@ deep_copy_visitor::visit_logical_and_expr (logical_and_expr* e) logical_and_expr* n = new logical_and_expr; n->op = e->op; n->tok = e->tok; - require <expression*> (this, &(n->left), e->left); - require <expression*> (this, &(n->right), e->right); - provide <logical_and_expr*> (this, n); + n->left = require (e->left); + n->right = require (e->right); + provide (n); } void @@ -2309,8 +2301,8 @@ deep_copy_visitor::visit_array_in (array_in* e) { array_in* n = new array_in; n->tok = e->tok; - require <arrayindex*> (this, &(n->operand), e->operand); - provide <array_in*> (this, n); + n->operand = require (e->operand); + provide (n); } void @@ -2319,9 +2311,9 @@ deep_copy_visitor::visit_comparison (comparison* e) comparison* n = new comparison; n->op = e->op; n->tok = e->tok; - require <expression*> (this, &(n->left), e->left); - require <expression*> (this, &(n->right), e->right); - provide <comparison*> (this, n); + n->left = require (e->left); + n->right = require (e->right); + provide (n); } void @@ -2330,9 +2322,9 @@ deep_copy_visitor::visit_concatenation (concatenation* e) concatenation* n = new concatenation; n->op = e->op; n->tok = e->tok; - require <expression*> (this, &(n->left), e->left); - require <expression*> (this, &(n->right), e->right); - provide <concatenation*> (this, n); + n->left = require (e->left); + n->right = require (e->right); + provide (n); } void @@ -2340,10 +2332,10 @@ deep_copy_visitor::visit_ternary_expression (ternary_expression* e) { ternary_expression* n = new ternary_expression; n->tok = e->tok; - require <expression*> (this, &(n->cond), e->cond); - require <expression*> (this, &(n->truevalue), e->truevalue); - require <expression*> (this, &(n->falsevalue), e->falsevalue); - provide <ternary_expression*> (this, n); + n->cond = require (e->cond); + n->truevalue = require (e->truevalue); + n->falsevalue = require (e->falsevalue); + provide (n); } void @@ -2352,9 +2344,9 @@ deep_copy_visitor::visit_assignment (assignment* e) assignment* n = new assignment; n->op = e->op; n->tok = e->tok; - require <expression*> (this, &(n->left), e->left); - require <expression*> (this, &(n->right), e->right); - provide <assignment*> (this, n); + n->left = require (e->left); + n->right = require (e->right); + provide (n); } void @@ -2364,7 +2356,7 @@ deep_copy_visitor::visit_symbol (symbol* e) n->tok = e->tok; n->name = e->name; n->referent = NULL; - provide <symbol*> (this, n); + provide (n); } void @@ -2374,7 +2366,7 @@ deep_copy_visitor::visit_target_symbol (target_symbol* e) n->tok = e->tok; n->base_name = e->base_name; n->components = e->components; - provide <target_symbol*> (this, n); + provide (n); } void @@ -2383,15 +2375,11 @@ deep_copy_visitor::visit_arrayindex (arrayindex* e) arrayindex* n = new arrayindex; n->tok = e->tok; - require <indexable*> (this, &(n->base), e->base); + n->base = require (e->base); for (unsigned i = 0; i < e->indexes.size(); ++i) - { - expression* ne; - require <expression*> (this, &ne, e->indexes[i]); - n->indexes.push_back(ne); - } - provide <arrayindex*> (this, n); + n->indexes.push_back(require (e->indexes[i])); + provide (n); } void @@ -2402,12 +2390,8 @@ deep_copy_visitor::visit_functioncall (functioncall* e) n->function = e->function; n->referent = NULL; for (unsigned i = 0; i < e->args.size(); ++i) - { - expression* na; - require <expression*> (this, &na, e->args[i]); - n->args.push_back(na); - } - provide <functioncall*> (this, n); + n->args.push_back(require (e->args[i])); + provide (n); } void @@ -2424,14 +2408,10 @@ deep_copy_visitor::visit_print_format (print_format* e) n->components = e->components; n->delimiter = e->delimiter; for (unsigned i = 0; i < e->args.size(); ++i) - { - expression* na; - require <expression*> (this, &na, e->args[i]); - n->args.push_back(na); - } + n->args.push_back(require (e->args[i])); if (e->hist) - require <hist_op*> (this, &n->hist, e->hist); - provide <print_format*> (this, n); + n->hist = require (e->hist); + provide (n); } void @@ -2440,8 +2420,8 @@ deep_copy_visitor::visit_stat_op (stat_op* e) stat_op* n = new stat_op; n->tok = e->tok; n->ctype = e->ctype; - require <expression*> (this, &(n->stat), e->stat); - provide <stat_op*> (this, n); + n->stat = require (e->stat); + provide (n); } void @@ -2451,61 +2431,28 @@ deep_copy_visitor::visit_hist_op (hist_op* e) n->tok = e->tok; n->htype = e->htype; n->params = e->params; - require <expression*> (this, &(n->stat), e->stat); - provide <hist_op*> (this, n); -} - -block* -deep_copy_visitor::deep_copy (block* b) -{ - block* n; - deep_copy_visitor v; - require <block*> (&v, &n, b); - return n; -} - -statement* -deep_copy_visitor::deep_copy (statement* s) -{ - statement* n; - deep_copy_visitor v; - require <statement*> (&v, &n, s); - return n; -} - -expression* -deep_copy_visitor::deep_copy (expression* s) -{ - expression* n; - deep_copy_visitor v; - require <expression*> (&v, &n, s); - return n; + n->stat = require (e->stat); + provide (n); } -template <> void -require <indexable *> (deep_copy_visitor* v, indexable** dst, indexable* src) +template <> indexable* +deep_copy_visitor::require <indexable*> (indexable* src) { + indexable *dst = NULL; if (src != NULL) { - symbol *array_src=NULL, *array_dst=NULL; - hist_op *hist_src=NULL, *hist_dst=NULL; + symbol *array_src=NULL; + hist_op *hist_src=NULL; classify_indexable(src, array_src, hist_src); - *dst = NULL; - if (array_src) - { - require <symbol*> (v, &array_dst, array_src); - *dst = array_dst; - } + dst = require (array_src); else - { - require <hist_op*> (v, &hist_dst, hist_src); - *dst = hist_dst; - } - assert (*dst); + dst = require (hist_src); + assert (dst); } + return dst; } /* vim: set sw=2 ts=8 cino=>4,n-2,{2,^-2,t0,(0,u0,w1,M1 : */ |