From 58c6d92c350b07117a185248780ff4a905bafc29 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 13 Jun 2018 10:42:45 -0700 Subject: [PATCH] go/internal/gcimporter: use types.NewInterface (not NewInterface2) for builds before Go 1.11 For https://github.com/golang/lint/issues/402. Change-Id: If8802c93679af57bcb50c43f386f37458813d910 Reviewed-on: https://go-review.googlesource.com/118563 Run-TryBot: Robert Griesemer Reviewed-by: Ian Lance Taylor --- go/internal/gcimporter/bimport.go | 2 +- go/internal/gcimporter/newInterface10.go | 21 +++++++++++++++++++++ go/internal/gcimporter/newInterface11.go | 13 +++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 go/internal/gcimporter/newInterface10.go create mode 100644 go/internal/gcimporter/newInterface11.go 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) +}