mirror of
https://github.com/golang/go
synced 2024-11-17 17:54:48 -07:00
go/types: generate unify.go
Change-Id: If94a4c18e954ff403892d0a70e424ab58e997451 Reviewed-on: https://go-review.googlesource.com/c/go/+/461603 Reviewed-by: Robert Griesemer <gri@google.com> Run-TryBot: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com>
This commit is contained in:
parent
4cc8d0eea9
commit
2f5718a80b
@ -115,6 +115,7 @@ var filemap = map[string]action{
|
||||
"typeterm_test.go": nil,
|
||||
"typeterm.go": nil,
|
||||
"under.go": nil,
|
||||
"unify.go": fixSprintf,
|
||||
"universe.go": fixGlobalTypVarDecl,
|
||||
"validtype.go": nil,
|
||||
}
|
||||
@ -210,3 +211,32 @@ func fixGlobalTypVarDecl(f *ast.File) {
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
// fixSprintf adds an extra nil argument for the *token.FileSet parameter in sprintf calls.
|
||||
func fixSprintf(f *ast.File) {
|
||||
ast.Inspect(f, func(n ast.Node) bool {
|
||||
switch n := n.(type) {
|
||||
case *ast.CallExpr:
|
||||
if fun, _ := n.Fun.(*ast.Ident); fun != nil && fun.Name == "sprintf" && len(n.Args) >= 4 /* ... args */ {
|
||||
n.Args = insert(n.Args, 1, newIdent(n.Args[1].Pos(), "nil"))
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
// newIdent returns a new identifier with the given position and name.
|
||||
func newIdent(pos token.Pos, name string) *ast.Ident {
|
||||
id := ast.NewIdent(name)
|
||||
id.NamePos = pos
|
||||
return id
|
||||
}
|
||||
|
||||
// insert inserts x at list[at] and moves the remaining elements up.
|
||||
func insert(list []ast.Expr, at int, x ast.Expr) []ast.Expr {
|
||||
list = append(list, nil)
|
||||
copy(list[at+1:], list[at:])
|
||||
list[at] = x
|
||||
return list
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
// Code generated by "go run generator.go"; DO NOT EDIT.
|
||||
|
||||
// Copyright 2020 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.
|
||||
|
Loading…
Reference in New Issue
Block a user