]> Cypherpunks repositories - gostls13.git/commitdiff
go/types, go/importer: importing package unsafe is responsibility of importer
authorRobert Griesemer <gri@golang.org>
Fri, 8 Jan 2016 22:27:02 +0000 (14:27 -0800)
committerRobert Griesemer <gri@golang.org>
Sat, 9 Jan 2016 00:19:02 +0000 (00:19 +0000)
TBR adonovan

Fixes #13882.

Change-Id: I8664669f5d6adfec6f16e154263b1f0ea8988175
Reviewed-on: https://go-review.googlesource.com/18445
Reviewed-by: Robert Griesemer <gri@golang.org>
src/go/internal/gcimporter/gcimporter.go
src/go/types/api.go
src/go/types/resolver.go

index a12365a32bad0bbc76e7f2555a89ca2479ed452f..1402aa223e169fe88d546d0159ab8f1cfc3201ab 100644 (file)
@@ -112,13 +112,11 @@ func ImportData(packages map[string]*types.Package, filename, id string, data io
 // The packages map must contain all packages already imported.
 //
 func Import(packages map[string]*types.Package, path, srcDir string) (pkg *types.Package, err error) {
-       // package "unsafe" is handled by the type checker
-       if path == "unsafe" {
-               panic(`gcimporter.Import called for package "unsafe"`)
-       }
-
        filename, id := FindPkg(path, srcDir)
        if filename == "" {
+               if path == "unsafe" {
+                       return types.Unsafe, nil
+               }
                err = fmt.Errorf("can't find import: %s", id)
                return
        }
index 61f0d987624ba7ae00328cafbab70cf00cd045b4..b2ce79f07b99ca8db12f31b87d401658140b925c 100644 (file)
@@ -112,11 +112,12 @@ type Config struct {
        // error found.
        Error func(err error)
 
-       // Importer.Import is called for each import declaration except when
-       // importing package "unsafe". An error is reported if an importer is
-       // needed but none was installed.
-       // If the installed Importer implements Importer2, the Import2 method
+       // An importer is used to import packages referred to from
+       // import declarations.
+       // If the installed importer implements Importer2, Import2
        // is called instead of Import.
+       // An error is reported if an importer is needed but none
+       // was installed.
        Importer Importer
 
        // If Sizes != nil, it provides the sizing functions for package unsafe.
index de255eaac0b17d2d720e20f8d8d712714a4f8c57..56ee5e1c64022272ba4baf0e4044fde77d8375cd 100644 (file)
@@ -183,9 +183,6 @@ func (check *Checker) collectObjects() {
                                                        // TODO(gri) shouldn't create a new one each time
                                                        imp = NewPackage("C", "C")
                                                        imp.fake = true
-                                               } else if path == "unsafe" {
-                                                       // package "unsafe" is known to the language
-                                                       imp = Unsafe
                                                } else {
                                                        // ordinary import
                                                        if importer := check.conf.Importer; importer == nil {