From 6c3528d5c186efa3a569b9bf311e3db54c825ff6 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Fri, 1 Jul 2016 11:19:09 -0700 Subject: [PATCH] go/gcimporter15: backport https://golang.org/cl/24648/ Change-Id: Id85050b236f5da2c705c45163c90fef1a396e8f8 Reviewed-on: https://go-review.googlesource.com/24700 Reviewed-by: Alan Donovan --- go/gcimporter15/bexport.go | 3 +++ go/gcimporter15/bimport.go | 10 ++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/go/gcimporter15/bexport.go b/go/gcimporter15/bexport.go index 9ff0d771..7dec3005 100644 --- a/go/gcimporter15/bexport.go +++ b/go/gcimporter15/bexport.go @@ -40,6 +40,9 @@ const debugFormat = false // default: false // If trace is set, debugging output is printed to std out. const trace = false // default: false +// This version doesn't write the nointerface flag for exported methods. +// The corresponding importer handles both "v0" and "v1". +// See also issues #16243, #16244. const exportVersion = "v0" // trackAllTypes enables cycle tracking for all types, not just named diff --git a/go/gcimporter15/bimport.go b/go/gcimporter15/bimport.go index f3fe519e..9fede043 100644 --- a/go/gcimporter15/bimport.go +++ b/go/gcimporter15/bimport.go @@ -26,6 +26,7 @@ type importer struct { data []byte path string buf []byte // for reading strings + version string // object lists strList []string // in order of appearance @@ -75,8 +76,9 @@ func BImportData(fset *token.FileSet, imports map[string]*types.Package, data [] // --- generic export data --- - if v := p.string(); v != "v0" { - return p.read, nil, fmt.Errorf("unknown export data version: %s", v) + p.version = p.string() + if p.version != "v0" && p.version != "v1" { + return p.read, nil, fmt.Errorf("unknown export data version: %s", p.version) } // populate typList with predeclared "known" types @@ -344,6 +346,10 @@ func (p *importer) typ(parent *types.Package) types.Type { params, isddd := p.paramList() result, _ := p.paramList() + if p.version == "v1" { + p.int() // nointerface flag - discarded + } + sig := types.NewSignature(recv.At(0), params, result, isddd) t0.AddMethod(types.NewFunc(pos, parent, name, sig)) }