Repository: Tencent/xLua Branch: master Commit: 59bf42685dbe Files: 1547 Total size: 16.7 MB Directory structure: gitextract_avi3_0hc/ ├── .github/ │ └── workflows/ │ ├── build.yml │ └── publish.yml ├── .gitignore ├── .travis.yml ├── Assets/ │ ├── Plugins/ │ │ ├── Android/ │ │ │ ├── libs/ │ │ │ │ ├── arm64-v8a/ │ │ │ │ │ └── libxlua.so.meta │ │ │ │ ├── arm64-v8a.meta │ │ │ │ ├── armeabi-v7a/ │ │ │ │ │ └── libxlua.so.meta │ │ │ │ ├── armeabi-v7a.meta │ │ │ │ ├── x86/ │ │ │ │ │ └── libxlua.so.meta │ │ │ │ └── x86.meta │ │ │ └── libs.meta │ │ ├── Android.meta │ │ ├── WSA/ │ │ │ ├── ARM/ │ │ │ │ └── xlua.dll.meta │ │ │ ├── ARM.meta │ │ │ ├── x64/ │ │ │ │ └── xlua.dll.meta │ │ │ ├── x64.meta │ │ │ ├── x86/ │ │ │ │ └── xlua.dll.meta │ │ │ └── x86.meta │ │ ├── WSA.meta │ │ ├── WebGL/ │ │ │ ├── xlua_webgl.cpp │ │ │ └── xlua_webgl.cpp.meta │ │ ├── WebGL.meta │ │ ├── arm64/ │ │ │ └── libxlua.dylib.meta │ │ ├── iOS/ │ │ │ ├── HotfixFlags.cpp │ │ │ ├── HotfixFlags.cpp.meta │ │ │ ├── libxlua.a │ │ │ └── libxlua.a.meta │ │ ├── iOS.meta │ │ ├── x86/ │ │ │ ├── libxlua.so.meta │ │ │ └── xlua.dll.meta │ │ ├── x86.meta │ │ ├── x86_64/ │ │ │ ├── libxlua.so.meta │ │ │ └── xlua.dll.meta │ │ ├── x86_64.meta │ │ ├── xlua.bundle/ │ │ │ ├── Contents/ │ │ │ │ ├── Info.plist │ │ │ │ ├── Info.plist.meta │ │ │ │ ├── MacOS/ │ │ │ │ │ ├── xlua │ │ │ │ │ └── xlua.meta │ │ │ │ └── MacOS.meta │ │ │ └── Contents.meta │ │ └── xlua.bundle.meta │ ├── Plugins.meta │ ├── XLua/ │ │ ├── CHANGELOG.txt │ │ ├── CHANGELOG.txt.meta │ │ ├── Doc/ │ │ │ ├── Add_Remove_Lua_Lib.md │ │ │ ├── Add_Remove_Lua_Lib.md.meta │ │ │ ├── Configure_EN.md │ │ │ ├── Configure_EN.md.meta │ │ │ ├── Custom_Generate_EN.md │ │ │ ├── Custom_Generate_EN.md.meta │ │ │ ├── Faq_EN.md │ │ │ ├── Faq_EN.md.meta │ │ │ ├── Hotfix_EN.md │ │ │ ├── Hotfix_EN.md.meta │ │ │ ├── Materials/ │ │ │ │ ├── logo.mat │ │ │ │ └── logo.mat.meta │ │ │ ├── Materials.meta │ │ │ ├── XLua_API.doc │ │ │ ├── XLua_API.doc.meta │ │ │ ├── XLua_API.md │ │ │ ├── XLua_API.md.meta │ │ │ ├── XLua_API_EN.md │ │ │ ├── XLua_API_EN.md.meta │ │ │ ├── XLua_Tutorial_EN.md │ │ │ ├── XLua_Tutorial_EN.md.meta │ │ │ ├── XLua增加删除第三方lua库.doc │ │ │ ├── XLua增加删除第三方lua库.doc.meta │ │ │ ├── XLua增加删除第三方lua库.md │ │ │ ├── XLua增加删除第三方lua库.md.meta │ │ │ ├── XLua复杂值类型(struct)gc优化指南.doc │ │ │ ├── XLua复杂值类型(struct)gc优化指南.doc.meta │ │ │ ├── XLua复杂值类型(struct)gc优化指南.md │ │ │ ├── XLua复杂值类型(struct)gc优化指南.md.meta │ │ │ ├── XLua性能分析工具.doc │ │ │ ├── XLua性能分析工具.doc.meta │ │ │ ├── XLua性能分析工具.md │ │ │ ├── XLua性能分析工具.md.meta │ │ │ ├── XLua教程.doc │ │ │ ├── XLua教程.doc.meta │ │ │ ├── XLua教程.md │ │ │ ├── XLua教程.md.meta │ │ │ ├── XLua的配置.doc │ │ │ ├── XLua的配置.doc.meta │ │ │ ├── compatible_bytecode.md │ │ │ ├── compatible_bytecode.md.meta │ │ │ ├── configure.md │ │ │ ├── configure.md.meta │ │ │ ├── custom_generate.md │ │ │ ├── custom_generate.md.meta │ │ │ ├── faq.md │ │ │ ├── faq.md.meta │ │ │ ├── features.md │ │ │ ├── features.md.meta │ │ │ ├── hotfix.md │ │ │ ├── hotfix.md.meta │ │ │ ├── logo.png.meta │ │ │ ├── signature.md │ │ │ ├── signature.md.meta │ │ │ └── xLua.png.meta │ │ ├── Doc.meta │ │ ├── Editor/ │ │ │ ├── ExampleConfig.cs │ │ │ ├── ExampleConfig.cs.meta │ │ │ └── XLuaUnityDefaultConfig.cs │ │ ├── Editor.meta │ │ ├── Examples/ │ │ │ ├── 01_Helloworld/ │ │ │ │ ├── Helloworld.cs │ │ │ │ ├── Helloworld.cs.meta │ │ │ │ ├── Helloworld.unity │ │ │ │ └── Helloworld.unity.meta │ │ │ ├── 01_Helloworld.meta │ │ │ ├── 02_U3DScripting/ │ │ │ │ ├── LuaBehaviour.cs │ │ │ │ ├── LuaBehaviour.cs.meta │ │ │ │ ├── LuaTestScript.lua.txt │ │ │ │ ├── LuaTestScript.lua.txt.meta │ │ │ │ ├── U3DScripting.unity │ │ │ │ └── U3DScripting.unity.meta │ │ │ ├── 02_U3DScripting.meta │ │ │ ├── 03_UIEvent/ │ │ │ │ ├── ButtonInteraction.lua.txt │ │ │ │ ├── ButtonInteraction.lua.txt.meta │ │ │ │ ├── UI.unity │ │ │ │ └── UI.unity.meta │ │ │ ├── 03_UIEvent.meta │ │ │ ├── 04_LuaObjectOrented/ │ │ │ │ ├── InvokeLua.cs │ │ │ │ ├── InvokeLua.cs.meta │ │ │ │ ├── InvokeLua.unity │ │ │ │ └── InvokeLua.unity.meta │ │ │ ├── 04_LuaObjectOrented.meta │ │ │ ├── 05_NoGc/ │ │ │ │ ├── NoGc.cs │ │ │ │ ├── NoGc.cs.meta │ │ │ │ ├── NoGc.unity │ │ │ │ └── NoGc.unity.meta │ │ │ ├── 05_NoGc.meta │ │ │ ├── 06_Coroutine/ │ │ │ │ ├── Coroutine.unity │ │ │ │ ├── Coroutine.unity.meta │ │ │ │ ├── CoroutineTest.cs │ │ │ │ ├── CoroutineTest.cs.meta │ │ │ │ ├── Coroutine_Runner.cs │ │ │ │ ├── Coroutine_Runner.cs.meta │ │ │ │ ├── Resources/ │ │ │ │ │ ├── coruntine_test.lua.txt │ │ │ │ │ ├── coruntine_test.lua.txt.meta │ │ │ │ │ ├── cs_coroutine.lua.txt │ │ │ │ │ └── cs_coroutine.lua.txt.meta │ │ │ │ └── Resources.meta │ │ │ ├── 06_Coroutine.meta │ │ │ ├── 07_AsyncTest/ │ │ │ │ ├── AsyncTest.cs │ │ │ │ ├── AsyncTest.cs.meta │ │ │ │ ├── AsyncTest.unity │ │ │ │ ├── AsyncTest.unity.meta │ │ │ │ ├── MessageBox.cs │ │ │ │ ├── MessageBox.cs.meta │ │ │ │ ├── Resources/ │ │ │ │ │ ├── AlertBox.prefab │ │ │ │ │ ├── AlertBox.prefab.meta │ │ │ │ │ ├── ConfirmBox.prefab │ │ │ │ │ ├── ConfirmBox.prefab.meta │ │ │ │ │ ├── async_test.lua.txt │ │ │ │ │ ├── async_test.lua.txt.meta │ │ │ │ │ ├── message_box.lua.txt │ │ │ │ │ └── message_box.lua.txt.meta │ │ │ │ └── Resources.meta │ │ │ ├── 07_AsyncTest.meta │ │ │ ├── 08_Hotfix/ │ │ │ │ ├── Editor/ │ │ │ │ │ ├── HotfixTestCfg.cs │ │ │ │ │ └── HotfixTestCfg.cs.meta │ │ │ │ ├── Editor.meta │ │ │ │ ├── HotfixTest.cs │ │ │ │ ├── HotfixTest.cs.meta │ │ │ │ ├── HotfixTest.unity │ │ │ │ ├── HotfixTest.unity.meta │ │ │ │ ├── HotfixTest2.cs │ │ │ │ ├── HotfixTest2.cs.meta │ │ │ │ ├── HotfixTest2.unity │ │ │ │ ├── HotfixTest2.unity.meta │ │ │ │ ├── StatefullTest.cs │ │ │ │ └── StatefullTest.cs.meta │ │ │ ├── 08_Hotfix.meta │ │ │ ├── 09_GenericMethod/ │ │ │ │ ├── Foo.cs │ │ │ │ ├── Foo.cs.meta │ │ │ │ ├── GenericMethod.unity │ │ │ │ ├── GenericMethod.unity.meta │ │ │ │ ├── GenericMethodExample.cs │ │ │ │ └── GenericMethodExample.cs.meta │ │ │ ├── 09_GenericMethod.meta │ │ │ ├── 10_SignatureLoader/ │ │ │ │ ├── Resources/ │ │ │ │ │ ├── signatured1.lua.bytes │ │ │ │ │ ├── signatured1.lua.bytes.meta │ │ │ │ │ ├── signatured2.lua.bytes │ │ │ │ │ ├── signatured2.lua.bytes.meta │ │ │ │ │ ├── signatured3.lua.bytes │ │ │ │ │ └── signatured3.lua.bytes.meta │ │ │ │ ├── Resources.meta │ │ │ │ ├── SignatureLoaderTest.cs │ │ │ │ ├── SignatureLoaderTest.cs.meta │ │ │ │ ├── SignatureLoaderTest.unity │ │ │ │ ├── SignatureLoaderTest.unity.meta │ │ │ │ ├── otherfiles/ │ │ │ │ │ ├── key_ras │ │ │ │ │ ├── key_ras.meta │ │ │ │ │ ├── key_ras.pub │ │ │ │ │ ├── key_ras.pub.meta │ │ │ │ │ ├── signatured1.lua │ │ │ │ │ ├── signatured1.lua.meta │ │ │ │ │ ├── signatured2.lua │ │ │ │ │ ├── signatured2.lua.meta │ │ │ │ │ ├── signatured3.lua │ │ │ │ │ └── signatured3.lua.meta │ │ │ │ ├── otherfiles.meta │ │ │ │ ├── signatured1.lua │ │ │ │ ├── signatured1.lua.meta │ │ │ │ ├── signatured2.lua │ │ │ │ ├── signatured2.lua.meta │ │ │ │ ├── signatured3.lua │ │ │ │ └── signatured3.lua.meta │ │ │ ├── 10_SignatureLoader.meta │ │ │ ├── 11_RawObject/ │ │ │ │ ├── RawObject.unity │ │ │ │ ├── RawObject.unity.meta │ │ │ │ ├── RawObjectTest.cs │ │ │ │ └── RawObjectTest.cs.meta │ │ │ ├── 11_RawObject.meta │ │ │ ├── 12_ReImplementInLua/ │ │ │ │ ├── ReImplementInLua.cs │ │ │ │ ├── ReImplementInLua.cs.meta │ │ │ │ ├── ReImplementInLua.unity │ │ │ │ └── ReImplementInLua.unity.meta │ │ │ ├── 12_ReImplementInLua.meta │ │ │ ├── 13_BuildFromCLI/ │ │ │ │ ├── Editor/ │ │ │ │ │ ├── BuildFromCLI.cs │ │ │ │ │ └── BuildFromCLI.cs.meta │ │ │ │ ├── Editor.meta │ │ │ │ ├── build.bat │ │ │ │ └── build.bat.meta │ │ │ ├── 13_BuildFromCLI.meta │ │ │ ├── 14_HotfixAsyncAwait/ │ │ │ │ ├── HotfixAsyncAwaitTest.cs │ │ │ │ ├── HotfixAsyncAwaitTest.cs.meta │ │ │ │ ├── HotfixAsyncAwaitTest.unity │ │ │ │ ├── HotfixAsyncAwaitTest.unity.meta │ │ │ │ ├── Resources/ │ │ │ │ │ ├── AsyncMethod1.lua.txt │ │ │ │ │ ├── AsyncMethod1.lua.txt.meta │ │ │ │ │ ├── AsyncMethod2.lua.txt │ │ │ │ │ ├── AsyncMethod2.lua.txt.meta │ │ │ │ │ ├── AsyncMethod3.lua.txt │ │ │ │ │ ├── AsyncMethod3.lua.txt.meta │ │ │ │ │ ├── AsyncMethod4.lua.txt │ │ │ │ │ ├── AsyncMethod4.lua.txt.meta │ │ │ │ │ ├── Method1.lua.txt │ │ │ │ │ ├── Method1.lua.txt.meta │ │ │ │ │ ├── MyTask.lua.txt │ │ │ │ │ ├── MyTask.lua.txt.meta │ │ │ │ │ ├── MyTask1.lua.txt │ │ │ │ │ ├── MyTask1.lua.txt.meta │ │ │ │ │ ├── MyTask2.lua.txt │ │ │ │ │ ├── MyTask2.lua.txt.meta │ │ │ │ │ ├── await.lua.txt │ │ │ │ │ └── await.lua.txt.meta │ │ │ │ └── Resources.meta │ │ │ ├── 14_HotfixAsyncAwait.meta │ │ │ ├── ExampleGenConfig.cs │ │ │ └── ExampleGenConfig.cs.meta │ │ ├── Examples.meta │ │ ├── Resources/ │ │ │ ├── perf/ │ │ │ │ ├── memory.lua.txt │ │ │ │ ├── memory.lua.txt.meta │ │ │ │ ├── profiler.lua.txt │ │ │ │ └── profiler.lua.txt.meta │ │ │ ├── perf.meta │ │ │ ├── tdr/ │ │ │ │ ├── tdr.lua.txt │ │ │ │ └── tdr.lua.txt.meta │ │ │ ├── tdr.meta │ │ │ ├── xlua/ │ │ │ │ ├── util.lua.txt │ │ │ │ └── util.lua.txt.meta │ │ │ └── xlua.meta │ │ ├── Resources.meta │ │ ├── Src/ │ │ │ ├── CodeEmit.cs │ │ │ ├── CodeEmit.cs.meta │ │ │ ├── CopyByValue.cs │ │ │ ├── CopyByValue.cs.meta │ │ │ ├── DelegateBridge.cs │ │ │ ├── DelegateBridge.cs.meta │ │ │ ├── Editor/ │ │ │ │ ├── Generator.cs │ │ │ │ ├── Generator.cs.meta │ │ │ │ ├── Hotfix.cs │ │ │ │ ├── Hotfix.cs.meta │ │ │ │ ├── LinkXmlGen/ │ │ │ │ │ ├── LinkXmlGen.cs │ │ │ │ │ ├── LinkXmlGen.cs.meta │ │ │ │ │ ├── LinkXmlGen.tpl.txt │ │ │ │ │ └── LinkXmlGen.tpl.txt.meta │ │ │ │ ├── LinkXmlGen.meta │ │ │ │ ├── Report.cs │ │ │ │ ├── Report.cs.meta │ │ │ │ ├── Template/ │ │ │ │ │ ├── LuaClassWrap.tpl.txt │ │ │ │ │ ├── LuaClassWrap.tpl.txt.meta │ │ │ │ │ ├── LuaClassWrapGCM.tpl.txt │ │ │ │ │ ├── LuaClassWrapGCM.tpl.txt.meta │ │ │ │ │ ├── LuaDelegateBridge.tpl.txt │ │ │ │ │ ├── LuaDelegateBridge.tpl.txt.meta │ │ │ │ │ ├── LuaDelegateWrap.tpl.txt │ │ │ │ │ ├── LuaDelegateWrap.tpl.txt.meta │ │ │ │ │ ├── LuaEnumWrap.tpl.txt │ │ │ │ │ ├── LuaEnumWrap.tpl.txt.meta │ │ │ │ │ ├── LuaEnumWrapGCM.tpl.txt │ │ │ │ │ ├── LuaEnumWrapGCM.tpl.txt.meta │ │ │ │ │ ├── LuaInterfaceBridge.tpl.txt │ │ │ │ │ ├── LuaInterfaceBridge.tpl.txt.meta │ │ │ │ │ ├── LuaRegister.tpl.txt │ │ │ │ │ ├── LuaRegister.tpl.txt.meta │ │ │ │ │ ├── LuaRegisterGCM.tpl.txt │ │ │ │ │ ├── LuaRegisterGCM.tpl.txt.meta │ │ │ │ │ ├── LuaWrapPusher.tpl.txt │ │ │ │ │ ├── LuaWrapPusher.tpl.txt.meta │ │ │ │ │ ├── PackUnpack.tpl.txt │ │ │ │ │ ├── PackUnpack.tpl.txt.meta │ │ │ │ │ ├── TemplateCommon.lua.txt │ │ │ │ │ └── TemplateCommon.lua.txt.meta │ │ │ │ ├── Template.meta │ │ │ │ ├── TemplateRef.cs │ │ │ │ └── TemplateRef.cs.meta │ │ │ ├── Editor.meta │ │ │ ├── GenAttributes.cs │ │ │ ├── GenAttributes.cs.meta │ │ │ ├── GenericDelegateBridge.cs │ │ │ ├── GenericDelegateBridge.cs.meta │ │ │ ├── InternalGlobals.cs │ │ │ ├── InternalGlobals.cs.meta │ │ │ ├── LuaBase.cs │ │ │ ├── LuaBase.cs.meta │ │ │ ├── LuaDLL.cs │ │ │ ├── LuaDLL.cs.meta │ │ │ ├── LuaEnv.cs │ │ │ ├── LuaEnv.cs.meta │ │ │ ├── LuaException.cs │ │ │ ├── LuaException.cs.meta │ │ │ ├── LuaFunction.cs │ │ │ ├── LuaFunction.cs.meta │ │ │ ├── LuaTable.cs │ │ │ ├── LuaTable.cs.meta │ │ │ ├── MethodWarpsCache.cs │ │ │ ├── MethodWarpsCache.cs.meta │ │ │ ├── ObjectCasters.cs │ │ │ ├── ObjectCasters.cs.meta │ │ │ ├── ObjectPool.cs │ │ │ ├── ObjectPool.cs.meta │ │ │ ├── ObjectTranslator.cs │ │ │ ├── ObjectTranslator.cs.meta │ │ │ ├── ObjectTranslatorPool.cs │ │ │ ├── ObjectTranslatorPool.cs.meta │ │ │ ├── RawObject.cs │ │ │ ├── RawObject.cs.meta │ │ │ ├── SignatureLoader.cs │ │ │ ├── SignatureLoader.cs.meta │ │ │ ├── StaticLuaCallbacks.cs │ │ │ ├── StaticLuaCallbacks.cs.meta │ │ │ ├── TemplateEngine/ │ │ │ │ ├── TemplateEngine.cs │ │ │ │ └── TemplateEngine.cs.meta │ │ │ ├── TemplateEngine.meta │ │ │ ├── TypeExtensions.cs │ │ │ ├── TypeExtensions.cs.meta │ │ │ ├── Utils.cs │ │ │ └── Utils.cs.meta │ │ ├── Src.meta │ │ ├── Tutorial/ │ │ │ ├── CSharpCallLua/ │ │ │ │ ├── CSCallLua.cs │ │ │ │ ├── CSCallLua.cs.meta │ │ │ │ ├── CSCallLua.unity │ │ │ │ └── CSCallLua.unity.meta │ │ │ ├── CSharpCallLua.meta │ │ │ ├── LoadLuaScript/ │ │ │ │ ├── ByFile/ │ │ │ │ │ ├── ByFile.cs │ │ │ │ │ ├── ByFile.cs.meta │ │ │ │ │ ├── ByFile.unity │ │ │ │ │ ├── ByFile.unity.meta │ │ │ │ │ ├── Resources/ │ │ │ │ │ │ ├── byfile.lua.txt │ │ │ │ │ │ └── byfile.lua.txt.meta │ │ │ │ │ └── Resources.meta │ │ │ │ ├── ByFile.meta │ │ │ │ ├── ByString/ │ │ │ │ │ ├── ByString.cs │ │ │ │ │ ├── ByString.cs.meta │ │ │ │ │ ├── ByString.unity │ │ │ │ │ └── ByString.unity.meta │ │ │ │ ├── ByString.meta │ │ │ │ ├── Loader/ │ │ │ │ │ ├── CustomLoader.cs │ │ │ │ │ ├── CustomLoader.cs.meta │ │ │ │ │ ├── CustomLoader.unity │ │ │ │ │ └── CustomLoader.unity.meta │ │ │ │ └── Loader.meta │ │ │ ├── LoadLuaScript.meta │ │ │ ├── LuaCallCSharp/ │ │ │ │ ├── LuaCallCs.cs │ │ │ │ ├── LuaCallCs.cs.meta │ │ │ │ ├── LuaCallCs.unity │ │ │ │ └── LuaCallCs.unity.meta │ │ │ └── LuaCallCSharp.meta │ │ └── Tutorial.meta │ └── XLua.meta ├── General/ │ ├── LuaMemoryLeakChecker/ │ │ ├── LuaMemoryLeakChecker.cs │ │ └── LuaMemoryLeakCheckerTest.cs │ ├── README.md │ ├── Src/ │ │ ├── FilesSignature.cs │ │ ├── KeyPairsGen.cs │ │ ├── XLuaGenerate.cs │ │ ├── XLuaHotfixInject.cs │ │ ├── XLuaTemplates.Designer.cs │ │ ├── XLuaTemplates.resx │ │ ├── XLuaTest.cs │ │ └── XLuaUnitTest.cs │ ├── premake5.lua │ └── vs2013/ │ ├── FilesSignature.csproj │ ├── KeyPairsGen.csproj │ ├── XLua.Mini.csproj │ ├── XLua.sln │ ├── XLuaGenTest.sln │ ├── XLuaGenerate.csproj │ ├── XLuaHotfixInject.csproj │ ├── XLuaTest.csproj │ ├── XLuaTestGenCode.csproj │ ├── XLuaUnitTest.csproj │ └── XLuaUnitTestGenCode.csproj ├── LICENSE.TXT ├── README.md ├── README_EN.md ├── Test/ │ ├── PrefTest/ │ │ ├── Resources/ │ │ │ ├── luaTest.lua.txt │ │ │ └── luaTest.lua.txt.meta │ │ └── xLuaPerfTest/ │ │ ├── Main.unity │ │ ├── Main.unity.meta │ │ ├── PeformentTestConfig.cs │ │ ├── PeformentTestConfig.cs.meta │ │ ├── PerfMain.cs │ │ └── PerfMain.cs.meta │ ├── README.md │ └── UnitTest/ │ ├── StreamingAssets/ │ │ ├── D.lua │ │ ├── D.lua.meta │ │ ├── csCallLua.lua │ │ ├── csCallLua.lua.meta │ │ ├── genCode.lua │ │ ├── genCode.lua.meta │ │ ├── ltest/ │ │ │ ├── init.lua │ │ │ ├── init.lua.meta │ │ │ ├── lassert.lua │ │ │ ├── lassert.lua.meta │ │ │ ├── loutput.lua │ │ │ └── loutput.lua.meta │ │ ├── ltest.meta │ │ ├── luaCallCs.lua │ │ ├── luaCallCs.lua.meta │ │ ├── luaCallCsReflect.lua │ │ ├── luaCallCsReflect.lua.meta │ │ ├── luaTdrTest.lua │ │ ├── luaTdrTest.lua.meta │ │ ├── main.lua │ │ ├── main.lua.meta │ │ ├── testlua/ │ │ │ ├── B.lua │ │ │ ├── B.lua.meta │ │ │ ├── C.lua.txt │ │ │ ├── C.lua.txt.meta │ │ │ ├── main.lua │ │ │ └── main.lua.meta │ │ ├── testlua.meta │ │ ├── testxxx.tdr │ │ ├── testxxx.tdr.meta │ │ ├── testxxx2.tdr │ │ └── testxxx2.tdr.meta │ └── xLuaTest/ │ ├── CSharpCallLua/ │ │ ├── CSObjectForTestCSCallLua.cs │ │ ├── CSObjectForTestCSCallLua.cs.meta │ │ ├── Resources/ │ │ │ ├── A.lua.txt │ │ │ ├── A.lua.txt.meta │ │ │ ├── D.lua.txt │ │ │ ├── D.lua.txt.meta │ │ │ ├── E.lua │ │ │ ├── E.lua.meta │ │ │ ├── InFile.lua.txt │ │ │ ├── InFile.lua.txt.meta │ │ │ ├── empty.lua.txt │ │ │ ├── empty.lua.txt.meta │ │ │ ├── error.lua.txt │ │ │ └── error.lua.txt.meta │ │ ├── Resources.meta │ │ ├── TCForTestCSCallLua.cs │ │ ├── TCForTestCSCallLua.cs.meta │ │ ├── TestCSCallLua.cs │ │ ├── TestCSCallLua.cs.meta │ │ ├── TestCSCallLua.unity │ │ └── TestCSCallLua.unity.meta │ ├── CSharpCallLua.meta │ ├── LuaCallCS/ │ │ ├── CSObjectForLuaCallCS.cs │ │ └── CSObjectForLuaCallCS.cs.meta │ ├── LuaCallCS.meta │ ├── LuaTestCommon.cs │ ├── LuaTestCommon.cs.meta │ ├── LuaTestObj.cs │ ├── LuaTestObj.cs.meta │ ├── LuaTestObjReflect.cs │ ├── LuaTestObjReflect.cs.meta │ ├── Main.cs │ ├── Main.cs.meta │ ├── Resources/ │ │ ├── non_tlv_net_msg_type.xml │ │ ├── non_tlv_net_msg_type.xml.meta │ │ ├── non_tlv_net_protocol.xml │ │ ├── non_tlv_net_protocol.xml.meta │ │ ├── non_tlv_net_protocol_v4.xml │ │ ├── non_tlv_net_protocol_v4.xml.meta │ │ ├── testxxx.tdr.bytes │ │ ├── testxxx.tdr.bytes.meta │ │ ├── testxxx2.tdr.bytes │ │ └── testxxx2.tdr.bytes.meta │ ├── Resources.meta │ ├── main.unity │ └── main.unity.meta ├── Tools/ │ ├── FilesSignature.pdb │ ├── KeyPairsGen.pdb │ ├── XLua.Mini.pdb │ ├── XLuaGenerate.pdb │ └── XLuaHotfixInject.pdb ├── WebGLPlugins/ │ ├── i64lib.c │ ├── i64lib.h │ ├── lapi.c │ ├── lapi.h │ ├── lauxlib.c │ ├── lauxlib.h │ ├── lbaselib.c │ ├── lbitlib.c │ ├── lcode.c │ ├── lcode.h │ ├── lcorolib.c │ ├── lctype.c │ ├── lctype.h │ ├── ldblib.c │ ├── ldebug.c │ ├── ldebug.h │ ├── ldo.c │ ├── ldo.h │ ├── ldump.c │ ├── lfunc.c │ ├── lfunc.h │ ├── lgc.c │ ├── lgc.h │ ├── linit.c │ ├── liolib.c │ ├── llex.c │ ├── llex.h │ ├── llimits.h │ ├── lmathlib.c │ ├── lmem.c │ ├── lmem.h │ ├── loadlib.c │ ├── lobject.c │ ├── lobject.h │ ├── lopcodes.c │ ├── lopcodes.h │ ├── loslib.c │ ├── lparser.c │ ├── lparser.h │ ├── lprefix.h │ ├── lstate.c │ ├── lstate.h │ ├── lstring.c │ ├── lstring.h │ ├── lstrlib.c │ ├── ltable.c │ ├── ltable.h │ ├── ltablib.c │ ├── ltm.c │ ├── ltm.h │ ├── lua.c │ ├── lua.h │ ├── lua.hpp │ ├── luac.c │ ├── luaconf.h │ ├── lualib.h │ ├── lundump.c │ ├── lundump.h │ ├── lutf8lib.c │ ├── lvm.c │ ├── lvm.h │ ├── lzio.c │ ├── lzio.h │ ├── perflib.c │ └── xlua.c ├── build/ │ ├── CMakeLists.txt │ ├── cmake/ │ │ ├── android.toolchain.cmake │ │ ├── android.windows.toolchain.cmake │ │ ├── iOS.cmake │ │ └── ios.toolchain.cmake │ ├── i64lib.c │ ├── i64lib.h │ ├── lua-5.1.5/ │ │ ├── COPYRIGHT │ │ ├── HISTORY │ │ ├── INSTALL │ │ ├── Makefile │ │ ├── README │ │ ├── doc/ │ │ │ ├── contents.html │ │ │ ├── lua.1 │ │ │ ├── lua.css │ │ │ ├── lua.html │ │ │ ├── luac.1 │ │ │ ├── luac.html │ │ │ ├── manual.css │ │ │ ├── manual.html │ │ │ └── readme.html │ │ ├── etc/ │ │ │ ├── Makefile │ │ │ ├── README │ │ │ ├── all.c │ │ │ ├── lua.hpp │ │ │ ├── lua.pc │ │ │ ├── luavs.bat │ │ │ ├── min.c │ │ │ ├── noparser.c │ │ │ └── strict.lua │ │ └── src/ │ │ ├── Makefile │ │ ├── lapi.c │ │ ├── lapi.h │ │ ├── lauxlib.c │ │ ├── lauxlib.h │ │ ├── lbaselib.c │ │ ├── lcode.c │ │ ├── lcode.h │ │ ├── ldblib.c │ │ ├── ldebug.c │ │ ├── ldebug.h │ │ ├── ldo.c │ │ ├── ldo.h │ │ ├── ldump.c │ │ ├── lfunc.c │ │ ├── lfunc.h │ │ ├── lgc.c │ │ ├── lgc.h │ │ ├── linit.c │ │ ├── liolib.c │ │ ├── llex.c │ │ ├── llex.h │ │ ├── llimits.h │ │ ├── lmathlib.c │ │ ├── lmem.c │ │ ├── lmem.h │ │ ├── loadlib.c │ │ ├── lobject.c │ │ ├── lobject.h │ │ ├── lopcodes.c │ │ ├── lopcodes.h │ │ ├── loslib.c │ │ ├── lparser.c │ │ ├── lparser.h │ │ ├── lstate.c │ │ ├── lstate.h │ │ ├── lstring.c │ │ ├── lstring.h │ │ ├── lstrlib.c │ │ ├── ltable.c │ │ ├── ltable.h │ │ ├── ltablib.c │ │ ├── ltm.c │ │ ├── ltm.h │ │ ├── lua.c │ │ ├── lua.h │ │ ├── luac.c │ │ ├── luaconf.h │ │ ├── lualib.h │ │ ├── lundump.c │ │ ├── lundump.h │ │ ├── lvm.c │ │ ├── lvm.h │ │ ├── lzio.c │ │ ├── lzio.h │ │ └── print.c │ ├── lua-5.3.3/ │ │ ├── CMakeLists.txt │ │ ├── Makefile │ │ ├── README │ │ ├── cmake/ │ │ │ ├── FindLua.cmake │ │ │ ├── FindReadline.cmake │ │ │ ├── dist.cmake │ │ │ └── lua.cmake │ │ ├── dist.info │ │ ├── doc/ │ │ │ ├── contents.html │ │ │ ├── index.css │ │ │ ├── lua.1 │ │ │ ├── lua.css │ │ │ ├── luac.1 │ │ │ ├── manual.css │ │ │ ├── manual.html │ │ │ └── readme.html │ │ ├── etc/ │ │ │ └── lua.pc │ │ └── src/ │ │ ├── Makefile │ │ ├── lapi.c │ │ ├── lapi.h │ │ ├── lauxlib.c │ │ ├── lauxlib.h │ │ ├── lbaselib.c │ │ ├── lbitlib.c │ │ ├── lcode.c │ │ ├── lcode.h │ │ ├── lcorolib.c │ │ ├── lctype.c │ │ ├── lctype.h │ │ ├── ldblib.c │ │ ├── ldebug.c │ │ ├── ldebug.h │ │ ├── ldo.c │ │ ├── ldo.h │ │ ├── ldump.c │ │ ├── lfunc.c │ │ ├── lfunc.h │ │ ├── lgc.c │ │ ├── lgc.h │ │ ├── linit.c │ │ ├── liolib.c │ │ ├── llex.c │ │ ├── llex.h │ │ ├── llimits.h │ │ ├── lmathlib.c │ │ ├── lmem.c │ │ ├── lmem.h │ │ ├── loadlib.c │ │ ├── loadlib_rel.c │ │ ├── lobject.c │ │ ├── lobject.h │ │ ├── lopcodes.c │ │ ├── lopcodes.h │ │ ├── loslib.c │ │ ├── lparser.c │ │ ├── lparser.h │ │ ├── lprefix.h │ │ ├── lstate.c │ │ ├── lstate.h │ │ ├── lstring.c │ │ ├── lstring.h │ │ ├── lstrlib.c │ │ ├── ltable.c │ │ ├── ltable.h │ │ ├── ltablib.c │ │ ├── ltm.c │ │ ├── ltm.h │ │ ├── lua.c │ │ ├── lua.h │ │ ├── lua.hpp │ │ ├── lua.rc │ │ ├── luac.c │ │ ├── luac.rc │ │ ├── luaconf.h.in │ │ ├── lualib.h │ │ ├── lundump.c │ │ ├── lundump.h │ │ ├── lutf8lib.c │ │ ├── lvm.c │ │ ├── lvm.h │ │ ├── lzio.c │ │ ├── lzio.h │ │ └── wmain.c │ ├── lua-5.3.4/ │ │ ├── Makefile │ │ ├── README │ │ ├── doc/ │ │ │ ├── contents.html │ │ │ ├── index.css │ │ │ ├── lua.1 │ │ │ ├── lua.css │ │ │ ├── luac.1 │ │ │ ├── manual.css │ │ │ ├── manual.html │ │ │ └── readme.html │ │ └── src/ │ │ ├── Makefile │ │ ├── lapi.c │ │ ├── lapi.h │ │ ├── lauxlib.c │ │ ├── lauxlib.h │ │ ├── lbaselib.c │ │ ├── lbitlib.c │ │ ├── lcode.c │ │ ├── lcode.h │ │ ├── lcorolib.c │ │ ├── lctype.c │ │ ├── lctype.h │ │ ├── ldblib.c │ │ ├── ldebug.c │ │ ├── ldebug.h │ │ ├── ldo.c │ │ ├── ldo.h │ │ ├── ldump.c │ │ ├── lfunc.c │ │ ├── lfunc.h │ │ ├── lgc.c │ │ ├── lgc.h │ │ ├── linit.c │ │ ├── liolib.c │ │ ├── llex.c │ │ ├── llex.h │ │ ├── llimits.h │ │ ├── lmathlib.c │ │ ├── lmem.c │ │ ├── lmem.h │ │ ├── loadlib.c │ │ ├── lobject.c │ │ ├── lobject.h │ │ ├── lopcodes.c │ │ ├── lopcodes.h │ │ ├── loslib.c │ │ ├── lparser.c │ │ ├── lparser.h │ │ ├── lprefix.h │ │ ├── lstate.c │ │ ├── lstate.h │ │ ├── lstring.c │ │ ├── lstring.h │ │ ├── lstrlib.c │ │ ├── ltable.c │ │ ├── ltable.h │ │ ├── ltablib.c │ │ ├── ltm.c │ │ ├── ltm.h │ │ ├── lua.c │ │ ├── lua.h │ │ ├── lua.hpp │ │ ├── luac.c │ │ ├── luaconf.h.in │ │ ├── lualib.h │ │ ├── lundump.c │ │ ├── lundump.h │ │ ├── lutf8lib.c │ │ ├── lvm.c │ │ ├── lvm.h │ │ ├── lzio.c │ │ └── lzio.h │ ├── lua-5.3.5/ │ │ ├── Makefile │ │ ├── README │ │ ├── doc/ │ │ │ ├── contents.html │ │ │ ├── index.css │ │ │ ├── lua.1 │ │ │ ├── lua.css │ │ │ ├── luac.1 │ │ │ ├── manual.css │ │ │ ├── manual.html │ │ │ └── readme.html │ │ └── src/ │ │ ├── Makefile │ │ ├── lapi.c │ │ ├── lapi.h │ │ ├── lauxlib.c │ │ ├── lauxlib.h │ │ ├── lbaselib.c │ │ ├── lbitlib.c │ │ ├── lcode.c │ │ ├── lcode.h │ │ ├── lcorolib.c │ │ ├── lctype.c │ │ ├── lctype.h │ │ ├── ldblib.c │ │ ├── ldebug.c │ │ ├── ldebug.h │ │ ├── ldo.c │ │ ├── ldo.h │ │ ├── ldump.c │ │ ├── lfunc.c │ │ ├── lfunc.h │ │ ├── lgc.c │ │ ├── lgc.h │ │ ├── linit.c │ │ ├── liolib.c │ │ ├── llex.c │ │ ├── llex.h │ │ ├── llimits.h │ │ ├── lmathlib.c │ │ ├── lmem.c │ │ ├── lmem.h │ │ ├── loadlib.c │ │ ├── lobject.c │ │ ├── lobject.h │ │ ├── lopcodes.c │ │ ├── lopcodes.h │ │ ├── loslib.c │ │ ├── lparser.c │ │ ├── lparser.h │ │ ├── lprefix.h │ │ ├── lstate.c │ │ ├── lstate.h │ │ ├── lstring.c │ │ ├── lstring.h │ │ ├── lstrlib.c │ │ ├── ltable.c │ │ ├── ltable.h │ │ ├── ltablib.c │ │ ├── ltm.c │ │ ├── ltm.h │ │ ├── lua.c │ │ ├── lua.h │ │ ├── lua.hpp │ │ ├── luac.c │ │ ├── luaconf.h.in │ │ ├── lualib.h │ │ ├── lundump.c │ │ ├── lundump.h │ │ ├── lutf8lib.c │ │ ├── lvm.c │ │ ├── lvm.h │ │ ├── lzio.c │ │ └── lzio.h │ ├── lua-5.4.1/ │ │ ├── Makefile │ │ ├── README │ │ ├── doc/ │ │ │ ├── contents.html │ │ │ ├── index.css │ │ │ ├── lua.1 │ │ │ ├── lua.css │ │ │ ├── luac.1 │ │ │ ├── manual.css │ │ │ ├── manual.html │ │ │ └── readme.html │ │ └── src/ │ │ ├── Makefile │ │ ├── lapi.c │ │ ├── lapi.h │ │ ├── lauxlib.c │ │ ├── lauxlib.h │ │ ├── lbaselib.c │ │ ├── lcode.c │ │ ├── lcode.h │ │ ├── lcorolib.c │ │ ├── lctype.c │ │ ├── lctype.h │ │ ├── ldblib.c │ │ ├── ldebug.c │ │ ├── ldebug.h │ │ ├── ldo.c │ │ ├── ldo.h │ │ ├── ldump.c │ │ ├── lfunc.c │ │ ├── lfunc.h │ │ ├── lgc.c │ │ ├── lgc.h │ │ ├── linit.c │ │ ├── liolib.c │ │ ├── ljumptab.h │ │ ├── llex.c │ │ ├── llex.h │ │ ├── llimits.h │ │ ├── lmathlib.c │ │ ├── lmem.c │ │ ├── lmem.h │ │ ├── loadlib.c │ │ ├── lobject.c │ │ ├── lobject.h │ │ ├── lopcodes.c │ │ ├── lopcodes.h │ │ ├── lopnames.h │ │ ├── loslib.c │ │ ├── lparser.c │ │ ├── lparser.h │ │ ├── lprefix.h │ │ ├── lstate.c │ │ ├── lstate.h │ │ ├── lstring.c │ │ ├── lstring.h │ │ ├── lstrlib.c │ │ ├── ltable.c │ │ ├── ltable.h │ │ ├── ltablib.c │ │ ├── ltm.c │ │ ├── ltm.h │ │ ├── lua.c │ │ ├── lua.h │ │ ├── lua.hpp │ │ ├── luac.c │ │ ├── luaconf.h.in │ │ ├── lualib.h │ │ ├── lundump.c │ │ ├── lundump.h │ │ ├── lutf8lib.c │ │ ├── lvm.c │ │ ├── lvm.h │ │ ├── lzio.c │ │ └── lzio.h │ ├── luac/ │ │ ├── CMakeLists.txt │ │ ├── make_unix.sh │ │ ├── make_win32.bat │ │ └── make_win64.bat │ ├── luajit-2.1.0b2/ │ │ ├── COPYRIGHT │ │ ├── Makefile │ │ ├── README │ │ ├── doc/ │ │ │ ├── bluequad-print.css │ │ │ ├── bluequad.css │ │ │ ├── changes.html │ │ │ ├── contact.html │ │ │ ├── ext_c_api.html │ │ │ ├── ext_ffi.html │ │ │ ├── ext_ffi_api.html │ │ │ ├── ext_ffi_semantics.html │ │ │ ├── ext_ffi_tutorial.html │ │ │ ├── ext_jit.html │ │ │ ├── ext_profiler.html │ │ │ ├── extensions.html │ │ │ ├── faq.html │ │ │ ├── install.html │ │ │ ├── luajit.html │ │ │ ├── running.html │ │ │ └── status.html │ │ ├── dynasm/ │ │ │ ├── dasm_arm.h │ │ │ ├── dasm_arm.lua │ │ │ ├── dasm_arm64.h │ │ │ ├── dasm_arm64.lua │ │ │ ├── dasm_mips.h │ │ │ ├── dasm_mips.lua │ │ │ ├── dasm_ppc.h │ │ │ ├── dasm_ppc.lua │ │ │ ├── dasm_proto.h │ │ │ ├── dasm_x64.lua │ │ │ ├── dasm_x86.h │ │ │ ├── dasm_x86.lua │ │ │ └── dynasm.lua │ │ ├── etc/ │ │ │ ├── luajit.1 │ │ │ └── luajit.pc │ │ └── src/ │ │ ├── Makefile │ │ ├── Makefile.dep │ │ ├── host/ │ │ │ ├── README │ │ │ ├── buildvm.c │ │ │ ├── buildvm.h │ │ │ ├── buildvm_asm.c │ │ │ ├── buildvm_fold.c │ │ │ ├── buildvm_lib.c │ │ │ ├── buildvm_libbc.h │ │ │ ├── buildvm_peobj.c │ │ │ ├── genlibbc.lua │ │ │ ├── genminilua.lua │ │ │ └── minilua.c │ │ ├── jit/ │ │ │ ├── bc.lua │ │ │ ├── bcsave.lua │ │ │ ├── dis_arm.lua │ │ │ ├── dis_mips.lua │ │ │ ├── dis_mipsel.lua │ │ │ ├── dis_ppc.lua │ │ │ ├── dis_x64.lua │ │ │ ├── dis_x86.lua │ │ │ ├── dump.lua │ │ │ ├── p.lua │ │ │ ├── v.lua │ │ │ └── zone.lua │ │ ├── lauxlib.h │ │ ├── lib_aux.c │ │ ├── lib_base.c │ │ ├── lib_bit.c │ │ ├── lib_debug.c │ │ ├── lib_ffi.c │ │ ├── lib_init.c │ │ ├── lib_io.c │ │ ├── lib_jit.c │ │ ├── lib_math.c │ │ ├── lib_os.c │ │ ├── lib_package.c │ │ ├── lib_string.c │ │ ├── lib_table.c │ │ ├── lj.supp │ │ ├── lj_alloc.c │ │ ├── lj_alloc.h │ │ ├── lj_api.c │ │ ├── lj_arch.h │ │ ├── lj_asm.c │ │ ├── lj_asm.h │ │ ├── lj_asm_arm.h │ │ ├── lj_asm_mips.h │ │ ├── lj_asm_ppc.h │ │ ├── lj_asm_x86.h │ │ ├── lj_bc.c │ │ ├── lj_bc.h │ │ ├── lj_bcdump.h │ │ ├── lj_bcread.c │ │ ├── lj_bcwrite.c │ │ ├── lj_buf.c │ │ ├── lj_buf.h │ │ ├── lj_carith.c │ │ ├── lj_carith.h │ │ ├── lj_ccall.c │ │ ├── lj_ccall.h │ │ ├── lj_ccallback.c │ │ ├── lj_ccallback.h │ │ ├── lj_cconv.c │ │ ├── lj_cconv.h │ │ ├── lj_cdata.c │ │ ├── lj_cdata.h │ │ ├── lj_char.c │ │ ├── lj_char.h │ │ ├── lj_clib.c │ │ ├── lj_clib.h │ │ ├── lj_cparse.c │ │ ├── lj_cparse.h │ │ ├── lj_crecord.c │ │ ├── lj_crecord.h │ │ ├── lj_ctype.c │ │ ├── lj_ctype.h │ │ ├── lj_debug.c │ │ ├── lj_debug.h │ │ ├── lj_def.h │ │ ├── lj_dispatch.c │ │ ├── lj_dispatch.h │ │ ├── lj_emit_arm.h │ │ ├── lj_emit_mips.h │ │ ├── lj_emit_ppc.h │ │ ├── lj_emit_x86.h │ │ ├── lj_err.c │ │ ├── lj_err.h │ │ ├── lj_errmsg.h │ │ ├── lj_ff.h │ │ ├── lj_ffrecord.c │ │ ├── lj_ffrecord.h │ │ ├── lj_frame.h │ │ ├── lj_func.c │ │ ├── lj_func.h │ │ ├── lj_gc.c │ │ ├── lj_gc.h │ │ ├── lj_gdbjit.c │ │ ├── lj_gdbjit.h │ │ ├── lj_ir.c │ │ ├── lj_ir.h │ │ ├── lj_ircall.h │ │ ├── lj_iropt.h │ │ ├── lj_jit.h │ │ ├── lj_lex.c │ │ ├── lj_lex.h │ │ ├── lj_lib.c │ │ ├── lj_lib.h │ │ ├── lj_load.c │ │ ├── lj_mcode.c │ │ ├── lj_mcode.h │ │ ├── lj_meta.c │ │ ├── lj_meta.h │ │ ├── lj_obj.c │ │ ├── lj_obj.h │ │ ├── lj_opt_dce.c │ │ ├── lj_opt_fold.c │ │ ├── lj_opt_loop.c │ │ ├── lj_opt_mem.c │ │ ├── lj_opt_narrow.c │ │ ├── lj_opt_sink.c │ │ ├── lj_opt_split.c │ │ ├── lj_parse.c │ │ ├── lj_parse.h │ │ ├── lj_profile.c │ │ ├── lj_profile.h │ │ ├── lj_record.c │ │ ├── lj_record.h │ │ ├── lj_snap.c │ │ ├── lj_snap.h │ │ ├── lj_state.c │ │ ├── lj_state.h │ │ ├── lj_str.c │ │ ├── lj_str.h │ │ ├── lj_strfmt.c │ │ ├── lj_strfmt.h │ │ ├── lj_strfmt_num.c │ │ ├── lj_strscan.c │ │ ├── lj_strscan.h │ │ ├── lj_tab.c │ │ ├── lj_tab.h │ │ ├── lj_target.h │ │ ├── lj_target_arm.h │ │ ├── lj_target_arm64.h │ │ ├── lj_target_mips.h │ │ ├── lj_target_ppc.h │ │ ├── lj_target_x86.h │ │ ├── lj_trace.c │ │ ├── lj_trace.h │ │ ├── lj_traceerr.h │ │ ├── lj_udata.c │ │ ├── lj_udata.h │ │ ├── lj_vm.h │ │ ├── lj_vmevent.c │ │ ├── lj_vmevent.h │ │ ├── lj_vmmath.c │ │ ├── ljamalg.c │ │ ├── lua.h │ │ ├── lua.hpp │ │ ├── luaconf.h │ │ ├── luajit.c │ │ ├── luajit.h │ │ ├── lualib.h │ │ ├── msvcbuild.bat │ │ ├── msvcbuild_mt.bat │ │ ├── msvcbuild_xlua.bat │ │ ├── ps4build.bat │ │ ├── psvitabuild.bat │ │ ├── vm_arm.dasc │ │ ├── vm_arm64.dasc │ │ ├── vm_mips.dasc │ │ ├── vm_ppc.dasc │ │ ├── vm_x64.dasc │ │ ├── vm_x86.dasc │ │ ├── xb1build.bat │ │ └── xedkbuild.bat │ ├── luajit-2.1.0b3/ │ │ ├── .gitignore │ │ ├── COPYRIGHT │ │ ├── Makefile │ │ ├── README │ │ ├── doc/ │ │ │ ├── bluequad-print.css │ │ │ ├── bluequad.css │ │ │ ├── changes.html │ │ │ ├── contact.html │ │ │ ├── ext_buffer.html │ │ │ ├── ext_c_api.html │ │ │ ├── ext_ffi.html │ │ │ ├── ext_ffi_api.html │ │ │ ├── ext_ffi_semantics.html │ │ │ ├── ext_ffi_tutorial.html │ │ │ ├── ext_jit.html │ │ │ ├── ext_profiler.html │ │ │ ├── extensions.html │ │ │ ├── faq.html │ │ │ ├── install.html │ │ │ ├── luajit.html │ │ │ ├── running.html │ │ │ └── status.html │ │ ├── dynasm/ │ │ │ ├── Examples/ │ │ │ │ ├── run.sh │ │ │ │ └── test_z_inst.c │ │ │ ├── dasm_arm.h │ │ │ ├── dasm_arm.lua │ │ │ ├── dasm_arm64.h │ │ │ ├── dasm_arm64.lua │ │ │ ├── dasm_mips.h │ │ │ ├── dasm_mips.lua │ │ │ ├── dasm_mips64.lua │ │ │ ├── dasm_ppc.h │ │ │ ├── dasm_ppc.lua │ │ │ ├── dasm_proto.h │ │ │ ├── dasm_s390x.h │ │ │ ├── dasm_s390x.lua │ │ │ ├── dasm_x64.lua │ │ │ ├── dasm_x86.h │ │ │ ├── dasm_x86.lua │ │ │ └── dynasm.lua │ │ ├── etc/ │ │ │ ├── luajit.1 │ │ │ └── luajit.pc │ │ └── src/ │ │ ├── .gitignore │ │ ├── Makefile │ │ ├── Makefile.dep │ │ ├── host/ │ │ │ ├── .gitignore │ │ │ ├── README │ │ │ ├── buildvm.c │ │ │ ├── buildvm.h │ │ │ ├── buildvm_asm.c │ │ │ ├── buildvm_fold.c │ │ │ ├── buildvm_lib.c │ │ │ ├── buildvm_libbc.h │ │ │ ├── buildvm_peobj.c │ │ │ ├── genlibbc.lua │ │ │ ├── genminilua.lua │ │ │ └── minilua.c │ │ ├── jit/ │ │ │ ├── .gitignore │ │ │ ├── bc.lua │ │ │ ├── bcsave.lua │ │ │ ├── dis_arm.lua │ │ │ ├── dis_arm64.lua │ │ │ ├── dis_arm64be.lua │ │ │ ├── dis_mips.lua │ │ │ ├── dis_mips64.lua │ │ │ ├── dis_mips64el.lua │ │ │ ├── dis_mips64r6.lua │ │ │ ├── dis_mips64r6el.lua │ │ │ ├── dis_mipsel.lua │ │ │ ├── dis_ppc.lua │ │ │ ├── dis_x64.lua │ │ │ ├── dis_x86.lua │ │ │ ├── dump.lua │ │ │ ├── p.lua │ │ │ ├── v.lua │ │ │ └── zone.lua │ │ ├── lauxlib.h │ │ ├── lib_aux.c │ │ ├── lib_base.c │ │ ├── lib_bit.c │ │ ├── lib_buffer.c │ │ ├── lib_debug.c │ │ ├── lib_ffi.c │ │ ├── lib_init.c │ │ ├── lib_io.c │ │ ├── lib_jit.c │ │ ├── lib_math.c │ │ ├── lib_os.c │ │ ├── lib_package.c │ │ ├── lib_string.c │ │ ├── lib_table.c │ │ ├── lj.supp │ │ ├── lj_alloc.c │ │ ├── lj_alloc.h │ │ ├── lj_api.c │ │ ├── lj_arch.h │ │ ├── lj_asm.c │ │ ├── lj_asm.h │ │ ├── lj_asm_arm.h │ │ ├── lj_asm_arm64.h │ │ ├── lj_asm_mips.h │ │ ├── lj_asm_ppc.h │ │ ├── lj_asm_x86.h │ │ ├── lj_assert.c │ │ ├── lj_bc.c │ │ ├── lj_bc.h │ │ ├── lj_bcdump.h │ │ ├── lj_bcread.c │ │ ├── lj_bcwrite.c │ │ ├── lj_buf.c │ │ ├── lj_buf.h │ │ ├── lj_carith.c │ │ ├── lj_carith.h │ │ ├── lj_ccall.c │ │ ├── lj_ccall.h │ │ ├── lj_ccallback.c │ │ ├── lj_ccallback.h │ │ ├── lj_cconv.c │ │ ├── lj_cconv.h │ │ ├── lj_cdata.c │ │ ├── lj_cdata.h │ │ ├── lj_char.c │ │ ├── lj_char.h │ │ ├── lj_clib.c │ │ ├── lj_clib.h │ │ ├── lj_cparse.c │ │ ├── lj_cparse.h │ │ ├── lj_crecord.c │ │ ├── lj_crecord.h │ │ ├── lj_ctype.c │ │ ├── lj_ctype.h │ │ ├── lj_debug.c │ │ ├── lj_debug.h │ │ ├── lj_def.h │ │ ├── lj_dispatch.c │ │ ├── lj_dispatch.h │ │ ├── lj_emit_arm.h │ │ ├── lj_emit_arm64.h │ │ ├── lj_emit_mips.h │ │ ├── lj_emit_ppc.h │ │ ├── lj_emit_x86.h │ │ ├── lj_err.c │ │ ├── lj_err.h │ │ ├── lj_errmsg.h │ │ ├── lj_ff.h │ │ ├── lj_ffrecord.c │ │ ├── lj_ffrecord.h │ │ ├── lj_frame.h │ │ ├── lj_func.c │ │ ├── lj_func.h │ │ ├── lj_gc.c │ │ ├── lj_gc.h │ │ ├── lj_gdbjit.c │ │ ├── lj_gdbjit.h │ │ ├── lj_ir.c │ │ ├── lj_ir.h │ │ ├── lj_ircall.h │ │ ├── lj_iropt.h │ │ ├── lj_jit.h │ │ ├── lj_lex.c │ │ ├── lj_lex.h │ │ ├── lj_lib.c │ │ ├── lj_lib.h │ │ ├── lj_load.c │ │ ├── lj_mcode.c │ │ ├── lj_mcode.h │ │ ├── lj_meta.c │ │ ├── lj_meta.h │ │ ├── lj_obj.c │ │ ├── lj_obj.h │ │ ├── lj_opt_dce.c │ │ ├── lj_opt_fold.c │ │ ├── lj_opt_loop.c │ │ ├── lj_opt_mem.c │ │ ├── lj_opt_narrow.c │ │ ├── lj_opt_sink.c │ │ ├── lj_opt_split.c │ │ ├── lj_parse.c │ │ ├── lj_parse.h │ │ ├── lj_prng.c │ │ ├── lj_prng.h │ │ ├── lj_profile.c │ │ ├── lj_profile.h │ │ ├── lj_record.c │ │ ├── lj_record.h │ │ ├── lj_serialize.c │ │ ├── lj_serialize.h │ │ ├── lj_snap.c │ │ ├── lj_snap.h │ │ ├── lj_state.c │ │ ├── lj_state.h │ │ ├── lj_str.c │ │ ├── lj_str.h │ │ ├── lj_strfmt.c │ │ ├── lj_strfmt.h │ │ ├── lj_strfmt_num.c │ │ ├── lj_strscan.c │ │ ├── lj_strscan.h │ │ ├── lj_tab.c │ │ ├── lj_tab.h │ │ ├── lj_target.h │ │ ├── lj_target_arm.h │ │ ├── lj_target_arm64.h │ │ ├── lj_target_mips.h │ │ ├── lj_target_ppc.h │ │ ├── lj_target_s390x.h │ │ ├── lj_target_x86.h │ │ ├── lj_trace.c │ │ ├── lj_trace.h │ │ ├── lj_traceerr.h │ │ ├── lj_udata.c │ │ ├── lj_udata.h │ │ ├── lj_vm.h │ │ ├── lj_vmevent.c │ │ ├── lj_vmevent.h │ │ ├── lj_vmmath.c │ │ ├── ljamalg.c │ │ ├── lua.h │ │ ├── lua.hpp │ │ ├── luaconf.h │ │ ├── luajit.c │ │ ├── luajit.h │ │ ├── lualib.h │ │ ├── msvcbuild.bat │ │ ├── msvcbuild_mt.bat │ │ ├── ps4build.bat │ │ ├── psvitabuild.bat │ │ ├── vm_arm.dasc │ │ ├── vm_arm64.dasc │ │ ├── vm_mips.dasc │ │ ├── vm_mips64.dasc │ │ ├── vm_ppc.dasc │ │ ├── vm_s390x.dasc │ │ ├── vm_x64.dasc │ │ ├── vm_x86.dasc │ │ ├── x64/ │ │ │ ├── Makefile │ │ │ ├── src/ │ │ │ │ └── lj_str_hash_x64.h │ │ │ └── test/ │ │ │ ├── Makefile │ │ │ ├── benchmark.cxx │ │ │ ├── test.cpp │ │ │ ├── test_str_comp.lua │ │ │ ├── test_util.cxx │ │ │ ├── test_util.hpp │ │ │ ├── unit/ │ │ │ │ └── ffi/ │ │ │ │ ├── test_abi.lua │ │ │ │ ├── test_line_directive.lua │ │ │ │ ├── test_pragma_pack_pushpop.lua │ │ │ │ └── test_var_attribute.lua │ │ │ └── unit_test.sh │ │ ├── xb1build.bat │ │ └── xedkbuild.bat │ ├── luasocket/ │ │ ├── auxiliar.c │ │ ├── auxiliar.h │ │ ├── buffer.c │ │ ├── buffer.h │ │ ├── except.c │ │ ├── except.h │ │ ├── inet.c │ │ ├── inet.h │ │ ├── io.c │ │ ├── io.h │ │ ├── luasocket.c │ │ ├── luasocket.h │ │ ├── luasocket_scripts.c │ │ ├── luasocket_scripts.h │ │ ├── mime.c │ │ ├── mime.h │ │ ├── options.c │ │ ├── options.h │ │ ├── select.c │ │ ├── select.h │ │ ├── serial.c │ │ ├── socket.h │ │ ├── tcp.c │ │ ├── tcp.h │ │ ├── timeout.c │ │ ├── timeout.h │ │ ├── udp.c │ │ ├── udp.h │ │ ├── unix.c │ │ ├── unix.h │ │ ├── usocket.c │ │ ├── usocket.h │ │ ├── wsocket.c │ │ └── wsocket.h │ ├── make_android_lua53.sh │ ├── make_android_lua53_arm64.sh │ ├── make_android_lua54.sh │ ├── make_android_luajit.sh │ ├── make_android_luajit_arm64.sh │ ├── make_ios_lua53.sh │ ├── make_ios_lua54.sh │ ├── make_ios_luajit.sh │ ├── make_linux32_lua53.sh │ ├── make_linux32_luajit.sh │ ├── make_linux64_lua53.sh │ ├── make_linux64_luajit.sh │ ├── make_linux_lua54.sh │ ├── make_nx64_lua53.bat │ ├── make_nx64_luajit_gc64.bat │ ├── make_ohos_lua53.sh │ ├── make_ohos_lua54.sh │ ├── make_osx_lua53.sh │ ├── make_osx_lua54.sh │ ├── make_osx_luajit.sh │ ├── make_osx_silicon_lua53.sh │ ├── make_osx_silicon_lua54.sh │ ├── make_osx_silicon_luajit.sh │ ├── make_uwp.bat │ ├── make_uwp_lua54.bat │ ├── make_win32_lua53.bat │ ├── make_win32_luajit.bat │ ├── make_win64_lua53.bat │ ├── make_win64_luajit.bat │ ├── make_win64_luajit_gc64.bat │ ├── make_win_lua54.bat │ ├── memory_leak_checker.c │ ├── plugin_lua53/ │ │ └── Plugins/ │ │ └── xlua.bundle/ │ │ └── Contents/ │ │ └── Info.plist │ ├── plugin_luajit/ │ │ └── Plugins/ │ │ └── xlua.bundle/ │ │ └── Contents/ │ │ └── Info.plist │ ├── vs2015/ │ │ ├── make_uwp.bat │ │ ├── make_win32_lua53.bat │ │ ├── make_win32_luajit.bat │ │ ├── make_win64_lua53.bat │ │ ├── make_win64_luajit.bat │ │ └── make_win64_luajit_gc64.bat │ └── xlua.c └── docs/ ├── .gitignore ├── index.html ├── public/ │ ├── css/ │ │ ├── index.css │ │ └── page.css │ ├── index.html │ ├── js/ │ │ ├── jquery.js │ │ └── vue.js │ ├── readme.html │ └── v1/ │ └── guide/ │ ├── api.html │ ├── configure.html │ ├── crtdel-3rd.html │ ├── faq.html │ ├── features.html │ ├── gc-optimization.html │ ├── hotfix.html │ ├── index.html │ ├── performance-analysis.html │ ├── signature.html │ ├── tutorial.html │ ├── use.html │ └── version.html └── source/ ├── .npmignore ├── README.md ├── _config.yml ├── package.json ├── patch/ │ └── highlight.js/ │ └── lib/ │ └── languages/ │ └── cs.js ├── patch.ps1 ├── src/ │ ├── index.md │ ├── readme.md │ └── v1/ │ └── guide/ │ ├── api.md │ ├── configure.md │ ├── crtdel-3rd.md │ ├── faq.md │ ├── features.md │ ├── gc-optimization.md │ ├── hotfix.md │ ├── index.md │ ├── performance-analysis.md │ ├── signature.md │ ├── tutorial.md │ ├── use.md │ └── version.md └── themes/ └── catlib/ ├── _config.yml ├── layout/ │ ├── index.ejs │ ├── layout.ejs │ ├── page.ejs │ └── partials/ │ ├── article.ejs │ └── sidebar.ejs └── source/ ├── css/ │ ├── _common.styl │ ├── _markdown.styl │ ├── _settings.styl │ ├── _sidebar.styl │ ├── index.styl │ └── page.styl └── js/ ├── jquery.js └── vue.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/workflows/build.yml ================================================ name: build on: push: paths: - build/** - .github/workflows/build.yml jobs: android: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install NDK run: | cd ~ wget -O NDK -q https://dl.google.com/android/repository/android-ndk-r21b-linux-x86_64.zip sudo apt install unzip -y unzip -q NDK ANDROID_NDK_HOME=$(pwd)/android-ndk-r21b - name: Build run: | cd build ./make_android_lua54.sh ./make_android_lua53.sh - name: Upload uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua54/**/* name: plugin_lua54_android - name: Upload53 uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua53/**/* name: plugin_lua53_android android_luajit: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 - name: Install NDK run: | cd ~ wget -O NDK -q https://dl.google.com/android/repository/android-ndk-r15c-linux-x86_64.zip sudo apt install unzip -y unzip -q NDK ANDROID_NDK_HOME=$(pwd)/android-ndk-r15c - name: Build run: | cd build sudo apt install gcc-multilib libncurses5 -y ./make_android_luajit_arm64.sh - name: UploadJit uses: actions/upload-artifact@v4 with: path: ./build/plugin_luajit/**/* name: plugin_luajit_android ohos: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install NDK run: | cd ~ cd ~ curl -O https://repo.huaweicloud.com/harmonyos/os/4.1-Release/ohos-sdk-windows_linux-public.tar.gz tar xvfz ohos-sdk-windows_linux-public.tar.gz cd ohos-sdk/linux unzip -o -d ./ native-linux-x64-4.1.7.5-Release.zip - name: Build run: | cd build chmod +x make_ohos_lua5*.sh OHOS_NDK_HOME=~/ohos-sdk/linux/native ./make_ohos_lua54.sh OHOS_NDK_HOME=~/ohos-sdk/linux/native ./make_ohos_lua53.sh - name: Upload uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua54/**/* name: plugin_lua54_ohos - name: Upload53 uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua53/**/* name: plugin_lua53_ohos linux: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Build run: | cd build ./make_linux_lua54.sh ./make_linux64_lua53.sh ./make_linux64_luajit.sh - name: Upload uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua54/**/* name: plugin_lua54_linux - name: Upload53 uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua53/**/* name: plugin_lua53_linux - name: UploadJit uses: actions/upload-artifact@v4 with: path: ./build/plugin_luajit/**/* name: plugin_luajit_linux ios: runs-on: macos-latest steps: - uses: actions/checkout@v2 - name: Build run: | cd build ./make_ios_lua54.sh ./make_ios_lua53.sh ./make_ios_luajit.sh - name: Upload uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua54/**/* name: plugin_lua54_ios - name: Upload53 uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua53/**/* name: plugin_lua53_ios - name: UploadJit uses: actions/upload-artifact@v4 with: path: ./build/plugin_luajit/**/* name: plugin_luajit_ios osx: runs-on: macos-latest steps: - uses: actions/checkout@v2 - name: Build run: | cd build ./make_osx_lua54.sh ./make_osx_lua53.sh ./make_osx_luajit.sh ./make_osx_silicon_lua53.sh ./make_osx_silicon_lua54.sh - name: Upload uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua54/**/* name: plugin_lua54_osx - name: Upload53 uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua53/**/* name: plugin_lua53_osx - name: UploadJit uses: actions/upload-artifact@v4 with: path: ./build/plugin_luajit/**/* name: plugin_luajit_osx windows: runs-on: windows-2022 steps: - uses: actions/checkout@v2 - name: Insatll MSVC uses: microsoft/setup-msbuild@v1.0.2 - name: Build run: | cd build .\make_win_lua54.bat .\make_uwp_lua54.bat .\make_win32_lua53.bat .\make_win64_lua53.bat .\make_uwp.bat - uses: ilammy/msvc-dev-cmd@v1 - name: Build Luajit run: | cd build .\make_win64_luajit.bat - name: Upload uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua54/**/* name: plugin_lua54_window - name: Upload53 uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua53/**/* name: plugin_lua53_window - name: UploadJit uses: actions/upload-artifact@v4 with: path: ./build/plugin_luajit/**/* name: plugin_luajit_window windows-luajit-32: runs-on: windows-2022 steps: - uses: actions/checkout@v2 - name: Insatll MSVC uses: microsoft/setup-msbuild@v1.0.2 - uses: ilammy/msvc-dev-cmd@v1 with: arch: x86 - name: Build Luajit run: | cd build .\make_win32_luajit.bat - name: UploadJit uses: actions/upload-artifact@v4 with: path: ./build/plugin_luajit/**/* name: plugin_luajit_window32 ================================================ FILE: .github/workflows/publish.yml ================================================ name: publish on: workflow_dispatch: inputs: tag_name: description: 'tag name' required: true jobs: android: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install NDK run: | cd ~ wget -O NDK -q https://dl.google.com/android/repository/android-ndk-r21b-linux-x86_64.zip sudo apt install unzip -y unzip -q NDK ANDROID_NDK_HOME=$(pwd)/android-ndk-r21b - name: Build run: | cd build ./make_android_lua54.sh ./make_android_lua53.sh - name: Upload uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua54/**/* name: plugin_lua54_android - name: Upload53 uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua53/**/* name: plugin_lua53_android android_luajit: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v2 - name: Install NDK run: | cd ~ wget -O NDK -q https://dl.google.com/android/repository/android-ndk-r15c-linux-x86_64.zip sudo apt install unzip -y unzip -q NDK ANDROID_NDK_HOME=$(pwd)/android-ndk-r15c - name: Build run: | cd build sudo apt update sudo apt install gcc-multilib libncurses5 -y ./make_android_luajit_arm64.sh - name: UploadJit uses: actions/upload-artifact@v4 with: path: ./build/plugin_luajit/**/* name: plugin_luajit_android ohos: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install NDK run: | cd ~ cd ~ curl -O https://repo.huaweicloud.com/harmonyos/os/4.1-Release/ohos-sdk-windows_linux-public.tar.gz tar xvfz ohos-sdk-windows_linux-public.tar.gz cd ohos-sdk/linux unzip -o -d ./ native-linux-x64-4.1.7.5-Release.zip - name: Build run: | cd build chmod +x make_ohos_lua5*.sh OHOS_NDK_HOME=~/ohos-sdk/linux/native ./make_ohos_lua54.sh OHOS_NDK_HOME=~/ohos-sdk/linux/native ./make_ohos_lua53.sh - name: Upload uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua54/**/* name: plugin_lua54_ohos - name: Upload53 uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua53/**/* name: plugin_lua53_ohos linux: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Build run: | cd build ./make_linux_lua54.sh ./make_linux64_lua53.sh ./make_linux64_luajit.sh - name: Upload uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua54/**/* name: plugin_lua54_linux - name: Upload53 uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua53/**/* name: plugin_lua53_linux - name: UploadJit uses: actions/upload-artifact@v4 with: path: ./build/plugin_luajit/**/* name: plugin_luajit_linux ios: runs-on: macos-latest steps: - uses: actions/checkout@v2 - name: Build run: | cd build ./make_ios_lua54.sh ./make_ios_lua53.sh ./make_ios_luajit.sh - name: Upload uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua54/**/* name: plugin_lua54_ios - name: Upload53 uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua53/**/* name: plugin_lua53_ios - name: UploadJit uses: actions/upload-artifact@v4 with: path: ./build/plugin_luajit/**/* name: plugin_luajit_ios osx: runs-on: macos-latest steps: - uses: actions/checkout@v2 - name: Build run: | cd build ./make_osx_lua54.sh ./make_osx_lua53.sh ./make_osx_luajit.sh ./make_osx_silicon_lua53.sh ./make_osx_silicon_lua54.sh - name: Upload uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua54/**/* name: plugin_lua54_osx - name: Upload53 uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua53/**/* name: plugin_lua53_osx - name: UploadJit uses: actions/upload-artifact@v4 with: path: ./build/plugin_luajit/**/* name: plugin_luajit_osx windows: runs-on: windows-2022 steps: - uses: actions/checkout@v2 - name: Insatll MSVC uses: microsoft/setup-msbuild@v1.0.2 - name: Build run: | cd build .\make_win_lua54.bat .\make_uwp_lua54.bat .\make_win32_lua53.bat .\make_win64_lua53.bat .\make_uwp.bat - uses: ilammy/msvc-dev-cmd@v1 - name: Build Luajit run: | cd build .\make_win64_luajit.bat - name: Upload uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua54/**/* name: plugin_lua54_window - name: Upload53 uses: actions/upload-artifact@v4 with: path: ./build/plugin_lua53/**/* name: plugin_lua53_window - name: UploadJit uses: actions/upload-artifact@v4 with: path: ./build/plugin_luajit/**/* name: plugin_luajit_window windows-luajit-32: runs-on: windows-2022 steps: - uses: actions/checkout@v2 - name: Insatll MSVC uses: microsoft/setup-msbuild@v1.0.2 - uses: ilammy/msvc-dev-cmd@v1 with: arch: x86 - name: Build Luajit run: | cd build .\make_win32_luajit.bat - name: UploadJit uses: actions/upload-artifact@v4 with: path: ./build/plugin_luajit/**/* name: plugin_luajit_window32 publish: runs-on: ubuntu-latest needs: [windows,osx,ios,android,windows-luajit-32,ohos,android_luajit,linux] steps: - uses: actions/download-artifact@v4 with: pattern: plugin_luajit_* path: plugin_luajit/ merge-multiple: true - uses: actions/download-artifact@v4 with: pattern: plugin_lua53_* path: plugin_lua53/ merge-multiple: true - uses: actions/download-artifact@v4 with: pattern: plugin_lua54_* path: plugin_lua54/ merge-multiple: true - name: Create Release Asset run: | cd plugin_luajit/ && tar cvfz ../luajit_${{ github.event.inputs.tag_name }}.tgz Plugins && cd - cd plugin_lua53/ && tar cvfz ../lua53_${{ github.event.inputs.tag_name }}.tgz Plugins && cd - cd plugin_lua54/ && tar cvfz ../lua54_${{ github.event.inputs.tag_name }}.tgz Plugins && cd - - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ github.event.inputs.tag_name }} release_name: Tag:${{ github.event.inputs.tag_name }} draft: false prerelease: false - name: Upload luajit Plugins #id: upload-release-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./luajit_${{ github.event.inputs.tag_name }}.tgz asset_name: luajit_${{ github.event.inputs.tag_name }}.tgz asset_content_type: application/tgz - name: Upload lua53 Plugins #id: upload-release-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./lua53_${{ github.event.inputs.tag_name }}.tgz asset_name: lua53_${{ github.event.inputs.tag_name }}.tgz asset_content_type: application/tgz - name: Upload lua54 Plugins #id: upload-release-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./lua54_${{ github.event.inputs.tag_name }}.tgz asset_name: lua54_${{ github.event.inputs.tag_name }}.tgz asset_content_type: application/tgz ================================================ FILE: .gitignore ================================================ .vs /Library /ProjectSettings /Temp /Assets/XLua/Gen /Assets/XLua/Gen.meta Assets/StreamingAssets.meta Assets/StreamingAssets/ Assets/xLuaTest.meta Assets/xLuaTest/ /*.csproj /*.sln /build/build* UnityVS /Assets/UnityVS.meta .DS_Store *.o /build/*/*.a luajit buildvm minilua libluajit.so lj_vm.S build/luajit-2.1.0b2/src/host/buildvm_arch.h build/luajit-2.1.0b2/src/jit/vmdef.lua build/luajit-2.1.0b2/src/lj_bcdef.h build/luajit-2.1.0b2/src/lj_ffdef.h build/luajit-2.1.0b2/src/lj_folddef.h build/luajit-2.1.0b2/src/lj_libdef.h build/luajit-2.1.0b2/src/lj_recdef.h build/luajit-2.1.0b2/src/lua51.lib build/luajit-2.1.0b2/src/luajit.exe build/luajit-2.1.0b2/src/luajit.exp build/luajit-2.1.0b2/src/luajit.lib ================================================ FILE: .travis.yml ================================================ language: csharp script: - cd build - chmod +x *.sh - ./make_linux64_lua53.sh - ./make_linux64_luajit.sh - cd ../General - msbuild /property:Configuration=Release vs2013/XLua.sln - cp ../build/build_linux64/libxlua.so Bin/ - cp ../build/build_linux64/libxlua.so Tools/ - mono Bin/XLuaUnitTest.exe - mono Tools/XLuaGenerate.exe Bin/XLuaTest.exe - mv Gen Gen1 - mono Tools/XLuaGenerate.exe Bin/XLuaUnitTest.exe - mv Gen Gen2 - msbuild /property:Configuration=Release vs2013/XLuaGenTest.sln - mono Bin/XLuaUnitTestGenCode.exe - cp ../build/build_linux64_lj/libxlua.so Bin/ - mono Bin/XLuaUnitTest.exe - mono Bin/XLuaUnitTestGenCode.exe # - pdb2mdb Bin/XLuaTestGenCode.exe # - mono Tools/XLuaHotfixInject.exe Bin/XLuaTestGenCode.exe ./ # - mono Bin/XLuaTestGenCode.exe ================================================ FILE: Assets/Plugins/Android/libs/arm64-v8a/libxlua.so.meta ================================================ fileFormatVersion: 2 guid: 6c76d1cfa11c6b741ba30b24d36cbcf2 PluginImporter: externalObjects: {} serializedVersion: 2 iconMap: {} executionOrder: {} defineConstraints: [] isPreloaded: 0 isOverridable: 0 isExplicitlyReferenced: 0 platformData: - first: Android: Android second: enabled: 1 settings: CPU: ARM64 - first: Any: second: enabled: 0 settings: {} - first: Editor: Editor second: enabled: 0 settings: DefaultValueInitialized: true userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/Android/libs/arm64-v8a.meta ================================================ fileFormatVersion: 2 guid: 084116138e3349d48bdf50214aebefc5 folderAsset: yes DefaultImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/Android/libs/armeabi-v7a/libxlua.so.meta ================================================ fileFormatVersion: 2 guid: 6e1b2e17cce240d4c8ff5457ac996e0d timeCreated: 1451443249 licenseType: Pro PluginImporter: serializedVersion: 1 iconMap: {} executionOrder: {} isPreloaded: 0 platformData: Android: enabled: 1 settings: CPU: ARMv7 Any: enabled: 0 settings: {} Editor: enabled: 0 settings: DefaultValueInitialized: true userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/Android/libs/armeabi-v7a.meta ================================================ fileFormatVersion: 2 guid: b8d0cd0f5702f0144af2498bce3ee3e9 folderAsset: yes DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/Android/libs/x86/libxlua.so.meta ================================================ fileFormatVersion: 2 guid: 038a89637b659e346a7a712ce0c9271b timeCreated: 1451443249 licenseType: Pro PluginImporter: serializedVersion: 1 iconMap: {} executionOrder: {} isPreloaded: 0 platformData: Android: enabled: 1 settings: CPU: x86 Any: enabled: 0 settings: {} Editor: enabled: 0 settings: DefaultValueInitialized: true userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/Android/libs/x86.meta ================================================ fileFormatVersion: 2 guid: 079ea0ed741ff194a80cce029630b5ac folderAsset: yes DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/Android/libs.meta ================================================ fileFormatVersion: 2 guid: 9cd62bafd75e7604daf2b561b80d136d folderAsset: yes DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/Android.meta ================================================ fileFormatVersion: 2 guid: 0004c0a5ad641d4468ebb65779ee48b2 folderAsset: yes DefaultImporter: userData: ================================================ FILE: Assets/Plugins/WSA/ARM/xlua.dll.meta ================================================ fileFormatVersion: 2 guid: cb3d94d8757d66b40b20f0386b52d01d timeCreated: 1490146878 licenseType: Free PluginImporter: serializedVersion: 1 iconMap: {} executionOrder: {} isPreloaded: 0 isOverridable: 0 platformData: Any: enabled: 0 settings: {} Editor: enabled: 0 settings: DefaultValueInitialized: true WindowsStoreApps: enabled: 1 settings: CPU: ARM userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/WSA/ARM.meta ================================================ fileFormatVersion: 2 guid: e6375603a0a1e2647b0c426b27646eb7 folderAsset: yes timeCreated: 1490146877 licenseType: Free DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/WSA/x64/xlua.dll.meta ================================================ fileFormatVersion: 2 guid: a73864467778862409da51f9feb60004 timeCreated: 1490146878 licenseType: Free PluginImporter: serializedVersion: 1 iconMap: {} executionOrder: {} isPreloaded: 0 isOverridable: 0 platformData: Any: enabled: 0 settings: {} Editor: enabled: 0 settings: DefaultValueInitialized: true WindowsStoreApps: enabled: 1 settings: CPU: x64 userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/WSA/x64.meta ================================================ fileFormatVersion: 2 guid: 4d5a7116d7e9a33409205303635b8635 folderAsset: yes timeCreated: 1490146877 licenseType: Free DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/WSA/x86/xlua.dll.meta ================================================ fileFormatVersion: 2 guid: 3fd23a6414095674493657a67a8043a1 timeCreated: 1489995544 licenseType: Free PluginImporter: serializedVersion: 1 iconMap: {} executionOrder: {} isPreloaded: 0 isOverridable: 0 platformData: Any: enabled: 0 settings: {} Editor: enabled: 0 settings: DefaultValueInitialized: true WindowsStoreApps: enabled: 1 settings: CPU: x86 userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/WSA/x86.meta ================================================ fileFormatVersion: 2 guid: 6e0f35de38a8ed24fa8b20d444c9ee5e folderAsset: yes timeCreated: 1490146877 licenseType: Free DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/WSA.meta ================================================ fileFormatVersion: 2 guid: b8c5688e381fddc4eb22e6f96f69541c folderAsset: yes timeCreated: 1489995541 licenseType: Free DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/WebGL/xlua_webgl.cpp ================================================ extern "C" { #include "../../../WebGLPlugins/lapi.c" #include "../../../WebGLPlugins/lauxlib.c" #include "../../../WebGLPlugins/lbaselib.c" #include "../../../WebGLPlugins/lbitlib.c" #include "../../../WebGLPlugins/lcode.c" #include "../../../WebGLPlugins/lcorolib.c" #include "../../../WebGLPlugins/lctype.c" #include "../../../WebGLPlugins/ldblib.c" #include "../../../WebGLPlugins/ldebug.c" #include "../../../WebGLPlugins/ldo.c" #include "../../../WebGLPlugins/ldump.c" #include "../../../WebGLPlugins/lfunc.c" #include "../../../WebGLPlugins/lgc.c" #include "../../../WebGLPlugins/linit.c" #include "../../../WebGLPlugins/liolib.c" #include "../../../WebGLPlugins/llex.c" #include "../../../WebGLPlugins/lmathlib.c" #include "../../../WebGLPlugins/lmem.c" #include "../../../WebGLPlugins/loadlib.c" #include "../../../WebGLPlugins/lobject.c" #include "../../../WebGLPlugins/lopcodes.c" #include "../../../WebGLPlugins/loslib.c" #include "../../../WebGLPlugins/lparser.c" #include "../../../WebGLPlugins/lstate.c" #include "../../../WebGLPlugins/lstring.c" #include "../../../WebGLPlugins/lstrlib.c" #include "../../../WebGLPlugins/ltable.c" #include "../../../WebGLPlugins/ltablib.c" #include "../../../WebGLPlugins/ltm.c" #include "../../../WebGLPlugins/lundump.c" #include "../../../WebGLPlugins/lutf8lib.c" #include "../../../WebGLPlugins/lvm.c" #include "../../../WebGLPlugins/lzio.c" #include "../../../WebGLPlugins/i64lib.c" #include "../../../WebGLPlugins/perflib.c" #include "../../../WebGLPlugins/xlua.c" } ================================================ FILE: Assets/Plugins/WebGL/xlua_webgl.cpp.meta ================================================ fileFormatVersion: 2 guid: 92f9773841d5ffd44b794b9b584a5c05 timeCreated: 1504062948 licenseType: Pro PluginImporter: serializedVersion: 2 iconMap: {} executionOrder: {} isPreloaded: 0 isOverridable: 0 platformData: data: first: Any: second: enabled: 0 settings: {} data: first: Editor: Editor second: enabled: 0 settings: DefaultValueInitialized: true data: first: Facebook: WebGL second: enabled: 1 settings: {} data: first: WebGL: WebGL second: enabled: 1 settings: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/WebGL.meta ================================================ fileFormatVersion: 2 guid: e7f3a5adb034d684cb13cb257c29a1c3 folderAsset: yes timeCreated: 1504062948 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/arm64/libxlua.dylib.meta ================================================ fileFormatVersion: 2 guid: 27cd65c4cc42b42f49caa94f462466de PluginImporter: externalObjects: {} serializedVersion: 2 iconMap: {} executionOrder: {} defineConstraints: [] isPreloaded: 0 isOverridable: 0 isExplicitlyReferenced: 0 validateReferences: 1 platformData: - first: : Any second: enabled: 0 settings: Exclude Editor: 0 Exclude Linux64: 1 Exclude OSXUniversal: 0 Exclude Win: 1 Exclude Win64: 1 - first: Any: second: enabled: 0 settings: {} - first: Editor: Editor second: enabled: 1 settings: CPU: ARM64 DefaultValueInitialized: true OS: AnyOS - first: Standalone: Linux64 second: enabled: 0 settings: CPU: None - first: Standalone: OSXUniversal second: enabled: 1 settings: CPU: ARM64 - first: Standalone: Win second: enabled: 0 settings: CPU: x86 - first: Standalone: Win64 second: enabled: 0 settings: CPU: x86_64 userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/iOS/HotfixFlags.cpp ================================================ #include #include int* xlua_hotfix_flags = NULL; int xlua_hotfix_flags_len = 0; extern "C" { int xlua_get_hotfix_flag(int idx) { if (idx >= xlua_hotfix_flags_len) { return 0; } else { return xlua_hotfix_flags[idx]; } } void xlua_set_hotfix_flag(int idx, int flag) { int i = 0; int* new_hotfix_flags = NULL; if (idx >= xlua_hotfix_flags_len) { if (xlua_hotfix_flags == NULL) { xlua_hotfix_flags = (int*)malloc((idx + 1) * sizeof(int)); } else { new_hotfix_flags = (int*)realloc(xlua_hotfix_flags, (idx + 1) * sizeof(int)); if (NULL == new_hotfix_flags) { // just skip operation return; } xlua_hotfix_flags = new_hotfix_flags; } for(i = xlua_hotfix_flags_len; i < (idx + 1); i++) { xlua_hotfix_flags[i] = 0; } xlua_hotfix_flags_len = idx + 1; } xlua_hotfix_flags[idx] = flag; } } ================================================ FILE: Assets/Plugins/iOS/HotfixFlags.cpp.meta ================================================ fileFormatVersion: 2 guid: ef0ed550afe43d449b58d883fad0585c timeCreated: 1498103331 licenseType: Pro PluginImporter: serializedVersion: 1 iconMap: {} executionOrder: {} isPreloaded: 0 isOverridable: 0 platformData: Any: enabled: 0 settings: {} Editor: enabled: 0 settings: DefaultValueInitialized: true iOS: enabled: 1 settings: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/iOS/libxlua.a.meta ================================================ fileFormatVersion: 2 guid: 2d65468f3356ca741b3fbebea91dfb6c timeCreated: 1451443249 licenseType: Pro PluginImporter: serializedVersion: 1 iconMap: {} executionOrder: {} isPreloaded: 0 platformData: Any: enabled: 0 settings: {} Editor: enabled: 0 settings: DefaultValueInitialized: true iOS: enabled: 1 settings: {} userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/iOS.meta ================================================ fileFormatVersion: 2 guid: 5a4ab2e5e00054b03a7bf96d03e5b4e1 folderAsset: yes DefaultImporter: userData: ================================================ FILE: Assets/Plugins/x86/libxlua.so.meta ================================================ fileFormatVersion: 2 guid: 9f19d785ae44ddc478a08a87ccd9dbb2 timeCreated: 1488352111 licenseType: Pro PluginImporter: serializedVersion: 1 iconMap: {} executionOrder: {} isPreloaded: 0 platformData: Android: enabled: 0 settings: CPU: AnyCPU Any: enabled: 0 settings: {} Editor: enabled: 1 settings: CPU: x86 DefaultValueInitialized: true OS: AnyOS Linux: enabled: 1 settings: CPU: x86 Linux64: enabled: 0 settings: CPU: None LinuxUniversal: enabled: 1 settings: CPU: x86 OSXIntel: enabled: 0 settings: CPU: None OSXIntel64: enabled: 0 settings: CPU: None OSXUniversal: enabled: 0 settings: CPU: None WP8: enabled: 0 settings: CPU: AnyCPU DontProcess: False PlaceholderPath: Win: enabled: 1 settings: CPU: AnyCPU Win64: enabled: 0 settings: CPU: None WindowsStoreApps: enabled: 0 settings: CPU: AnyCPU DontProcess: False PlaceholderPath: SDK: AnySDK iOS: enabled: 0 settings: CompileFlags: FrameworkDependencies: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/x86/xlua.dll.meta ================================================ fileFormatVersion: 2 guid: 79f5c811b2e4e444ab2d97cad5cfd934 PluginImporter: serializedVersion: 1 iconMap: {} executionOrder: {} isPreloaded: 0 platformData: Android: enabled: 0 settings: CPU: AnyCPU Any: enabled: 0 settings: {} Editor: enabled: 1 settings: CPU: x86 DefaultValueInitialized: true OS: Windows Linux: enabled: 1 settings: CPU: x86 Linux64: enabled: 0 settings: CPU: None LinuxUniversal: enabled: 0 settings: CPU: x86 OSXIntel: enabled: 1 settings: CPU: AnyCPU OSXIntel64: enabled: 0 settings: CPU: None OSXUniversal: enabled: 0 settings: CPU: x86 WP8: enabled: 0 settings: CPU: AnyCPU DontProcess: False PlaceholderPath: Win: enabled: 1 settings: CPU: AnyCPU Win64: enabled: 0 settings: CPU: None WindowsStoreApps: enabled: 0 settings: CPU: AnyCPU DontProcess: False PlaceholderPath: SDK: AnySDK iOS: enabled: 0 settings: CompileFlags: FrameworkDependencies: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/x86.meta ================================================ fileFormatVersion: 2 guid: 8b0b0c4ffe67d2f4292c5211de91e55f folderAsset: yes DefaultImporter: userData: ================================================ FILE: Assets/Plugins/x86_64/libxlua.so.meta ================================================ fileFormatVersion: 2 guid: 1055830ddb882704fa71275ed9b2a78d timeCreated: 1488352111 licenseType: Pro PluginImporter: serializedVersion: 1 iconMap: {} executionOrder: {} isPreloaded: 0 platformData: Android: enabled: 0 settings: CPU: AnyCPU Any: enabled: 0 settings: {} Editor: enabled: 1 settings: CPU: x86_64 DefaultValueInitialized: true OS: AnyOS Linux: enabled: 0 settings: CPU: None Linux64: enabled: 1 settings: CPU: x86_64 LinuxUniversal: enabled: 1 settings: CPU: x86_64 OSXIntel: enabled: 0 settings: CPU: None OSXIntel64: enabled: 0 settings: CPU: None OSXUniversal: enabled: 0 settings: CPU: None WP8: enabled: 0 settings: CPU: AnyCPU DontProcess: False PlaceholderPath: Win: enabled: 0 settings: CPU: None Win64: enabled: 1 settings: CPU: AnyCPU WindowsStoreApps: enabled: 0 settings: CPU: AnyCPU DontProcess: False PlaceholderPath: SDK: AnySDK iOS: enabled: 0 settings: CompileFlags: FrameworkDependencies: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/x86_64/xlua.dll.meta ================================================ fileFormatVersion: 2 guid: abe4c5ca91772ea4fae0ae15603c10e4 PluginImporter: serializedVersion: 1 iconMap: {} executionOrder: {} isPreloaded: 0 platformData: Android: enabled: 0 settings: CPU: AnyCPU Any: enabled: 0 settings: {} Editor: enabled: 1 settings: CPU: x86_64 DefaultValueInitialized: true OS: Windows Linux: enabled: 0 settings: CPU: None Linux64: enabled: 1 settings: CPU: x86_64 LinuxUniversal: enabled: 0 settings: CPU: x86_64 OSXIntel: enabled: 0 settings: CPU: None OSXIntel64: enabled: 1 settings: CPU: AnyCPU OSXUniversal: enabled: 0 settings: CPU: x86_64 WP8: enabled: 0 settings: CPU: AnyCPU DontProcess: False PlaceholderPath: Win: enabled: 0 settings: CPU: None Win64: enabled: 1 settings: CPU: AnyCPU WindowsStoreApps: enabled: 0 settings: CPU: AnyCPU DontProcess: False PlaceholderPath: SDK: AnySDK iOS: enabled: 0 settings: CompileFlags: FrameworkDependencies: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/x86_64.meta ================================================ fileFormatVersion: 2 guid: 8dba1dfb80e5b7d40bd214fc4ed2ed6b folderAsset: yes timeCreated: 1451020766 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/xlua.bundle/Contents/Info.plist ================================================ BuildMachineOSBuild 15G31 CFBundleDevelopmentRegion en CFBundleExecutable xlua CFBundleIdentifier com.xlua CFBundleInfoDictionaryVersion 6.0 CFBundleName xlua CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleSupportedPlatforms MacOSX CFBundleVersion 1 DTCompiler com.apple.compilers.llvm.clang.1_0 DTPlatformBuild 7D1014 DTPlatformVersion GM DTSDKBuild 15E60 DTSDKName macosx10.11 DTXcode 0731 DTXcodeBuild 7D1014 NSHumanReadableCopyright Copyright @2017 THL A29 Limited, a Tencent company. All rights reserved. ================================================ FILE: Assets/Plugins/xlua.bundle/Contents/Info.plist.meta ================================================ fileFormatVersion: 2 guid: ac30af4fb2add4d41a9f50fe4f8292a3 timeCreated: 1457422749 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/xlua.bundle/Contents/MacOS/xlua.meta ================================================ fileFormatVersion: 2 guid: 6f3b1cda03ac84924b1ee0595fc019f5 timeCreated: 1457422749 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/xlua.bundle/Contents/MacOS.meta ================================================ fileFormatVersion: 2 guid: c9d8e68fa0fd1465294f1255f6ed8563 folderAsset: yes timeCreated: 1457422691 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/xlua.bundle/Contents.meta ================================================ fileFormatVersion: 2 guid: 7e4b7549f5e4a4e71806e3ec8e428b15 folderAsset: yes timeCreated: 1457422691 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins/xlua.bundle.meta ================================================ fileFormatVersion: 2 guid: e6a34038df77e48438826b6ff94aa69e folderAsset: yes PluginImporter: serializedVersion: 1 iconMap: {} executionOrder: {} isPreloaded: 0 platformData: Android: enabled: 0 settings: CPU: AnyCPU Any: enabled: 0 settings: {} Editor: enabled: 1 settings: CPU: AnyCPU DefaultValueInitialized: true OS: OSX Linux: enabled: 0 settings: CPU: x86 Linux64: enabled: 0 settings: CPU: x86_64 OSXIntel: enabled: 1 settings: CPU: AnyCPU OSXIntel64: enabled: 1 settings: CPU: AnyCPU OSXUniversal: enabled: 1 settings: CPU: AnyCPU Win: enabled: 0 settings: CPU: AnyCPU Win64: enabled: 0 settings: CPU: AnyCPU iOS: enabled: 0 settings: CompileFlags: FrameworkDependencies: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/Plugins.meta ================================================ fileFormatVersion: 2 guid: a16bb6756d0496e42a92390340cb94f5 folderAsset: yes DefaultImporter: userData: ================================================ FILE: Assets/XLua/CHANGELOG.txt ================================================ v2.1.15 2020年6月24日 新增特性 1、生成代码过滤器 2、优化反射查找delegate匹配bridge的性能 3、unity 2019.2以上版本手机版本注入不了的问题 变更 bug修复 1、反射查找同名delegate桥接在不生成代码的时候表现不一致 2、嵌套struct标注为PackAsTable时生成代码报错 3、反射wrap代码加入栈空间检查 4、如果枚举定义了很多个值(几千个),会触发unity在android下的一个bug:函数体很大而且有很多分支,执行该函数会crash 5、chunkname和脚本文件名不一致的问题 6、最小生成模式枚举生成代码报错 7、当采用反射方式注册枚举值时,如果一个枚举有多个相同的值,比如A,B都是1,那么在lua里头访问B将会为空 8、sbyte[]在.net 4下push到lua变成字符串的问题 9、泛型导致生成代码失败的问题 10、非Assembly-CSharp程序集注入时,out参数处理有误 11、内嵌类通过xlua.private_accessible设置私有访问可能失败的问题 12、cecil插入指令后,并未自动更新offset,某种情况下会导致计算偏移量错误 v2.1.14 2019年2月27日 新增特性 1、新增nintento switch的支持 2、unity 2018兼容 3、android arm64支持 4、原生库的visual studio 2017编译支持 5、增加“XLua/Generate Minimize Code”菜单 6、防止有的工程有非法的dll导致生成代码中断 7、更高效的lua_pushstring(需要通过NATIVE_LUA_PUSHSTRING开启) 变更 1、window库默认编译器改为visual studio 2017 bug修复 1、修正枚举类型如果只加GCOptimize不加LuaCallCSharp会crash的问题 2、示例配置加入对Edtitor类的过滤 3、UWP兼容修复 4、接口继承引入的同签名方法实现 5、未生成代码,extension方法行为不一致 6、修复Nullable类型参数,如果最后一个参数是nil,会导致其他参数全是nil的问题 v2.1.13 2018年12月5日 新增特性 1、新增AdaptByDelegate注入模式; 2、新增xlua.get_generic_method,用于调用泛型函数; 3、支持类似CS.System.Collections.Generic.List(CS.System.Int32)的泛型写法; 4、注入新选项:忽略编译器自动生成代码,以及不生成base代理; 5、针对lua编程以及热补丁,均添加直接可用的自动化配置样例; 6、新增luajit的gc64支持; 7、加入兼容字节码(一份字节码支持32位和64位系统)的支持; 8、内置新lua内存泄漏检测工具; 9、delegate桥接动态实例化:delegate是4个参数以内,参数均引用类型,无返回值或者返回引用类型,不用配置CSharpCallLua也能调用lua函数; 10、提供util.print_func_ref_by_csharp函数,用于查看当前被C#引用的lua函数; 11、支持无CS全局变量的工作方式; 变更 1、虚拟机升级:lua5.3.4 -> lua5.3.5,luajit2.1b2 -> luajit2.1b3; 2、delegate bridge代码段占用优化; 3、改为PostProcessBuild事件检查是否生成代码; 4、适配xcode 10:osx平台不再支持32bit版本构建; 5、名字空间、类名拼写错误时,对静态成员的设置会报错; 6、防止CS全局table被删除导致xlua工作异常; 7、Windows下构建lib,若使用vs 2015参数执行cmake失败,则继续尝试使用vs 2017; 8、编辑器下不生成代码时,也检查Blacklist,维持和运行时一致; bug修复 1、泛型的数组生成代码报错; 2、防止对TypeExtensions配置了LuaCallCSharp后,lua里头IsValueType之类的判断永真; 3、生成代码过滤掉含指针的函数和字段; 4、适应索引器属性名不是Item的情况; 5、解决attribute初始化异常会导致生成代码,注入终止的问题; 6、精简模式下空Enum生成代码错误; 7、通过把初始化函数分割成小函数,规避unity在android下执行大函数crash的bug; 8、Assignable处理obj为null情况; 9、内嵌类不Obsolete,但外层类Obsolete的生成代码报错 10、解决inline注入方式下,如果lua逻辑跑异常,看不到异常信息的问题; 11、修复xlua.private_accessible访问后,同名public的方法无法访问的Bug; 12、[Out]修饰的参数不应该生成out关键字; 13、通过反射查找合适的适配器时,有可能访问到非适配器函数; 14、精简模式导出代码无get_Item、set_Item; 15、IntKey方式下不自动xlua.private_accessible的问题; v2.1.12 2018年7月9日 新增特性 1、Nullable的支持 2、支持Assembly-CSharp之外的dll注入(beta) 3、执行xlua.hotfix,会自动让该类private能访问 4、xlua.private_accessible优化:1、会把基类的也设置能私有访问;2、延迟到第一次访问类才私有化 5、新增xlua.util.state,可为一个c#对象新增状态 6、this[string field]或者this[object field]操作符重载新增get_Item和set_Item调用 7、正在编译时注入打印error信息 8、interface配置到CSharpCallLua时的事件跟索引映射的自动实现 9、unity5.5以上去掉WARNING: The runtime version supported by this application is unavailable打印 变更 1、去除Stateful方式(因为xlua.util.state已经可以达成类似的效果) 2、废弃掉内嵌模式模式 bug修复 1、生成代码局部变量加下划线,防止符号冲突 2、如果类没放到Hotfix列表,不生成base调用代理 3、代码重构,可读性优化 4、解决带params byte[]可能会导致生成代码编译错误的问题 5、解决类含有private event的时候,无法xlua.private_accessible的问题 6、构造函数注入,如果branch外紧跟Ret指令,注入逻辑应该在branch以及Ret之间 7、构造函数注入,如果注入指令后导致跳转范围大于一个字节,应修改为长跳转 8、解决一个delegate如果不是某个类的内嵌类型时,CS.namespace.classname为空的问题 9、防止Editor下的Util类名字冲突 10、泛型override有异常,先过滤掉 11、解决空enum导致生成代码编译错误 12、解决uwp平台下il2cpp方式打包无法访问任何类的问题 13、hotfix一个私有类型的params参数的函数,导致生成代码编译错误、注入失败的问题 14、如果两个LuaBase指向的是同一个Lua对象,GetHashCode应该返回的是同一个值 15、[Out]标记参数生成代码编译失败 16、交错数组+多维数组的复合,生成代码报错的问题 v2.1.11 2018年3月20日 新增特性 1、xlua.private_accessible支持私有内嵌类型 2、添加xlua.release,用于主动解除lua对c#某对象的引用 3、支持内嵌委托的显示构造 4、需要传class的地方(比如xlua.private_accessible),支持传C#的Type对象 5、支持用pairs遍历IEnumerable对象 6、热补丁场景下,支持override函数调用被override函数(对应c# base关键字) 变更 1、简化property的反射访问,简化后有更好的兼容性; bug修复 1、ios 11兼容(去除system调用) 2、实现了interface的struct不走gc优化代码的问题 3、emit特性的.net兼容性 4、emit对于ulong的const值处理不当 5、interface桥接代码,interface继承时,父interface和子interface有同名不同类型属性时的生成代码报错 6、多虚拟机下,不断创建和销毁协程时,可能出现协程指针重复 7、当参数为泛型类型时,如ICollectio时,不应该生成代码 v2.1.10 2017年9月18日 新增特性 1、新增DoNotGen配置,支持一个类型部分函数用反射,部分用生成; 2、新增wrapper的emit; 3、webgl支持; 4、lua实现interface支持interface继承; 5、window下支持android编译(由xdestiny110提供); 6、打包时,如果没执行过“Generate Code”将报错; 变更 1、 async_to_sync的改为resume错误时报错; 2、il2cpp下,暂时去掉泛型的反射调用; 3、升级到lua5.3.4并合入2017-9-1为止所有官方patch; bug修复 1、C#仅声明delegate和MulticastDelegate,通过反射创建lua function映射时crash; 2、解决一些古老版本window(比如xp)的dll兼容问题; v2.1.9 2017年8月10日 新增特性 1、新增最小生成模式(通过GEN_CODE_MINIMIZE切换),可以节省50%的text段空间; 2、新增xlua.util.createdelegate,支持在lua直接用C#函数创建delegate而不需要通过lua适配; 3、xlua.private_accessible支持public int Prop { get; private set; } 4、新增 xlua.getmetatable、xlua.setmetatable、xlua.setclass、xlua.genaccessor,用以支持lua使用C#类型直接在lua侧完成; 5、反射下扩展方法的支持; 6、lua53版本支持位操作符重载:C#侧的位操作符重载对应到lua的位操作符重载;enum全部加上&和|位操作符; 工程优化 1、加入travis持续集成; 变更 1、LuaCallCSharp自动去除匿名类型; 2、THREAD_SAFT改为THREAD_SAFE; 3、GenFlag.GCOptimize标记为过时; 4、删除过时的GenConfig配置方式; bug修复 1、window phone下一些系统api是禁用的,源码中去掉; 2、泛型约束是struct的时候,生成代码失败; 3、unity2017 .net 4.6,枚举生成代码报错; v2.1.8 2017年6月27日 新增特性 1、Hotfix标签添加几个订制参数:ValueTypeBoxing、IgnoreProperty、IgnoreNotPublic、Inline、IntKey 2、Hotfix代码注入优化,减少text段占用; 3、Hotfix配置支持放Editor目录,可以减少text段占用; 4、支持以指定类型传递object参数; 5、反射调用Obsolete方法在Editor下打印warning; 变更 bug修复 1、pinvoke独立设置的In,Out属性可能导致生成代码失败; 2、如果业务在全局名字空间有和xLua名字空间的同名类,生成代码编译失败; v2.1.7 2017年5月17日 新增特性 1、支持发布UWP(含HoloLens,Xbox one,Win10 Mobile、Win10 PC)应用; 2、支持对lua源代码ras+sha1签名; 3、如果没安装Tools提示“please install the Tools”; 4、linxu版本的支持; 5、支持bitcode打包; 6、对所有struct新增无参数构造函数; 7、delegate的参数名改为p0到pn,防止hotfix时业务代码变量和生成代码冲突; 8、支持对成员名为C#关键字的情况; 9、新增util.loadpackage,和require类似,通过searcher加载文件,不同的是,它不执行,而且也不会cache到package.loaded; 10、优化模版引擎大文件的生成性能; 11、新增不需要生成代码的注入方式; 12、支持构造函数参数带ref和out修饰符; 13、构造函数也支持黑名单排除; 变更 1、this[object field]操作符重载; 2、反射的数据转换规则改成和生成代码一致; 3、忽略掉匿名类及匿名函数的注入; bug修复 1、规避Unity的bug:List,CustomType是当前执行程序集的类型,这在.Net是不需要指明程序集就可以通过Type.GetType得到,但Unity下不行。 2、解决反射下,可变参数不提供时,传null的问题; 3、继承了另外一个程序集的类型,使用了protected类型会导致注入失败; 4、luajit去掉dlopen和dlsym的调用; 5、解决通用版本的生成代码工具找不到模版的问题; 6、修复通用版本反射导入泛化类型的问题; 7、反射调用含delegate参数的的api,会因为缓存而导致调用LuaEnv.Dispose失败; 8、兼容老版本的C编译器,声明要放开头; 9、生成代码对hotfix的检测算法和注入工具不一致导致的注入失败; 10、注入的nested类型是public,但其的外层类型非public,生成代码报错; 11、析构函数只判断名字可能出现误判; 12、构造函数是非public的,可能会导致找不到适配delegate而注入失败; 13、修正Extension method会在所有子类都生成代码的bug(2.1.6泛化特性引入); 14、构造函数重载,只有一个能hotfix成功; 15、规避一个可能是il2cpp的bug(unity5.4):字符串参数默认值是"",ios下在反射的default value也是Reflection.Missing; 16、将一个table传到List<>,取了最后一个参数,而不是那个table的长度; 17、ldarg指令在这种场景下il2cpp转换时会出现异常:1、采用模版注入;2、从4到255间有一个输出参数;改为兼容性更好的ldarg.s; 18、解决配置了System.Delegate到CSCallLua,执行生成代码会编辑器会crash的问题; 19、扩展函数可能和原来的函数同名,反射实现并未考虑到这种情况; 20、通用版本的可变参数delegate调用异常; 21、unity4规避lua53冲突的方式改为返回null更合适,异常方式会导致IsNull无法正常工作; 22、lua_tostring解码失败改为UTF8解码; v2.1.6 2017年3月1日 新增特性 1、带约束的泛型支持(by forsakenyang); 2、非Unity的.net环境支持; 3、代码注入支持小工具方式,该方式不用拷贝cecil库,可以解决拷错cecil库版本或者和Unity,VS插件冲突的问题; 4、Hotfix配置支持字段和属性 5、更方便的Unity协程hotfix 6、在hotfix触发事件; 7、LuaTable添加ForEach方法以及Length属性; 8、cmake生成项目优化:保留源文件目录结构; 9、对已经Dispose的LuaEnv的访问做保护;Dispose时检查callback是否已经都释放,没释放的话报错; 10、支持释放Hotfix回调; 变更 1、构造函数改为执行原有逻辑后调用lua; 2、this[string field]操作符重载会影响到继承调用,去掉该特性的支持; 3、编辑器下的代码注入改为手动方式; bug修复 1、防止定义了同时定义get_xx方法以及xx属性的生成代码的重名。 2、struct注入代码无效; 3、Utils加名字空间,防止和业务冲突; 4、返回定长多维数组的delegate,生成代码可能会冲突; 5、interface,以及编辑器下不生成代码情况下,对可变参数的展开; 6、il2cpp下,如果不生成代码,会报ManifestModule不支持; 7、规避Unity4的bug:访问一个已经被Distroy的UnityEngine.Object,编辑器下会崩溃,这个问题在Unity5,或者luajit版本都不会出现; 8、修改上个版本引入的问题:xlua_setglobal会漏一个值在栈上,这会导致一些32位应用不稳定; 9、当delegate参数只有ref和out的区别的话,报重载冲突; v2.1.5 2017年1月13日 新增特性 1、全平台热补丁; 2、新增线程安全模式,可通过THREAD_SAFT宏打开; 3、新增更简便的配置方式,具体参见XLua\Doc下《XLua的配置.doc》; 4、多虚拟机实例时的自动Dispose; 5、内存优化:减少匿名闭包到delegate映射的内存占用;减少LuaFunction以及LuaTable内存占用;减少lua table映射C#interface的gc; 6、生成代码速度优化; 7、支持直接在lua侧clone C#结构体; 8、LuaFunction新增无gc调用api; 变更 1、delegate必须都加[CSharpCallLua]才支持C#到lua的回调(以前参数和返回值都相同的delegate只要其中一个加了就可以); 2、加回string/number到枚举的自动转换; bug修复 1、枚举不生成代码时,第一次使用会产生两个不同的userdata; 2、数组和System.Type的相互引用导致System.Type生成代码无法加载; 3、更安全的异常处理,封装lua_setglobal,lua_getglobal的异常,C#回调保证所有C#异常都catch并转换到成lua error。 v2.1.4 2016年11月29日 新增特性 1、加了ReflectionUse会自动生成到link.xml,可以防止il2cpp下因stripping导致的反射不可用; 2、开放生成引擎,可二次开发自己生成插件,生成所需的代码或配置; 3、GetInPath和SetInPath无C# gc优化; 4、一个lua table自动转换为带GCOptimize标签的复杂类型以及该复杂类型的一维数组不使用反射,如果这复杂类型是纯值类型,无c# gc; 变更 1、基于一致性以及性能的考虑,不支持数字和字符串到枚举的静默转换,须主动调用起类下的__CastFrom; 2、名字空间从LuaInterface改为XLua; 3、LuaTable的几个可能导致gc的api标注为Obsolete; 4、在不指明返回类型的情况下,如果一个number是整数会优先转换成整数; bug修复 1、含能隐式转换int,long,decimal的类型传到lua变成decimal; 2、反射的重载判断,如果可变参数的位置上是一个不匹配的参数,也会判断为匹配成功; 3、可变参数+重载的话,可变部分不传会报无效参数; 4、加了LuaCallCSharp的Extension method,在Editor下不生成代码不可用; v2.1.3 2016年11月09日 新增特性 1、LuaTable新增Get和Set接口,table操作支持值类型无gc; 2、支持decimal,不丢失精度而且传递到lua无gc; 3、增加LuaEnv.LoadString接口,用于指定返回的delegate类型; 4、例子刷新:新增Helloworld,无GC调用,Lua面向对象,协程例子; 5、enum优化:传递到lua无gc,从int或者string到枚举转换无gc; 6、event的+/-优化:性能提升一倍,而且无gc; 7、生成代码简化; 变更 1、uint在lua53映射到lua_Integer; 2、StreamingAssets加载改为优先级最低; bug修复 1、生成代码下,如果LuaTable或者LuaFunction参数为null会抛异常; 2、lua5.3下,浮点到枚举的静默转换失败; 3、反射下struct类型参数带默认值抛异常; 4、lua53下Length返回浮点; v2.1.2 2016年10月08日 新增特性 1、支持lua5.3,进而支持苹果bitcode,原生64位整数,位运算,utf8等特性; 2、CMake编译,更方便加入第三方插件 3、数组性能优化,包括访问性能以及gc 4、C#调用lua函数减少一次lua gc; 5、优化启动时间; 6、减少类型加载的gc; 7、优化ObjectPool的内存占用; 8、优化小字符串传入lua的gc; 9、LuaTable添加Cast接口,用于LuaTable到其它类型的转换,比如interface; 10、LuaFunction添加Cast接口,用于LuaFunction到delegate的转换; 变更 1、lua内部只有带符号的64整数类型,并增加无符号数库 2、如果不想对Extension Method生成代码,又希望在反射下用,需要添加ReflectionUse; bug修复 1、对ObjectPool已经Destroy的UnityEngine.Object的引用自动解除功能的内存泄漏问题; 2、规避某些版本(已知是5.3.3)的Unity的bug导致的内存泄漏问题; 3、LuaTable或者LuaFunction做返回值的delegate生成代码可能报错; v2.1.1 2016年08月29日 新增特性 1、支持编辑器下不用生成代码能运行; 2、新增IntPtr的支持 3、增加对ObjectPool已经Destroy的UnityEngine.Object的引用自动解除; 4、在LuaEnv添加对lua_gc一些封装; bug修复 1、生成代码传送一个LuaFunction、LuaTable到lua和反射版本不一致,生成代码传送过去是一个C#对象,而反射是Lua函数、table对象,反射的处理更合适; 2、修复同名的静态以及成员方法冲突的问题; 3、修复对interface生成CSharpCallLua代码时,interface含indexer时的报错; 4、修复Editor在运行后会new一个xlua实例的bug; 5、修复通过生成代码调用同时含可变参数和默认值的函数,如果不传参数,将会出错的bug; 6、修复调试时,找不到socket库的bug; 变更 1、反射不做重载方法顺序调整,顺序改为固定且生成代码保持一致; 2、i64加上fade_id,参数传递时更安全; 3、重新加入tdr的from_file的支持; v2.1.0 2016年08月08日 新增特性 1、满足条件struct传递到lua无gc,struct需要满足什么条件才能被优化呢? a. struct允许嵌套其它struct,但它以及它嵌套的struct只能包含这几种基本类型:byte、sbyte、short、ushort、int、uint、long、ulong、float、double; b. struct本身以及使用到该struct的地方需要加LuaCallCSharp,并且加了GCOptimize设置; 2、全新实现的反射机制,更容易和生成代码配合使用 a. 支持extension methods,Enum.__CastFrom; b. ios下支持反射使用event; c. 对类型映射、可变参数调用调整为和生成代码一致; d. 性能更好,gc更少; 3、生成代码菜单简化,并增加“Generate Minimum”选项; 4、支持生成代码配置文件放Editor目录; 变更 1、luajit统一升级成2.1.0b2; 2、luasocket库改为按需加载; 3、重载的string,byte[]参数检查允许为nil; 4、子类访问不触发父类加载; 5、struct的ref参数的修改会修改lua测该参数的值; 6、生成代码加载改为静态(原来是反射); 7、菜单改为更简洁; 8、tdr改为默认不加载; 9、StreamingAssets加载lua改为废弃特性; bug修复 1、参数或者返回值是泛型类的数组,或者是二维数组,生成代码报编译错误; 2、抽象类生成代码报编译错误; 3、消除Clear生成代码的warning; 4、profiler、i64库不支持多实例; v2.0.5 2016年05月18日 新增特性 1、util.async_to_sync,可以更好的利用lua的协程实现同步编程、异步执行;或者异步等待www等; 2、生成代码的规范度调整,消除一些工具的告警; bug修复 1、解决在lua gc移除weak table和调用__gc的时间窗内push同一对象,会生成指向同一C#对象的不同userdata的问题; 2、上版本的的lua内存工具并未打包; 3、修正嵌套类型不能生成代码的问题; v2.0.4 2016年05月04日 新增特性 1、新增函数调用时长报告功能; 2、新增lua内存泄漏定位工具; 3、lua测加入对64位无符号数的支持; 变更 1、支持多种delegate绑定到一个clousre。调整之前一个clousre只能对应一种delegate; bug修复 1、tdr处理长度为1的数组的错误(本来解包应该是{[1] = {a = 1}}的,却是{{a=1}}); 2、tdr数值处理错误(int的-1会解成一个很大的正数) v2.0.3 2016年04月13日 新功能 1、添加“Advanced Gen”功能,用户可以自定义生成代码的范围; 2、支持对库生成Static pusher; 变更 1、LuaTable以及InterfaceBirdage改为触发metatable; 2、Extension Methods不自动加到被扩展类,需要加入生成列表; 3、移除特殊ValueType优化; bug修复 1、Extension Methods为私有时,生成代码语法错误; 2、重载函数含ulong时,生成代码语法错误; 3、反射调用时的默认值处理错误; 4、C#向lua传中文字符的长度处理错误; v2.0.2 2016年04月06日 变更 1、库的生成代码配置支持多份,方便项目的模块化; 2、enum的生成代码合并到一个文件里头; 3、优化异常处理; 4、发布包把库和教程、例子分离,更干净; 5、小bug修改; 升级指引 由于文件有点变动,直接覆盖原有lib会报错,需要: 1、删除原来的XLua目录; 2、解压xlua_v2.0.2.zip到Assets下; 3、重新执行代码生成; v2.0.1 2016年03月24日 1、支持C# 的extension methods; 2、lua调试方面的支持; 3、android下require一个不存在的lua文件可能成功的bug; 4、TDR 4 Lua库的更新; 5、多机型的兼容性测试; v2.0.0 2016年03月08日 1、性能优化,性能对比报告请看主页; 2、加入官方lua版本的tdr; 3、支持64位整数; 4、修正lua中对C#异常pcall引发的不稳定; 5、易用性的优化; 6、其它一些bug的修改。 1.0.2 2015年12月09日 1、解决新版本(已知5.2版本)下,streamAssetsPath不允许在构造函数访问导致的bug; 2、新增windows x64版本的支持; 3、对web版本才用到的代码加入条件编译,减少对手机版发布包的影响; 4、生成代码文件名去掉“+”号; 5、删除4.6的生成代码,以免在新版本报引用过时api的错; v1.0.1 2015年11月30日 1、支持pcall捕捉C#异常; 2、新增cast方法,支持这种场景:实现类是internal声明,只提供interface; 3、解决interface下如果有event,生成代码编译报错的bug; 4、解决interface下有Obsolete的方法,字段,生成代码编译报错的bug; 5、解决含private的默认geter/setter生成代码编译报错的bug; 6、修正类在全局空间下生成代码不可用的bug; 7、修正bridge代码返回值处理错误。 v1.0.0 2015年03月30日 第一个版本 ================================================ FILE: Assets/XLua/CHANGELOG.txt.meta ================================================ fileFormatVersion: 2 guid: be3fe4ee249c5274693e7b6f8053e861 timeCreated: 1470364015 licenseType: Pro TextScriptImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/XLua/Doc/Add_Remove_Lua_Lib.md ================================================ ## What & Why XLua's currently built-in extension libraries: * LuaJIT support for 64-bit integers; * Positioning tool for function call times and memory leaks; * LuaSocket library for supporting ZeroBraneStudio; * tdr 4 lua; With the increasing extensiveness and intensiveness of project use, the current extension libraries have been unable to meet the project team needs. Since various projects require very different extension libraries, and since mobile phone platforms are sensitive to the size of the installation package, xLua is unable to meet these needs through pre-integration. That is why we are offering this tutorial. In this tutorial, we will use lua-rapidjson as an example to explain step by step how to add C/C++ extensions to xLua. Once you know how to add them, you will also know how to delete them naturally. The project team can delete those pre-integrated extensions if they are not used any more. ## How it is done There are three steps: 1. Modify the build file and project settings. Compile the extensions you want to integrate into the XLua Plugin directory. 2. Call the C# APIs on xLua so that the extensions can be loaded as needed (when required in the Lua code). 3. (Optional) If you need to use 64-bit integers in your extensions, you can use xLua's 64-bit extension library to work with C#. ### First, add extensions & compile. Preparations 1. Extract the xLua’s C source code package to the same level directory as the Assets of your Unity project. Download the lua-rapidjson code and place it anywhere you like. In this tutorial, we place the rapidjson header file in the $UnityProj\build\lua-rapidjson\include directory, and place the extended source code rapidjson.cpp in the $UnityProj\build\lua-rapidjson\source directory (Note: $UnityProj refers to your project directory). 2. Add extensions to CMakeLists.txt xLua’s platform Plugins are compiled using CMake. The advantage of this is that the compilations of all platforms are written in a makefile, and most compilation processing logic is cross-platform. XLua's CMakeLists.txt provides extension points (all lists) for third-party extensions: 1. THIRDPART_INC: Third-party extension header search path. 2. THIRDPART_SRC: Third-party extended source code. 3. THIRDPART_LIB: The library on which third-party extensions rely. The following is added with RapidJSON: #begin lua-rapidjson set (RAPIDJSON_SRC lua-rapidjson/source/rapidjson.cpp) set_property( SOURCE ${RAPIDJSON_SRC} APPEND PROPERTY COMPILE_DEFINITIONS LUA_LIB ) list(APPEND THIRDPART_INC lua-rapidjson/include) set (THIRDPART_SRC ${THIRDPART_SRC} ${RAPIDJSON_SRC}) #end lua-rapidjson See the attachment for the complete code. 3. Compile platforms All compiled scripts are named with this format: make_platform_lua version.extension name. For example, the name of the Windows 64-bit Lua 5.3 version is make_win64_lua53.bat, and the name of the Android LuaJIT version is make_android_luajit.sh. you can execute the corresponding script to compile the target version. The compiled scripts are automatically copied to the plugin_lua53 or plugin_luajit directory. The former is for Lua 5.3 and the latter for LuaJIT. The supporting Android script is used on Linux. The NDK path at the beginning of the script must be modified accordingly. ### Second, C# side integration: Each C extension library on Lua will provide a function, luaopen_xxx, where xxx is the name of the dynamic library. For example, the function for the Lua-RapidJSON library is luaopen_rapidjson. Such functions are automatically called by the Lua virtual machine when loading the dynamic library. In the mobile platform, we cannot load the dynamic library due to iOS restrictions. They are compiled directly into the process instead. For this purpose, xLua provides an API to replace this feature (LuaEnv's member methods): public void AddBuildin(string name, LuaCSFunction initer) Parameters: Name: name of the buildin module, a parameter entered during require; initer: the initialization function; Its prototype is public delegate int lua_CSFunction(IntPtr L); This must be a static function and be modified with the property MonoPInvokeCallbackProperty; This API will check these two conditions. We use calling luaopen_rapidjson to show how to use it. Extend the LuaDLL.Lua type, export luaopen_rapidjson to C# via pinvoke, and then write a static function that satisfies the definition of lua_CSFunction. You can write initialization work in it, such as calling luaopen_rapidjson. Here is the complete code: namespace LuaDLL { public partial class Lua { [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)] public static extern int luaopen_rapidjson(System.IntPtr L); [MonoPInvokeCallback(typeof(LuaDLL.lua_CSFunction))] public static int LoadRapidJson(System.IntPtr L) { return luaopen_rapidjson(L); } } } Then call AddBuildin: luaenv.AddBuildin("rapidjson", LuaDLL.Lua.LoadRapidJson); After this, it should work properly. Try the extension in the Lua code: local rapidjson = require('rapidjson') local t = rapidjson.decode('{"a":123}') print(t.a) t.a = 456 local s = rapidjson.encode(t) print('json', s) ### Third, 64-bit transformation Include the i64lib.h file in a file that requires a 64-bit transformation. The header file include these APIs: //Place an int64 on stack/uint64 void lua_pushint64(lua_State* L, int64_t n); void lua_pushuint64(lua_State* L, uint64_t n); //Judge whether int64 is at the pos position on stack/uint64 int lua_isint64(lua_State* L, int pos); int lua_isuint64(lua_State* L, int pos); //Get an int64 from the pos position on stack/uint64 int64_t lua_toint64(lua_State* L, int pos); uint64_t lua_touint64(lua_State* L, int pos); The usage of these APIs varies depending on the actual situation. See the attached file (rapidjson.cpp file). Compile project related modifications ================================================ FILE: Assets/XLua/Doc/Add_Remove_Lua_Lib.md.meta ================================================ fileFormatVersion: 2 guid: 0ae08314c9c889249bbd484254109060 timeCreated: 1529661499 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/XLua/Doc/Configure_EN.md ================================================ # XLua configuration All xLua configurations support three methods: tagging, static lists, and dynamic lists. There are two requirements and two recommended items for configuration: * List mode must use static fields/properties. * List mode must be placed in a static type. * Using tagging is not recommended. * Placing the list mode configuration in the Editor directory is recommended. **Tagging** xLua uses a whitelist to indicate which code is to be generated, and the whitelist is configured via attributes. For example, if you want to call a C# type from Lua or you want to generate the adaptation code, you can add a LuaCallCSharp tag for this type: ~~~csharp [LuaCallCSharp] publicclassA { } ~~~ This mode is convenient, but it will increase the code on the il2cpp and therefore is not recommended. **Static list** Sometimes we cannot directly tag a type, such as a system API, a library without source code, or an instantiated generic type. In this case, you can declare a static field in a static type. This field can be any type except for BlackList and AdditionalProperties, as long as IEnumerable<Type> is implemented (these two exceptions will be specifically described later). Then add a tag to this field: ~~~csharp [LuaCallCSharp] public static List mymodule_lua_call_cs_list = new List() { typeof(GameObject), typeof(Dictionary), }; ~~~ This field needs to be placed in a **static type** and placing it in the **Editor directory** is recommended. **Dynamic list** Declare a static property and tag it accordingly. ~~~csharp [Hotfix] public static List by_property { get { return (from type in Assembly.Load("Assembly-CSharp").GetTypes() where type.Namespace == "XXXX" select type).ToList(); } } ~~~ Getter is code. You can use it to implement a lot of results, such as configuration by namespace, configuration by assembly, and so on. This property needs to be placed in a **static type** and placing it in the **Editor directory** is recommended. ### XLua.LuaCallCSharp When adding this configuration for a C# type, xLua will generate the adapter code for this type (including constructing an instance for the type, and accessing its member properties & methods and static properties & methods). Otherwise, it will try to gain access using the reflection mode with lower performance. Adding this configuration to the Extension Methods of a type will also generate the adaptation code and append it to the member methods of the extended type. XLua will only generate the type loaded with this configuration. It will not automatically generate the adaptation code of its parent type. When accessing the parent type method of the child type object, if the parent type has the LuaCallCSharp configuration, the parent type's adaptation code will be executed. Otherwise it will try to gain access using the reflection mode. The reflection mode access not only has poor performance, but also may cause failed access on the il2cpp due to code stripping. This problem can be avoided through the ReflectionUse tag, which is described below. ### XLua.ReflectionUse When adding this configuration to a C# type, xLua generates a link.xml to block code stripping on the il2cpp. For extension methods, you must add LuaCallCSharp or ReflectionUse to make them accessible. It is recommended that all types to be accessed in Lua have the LuaCallCSharp or ReflectionUse tag, to insure their proper operation on all platforms. ### XLua.DoNotGen This indicates that some of the functions, fields, and properties in a type do not generate code and are accessed through the reflection mode. Only the fields or properties in the standard Dictionary> can be used. The key indicates the effective type. Value is a list. The name of the functions, fields, and properties with no code generated are configured. The differences from ReflectionUse are: 1. ReflectionUse specifies the entire type; 2. Upon the first access to a function (field, property), ReflectionUse will wrap the entire type, while DoNotGen will only wrap the function (field, property). In other words, DoNotGen is lazier. The differences from BlackList are: 1. BlackList cannot be used when it is configured. 2. BlackList can specify an overloaded function, while DoNotGen cannot. ### XLua.CSharpCallLua This allows you to adapt a Lua function to a C# delegate (one scenario is various callbacks at the C# side: UI events, delegate parameters, such as List<T>:ForEach; another scenario is to use the Get function of LuaTable to indicate that a Lua function is bound to a delegate), or to adapt a Lua table to a C# interface. The delegate or interface needs this configuration. ### XLua.GCOptimize A C# pure value type (Note: It refers to a struct that contains only the value type, and it can nest other structs that contain only the value type) or a C# enumerated value has this configuration. xLua generates gc-optimized code for this type. The result is that the value type is passed between Lua and C# with no (C#)gc alloc generated, and that no gc is generated during array access to this type. For various GC-free scenarios, refer to the 05\_NoGc example. Any type except enumeration (including the complex types that contain parameterless constructors) will generate Lua tables for that type, as well as the conversion code of a one-dimensional array with modified type. This will optimize the performance of this conversion, including fewer gc allocs. ### XLua.AdditionalProperties This is GCOptimize's extended configuration. Sometimes, some structs want to make the field private and access the field through the property. In this case, you need to use this configuration (by default, GCOptimize only packetizes/depacketizes the public field). The tagging mode is relatively simple and the configuration mode is complicated. The requirements are that Dictionary<Type, List<string>> type, and the Key of the Dictionary are effective types; and value is the list of property names. See xLua's configuration of several UnityEngine value types and the SysGCOptimize type. ### XLua.BlackList If you do not want to generate an adaption code for a member of a type, you can implement it with this configuration. The tagging method is relatively simple, and the corresponding member can be added. Considering that it may be necessary to add one of the overloaded functions to the blacklist, the configuration is more complicated. The type is List<List<string>>. For each member, the first-level list has only one entry and the second-level list is a string list. The first string is the full path name of the type, the second string is the member name. If the member is a method, you also need to list the full path of the type of its parameters starting from the third string. For example, the following adds a property of GameObject and a method of FileInfo to the blacklist: ~~~csharp [BlackList] public static List> BlackList = new List>() { new List(){"UnityEngine.GameObject", "networkView"}, //new List(){ typeof(UnityEngine.GameObject).FullName, "networkView"}, new List(){"System.IO.FileInfo", "GetAccessControl", "System.Security.AccessControl.AccessControlSections"}, //new List(){ typeof(System.IO.FileInfo).FullName, "GetAccessControl",typeof(System.Security.AccessControl.AccessControlSections).FullName }, }; ~~~ ### The following is the generator configuration, which must be placed in the Editor directory. ### CSObjectWrapEditor.GenPath Configures the path of the generated code, with the type being a string. By default, it is plated in "Assets/XLua/Gen/". ### CSObjectWrapEditor.GenCodeMenu This configuration is used for secondary development of the build engine. When adding this tag to a parameterless function, it will trigger calling the function when executing the "XLua/Generate Code" menu. ================================================ FILE: Assets/XLua/Doc/Configure_EN.md.meta ================================================ fileFormatVersion: 2 guid: 198070d8475ff3043b6c72a906feebee timeCreated: 1529661499 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/XLua/Doc/Custom_Generate_EN.md ================================================ ## Secondary development of the build engine xLua's build engine supports secondary development, and you can use it to generate some text files (for example, code and configuration files). The xLua's link.xml file is generated by the build engine plugin. Other application scenarios (such as generating a Lua IDE auto configuration file) can also be accomplished using this feature. ## Overview The plugin needs to provide two things: 1. a template for generated files, 2. a callback function that accepts the user configuration and returns the data that needs to be injected into the template and the output stream of the files. ## Template syntax The template syntax is simple, with only three elements: * eval: The syntax is <%=exp%>. Exp is an arbitrary expression that will calculate and output the value of exp as a string. * Code: The syntax is <% if true then end%>. The blue part is any Lua code that will be executed. * Literal: This contains the parts other than eval and code. Literal means output as it is. Example: ~~~xml <% require "TemplateCommon" %> <%ForEachCsList(assembly_infos, function(assembly_info)%> <%ForEachCsList(assembly_info.Types, function(type) %> <%end)%> <%end)%> ~~~ TemplateCommon has some predefined functions that can be used (for example ForEachCsList). You can search in TemplateCommon.lua.txt of the project to see which functions are available. For ordinary Lua, you can write one. ## API ~~~csharp public static void CSObjectWrapEditor.Generator.CustomGen(string template_src, GetTasks get_tasks) ~~~ * template_src: template source code * get_tasks: This is a callback function. The type is GetTasks. This function is used to accept the user configuration and return the data that needs to be injected into the template and the output stream of the files. ~~~csharp public delegate IEnumerable GetTasks(LuaEnv lua_env, UserConfig user_cfg); ~~~ * lua_env: This is a LuaEnv object. Because the returned template data needs to be placed in LuaTable, LuaEnv.NewTable is required. * user_cfg: user configuration * return: Among the returned values, CustomGenTask represents a generated file, and IEnumerable type indicates that the same template can generate multiple files. ~~~csharp public struct UserConfig { public IEnumerable LuaCallCSharp; public IEnumerable CSharpCallLua; public IEnumerable ReflectionUse; } ~~~ ~~~csharp public struct CustomGenTask { public LuaTable Data; public TextWriter Output; } ~~~ Example: ~~~csharp public static IEnumerable GetTasks(LuaEnv lua_env, UserConfig user_cfg) { LuaTable data = lua_env.NewTable(); var assembly_infos = (from type in user_cfg.ReflectionUse group type by type.Assembly.GetName().Name into assembly_info select new { FullName = assembly_info.Key, Types = assembly_info.ToList()}).ToList(); data.Set("assembly_infos", assembly_infos); yield return new CustomGenTask { Data = data, Output = new StreamWriter(GeneratorConfig.common_path + "/link.xml", false, Encoding.UTF8) }; } ~~~ * Only one file is generated here, so only one CustomGenTask is returned. * data is the data to be used in the template. There is an assembly_infos field included. See the template section for how to use this field. ## Tag Generally speaking, you can use MenuItem to create a menu to trigger a custom generate operation. However, sometimes you may want the generate operation to be triggered directly by the xLua "Generate Code" menu. In this situation, you will need to use CSObjectWrapEditor.GenCodeMenu Example: ~~~csharp [GenCodeMenu]//加到Generate Code菜单里头 public static void GenLinkXml() { Generator.CustomGen(ScriptableObject.CreateInstance().Template.text, GetTasks); } ~~~ PS: All the code related to the content above is in the XLua\Src\Editor\LinkXmlGen directory, which is also the implementation of the link.xml generation function that was explained at the beginning. ================================================ FILE: Assets/XLua/Doc/Custom_Generate_EN.md.meta ================================================ fileFormatVersion: 2 guid: c0765c3c416e8f746bf142b05be65ea7 timeCreated: 1529661500 licenseType: Pro DefaultImporter: userData: assetBundleName: assetBundleVariant: ================================================ FILE: Assets/XLua/Doc/Faq_EN.md ================================================ # FAQs ## How to use xLua distribution package? xLua is currently released as a zip package and can be extracted to the project directory. ## Can xLua be placed in another directory? Yes, but the generated code directory needs to be configured (by default, it is in the Assets\XLua\Gen directory). For details, see the GenPath configuration in XLua Configuration.doc. The important thing to note about changing directories is that the generated code and xLua core code must be in the same assembly. If you want to use the hotfix function, the xLua core code must be in the Assembly-CSharp assembly. ## Does Lua source code only use the txt extension? It can use any extension. If you want to add TextAsset to an installation package (for example, to the Resources directory), Unity does not identify the Lua extension. This is Unity's rule. If you do not add it to the installation package, there is no limit to the extension. For example, in case that you download it to a directory (this is also practicable in hotfix mode), and then read this directory with CustomLoader or by setting package.path. Why does the Lua source code (including examples) of xLua use the txt extension? Because xLua itself is a library, it doesn't provide download functionality, and it's inconvenience to download code from somewhere else during runtime. TextAsset is a simpler solution. ## The editor (or non-il2cpp for Android) runs normally, but when iOS calls a function, "attempt to call a nil value" is reported. By default, il2cpp will strip code, such as engine code, C# system APIs, and third-party dlls. In simple terms, functions in these places will not be compiled into your final release package if your C# code does not access them. Solution: Add a reference (for example, configuring it to LuaCallCSharp, or adding access to that function to your C# code), or use the link.xml configuration (When ReflectionUse is configured, xLua will automatically configure it for you in link.xml) to tell il2cpp not to strip a certain type of code. ## Where can I find Plugins source code and how can I use it? Plugins source code is in the xLua_Project_Root/build. The source code compilation relies on CMake. After installing CMake, execute make_xxxx_yyyy.zz. xxxx stands for the platform, such as iOS or Android; yyyy is the virtual machine to be integrated, including Lua 5.3 and LuaJIT. The file extension is zz. The extension is bat for Windows and sh for other platforms. Windows compilation relies on Visual Studio 2015. Android compilation uses Linux, relies on NDK, and needs to point ANDROID_NDK in the script to the installation directory of NDK. iOS and OS X need to be compiled on a Mac. ## How do I solve the "xlua.access, no field __Hitfix0_Update" error? Follow the [Hotfix Operation Guide](hotfix.md). ## How do I solve the "please install the Tools" error? Do not install Tools to the same level directory as Assets. You can find Tools in the installation package, or in the master directory. ## How do I solve the "This delegate/interface must add to CSharpCallLua: XXX" error? In the editor, xLua can run even without generating code. This prompt appears either because CSharpCallLua was not to the type, or because the code was generated before adding, but no generation was executed again. Solution: After confirming that CSharpCallLua has been added to XXX (type name), clear the code and run it again. If there is no problem with the editor, the error will be reported to the mobile phone. This means that you did not generate the code (execute “XLua/Generate Code”) before release. ## What do I do if executing "XLua/Hotfix Inject In Editor" menu on Unity 5.5 or later versions produces the following prompt: "WARNING: The runtime version supported by this application is unavailable." This is because the injection tool was compiled with .NET 3.5. The Unity 5.5 warning means that MonoBleedingEdge's mono environment does not support .NET 3.5. However, due to backward compatibility, no real problems related to this warning have been found so far. You may find that defining INJECT_WITHOUT_TOOL in nested mode will not produce this warning. However, the problem is that this mode is used for debugging and is not recommended because it may cause some library conflicts. ## How do I trigger an event in hotfix? Firstly, enable private member access using xlua.private_accessible. Then, call delegates using the "&event name" field of the object, for example self\['&MyEvent'\](), where MyEvent is the event name. ## How do I patch Unity Coroutine's implementation function? See the corresponding section of the [Hotfix Operation Guide](hotfix.md). ## Is NGUI (or UGUI/DOTween, etc...) supported? Yes. The most important feature of xLua is that what you write with C# can be originally replaced with Lua, and the plugins available on C# will remain available. ## If debugging is needed, how do I deal with the filepath parameter of CustomLoader? When Lua calls require 'a.b', CustomLoader will be called and the string "a.b" will be injected. You need to understand this string, load the Lua file (from file/memory/network, etc...) and return two things. The first thing is a path that the debugger can understand, for example a/b.lua, which is returned by setting the filepath parameter of the ref type. The second thing is the bytes[] of the source code in UTF8 format, which is returned with the returned value. ## What is generated code? XLua supports one kind of Lua-C# interaction technique, which implements interaction by generating adaptation code between the two. It has better performance and is therefore recommended. Another interaction technique is reflection, which has less impact on the installation package and can be used in scenarios which have lower performance requirements and has installation package size limit. ## How do I solve errors with the code generated before and after changing the interface? Clear the generated code (execute the "Clear Generated Code" menu, which may disappear after restart. Then you can manually delete the entire generated code directory), and then regenerate the code when the compilation is completed. ## When should the code be generated? During the development period, it is not recommended that code be generated, to avoid many compilation failures due to inconsistency and waiting time during compilation of the generated code. The generated code must be executed before the build version for the mobile phone. Automatic execution is recommended. Optimize performance. The generated code must be executed before the performance test because there are significant differences between the generated code and the code not generated. ## Do all C# APIs in CS namespaces occupy high memory? Due to the use of LazyLoad, their existences are just a virtual concepts. For example, for UnityEngine.GameObject, its methods, and properties are loaded only when accessing the first CS.UnityEngine.GameObject or transferring the first instance to Lua. ## In what scenarios are LuaCallSharp and CSharpCallLua used? It depends on the caller and the callee. For example, if you want to call C#'s GameObject, find a function in Lua, or call GameObject's instance methods or properties, the GameObject type needs to be added to LuaCallSharp. If you want to add a Lua function to the UI callback (in this case, C# is the caller and the Lua function is the callee), the delegate declared by the callback needs to be added to CSharpCallLua. Sometimes, it is confusing, like when calling List, for example. Find(Predicate match) and List will of course be added to LuaCallSharp. However, Predicate needs to be added to CSharpCallLua, because the caller of match is C#, and a Lua function is called. A more unthinkable way: When you see, "This delegate/interface must add to CSharpCallLua: XXX", just add XXX to CSharpCallLua. ## Will gc alloc appear in value type transfer? If you are using the delegate to call a Lua function, if the LuaTable and LuaFunction that you use have no gc interface, or if there is an array, the following value types have no gc: 1. All the basic value types (all integers, all floating-point numbers, decimals) 2. All enumerated types 3. The field contains only the struct of value type, and it can nest other struct. For 2 and 3, pleases add those types to GCOptimize. ## Is reflection available on iOS? There are two restrictions on iOS: 1. no JIT; 2. code stripping; When C# calls Lua via delegates or interfaces, using reflection emit instead of the generated code relies on JIT, so this is currently only available in the editor mode. If Lua calls C#, it will be mainly affected by code stripping. In this case, you can configure ReflectionUse (but not LuaCallSharp), and execute "Generate Code". No package code except link.xml will be generated for the type this time. Set this type to 'not to be stripped'. In short, only CSharpCallLua is necessary (a little code of this type is generated), and reflection can be used in LuaCallSharp generation. ## Is calling generic methods supported? This is partially supported. See [Example 9 for the degree of support.](../Examples/09_GenericMethod/) There are other ways to call generic methods. If it is a static method, you can write a package to instantiate the generic method. If it is a member method, xLua supports the extension method. You can add an extension method to instantiate a generic method. This extension method is just like an ordinary member method. ```csharp // C# public static Button GetButton(this GameObject go) { return go.GetComponent