aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/noder/reader2.go
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2021-07-20 16:52:37 -0700
committerMatthew Dempsky <mdempsky@google.com>2021-07-21 01:29:21 +0000
commit897970688b326f7baa8ad8e3330fb552d94b0014 (patch)
treeb5d15c69d32ea4e5ae110b812fa3f44363fcfd7a /src/cmd/compile/internal/noder/reader2.go
parentd5f6ba943c4e8f39d1bd20c79f4e9274ad10c103 (diff)
downloadgo-897970688b326f7baa8ad8e3330fb552d94b0014.tar.xz
[dev.typeparams] cmd/compile: cleanup unified IR file format a little
This CL makes two changes: 1. It moves object symbols and code tags into a new "relocName" relocation, which should eventually allow getting rid of objStub. 2. It moves the type parameter data into the relocObjDict relocation, so everything related to writing out dictionaries is contained there. Change-Id: If0f7ff7d9384e8664957c3180bf6f20e97bcff6e Reviewed-on: https://go-review.googlesource.com/c/go/+/336051 Trust: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Diffstat (limited to 'src/cmd/compile/internal/noder/reader2.go')
-rw-r--r--src/cmd/compile/internal/noder/reader2.go43
1 files changed, 24 insertions, 19 deletions
diff --git a/src/cmd/compile/internal/noder/reader2.go b/src/cmd/compile/internal/noder/reader2.go
index a2339145fa..297fa59439 100644
--- a/src/cmd/compile/internal/noder/reader2.go
+++ b/src/cmd/compile/internal/noder/reader2.go
@@ -358,29 +358,22 @@ func (r *reader2) obj() (types2.Object, []types2.Type) {
}
func (pr *pkgReader2) objIdx(idx int) (*types2.Package, string) {
- r := pr.newReader(relocObj, idx, syncObject1)
- r.dict = &reader2Dict{}
+ rname := pr.newReader(relocName, idx, syncObject1)
- objPkg, objName := r.qualifiedIdent()
+ objPkg, objName := rname.qualifiedIdent()
assert(objName != "")
- r.typeParamBounds()
- tag := codeObj(r.code(syncCodeObj))
+ tag := codeObj(rname.code(syncCodeObj))
if tag == objStub {
assert(objPkg == nil)
return objPkg, objName
}
- {
- rdict := r.p.newReader(relocObjDict, idx, syncObject1)
- r.dict.derived = make([]derivedInfo, rdict.len())
- r.dict.derivedTypes = make([]types2.Type, len(r.dict.derived))
- for i := range r.dict.derived {
- r.dict.derived[i] = derivedInfo{rdict.reloc(relocType), rdict.bool()}
- }
- // function references follow, but reader2 doesn't need those
- }
+ dict := pr.objDictIdx(idx)
+
+ r := pr.newReader(relocObj, idx, syncObject1)
+ r.dict = dict
objPkg.Scope().InsertLazy(objName, func() types2.Object {
switch tag {
@@ -439,17 +432,29 @@ func (r *reader2) value() (types2.Type, constant.Value) {
return r.typ(), r.rawValue()
}
-func (r *reader2) typeParamBounds() {
- r.sync(syncTypeParamBounds)
+func (pr *pkgReader2) objDictIdx(idx int) *reader2Dict {
+ r := pr.newReader(relocObjDict, idx, syncObject1)
+
+ var dict reader2Dict
if implicits := r.len(); implicits != 0 {
base.Fatalf("unexpected object with %v implicit type parameter(s)", implicits)
}
- r.dict.bounds = make([]typeInfo, r.len())
- for i := range r.dict.bounds {
- r.dict.bounds[i] = r.typInfo()
+ dict.bounds = make([]typeInfo, r.len())
+ for i := range dict.bounds {
+ dict.bounds[i] = r.typInfo()
+ }
+
+ dict.derived = make([]derivedInfo, r.len())
+ dict.derivedTypes = make([]types2.Type, len(dict.derived))
+ for i := range dict.derived {
+ dict.derived[i] = derivedInfo{r.reloc(relocType), r.bool()}
}
+
+ // function references follow, but reader2 doesn't need those
+
+ return &dict
}
func (r *reader2) typeParamNames() []*types2.TypeName {