From ff8a2c0ad982ed96aeac42f0c825219752e5d2f6 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 21 Feb 2024 15:33:28 -0800 Subject: [PATCH] go/types: generate mono.go from types2 source This CL reduces the amount of code that needs to be maintained manually by about 340 LOC. Change-Id: If7b96c30e5a2f1ff28ebf4ca2f3ac3f73d6a8865 Reviewed-on: https://go-review.googlesource.com/c/go/+/565839 Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer LUCI-TryBot-Result: Go LUCI Reviewed-by: Robert Findley --- src/cmd/compile/internal/types2/mono.go | 6 +++--- src/cmd/compile/internal/types2/util.go | 3 +++ src/go/types/generate_test.go | 13 +++++++++---- src/go/types/mono.go | 4 +++- src/go/types/util.go | 3 +++ 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/cmd/compile/internal/types2/mono.go b/src/cmd/compile/internal/types2/mono.go index 72bbc24ba0..1263507421 100644 --- a/src/cmd/compile/internal/types2/mono.go +++ b/src/cmd/compile/internal/types2/mono.go @@ -150,9 +150,9 @@ func (check *Checker) reportInstanceLoop(v int) { default: panic("unexpected type") case *Named: - err.addf(edge.pos, "%s implicitly parameterized by %s", obj.Name(), TypeString(edge.typ, qf)) // secondary error, \t indented + err.addf(atPos(edge.pos), "%s implicitly parameterized by %s", obj.Name(), TypeString(edge.typ, qf)) // secondary error, \t indented case *TypeParam: - err.addf(edge.pos, "%s instantiated as %s", obj.Name(), TypeString(edge.typ, qf)) // secondary error, \t indented + err.addf(atPos(edge.pos), "%s instantiated as %s", obj.Name(), TypeString(edge.typ, qf)) // secondary error, \t indented } } err.report() @@ -173,7 +173,7 @@ func (w *monoGraph) recordInstance(pkg *Package, pos syntax.Pos, tparams []*Type for i, tpar := range tparams { pos := pos if i < len(xlist) { - pos = syntax.StartPos(xlist[i]) + pos = startPos(xlist[i]) } w.assign(pkg, pos, tpar, targs[i]) } diff --git a/src/cmd/compile/internal/types2/util.go b/src/cmd/compile/internal/types2/util.go index e38966f21a..0422c03346 100644 --- a/src/cmd/compile/internal/types2/util.go +++ b/src/cmd/compile/internal/types2/util.go @@ -42,6 +42,9 @@ func argErrPos(call *syntax.CallExpr) *syntax.CallExpr { return call } // ExprString returns a string representation of x. func ExprString(x syntax.Node) string { return syntax.String(x) } +// startPos returns the start position of node n. +func startPos(n syntax.Node) syntax.Pos { return syntax.StartPos(n) } + // endPos returns the position of the first character immediately after node n. func endPos(n syntax.Node) syntax.Pos { return syntax.EndPos(n) } diff --git a/src/go/types/generate_test.go b/src/go/types/generate_test.go index 4e0d9bb3a9..8bdcb04dfe 100644 --- a/src/go/types/generate_test.go +++ b/src/go/types/generate_test.go @@ -133,10 +133,15 @@ var filemap = map[string]action{ "lookup.go": func(f *ast.File) { fixTokenPos(f) }, "main_test.go": nil, "map.go": nil, - "named.go": func(f *ast.File) { fixTokenPos(f); renameSelectors(f, "Trace->_Trace") }, - "object.go": func(f *ast.File) { fixTokenPos(f); renameIdents(f, "NewTypeNameLazy->_NewTypeNameLazy") }, - "object_test.go": func(f *ast.File) { renameImportPath(f, `"cmd/compile/internal/types2"->"go/types"`) }, - "objset.go": nil, + "mono.go": func(f *ast.File) { + fixTokenPos(f) + insertImportPath(f, `"go/ast"`) + renameSelectorExprs(f, "syntax.Expr->ast.Expr") + }, + "named.go": func(f *ast.File) { fixTokenPos(f); renameSelectors(f, "Trace->_Trace") }, + "object.go": func(f *ast.File) { fixTokenPos(f); renameIdents(f, "NewTypeNameLazy->_NewTypeNameLazy") }, + "object_test.go": func(f *ast.File) { renameImportPath(f, `"cmd/compile/internal/types2"->"go/types"`) }, + "objset.go": nil, "operand.go": func(f *ast.File) { insertImportPath(f, `"go/token"`) renameImportPath(f, `"cmd/compile/internal/syntax"->"go/ast"`) diff --git a/src/go/types/mono.go b/src/go/types/mono.go index f088e21dcb..063947ec2a 100644 --- a/src/go/types/mono.go +++ b/src/go/types/mono.go @@ -1,3 +1,5 @@ +// Code generated by "go test -run=Generate -write=all"; 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. @@ -174,7 +176,7 @@ func (w *monoGraph) recordInstance(pkg *Package, pos token.Pos, tparams []*TypeP for i, tpar := range tparams { pos := pos if i < len(xlist) { - pos = xlist[i].Pos() + pos = startPos(xlist[i]) } w.assign(pkg, pos, tpar, targs[i]) } diff --git a/src/go/types/util.go b/src/go/types/util.go index faddf13114..bfaba809ad 100644 --- a/src/go/types/util.go +++ b/src/go/types/util.go @@ -36,6 +36,9 @@ func dddErrPos(call *ast.CallExpr) positioner { return atPos(call.Ellipsis) } // argErrPos returns positioner for reportign an invalid argument count. func argErrPos(call *ast.CallExpr) positioner { return inNode(call, call.Rparen) } +// startPos returns the start position of node n. +func startPos(n ast.Node) token.Pos { return n.Pos() } + // endPos returns the position of the first character immediately after node n. func endPos(n ast.Node) token.Pos { return n.End() } -- 2.48.1