diff options
author | graydon <graydon> | 2005-12-02 23:28:03 +0000 |
---|---|---|
committer | graydon <graydon> | 2005-12-02 23:28:03 +0000 |
commit | 1bbeef03a440e3ac23d6e5148675450597a58e67 (patch) | |
tree | d8266f6207cce8da7bd3b4365cecc4f8f0b7e7ef /elaborate.cxx | |
parent | e94c050c150e7433518958b95c63c554ff377bb4 (diff) | |
download | systemtap-steved-1bbeef03a440e3ac23d6e5148675450597a58e67.tar.gz systemtap-steved-1bbeef03a440e3ac23d6e5148675450597a58e67.tar.xz systemtap-steved-1bbeef03a440e3ac23d6e5148675450597a58e67.zip |
2005-12-02 Graydon Hoare <graydon@redhat.com>
* elaborate.cxx (mutated_var_collector): Forward
traversal portion of calls to base class.
(mutated_var_collector::visit_arrayindex): Resolve
arrayindex-into-histogram expression as pe_long.
(typeresolution_info::visit_print_format): Traverse
into histogram if present.
* parse.cxx (parse_symbol): Handle parse ambiguity surrounding
print(@hist_op(...)[...]).
* staptree.cxx (traversing_visitor::visit_arrayindex): Visit
base member of arrayindex.
* translate.cxx (c_unparser::histogram_index_check): New method.
(var::hist): Fix bug.
(var::buckets): New method.
(stmt_expr::stmt_expr): Print with newline.
(c_unparser::load_map_indices): Handle indexing-histogram case.
(c_tmpcounter::visit_arrayindex): Likewise.
(c_unparser::visit_arrayindex): Likewise.
(c_tmpcounter_assignment::visit_arrayindex): Throw error when
user attempts to write to histogram bucket.
(c_unparser_assignment::visit_arrayindex): Likewise.
* testsuite/buildok/print_histogram_entry.stp: New test.
Diffstat (limited to 'elaborate.cxx')
-rw-r--r-- | elaborate.cxx | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/elaborate.cxx b/elaborate.cxx index ac4bd0f6..7f8a0b91 100644 --- a/elaborate.cxx +++ b/elaborate.cxx @@ -520,8 +520,7 @@ struct mutated_var_collector if (vd) mutated_vars->insert (vd); } - e->left->visit (this); - e->right->visit (this); + traversing_visitor::visit_assignment(e); } void visit_arrayindex (arrayindex *e) @@ -534,6 +533,7 @@ struct mutated_var_collector else throw semantic_error("Assignment to read-only histogram bucket", e->tok); } + traversing_visitor::visit_arrayindex (e); } }; @@ -570,6 +570,7 @@ struct no_var_mutation_during_iteration_check } } } + traversing_visitor::visit_arrayindex (e); } void visit_functioncall (functioncall* e) @@ -591,8 +592,7 @@ struct no_var_mutation_during_iteration_check } } - for (unsigned i=0; i<e->args.size(); i++) - e->args[i]->visit (this); + traversing_visitor::visit_functioncall (e); } void visit_foreach_loop(foreach_loop* s) @@ -602,9 +602,7 @@ struct no_var_mutation_during_iteration_check if (vd) vars_being_iterated.push_back (vd); - for (unsigned i=0; i<s->indexes.size(); i++) - s->indexes[i]->visit (this); - s->block->visit (this); + traversing_visitor::visit_foreach_loop (s); if (vd) vars_being_iterated.pop_back(); @@ -1594,6 +1592,11 @@ typeresolution_info::visit_arrayindex (arrayindex* e) if (e->indexes[0]->type != pe_long) unresolved (e->tok); hist->visit (this); + if (e->type != pe_long) + { + e->type = pe_long; + resolved (e->tok, pe_long); + } return; } @@ -1914,7 +1917,12 @@ typeresolution_info::visit_print_format (print_format* e) { size_t unresolved_args = 0; - if (e->print_with_format) + if (e->hist) + { + e->hist->visit(this); + } + + else if (e->print_with_format) { // If there's a format string, we can do both inference *and* // checking. |