summaryrefslogtreecommitdiffstats
path: root/staptree.cxx
diff options
context:
space:
mode:
authorJosh Stone <jistone@redhat.com>2009-02-05 13:08:44 -0800
committerJosh Stone <jistone@redhat.com>2009-02-10 16:45:29 -0800
commit4ed05b152284d9d4b8545f6e70c57ebdcd993f46 (patch)
treec13bd42de015fd37927b4353938bc68189676e1a /staptree.cxx
parent4b7b5c032203bec067abc74800cdd0a444395574 (diff)
downloadsystemtap-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.cxx217
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 : */