public static void PushLuaType(this IntPtr l, ILuaTypeHub hub) { LuaObjCache.PushObjFromCache(l, hub.r); if (l.isnoneornil(-1)) { l.pop(1); PushLuaTypeRaw(l, hub); } }
public static void PushLuaObject(this IntPtr l, object val) { if (l != IntPtr.Zero) { if (val == null) { l.checkstack(6); LuaObjCache.PushOrCreateObjCacheReg(l); // reg l.pushlightuserdata(IntPtr.Zero); // reg 0 l.gettable(-2); // reg ud if (!l.isnoneornil(-1)) { l.remove(-2); // ud return; } l.pop(1); // reg l.getmetatable(-1); // reg meta l.GetField(-1, LuaConst.LS_META_KEY_INDEX); // reg meta index l.pushlightuserdata(IntPtr.Zero); // reg meta index 0 LuaTypeHub.EmptyTypeHub.PushLua(l, null); // reg meta index 0 ud l.pushvalue(-1); // reg meta index 0 ud ud l.insert(-6); // ud reg meta index 0 ud l.settable(-3); // ud reg meta index l.pop(3); // ud } else { if (LuaObjCache.PushObjFromCache(l, val)) { return; } var type = val.GetType(); ILuaTypeHub sub = LuaTypeHub.GetTypeHub(type); if (sub != null) { var h = sub.PushLua(l, val); if (sub.ShouldCache && h != IntPtr.Zero) { LuaObjCache.RegObj(l, val, -1, h); } } else { PushLuaRawObject(l, val); l.PushCommonMetaTable(); l.setmetatable(-2); } } } }
public static void PushLuaType(this IntPtr l, Type t) { if (LuaObjCache.PushObjFromCache(l, t)) { return; } ILuaTypeHub hub = LuaTypeHub.GetTypeHub(t); if (hub != null) { PushLuaTypeRaw(l, hub); } else { PushLuaObject(l, t); } }