更新Xlua 到最新版本

This commit is contained in:
2024-09-04 02:07:48 +08:00
parent dba48de5cf
commit 5b79a2d4bb
227 changed files with 5594 additions and 878 deletions

View File

@ -34,6 +34,8 @@ namespace XLua
translator.RegisterPushAndGetAndUpdate<UnityEngine.Ray>(translator.PushUnityEngineRay, translator.Get, translator.UpdateUnityEngineRay);
translator.RegisterPushAndGetAndUpdate<UnityEngine.Bounds>(translator.PushUnityEngineBounds, translator.Get, translator.UpdateUnityEngineBounds);
translator.RegisterPushAndGetAndUpdate<UnityEngine.Ray2D>(translator.PushUnityEngineRay2D, translator.Get, translator.UpdateUnityEngineRay2D);
translator.RegisterPushAndGetAndUpdate<Tutorial.TestEnum>(translator.PushTutorialTestEnum, translator.Get, translator.UpdateTutorialTestEnum);
translator.RegisterPushAndGetAndUpdate<Tutorial.DerivedClass.TestEnumInner>(translator.PushTutorialDerivedClassTestEnumInner, translator.Get, translator.UpdateTutorialDerivedClassTestEnumInner);
}
}
@ -570,6 +572,174 @@ namespace XLua
}
}
int TutorialTestEnum_TypeID = -1;
int TutorialTestEnum_EnumRef = -1;
public void PushTutorialTestEnum(RealStatePtr L, Tutorial.TestEnum val)
{
if (TutorialTestEnum_TypeID == -1)
{
bool is_first;
TutorialTestEnum_TypeID = getTypeId(L, typeof(Tutorial.TestEnum), out is_first);
if (TutorialTestEnum_EnumRef == -1)
{
Utils.LoadCSTable(L, typeof(Tutorial.TestEnum));
TutorialTestEnum_EnumRef = LuaAPI.luaL_ref(L, LuaIndexes.LUA_REGISTRYINDEX);
}
}
if (LuaAPI.xlua_tryget_cachedud(L, (int)val, TutorialTestEnum_EnumRef) == 1)
{
return;
}
IntPtr buff = LuaAPI.xlua_pushstruct(L, 4, TutorialTestEnum_TypeID);
if (!CopyByValue.Pack(buff, 0, (int)val))
{
throw new Exception("pack fail fail for Tutorial.TestEnum ,value="+val);
}
LuaAPI.lua_getref(L, TutorialTestEnum_EnumRef);
LuaAPI.lua_pushvalue(L, -2);
LuaAPI.xlua_rawseti(L, -2, (int)val);
LuaAPI.lua_pop(L, 1);
}
public void Get(RealStatePtr L, int index, out Tutorial.TestEnum val)
{
LuaTypes type = LuaAPI.lua_type(L, index);
if (type == LuaTypes.LUA_TUSERDATA )
{
if (LuaAPI.xlua_gettypeid(L, index) != TutorialTestEnum_TypeID)
{
throw new Exception("invalid userdata for Tutorial.TestEnum");
}
IntPtr buff = LuaAPI.lua_touserdata(L, index);
int e;
if (!CopyByValue.UnPack(buff, 0, out e))
{
throw new Exception("unpack fail for Tutorial.TestEnum");
}
val = (Tutorial.TestEnum)e;
}
else
{
val = (Tutorial.TestEnum)objectCasters.GetCaster(typeof(Tutorial.TestEnum))(L, index, null);
}
}
public void UpdateTutorialTestEnum(RealStatePtr L, int index, Tutorial.TestEnum val)
{
if (LuaAPI.lua_type(L, index) == LuaTypes.LUA_TUSERDATA)
{
if (LuaAPI.xlua_gettypeid(L, index) != TutorialTestEnum_TypeID)
{
throw new Exception("invalid userdata for Tutorial.TestEnum");
}
IntPtr buff = LuaAPI.lua_touserdata(L, index);
if (!CopyByValue.Pack(buff, 0, (int)val))
{
throw new Exception("pack fail for Tutorial.TestEnum ,value="+val);
}
}
else
{
throw new Exception("try to update a data with lua type:" + LuaAPI.lua_type(L, index));
}
}
int TutorialDerivedClassTestEnumInner_TypeID = -1;
int TutorialDerivedClassTestEnumInner_EnumRef = -1;
public void PushTutorialDerivedClassTestEnumInner(RealStatePtr L, Tutorial.DerivedClass.TestEnumInner val)
{
if (TutorialDerivedClassTestEnumInner_TypeID == -1)
{
bool is_first;
TutorialDerivedClassTestEnumInner_TypeID = getTypeId(L, typeof(Tutorial.DerivedClass.TestEnumInner), out is_first);
if (TutorialDerivedClassTestEnumInner_EnumRef == -1)
{
Utils.LoadCSTable(L, typeof(Tutorial.DerivedClass.TestEnumInner));
TutorialDerivedClassTestEnumInner_EnumRef = LuaAPI.luaL_ref(L, LuaIndexes.LUA_REGISTRYINDEX);
}
}
if (LuaAPI.xlua_tryget_cachedud(L, (int)val, TutorialDerivedClassTestEnumInner_EnumRef) == 1)
{
return;
}
IntPtr buff = LuaAPI.xlua_pushstruct(L, 4, TutorialDerivedClassTestEnumInner_TypeID);
if (!CopyByValue.Pack(buff, 0, (int)val))
{
throw new Exception("pack fail fail for Tutorial.DerivedClass.TestEnumInner ,value="+val);
}
LuaAPI.lua_getref(L, TutorialDerivedClassTestEnumInner_EnumRef);
LuaAPI.lua_pushvalue(L, -2);
LuaAPI.xlua_rawseti(L, -2, (int)val);
LuaAPI.lua_pop(L, 1);
}
public void Get(RealStatePtr L, int index, out Tutorial.DerivedClass.TestEnumInner val)
{
LuaTypes type = LuaAPI.lua_type(L, index);
if (type == LuaTypes.LUA_TUSERDATA )
{
if (LuaAPI.xlua_gettypeid(L, index) != TutorialDerivedClassTestEnumInner_TypeID)
{
throw new Exception("invalid userdata for Tutorial.DerivedClass.TestEnumInner");
}
IntPtr buff = LuaAPI.lua_touserdata(L, index);
int e;
if (!CopyByValue.UnPack(buff, 0, out e))
{
throw new Exception("unpack fail for Tutorial.DerivedClass.TestEnumInner");
}
val = (Tutorial.DerivedClass.TestEnumInner)e;
}
else
{
val = (Tutorial.DerivedClass.TestEnumInner)objectCasters.GetCaster(typeof(Tutorial.DerivedClass.TestEnumInner))(L, index, null);
}
}
public void UpdateTutorialDerivedClassTestEnumInner(RealStatePtr L, int index, Tutorial.DerivedClass.TestEnumInner val)
{
if (LuaAPI.lua_type(L, index) == LuaTypes.LUA_TUSERDATA)
{
if (LuaAPI.xlua_gettypeid(L, index) != TutorialDerivedClassTestEnumInner_TypeID)
{
throw new Exception("invalid userdata for Tutorial.DerivedClass.TestEnumInner");
}
IntPtr buff = LuaAPI.lua_touserdata(L, index);
if (!CopyByValue.Pack(buff, 0, (int)val))
{
throw new Exception("pack fail for Tutorial.DerivedClass.TestEnumInner ,value="+val);
}
}
else
{
throw new Exception("try to update a data with lua type:" + LuaAPI.lua_type(L, index));
}
}
// table cast optimze
@ -629,6 +799,18 @@ namespace XLua
translator.PushUnityEngineRay2D(L, array[index]);
return true;
}
else if (type == typeof(Tutorial.TestEnum[]))
{
Tutorial.TestEnum[] array = obj as Tutorial.TestEnum[];
translator.PushTutorialTestEnum(L, array[index]);
return true;
}
else if (type == typeof(Tutorial.DerivedClass.TestEnumInner[]))
{
Tutorial.DerivedClass.TestEnumInner[] array = obj as Tutorial.DerivedClass.TestEnumInner[];
translator.PushTutorialDerivedClassTestEnumInner(L, array[index]);
return true;
}
return false;
}
@ -683,6 +865,18 @@ namespace XLua
translator.Get(L, obj_idx, out array[array_idx]);
return true;
}
else if (type == typeof(Tutorial.TestEnum[]))
{
Tutorial.TestEnum[] array = obj as Tutorial.TestEnum[];
translator.Get(L, obj_idx, out array[array_idx]);
return true;
}
else if (type == typeof(Tutorial.DerivedClass.TestEnumInner[]))
{
Tutorial.DerivedClass.TestEnumInner[] array = obj as Tutorial.DerivedClass.TestEnumInner[];
translator.Get(L, obj_idx, out array[array_idx]);
return true;
}
return false;
}
}