我对来自 Ubuntu 存储库的Lua 5.1有以下问题。但问题与从Hardy(旧)到Precise(相当新)的 Lua 相同。
我想预编译以下小 Lua 代码:
i = 0;
以下我在 C++ 程序中使用的代码:
typedef struct {
size_t *len;
char **data;
} BS_DESCRIP;
static int hgl_lua_Writer(lua_State * /*l*/, const void *p, size_t sz, void *ud) {
BS_DESCRIP *bd = (BS_DESCRIP *)ud;
char *newData;
if((newData = (char *)realloc(*(bd->data), (*(bd->len)) + sz))) {
memcpy(newData + (*(bd->len)), p, sz);
*(bd->data) = newData;
*(bd->len) += sz;
} else {
free(newData);
return 1;
}
return 0;
}
char *CompilerBase::luaCompile(char *script, size_t *scriptLen) const throw(Exception::LuaException) {
char *byteCode = 0L;
lua_State *l = Type::Lua::LuaTypeBase::m_luaInit.m_luaState;
if(l) {
size_t byteCodeLen = 0;
int ret;
if(!(ret = luaL_loadstring(l, script))) {
BS_DESCRIP bd = { &byteCodeLen, &byteCode };
lua_dump(l, hgl_lua_Writer, &bd);
lua_pop(l, 1);
logDebug("Rechecking pre-compiled Lua string...");
ret = luaL_loadstring(l, byteCode);
}
if(ret) {
if(ret == LUA_ERRSYNTAX) {
throw Exception::LuaException(lua_tostring(l, -1));
} else if(ret == LUA_ERRMEM) {
throw Exception::LuaException("Lua memory allocation error");
} else {
throw Exception::LuaException("Lua unknown error");
}
} else {
*scriptLen = byteCodeLen;
}
} else {
throw Exception::LuaException("Lua hasn't been initialized");
}
return byteCode;
}
包括上述最低代码在内的任何 Lua 代码在“重新检查”时已经失败并出现错误
二进制字符串:预编译块中的意外结束,但我找不到错误。
我的错误在哪里?我没有想法:-(