aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/importer
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2020-10-22 15:32:05 -0700
committerRobert Griesemer <gri@golang.org>2020-10-27 03:37:05 +0000
commit87eab74628bc23831bd783806e8ec16927bd9a50 (patch)
treeadac6d1cd51a2d77dbc10926b5be0894c2a4dfd2 /src/cmd/compile/internal/importer
parent5bfd2964a6519c8046b16b41bb9f84ecb6202356 (diff)
downloadgo-87eab74628bc23831bd783806e8ec16927bd9a50.tar.gz
go-87eab74628bc23831bd783806e8ec16927bd9a50.zip
[dev.typeparams] cmd/compile: enable type-checking of generic code
This change makes a first connection between the compiler and types2. When the -G flag is provided, the compiler accepts code using type parameters; with this change generic code is also type-checked (but then compilation ends). Change-Id: I0fa6f6213267a458a6b33afe8ff26869fd838a63 Reviewed-on: https://go-review.googlesource.com/c/go/+/264303 Trust: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src/cmd/compile/internal/importer')
-rw-r--r--src/cmd/compile/internal/importer/iimport.go18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/cmd/compile/internal/importer/iimport.go b/src/cmd/compile/internal/importer/iimport.go
index b9c1ccfb66..6cb8e9377d 100644
--- a/src/cmd/compile/internal/importer/iimport.go
+++ b/src/cmd/compile/internal/importer/iimport.go
@@ -58,6 +58,8 @@ const (
interfaceType
)
+const io_SeekCurrent = 1 // io.SeekCurrent (not defined in Go 1.4)
+
// iImportData imports a package from the serialized package data
// and returns the number of bytes consumed and a reference to the package.
// If the export data version is not recognized or the format is otherwise
@@ -87,10 +89,10 @@ func iImportData(imports map[string]*types2.Package, data []byte, path string) (
sLen := int64(r.uint64())
dLen := int64(r.uint64())
- whence, _ := r.Seek(0, io.SeekCurrent)
+ whence, _ := r.Seek(0, io_SeekCurrent)
stringData := data[whence : whence+sLen]
declData := data[whence+sLen : whence+sLen+dLen]
- r.Seek(sLen+dLen, io.SeekCurrent)
+ r.Seek(sLen+dLen, io_SeekCurrent)
p := iimporter{
ipath: path,
@@ -162,7 +164,7 @@ func iImportData(imports map[string]*types2.Package, data []byte, path string) (
// package was imported completely and without errors
localpkg.MarkComplete()
- consumed, _ := r.Seek(0, io.SeekCurrent)
+ consumed, _ := r.Seek(0, io_SeekCurrent)
return int(consumed), localpkg, nil
}
@@ -193,7 +195,10 @@ func (p *iimporter) doDecl(pkg *types2.Package, name string) {
}
r := &importReader{p: p, currPkg: pkg}
- r.declReader.Reset(p.declData[off:])
+ // Reader.Reset is not available in Go 1.4.
+ // Use bytes.NewReader for now.
+ // r.declReader.Reset(p.declData[off:])
+ r.declReader = *bytes.NewReader(p.declData[off:])
r.obj(name)
}
@@ -232,7 +237,10 @@ func (p *iimporter) typAt(off uint64, base *types2.Named) types2.Type {
}
r := &importReader{p: p}
- r.declReader.Reset(p.declData[off-predeclReserved:])
+ // Reader.Reset is not available in Go 1.4.
+ // Use bytes.NewReader for now.
+ // r.declReader.Reset(p.declData[off-predeclReserved:])
+ r.declReader = *bytes.NewReader(p.declData[off-predeclReserved:])
t := r.doType(base)
if base == nil || !isInterface(t) {