]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/compile/internal/noder: remove unused noding code
authorMatthew Dempsky <mdempsky@google.com>
Tue, 20 Dec 2022 23:25:17 +0000 (15:25 -0800)
committerGopher Robot <gobot@golang.org>
Fri, 27 Jan 2023 03:43:35 +0000 (03:43 +0000)
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>
src/cmd/compile/internal/noder/irgen.go
src/cmd/compile/internal/noder/noder.go
src/cmd/compile/internal/noder/posmap.go
src/cmd/compile/internal/noder/unified.go

index 1369c2e5655e10d67b2c307e28b06612c9fb7362..f0addc48924d575a7db6fe10903596befadddbb2 100644 (file)
@@ -19,16 +19,14 @@ var versionErrorRx = regexp.MustCompile(`requires go[0-9]+\.[0-9]+ or later`)
 
 // checkFiles configures and runs the types2 checker on the given
 // parsed source files and then returns the result.
-func checkFiles(noders []*noder) (posMap, *types2.Package, *types2.Info) {
+func checkFiles(m posMap, noders []*noder) (*types2.Package, *types2.Info) {
        if base.SyntaxErrors() != 0 {
                base.ErrorExit()
        }
 
        // setup and syntax error reporting
-       var m posMap
        files := make([]*syntax.File, len(noders))
        for i, p := range noders {
-               m.join(&p.posMap)
                files[i] = p.file
        }
 
@@ -117,7 +115,7 @@ func checkFiles(noders []*noder) (posMap, *types2.Package, *types2.Info) {
                base.FatalfAt(src.NoXPos, "conf.Check error: %v", err)
        }
 
-       return m, pkg, info
+       return pkg, info
 }
 
 // A cycleFinder detects anonymous interface cycles (go.dev/issue/56103).
index 1db9618d96dba93f0ef3bf9e58be7938c824400d..10619bf569705f50c120a982f6699290f415c9cc 100644 (file)
@@ -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:
index 6c7e57c9963940cf79f1efcc00af8bbf0c8aff8b..439daf454e6fc3c620b1c3dc16952e7c4a3cedfd 100644 (file)
@@ -72,15 +72,3 @@ func (m *posMap) makeSrcPosBase(b0 *syntax.PosBase) *src.PosBase {
 
        return b1
 }
-
-func (m *posMap) join(other *posMap) {
-       if m.bases == nil {
-               m.bases = make(map[*syntax.PosBase]*src.PosBase)
-       }
-       for k, v := range other.bases {
-               if m.bases[k] != nil {
-                       base.Fatalf("duplicate posmap bases")
-               }
-               m.bases[k] = v
-       }
-}
index ed97a09302e8992c36bdde4556e222fffceca041..f1788c210e30afb0ea9478d04cc241250d3fde54 100644 (file)
@@ -68,11 +68,11 @@ var localPkgReader *pkgReader
 // the unified IR has the full typed AST needed for introspection during step (1).
 // In other words, we have all the necessary information to build the generic IR form
 // (see writer.captureVars for an example).
-func unified(noders []*noder) {
+func unified(m posMap, noders []*noder) {
        inline.InlineCall = unifiedInlineCall
        typecheck.HaveInlineBody = unifiedHaveInlineBody
 
-       data := writePkgStub(noders)
+       data := writePkgStub(m, noders)
 
        // We already passed base.Flag.Lang to types2 to handle validating
        // the user's source code. Bump it up now to the current version and
@@ -202,8 +202,8 @@ func readBodies(target *ir.Package, duringInlining bool) {
 // writePkgStub type checks the given parsed source files,
 // writes an export data package stub representing them,
 // and returns the result.
-func writePkgStub(noders []*noder) string {
-       m, pkg, info := checkFiles(noders)
+func writePkgStub(m posMap, noders []*noder) string {
+       pkg, info := checkFiles(m, noders)
 
        pw := newPkgWriter(m, pkg, info)