-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathtable.go
33 lines (26 loc) · 776 Bytes
/
table.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
package binder
import "github.com/yuin/gopher-lua"
// Table lua tables wrapper
type Table struct {
name string
state *lua.LState
static map[string]Handler
dynamic map[string]Handler
}
// Static sets table "static" method (f.e. foo.bar())
func (t *Table) Static(name string, handler Handler) {
t.static[name] = handler
}
// Dynamic sets table "dynamic" method (f.e. foo:bar())
func (t *Table) Dynamic(name string, handler Handler) {
t.dynamic[name] = handler
}
func (t *Table) load() {
mt := t.state.NewTypeMetatable(t.name)
t.state.SetGlobal(t.name, mt)
f := exports(t.static)
for name, fn := range f {
t.state.SetField(mt, name, t.state.NewFunction(fn))
}
t.state.SetField(mt, "__index", t.state.SetFuncs(t.state.NewTable(), exports(t.dynamic)))
}