mirror of
https://github.com/golang/go
synced 2024-11-05 19:56:11 -07:00
70544c91ff
This makes a bunch of changes to package syntax to tweak line numbers for AST nodes. For example, short variable declaration statements are now associated with the location of the ":=" token, and function calls are associated with the location of the final ")" token. These help satisfy many unit tests that assume the old parser's behavior. Because many of these changes are questionable, they're guarded behind a new "gcCompat" const to make them easy to identify and revisit in the future. A handful of remaining tests are too difficult to make behave identically. These have been updated to execute with -newparser=0 and comments explaining why they need to be fixed. all.bash now passes with both the old and new parsers. Change-Id: Iab834b71ca8698d39269f261eb5c92a0d55a3bf4 Reviewed-on: https://go-review.googlesource.com/27199 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
60 lines
1.5 KiB
Go
60 lines
1.5 KiB
Go
// errorcheckoutput -newparser=0
|
|
|
|
// Copyright 2009 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Test source files and strings containing NUL and invalid UTF-8.
|
|
|
|
// TODO(mdempsky): Update error expectations for -newparser=1. The new
|
|
// lexer skips over NUL and invalid UTF-8 sequences, so they don't emit
|
|
// "illegal character" or "invalid identifier character" errors.
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
)
|
|
|
|
func main() {
|
|
var s = "\xc2\xff"
|
|
var t = "\xd0\xfe"
|
|
var u = "\xab\x00\xfc"
|
|
|
|
if len(s) != 2 || s[0] != 0xc2 || s[1] != 0xff ||
|
|
len(t) != 2 || t[0] != 0xd0 || t[1] != 0xfe ||
|
|
len(u) != 3 || u[0] != 0xab || u[1] != 0x00 || u[2] != 0xfc {
|
|
println("BUG: non-UTF-8 string mangled")
|
|
os.Exit(2)
|
|
}
|
|
|
|
fmt.Print(`
|
|
package main
|
|
|
|
var x = "in string ` + "\x00" + `" // ERROR "NUL"
|
|
|
|
var y = ` + "`in raw string \x00 foo`" + ` // ERROR "NUL"
|
|
|
|
// in comment ` + "\x00" + ` // ERROR "NUL"
|
|
|
|
/* in other comment ` + "\x00" + ` */ // ERROR "NUL"
|
|
|
|
/* in source code */ ` + "\x00" + `// ERROR "NUL" "illegal character"
|
|
|
|
var xx = "in string ` + "\xc2\xff" + `" // ERROR "UTF-8"
|
|
|
|
var yy = ` + "`in raw string \xff foo`" + ` // ERROR "UTF-8"
|
|
|
|
// in comment ` + "\xe2\x80\x01" + ` // ERROR "UTF-8"
|
|
|
|
/* in other comment ` + "\xe0\x00\x00" + ` */ // ERROR "UTF-8|NUL"
|
|
|
|
/* in variable name */
|
|
var z` + "\xc1\x81" + ` int // ERROR "UTF-8" "invalid identifier character"
|
|
|
|
/* in source code */ ` + "var \xc2A int" + `// ERROR "UTF-8" "invalid identifier character"
|
|
|
|
`)
|
|
}
|