aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2010-02-23 16:00:14 +1100
committerRob Pike <r@golang.org>2010-02-23 16:00:14 +1100
commit38202de114b6cf25f4ad900f64cd73bf24147484 (patch)
tree136a5d12cd85abf3167e04b9d1fcacc1be72d134
parent8ba5c5593f1a95e850143c46108d830ecd228c09 (diff)
downloadgo-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.go22
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)