1
0
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:
Robert Griesemer 2023-01-11 16:43:11 -08:00 committed by Gopher Robot
parent 4cc8d0eea9
commit 2f5718a80b
2 changed files with 32 additions and 0 deletions

View File

@ -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
}

View File

@ -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.