In process of converting LuaSnap to use eris, not finished
This commit is contained in:
@@ -320,3 +320,35 @@ void SourceDB::run_unittests() {
|
||||
LS.result();
|
||||
}
|
||||
|
||||
void SourceDB::init(lua_State *L) {
|
||||
lua_state_ = L;
|
||||
LuaVar globtab, persist, unpersist, classname, classtab, funcname, funcp, rawfunc;
|
||||
LuaStack LS(L, globtab, persist, unpersist, classname, classtab, funcname, funcp, rawfunc);
|
||||
|
||||
// We need to register all C functions with the eris permanents tables.
|
||||
source_clear_globals(L);
|
||||
source_install_builtins(L);
|
||||
source_load_cfunctions(L);
|
||||
LS.getglobaltable(globtab);
|
||||
LS.rawget(persist, LuaRegistry, "persist");
|
||||
LS.rawget(unpersist, LuaRegistry, "unpersist");
|
||||
LS.set(classname, LuaNil);
|
||||
while (LS.next(globtab, classname, classtab) != 0) {
|
||||
if (LS.isstring(classname) && LS.istable(classtab)) {
|
||||
LS.set(funcname, LuaNil);
|
||||
while (LS.next(classtab, funcname, funcp) != 0) {
|
||||
if (LS.isstring(funcname) && LS.iscfunction(funcp)) {
|
||||
std::string full = "cfunc:";
|
||||
full += LS.ckstring(classname);
|
||||
full += ".";
|
||||
full += LS.ckstring(funcname);
|
||||
lua_pushcfunction(L, lua_tocfunction(L, funcp.index()));
|
||||
lua_replace(L, rawfunc.index());
|
||||
LS.rawset(persist, rawfunc, full);
|
||||
LS.rawset(unpersist, full, rawfunc);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user