aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/noder/noder.go
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2022-12-20 15:25:17 -0800
committerGopher Robot <gobot@golang.org>2023-01-27 03:43:35 +0000
commit178080740c1bc33f2c7f164504eedc24210bbf1e (patch)
tree15ac345b4921846611da770642725290a99122b4 /src/cmd/compile/internal/noder/noder.go
parent7cf8593140f41358f77041ab0fc6ca7e99f6e715 (diff)
downloadgo-178080740c1bc33f2c7f164504eedc24210bbf1e.tar.xz
cmd/compile/internal/noder: remove unused noding code
This CL simplifies and removes some old noding code, which isn't necessary any more. Most notably, we no longer need separate posMaps for each noder, because noders are only used for parsing now. Before we started using types2, noders were also responsible for constructed (untyped) IR, so posMaps were necessary to translate syntax.Pos into src.XPos. Change-Id: Ic761abcd727f5ecefc71b611635a0f5b088c941f Reviewed-on: https://go-review.googlesource.com/c/go/+/463738 Auto-Submit: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Keith Randall <khr@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/noder/noder.go')
-rw-r--r--src/cmd/compile/internal/noder/noder.go81
1 files changed, 7 insertions, 74 deletions
diff --git a/src/cmd/compile/internal/noder/noder.go b/src/cmd/compile/internal/noder/noder.go
index 1db9618d96..10619bf569 100644
--- a/src/cmd/compile/internal/noder/noder.go
+++ b/src/cmd/compile/internal/noder/noder.go
@@ -21,7 +21,6 @@ import (
"cmd/compile/internal/typecheck"
"cmd/compile/internal/types"
"cmd/internal/objabi"
- "cmd/internal/src"
)
func LoadPackage(filenames []string) {
@@ -62,9 +61,10 @@ func LoadPackage(filenames []string) {
}()
var lines uint
+ var m posMap
for _, p := range noders {
for e := range p.err {
- p.errorAt(e.Pos, "%s", e.Msg)
+ base.ErrorfAt(m.makeXPos(e.Pos), "%s", e.Msg)
}
if p.file == nil {
base.ErrorExit()
@@ -73,11 +73,7 @@ func LoadPackage(filenames []string) {
}
base.Timer.AddEvent(int64(lines), "lines")
- unified(noders)
-}
-
-func (p *noder) errorAt(pos syntax.Pos, format string, args ...interface{}) {
- base.ErrorfAt(p.makeXPos(pos), format, args...)
+ unified(m, noders)
}
// trimFilename returns the "trimmed" filename of b, which is the
@@ -101,14 +97,10 @@ func trimFilename(b *syntax.PosBase) string {
// noder transforms package syntax's AST into a Node tree.
type noder struct {
- posMap
-
- file *syntax.File
- linknames []linkname
- pragcgobuf [][]string
- err chan syntax.Error
- importedUnsafe bool
- importedEmbed bool
+ file *syntax.File
+ linknames []linkname
+ pragcgobuf [][]string
+ err chan syntax.Error
}
// linkname records a //go:linkname directive.
@@ -118,28 +110,6 @@ type linkname struct {
remote string
}
-func (p *noder) processPragmas() {
- for _, l := range p.linknames {
- if !p.importedUnsafe {
- p.errorAt(l.pos, "//go:linkname only allowed in Go files that import \"unsafe\"")
- continue
- }
- n := ir.AsNode(typecheck.Lookup(l.local).Def)
- if n == nil || n.Op() != ir.ONAME {
- if types.AllowsGoVersion(1, 18) {
- p.errorAt(l.pos, "//go:linkname must refer to declared function or variable")
- }
- continue
- }
- if n.Sym().Linkname != "" {
- p.errorAt(l.pos, "duplicate //go:linkname for %s", l.local)
- continue
- }
- n.Sym().Linkname = l.remote
- }
- typecheck.Target.CgoPragmas = append(typecheck.Target.CgoPragmas, p.pragcgobuf...)
-}
-
var unOps = [...]ir.Op{
syntax.Recv: ir.ORECV,
syntax.Mul: ir.ODEREF,
@@ -176,23 +146,6 @@ var binOps = [...]ir.Op{
syntax.Shr: ir.ORSH,
}
-func wrapname(pos src.XPos, x ir.Node) ir.Node {
- // These nodes do not carry line numbers.
- // Introduce a wrapper node to give them the correct line.
- switch x.Op() {
- case ir.OTYPE, ir.OLITERAL:
- if x.Sym() == nil {
- break
- }
- fallthrough
- case ir.ONAME, ir.ONONAME:
- p := ir.NewParenExpr(pos, x)
- p.SetImplicit(true)
- return p
- }
- return x
-}
-
// error is called concurrently if files are parsed concurrently.
func (p *noder) error(err error) {
p.err <- err.(syntax.Error)
@@ -442,26 +395,6 @@ func Renameinit() *types.Sym {
return s
}
-func varEmbed(makeXPos func(syntax.Pos) src.XPos, name *ir.Name, decl *syntax.VarDecl, pragma *pragmas, haveEmbed bool) {
- pragmaEmbeds := pragma.Embeds
- pragma.Embeds = nil
- if len(pragmaEmbeds) == 0 {
- return
- }
-
- if err := checkEmbed(decl, haveEmbed, typecheck.DeclContext != ir.PEXTERN); err != nil {
- base.ErrorfAt(makeXPos(pragmaEmbeds[0].Pos), "%s", err)
- return
- }
-
- var embeds []ir.Embed
- for _, e := range pragmaEmbeds {
- embeds = append(embeds, ir.Embed{Pos: makeXPos(e.Pos), Patterns: e.Patterns})
- }
- typecheck.Target.Embeds = append(typecheck.Target.Embeds, name)
- name.Embed = &embeds
-}
-
func checkEmbed(decl *syntax.VarDecl, haveEmbed, withinFunc bool) error {
switch {
case !haveEmbed: