diff options
author | Rob Pike <r@golang.org> | 2010-02-23 16:00:14 +1100 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2010-02-23 16:00:14 +1100 |
commit | 38202de114b6cf25f4ad900f64cd73bf24147484 (patch) | |
tree | 136a5d12cd85abf3167e04b9d1fcacc1be72d134 | |
parent | 8ba5c5593f1a95e850143c46108d830ecd228c09 (diff) | |
download | go-38202de114b6cf25f4ad900f64cd73bf24147484.tar.gz go-38202de114b6cf25f4ad900f64cd73bf24147484.zip |
goyacc: fix handling of / and comments in goyacc
Fixes #618.
R=rsc
CC=golang-dev
https://golang.org/cl/217094
-rw-r--r-- | src/cmd/goyacc/goyacc.go | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/cmd/goyacc/goyacc.go b/src/cmd/goyacc/goyacc.go index 4e4819b40b..4d9a515a60 100644 --- a/src/cmd/goyacc/goyacc.go +++ b/src/cmd/goyacc/goyacc.go @@ -1352,13 +1352,31 @@ loop: return case '/': + nc := getrune(finput) + if nc != '/' && nc != '*' { + ungetrune(finput, nc) + break + } // a comment putrune(ftable, c) + putrune(ftable, nc) c = getrune(finput) for c != EOF { - if c == '\n' { + switch { + case c == '\n': lineno++ - break swt + if nc == '/' { // end of // comment + break swt + } + case c == '*' && nc == '*': // end of /* comment? + nnc := getrune(finput) + if nnc == '/' { + putrune(ftable, '*') + putrune(ftable, '/') + c = getrune(finput) + break swt + } + ungetrune(finput, nnc) } putrune(ftable, c) c = getrune(finput) |