public object GetValue(int index) { string type = mLuaState.L_TypeName(index); switch (type) { case "number": return(mLuaState.ToNumber(index)); case "boolean": return(mLuaState.ToBoolean(index)); case "string": string utf8 = mLuaState.ToString(index); return(XCSharp.DecodeUTF8(utf8)); case "function": return(mLuaState.L_Ref(UniLua.LuaDef.LUA_REGISTRYINDEX)); case "table": XTable table = new XTable(); { mLuaState.PushValue(index); int t = mLuaState.GetTop(); mLuaState.PushNil(); while (mLuaState.Next(t)) { object key = this.GetValue(-2); object val = this.GetValue(-1); table[key] = val; mLuaState.Pop(1); } mLuaState.Pop(1); } return(table); default: return(mLuaState.ToUserData(index)); } }