-
Notifications
You must be signed in to change notification settings - Fork 43
/
env.go
42 lines (35 loc) · 865 Bytes
/
env.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
38
39
40
41
42
package quasigo
type funcKey struct {
qualifier string
name string
}
func (k funcKey) String() string {
if k.qualifier != "" {
return k.qualifier + "." + k.name
}
return k.name
}
type nativeFunc struct {
mappedFunc func(*ValueStack)
name string // Needed for the readable disasm
}
func newEnv() *Env {
return &Env{
nameToNativeFuncID: make(map[funcKey]uint16),
nameToFuncID: make(map[funcKey]uint16),
debug: newDebugInfo(),
}
}
func (env *Env) addNativeFunc(key funcKey, f func(*ValueStack)) {
id := len(env.nativeFuncs)
env.nativeFuncs = append(env.nativeFuncs, nativeFunc{
mappedFunc: f,
name: key.String(),
})
env.nameToNativeFuncID[key] = uint16(id)
}
func (env *Env) addFunc(key funcKey, f *Func) {
id := len(env.userFuncs)
env.userFuncs = append(env.userFuncs, f)
env.nameToFuncID[key] = uint16(id)
}