diff options
author | Frank Ch. Eigler <fche@elastic.org> | 2008-08-02 13:50:28 -0400 |
---|---|---|
committer | Frank Ch. Eigler <fche@elastic.org> | 2008-08-02 13:50:28 -0400 |
commit | 32cc940e7d1a12f3feb63fee3e7712a0a2d1e993 (patch) | |
tree | 3fc029e31aae3439ed6c3fc8172bfa6d88034254 | |
parent | f118f0abe96f2668b1969f4691dfaed36e2a8917 (diff) | |
download | systemtap-steved-32cc940e7d1a12f3feb63fee3e7712a0a2d1e993.tar.gz systemtap-steved-32cc940e7d1a12f3feb63fee3e7712a0a2d1e993.tar.xz systemtap-steved-32cc940e7d1a12f3feb63fee3e7712a0a2d1e993.zip |
c code generation: assert C indentation/nesting cancels out at appropriate points
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | translate.cxx | 11 | ||||
-rw-r--r-- | translate.h | 1 |
3 files changed, 17 insertions, 1 deletions
@@ -1,3 +1,9 @@ +2008-08-02 Frank Ch. Eigler <fche@elastic.org> + + * translate.h (translator_output::assert_0_indent): New function. + * translate.cxx (emit_*): Add a couple of calls to confirm + newline(1)/(-1) nest matching. + 2008-07-30 Dave Brolley <brolley@redhat.com> * stap-client (create_request): No need for random suffix for diff --git a/translate.cxx b/translate.cxx index c62ba9fd..c4370cc8 100644 --- a/translate.cxx +++ b/translate.cxx @@ -4713,6 +4713,7 @@ translate_pass (systemtap_session& s) s.up->emit_global_init (s.globals[i]); } s.op->newline(-1) << "};"; + s.op->assert_0_indent(); for (unsigned i=0; i<s.functions.size(); i++) { @@ -4720,6 +4721,7 @@ translate_pass (systemtap_session& s) s.op->newline(); s.up->emit_functionsig (s.functions[i]); } + s.op->assert_0_indent(); for (unsigned i=0; i<s.functions.size(); i++) { @@ -4727,6 +4729,7 @@ translate_pass (systemtap_session& s) s.op->newline(); s.up->emit_function (s.functions[i]); } + s.op->assert_0_indent(); // Run a varuse_collecting_visitor over probes that need global // variable locks. We'll use this information later in @@ -4737,18 +4740,21 @@ translate_pass (systemtap_session& s) if (s.probes[i]->needs_global_locks()) s.probes[i]->body->visit (&cup.vcv_needs_global_locks); } + s.op->assert_0_indent(); for (unsigned i=0; i<s.probes.size(); i++) { if (pending_interrupts) return 1; s.up->emit_probe (s.probes[i]); } + s.op->assert_0_indent(); s.op->newline(); s.up->emit_module_init (); + s.op->assert_0_indent(); s.op->newline(); s.up->emit_module_exit (); - + s.op->assert_0_indent(); s.op->newline(); // XXX impedance mismatch @@ -4759,17 +4765,20 @@ translate_pass (systemtap_session& s) s.op->newline() << "void probe_exit () {"; s.op->newline(1) << "systemtap_module_exit ();"; s.op->newline(-1) << "}"; + s.op->assert_0_indent(); for (unsigned i=0; i<s.globals.size(); i++) { s.op->newline(); s.up->emit_global_param (s.globals[i]); } + s.op->assert_0_indent(); emit_symbol_data (s); s.op->newline() << "MODULE_DESCRIPTION(\"systemtap-generated probe\");"; s.op->newline() << "MODULE_LICENSE(\"GPL\");"; + s.op->assert_0_indent(); } catch (const semantic_error& e) { diff --git a/translate.h b/translate.h index 6c8b4785..9921acd5 100644 --- a/translate.h +++ b/translate.h @@ -33,6 +33,7 @@ public: std::ostream& newline (int indent = 0); void indent (int indent = 0); + void assert_0_indent () { assert (tablevel == 0); } std::ostream& line(); std::ostream::pos_type tellp() { return o.tellp(); } |