diff options
Diffstat (limited to 'src/scripting/luascript.cpp')
-rw-r--r-- | src/scripting/luascript.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/scripting/luascript.cpp b/src/scripting/luascript.cpp index c487aa67..605302e6 100644 --- a/src/scripting/luascript.cpp +++ b/src/scripting/luascript.cpp @@ -35,6 +35,15 @@ LuaScript::~LuaScript() lua_close(mState); } +void LuaScript::prepare(Ref function) +{ + assert(nbArgs == -1); + lua_rawgeti(mState, LUA_REGISTRYINDEX, function); + assert(lua_isfunction(mState, -1)); + nbArgs = 0; + mCurFunction = "<callback>"; // We don't know the function name +} + void LuaScript::prepare(const std::string &name) { assert(nbArgs == -1); @@ -108,6 +117,17 @@ int LuaScript::execute() mCurFunction.clear(); } +void LuaScript::assignCallback(Script::Ref &function) +{ + assert(lua_isfunction(mState, -1)); + + // If there is already a callback set, replace it + if (function != NoRef) + luaL_unref(mState, LUA_REGISTRYINDEX, function); + + function = luaL_ref(mState, LUA_REGISTRYINDEX); +} + void LuaScript::load(const char *prog, const char *name) { int res = luaL_loadbuffer(mState, prog, std::strlen(prog), name); |