summaryrefslogtreecommitdiffstats
path: root/staptree.h
diff options
context:
space:
mode:
authorgraydon <graydon>2005-10-20 22:11:33 +0000
committergraydon <graydon>2005-10-20 22:11:33 +0000
commit57b73400d06052b179335059c2f440350fd28c99 (patch)
tree1fe125be909fd23d7591f63f96dd66018400b1ac /staptree.h
parentf6f492468e2dfec286e3611e3e38ad070c91ae9d (diff)
downloadsystemtap-steved-57b73400d06052b179335059c2f440350fd28c99.tar.gz
systemtap-steved-57b73400d06052b179335059c2f440350fd28c99.tar.xz
systemtap-steved-57b73400d06052b179335059c2f440350fd28c99.zip
2005-10-20 Graydon Hoare <graydon@redhat.com>
PR 917 (incomplete) * staptree.h (struct statistic_decl): New struct. (stapfile::stat_decls): New member. * parse.h, parse.cxx (parser::expect_known): Fix typo. (parser::expect_number): New method. (parser::parse_global): Parse global statistic_decls. * elaborate.h (systemtap_session::stat_decls): New member. * elaborate.cxx (semantic_pass_symbols): Copy per-file stat_decls to session-wide. (typeresolution_info::visit_assignment): Detect some semantic stats errors in type resolution pass. * translate.cxx (var::sd): New private member. (var::var): Initialize it. (var::sdecl): New accessor. (var::init): Handle stats values. (mapvar::mapvar): Pass through statistic_decl to var ctor. (mapvar::get): Test for long explicitly. (mapvar::set): Likewise. (mapvar::init): Handle stats values. (c_unparser::emit_common_header): Remove typedef of stats_t, include stat.c when necessary. (mapvar::key_typename): Typo. (c_unparser::emit_map_type_instantiations): Thinko: value_typename not key_typename. (c_unparser::c_typename): Implementation typename is "Stat", not "stats_t". (c_unparser::c_assign): Fix bad error message. (c_unparser_assignment::c_assignop): Handle operator <<<. (c_unparser::getvar): Feed session statistic_decl into var. (c_unparser::getmap): Likewise. (c_unparser::visit_assignment): Handle operator <<<. (c_tmpcounter_assignment::visit_symbol): Derive type from rvalue when present. (c_unparser_assignment::visit_symbol) (c_tmpcounter_assignment::visit_arrayindex) (c_unparser_assignment::load_map_indices): Likewise. (c_unparser::visit_arrayindex): Likewise, and Prohibit statistic rvalues. (c_unparser_assignment::visit_arrayindex): Handle operator <<<. * testsuite/semko/twentyfour.stp: * testsuite/semko/twentyfive.stp: * testsuite/semko/twentysix.stp: * testsuite/semko/twentyseven.stp: * testsuite/semko/twentyeight.stp: * testsuite/semko/twentynine.stp: * testsuite/semko/thirty.stp: * testsuite/semko/thirtyone.stp: New tests for prohibited statistic contexts. * testsuite/buildok/twentytwo.stp: New test for legal statistic contexts.
Diffstat (limited to 'staptree.h')
-rw-r--r--staptree.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/staptree.h b/staptree.h
index 8bc901d5..072cc2e2 100644
--- a/staptree.h
+++ b/staptree.h
@@ -9,6 +9,7 @@
#ifndef STAPTREE_H
#define STAPTREE_H
+#include <map>
#include <stack>
#include <string>
#include <vector>
@@ -35,7 +36,23 @@ struct semantic_error: public std::runtime_error
runtime_error (msg), tok1 (t1), msg2 (m2), tok2 (t2) {}
};
+// ------------------------------------------------------------------------
+struct statistic_decl
+{
+ statistic_decl()
+ : type(none),
+ logarithmic_buckets(0),
+ linear_low(0), linear_high(0), linear_step(0)
+ {}
+ enum { none, linear, logarithmic } type;
+ int64_t logarithmic_buckets;
+ int64_t linear_low;
+ int64_t linear_high;
+ int64_t linear_step;
+};
+
+// ------------------------------------------------------------------------
enum exp_type
{
@@ -392,6 +409,7 @@ struct stapfile
std::vector<functiondecl*> functions;
std::vector<vardecl*> globals;
std::vector<embeddedcode*> embeds;
+ std::map<std::string, statistic_decl> stat_decls;
bool privileged;
stapfile (): privileged (false) {}
void print (std::ostream& o) const;