From 6e213f58c493be12eeb4f1532da3891c7baafbd5 Mon Sep 17 00:00:00 2001 From: dsmith Date: Tue, 16 May 2006 18:51:34 +0000 Subject: 2006-05-16 David Smith * parse.cxx (parser::parser): Added initializer for 'context' member variable. (tt2str): Added support for new tok_keyword type. (operator <<): Ignores keyword content when outputting error message. (lexer::scan): Recognizes keywords, such as 'probe', 'global', 'function', etc. and classifies them as type 'tok_keyword'. This causes keywords to become reserved so they cannot be used for function names, variable names, etc. (parser::parse): Changed tok_identifier to tok_keyword when looking for "probe", "global", or "function". Also sets context member variable which remembers if we're in probe, global, function, or embedded context. (parser::parse_probe, parser::parse_statement) (parser::parse_global, parser::parse_functiondecl) (parser::parse_if_statement, parser::parse_delete_statement) (parser::parse_break_statement, parser::parse_continue_statement) (parser::parse_for_loop, parser::parse_while_loop) (parser::parse_foreach_loop, parser::parse_array_in): Looks for tok_keyword instead of tok_identifier. (parser::parse_probe_point): Allows keywords as part of a probe name, since "return" and "function" are keywords. (parser::parse_return_statement): Looks for tok_keyword instead of tok_identifier. Make sure we're in function context. (parser::parse_next_statement): Looks for tok_keyword instead of tok_identifier. Make sure we're in probe context. * parse.h: Added parse_context enum. Added 'tok_keyword' to token_type enum. Added parse_context 'context' member variable to parser class. * stap.1.in: Because the string() function has been removed, the 'string()' function reference has been changed to a 'sprint()' function reference. * stapex.5.in: Ditto. * stapfuncs.5.in: The description of the string() and hexstring() functions has been removed. * testsuite/buildok/context_test.stp: Calls to the string() function were converted to sprint() function calls. * testsuite/buildok/fifteen.stp: Ditto. * testsuite/buildok/nineteen.stp: Ditto. * testsuite/buildok/process_test.stp: Ditto. * testsuite/buildok/task_test.stp: Ditto. * testsuite/buildok/timestamp.stp: Ditto. * testsuite/buildok/twentyone.stp: Ditto. * testsuite/semok/args.stp: Ditto. * testsuite/semok/seven.stp: Ditto. * testsuite/buildok/fourteen.stp: Calls to log()/string() were converted to a call to printf(). * testsuite/buildok/sixteen.stp: Ditto. * testsuite/buildok/thirteen.stp: Ditto. * testsuite/buildok/twentythree.stp: Ditto. * testsuite/buildok/twentytwo.stp: Ditto. * testsuite/buildok/seven.stp: Calls to the string() function were converted to sprint() calls. Calls to the hexstring() function were converted to sprintf() calls. * testsuite/semok/eleven.stp: Ditto. * testsuite/buildok/seventeen.stp: Calls to log()/hexstring() were converted to a call to printf(). * testsuite/semko/nineteen.stp: Ditto. * testsuite/parseok/three.stp: Because keywords are reserved, a variable named 'string' was renamed to 'str'. * testsuite/parseok/two.stp: Because keywords are reserved, a variable named 'global' was renamed to 'gbl'. * testsuite/transko/two.stp: Because the parser now checks for 'next' and 'return' statement context, a 'next' statement was removed from a function and a 'return' statement was removed from a probe. --- testsuite/semok/args.stp | 2 +- testsuite/semok/eleven.stp | 10 ++++------ testsuite/semok/seven.stp | 5 ++--- 3 files changed, 7 insertions(+), 10 deletions(-) (limited to 'testsuite/semok') diff --git a/testsuite/semok/args.stp b/testsuite/semok/args.stp index 00475625..98112088 100755 --- a/testsuite/semok/args.stp +++ b/testsuite/semok/args.stp @@ -1,3 +1,3 @@ #! /bin/sh -./stap -p2 -e 'probe begin { log (@1 . string($2)) }' hello 0xdeadbeef +./stap -p2 -e 'probe begin { log (@1 . sprint($2)) }' hello 0xdeadbeef diff --git a/testsuite/semok/eleven.stp b/testsuite/semok/eleven.stp index e5e3c01c..93550bd5 100755 --- a/testsuite/semok/eleven.stp +++ b/testsuite/semok/eleven.stp @@ -3,8 +3,6 @@ global entry_time, my_count, my_fd, read_times # future built-ins -function string (v) { return "" } -function hexstring (v) { return "" } function trace (s) { return 0 } global tid @@ -16,8 +14,8 @@ probe begin /* kernel.function("read") */ { entry_time[tid] = timestamp # "macro" variable my_count[tid] = count # function argument my_fd[tid] = fd # function argument - trace ("my_count = " . string(my_count[tid]) . - "my_fd = " . string(my_fd[tid])) + trace ("my_count = " . sprint(my_count[tid]) . + "my_fd = " . sprint(my_fd[tid])) } probe end /* kernel.function("read").return */ { @@ -30,13 +28,13 @@ probe end /* kernel.function("read").return */ { } trace ("syscall " . (syscall_name) . " return value = " . - hexstring (retvalue)) # function pseudo-argument + sprintf ("0x%x", retvalue)) # function pseudo-argument } probe end { foreach (syscall in read_times) { trace ("syscall " . syscall . - " total-time=" . string (read_times[syscall])) + " total-time=" . sprint (read_times[syscall])) } } diff --git a/testsuite/semok/seven.stp b/testsuite/semok/seven.stp index f0b248bd..2ceed4e8 100755 --- a/testsuite/semok/seven.stp +++ b/testsuite/semok/seven.stp @@ -2,7 +2,6 @@ global ar1, ar2 -function string:string (v:long) { } # to become a built-in function printk (s:string) { return 0 } # to become a built-in function search (key) @@ -18,7 +17,7 @@ probe begin /* syscall("zamboni") */ tgid=0 pid=0 tid=0 - ar2[tid] = string (tgid); + ar2[tid] = sprint (tgid); search (pid) } @@ -26,5 +25,5 @@ probe end { # for (key in ar2) if (key in ar2) - printk ("this: " . string (key) . " was " . ar2[key]) + printk ("this: " . sprint (key) . " was " . ar2[key]) } -- cgit