1 Star 0 Fork 0

陈显示/luajitter

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
lua.go 2.10 KB
一键复制 编辑 原始数据 按行查看 历史
陈显示 提交于 2024-08-28 03:10 . 测试库
package luajitter
//#cgo CFLAGS: -I${SRCDIR}/include
//#cgo CFLAGS: -I${SRCDIR}/
//#cgo LDFLAGS: -L${SRCDIR}/lib/win_x86_64 -lluajit
//#include "go_luajit.h"
import "C"
import (
"unsafe"
)
var vmMap = make(map[*C.lua_State]*LuaState)
type LuaState struct {
_l *C.lua_State
}
func NewState() *LuaState {
vm := C.new_luajit_state()
state := &LuaState{
_l: vm,
}
vmMap[vm] = state
return state
}
func (s *LuaState) Close() error {
delete(vmMap, s._l)
C.close_lua(s._l)
return nil
}
func (s *LuaState) DoString(doString string) error {
script := C.CString(doString)
defer C.free(unsafe.Pointer(script))
cErr := C.internal_dostring(s._l, script)
defer C.free_lua_error(cErr)
return LuaErrorToGo(cErr)
}
func (s *LuaState) getGlobal(path string, createIntermediateTables bool) (interface{}, error) {
cPath := C.CString(path)
defer C.free(unsafe.Pointer(cPath))
cResult := C.get_global(s._l, cPath, (C._Bool)(createIntermediateTables))
defer C.free_lua_error(cResult.err)
err := LuaErrorToGo(cResult.err)
var result interface{}
if cResult.value != nil {
valArray := (*[1 << 30]*C.struct_lua_value)(unsafe.Pointer(&cResult.value))
vals := buildGoValues(s, 1, valArray)
if len(vals) > 0 {
result = vals[0]
if valArray[0] != nil {
C.free_temporary_lua_value(s._l, valArray[0])
}
}
}
return result, err
}
func (s *LuaState) GetGlobal(path string) (interface{}, error) {
return s.getGlobal(path, false)
}
func (s *LuaState) setGlobal(path string, value interface{}, createIntermediateTables bool) error {
cPath := C.CString(path)
defer C.free(unsafe.Pointer(cPath))
cValue, err := fromGoValue(s, value, nil)
if err != nil {
return err
}
if cValue.temporary == C._Bool(true) {
defer C.free_temporary_lua_value(s._l, cValue)
}
cErr := C.set_global(s._l, cPath, cValue, (C._Bool)(createIntermediateTables))
defer C.free_lua_error(cErr)
return LuaErrorToGo(cErr)
}
func (s *LuaState) SetGlobal(path string, value interface{}) error {
return s.setGlobal(path, value, false)
}
func (s *LuaState) InitGlobal(path string, value interface{}) error {
return s.setGlobal(path, value, true)
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/chenwl888/luajitter.git
git@gitee.com:chenwl888/luajitter.git
chenwl888
luajitter
luajitter
v1.0.2

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385