diff --git a/go/internal/gccgoimporter/importer_test.go b/go/internal/gccgoimporter/importer_test.go index 28645094..0123736b 100644 --- a/go/internal/gccgoimporter/importer_test.go +++ b/go/internal/gccgoimporter/importer_test.go @@ -92,6 +92,7 @@ var importerTests = [...]importerTest{ {pkgpath: "escapeinfo", name: "NewT", want: "func NewT(data []byte) *T"}, {pkgpath: "issue27856", name: "M", want: "type M struct{E F}"}, {pkgpath: "v1reflect", name: "Type", want: "type Type interface{Align() int; AssignableTo(u Type) bool; Bits() int; ChanDir() ChanDir; Elem() Type; Field(i int) StructField; FieldAlign() int; FieldByIndex(index []int) StructField; FieldByName(name string) (StructField, bool); FieldByNameFunc(match func(string) bool) (StructField, bool); Implements(u Type) bool; In(i int) Type; IsVariadic() bool; Key() Type; Kind() Kind; Len() int; Method(int) Method; MethodByName(string) (Method, bool); Name() string; NumField() int; NumIn() int; NumMethod() int; NumOut() int; Out(i int) Type; PkgPath() string; Size() uintptr; String() string; common() *commonType; rawString() string; runtimeType() *runtimeType; uncommon() *uncommonType}"}, + {pkgpath: "nointerface", name: "I", want: "type I int"}, } func TestGoxImporter(t *testing.T) { diff --git a/go/internal/gccgoimporter/parser.go b/go/internal/gccgoimporter/parser.go index 30842886..28586070 100644 --- a/go/internal/gccgoimporter/parser.go +++ b/go/internal/gccgoimporter/parser.go @@ -545,6 +545,14 @@ func (p *parser) parseNamedType(nlist []int) types.Type { // collect associated methods for p.tok == scanner.Ident { p.expectKeyword("func") + if p.tok == '/' { + // Skip a /*nointerface*/ comment. + p.expect('/') + p.expect('*') + p.expect(scanner.Ident) + p.expect('*') + p.expect('/') + } p.expect('(') receiver, _ := p.parseParam(pkg) p.expect(')') diff --git a/go/internal/gccgoimporter/testdata/nointerface.go b/go/internal/gccgoimporter/testdata/nointerface.go new file mode 100644 index 00000000..6a545f24 --- /dev/null +++ b/go/internal/gccgoimporter/testdata/nointerface.go @@ -0,0 +1,12 @@ +// 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. + +package nointerface + +type I int + +//go:nointerface +func (p *I) Get() int { return int(*p) } + +func (p *I) Set(v int) { *p = I(v) } diff --git a/go/internal/gccgoimporter/testdata/nointerface.gox b/go/internal/gccgoimporter/testdata/nointerface.gox new file mode 100644 index 00000000..7b73d179 --- /dev/null +++ b/go/internal/gccgoimporter/testdata/nointerface.gox @@ -0,0 +1,8 @@ +v3; +package nointerface +pkgpath nointerface +types 3 2 133 17 +type 1 "I" + func /*nointerface*/ (p ) Get () + func (p ) Set (v ) +type 2 *