From bb788f9f3b8c22489a5dc5659a935e272b0e9b64 Mon Sep 17 00:00:00 2001 From: fche Date: Wed, 24 Aug 2005 17:01:52 +0000 Subject: 2005-08-24 Frank Ch. Eigler * tapsets.cxx (*::emit_probe_entries): Treat NULL and "" last_errors both as clean early returns, not errors. * translate.cxx: Revamp last_error handling logic. Remove all "goto out" paths from expression context. (visit_statement): Handle last_error exit one nesting level at a time. (visit_return_statement, visit_functioncall): Set/reset last_error="". (c_tmpcounter::visit_for_loop): New routine. (c_unparser::visit_foreach, visit_for_loop): Rewrite to properly support continue/breaks, non-local exits, (foreach) locks. (emit_global): Emit lock variable. (varlock ctor, dtor): Lock/unlock global variable. (varlock_w, varlock_r): New concrete subclasses. Update all users. * tapset/builtin_logging.stp (exit): Don't set last_error. * src/testsuite/buildok/sixteen.stp: New test. * tapsets.cxx: Temporarily rolled back graydon's changes. --- testsuite/buildok/sixteen.stp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100755 testsuite/buildok/sixteen.stp (limited to 'testsuite') diff --git a/testsuite/buildok/sixteen.stp b/testsuite/buildok/sixteen.stp new file mode 100755 index 00000000..26932b8e --- /dev/null +++ b/testsuite/buildok/sixteen.stp @@ -0,0 +1,21 @@ +#! stap -p4 + +global a + +function foo () { + if (a[k] == "sayonara") { return 2 } +} + + +probe begin { + a[1] = "hello" + a[2] = "goodbye" + foreach (k in a) { + log (a[k]) + for (i=0; i<10; i++) { + log ("k=" . string(k) . " i=" . string(i)) + if (k % (i+1)) break else continue + } + if (k % 3) { foo() ; next } + } +} -- cgit