public static bool CheckType(IntPtr ptr, int p, out Type t) { string tname = null; LuaTypes lt = LuaNativeMethods.lua_type(ptr, p); switch (lt) { case LuaTypes.TYPE_USERDATA: object o = CheckObj(ptr, p); if (o.GetType() != monoType) { throw new Exception(string.Format("{0} expect Type, got {1}", p, o.GetType().Name)); } t = (Type)o; return(true); case LuaTypes.TYPE_TABLE: LuaNativeMethods.lua_pushstring(ptr, "__type"); LuaNativeMethods.lua_rawget(ptr, p); if (!LuaNativeMethods.lua_isnil(ptr, -1)) { t = (Type)CheckObj(ptr, -1); LuaNativeMethods.lua_pop(ptr, 1); return(true); } else { LuaNativeMethods.lua_pushstring(ptr, "__fullname"); LuaNativeMethods.lua_rawget(ptr, p); tname = LuaNativeMethods.lua_tostring(ptr, -1); LuaNativeMethods.lua_pop(ptr, 2); } break; case LuaTypes.TYPE_STRING: CheckType(ptr, p, out tname); break; } if (tname == null) { throw new Exception("expect string or type table"); } t = LuaObject.FindType(tname); if (t != null && lt == LuaTypes.TYPE_TABLE) { LuaNativeMethods.lua_pushstring(ptr, "__type"); PushLightObject(ptr, t); LuaNativeMethods.lua_rawset(ptr, p); } return(t != null); }
public static bool IsTypeTable(IntPtr ptr, int p) { if (LuaNativeMethods.lua_type(ptr, p) != LuaTypes.TYPE_TABLE) { return(false); } LuaNativeMethods.lua_pushstring(ptr, "__fullname"); LuaNativeMethods.lua_rawget(ptr, p); if (LuaNativeMethods.lua_isnil(ptr, -1)) { LuaNativeMethods.lua_pop(ptr, 1); return(false); } return(true); }
public static void NewTypeTable(IntPtr ptr, string name) { string[] subt = name.Split('.'); LuaNativeMethods.lua_pushglobaltable(ptr); foreach (string t in subt) { LuaNativeMethods.lua_pushstring(ptr, t); LuaNativeMethods.lua_rawget(ptr, -2); if (LuaNativeMethods.lua_isnil(ptr, -1)) { LuaNativeMethods.lua_pop(ptr, 1); LuaNativeMethods.lua_createtable(ptr, 0, 0); LuaNativeMethods.lua_pushstring(ptr, t); LuaNativeMethods.lua_pushvalue(ptr, -2); LuaNativeMethods.lua_rawset(ptr, -4); } LuaNativeMethods.lua_remove(ptr, -2); } }
public static int TypeToString(IntPtr ptr) { LuaNativeMethods.lua_pushstring(ptr, "__fullname"); LuaNativeMethods.lua_rawget(ptr, -2); return(1); }