Makeclass cleaned up
This commit is contained in:
@@ -40,6 +40,16 @@ LuaDefine(source_makeclass, "f") {
|
||||
return LS.result();
|
||||
}
|
||||
|
||||
LuaDefine(source_maketangible, "f") {
|
||||
LuaArg classname;
|
||||
LuaRet classtab;
|
||||
LuaVar subtab;
|
||||
LuaStack LS(L, classname, classtab, subtab);
|
||||
LS.makeclass(classtab, classname);
|
||||
LS.makesubtable(subtab, classtab, "action");
|
||||
return LS.result();
|
||||
}
|
||||
|
||||
// Load the builtins.
|
||||
|
||||
static void load_builtin(lua_State *L, const char *name, lua_CFunction func) {
|
||||
@@ -189,18 +199,22 @@ static void source_clear_globals(lua_State *L) {
|
||||
// Restore the lua builtins from the backup snapshot.
|
||||
//
|
||||
static void source_restore_builtins(lua_State *L) {
|
||||
LuaVar snapshot, key, value, skey, svalue, subglobal;
|
||||
LuaStack LS(L, snapshot, key, value, skey, svalue, subglobal);
|
||||
LuaVar snapshot, key, value, skey, svalue, target;
|
||||
LuaStack LS(L, snapshot, key, value, skey, svalue, target);
|
||||
|
||||
LS.getfield(snapshot, LuaRegistry, "source_snapshot_builtins");
|
||||
LS.setfield(LuaGlobals, "_G", LuaGlobals);
|
||||
LS.set(key, LuaNil);
|
||||
while (LS.next(snapshot, key, value) != 0) {
|
||||
LS.checktable(value);
|
||||
LS.makeclass(subglobal, key);
|
||||
if (LS.equal(key, "_G")) {
|
||||
LS.set(target, LuaGlobals);
|
||||
} else {
|
||||
LS.makeclass(target, key);
|
||||
}
|
||||
LS.set(skey, LuaNil);
|
||||
while (LS.next(value, skey, svalue) != 0) {
|
||||
LS.rawset(subglobal, skey, svalue);
|
||||
LS.rawset(target, skey, svalue);
|
||||
}
|
||||
}
|
||||
LS.result();
|
||||
|
||||
Reference in New Issue
Block a user