summaryrefslogtreecommitdiff
path: root/src/scripting/luascript.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/scripting/luascript.cpp')
-rw-r--r--src/scripting/luascript.cpp20
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);