]> Cypherpunks repositories - gostls13.git/commitdiff
go/types: generate instantiate.go
authorRobert Griesemer <gri@golang.org>
Wed, 18 Jan 2023 22:59:04 +0000 (14:59 -0800)
committerGopher Robot <gobot@golang.org>
Fri, 20 Jan 2023 18:12:59 +0000 (18:12 +0000)
Change-Id: Iad8b78bbf52eb2b0de05471bfd5a5506dc45e055
Reviewed-on: https://go-review.googlesource.com/c/go/+/461693
Reviewed-by: Robert Griesemer <gri@google.com>
Auto-Submit: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Griesemer <gri@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/go/types/generator.go
src/go/types/instantiate.go

index be599443eb4c0f6902a34b339e0530c26be5651a..fc6295d3c8d8209aba0642f95763ae710361dac1 100644 (file)
@@ -91,7 +91,8 @@ var filemap = map[string]action{
        "gccgosizes.go":   nil,
        "hilbert_test.go": nil,
        "infer.go":        func(f *ast.File) { fixTokenPos(f); fixInferSig(f) },
-       // "initorder.go": fixErrorfCall, // disabled for now due to unresolved error_ use implications for gopls
+       // "initorder.go": fixErrErrorfCall, // disabled for now due to unresolved error_ use implications for gopls
+       "instantiate.go":      func(f *ast.File) { fixTokenPos(f); fixCheckErrorfCall(f) },
        "instantiate_test.go": func(f *ast.File) { renameImportPath(f, `"cmd/compile/internal/types2"`, `"go/types"`) },
        "lookup.go":           nil,
        "main_test.go":        nil,
@@ -229,8 +230,8 @@ func fixInferSig(f *ast.File) {
        })
 }
 
-// fixErrorfCall updates calls of the form err.errorf(obj, ...) to err.errorf(obj.Pos(), ...).
-func fixErrorfCall(f *ast.File) {
+// fixErrErrorfCall updates calls of the form err.errorf(obj, ...) to err.errorf(obj.Pos(), ...).
+func fixErrErrorfCall(f *ast.File) {
        ast.Inspect(f, func(n ast.Node) bool {
                switch n := n.(type) {
                case *ast.CallExpr:
@@ -254,6 +255,31 @@ func fixErrorfCall(f *ast.File) {
        })
 }
 
+// fixCheckErrorfCall updates calls of the form check.errorf(pos, ...) to check.errorf(atPos(pos), ...).
+func fixCheckErrorfCall(f *ast.File) {
+       ast.Inspect(f, func(n ast.Node) bool {
+               switch n := n.(type) {
+               case *ast.CallExpr:
+                       if selx, _ := n.Fun.(*ast.SelectorExpr); selx != nil {
+                               if ident, _ := selx.X.(*ast.Ident); ident != nil && ident.Name == "check" {
+                                       switch selx.Sel.Name {
+                                       case "errorf":
+                                               // rewrite check.errorf(pos, ... ) to check.errorf(atPos(pos), ... )
+                                               if ident, _ := n.Args[0].(*ast.Ident); ident != nil && ident.Name == "pos" {
+                                                       pos := n.Args[0].Pos()
+                                                       fun := newIdent(pos, "atPos")
+                                                       arg := &ast.CallExpr{Fun: fun, Lparen: pos, Args: []ast.Expr{ident}, Ellipsis: token.NoPos, Rparen: pos}
+                                                       n.Args[0] = arg
+                                                       return false
+                                               }
+                                       }
+                               }
+                       }
+               }
+               return true
+       })
+}
+
 // fixTraceSel renames uses of x.Trace to x.trace, where x for any x with a Trace field.
 func fixTraceSel(f *ast.File) {
        ast.Inspect(f, func(n ast.Node) bool {
index 8509a31e35e55fdda3ee71e964894a62a0c100b2..726e84d7ab6424c652e57e6de69a886cb4ff15ec 100644 (file)
@@ -1,3 +1,5 @@
+// Code generated by "go run generator.go"; DO NOT EDIT.
+
 // Copyright 2021 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.