aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/syntax/scanner_test.go
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2016-11-29 16:13:09 -0800
committerRobert Griesemer <gri@golang.org>2016-12-09 00:42:42 +0000
commit8d20b25779d4ce32e8eaeb52374fba1e74f7df57 (patch)
tree1dd10782d5b321986850604da0bc743789ee31b8 /src/cmd/compile/internal/syntax/scanner_test.go
parenteaca0e0529b780f4c862a97aa47008aa1b403adf (diff)
downloadgo-8d20b25779d4ce32e8eaeb52374fba1e74f7df57.tar.gz
go-8d20b25779d4ce32e8eaeb52374fba1e74f7df57.zip
[dev.inline] cmd/compile/internal/syntax: introduce general position info for nodes
Reviewed in and cherry-picked from https://go-review.googlesource.com/#/c/33758/. Minor adjustments in noder.go to fix merge. Change-Id: Ibe429e327c7f8554f8ac205c61ce3738013aed98 Reviewed-on: https://go-review.googlesource.com/34231 Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src/cmd/compile/internal/syntax/scanner_test.go')
-rw-r--r--src/cmd/compile/internal/syntax/scanner_test.go117
1 files changed, 59 insertions, 58 deletions
diff --git a/src/cmd/compile/internal/syntax/scanner_test.go b/src/cmd/compile/internal/syntax/scanner_test.go
index 0e81c4e613..4c00ddc5d6 100644
--- a/src/cmd/compile/internal/syntax/scanner_test.go
+++ b/src/cmd/compile/internal/syntax/scanner_test.go
@@ -56,7 +56,7 @@ func TestTokens(t *testing.T) {
for i, want := range sampleTokens {
nlsemi := false
- if got.line != i+1 {
+ if got.line != uint(i+1) {
t.Errorf("got line %d; want %d", got.line, i+1)
}
@@ -256,69 +256,69 @@ var sampleTokens = [...]struct {
func TestScanErrors(t *testing.T) {
for _, test := range []struct {
src, msg string
- pos, line int
+ line, col uint
}{
// Note: Positions for lexical errors are the earliest position
// where the error is apparent, not the beginning of the respective
// token.
// rune-level errors
- {"fo\x00o", "invalid NUL character", 2, 1},
- {"foo\n\ufeff bar", "invalid BOM in the middle of the file", 4, 2},
- {"foo\n\n\xff ", "invalid UTF-8 encoding", 5, 3},
+ {"fo\x00o", "invalid NUL character", 1, 3},
+ {"foo\n\ufeff bar", "invalid BOM in the middle of the file", 2, 1},
+ {"foo\n\n\xff ", "invalid UTF-8 encoding", 3, 1},
// token-level errors
- {"x + ~y", "bitwise complement operator is ^", 4, 1},
- {"foo$bar = 0", "illegal character U+0024 '$'", 3, 1},
- {"const x = 0xyz", "malformed hex constant", 12, 1},
- {"0123456789", "malformed octal constant", 10, 1},
- {"0123456789. /* foobar", "comment not terminated", 12, 1}, // valid float constant
- {"0123456789e0 /*\nfoobar", "comment not terminated", 13, 1}, // valid float constant
- {"var a, b = 08, 07\n", "malformed octal constant", 13, 1},
- {"(x + 1.0e+x)", "malformed floating-point constant exponent", 10, 1},
-
- {`''`, "empty character literal or unescaped ' in character literal", 1, 1},
- {"'\n", "newline in character literal", 1, 1},
- {`'\`, "missing '", 2, 1},
- {`'\'`, "missing '", 3, 1},
- {`'\x`, "missing '", 3, 1},
- {`'\x'`, "non-hex character in escape sequence: '", 3, 1},
- {`'\y'`, "unknown escape sequence", 2, 1},
- {`'\x0'`, "non-hex character in escape sequence: '", 4, 1},
- {`'\00'`, "non-octal character in escape sequence: '", 4, 1},
- {`'\377' /*`, "comment not terminated", 7, 1}, // valid octal escape
- {`'\378`, "non-octal character in escape sequence: 8", 4, 1},
- {`'\400'`, "octal escape value > 255: 256", 5, 1},
- {`'xx`, "missing '", 2, 1},
-
- {"\"\n", "newline in string", 1, 1},
- {`"`, "string not terminated", 0, 1},
- {`"foo`, "string not terminated", 0, 1},
- {"`", "string not terminated", 0, 1},
- {"`foo", "string not terminated", 0, 1},
- {"/*/", "comment not terminated", 0, 1},
- {"/*\n\nfoo", "comment not terminated", 0, 1},
- {"/*\n\nfoo", "comment not terminated", 0, 1},
- {`"\`, "string not terminated", 0, 1},
- {`"\"`, "string not terminated", 0, 1},
- {`"\x`, "string not terminated", 0, 1},
- {`"\x"`, "non-hex character in escape sequence: \"", 3, 1},
- {`"\y"`, "unknown escape sequence", 2, 1},
- {`"\x0"`, "non-hex character in escape sequence: \"", 4, 1},
- {`"\00"`, "non-octal character in escape sequence: \"", 4, 1},
- {`"\377" /*`, "comment not terminated", 7, 1}, // valid octal escape
- {`"\378"`, "non-octal character in escape sequence: 8", 4, 1},
- {`"\400"`, "octal escape value > 255: 256", 5, 1},
-
- {`s := "foo\z"`, "unknown escape sequence", 10, 1},
- {`s := "foo\z00\nbar"`, "unknown escape sequence", 10, 1},
- {`"\x`, "string not terminated", 0, 1},
- {`"\x"`, "non-hex character in escape sequence: \"", 3, 1},
- {`var s string = "\x"`, "non-hex character in escape sequence: \"", 18, 1},
- {`return "\Uffffffff"`, "escape sequence is invalid Unicode code point", 18, 1},
+ {"x + ~y", "bitwise complement operator is ^", 1, 5},
+ {"foo$bar = 0", "illegal character U+0024 '$'", 1, 4},
+ {"const x = 0xyz", "malformed hex constant", 1, 13},
+ {"0123456789", "malformed octal constant", 1, 11},
+ {"0123456789. /* foobar", "comment not terminated", 1, 13}, // valid float constant
+ {"0123456789e0 /*\nfoobar", "comment not terminated", 1, 14}, // valid float constant
+ {"var a, b = 08, 07\n", "malformed octal constant", 1, 14},
+ {"(x + 1.0e+x)", "malformed floating-point constant exponent", 1, 11},
+
+ {`''`, "empty character literal or unescaped ' in character literal", 1, 2},
+ {"'\n", "newline in character literal", 1, 2},
+ {`'\`, "missing '", 1, 3},
+ {`'\'`, "missing '", 1, 4},
+ {`'\x`, "missing '", 1, 4},
+ {`'\x'`, "non-hex character in escape sequence: '", 1, 4},
+ {`'\y'`, "unknown escape sequence", 1, 3},
+ {`'\x0'`, "non-hex character in escape sequence: '", 1, 5},
+ {`'\00'`, "non-octal character in escape sequence: '", 1, 5},
+ {`'\377' /*`, "comment not terminated", 1, 8}, // valid octal escape
+ {`'\378`, "non-octal character in escape sequence: 8", 1, 5},
+ {`'\400'`, "octal escape value > 255: 256", 1, 6},
+ {`'xx`, "missing '", 1, 3},
+
+ {"\"\n", "newline in string", 1, 2},
+ {`"`, "string not terminated", 1, 1},
+ {`"foo`, "string not terminated", 1, 1},
+ {"`", "string not terminated", 1, 1},
+ {"`foo", "string not terminated", 1, 1},
+ {"/*/", "comment not terminated", 1, 1},
+ {"/*\n\nfoo", "comment not terminated", 1, 1},
+ {"/*\n\nfoo", "comment not terminated", 1, 1},
+ {`"\`, "string not terminated", 1, 1},
+ {`"\"`, "string not terminated", 1, 1},
+ {`"\x`, "string not terminated", 1, 1},
+ {`"\x"`, "non-hex character in escape sequence: \"", 1, 4},
+ {`"\y"`, "unknown escape sequence", 1, 3},
+ {`"\x0"`, "non-hex character in escape sequence: \"", 1, 5},
+ {`"\00"`, "non-octal character in escape sequence: \"", 1, 5},
+ {`"\377" /*`, "comment not terminated", 1, 8}, // valid octal escape
+ {`"\378"`, "non-octal character in escape sequence: 8", 1, 5},
+ {`"\400"`, "octal escape value > 255: 256", 1, 6},
+
+ {`s := "foo\z"`, "unknown escape sequence", 1, 11},
+ {`s := "foo\z00\nbar"`, "unknown escape sequence", 1, 11},
+ {`"\x`, "string not terminated", 1, 1},
+ {`"\x"`, "non-hex character in escape sequence: \"", 1, 4},
+ {`var s string = "\x"`, "non-hex character in escape sequence: \"", 1, 19},
+ {`return "\Uffffffff"`, "escape sequence is invalid Unicode code point", 1, 19},
// former problem cases
- {"package p\n\n\xef", "invalid UTF-8 encoding", 11, 3},
+ {"package p\n\n\xef", "invalid UTF-8 encoding", 3, 1},
} {
var s scanner
nerrors := 0
@@ -330,14 +330,15 @@ func TestScanErrors(t *testing.T) {
if e.Msg != test.msg {
t.Errorf("%q: got msg = %q; want %q", test.src, e.Msg, test.msg)
}
- if e.Pos != test.pos {
- t.Errorf("%q: got pos = %d; want %d", test.src, e.Pos, test.pos)
- }
if e.Line != test.line {
t.Errorf("%q: got line = %d; want %d", test.src, e.Line, test.line)
}
+ if e.Col != test.col {
+ t.Errorf("%q: got col = %d; want %d", test.src, e.Col, test.col)
+ }
} else if nerrors > 1 {
- t.Errorf("%q: got unexpected %q at pos = %d, line = %d", test.src, e.Msg, e.Pos, e.Line)
+ // TODO(gri) make this use position info
+ t.Errorf("%q: got unexpected %q at line = %d", test.src, e.Msg, e.Line)
}
}, nil)