[go] go/types, types2: pull up package-level object sort to a phase

0 views
Skip to first unread message

Gopher Robot (Gerrit)

unread,
Oct 28, 2025, 11:29:15 AM (14 days ago) Oct 28
to Mark Freeman, goph...@pubsubhelper.golang.org, golang-...@googlegroups.com, Go LUCI, Robert Griesemer, golang-co...@googlegroups.com

Gopher Robot submitted the change with unreviewed changes

Unreviewed changes

2 is the latest approved patch-set.
The change was submitted with unreviewed changes in the following files:

```
The name of the file: src/go/types/resolver.go
Insertions: 6, Deletions: 6.

@@ -501,13 +501,13 @@

// sortObjects sorts package-level objects by source-order for reproducible processing
func (check *Checker) sortObjects() {
- check.objLst = make([]Object, len(check.objMap))
+ check.objList = make([]Object, len(check.objMap))
i := 0
for obj := range check.objMap {
- check.objLst[i] = obj
+ check.objList[i] = obj
i++
}
- slices.SortFunc(check.objLst, func(a, b Object) int {
+ slices.SortFunc(check.objList, func(a, b Object) int {
return cmp.Compare(a.order(), b.order())
})
}
@@ -635,7 +635,7 @@
// packageObjects typechecks all package objects, but not function bodies.
func (check *Checker) packageObjects() {
// add new methods to already type-checked types (from a prior Checker.Files call)
- for _, obj := range check.objLst {
+ for _, obj := range check.objList {
if obj, _ := obj.(*TypeName); obj != nil && obj.typ != nil {
check.collectMethods(obj)
}
@@ -658,7 +658,7 @@
// its Type is Invalid.
//
// Investigate and reenable this branch.
- for _, obj := range check.objLst {
+ for _, obj := range check.objList {
check.objDecl(obj, nil)
}
} else {
@@ -670,7 +670,7 @@
var aliasList []*TypeName
var othersList []Object // everything that's not a type
// phase 1: non-alias type declarations
- for _, obj := range check.objLst {
+ for _, obj := range check.objList {
if tname, _ := obj.(*TypeName); tname != nil {
if check.objMap[tname].tdecl.Assign.IsValid() {
aliasList = append(aliasList, tname)
```
```
The name of the file: src/go/types/check.go
Insertions: 4, Deletions: 4.

@@ -161,10 +161,10 @@
fset *token.FileSet
pkg *Package
*Info
- nextID uint64 // unique Id for type parameters (first valid Id is 1)
- objMap map[Object]*declInfo // maps package-level objects and (non-interface) methods to declaration info
- objLst []Object // source-ordered keys of objMap
- impMap map[importKey]*Package // maps (import path, source directory) to (complete or fake) package
+ nextID uint64 // unique Id for type parameters (first valid Id is 1)
+ objMap map[Object]*declInfo // maps package-level objects and (non-interface) methods to declaration info
+ objList []Object // source-ordered keys of objMap
+ impMap map[importKey]*Package // maps (import path, source directory) to (complete or fake) package
// see TODO in validtype.go
// valids instanceLookup // valid *Named (incl. instantiated) types per the validType check

```
```
The name of the file: src/cmd/compile/internal/types2/check.go
Insertions: 4, Deletions: 4.

@@ -141,10 +141,10 @@
ctxt *Context // context for de-duplicating instances
pkg *Package
*Info
- nextID uint64 // unique Id for type parameters (first valid Id is 1)
- objMap map[Object]*declInfo // maps package-level objects and (non-interface) methods to declaration info
- objLst []Object // source-ordered keys of objMap
- impMap map[importKey]*Package // maps (import path, source directory) to (complete or fake) package
+ nextID uint64 // unique Id for type parameters (first valid Id is 1)
+ objMap map[Object]*declInfo // maps package-level objects and (non-interface) methods to declaration info
+ objList []Object // source-ordered keys of objMap
+ impMap map[importKey]*Package // maps (import path, source directory) to (complete or fake) package
// see TODO in validtype.go
// valids instanceLookup // valid *Named (incl. instantiated) types per the validType check

```
```
The name of the file: src/cmd/compile/internal/types2/resolver.go
Insertions: 6, Deletions: 6.

@@ -510,13 +510,13 @@

// sortObjects sorts package-level objects by source-order for reproducible processing
func (check *Checker) sortObjects() {
- check.objLst = make([]Object, len(check.objMap))
+ check.objList = make([]Object, len(check.objMap))
i := 0
for obj := range check.objMap {
- check.objLst[i] = obj
+ check.objList[i] = obj
i++
}
- slices.SortFunc(check.objLst, func(a, b Object) int {
+ slices.SortFunc(check.objList, func(a, b Object) int {
return cmp.Compare(a.order(), b.order())
})
}
@@ -640,7 +640,7 @@
// packageObjects typechecks all package objects, but not function bodies.
func (check *Checker) packageObjects() {
// add new methods to already type-checked types (from a prior Checker.Files call)
- for _, obj := range check.objLst {
+ for _, obj := range check.objList {
if obj, _ := obj.(*TypeName); obj != nil && obj.typ != nil {
check.collectMethods(obj)
}
@@ -663,7 +663,7 @@
// its Type is Invalid.
//
// Investigate and reenable this branch.
- for _, obj := range check.objLst {
+ for _, obj := range check.objList {
check.objDecl(obj, nil)
}
} else {
@@ -675,7 +675,7 @@
var aliasList []*TypeName
var othersList []Object // everything that's not a type
// phase 1: non-alias type declarations
- for _, obj := range check.objLst {
+ for _, obj := range check.objList {
if tname, _ := obj.(*TypeName); tname != nil {
if check.objMap[tname].tdecl.Alias {
aliasList = append(aliasList, tname)
```

Change information

Commit message:
go/types, types2: pull up package-level object sort to a separate phase

This step allows future additional phases to reuse the sorted object
list. Preparation for upcoming CLs.
Change-Id: I22eaffd5bbe39c7cc101c6d860011dc3cb98ce37
Reviewed-by: Robert Griesemer <g...@google.com>
Auto-Submit: Mark Freeman <markf...@google.com>
Files:
  • M src/cmd/compile/internal/types2/check.go
  • M src/cmd/compile/internal/types2/resolver.go
  • M src/go/types/check.go
  • M src/go/types/resolver.go
Change size: M
Delta: 4 files changed, 46 insertions(+), 34 deletions(-)
Branch: refs/heads/master
Submit Requirements:
  • requirement satisfiedCode-Review: +2 by Robert Griesemer
  • requirement satisfiedTryBots-Pass: LUCI-TryBot-Result+1 by Go LUCI
Open in Gerrit
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: merged
Gerrit-Project: go
Gerrit-Branch: master
Gerrit-Change-Id: I22eaffd5bbe39c7cc101c6d860011dc3cb98ce37
Gerrit-Change-Number: 715480
Gerrit-PatchSet: 5
Gerrit-Owner: Mark Freeman <markf...@google.com>
Gerrit-Reviewer: Gopher Robot <go...@golang.org>
Gerrit-Reviewer: Mark Freeman <markf...@google.com>
Gerrit-Reviewer: Robert Griesemer <g...@google.com>
open
diffy
satisfied_requirement
Reply all
Reply to author
Forward
0 new messages