forked from mattn/anko
/
packages.go
37 lines (33 loc) · 851 Bytes
/
packages.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package packages
import (
"fmt"
"github.com/mattn/anko/vm"
)
var Packages = make(map[string]map[string]interface{}, 16)
var PackageTypes = make(map[string]map[string]interface{}, 4)
func DefineImport(e *vm.Env) {
e.Define("import", func(source string) *vm.Env {
methods, ok := Packages[source]
if !ok {
panic(fmt.Sprintf("package '%s' not found", source))
}
var err error
pack := e.NewPackage(source)
for methodName, methodValue := range methods {
err = pack.Define(methodName, methodValue)
if err != nil {
panic(fmt.Sprintf("import Define error: %v", err))
}
}
types, ok := PackageTypes[source]
if ok {
for typeName, typeValue := range types {
err = pack.DefineType(typeName, typeValue)
if err != nil {
panic(fmt.Sprintf("import DefineType error: %v", err))
}
}
}
return pack
})
}