diff --git a/go/internal/gcimporter/bimport.go b/go/internal/gcimporter/bimport.go index 6d984575..b31eacfc 100644 --- a/go/internal/gcimporter/bimport.go +++ b/go/internal/gcimporter/bimport.go @@ -538,7 +538,7 @@ func (p *importer) typ(parent *types.Package, tname *types.Named) types.Type { embeddeds = append(embeddeds, p.typ(parent, nil)) } - t := types.NewInterface2(p.methodList(parent, tname), embeddeds) + t := newInterface(p.methodList(parent, tname), embeddeds) p.interfaceList = append(p.interfaceList, t) if p.trackAllTypes { p.typList[n] = t diff --git a/go/internal/gcimporter/newInterface10.go b/go/internal/gcimporter/newInterface10.go new file mode 100644 index 00000000..463f2522 --- /dev/null +++ b/go/internal/gcimporter/newInterface10.go @@ -0,0 +1,21 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.11 + +package gcimporter + +import "go/types" + +func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface { + named := make([]*types.Named, len(embeddeds)) + for i, e := range embeddeds { + var ok bool + named[i], ok = e.(*types.Named) + if !ok { + panic("embedding of non-defined interfaces in interfaces is not supported before Go 1.11") + } + } + return types.NewInterface(methods, named) +} diff --git a/go/internal/gcimporter/newInterface11.go b/go/internal/gcimporter/newInterface11.go new file mode 100644 index 00000000..58d1735e --- /dev/null +++ b/go/internal/gcimporter/newInterface11.go @@ -0,0 +1,13 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.11 + +package gcimporter + +import "go/types" + +func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface { + return types.NewInterface2(methods, embeddeds) +}