diff options
author | Robert Griesemer <gri@golang.org> | 2020-10-22 15:32:05 -0700 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2020-10-27 03:37:05 +0000 |
commit | 87eab74628bc23831bd783806e8ec16927bd9a50 (patch) | |
tree | adac6d1cd51a2d77dbc10926b5be0894c2a4dfd2 /src/cmd/compile/internal/importer | |
parent | 5bfd2964a6519c8046b16b41bb9f84ecb6202356 (diff) | |
download | go-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.go | 18 |
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) { |