1
0
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:
Matthew Dempsky 2017-09-05 18:49:36 -07:00
parent 261a8d9abd
commit 13772edbbd
2 changed files with 2 additions and 19 deletions

View File

@ -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() {

View File

@ -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