I am using Lua 5.2.1 and have problems while dealing with dumped bytecode.
I am not able to load it correctly among different states.
Could you please guide me?
test.lua
function test()
print("I can execute test")
str = "function call_me()\nprint(\"how about this?\")\nend\n"
bytecode = load(str)
--here I am not calling "bytecode()" as I have to dump call_me function.
end
test2.lua
function test2()
call_me()
end
//Using first lua_State, lets say L1
if( luaL_loadfile( L1, "test.lua" ) || lua_pcall(L1, 0, LUA_MULTRET, 0)) return 1;
lua_getglobal( L1, "test" );
lua_call( L, 0, 0 );
//At this point, my "call_me" function should be loaded.
//Here, after loading test2.lua, I am *not* calling lua_pcall, as I am going to dump this.
if( luaL_loadfile( L1, "test2.lua" ) ) return 1;
//Now call "combine", this is the same function which is in luac.c, I am using it before I dump.
//without this lua_dump fails( rather crashes. )
combine(L1, 1);
if( lua_dump( L1, writer, buffer_ptr ) ) return 1;
//Here(using state L1) If I load my dumped buffer and try to execute test2(). it all works fine.
//Problem starts when I load this buffer in different state, lets say L2.
if( luaL_loadbufferx( L2, buffer_ptr, buffer_size, "blob", "b" ) || lua_pcall(L2, 0, LUA_MULTRET, 0) ) return 1;
lua_getglobal( L2, "test2" );
lua_call( L2, 0, 0 );
//In this case, it is able to execute test2() but inside that it is unable to find "call_me". it says "nil".
--Ashish