Initial revision of lua 'doc' function
This commit is contained in:
@@ -6,9 +6,10 @@ LuaSpecial LuaRegistry(LUA_REGISTRYINDEX);
|
||||
LuaNilMarker LuaNil;
|
||||
LuaNewTableMarker LuaNewTable;
|
||||
|
||||
LuaFunctionReg::LuaFunctionReg(const char *m, const char *n, lua_CFunction f) {
|
||||
mode_ = m;
|
||||
LuaFunctionReg::LuaFunctionReg(const char *n, const char *a, const char *d, lua_CFunction f) {
|
||||
name_ = n;
|
||||
args_ = a;
|
||||
docs_ = d;
|
||||
func_ = f;
|
||||
next_ = LuaFunctionRegistry;
|
||||
LuaFunctionRegistry = this;
|
||||
@@ -22,6 +23,15 @@ LuaFunctionReg::List LuaFunctionReg::all() {
|
||||
return result;
|
||||
}
|
||||
|
||||
const LuaFunctionReg *LuaFunctionReg::lookup(lua_CFunction fn) {
|
||||
for (const LuaFunctionReg *r = LuaFunctionRegistry; r != 0; r = r->next_) {
|
||||
if (r->func_ == fn) {
|
||||
return r;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
LuaFunctionReg *LuaFunctionReg::LuaFunctionRegistry;
|
||||
|
||||
bool LuaStack::issortablekey(LuaSlot s) const {
|
||||
@@ -350,6 +360,31 @@ int LuaStack::rawlen(LuaSlot obj) const {
|
||||
return lua_rawlen(L_, obj.index());
|
||||
}
|
||||
|
||||
std::string LuaStack::get_function_name(LuaSlot fn) {
|
||||
LuaVar globals, key, val, skey, sval;
|
||||
LuaStack LS(L_, globals, key, val, skey, sval);
|
||||
LS.getglobaltable(globals);
|
||||
LS.set(key, LuaNil);
|
||||
while (LS.next(globals, key, val)) {
|
||||
if (LS.isstring(key)) {
|
||||
if (LS.rawequal(val, fn)) {
|
||||
return LS.ckstring(key);
|
||||
}
|
||||
if (LS.istable(val)) {
|
||||
LS.set(skey, LuaNil);
|
||||
while (LS.next(val, skey, sval)) {
|
||||
if (LS.isstring(skey) && LS.rawequal(sval, fn)) {
|
||||
std::string n1 = LS.ckstring(key);
|
||||
std::string n2 = LS.ckstring(skey);
|
||||
return n1 + "." + n2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
int LuaStack::gettabletype(LuaSlot tab) const {
|
||||
uint16_t bits = lua_getflagbits(L_, tab.index());
|
||||
return LUA_TT_GENERAL + (bits & 0x000F);
|
||||
|
||||
Reference in New Issue
Block a user