mirror of
https://github.com/golang/go
synced 2024-11-20 07:44:41 -07:00
cmd/compile: simplify exporting universal 'error' type
There shouldn't be any problems setting error's "Orig" (underlying) type to a separate anonymous interface, as this is already how go/types defines it. Change-Id: I44e9c4048ffe362ce329e8306632e38b5ccfecff Reviewed-on: https://go-review.googlesource.com/61790 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Daniel Martí <mvdan@mvdan.cc> Reviewed-by: Alan Donovan <adonovan@google.com>
This commit is contained in:
parent
261a8d9abd
commit
13772edbbd
@ -601,8 +601,6 @@ func isInlineable(n *Node) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
var errorInterface *types.Type // lazily initialized
|
||||
|
||||
func (p *exporter) typ(t *types.Type) {
|
||||
if t == nil {
|
||||
Fatalf("exporter: nil type")
|
||||
@ -654,19 +652,7 @@ func (p *exporter) typ(t *types.Type) {
|
||||
p.qualifiedName(tsym)
|
||||
|
||||
// write underlying type
|
||||
orig := t.Orig
|
||||
if orig == types.Errortype {
|
||||
// The error type is the only predeclared type which has
|
||||
// a composite underlying type. When we encode that type,
|
||||
// make sure to encode the underlying interface rather than
|
||||
// the named type again. See also the comment in universe.go
|
||||
// regarding the errortype and issue #15920.
|
||||
if errorInterface == nil {
|
||||
errorInterface = makeErrorInterface()
|
||||
}
|
||||
orig = errorInterface
|
||||
}
|
||||
p.typ(orig)
|
||||
p.typ(t.Orig)
|
||||
|
||||
// interfaces don't have associated methods
|
||||
if t.Orig.IsInterface() {
|
||||
|
@ -385,10 +385,7 @@ func lexinit1() {
|
||||
s := builtinpkg.Lookup("error")
|
||||
types.Errortype = makeErrorInterface()
|
||||
types.Errortype.Sym = s
|
||||
// TODO: If we can prove that it's safe to set errortype.Orig here
|
||||
// than we don't need the special errortype/errorInterface case in
|
||||
// bexport.go. See also issue #15920.
|
||||
// errortype.Orig = makeErrorInterface()
|
||||
types.Errortype.Orig = makeErrorInterface()
|
||||
s.Def = asTypesNode(typenod(types.Errortype))
|
||||
|
||||
// We create separate byte and rune types for better error messages
|
||||
|
Loading…
Reference in New Issue
Block a user