From 6f857df7d488d55727e9513a1517bfc591b11fb3 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Wed, 13 Jun 2018 10:59:32 -0700 Subject: [PATCH] go/internal/gccgoimporter: use types.NewInterface (not NewInterface2) for builds before Go 1.11 For https://github.com/golang/lint/issues/402. Change-Id: I06d944aaa168fb595ff96eb27a7d6e7da344ebd6 Reviewed-on: https://go-review.googlesource.com/118564 Run-TryBot: Robert Griesemer Reviewed-by: Andrew Bonventre --- go/internal/gccgoimporter/newInterface10.go | 21 +++++++++++++++++++++ go/internal/gccgoimporter/newInterface11.go | 13 +++++++++++++ go/internal/gccgoimporter/parser.go | 2 +- 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 go/internal/gccgoimporter/newInterface10.go create mode 100644 go/internal/gccgoimporter/newInterface11.go diff --git a/go/internal/gccgoimporter/newInterface10.go b/go/internal/gccgoimporter/newInterface10.go new file mode 100644 index 00000000..9a108d48 --- /dev/null +++ b/go/internal/gccgoimporter/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 gccgoimporter + +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/gccgoimporter/newInterface11.go b/go/internal/gccgoimporter/newInterface11.go new file mode 100644 index 00000000..21424a9e --- /dev/null +++ b/go/internal/gccgoimporter/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 gccgoimporter + +import "go/types" + +func newInterface(methods []*types.Func, embeddeds []types.Type) *types.Interface { + return types.NewInterface2(methods, embeddeds) +} diff --git a/go/internal/gccgoimporter/parser.go b/go/internal/gccgoimporter/parser.go index 8d00cba6..18a18632 100644 --- a/go/internal/gccgoimporter/parser.go +++ b/go/internal/gccgoimporter/parser.go @@ -602,7 +602,7 @@ func (p *parser) parseInterfaceType(pkg *types.Package) types.Type { } p.expect('}') - return types.NewInterface2(methods, embeddeds) + return newInterface(methods, embeddeds) } // PointerType = "*" ("any" | Type) .