More work on redirect
This commit is contained in:
@@ -292,8 +292,8 @@ void SourceDB::update(const util::LuaSourceVec &source) {
|
||||
// Clear all the classes in the registry classes table.
|
||||
//
|
||||
static void source_clear_globals(lua_State *L) {
|
||||
LuaVar classname, classtab, key, globtab, classes;
|
||||
LuaExtStack LS(L, classname, classtab, key, globtab, classes);
|
||||
LuaVar classname, classtab, key, globtab, classes, funcnames;
|
||||
LuaExtStack LS(L, classname, classtab, key, globtab, classes, funcnames);
|
||||
|
||||
LS.getglobaltable(globtab);
|
||||
LS.cleartable(globtab, true);
|
||||
@@ -306,8 +306,45 @@ static void source_clear_globals(lua_State *L) {
|
||||
assert(LS.istable(classtab));
|
||||
LS.cleartable(classtab, true);
|
||||
}
|
||||
|
||||
LS.rawget(funcnames, LuaRegistry, "funcnames");
|
||||
assert(LS.istable(funcnames));
|
||||
LS.cleartable(funcnames, true);
|
||||
}
|
||||
|
||||
void SourceDB::rebuild_funcnames() {
|
||||
lua_State *L = lua_state_;
|
||||
LuaVar globtab, funcnames, key, val, key2, val2;
|
||||
LuaExtStack LS(L, globtab, funcnames, key, val, key2, val2);
|
||||
|
||||
LS.getglobaltable(globtab);
|
||||
LS.rawget(funcnames, LuaRegistry, "funcnames");
|
||||
|
||||
// Top-level functions in the global environment.
|
||||
LS.set(key, LuaNil);
|
||||
while (LS.next(globtab, key, val) != 0) {
|
||||
if (!LS.isstring(key)) continue;
|
||||
if (LS.isfunction(val)) {
|
||||
LS.rawset(funcnames, val, key);
|
||||
}
|
||||
}
|
||||
|
||||
// Functions one level deep inside class tables.
|
||||
LS.set(key, LuaNil);
|
||||
while (LS.next(globtab, key, val) != 0) {
|
||||
if (!LS.isstring(key)) continue;
|
||||
if (!LS.istable(val)) continue;
|
||||
eng::string classname = LS.ckstring(key);
|
||||
LS.set(key2, LuaNil);
|
||||
while (LS.next(val, key2, val2) != 0) {
|
||||
if (!LS.isstring(key2)) continue;
|
||||
if (LS.isfunction(val2)) {
|
||||
eng::string fullname = classname + "." + LS.ckstring(key2);
|
||||
LS.rawset(funcnames, val2, fullname);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Load all the 'LuaDefine' C functions into the lua state.
|
||||
//
|
||||
@@ -406,7 +443,7 @@ void SourceDB::rebuild_core() {
|
||||
source_clear_globals(lua_state_);
|
||||
source_load_cfunctions(lua_state_);
|
||||
source_load_cconstants(lua_state_);
|
||||
}
|
||||
}
|
||||
|
||||
eng::string SourceDB::rebuild_module(const eng::string &mod) {
|
||||
if (mod == "CORE") {
|
||||
|
||||
Reference in New Issue
Block a user