Makeclass cleaned up

This commit is contained in:
2021-02-10 16:22:24 -05:00
parent e838b4ac97
commit 3883f86dee
13 changed files with 120 additions and 54 deletions

View File

@@ -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();