mirror of
https://github.com/golang/go
synced 2024-11-26 19:41:19 -07:00
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
17
misc/cgo/test/issue29781.go
Normal file
17
misc/cgo/test/issue29781.go
Normal file
@ -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
|
||||
// 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
|
||||
// a semicolon. Fortunately we only have to worry about cases that
|
||||
// can occur in an expression passed through gofmt, which just means
|
||||
// composite literals.
|
||||
// a semicolon. We only have to worry about cases that can occur in an
|
||||
// expression passed through gofmt, which means composite literals and
|
||||
// (due to the printer possibly inserting newlines because of position
|
||||
// information) operators.
|
||||
var gofmtLineReplacer = strings.NewReplacer(
|
||||
"{\n", "{",
|
||||
",\n", ",",
|
||||
"++\n", "++;",
|
||||
"--\n", "--;",
|
||||
"+\n", "+",
|
||||
"-\n", "-",
|
||||
"*\n", "*",
|
||||
"/\n", "/",
|
||||
"%\n", "%",
|
||||
"&\n", "&",
|
||||
"|\n", "|",
|
||||
"^\n", "^",
|
||||
"<\n", "<",
|
||||
">\n", ">",
|
||||
"=\n", "=",
|
||||
",\n", ",",
|
||||
"\n", ";",
|
||||
)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user