loader: support global variables in CGo (#173)

Global variables (like functions) must be declared in the import "C" preamble and can then be used from Go.
This commit is contained in:
Ayke
2019-02-08 13:04:03 +01:00
committed by Ron Evans
parent 7dd5839f47
commit 01f6aff422
8 changed files with 92 additions and 34 deletions
+15 -1
View File
@@ -389,11 +389,25 @@ func (g *Global) LinkName() string {
if g.linkName != "" {
return g.linkName
}
if name := g.CName(); name != "" {
return name
}
return g.RelString(nil)
}
func (g *Global) IsExtern() bool {
return g.extern
return g.extern || g.CName() != ""
}
// Return the name of the C global if this is a CGo wrapper. Otherwise, return a
// zero-length string.
func (g *Global) CName() string {
name := g.Name()
if strings.HasPrefix(name, "C.") {
// created by ../loader/cgo.go
return name[2:]
}
return ""
}
func (g *Global) Initializer() Value {