コード例 #1
0
ファイル: machine.go プロジェクト: sarifsystems/sarif
func (m *Machine) Do(code string, arg interface{}) (string, error, interface{}) {
	m.StateLock.Lock()
	defer m.StateLock.Unlock()

	m.FlushOut()
	fn, err := m.Lua.LoadString(code)
	if err != nil {
		m.InformListeners("err/internal", err.Error())
		return "", err, nil
	}
	m.Lua.Push(fn)
	m.Lua.Push(luareflect.ToLua(m.Lua, arg))
	if err := m.Lua.PCall(1, 1, nil); err != nil {
		out := m.FlushOut()
		m.InformListeners("err/internal", err.Error())
		return out, err, nil
	}
	out := m.FlushOut()
	ret := m.Lua.Get(-1)
	m.Lua.Pop(1)

	var rv interface{}
	if ret != nil && ret != lua.LNil {
		rv = luareflect.DecodeToBasic(ret)
	}

	return out, nil, rv
}
コード例 #2
0
ファイル: util.go プロジェクト: sarifsystems/sarif
func messageToTable(L *lua.LState, msg sarif.Message) lua.LValue {
	t := L.NewTable()
	tableSetString(t, "sarif", msg.Version)
	tableSetString(t, "id", msg.Id)
	tableSetString(t, "action", msg.Action)
	tableSetString(t, "src", msg.Source)
	tableSetString(t, "dest", msg.Destination)
	tableSetString(t, "corr", msg.CorrId)
	tableSetString(t, "text", msg.Text)

	p := make(map[string]interface{})
	msg.DecodePayload(&p)
	t.RawSetH(lua.LString("p"), luareflect.ToLua(L, p))
	return t
}