]> Cypherpunks repositories - gostls13.git/commitdiff
go/importer: implement support for gccgo
authorRobert Griesemer <gri@golang.org>
Wed, 17 Jun 2015 00:28:01 +0000 (17:28 -0700)
committerRobert Griesemer <gri@golang.org>
Wed, 17 Jun 2015 23:04:15 +0000 (23:04 +0000)
Change-Id: I0e1aab2fe2340a1fbb7f377dbd7a72ea6f0477d8
Reviewed-on: https://go-review.googlesource.com/11153
Reviewed-by: Alan Donovan <adonovan@google.com>
src/go/importer/importer.go

index 1ac44c73026ba2bcfca763b1bc0fa1cf89e8b7f6..4590ca30e60155d92cb842ab3745b73ff4a89195 100644 (file)
@@ -6,6 +6,7 @@
 package importer
 
 import (
+       "go/internal/gccgoimporter"
        "go/internal/gcimporter"
        "go/types"
        "io"
@@ -27,8 +28,17 @@ func For(compiler string, lookup Lookup) types.Importer {
                }
                panic("gc importer for custom import path lookup not yet implemented")
        case "gccgo":
-               // TODO(gri) We have the code. Plug it in.
-               panic("gccgo importer unimplemented")
+               if lookup == nil {
+                       var inst gccgoimporter.GccgoInstallation
+                       if err := inst.InitFromDriver("gccgo"); err != nil {
+                               return nil
+                       }
+                       return &gccgoimports{
+                               packages: make(map[string]*types.Package),
+                               importer: inst.GetImporter(nil, nil),
+                       }
+               }
+               panic("gccgo importer for custom import path lookup not yet implemented")
        }
        // compiler not supported
        return nil
@@ -39,8 +49,21 @@ func Default() types.Importer {
        return For(runtime.Compiler, nil)
 }
 
+// gc support
+
 type gcimports map[string]*types.Package
 
 func (m gcimports) Import(path string) (*types.Package, error) {
        return gcimporter.Import(m, path)
 }
+
+// gccgo support
+
+type gccgoimports struct {
+       packages map[string]*types.Package
+       importer gccgoimporter.Importer
+}
+
+func (m *gccgoimports) Import(path string) (*types.Package, error) {
+       return m.importer(m.packages, path)
+}