]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: move unified IR's reader2 into importer package
authorMatthew Dempsky <mdempsky@google.com>
Tue, 1 Mar 2022 04:35:24 +0000 (20:35 -0800)
committerMatthew Dempsky <mdempsky@google.com>
Tue, 1 Mar 2022 19:32:51 +0000 (19:32 +0000)
This keeps cmd/compile/internal/importer similar to how
go/internal/gcimporter will work after unified IR support is added in
a subsequent CL.

Change-Id: Id3c000f3a13a54a725602552c6b3191d1affb184
Reviewed-on: https://go-review.googlesource.com/c/go/+/388614
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Trust: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
src/cmd/compile/internal/importer/support.go
src/cmd/compile/internal/importer/ureader.go [moved from src/cmd/compile/internal/noder/reader2.go with 83% similarity]
src/cmd/compile/internal/noder/unified.go

index 9377d997796190b402536a25f849c75717516fe5..e382b2f28bad756fb8bbdd79c51cb9905076abb8 100644 (file)
@@ -7,12 +7,17 @@
 package importer
 
 import (
+       "cmd/compile/internal/base"
        "cmd/compile/internal/types2"
        "fmt"
        "go/token"
        "sync"
 )
 
+func assert(p bool) {
+       base.Assert(p)
+}
+
 func errorf(format string, args ...interface{}) {
        panic(fmt.Sprintf(format, args...))
 }
@@ -132,3 +137,13 @@ type anyType struct{}
 
 func (t anyType) Underlying() types2.Type { return t }
 func (t anyType) String() string          { return "any" }
+
+type derivedInfo struct {
+       idx    int
+       needed bool
+}
+
+type typeInfo struct {
+       idx     int
+       derived bool
+}
similarity index 83%
rename from src/cmd/compile/internal/noder/reader2.go
rename to src/cmd/compile/internal/importer/ureader.go
index 8d1f9087a503c7261c2f74761bf3028f75b9ba0c..1b61f37dc8f9a3edbce6ca4be72a5628c358237e 100644 (file)
@@ -4,7 +4,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package noder
+package importer
 
 import (
        "cmd/compile/internal/base"
@@ -14,7 +14,7 @@ import (
        "internal/pkgbits"
 )
 
-type pkgReader2 struct {
+type pkgReader struct {
        pkgbits.PkgDecoder
 
        ctxt    *types2.Context
@@ -25,8 +25,8 @@ type pkgReader2 struct {
        typs     []types2.Type
 }
 
-func readPackage2(ctxt *types2.Context, imports map[string]*types2.Package, input pkgbits.PkgDecoder) *types2.Package {
-       pr := pkgReader2{
+func ReadPackage(ctxt *types2.Context, imports map[string]*types2.Package, input pkgbits.PkgDecoder) *types2.Package {
+       pr := pkgReader{
                PkgDecoder: input,
 
                ctxt:    ctxt,
@@ -56,15 +56,15 @@ func readPackage2(ctxt *types2.Context, imports map[string]*types2.Package, inpu
        return pkg
 }
 
-type reader2 struct {
+type reader struct {
        pkgbits.Decoder
 
-       p *pkgReader2
+       p *pkgReader
 
-       dict *reader2Dict
+       dict *readerDict
 }
 
-type reader2Dict struct {
+type readerDict struct {
        bounds []typeInfo
 
        tparams []*types2.TypeParam
@@ -73,13 +73,13 @@ type reader2Dict struct {
        derivedTypes []types2.Type
 }
 
-type reader2TypeBound struct {
+type readerTypeBound struct {
        derived  bool
        boundIdx int
 }
 
-func (pr *pkgReader2) newReader(k pkgbits.RelocKind, idx int, marker pkgbits.SyncMarker) *reader2 {
-       return &reader2{
+func (pr *pkgReader) newReader(k pkgbits.RelocKind, idx int, marker pkgbits.SyncMarker) *reader {
+       return &reader{
                Decoder: pr.NewDecoder(k, idx, marker),
                p:       pr,
        }
@@ -87,7 +87,7 @@ func (pr *pkgReader2) newReader(k pkgbits.RelocKind, idx int, marker pkgbits.Syn
 
 // @@@ Positions
 
-func (r *reader2) pos() syntax.Pos {
+func (r *reader) pos() syntax.Pos {
        r.Sync(pkgbits.SyncPos)
        if !r.Bool() {
                return syntax.Pos{}
@@ -100,11 +100,11 @@ func (r *reader2) pos() syntax.Pos {
        return syntax.MakePos(posBase, line, col)
 }
 
-func (r *reader2) posBase() *syntax.PosBase {
+func (r *reader) posBase() *syntax.PosBase {
        return r.p.posBaseIdx(r.Reloc(pkgbits.RelocPosBase))
 }
 
-func (pr *pkgReader2) posBaseIdx(idx int) *syntax.PosBase {
+func (pr *pkgReader) posBaseIdx(idx int) *syntax.PosBase {
        if b := pr.posBases[idx]; b != nil {
                return b
        }
@@ -129,12 +129,12 @@ func (pr *pkgReader2) posBaseIdx(idx int) *syntax.PosBase {
 
 // @@@ Packages
 
-func (r *reader2) pkg() *types2.Package {
+func (r *reader) pkg() *types2.Package {
        r.Sync(pkgbits.SyncPkg)
        return r.p.pkgIdx(r.Reloc(pkgbits.RelocPkg))
 }
 
-func (pr *pkgReader2) pkgIdx(idx int) *types2.Package {
+func (pr *pkgReader) pkgIdx(idx int) *types2.Package {
        // TODO(mdempsky): Consider using some non-nil pointer to indicate
        // the universe scope, so we don't need to keep re-reading it.
        if pkg := pr.pkgs[idx]; pkg != nil {
@@ -146,7 +146,7 @@ func (pr *pkgReader2) pkgIdx(idx int) *types2.Package {
        return pkg
 }
 
-func (r *reader2) doPkg() *types2.Package {
+func (r *reader) doPkg() *types2.Package {
        path := r.String()
        if path == "builtin" {
                return nil // universe
@@ -178,11 +178,11 @@ func (r *reader2) doPkg() *types2.Package {
 
 // @@@ Types
 
-func (r *reader2) typ() types2.Type {
+func (r *reader) typ() types2.Type {
        return r.p.typIdx(r.typInfo(), r.dict)
 }
 
-func (r *reader2) typInfo() typeInfo {
+func (r *reader) typInfo() typeInfo {
        r.Sync(pkgbits.SyncType)
        if r.Bool() {
                return typeInfo{idx: r.Len(), derived: true}
@@ -190,7 +190,7 @@ func (r *reader2) typInfo() typeInfo {
        return typeInfo{idx: r.Reloc(pkgbits.RelocType), derived: false}
 }
 
-func (pr *pkgReader2) typIdx(info typeInfo, dict *reader2Dict) types2.Type {
+func (pr *pkgReader) typIdx(info typeInfo, dict *readerDict) types2.Type {
        idx := info.idx
        var where *types2.Type
        if info.derived {
@@ -219,7 +219,7 @@ func (pr *pkgReader2) typIdx(info typeInfo, dict *reader2Dict) types2.Type {
        return typ
 }
 
-func (r *reader2) doTyp() (res types2.Type) {
+func (r *reader) doTyp() (res types2.Type) {
        switch tag := pkgbits.CodeType(r.Code(pkgbits.SyncType)); tag {
        default:
                base.FatalfAt(src.NoXPos, "unhandled type tag: %v", tag)
@@ -263,7 +263,7 @@ func (r *reader2) doTyp() (res types2.Type) {
        }
 }
 
-func (r *reader2) structType() *types2.Struct {
+func (r *reader) structType() *types2.Struct {
        fields := make([]*types2.Var, r.Len())
        var tags []string
        for i := range fields {
@@ -284,7 +284,7 @@ func (r *reader2) structType() *types2.Struct {
        return types2.NewStruct(fields, tags)
 }
 
-func (r *reader2) unionType() *types2.Union {
+func (r *reader) unionType() *types2.Union {
        terms := make([]*types2.Term, r.Len())
        for i := range terms {
                terms[i] = types2.NewTerm(r.Bool(), r.typ())
@@ -292,7 +292,7 @@ func (r *reader2) unionType() *types2.Union {
        return types2.NewUnion(terms)
 }
 
-func (r *reader2) interfaceType() *types2.Interface {
+func (r *reader) interfaceType() *types2.Interface {
        methods := make([]*types2.Func, r.Len())
        embeddeds := make([]types2.Type, r.Len())
        implicit := len(methods) == 0 && len(embeddeds) == 1 && r.Bool()
@@ -315,7 +315,7 @@ func (r *reader2) interfaceType() *types2.Interface {
        return iface
 }
 
-func (r *reader2) signature(recv *types2.Var, rtparams, tparams []*types2.TypeParam) *types2.Signature {
+func (r *reader) signature(recv *types2.Var, rtparams, tparams []*types2.TypeParam) *types2.Signature {
        r.Sync(pkgbits.SyncSignature)
 
        params := r.params()
@@ -325,7 +325,7 @@ func (r *reader2) signature(recv *types2.Var, rtparams, tparams []*types2.TypePa
        return types2.NewSignatureType(recv, rtparams, tparams, params, results, variadic)
 }
 
-func (r *reader2) params() *types2.Tuple {
+func (r *reader) params() *types2.Tuple {
        r.Sync(pkgbits.SyncParams)
        params := make([]*types2.Var, r.Len())
        for i := range params {
@@ -334,7 +334,7 @@ func (r *reader2) params() *types2.Tuple {
        return types2.NewTuple(params...)
 }
 
-func (r *reader2) param() *types2.Var {
+func (r *reader) param() *types2.Var {
        r.Sync(pkgbits.SyncParam)
 
        pos := r.pos()
@@ -346,7 +346,7 @@ func (r *reader2) param() *types2.Var {
 
 // @@@ Objects
 
-func (r *reader2) obj() (types2.Object, []types2.Type) {
+func (r *reader) obj() (types2.Object, []types2.Type) {
        r.Sync(pkgbits.SyncObject)
 
        assert(!r.Bool())
@@ -362,7 +362,7 @@ func (r *reader2) obj() (types2.Object, []types2.Type) {
        return obj, targs
 }
 
-func (pr *pkgReader2) objIdx(idx int) (*types2.Package, string) {
+func (pr *pkgReader) objIdx(idx int) (*types2.Package, string) {
        rname := pr.newReader(pkgbits.RelocName, idx, pkgbits.SyncObject1)
 
        objPkg, objName := rname.qualifiedIdent()
@@ -432,10 +432,10 @@ func (pr *pkgReader2) objIdx(idx int) (*types2.Package, string) {
        return objPkg, objName
 }
 
-func (pr *pkgReader2) objDictIdx(idx int) *reader2Dict {
+func (pr *pkgReader) objDictIdx(idx int) *readerDict {
        r := pr.newReader(pkgbits.RelocObjDict, idx, pkgbits.SyncObject1)
 
-       var dict reader2Dict
+       var dict readerDict
 
        if implicits := r.Len(); implicits != 0 {
                base.Fatalf("unexpected object with %v implicit type parameter(s)", implicits)
@@ -452,17 +452,17 @@ func (pr *pkgReader2) objDictIdx(idx int) *reader2Dict {
                dict.derived[i] = derivedInfo{r.Reloc(pkgbits.RelocType), r.Bool()}
        }
 
-       // function references follow, but reader2 doesn't need those
+       // function references follow, but reader doesn't need those
 
        return &dict
 }
 
-func (r *reader2) typeParamNames() []*types2.TypeParam {
+func (r *reader) typeParamNames() []*types2.TypeParam {
        r.Sync(pkgbits.SyncTypeParamNames)
 
        // Note: This code assumes it only processes objects without
        // implement type parameters. This is currently fine, because
-       // reader2 is only used to read in exported declarations, which are
+       // reader is only used to read in exported declarations, which are
        // always package scoped.
 
        if len(r.dict.bounds) == 0 {
@@ -490,7 +490,7 @@ func (r *reader2) typeParamNames() []*types2.TypeParam {
        return r.dict.tparams
 }
 
-func (r *reader2) method() *types2.Func {
+func (r *reader) method() *types2.Func {
        r.Sync(pkgbits.SyncMethod)
        pos := r.pos()
        pkg, name := r.selector()
@@ -502,11 +502,11 @@ func (r *reader2) method() *types2.Func {
        return types2.NewFunc(pos, pkg, name, sig)
 }
 
-func (r *reader2) qualifiedIdent() (*types2.Package, string) { return r.ident(pkgbits.SyncSym) }
-func (r *reader2) localIdent() (*types2.Package, string)     { return r.ident(pkgbits.SyncLocalIdent) }
-func (r *reader2) selector() (*types2.Package, string)       { return r.ident(pkgbits.SyncSelector) }
+func (r *reader) qualifiedIdent() (*types2.Package, string) { return r.ident(pkgbits.SyncSym) }
+func (r *reader) localIdent() (*types2.Package, string)     { return r.ident(pkgbits.SyncLocalIdent) }
+func (r *reader) selector() (*types2.Package, string)       { return r.ident(pkgbits.SyncSelector) }
 
-func (r *reader2) ident(marker pkgbits.SyncMarker) (*types2.Package, string) {
+func (r *reader) ident(marker pkgbits.SyncMarker) (*types2.Package, string) {
        r.Sync(marker)
        return r.pkg(), r.String()
 }
index 75055e98741885c72eaaaf461cbd61f936760468..ac82f2df03a35ba8ae9bf58e31e6a2fc7f62de90 100644 (file)
@@ -16,6 +16,7 @@ import (
        "sort"
 
        "cmd/compile/internal/base"
+       "cmd/compile/internal/importer"
        "cmd/compile/internal/inline"
        "cmd/compile/internal/ir"
        "cmd/compile/internal/typecheck"
@@ -80,7 +81,7 @@ func unified(noders []*noder) {
 
                // Read package descriptors for both types2 and compiler backend.
                readPackage(newPkgReader(pr), pkg1)
-               pkg2 = readPackage2(ctxt, packages, pr)
+               pkg2 = importer.ReadPackage(ctxt, packages, pr)
                return
        }