mirror of https://github.com/golang/go.git
cmd/cgo: don't replace newlines with semicolons in expressions
Fixes #29781 Change-Id: Id032d07a54b8c24f0c6d3f6e512932f76920ee04 Reviewed-on: https://go-review.googlesource.com/c/158457 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
246e6ceb3b
commit
dd1889cb22
|
|
@ -0,0 +1,17 @@
|
||||||
|
// Copyright 2019 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.
|
||||||
|
|
||||||
|
// Error with newline inserted into constant expression.
|
||||||
|
// Compilation test only, nothing to run.
|
||||||
|
|
||||||
|
package cgotest
|
||||||
|
|
||||||
|
// static void issue29781F(char **p, int n) {}
|
||||||
|
// #define ISSUE29781C 0
|
||||||
|
import "C"
|
||||||
|
|
||||||
|
func issue29781G() {
|
||||||
|
var p *C.char
|
||||||
|
C.issue29781F(&p, C.ISSUE29781C+1)
|
||||||
|
}
|
||||||
|
|
@ -131,12 +131,27 @@ func gofmt(n interface{}) string {
|
||||||
// AST expression onto a single line. The lexer normally inserts a
|
// AST expression onto a single line. The lexer normally inserts a
|
||||||
// semicolon at each newline, so we can replace newline with semicolon.
|
// semicolon at each newline, so we can replace newline with semicolon.
|
||||||
// However, we can't do that in cases where the lexer would not insert
|
// However, we can't do that in cases where the lexer would not insert
|
||||||
// a semicolon. Fortunately we only have to worry about cases that
|
// a semicolon. We only have to worry about cases that can occur in an
|
||||||
// can occur in an expression passed through gofmt, which just means
|
// expression passed through gofmt, which means composite literals and
|
||||||
// composite literals.
|
// (due to the printer possibly inserting newlines because of position
|
||||||
|
// information) operators.
|
||||||
var gofmtLineReplacer = strings.NewReplacer(
|
var gofmtLineReplacer = strings.NewReplacer(
|
||||||
"{\n", "{",
|
"{\n", "{",
|
||||||
",\n", ",",
|
",\n", ",",
|
||||||
|
"++\n", "++;",
|
||||||
|
"--\n", "--;",
|
||||||
|
"+\n", "+",
|
||||||
|
"-\n", "-",
|
||||||
|
"*\n", "*",
|
||||||
|
"/\n", "/",
|
||||||
|
"%\n", "%",
|
||||||
|
"&\n", "&",
|
||||||
|
"|\n", "|",
|
||||||
|
"^\n", "^",
|
||||||
|
"<\n", "<",
|
||||||
|
">\n", ">",
|
||||||
|
"=\n", "=",
|
||||||
|
",\n", ",",
|
||||||
"\n", ";",
|
"\n", ";",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue