diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | main.cxx | 2 | ||||
-rw-r--r-- | parse.cxx | 22 | ||||
-rwxr-xr-x | testsuite/parseko/nine.stp | 4 | ||||
-rwxr-xr-x | testsuite/parseok/four.stp | 9 |
5 files changed, 38 insertions, 5 deletions
@@ -1,3 +1,9 @@ +2005-06-03 Frank Ch. Eigler <fche@redhat.com> + + * parse.cxx (scan): Support C and C++ comment styles. + * testsuite/parseok/four.stp: Test them some ... + * testsuite/parseko/nine.stp: ... and some more. + 2005-06-02 Frank Ch. Eigler <fche@redhat.com> * translate.cxx (visit_concatenation, visit_binary_expression): @@ -40,7 +40,7 @@ void usage () cerr << " -p NUM\tStop after pass NUM 1-3" << endl; cerr << " \t(parse, elaborate, translate)" << endl; cerr << " -I DIR\tLook in DIR for additional .stp script files." << endl; - cerr << " -o FILE\tSend translator output to file instead of stdout." << endl; + cerr << " -o FILE\tSend output to file instead of stdout." << endl; // XXX: other options: // -s: safe mode // -d: dump safety-related external references @@ -253,13 +253,33 @@ lexer::scan () { int c2 = input.peek (); - if (c == '#') // comment to end-of-line + if (c == '#') // shell comment { unsigned this_line = cursor_line; while (input && cursor_line == this_line) input_get (); goto skip; } + else if (c == '/' && c2 == '/') // C++ comment + { + unsigned this_line = cursor_line; + while (input && cursor_line == this_line) + input_get (); + goto skip; + } + else if (c == '/' && c2 == '*') // C comment + { + c2 = input_get (); + unsigned chars = 0; + while (input) + { + chars ++; // track this to prevent "/*/" from being accepted + c = c2; + c2 = input_get (); + if (chars > 1 && c == '*' && c2 == '/') + goto skip; + } + } n->type = tok_operator; n->content = (char) c; diff --git a/testsuite/parseko/nine.stp b/testsuite/parseko/nine.stp new file mode 100755 index 00000000..438824cb --- /dev/null +++ b/testsuite/parseko/nine.stp @@ -0,0 +1,4 @@ +#! stap -p1 +probe foo { + /*/ 0 +} diff --git a/testsuite/parseok/four.stp b/testsuite/parseok/four.stp index 39c9ebd4..9d7a8729 100755 --- a/testsuite/parseok/four.stp +++ b/testsuite/parseok/four.stp @@ -1,7 +1,10 @@ #! stap -p1 probe syscall ("foo").foo.bar , syscall ("bar"), syscall ("*").return -{ - $a = a$a = a$a$ = 0; +{ # no comment + $a = /* comment */ a$a = /**/ a$a$ = 0; // more comment } - +/* empty comment lines */ +/**/ +# +// |