63 lines
1.2 KiB
Go
63 lines
1.2 KiB
Go
package gluaflag
|
|
|
|
import "github.com/yuin/gopher-lua"
|
|
|
|
func toStringSlice(t *lua.LTable) []string {
|
|
args := make([]string, 0, t.Len())
|
|
if zv := t.RawGet(lua.LNumber(0)); zv.Type() != lua.LTNil {
|
|
args = append(args, zv.String())
|
|
}
|
|
|
|
t.ForEach(func(k, v lua.LValue) {
|
|
if key, ok := k.(lua.LNumber); !ok || int(key) < 1 {
|
|
return
|
|
}
|
|
args = append(args, v.String())
|
|
})
|
|
return args
|
|
}
|
|
|
|
func toTable(L *lua.LState, s []string) *lua.LTable {
|
|
table := L.NewTable()
|
|
for _, str := range s {
|
|
table.Append(lua.LString(str))
|
|
}
|
|
return table
|
|
}
|
|
|
|
func forEachStrings(L *lua.LState, fn *lua.LFunction) []string {
|
|
p := lua.P{
|
|
Fn: fn,
|
|
NRet: -1,
|
|
Protect: true,
|
|
}
|
|
res := []string{}
|
|
|
|
for L.CallByParam(p) != nil {
|
|
switch L.GetTop() {
|
|
case 0:
|
|
break
|
|
case 1:
|
|
res = append(res, L.Get(-1).String())
|
|
L.Pop(1)
|
|
case 2:
|
|
res = append(res, L.Get(-2).String())
|
|
L.Pop(2)
|
|
default:
|
|
L.RaiseError("Iterator should return 1 or 2 arguments: got %v", L.GetTop())
|
|
}
|
|
}
|
|
|
|
return res
|
|
}
|
|
|
|
func checkFlagSet(L *lua.LState, i int) *FlagSet {
|
|
ud := L.CheckUserData(i)
|
|
if gf, ok := ud.Value.(*FlagSet); ok {
|
|
return gf
|
|
}
|
|
|
|
L.RaiseError("expected flagset userdata, got: `%T`", ud.Value)
|
|
return nil
|
|
}
|