Copy disabled (too large)
Download .txt
Showing preview only (17,731K chars total). Download the full file to get everything.
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 <stddef.h>
#include <stdlib.h>
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
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>15G31</string>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>xlua</string>
<key>CFBundleIdentifier</key>
<string>com.xlua</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>xlua</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>
<key>CFBundleVersion</key>
<string>1</string>
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string>7D1014</string>
<key>DTPlatformVersion</key>
<string>GM</string>
<key>DTSDKBuild</key>
<string>15E60</string>
<key>DTSDKName</key>
<string>macosx10.11</string>
<key>DTXcode</key>
<string>0731</string>
<key>DTXcodeBuild</key>
<string>7D1014</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright @2017 THL A29 Limited, a Tencent company. All rights reserved.</string>
</dict>
</plist>
================================================
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>,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<TKey, TValue>和Set<TKey, TValue>接口,table操作支持值类型无gc;
2、支持decimal,不丢失精度而且传递到lua无gc;
3、增加LuaEnv.LoadString<T>接口,用于指定返回的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<Type> mymodule_lua_call_cs_list = new List<Type>()
{
typeof(GameObject),
typeof(Dictionary<string, int>),
};
~~~
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<Type> 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<Type, List<string>> 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<List<string>> BlackList = new List<List<string>>() {
new List<string>(){"UnityEngine.GameObject", "networkView"},
//new List<string>(){ typeof(UnityEngine.GameObject).FullName, "networkView"},
new List<string>(){"System.IO.FileInfo", "GetAccessControl", "System.Security.AccessControl.AccessControlSections"},
//new List<string>(){ 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"
%>
<linker>
<%ForEachCsList(assembly_infos, function(assembly_info)%>
<assembly fullname="<%=assembly_info.FullName%>">
<%ForEachCsList(assembly_info.Types, function(type)
%><type fullname="<%=type:ToString()%>" preserve="all"/>
<%end)%>
</assembly>
<%end)%>
</linker>
~~~
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<CustomGenTask> 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<Type> LuaCallCSharp;
public IEnumerable<Type> CSharpCallLua;
public IEnumerable<Type> ReflectionUse;
}
~~~
~~~csharp
public struct CustomGenTask
{
public LuaTable Data;
public TextWriter Output;
}
~~~
Example:
~~~csharp
public static IEnumerable<CustomGenTask> 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<LinkXmlGen>().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<int>, for example. Find(Predicate<int> match) and List<int> will of course be added to LuaCallSharp. However, Predicate<int> 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<Button>();
}
```
```lua
-- lua
local go = CS.UnityEngine.GameObject.Find("button")
go:GetButton().onClick:AddListener(function()
print('onClick')
end)
```
## Can Lua call C# overloaded functions?
Yes, but this is not as well supported as on C#. For example, in the overloaded methods void Foo(int a) and void Foo(short a), because int and short both correspond to the number on Lua, it is impossible to use the parameters to judge which overloaded method is called. In this situation, you can use the extension method to give an alias to one of them.
## What should I do if "A method/property/field is not defined" is reported when the code is generated during packaging, but it runs normally on the editor?
This is often because the method/property/field is extended in the conditional compilation, which is only available in UNITY_EDITOR. This can be solved by adding this method/property/field to the blacklist, and then re-executing code generation when the compilation is completed.
## Why is this[string field] or this[object field] operator overload inaccessible in Lua? (For example, in Dictionary\<string, xxx\>, I cannot retrieve values in Dictionary\<object, xxx\> using dic['abc'] or dic.abc on Lua)
Because: 1. This feature will cause the base type-defined methods, properties, and fields to be inaccessible. (For example, the Animation cannot access the GetComponent method.); 2. The data cannot be retrieved if the key is the name of a method, property, or field of the current type. For example, in the Dictionary type, dic['TryGetValue'] returns a function that points to the TryGetValue method of the Dictionary.
If your version is newer than 2.1.11, you can use get_Item to get the value and set_Item to set the value. It should be noted that only this[string field] or this[object field] operator has these two alternative APIs. The keys of other types do not.
~~~lua
dic:set_Item('a', 1)
dic:set_Item('b', 2)
print(dic:get_Item('a'))
print(dic:get_Item('b'))
~~~
If your version is 2.1.11 or earlier, it is recommended that you directly use the equivalent method of the operator, such as the TryGetValue of the Dictionary. If this method is not available, you can package a method through the Extension method on C# and then use it.
## Why are some Unity objects null in C# but not nil in Lua, for example, a GameObject that has been destroyed?
In fact, the C# object is not null, but the UnityEngine.Object overloads the == operator. When an object is destroyed, or in the case of failed initialization, true is returned for obj == null, but this C# object is not null. You can check this using System.Object.ReferenceEquals(null, obj).
In this case, you can write an extension method for UnityEngine.Object.
~~~csharp
[LuaCallCSharp]
[ReflectionUse]
public static class UnityEngineObjectExtention
{
public static bool IsNull(this UnityEngine.Object o) // 或者名字叫IsDestroyed等等
{
return o == null;
}
}
~~~
Then, in Lua, use IsNull for all UnityEngine.Object instances.
~~~lua
print(go:GetComponent('Animator'):IsNull())
~~~
## How do I construct a generic instance?
If the types involved are all in the mscorlib and Assembly-CSharp assembly, the construction of the generic instance is the same as that of ordinary types. Both are CS.namespace.typename(). The typename expression is special, and the typename expression of the generic instance contains the identifier illegal symbol. The last part should be replaced with ["typename"]. Use List<string> as an example.
~~~lua
local lst = CS.System.Collections.Generic["List`1[System.String]"]()
~~~
If the typename of a generic instance is undefined, typeof(undefined type).ToString() can be printed on C#.
If the types involved are not in the mscorlib and Assembly-CSharp assembly, you can use the C# reflection:
~~~lua
local dic = CS.System.Activator.CreateInstance(CS.System.Type.GetType('System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UnityEngine.Vector3, UnityEngine]],mscorlib'))
dic:Add('a', CS.UnityEngine.Vector3(1, 2, 3))
print(dic:TryGetValue('a'))
~~~
If your xLua version is larger than v2.1.12, you can
~~~lua
-- local List_String = CS.System.Collections.Generic['List<>'](CS.System.String) -- another way
local List_String = CS.System.Collections.Generic.List(CS.System.String)
local lst = List_String()
local Dictionary_String_Vector3 = CS.System.Collections.Generic.Dictionary(CS.System.String, CS.UnityEngine.Vector3)
local dic = Dictionary_String_Vector3()
dic:Add('a', CS.UnityEngine.Vector3(1, 2, 3))
print(dic:TryGetValue('a'))
~~~
## Why is the "try to dispose a LuaEnv with C# callback!" error reported when LuaEnv.Dispose is called?
This is because C# still has a delegate pointing to a function in the Lua virtual machine. Check this to prevent calling these invalid delegates after the virtual machine is released (They are invalid because the virtual machine on which the Lua function is referenced has been released.) from causing exceptions or even crashes.
How do I solve this? Release these delegates, that is the delegates nonexistent on C# that will not be referenced:
If you get and save the object member through LuaTable.Get on C#, then assign null to the member.
If you register the Lua function in Lua to some event callbacks, then deregister these callbacks.
If you perform an injection to C# via xlua.hotfix(class, method, func), then delete it via xlua.hotfix(type, method, nil).
Note that this should be done before Dispose.
## Crashes occur when calling LuaEnv.Dispose.
It is very likely that this Dispose operation is executed by Lua, which is equivalent to releasing the Lua virtual machine during the execution by Lua. Thus, this can only be executed by C#.
## When the C# parameter (or field) type is object, the integer is transferred as the long type by default. How do I specify other types like int, for example?
See [Example 11](../Examples/11_RawObject/RawObjectTest.cs)
## How do I execute the original C# logic before executing hotfix?
With util.hotfix_ex, you can call the original C# logic.
~~~lua
local util = require 'xlua.util'
util.hotfix_ex(CS.HotfixTest, 'Add', function(self, a, b)
local org_sum = self:Add(a, b)
print('org_sum', org_sum)
return a + b
end)
~~~
## How do I assign a C# function to a delegate field?
In 2.1.8 or earlier versions, you can just use the C# function as a Lua function. The performance is lower, because the delegate calls Lua through the Birdage adaptation code first, and then Lua calls C#.
In 2.1.9, the createdelegate function is added in xlua.util.
For example, see the following C# code:
~~~csharp
public class TestClass
{
public void Foo(int a)
{
}
public static void SFoo(int a)
{
}
}
public delegate void TestDelegate(int a);
~~~
You can specify using the Foo function to create a TestDelegate instance.
~~~lua
local util = require 'xlua.util'
local d1 = util.createdelegate(CS.TestDelegate, obj, CS.TestClass, 'Foo', {typeof(CS.System.Int32)}) --由于Foo是实例方法,所以参数2需要传TestClass实例
local d2 = util.createdelegate(CS.TestDelegate, nil, CS.TestClass, 'SFoo', {typeof(CS.System.Int32)})
obj_has_TestDelegate.field = d1 + d2 --到时调用field的时候将会触发Foo和SFoo,这不会经过Lua适配
~~~
## Why is Lua sometimes interrupted without an error message?
Generally, this happens in two situations:
1. You used a coroutine instead of the standard Lua to run the code that had an error. Coroutine errors are expressed via the returned resume value. Please refer to the relevant Lua official documents for more information. If you want to throw an exception directly for the coroutine error, you can add an assert in your resume call.
Change the following code:
~~~lua
coroutine.resume(co, ...)
~~~
to:
~~~lua
assert(coroutine.resume(co, ...))
~~~
2. Print doesn't work after upper layer catch.
For example, in some SDKs, the exception disappears after try-catch during callback.
## How do I deal with overload ambiguity?
For example, due to ignoring the out parameter, one of the overloads of Physics.Raycast cannot be called. (For example, short and int cannot be distinguished.)
First, it’s rare that the out parameter causes overload ambiguity. At present, we have only received such feedback about Physics.Raycast (as of Sept. 22, 2017). We recommended that you solve this via self-packaging (This is also applicable to short and int): Directly package static functions with other names. For a member method, package it with the Extension method.
In the hotfix scenario, we do not package it in advance. How do I call the specified overload?
Use xlua.tofunction and reflection. xlua.tofunction inputs a MethodBase object and returns a Lua function. For example, see the following C# code:
~~~csharp
class TestOverload
{
public int Add(int a, int b)
{
Debug.Log("int version");
return a + b;
}
public short Add(short a, short b)
{
Debug.Log("short version");
return (short)(a + b);
}
}
~~~
We can call the specified overload this way:
~~~lua
local m1 = typeof(CS.TestOverload):GetMethod('Add', {typeof(CS.System.Int16), typeof(CS.System.Int16)})
local m2 = typeof(CS.TestOverload):GetMethod('Add', {typeof(CS.System.Int32), typeof(CS.System.Int32)})
local f1 = xlua.tofunction(m1) --切记对于同一个MethodBase,只tofunction一次,然后重复使用
local f2 = xlua.tofunction(m2)
local obj = CS.TestOverload()
f1(obj, 1, 2) --调用short版本,成员方法,所以要传对象,静态方法则不需要
f2(obj, 1, 2) --调用int版本
~~~
Note: Since xlua.tofunction is not easy to use and reflection can also be used, doing this is recommended only as a temporary solution. Instead, try doing this with a package method.
## Is interface expansion method supported?
Due to the quantity of generated code, calling with obj:ExtentionMethod() is not supported. You can only call CS.ExtentionClass.ExtentionMethod(obj) through the static method.
================================================
FILE: Assets/XLua/Doc/Faq_EN.md.meta
================================================
fileFormatVersion: 2
guid: 7b6232183a3c52f4f9af4b68f8a687cc
timeCreated: 1529661499
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/Hotfix_EN.md
================================================
## Usage
1. Add the HOTFIX_ENABLE macro to enable this feature (to File->Build Setting->Scripting Define Symbols on Unity3D). This macro should be set separately on the editor and each mobile platform! For automatic packaging, it should be noted that the macro set in the code in the API are not valid and it needs to be set in the editor.
(It is recommended that you use HOTFIX_ENABLE only for mobile phone build versions or for developing a patch in the editor, but not for usual development codes)
2. Execute the XLua/Generate Code menu.
3. This step will be automatically carried out in injection and construction of mobile phone packages. You need to manually execute the "XLua/Hotfix Inject In Editor" menu when developing a hotfix in the editor. After successful injection, "hotfix inject finish!" or "had injected!" will be printed.
## Constraints
Static constructors are not supported.
At present, only the code hotfix for Assets is supported, but not the code hotfix for engine or for the C# system library.
## API
xlua.hotfix(class, [method_name], fix)
* Description: Inject Lua patch
* class: C# class, two representation methods, CS.Namespace.Typename or string method "Namespace.Typename"; The string format is consistent with the Type.GetType of C#; If the nested type is non-Public type, you can only use the string method to represent "Namespace.TypeName+NestedTypeName".
* method_name: method name, optional;
* fix: If you transfer method_name, fix will be a function; otherwise it will provide a set of functions through the table. The table organization is based on the principle that key is method_name and value is the function.
base(csobj)
* Description: The child type override function is implemented by calling the parent type via base.
* csobj: object
* Returned value: new object, which can be used to call the method via base
Example (in HotfixTest2.cs):
```lua
xlua.hotfix(CS.BaseTest, 'Foo', function(self, p)
print('BaseTest', p)
base(self):Foo(p)
end)
```
util.hotfix_ex(class, method_name, fix)
* Description: This is the enhanced version of xlua.hotfix, which can perform the original function in the fix function. Its disadvantage is that the implementation of fix will be slightly slower.
* method_name: method name;
* fix: This is the Lua function used to replace the C# method.
## Tag the type of hotfix
Like other configurations, there are two methods:
Configure a list in the static field or property of a static type. Properties can be used to implement more complex configurations, such as whitelisting based on Namespace.
~~~csharp
public static class HotfixCfg
{
[Hotfix]
public static List<Type> by_field = new List<Type>()
{
typeof(HotFixSubClass),
typeof(GenericClass<>),
};
[Hotfix]
public static List<Type> by_property
{
get
{
return (from type in Assembly.Load("Assembly-CSharp").GetTypes()
where type.Namespace == "XXXX"
select type).ToList();
}
}
}
~~~
## Hotfix Flag
The Hotfix flag can set some flags to customize the generated code and instrumentation.
* Stateless and Stateful
This is is a legacy setting. The Stateful method has been removed in the new version because similar effects can be achieved with the xlua.util.state interface. For how to use this interface, see the sample code in HotfixTest2.cs.
Without Stateful, the default is Stateless, so there is no need to set this flag.
* ValueTypeBoxing
Value type adaptation. The delegate will converge to the object. Its advantage lies in having less code. Its disadvantage is that boxing and gc are generated. It is suitable for text segment sensitive services.
* IgnoreProperty
No property injection and generation of adaptation code. In general, most properties have simple implementation and lower error probability. No injection is recommended.
* IgnoreNotPublic
No injection or generation of adaptation code for non-public methods. Only private methods (such as MonoBehaviour) which are called by reflection will be injected. Other non-public methods that are only called by this type may not be injected. but the workload for repair will be slightly heavier. All public methods that reference this function must be rewritten.
* Inline
No generation of the adaptation delegate. The process code is directly injected into the function body.
* IntKey
Instead of generating static fields, all injection points are managed centrally in an array.
Advantages: Little effect on the text segment.
Disadvantages: This is not as convenient as the default method, and needs to use the id to indicate which function the hotfix is used for. This id is assigned when the code is injected into the tool. The function-id mapping will be saved in Gen/Resources/hotfix_id_map.lua.txt. Automatic timestamping is backed up to the same level directory as hotfix_id_map.lua.txt. After releasing the mobile version, properly save the file.
The format of this file is like this (Note: This file is only used in IntKey mode. If you do not specify IntKey mode injection, only an empty table is returned in the file):
~~~lua
return {
["HotfixTest"] = {
[".ctor"] = {
5
},
["Start"] = {
6
},
["Update"] = {
7
},
["FixedUpdate"] = {
8
},
["Add"] = {
9,10
},
["OnGUI"] = {
11
},
},
}
~~~
To replace the Update function of HotfixTest, you have to
~~~lua
CS.XLua.HotfixDelegateBridge.Set(7, func)
~~~
If it is an overloaded function, a function name will correspond to multiple ids, such as the Add function above.
Can it be automated? Yes. xlua.util provides the auto_id_map function. When it is executed once, you can use the type and method name to indicate the repaired function.
~~~lua
(require 'xlua.util').auto_id_map()
xlua.hotfix(CS.HotfixTest, 'Update', function(self)
self.tick = self.tick + 1
if (self.tick % 50) == 0 then
print('<<<<<<<<Update in lua, tick = ' .. self.tick)
end
end)
~~~
The premise is that hotfix_id_map.lua.txt is in a directory that can be referenced by require 'hotfix_id_map'.
## Usage suggestions
* Add the Hotfix flag to all types that are most likely to be modified.
* It is recommended that you use reflection to find all delegate types involved in the function parameters, fields, properties and events, and then add CSharpCallLua.
* Add LuaCallCSharp to business code, engine APIs, system APIs, and the types to which the Lua hotfix requires high-performance access.
* Engine APIs and system APIs may be stripped by code (those not referenced by C# will be stripped). If you think you may add API calls other than C# codes, these APIs are added to either LuaCallCSharp or ReflectionUse.
## Patching
Xlua uses Lua functions to replace C#'s constructors, functions, properties and events. Lua implementations are based on functions. For example, the property corresponds to a getter function and a setter function, and the event corresponds to an add function and a remove function.
* Functions
method_name transfers the function name and supports overload. Different overloads are forwarded to the same Lua function.
For example:
```csharp
// 要fix的C#类
[Hotfix]
public class HotfixCalc
{
public int Add(int a, int b)
{
return a - b;
}
public Vector3 Add(Vector3 a, Vector3 b)
{
return a - b;
}
}
```
```lua
xlua.hotfix(CS.HotfixCalc, 'Add', function(self, a, b)
return a + b
end)
```
The difference between a static function and a member function is that a member function will have a self parameter added. This self is the C# object itself in Stateless mode (corresponding to C#'s this).
Ordinary parameters correspond to Lua parameters. The ref parameter corresponds to a Lua parameter and a returned value, and the out parameter corresponds to a returned value on Lua.
Generic functions have the same hotfix rules as ordinary functions.
* Constructors
The method_name corresponding to the constructor is ".ctor".
Unlike the ordinary function, the hotfix of the constructor is not a replacement, but calls Lua after executing the original logic.
* Properties
The property named "AProp" will correspond to a getter, its method_name equals to get_AProp, and the setter's method_name is equal to set_AProp.
* []Operators
The setter corresponds to set_Item, and the getter corresponds to get_Item. The first parameter is self, which is followed by key and value for the setter. The getter has only the key parameter, and the returned value is the value that it has gotten.
* Other operators
The operators of C# have a set of internal representations. For example, the + operator function name is op_Addition (for the internal representation of other operators, see the relevant document). Overriding this function will override the + operator of C#.
* Events
For example, for the event "AEvent", the += operator is add_AEvent, and the -= operator is remove_AEvent. The first parameter of the two functions is self, and the second parameter is the delegate immediately after the operator.
Then, directly access the private delegate corresponding to the event via xlua.private_accessible. (For versions newer than 2.1.11, calling xlua.private_accessible is not required.) The event can be triggered directly through the object's "&event name" field, such as self\['&MyEvent'\](), where MyEvent is the event name.
* Destructors
The method_name is "Finalize” and transfers a self parameter.
Unlike the ordinary function, the hotfix of the destructor is not a replacement, but continues the original logic after calling the Lua function.
* Generic types
Other rules are the same. It should be noted that each instantiated generic type is an independent type. You can only patch each instantiated type. For example:
```csharp
public class GenericClass<T>
{
}
```
You can only patch GenericClass\<double\> and GenericClass\<int\>, instead of GenericClass.
The following is an example of patching GenericClass<double>:
```csharp
luaenv.DoString(@"
xlua.hotfix(CS.GenericClass(CS.System.Double), {
['.ctor'] = function(obj, a)
print('GenericClass<double>', obj, a)
end;
Func1 = function(obj)
print('GenericClass<double>.Func1', obj)
end;
Func2 = function(obj)
print('GenericClass<double>.Func2', obj)
return 1314
end
})
");
```
* Unity coroutine
Using util.cs_generator, you can simulate an IEnumerator with a function. The coroutine.yield here is similar to the yield return in C#. For example, the following C# code is equivalent to the corresponding hotfix code.
~~~csharp
[XLua.Hotfix]
public class HotFixSubClass : MonoBehaviour {
IEnumerator Start()
{
while (true)
{
yield return new WaitForSeconds(3);
Debug.Log("Wait for 3 seconds");
}
}
}
~~~
~~~csharp
luaenv.DoString(@"
local util = require 'xlua.util'
xlua.hotfix(CS.HotFixSubClass,{
Start = function(self)
return util.cs_generator(function()
while true do
coroutine.yield(CS.UnityEngine.WaitForSeconds(3))
print('Wait for 3 seconds')
end
end)
end;
})
");
~~~
* Entire type
If you want to replace the entire type, you don't need to call xlua.hotfix again and again, you can do it all at once. Just give a table and press method_name = function.
```lua
xlua.hotfix(CS.StatefullTest, {
['.ctor'] = function(csobj)
return util.state(csobj, {evt = {}, start = 0, prop = 0})
end;
set_AProp = function(self, v)
print('set_AProp', v)
self.prop = v
end;
get_AProp = function(self)
return self.prop
end;
get_Item = function(self, k)
print('get_Item', k)
return 1024
end;
set_Item = function(self, k, v)
print('set_Item', k, v)
end;
add_AEvent = function(self, cb)
print('add_AEvent', cb)
table.insert(self.evt, cb)
end;
remove_AEvent = function(self, cb)
print('remove_AEvent', cb)
for i, v in ipairs(self.evt) do
if v == cb then
table.remove(self.evt, i)
break
end
end
end;
Start = function(self)
print('Start')
for _, cb in ipairs(self.evt) do
cb(self.start, 2)
end
self.start = self.start + 1
end;
StaticFunc = function(a, b, c)
print(a, b, c)
end;
GenericTest = function(self, a)
print(self, a)
end;
Finalize = function(self)
print('Finalize', self)
end
})
```
================================================
FILE: Assets/XLua/Doc/Hotfix_EN.md.meta
================================================
fileFormatVersion: 2
guid: 7919d0bddff7ee340852008d36cd68ec
timeCreated: 1529661499
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/Materials/logo.mat.meta
================================================
fileFormatVersion: 2
guid: 953e2ba39b9a2d54388919b75877efb7
NativeFormatImporter:
userData:
================================================
FILE: Assets/XLua/Doc/Materials.meta
================================================
fileFormatVersion: 2
guid: ee1eae11fbe87b04193ab2c3d15ba2b3
folderAsset: yes
timeCreated: 1481715983
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/XLua_API.doc.meta
================================================
fileFormatVersion: 2
guid: f05e875da3e1b3844b2360d177d617c9
DefaultImporter:
userData:
================================================
FILE: Assets/XLua/Doc/XLua_API.md
================================================
## C# API
### LuaEnv类
#### object[] DoString(string chunk, string chunkName = "chuck", LuaTable env = null)
描述:
执行一个代码块。
参数:
chunk: Lua代码的字符串;
chunkName: 发生error时的debug显示信息中使用,指明某某代码块的某行错误;
env :这个代码块的环境变量;
返回值:
代码块里return语句的返回值;
比如:return 1, “hello”,DoString返回将包含两个object的数组, 一个是double类型的1, 一个是string类型的“hello”
例如:
LuaEnv luaenv = new LuaEnv();
object[] ret = luaenv.DoString("print(‘hello’)\r\nreturn 1")
UnityEngine.Debug.Log("ret="+ret[0]);
luaenv.Dispose()
#### T LoadString<T>(string chunk, string chunkName = "chunk", LuaTable env = null)
描述:
加载一个代码块,但不执行,只返回类型可以指定为一个delegate或者一个LuaFunction
参数:
chunk: Lua代码的字符串;
chunkName: 发生error时的debug显示信息中使用,指明某某代码块的某行错误;
env :这个代码块的环境变量;
返回值:
代表该代码块的delegate或者LuaFunction类;
#### LuaTable Global
描述:
代表lua全局环境的LuaTable
### void Tick()
描述:
清除Lua的未手动释放的LuaBase对象(比如:LuaTable, LuaFunction),以及其它一些事情。
需要定期调用,比如在MonoBehaviour的Update中调用。
### void AddLoader(CustomLoader loader)
描述:
增加一个自定义loader
参数:
loader:一个包括了加载函数的委托,其类型为delegate byte[] CustomLoader(ref string filepath),当一个文件被require时,这个loader会被回调,其参数是调用require所使用的参数,如果该loader找到文件,可以将其读进内存,返回一个byte数组。如果需要支持调试的话,而filepath要设置成IDE能找到的路径(相对或者绝对都可以)
#### void Dispose()
描述:
Dispose该LuaEnv。
> LuaEnv的使用建议:全局就一个实例,并在Update中调用GC方法,完全不需要时调用Dispose
### LuaTable类
#### `T Get<T>(string key)`
描述:
获取在key下,类型为T的value,如果不存在或者类型不匹配,返回null;
#### `T GetInPath<T>(string path)`
描述:
和Get的区别是,这个函数会识别path里头的“.”,比如var i = tbl.GetInPath<int>(“a.b.c”)相当于在lua里头执行i = tbl.a.b.c,避免仅为了获取中间变量而多次调用Get,执行效率更高。
#### `void SetInPath<T>(string path, T val)`
描述:
和GetInPaht<T>对应的setter;
#### `void Get<TKey, TValue>(TKey key, out TValue value)`
描述:
上面的API的Key都只能是string,而这个API无此限制;
#### `void Set<TKey, TValue>(TKey key, TValue value)`
描述:
对应Get<TKey, TValue>的setter;
#### `T Cast<T>()`
描述:
把该table转成一个T指明的类型,可以是一个加了CSharpCallLua声明的interface,一个有默认构造函数的class或者struct,一个Dictionary,List等等。
#### void SetMetaTable(LuaTable metaTable)
描述:
设置metaTable为table的metatable
### LuaFunction 类
> 注意:用该类访问Lua函数会有boxing,unboxing的开销,为了性能考虑,需要频繁调用的地方不要用该类。建议通过 `table.Get<ABCDelegate>` 获取一个 delegate 再调用(假设 `ABCDelegate` 是 C# 的一个 delegate)。在使用使用 `table.Get<ABCDelegate>` 之前,请先把ABCDelegate加到代码生成列表。
#### object[] Call(params object[] args)
描述:
以可变参数调用Lua函数,并返回该调用的返回值。
#### object[] Call(object[] args, Type[] returnTypes)
描述:
调用Lua函数,并指明返回参数的类型,系统会自动按指定类型进行转换。
#### void SetEnv(LuaTable env)
描述:
相当于lua的setfenv函数。
## Lua API
### CS对象
#### CS.namespace.class(...)
描述:
调用一个C#类型的构造函数,并返回类型实例
例如:
local v1=CS.UnityEngine.Vector3(1,1,1)
#### CS.namespace.class.field
描述:
访问一个C#静态成员
例如:
Print(CS.UnityEngine.Vector3.one)
#### CS.namespace.enum.field
描述:
访问一个枚举值
#### typeof函数
描述:
类似C#里头的typeof关键字,返回一个Type对象,比如GameObject.AddComponent其中一个重载需要一个Type参数
例如:
newGameObj:AddComponent(typeof(CS.UnityEngine.ParticleSystem))
#### 无符号64位支持
##### uint64.tostring
描述:
无符号数转字符串。
##### uint64.divide
描述:
无符号数除法。
##### uint64.compare
描述:
无符号比较,相对返回0,大于返回正数,小于返回负数。
##### uint64.remainder
描述:
无符号数取模。
##### uint64.parse
描述:
字符串转无符号数。
#### xlua.structclone
描述:
克隆一个c#结构体
#### xlua.private_accessible(class)
描述:
让一个类的私有字段,属性,方法等可用
例子:
xlua.private_accessible(CS.UnityEngine.GameObject)
#### xlua.get_generic_method
描述:
获取一个泛型方法
例子:
```lua
local foo_generic = xlua.get_generic_method(CS.GetGenericMethodTest, 'Foo')
local bar_generic = xlua.get_generic_method(CS.GetGenericMethodTest, 'Bar')
local foo = foo_generic(CS.System.Int32, CS.System.Double)
local bar = bar_generic(CS.System.Double, CS.UnityEngine.GameObject)
-- call instance method
local o = CS.GetGenericMethodTest()
local ret = foo(o, 1, 2)
print(ret)
-- call static method
bar(2, nil)
```
#### cast函数
描述:
指明以特定的接口访问对象,这在实现类无法访问的时候(比如internal修饰)很有用,这时可以这么来(假设下面的calc对象实现了C#的PerformentTest.ICalc接口)
例子:
cast(calc, typeof(CS.PerformentTest.ICalc))
然后就木有其它API了
访问csharp对象和访问一个table一样,调用函数跟调用lua函数一样,也可以通过操作符访问c#的操作符,下面是一个例如:
local v1=CS.UnityEngine.Vector3(1,1,1)
local v2=CS.UnityEngine.Vector3(1,1,1)
v1.x = 100
v2.y = 100
print(v1, v2)
local v3 = v1 + v2
print(v1.x, v2.x)
print(CS.UnityEngine.Vector3.one)
print(CS.UnityEngine.Vector3.Distance(v1, v2))
## 类型映射
### 基本数据类型
|C#类型|Lua类型|
|-|-|
|sbyte,byte,short,ushort,int,uint,double,char,float|number|
|decimal|userdata|
|long,ulong|userdata/lua_Integer(lua53)|
|bytes[]|string|
|bool|boolean|
|string|string|
### 复杂数据类型
|C#类型|Lua类型|
|-|-|
|LuaTable|table|
|LuaFunction|function|
|class或者 struct的实例|userdata,table|
|method,delegate|function|
#### LuaTable
C#侧指明从Lua侧输入(包括C#方法的输入参数或者Lua方法的返回值)LuaTable类型,则要求Lua侧为table。或者Lua侧的table,在C#侧未指明类型的情况下转换成LuaTable。
#### LuaFunction
C#侧指明从Lua侧输入(包括C#方法的输入参数或者Lua方法的返回值)LuaFunction类型,则要求Lua侧为function。或者Lua侧的function,在C#侧未指明类型的情况下转换成LuaFunction。
#### LuaUserData
对应非 C# Managered 对象的lua userdata。
#### class 或者 struct 的实例
从C#传一个class或者struct的实例,将映射到Lua的userdata,并通过__index访问该userdata的成员
C#侧指明从Lua侧输入指定类型对象,Lua侧为该类型实例的userdata可以直接使用;如果该指明类型有默认构造函数,Lua侧是table则会自动转换,转换规则是:调用构造函数构造实例,并用table对应字段转换到c#对应值后赋值各成员。
#### method, delegate
成员方法以及delegate都是对应lua侧的函数。
C#侧的普通参数以及引用参数,对应lua侧函数参数;C#侧的返回值对应于Lua的第一个返回值;引用参数和out参数则按序对应于Lua的第2到第N个参数。
## 宏
#### HOTFIX_ENABLE
打开hotfix功能。
#### NOT_GEN_WARNING
反射时打印warning。
#### GEN_CODE_MINIMIZE
以偏向减少代码段的方式生成代码。
================================================
FILE: Assets/XLua/Doc/XLua_API.md.meta
================================================
fileFormatVersion: 2
guid: d97e183eaa307684b9b99ded9005b181
timeCreated: 1518577405
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/XLua_API_EN.md
================================================
## C# APIs
### LuaEnv type
#### object[] DoString(string chunk, string chunkName = "chuck", LuaTable env = null)
Description:
Executes a code block.
Parameter:
chunk: Lua code string;
chunkName: This is used in the debug message when an error occurs, indicating a certain line in a certain code block has an error.
env: This is the environment variable of this code block.
Returned value:
The returned value of the return statement in the code block.
For example: return 1, "hello". DoString returns an array that will contain two objects. One is 1 of the double type, and the other is the string "hello".
For example:
LuaEnv luaenv = new LuaEnv();
object[] ret = luaenv.DoString("print(‘hello’)\r\nreturn 1")
UnityEngine.Debug.Log("ret="+ret[0]);
luaenv.Dispose()
#### T LoadString<T>(string chunk, string chunkName = "chunk", LuaTable env = null)
Description:
This loads a code block, but does not execute it. It only returns the type can be specified as a delegate or a LuaFunction.
Parameter:
chunk: Lua code string;
chunkName: This is used in the debug message when an error occurs, indicating a certain line in a certain code block has an error.
env: This is the environment variable of this code block.
Returned Value:
This is the delegate or LuaFunction type that represents the code block.
#### LuaTable Global;
Description:
This is the LuaTable representing the Lua global environment.
### void Tick()
Description:
This clears Lua's LuaBase objects that have not been manually released (for example LuaTable, LuaFunction), and other things.
This needs to be called periodically, for example in the Update of MonoBehaviour.
### void AddLoader(CustomLoader loader)
Description:
Adds a custom loader
Parameter:
loader: A delegate that includes the loaded function. The type is delegate byte[] CustomLoader(ref string filepath). When a file is required, the loader will be called back. Its parameters are the parameters used to call require. If the loader finds the file, it reads it into memory and returns a byte array. If debug support is required, the filepath should be set to one the IDE can find (relative or absolute).
#### void Dispose()
Description:
This disposes the LuaEnv.
> LuaEnv usage suggestion: use only one instance globally. Call the GC method in Update, and call Dispose when it is not required.
### LuaTable type
#### T Get<T>(string key)
Description:
Gets the value of type T on key. Null is returned if it does not exist or the type does not match.
#### T GetInPath<T>(string path)
Description:
The difference from Get is that this function will identify the "." in the path. For example, var i = tbl.GetInPath<int>(“a.b.c”) is equivalent to executing i = tbl.abc in Lua. This avoids calling Get multiple times and obtaining intermediate variables. It has higher execution efficiency.
#### void SetInPath<T>(string path, T val)
Description:
Setter corresponding to SetInPath<T>;
#### void Get<TKey, TValue>(TKey key, out TValue value)
Description:
The key of the APIs described above can only be a string, but this API has no such restriction.
#### void Set<TKey, TValue>(TKey key, TValue value)
Description:
This is the setter corresponding to Get<TKey, TValue>.
#### T Cast<T>()
Description:
Converts the table to a type specified by T. It can be an interface with a CSharpCallLua declaration, a type or struct with a default constructor, a Dictionary, a List, and so on.
#### void SetMetaTable(LuaTable metaTable)
Description:
Sets metatable to a table metatable
### LuaFunction type
> Note: Accessing Lua functions with this type will result in overhead from boxing and unboxing. For the sake of performance, do not use this type if frequent calls are required. It is recommended that you use table.Get<ABCDelegate> to get a delegate and then call it (assuming ABCDelegate is a delegate of C#). Before using table.Get<ABCDelegate>, add ABCDelegate to the list of generated code.
#### object[] Call(params object[] args)
Description:
This calls the Lua function with the variable parameters and returns the returned value of the call.
#### object[] Call(object[] args, Type[] returnTypes)
Description:
This calls the Lua function and specifies the type of the returned parameter. The system will automatically convert the specified type.
#### void SetEnv(LuaTable env)
Description:
Equivalent to Lua's setfenv function.
## Lua API
### CS objects
#### CS.namespace.class(...)
Description:
This calls a C# type constructor and returns a type instance.
For Example:
local v1=CS.UnityEngine.Vector3(1,1,1)
#### CS.namespace.class.field
Description:
This accesses a C# static member.
For Example:
Print(CS.UnityEngine.Vector3.one)
#### CS.namespace.enum.field
Description:
This accesses an enumerated value.
#### Typeof Functions
Description:
This is similar to the typeof keyword in C#: a Type object is returned. For example, in GameObject.AddComponent, one overload requires a Type parameter.
For Example:
newGameObj:AddComponent(typeof(CS.UnityEngine.ParticleSystem))
#### Unsigned 64-bit is supported
##### uint64.tostring
Description:
Unsigned number to string.
##### uint64.divide
Description:
Unsigned number division.
##### uint64.compare
Description:
Unsigned comparison: 0 is returned for equal, positive for greater than, and negative for less than.
##### uint64.remainder
Description:
Unsigned modulus.
##### uint64.parse
Description:
String to unsigned number.
#### xlua.structclone
Description:
This clones a c# structure.
#### xlua.private_accessible(class)
Description:
This makes the private fields, properties, methods of a type available.
#### Cast Function
Description:
This indicates that the object is accessed with a specific interface, which is useful when the implementation type is inaccessible (such as internal modification). Use it in the following way (assuming that the following calc object implements C#'s PerformentTest.ICalc interface):
For Example:
cast(calc, typeof(CS.PerformentTest.ICalc))
Then, no other APIs are available.
Accessing a csharp object is like accessing a table. Calling a function is like calling the Lua function. Operators can also be used to access the C# operator. Here is an example:
local v1=CS.UnityEngine.Vector3(1,1,1)
local v2=CS.UnityEngine.Vector3(1,1,1)
v1.x = 100
v2.y = 100
print(v1, v2)
local v3 = v1 + v2
print(v1.x, v2.x)
print(CS.UnityEngine.Vector3.one)
print(CS.UnityEngine.Vector3.Distance(v1, v2))
## Type mapping
### Basic data type
|C# type|Lua type|
|-|-|
|sbyte, byte, short, ushort, int ,uint ,double ,char ,float|number|
|decimal|userdata|
|long ,ulong|userdata/lua_Integer(lua53)|
|bytes[]|string|
|bool|boolean|
|string|string|
### Complex data type
|C# type|Lua type|
|-|-|
|LuaTable|table|
|LuaFunction|function|
|class or struct instance|userdata, table|
|method, delegate|function|
#### LuaTable:
If C# specifies inputting the LuaTable type (including the input parameters of the C# method or the returned value of the Lua method) from Lua, then it must be a table in Lua. Or, if C# does not specify the type, the table in Lua should be converted to LuaTable .
#### LuaFunction:
If C# specifies inputting the LuaFunction type (including the input parameters of the C# method or the returned value of the Lua method) from Lua, then it must be a function in Lua. Or, if C# does not specify the type, the function on Lua should be converted to LuaFunction.
#### LuaUserData:
This is Lua userdata corresponding to the non-C# Managered object.
#### Class or struct instance:
This transfers a class or struct instance from C#, maps it to Lua userdata, and accesses the member of the userdata via __index.
If C# specifies inputting objects of the specified type from Lua, then the userdata of the type instance is used directly in Lua. If the specified type has a default constructor, the table in Lua is automatically converted. The conversion rule is: call the constructor to construct an instance, and convert the field corresponding to table to each setter member in C#.
#### Method and delegate:
Both member methods and delegates correspond to the Lua functions.
The ordinary parameters and reference parameters on C# correspond to the Lua function parameters. The returned value on C# corresponds to the first returned value on Lua. The reference parameters and out parameters correspond to the 2nd to Nth parameters on Lua in sequence.
## Macros
#### HOTFIX_ENABLE
This enables the hotfix function.
#### NOT_GEN_WARNING
This prints warning when there is reflection.
#### GEN_CODE_MINIMIZE
Generates code in a way that minimizes the code segments.
================================================
FILE: Assets/XLua/Doc/XLua_API_EN.md.meta
================================================
fileFormatVersion: 2
guid: 563bce1ceae59334c860773faa7b3a7a
timeCreated: 1529661499
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/XLua_Tutorial_EN.md
================================================
## xLua Tutorial
### Load Lua files
1. Execute strings
The most basic way to execute a string is to use LuaEnv.DoString. The string must be compliant with Lua syntax.
For example:
luaenv.DoString("print('hello world')")
See the full code in the XLua\Tutorial\LoadLuaScript\ByString directory.
> However, this mode is not recommended. We recommend the following mode:
2. Load Lua files.
Use Lua's require function.
DoString("require 'byfile'")
See the full code in the XLua\Tutorial\LoadLuaScript\ByFile directory.
The require actually calls the loaders one by one to load the file. The loading process stops if one loader succeeds. If all loaders fail, no file found will be reported.
In addition to native loaders, xLua also adds loaders loaded from the Resource. Note that because the Resource supports only limited numbers of extensions, the Lua file under Resources must be added the txt extension (see the attached example).
The recommended way to load Lua scripts is as follows: Ensure the entire program is a DoString ("require 'main'"). Then, load other scripts in main.lua (like executing the Lua script's command line: lua main.lua).
Someone may ask: What should I do if my Lua file is downloaded, is extracted from a file in a custom format, or needs to be decrypted? Good question. XLua's custom loader can meet your needs.
3. Customized loaders
It’s simple to customize loaders on xLua. Only one interface is involved:
public delegate byte[] CustomLoader(ref string filepath);
public void LuaEnv.AddLoader(CustomLoader loader)
With the AddLoader, you can register a callback. Its parameter is a string. When calling require in the Lua code, the parameter will be transparently transferred to the callback, which can load the specified files based on this parameter. If debugging support is required, you need to modify the filepath to a real path and transfer it. The returned value of this callback is a byte array. Null means the loader is not found. Otherwise, the content of the Lua file is returned.
Can IIPS IFS be loaded? Yes. Write a loader to call IIPS interface to read the content of the file. Can encrypted files be loaded? Yes, write the loader to read the file and return it after decrypting it.
See the complete example in the XLua\Tutorial\LoadLuaScript\Loader directory.
### C# accesses Lua.
This means that C# initiates access to the Lua data structure.
The examples mentioned in this chapter can be found in the XLua\Tutorial\CSharpCallLua directory.
1. Get a global basic data type
Access LuaEnv.Global, which provides a template Get method. You can specify the type returned.
luaenv.Global.Get<int>("a")
luaenv.Global.Get<string>("b")
luaenv.Global.Get<bool>("c")
2. Access a global table
What class should I specify if the above Get method also been used?
1. Map it to an ordinary class or struct.
Define a class, which has a public property of the field corresponding to table. Doing this either with or without a parameter constructor is OK. For example, for {f1 = 100, f2 = 100}, you can define a class that contains public int f1;public int f2;.
In this way, xLua will help you to create a new instance and set the corresponding fields to it.
Table properties can be more or less than class properties. You can nest other complex classes.
It should be noted that this process is to copy values. Complex classes will have higher overhead. And, modified field values of the class will not be synchronized to table, and vice versa.
This feature can reduce the generation overhead by adding the class to GCOptimize. For details, please see the configuration documentation.
Is mapping in the reference mode available? Yes, this is one method:
2. Map to an interface
This mode relies on the generated code. (If no code is generated, the InvalidCastException error will be reported.) The code generator will generate an instance of this interface. When getting a property, the generated code will get the corresponding table field; when setting a property, the generated code will also set the corresponding table field. You can even access Lua functions via the interface method.
3. Lightweight by value mode: map to Dictionary<>, List<>
If you do not want to define the type or interface, you can using this. The premise is that table key and value are of the same type.
4. Another methods are woking on ref mode: map to LuaTable class.
The advantage of this mode lies in that there is no need to generate code, but there are also some problems with this method. For example, it is an order of magnitude slower than mode 2, and there is no class checking.
3. Access a global function.
This still uses the Get method, but maps to a different class.
1. Map to a delegate
This is the recommended approach, with much better performance and higher class safety. The disadvantage of this method is the generated code. (If no code is generated, the InvalidCastException error will be reported.)
How do I declare a delegate?
For each parameter of the function, declare an input type parameter.
How do I deal with multiple returned values? Map to the C# output parameters from left to right. The output parameters include returned value, out parameter, and ref parameter.
What parameters and returned value types are supported? All are supported. A variety of complex types can be returned, including out, ref modified, and even another delegate.
Using a delegate is even simpler. It can be used just like a function.
2. Map to LuaFunction
The advantages and disadvantages of this approach are exactly the opposite of the first method.
Using this is also simple. LuaFunction has a Call function with variable parameters, and you can transfer any type and any number of parameters. The returned values are an array of objects, corresponding to Lua multiple returned values.
4. Usage suggestions
1. The overhead is high to access Lua global data, especially tables and functions. We recommended doing this as little as possible. For example, during initialization, get the Lua function to be called later (map to the delegate) and save it. Then, you can directly call the delegate. (Tables are similar)
2. If all implementations of Lua are in the delegate and an interface mode, their use can be completely decoupled from xLua. A dedicated module can be responsible for the initialization of xLua and the mapping of delegates and interfaces. Then, you can set these delegates and interfaces to where they will be used.
### Lua calls C#
> The examples covered in this section are all under XLua\Tutorial\LuaCallCSharp
#### Create a new C# object
You can create a new C# object this way:
var newGameObj = new UnityEngine.GameObject();
Make it correspond to Lua this way:
local newGameObj = CS.UnityEngine.GameObject()
These are basically the same, except in the following ways:
1. No new keyword is provided in Lua;
2. All C# related content is placed in the CS, including constructors, static member properties, and methods.
How do I deal with multiple constructors? No problem, xLua supports overloads. For example, if you want to call the constructor for GameObject with a string parameter, you can write it this way:
local newGameObj2 = CS.UnityEngine.GameObject('helloworld')
#### Access C# static properties and methods.
##### Read static properties
CS.UnityEngine.Time.deltaTime
##### Write static properties
CS.UnityEngine.Time.timeScale = 0.5
##### Call static methods
CS.UnityEngine.GameObject.Find('helloworld')
Tip: For the types you need to frequently access, you can reference them with local variables before calling them. This can reduce programing time and improve performance.
local GameObject = CS.UnityEngine.GameObject
GameObject.Find('helloworld')
#### Access C# member properties, methods
##### Read member properties
testobj.DMF
##### Write member properties
testobj.DMF = 1024
##### Call member methods
Note: When calling the member method, the first parameter needs to transfer this object. We recommended using the colon syntactic sugar as shown below:
testobj:DMFunc()
##### Parent properties and methods
XLua supports (via derived types) access to static properties and static methods of a base type, (via derived type instances) access to member properties, and member methods of base type.
##### Parameter input and output properties (out and ref)
Processing rules for parameters called by Lua: The ordinary parameter of C# is an input formal parameter. Ref modified is an input formal parameter, but out is not. The rest correspond from left to right to the actual parameter list called by Lua.
The processing rule for returned values called by Lua: The returned value of a C# function (if any) is a returned value, out is a returned value, and ref is a returned value. The rest correspond to multiple returned values of Lua from left to right.
##### Overload method:
This method allows you to access overloaded functions directly through different parameter types, for example:
testobj:TestFunc(100)
testobj:TestFunc('hello')
The integer parameter TestFunc and the string parameter TestFunc will be accessed separately.
Note: xLua only supports overloaded function calls to a certain extent. Because Lua supports far fewer types than C# does, there will be one-to-many situations. For example, C#'s int, float, and double types all correspond to Lua's number type. In the above example, if TestFunc has these overload parameters, the first line will not be able to distinguish between them and only one of them can be called (the first in the generated code).
##### Operators
These operators are supported: +, -, *, /, ==, unary-, <, <=, %[]
##### Methods whose parameters have default values:
This is the same as when C# calls a function with a default value. If the given actual parameters are less than the formal parameters, the default values will be added.
##### Variable parameter methods
For the following C# parameter:
void VariableParamsFunc(int a, params string[] strs)
You can call it in Lua this way:
testobj:VariableParamsFunc(5, 'hello', 'john')
##### Use extension methods
Lua can use these directly after you define them in C#.
##### Generic (template) methods
These are not directly supported, but you can call them after packaging them through the Extension methods feature.
##### The Enumerated Type
Enumerated values are just like static properties of the enumerated type.
testobj:EnumTestFunc(CS.Tutorial.TestEnum.E1)
The EnumTestFunc function parameter shown above is the Tutorial.TestEnum type.
Enum has a __CastFrom method. This implements conversion from an integer or string to an enumerated value. For example:
CS.Tutorial.TestEnum.__CastFrom(1)
CS.Tutorial.TestEnum.__CastFrom('E1')
##### Delegate use (call, +, -)
Call C# delegate: This is the same as calling the ordinary Lua function.
+ operator: This corresponds to the C# + operator. It combines two calls into a call chain, and the right operand can be of the same type as the C# delegate or Lua function.
- operator: In contrast to +, this removes a delegate from the call chain.
> PS: The delegate property can be set with a Lua function.
##### Events:
For example, testobj has the following event definition: public event Action TestEvent;
Add event callbacks
testobj:TestEvent('+', lua_event_callback)
Remove event callbacks
testobj:TestEvent('-', lua_event_callback)
##### Support for 64-bit integers
In Lua version 5.3, 64-bit integers (long, ulong) are mapped to native 64-bit integers. Since the LuaJIT version (equivalent to the standard Lua 5.1 version ) does not support 64-bit integers, xLua provides a 64-bit support extension library. Both C# long and ulong integers will be mapped to userdata.
64-bit operations, comparisons, print
support, and Lua number operations are supported in Lua. It should be noted for comparison
that in the 64 extension library, only int64 and ulong integers will be strongly converted to long integers first and then transferred to Lua. In some of Ulong's operations, for the sake of comparison, we use the same support mode as Java: providing a set of APIs. For details, see the API documentation.
##### Automatic conversion between C# complex types and tables
For a C# complex type with no parameter constructor, a table can be used directly as a substitute on Lua. The table corresponds to a public field of a complex type. It supports function parameter transfer, property assignment, etc. For example:
The definition of B structure (type also supported) on C# is as follows:
public struct A
{
public int a;
}
public struct B
{
public A b;
public double c;
}
A type has this member function:
void Foo(B b)
Lua can call it in this way:
obj:Foo({b = {a = 100}, c = 200})
##### Get type (equivalent to C#'s typeof)
For example, you can get the type information of the UnityEngine.ParticleSystem type this way:
typeof(CS.UnityEngine.ParticleSystem)
##### "Strong" conversion
Lua is not a typed language, so it has no "strong" conversion with strongly typed languages. However, there's something similar: tell xLua to call an object with the specified generated code. Under what circumstances will it be used? The answer is that, sometimes third-party libraries expose an interface or an abstract type. The implementation type is hidden, so we cannot generate code for the implementation type. This implementation type will be identified by xLua as the ungenerated code and accessed via reflection. Frequently calling it will affect performance significantly. We can add this interface or abstract type to the generated code, and then specify using the generated code to access objects:
cast(calc, typeof(CS.Tutorial.Calc))
The above example specifies using the generated code of CS.Tutorial.Calc to access the calc object.
================================================
FILE: Assets/XLua/Doc/XLua_Tutorial_EN.md.meta
================================================
fileFormatVersion: 2
guid: 76e3df78477813b47bb62712878a2f62
timeCreated: 1529661499
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/XLua增加删除第三方lua库.doc.meta
================================================
fileFormatVersion: 2
guid: 40e0633beaaf4dd49aca86e58539a814
timeCreated: 1469709930
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/XLua增加删除第三方lua库.md
================================================
## What&Why
XLua目前内置的扩展库:
* 针对luajit的64位整数支持;
* 函数调用耗时以及内存泄漏定位工具;
* 用于支持ZeroBraneStudio的luasocket库;
* tdr 4 lua;
随着使用项目的增加以及项目使用的深入程度,仅有这几个扩展已经没法满足项目组了,而由于各个项目对扩展差异化比较大,以及手机平台对安装包大小的敏感,XLua是无法通过预集成去满足这些需求,这也是这篇教程的由来。
这篇教程,将以lua-rapidjson为例,一步步的讲述怎么往xLua添加c/c++扩展,当然,会添加了,自然删除也就会了,项目组可以自行删除不需要用到的预集成扩展。
## How
分三步
1. 修改build文件、工程设置,把要集成的扩展编译到XLua Plugin里头;
2. 调用xLua的C# API,使得扩展可以被按需(在lua代码里头require的时候)加载;
3. 可选,如果你的扩展里头需要用到64位整数,你可以通过XLua的64位扩展库来实现和C#的配合。
### 一、添加扩展&编译
准备工作
1. 把xLua的C源码包解压到你Unity工程的Assets同级目录下。
下载lua-rapidjson代码,按你的习惯放置。本教程是把rapidjson头文件放到$UnityProj\build\lua-rapidjson\include目录下,而扩展的源码rapidjson.cpp放到$UnityProj\build\lua-rapidjson\source目录下(注:$UnityProj指的是你工程的目录)
2. 在CMakeLists.txt加入扩展
xLua的各平台Plugins编译使用cmake编译,好处是所有平台的编译都写在一个makefile,大部分编译处理逻辑是跨平台的。
xLua配套的CMakeLists.txt为第三方扩展提供了扩展点(都是list):
1. THIRDPART_INC:第三方扩展的头文件搜索路径。
2. THIRDPART_SRC:第三方扩展的源代码。
3. THIRDPART_LIB:第三方扩展依赖的库。
如下是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
完整代码请见附件。
3. 各平台编译
所有编译脚本都是按这个方式命名:make_平台_lua版本.后缀。
比如windows 64位lua53版本是make_win64_lua53.bat,android的luajit版本是make_android_luajit.sh,要编译哪个版本就执行相应的脚本即可。
执行完编译脚本会自动拷贝到plugin_lua53或者plugin_luajit目录,前者是lua53版本放置路径,后者是luajit。
配套的android脚本是在linux下使用的,脚本开头的NDK路径要根据实际情况修改。
### 二、C#侧集成
所有lua的C扩展库都会提供个luaopen_xxx的函数,xxx是动态库的名字,比如lua-rapidjson库该函数是luaopen_rapidjson,这类函数由lua虚拟机在加载动态库时自动调用,而在手机平台,由于ios的限制我们加载不了动态库,而是直接编译进进程里头。
为此,XLua提供了一个API来替代这功能(LuaEnv的成员方法):
public void AddBuildin(string name, LuaCSFunction initer)
参数:
name:buildin模块的名字,require时输入的参数;
initer:初始化函数,原型是这样的public delegate int lua_CSFunction(IntPtr L),必须是静态函数,而且带MonoPInvokeCallbackAttribute属性修饰,这个api会检查这两个条件。
我们以luaopen_rapidjson的调用来看看怎么使用。
扩展LuaDLL.Lua类,用pinvoke把luaopen_rapidjson导出到C#,然后写一个符合lua_CSFunction定义的静态函数,你可以在里头做写初始化工作,比如luaopen_rapidjson的调用,以下是完整代码:
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);
}
}
}
然后调用AddBuildin:
luaenv.AddBuildin("rapidjson", LuaDLL.Lua.LoadRapidJson);
然后就ok了,在lua代码中试试该扩展:
local rapidjson = require('rapidjson')
local t = rapidjson.decode('{"a":123}')
print(t.a)
t.a = 456
local s = rapidjson.encode(t)
print('json', s)
### 三、64位改造
把i64lib.h文件include到需要64位改造的文件里头。
该头文件的API就以下几个:
//往栈上放一个int64/uint64
void lua_pushint64(lua_State* L, int64_t n);
void lua_pushuint64(lua_State* L, uint64_t n);
//判断栈上pos位置是否是int64/uint64
int lua_isint64(lua_State* L, int pos);
int lua_isuint64(lua_State* L, int pos);
//从栈上pos位置取一个int64/uint64
int64_t lua_toint64(lua_State* L, int pos);
uint64_t lua_touint64(lua_State* L, int pos);
这些API的使用依情况而定,可以看看本文附带的附件(rapidjson.cpp文件)
编译工程相关修改
================================================
FILE: Assets/XLua/Doc/XLua增加删除第三方lua库.md.meta
================================================
fileFormatVersion: 2
guid: 6a5e50ce3ca4b6140858bd4eb6efc2e9
timeCreated: 1518577405
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/XLua复杂值类型(struct)gc优化指南.doc.meta
================================================
fileFormatVersion: 2
guid: 11d97e567c78f3147b86070c103f3d2d
timeCreated: 1472455442
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/XLua复杂值类型(struct)gc优化指南.md
================================================
## 复杂值类型的gc问题
xLua复杂值类型(struct)的默认传递方式是引用传递,这种方式要求先对值类型boxing,传递给lua,lua使用后释放该引用。由于值类型每次boxing将产生一个新对象,当lua侧使用完毕释放该对象的引用时,则产生一次gc。
为此,xLua实现了一套struct的gc优化方案,您只要通过简单的配置,则可以实现满足条件的struct传递到lua侧无gc。
## struct需要满足什么条件?
1. struct允许嵌套其它struct,但它以及它嵌套的struct只能包含这几种基本类型:byte、sbyte、short、ushort、int、uint、long、ulong、float、double;例如UnityEngine定义的大多数值类型:Vector系列,Quaternion,Color。。。均满足条件,或者用户自定义的一些struct
2. 该struct配置了GCOptimize属性(对于常用的UnityEngine的几个struct,Vector系列,Quaternion,Color。。。均已经配置了该属性),这个属性可以通过配置文件或者C# Attribute实现;
3. 使用到该struct的地方,需要添加到生成代码列表;
## 如何配置?
见`XLua的配置.md`的GCOptimize章节。
================================================
FILE: Assets/XLua/Doc/XLua复杂值类型(struct)gc优化指南.md.meta
================================================
fileFormatVersion: 2
guid: 688574fb2ae996243b1cb02ec3a78bee
timeCreated: 1518577405
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/XLua性能分析工具.doc.meta
================================================
fileFormatVersion: 2
guid: 5e83c211c4c43834b9c8027b7480ab5f
timeCreated: 1462265117
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/XLua性能分析工具.md
================================================
XLua内置两个小工具进行性能方面问题的分析:一个是Lua函数,Lua调用C#函数的时长(不一定等同于CPU耗时,比如协程yield出去那段时间也会被算入调用时间)分析工具;一个是内存泄漏定位工具。
## 函数调用时长分析工具
### 典型使用案例:
说明:
api很简单,就三个,start和stop都是无参数,也很好理解,分别是统计开始以及结束。在start以及stop之间可以多次调用report(也可以考虑不调stop)。每次report会得到从start到调用report为止的函数时长统计报告(以字符串返回)。report函数只有一个可选参数,可以指明按照总时间(参数是字符串的”TOTAL”,这个是默认值),平均每次调用时间(“AVERAGE”),以及调用次数(“CALLED”)来排序。
典型的一个时长统计报告如下:
第一列是函数名
第二列是源代码,如果是lua文件将会统计到文件,行号,如果是C#的导出代码,将会标注[C#],如果是C函数,标准为[C]。
后面几列分别是总时间,平均每次调用时间,占总统计时间的百分比,以及调用次数。
## 内存泄漏定位工具
### 典型使用案例:
说明:
api就两个,total获取lua虚拟机的内存占用,单位是Kbytes,以lua number返回。而snapshot返回当前内存快照信息,一个典型的快照报告如下:
第一列是table变量名;
第二列是table的大小,如果该table下有子table也会被统计到;
第三列是变量的类型,UPVALUE代表是闭包里头的变量(内层函数对外层local变量的引用),GLOBAL是全局变量,REGISTRY是C侧(包含虚拟机内部的)的一些私有数据。一般主要关注前面两种;
第四列是变量的ID,其实就是内存指针,如果两次报告间没被重新分配,该ID是不变的,便于识别是否同一table;
最后一列是一些附加信息,比如闭包变量可能存在很多同名的,这里会通过有那些函数引用了该变量来协助定位。
如何定位内存泄漏:通过memory.total检测出内存的持续增长,然后通过memory.snapshot定位出哪里泄漏(lua测的内存泄漏都是表现为往某table添加了数据忘了删除)。
================================================
FILE: Assets/XLua/Doc/XLua性能分析工具.md.meta
================================================
fileFormatVersion: 2
guid: f8b5c3f531c153c409bb336ba21682ab
timeCreated: 1518577405
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/XLua教程.doc.meta
================================================
fileFormatVersion: 2
guid: 9678cc58c9b40e147b514f7f5122ee20
timeCreated: 1456291064
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/XLua教程.md
================================================
## xLua教程
### Lua文件加载
1. 执行字符串
最基本是直接用LuaEnv.DoString执行一个字符串,当然,字符串得符合Lua语法
比如:
luaenv.DoString("print('hello world')")
完整代码见XLua\Tutorial\LoadLuaScript\ByString目录
> 但这种方式并不建议,更建议下面介绍这种方法。
2. 加载Lua文件
用lua的require函数即可
比如:
DoString("require 'byfile'")
完整代码见XLua\Tutorial\LoadLuaScript\ByFile目录
require实际上是调一个个的loader去加载,有一个成功就不再往下尝试,全失败则报文件找不到。
目前xLua除了原生的loader外,还添加了从Resource加载的loader,需要注意的是因为Resource只支持有限的后缀,放Resources下的lua文件得加上txt后缀(见附带的例子)。
建议的加载Lua脚本方式是:整个程序就一个DoString("require 'main'"),然后在main.lua加载其它脚本(类似lua脚本的命令行执行:lua main.lua)。
有童鞋会问:要是我的Lua文件是下载回来的,或者某个自定义的文件格式里头解压出来,或者需要解密等等,怎么办?问得好,xLua的自定义Loader可以满足这些需求。
3. 自定义Loader
在xLua加自定义loader是很简单的,只涉及到一个接口:
public delegate byte[] CustomLoader(ref string filepath);
public void LuaEnv.AddLoader(CustomLoader loader)
通过AddLoader可以注册个回调,该回调参数是字符串,lua代码里头调用require时,参数将会透传给回调,回调中就可以根据这个参数去加载指定文件,如果需要支持调试,需要把filepath修改为真实路径传出。该回调返回值是一个byte数组,如果为空表示该loader找不到,否则则为lua文件的内容。
有了这个就简单了,用IIPS的IFS?没问题。写个loader调用IIPS的接口读文件内容即可。文件已经加密?没问题,自己写loader读取文件解密后返回即可。。。
完整示例见XLua\Tutorial\LoadLuaScript\Loader
### C#访问Lua
这里指的是C#主动发起对Lua数据结构的访问。
本章涉及到的例子都可以在XLua\Tutorial\CSharpCallLua下找到。
1. 获取一个全局基本数据类型
访问LuaEnv.Global就可以了,上面有个模版Get方法,可指定返回的类型。
luaenv.Global.Get<int>("a")
luaenv.Global.Get<string>("b")
luaenv.Global.Get<bool>("c")
2. 访问一个全局的table
也是用上面的Get方法,那类型要指定成啥呢?
1. 映射到普通class或struct
定义一个class,有对应于table的字段的public属性,而且有无参数构造函数即可,比如对于{f1 = 100, f2 = 100}可以定义一个包含public int f1;public int f2;的class。
这种方式下xLua会帮你new一个实例,并把对应的字段赋值过去。
table的属性可以多于或者少于class的属性。可以嵌套其它复杂类型。
要注意的是,这个过程是值拷贝,如果class比较复杂代价会比较大。而且修改class的字段值不会同步到table,反过来也不会。
这个功能可以通过把类型加到GCOptimize生成降低开销,详细可参见配置介绍文档。
那有没有引用方式的映射呢?有,下面这个就是:
2. 映射到一个interface
这种方式依赖于生成代码(如果没生成代码会抛InvalidCastException异常),代码生成器会生成这个interface的实例,如果get一个属性,生成代码会get对应的table字段,如果set属性也会设置对应的字段。甚至可以通过interface的方法访问lua的函数。
3. 更轻量级的by value方式:映射到Dictionary<>,List<>
不想定义class或者interface的话,可以考虑用这个,前提table下key和value的类型都是一致的。
4. 另外一种by ref方式:映射到LuaTable类
这种方式好处是不需要生成代码,但也有一些问题,比如慢,比方式2要慢一个数量级,比如没有类型检查。
3. 访问一个全局的function
仍然是用Get方法,不同的是类型映射。
1. 映射到delegate
这种是建议的方式,性能好很多,而且类型安全。缺点是要生成代码(如果没生成代码会抛InvalidCastException异常)。
delegate要怎样声明呢?
对于function的每个参数就声明一个输入类型的参数。
多返回值要怎么处理?从左往右映射到c#的输出参数,输出参数包括返回值,out参数,ref参数。
参数、返回值类型支持哪些呢?都支持,各种复杂类型,out,ref修饰的,甚至可以返回另外一个delegate。
delegate的使用就更简单了,直接像个函数那样用就可以了。
2. 映射到LuaFunction
这种方式的优缺点刚好和第一种相反。
使用也简单,LuaFunction上有个变参的Call函数,可以传任意类型,任意个数的参数,返回值是object的数组,对应于lua的多返回值。
4. 使用建议
1. 访问lua全局数据,特别是table以及function,代价比较大,建议尽量少做,比如在初始化时把要调用的lua function获取一次(映射到delegate)后,保存下来,后续直接调用该delegate即可。table也类似。
2. 如果lua侧的实现的部分都以delegate和interface的方式提供,使用方可以完全和xLua解耦:由一个专门的模块负责xlua的初始化以及delegate、interface的映射,然后把这些delegate和interface设置到要用到它们的地方。
### Lua 调用 C#
> 本章节涉及到的实例均在XLua\Tutorial\LuaCallCSharp下
#### new C#对象
你在C#这样new一个对象:
var newGameObj = new UnityEngine.GameObject();
对应到Lua是这样:
local newGameObj = CS.UnityEngine.GameObject()
基本类似,除了:
1. lua里头没有new关键字;
2. 所有C#相关的都放到CS下,包括构造函数,静态成员属性、方法;
如果有多个构造函数呢?放心,xlua支持重载,比如你要调用GameObject的带一个string参数的构造函数,这么写:
local newGameObj2 = CS.UnityEngine.GameObject('helloworld')
#### 访问C#静态属性,方法
##### 读静态属性
CS.UnityEngine.Time.deltaTime
##### 写静态属性
CS.UnityEngine.Time.timeScale = 0.5
##### 调用静态方法
CS.UnityEngine.GameObject.Find('helloworld')
小技巧:如果需要经常访问的类,可以先用局部变量引用后访问,除了减少敲代码的时间,还能提高性能:
local GameObject = CS.UnityEngine.GameObject
GameObject.Find('helloworld')
#### 访问C#成员属性,方法
##### 读成员属性
testobj.DMF
##### 写成员属性
testobj.DMF = 1024
##### 调用成员方法
注意:调用成员方法,第一个参数需要传该对象,建议用冒号语法糖,如下
testobj:DMFunc()
##### 父类属性,方法
xlua支持(通过派生类)访问基类的静态属性,静态方法,(通过派生类实例)访问基类的成员属性,成员方法
##### 参数的输入输出属性(out,ref)
Lua调用侧的参数处理规则:C#的普通参数算一个输入形参,ref修饰的算一个输入形参,out不算,然后从左往右对应lua 调用侧的实参列表;
Lua调用侧的返回值处理规则:C#函数的返回值(如果有的话)算一个返回值,out算一个返回值,ref算一个返回值,然后从左往右对应lua的多返回值。
##### 重载方法
直接通过不同的参数类型进行重载函数的访问,例如:
testobj:TestFunc(100)
testobj:TestFunc('hello')
将分别访问整数参数的TestFunc和字符串参数的TestFunc。
注意:xlua只一定程度上支持重载函数的调用,因为lua的类型远远不如C#丰富,存在一对多的情况,比如C#的int,float,double都对应于lua的number,上面的例子中TestFunc如果有这些重载参数,第一行将无法区分开来,只能调用到其中一个(生成代码中排前面的那个)
##### 操作符
支持的操作符有:+,-,*,/,==,一元-,<,<=, %,[]
##### 参数带默认值的方法
和C#调用有默认值参数的函数一样,如果所给的实参少于形参,则会用默认值补上。
##### 可变参数方法
对于C#的如下方法:
void VariableParamsFunc(int a, params string[] strs)
可以在lua里头这样调用:
testobj:VariableParamsFunc(5, 'hello', 'john')
##### 使用Extension methods
在C#里定义了,lua里就能直接使用。
##### 泛化(模版)方法
不直接支持,可以通过Extension methods功能进行封装后调用。
##### 枚举类型
枚举值就像枚举类型下的静态属性一样。
testobj:EnumTestFunc(CS.Tutorial.TestEnum.E1)
上面的EnumTestFunc函数参数是Tutorial.TestEnum类型的。
枚举类支持__CastFrom方法,可以实现从一个整数或者字符串到枚举值的转换,例如:
CS.Tutorial.TestEnum.__CastFrom(1)
CS.Tutorial.TestEnum.__CastFrom('E1')
##### delegate使用(调用,+,-)
C#的delegate调用:和调用普通lua函数一样
+操作符:对应C#的+操作符,把两个调用串成一个调用链,右操作数可以是同类型的C# delegate或者是lua函数。
-操作符:和+相反,把一个delegate从调用链中移除。
> Ps:delegate属性可以用一个luafunction来赋值。
##### event
比如testobj里头有个事件定义是这样:public event Action TestEvent;
增加事件回调
testobj:TestEvent('+', lua_event_callback)
移除事件回调
testobj:TestEvent('-', lua_event_callback)
##### 64位整数支持
Lua53版本64位整数(long,ulong)映射到原生的64位整数,而luajit版本,相当于lua5.1的标准,本身不支持64位,xlua做了个64位支持的扩展库,C#的long和ulong都将映射到userdata:
支持在lua里头进行64位的运算,比较,打印
支持和lua number的运算,比较
要注意的是,在64扩展库中,实际上只有int64,ulong也会先强转成long再传递到lua,而对ulong的一些运算,比较,我们采取和java一样的支持方式,提供一组API,详情请看API文档。
##### C#复杂类型和table的自动转换
对于一个有无参构造函数的C#复杂类型,在lua侧可以直接用一个table来代替,该table对应复杂类型的public字段有相应字段即可,支持函数参数传递,属性赋值等,例如:
C#下B结构体(class也支持)定义如下:
public struct A
{
public int a;
}
public struct B
{
public A b;
public double c;
}
某个类有成员函数如下:
void Foo(B b)
在lua可以这么调用
obj:Foo({b = {a = 100}, c = 200})
##### 获取类型(相当于C#的typeof)
比如要获取UnityEngine.ParticleSystem类的Type信息,可以这样
typeof(CS.UnityEngine.ParticleSystem)
##### “强”转
lua没类型,所以不会有强类型语言的“强转”,但有个有点像的东西:告诉xlua要用指定的生成代码去调用一个对象,这在什么情况下能用到呢?有的时候第三方库对外暴露的是一个interface或者抽象类,实现类是隐藏的,这样我们无法对实现类进行代码生成。该实现类将会被xlua识别为未生成代码而用反射来访问,如果这个调用是很频繁的话还是很影响性能的,这时我们就可以把这个interface或者抽象类加到生成代码,然后指定用该生成代码来访问:
cast(calc, typeof(CS.Tutorial.Calc))
上面就是指定用CS.Tutorial.Calc的生成代码来访问calc对象。
================================================
FILE: Assets/XLua/Doc/XLua教程.md.meta
================================================
fileFormatVersion: 2
guid: 9d871df7bbc973d468622dd10b6f7ea9
timeCreated: 1518577405
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/XLua的配置.doc.meta
================================================
fileFormatVersion: 2
guid: 57c6cf634c35eb146b95206d498cbf99
timeCreated: 1480488641
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/compatible_bytecode.md
================================================
# 通用字节码
不少项目希望把项目的 lua 源码通过 luac 编译后加载,但官方 lua 有个缺陷:字节码是分 32 位和 64 位版本的,换句话你 32 位 lua 环境只能跑 32 位 luac 编译出来的东西。
为此,xLua 尝试对 lua 源码做了少许改造,可以编译一份字节码,跨平台使用。
## 注意事项
* 1、如果你做了本文所描述的改动,你的 xLua 将加载不了官方 luac 所编译的字节码;
* 2、截至 2018/9/14,已知此改法在一个上线一个多月的项目正常运行,但不代表此改法在任何情况都没问题。
## 操作指南
### 1、编译 xlua 的 Plugins
修改各平台编译脚本,在 cmake 命令加上 `-DLUAC_COMPATIBLE_FORMAT=ON` 参数,以 make_win64_lua53.bat 为例,修改后是这样的:
```bash
mkdir build64 & pushd build64
cmake -DLUAC_COMPATIBLE_FORMAT=ON -G "Visual Studio 14 2015 Win64" ..
popd
cmake --build build64 --config Release
md plugin_lua53\Plugins\x86_64
copy /Y build64\Release\xlua.dll plugin_lua53\Plugins\x86_64\xlua.dll
pause
```
用修改后的编译脚本重新编译各平台的 xlua 库,并覆盖原 Plugins 目录下对应文件。
## 2、编译能生成兼容格式的luac(后续只能用这特定的luac和步骤1的Plugins配套使用)
到[这里](../../../build/luac/),如果你想编译 Windows 版本的,执行 make_win64.bat,如果你要编译 Mac 或者 Linux 的,用make_unix.sh
## 3、加载字节码
通过 CustomLoader 加载即可,CustomLoader 的详细情况请看教程。这个步骤常犯的错误是用某种Encoding去加载二进制文件,这会破坏lua字节码文件格式。谨记得以二进制方式加载。
## PS: OpCode修改
有项目想修改为专用格式的字节码,直接在 lua 源码(目前是lua-5.3.5)上修改后,重新执行上述1、2操作步骤即可。
================================================
FILE: Assets/XLua/Doc/compatible_bytecode.md.meta
================================================
fileFormatVersion: 2
guid: 9ace0cd26c96dc6468f5e054d8168b43
timeCreated: 1536904183
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/configure.md
================================================
# xLua的配置
xLua所有的配置都支持三种方式:打标签;静态列表;动态列表。
配置有两必须两建议:
* 列表方式均必须是static的字段/属性
* 列表方式均必须放到一个static类
* 建议不用标签方式
* 建议列表方式配置放Editor目录(如果是Hotfix配置,而且类位于Assembly-CSharp.dll之外的其它dll,必须放Editor目录)
**打标签**
xLua用白名单来指明生成哪些代码,而白名单通过attribute来配置,比如你想从lua调用c#的某个类,希望生成适配代码,你可以为这个类型打一个LuaCallCSharp标签:
```csharp
[LuaCallCSharp]
publicclassA
{
}
```
该方式方便,但在il2cpp下会增加不少的代码量,不建议使用。
**静态列表**
有时我们无法直接给一个类型打标签,比如系统api,没源码的库,或者实例化的泛化类型,这时你可以在一个静态类里声明一个静态字段,该字段的类型除BlackList和AdditionalProperties之外只要实现了IEnumerable<Type>就可以了(这两个例外后面具体会说),然后为这字段加上标签:
```csharp
[LuaCallCSharp]
public static List<Type> mymodule_lua_call_cs_list = new List<Type>()
{
typeof(GameObject),
typeof(Dictionary<string, int>),
};
```
这个字段需要放到一个 **静态类** 里头,建议放到 **Editor目录** 。
**动态列表**
声明一个静态属性,打上相应的标签即可。
```csharp
[Hotfix]
public static List<Type> by_property
{
get
{
return (from type in Assembly.Load("Assembly-CSharp").GetTypes()
where type.Namespace == "XXXX"
select type).ToList();
}
}
```
Getter是代码,你可以实现很多效果,比如按名字空间配置,按程序集配置等等。
这个属性需要放到一个 **静态类** 里头,建议放到 **Editor目录** 。
### XLua.LuaCallCSharp
一个C#类型加了这个配置,xLua会生成这个类型的适配代码(包括构造该类型实例,访问其成员属性、方法,静态属性、方法),否则将会尝试用性能较低的反射方式来访问。
一个类型的扩展方法(Extension Methods)加了这配置,也会生成适配代码并追加到被扩展类型的成员方法上。
xLua只会生成加了该配置的类型,不会自动生成其父类的适配代码,当访问子类对象的父类方法,如果该父类加了LuaCallCSharp配置,则执行父类的适配代码,否则会尝试用反射来访问。
反射访问除了性能不佳之外,在il2cpp下还有可能因为代码剪裁而导致无法访问,后者可以通过下面介绍的ReflectionUse标签来避免。
### XLua.ReflectionUse
一个C#类型类型加了这个配置,xLua会生成link.xml阻止il2cpp的代码剪裁。
对于扩展方法,必须加上 `LuaCallCSharp` 或者 `ReflectionUse` 才可以被访问到。
建议所有要在Lua访问的类型,要么加LuaCallCSharp,要么加上ReflectionUse,这才能够保证在各平台都能正常运行。
### XLua.DoNotGen
指明一个类里头的部分函数、字段、属性不生成代码,通过反射访问。
只能标准 `Dictionary<Type, List<string>>` 的field或者property。key指明的是生效的类,value是一个列表,配置的是不生成代码的函数、字段、属性的名字。
和ReflectionUse的区别是:1、ReflectionUse指明的是整个类;2、当第一次访问一个函数(字段、属性)时,ReflectionUse会把整个类都wrap,而DoNotGen只wrap该函数(字段、属性),换句话DoNotGen更lazy一些;
和BlackList的区别是:1、BlackList配了就不能用;2、BlackList能指明某重载函数,DoNotGen不能;
### XLua.CSharpCallLua
如果希望把一个lua函数适配到一个C# delegate(一类是C#侧各种回调:UI事件,delegate参数,比如List<T>:ForEach;另外一类场景是通过LuaTable的Get函数指明一个lua函数绑定到一个delegate)。或者把一个lua table适配到一个C# interface,该delegate或者interface需要加上该配置。
### XLua.GCOptimize
一个C#纯值类型(注:指的是一个只包含值类型的struct,可以嵌套其它只包含值类型的struct)或者C#枚举值加上了这个配置。xLua会为该类型生成gc优化代码,效果是该值类型在lua和c#间传递不产生(C#)gc alloc,该类型的数组访问也不产生gc。各种无GC的场景,可以参考 `05_Gc` 例子。
除枚举之外,包含无参构造函数的复杂类型,都会生成lua table到该类型,以及改类型的一维数组的转换代码,这将会优化这个转换的性能,包括更少的gc alloc。
### XLua.AdditionalProperties
这个是GCOptimize的扩展配置,有的时候,一些struct喜欢把field做成是私有的,通过property来访问field,这时就需要用到该配置(默认情况下GCOptimize只对public的field打解包)。
标签方式比较简单,配置方式复杂一点,要求是 `Dictionary<Type, List<string>>` 类型,Dictionary 的 Key 是要生效的类型,Value 是属性名列表。可以参考XLua对几个UnityEngine下值类型的配置,SysGCOptimize类。
### XLua.BlackList
如果你不要生成一个类型的一些成员的适配代码,你可以通过这个配置来实现。
标签方式比较简单,对应的成员上加就可以了。
由于考虑到有可能需要把重载函数的其中一个重载列入黑名单,配置方式比较复杂,类型是 `List<List<string>>`,对于每个成员,在第一层List有一个条目,第二层List是个string的列表,第一个string是类型的全路径名,第二个string是成员名,如果成员是一个方法,还需要从第三个string开始,把其参数的类型全路径全列出来。
例如下面是对 GameObject 的一个属性以及FileInfo的一个方法列入黑名单:
```csharp
[BlackList]
public static List<List<string>> BlackList = new List<List<string>>() {
new List<string>(){"UnityEngine.GameObject", "networkView"},
//new List<string>(){ typeof(UnityEngine.GameObject).FullName, "networkView"},
new List<string>(){"System.IO.FileInfo", "GetAccessControl", "System.Security.AccessControl.AccessControlSections"},
//new List<string>(){ typeof(System.IO.FileInfo).FullName, "GetAccessControl",typeof(System.Security.AccessControl.AccessControlSections).FullName },
};
```
### 下面是生成期配置,必须放到Editor目录下
### CSObjectWrapEditor.GenPath
配置生成代码的放置路径,类型是string。默认放在"Assets/XLua/Gen/"下。
### CSObjectWrapEditor.GenCodeMenu
该配置用于生成引擎的二次开发,一个无参数函数加了这个标签,在执行"XLua/Generate Code"菜单时会触发这个函数的调用。
================================================
FILE: Assets/XLua/Doc/configure.md.meta
================================================
fileFormatVersion: 2
guid: 8e8a250c7dbdf6b48ae79313470374dc
timeCreated: 1498554474
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/custom_generate.md
================================================
## 生成引擎二次开发
xLua的生成引擎支持二次开发,你可以利用它来生成一些文本类型的文件(比如代码,配置等)。xLua本身的link.xml文件的生成就是一个生成引擎插件做的。其它应用场景,比如生成Lua IDE的自动完成配置文件,都可以用这特性来完成。
## 总体介绍
插件需要提供两个东西:1、生成文件的模版;2、一个回调函数,该回调函数接受用户的配置,返回需要注入到模版的数据以及文件的输出流。
## 模版语法
模版语法很简单,只有三种元素:
* eval:语法是<%=exp%>,exp是任意表达式,将计算并以字符串形式输出exp的值;
* code:语法是<% if true then end%>,蓝色部分是任意lua代码,这些代码会执行;
* literal:除eval和code之外其它部分,literal原样输出。
示例:
```xml
<%
require "TemplateCommon"
%>
<linker>
<%ForEachCsList(assembly_infos, function(assembly_info)%>
<assembly fullname="<%=assembly_info.FullName%>">
<%ForEachCsList(assembly_info.Types, function(type)
%><type fullname="<%=type:ToString()%>" preserve="all"/>
<%end)%>
</assembly>
<%end)%>
</linker>
```
TemplateCommon有一些预定义的函数可以使用,比如ForEachCsList,可以搜索下工程的TemplateCommon.lua.txt看下有那些函数可以用,就普通的lua而已,你自己写一套也可以。
## API
```csharp
public static void CSObjectWrapEditor.Generator.CustomGen(string template_src, GetTasks get_tasks)
```
* template_src : 模版的源码;
* get_tasks : 回调函数,类型是GetTasks,用来接受用户的配置,返回需要注入到模版的数据以及文件的输出流;
```csharp
public delegate IEnumerable<CustomGenTask> GetTasks(LuaEnv lua_env, UserConfig user_cfg);
```
* lua_env : LuaEnv对象,因为返回的模版数据需要放到LuaTable,需要用到LuaEnv.NewTable;
* user_cfg : 用户的配置;
* return : 返回值中,CustomGenTask代表的是一个生成文件,而IEnumerable类型表示同一个模版可以生成多个文件;
```csharp
public struct UserConfig
{
public IEnumerable<Type> LuaCallCSharp;
public IEnumerable<Type> CSharpCallLua;
public IEnumerable<Type> ReflectionUse;
}
```
```csharp
public struct CustomGenTask
{
public LuaTable Data;
public TextWriter Output;
}
```
示例:
```csharp
public static IEnumerable<CustomGenTask> 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)
};
}
```
* 这里只生成一个文件,故只返回一个CustomGenTask;
* data就是模版要使用的数据,这里塞了一个assembly_infos字段,这个字段如何使用可以回头看看模版部分;
## 标签
一般来说你可以通过MenuItem开一个菜单来执行触发自定义生成操作,但有时你希望生成操作直接由xLua的“Generate Code”菜单触发,你就需要用到CSObjectWrapEditor.GenCodeMenu
示例:
```csharp
[GenCodeMenu]//加到Generate Code菜单里头
public static void GenLinkXml()
{
Generator.CustomGen(ScriptableObject.CreateInstance<LinkXmlGen>().Template.text, GetTasks);
}
```
ps:以上所有相关代码都在XLua\Src\Editor\LinkXmlGen目录下,也正是文章开头说的link.xml的生成功能的实现。
================================================
FILE: Assets/XLua/Doc/custom_generate.md.meta
================================================
fileFormatVersion: 2
guid: 6436d38981b6f5a4d8a2255ea3145ed1
timeCreated: 1486519283
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/faq.md
================================================
# FAQ
## xLua发布包怎么用?
xLua目前以zip包形式发布,在工程目录下解压即可。
## xLua可以放别的目录吗?
可以,但生成代码目录需要配置一下(默认放Assets\XLua\Gen目录),具体可以看《XLua的配置.doc》的GenPath配置介绍。
更改目录要注意的是:生成代码和xLua核心代码必须在同一程序集。如果你要用热补丁特性,xLua核心代码必须在Assembly-CSharp程序集。
## xLua的配置
如果你用的是lua编程,你可能需要把一些频繁访问的类配置到LuaCallCSharp,这些类的成员如果有条件编译(大多数情况下是UNITY_EDITOR)的话,你需要通过BlackList配置排除;如果你需要通过delegate回调到lua的地方,得把这些delegate配置到CSharpCallLua。
如果你用的是热补丁,你需要把要注入的代码加到Hotfix列表;如果你需要通过delegate回调到lua的地方,也得把这些delegate配置到CSharpCallLua。
xLua提供了强大的动态配置,让你可以结合反射实现任意的自动化配置,动态配置介绍看[这里](configure.md)。xLua希望你能根据自身项目的需求自行配置,同时为了方便部分对反射api了解不够的童鞋,xLua也针对上面两者方式分别写了参考配置:[ExampleConfig.cs](../Editor/ExampleConfig.cs),直接打开相应部分的注释即可使用。
## lua源码只能以txt后缀?
什么后缀都可以。
如果你想以TextAsset打包到安装包(比如放到Resources目录),Unity不认lua后缀,这是Unity的规则。
如果你不打包到安装包,就没有后缀的限制:比如自行下载到某个目录(这也是热更的正确姿势),然后通过CustomLoader或者设置package.path去读这个目录。
那为啥xLua本身带的lua源码(包括示例)为什么都是txt结尾呢?因为xLua本身就一个库,不含下载功能,也不方便运行时去某个地方下载代码,通过TextAsset是较简单的方式。
## 编辑器(或非il2cpp的android)下运行正常,ios下运行调用某函数报“attempt to call a nil value”
il2cpp默认会对诸如引擎、c#系统api,第三方dll等等进行代码剪裁。简单来说就是这些地方的函数如果你C#代码没访问到的就不编译到你最终发布包。
解决办法:增加引用(比如配置到LuaCallCSharp,或者你自己C#代码增加那函数的访问),或者通过link.xml配置(当配置了ReflectionUse后,xlua会自动帮你配置到link.xml)告诉il2cpp别剪裁某类型。
## Unity 2018及以上版本兼容性问题解决
2.1.14前的版本都建议先升级到2.1.14,升级后,还有如下两个使用注意事项:
1、默认配置不生成代码运行会报错
这是因为Api Compatibility Level设置为.NET Standard 2.0,而.NET Standard 2.0不支持emit导致的。
解决方案:平时开发Api Compatibility Level设置为.NET 4.x,就能支持编辑器不生成代码开发。发布手机版本时,按Unity官方的建议,可配置为.NET Standard 2.0,包会更小些。
2、生成代码后,一些系统类型的生成代码会报一些方法不存在。
据研究表明,Unity 2018设置.NET 4.X Equivalent的话,其运行和编译用的库不一致,前者比后者多一些API。
运行用的是:unity安装目录\Editor\Data\MonoBleedingEdge\lib\mono\unityjit\mscorlib.dll
编译链接的是:unity安装目录\Editor\Data\MonoBleedingEdge\lib\mono\4.7.1-api\mscorlib.dll
解决办法:用黑名单排除报错方法即可。不过2019年8月6号以前的版本的黑名单配置对泛型不友好,要一个个泛型实例的配置(比如,Dictionary<int, int>和Dictionary<float, int>要分别配置),而目前发现该问题主要出在泛型Dictionary上。可以更新到2019年8月6号之后的版本,该版本支持配置一个过滤器对泛型方法过滤。这里有对unity 2018的Dictionary的[针对性配置](https://github.com/Tencent/xLua/blob/master/Assets/XLua/Editor/ExampleConfig.cs#L277),直接拷贝使用,如果碰到其它泛型也有多出来的方法,参考Dictionary进行配置。
## Plugins源码在哪里可以找到,怎么使用?
Plugins源码位于xLua_Project_Root/build下。
源码编译依赖cmake,安装cmake后执行make_xxxx_yyyy.zz即可,xxxx代表平台,比如ios,android等,yyyy是要集成的虚拟机,有lua53和luajit两者,zz是后缀,windows下是bat,其它平台是sh。
windows编译依赖Visual Studio 2015。
android编译在linux下执行,依赖NDK,并且需要把脚本中ANDROID_NDK指向NDK的安装目录。
ios和osx需要在mac下编译。
## 报类似“xlua.access, no field __Hitfix0_Update”的错误怎么解决?
按[Hotfix操作指南](hotfix.md)一步步操作,以及注意事项。确保上述步骤完成后,可尝试使用[解决方案](https://github.com/Tencent/xLua/issues/850)。
出现这报错,肯定是这个导致的:最终包的这个方法(函数)没注入。
但造成“最终包的这个方法(函数)没注入”的原因会有很多:比如没按文档操作,注入失败,比如Hotfix列表漏了这个类,比如你的打包脚本在注入后,又触发了重新编译,覆盖了注入结果。。。
统一的解决方式是找出并解决导致“最终包的这个方法(函数)没注入”的具体原因。
## visual studio 2017下编译UWP原生库
visual studio 2017需要安装:1、“工作负载”下的“通用Window平台开发”;2、“单个组件”下的“用于ARM的Visual C++编译器和库”、“用于ARM64的Visual C++编译器和库”、“是用于ARM64的C++通用Windows平台工具”
## visual studio 2015下编译原生库
把build\vs2015下的bat文件拷贝到build目录,覆盖同名文件
## 报“please install the Tools”
没有把Tools安装到Assets平级目录,安装包,或者master下都能找到这个目录。
## 报“This delegate/interface must add to CSharpCallLua : XXX”异常怎么解决?
在编辑器下xLua不生成代码都可以运行,出现这种提示,要么是该类型没加CSharpCallLua,要么是加之前生成过代码,没重新执行生成。
解决办法,确认XXX(类型名)加上CSharpCallLua后,清除代码后运行。
如果编辑器下没问题,发布到手机报这错,表示你发布前没生成代码(执行“XLua/Generate Code”)。
如果你Unity版本大于或等于2018,看下前面兼容性的章节。
## unity5.5以上执行"XLua/Hotfix Inject In Editor"菜单会提示"WARNING: The runtime version supported by this application is unavailable."
这是因为注入工具是用.net3.5编译,而unity5.5意思MonoBleedingEdge的mono环境并没3.5支持导致的,不过一般而言都向下兼容,目前为止也没发现该warning带来什么问题。
可能有人发现定义INJECT_WITHOUT_TOOL用内嵌模式会没有该warning,但问题是这模式是调试问题用的,不建议使用,因为可能会有一些库冲突问题。
## hotfix下怎么触发一个event
首先通过xlua.private_accessible开启私有成员访问。
跟着通过对象的"&事件名"字段调用delegate,例如self\['&MyEvent'\](),其中MyEvent是事件名。
## 怎么对Unity Coroutine的实现函数打补丁?
见[Hotfix操作指南](hotfix.md)相应章节。
## 支持NGUI(或者UGUI/DOTween等等)么?
支持,xLua最主要的特性是让你原来用C#写的地方可以换成用lua写,你C#能用的插件,基本都能用。
## 如果需要调试,CustomLoader的filepath参数该如何处理?
lua里头调用require 'a.b'时,CustomLoader会被调用,并传入字符串"a.b",你需要理解这字符串,(从文件/内存/网络等)加载好lua文件,返回两个东西,第一个是调试器可以理解的路径,比如:a/b.lua,这个通过设置ref类型的filepath参数返回,第二个是UTF8格式的源码的字节流(byte[]),通过返回值返回。
## 什么是生成代码?
xLua支持的lua和C#间交互技术之一,这种技术通过生成两者间的适配代码来实现交互,性能较好,是推荐的方式。
另一种交互技术是反射,这种方式对安装包的影响更少,可以在性能要求不高或者对安装包大小很敏感的场景下使用。
## 改了接口后,之前生成的代码出现错误怎么办?
清除掉生成代码(执行“Clear Generated Code”菜单,如果你重启过,会找不到这个菜单,这时你可以手动删除整个生成代码目录),等编译完成后重新生成。
## 应该什么时候生成代码?
开发期不建议生成代码,可以避免很多由于不一致导致的编译失败,以及生成代码本身的编译等待。
build手机版本前必须执行生成代码,建议做成自动化的。
做性能调优,性能测试前必须执行生成代码,因为生成和不生成性能的区别还是很大的。
## CS名字空间下有所有C# API是不是很占内存?
由于用了lazyload,这个“有”只是个虚拟的概念,比如UnityEngine.GameObject,是访问第一次CS.UnityEngine.GameObject或者第一个实例往lua传送才加载该类型方法,属性等。
## LuaCallSharp以及CSharpCallLua两种生成各在什么场景下用?
看调用者和被调用者,比如要在lua调用C#的GameObject.Find函数,或者调用gameobject的实例方法,属性等,GameObject类要加LuaCallSharp,而想把一个lua函数挂到UI回调,这是调用者是C#,被调用的是一个lua函数,所以回调声明的delegate要加CSharpCallLua。
有时会比较迷惑人,比如List<int>.Find(Predicate<int> match)的调用,List<int>当然是加LuaCallSharp,而Predicate<int>却要加CSharpCallLua,因为match的调用者在C#,被调用的是一个lua函数。
更无脑一点的方式是看到“This delegate/interface must add to CSharpCallLua : XXX”,就把XXX加到CSharpCallLua即可。
## 值类型传递会有gc alloc么?
如果你使用的是delegate调用lua函数,或者用LuaTable、LuaFunction的无gc接口,或者数组的话,以下值类型都是没gc的:
1、所有的基本值类型(所有整数,所有浮点数,decimal);
2、所有的枚举类型;
3、字段只包含值类型的struct,可嵌套其它只包含值类型struct;
其中2、3需要把该类型加到GCOptimize。
## 反射在ios下可用吗?
ios下的限制有两个:1、没有jit;2、代码剪裁(stripping);
对于C#通过delegate或者interface调用lua,如果不生成代码是用反射的emit,这依赖jit,所以这目前只在编辑器可用。
对于lua调用C#,主要会被代码剪裁影响,这时你可以配置ReflectionUse(不要配LuaCallSharp),执行“Generate Code”,这时不会对该类生成封装代码,而是生成link.xml把该类配置为不剪裁。
简而言之,除了CSharpCallLua是必须的(这类生成代码往往不多),LuaCallSharp生成都可以改为用反射。
## 支持泛型方法的调用么?
1、泛型约束到某个基类的支持,看例子:(../Examples/09_GenericMethod/)
2、没有泛型约束的建议封装为非泛型使用
如果是静态方法,可以自己写个封装来实例化泛型方法。
如果是成员方法,xLua支持扩展方法,你可以添加一个扩展方法来实例化泛型方法。该扩展方法使用起来就和普通成员方法一样。
```csharp
// C#
public static Button GetButton(this GameObject go)
{
return go.GetComponent<Button>();
}
```
```lua
-- lua
local go = CS.UnityEngine.GameObject.Find("button")
go:GetButton().onClick:AddListener(function()
print('onClick')
end)
```
3、如果xlua版本大于2.1.12的话,新增反射调用泛型方法的支持(有一定的限制,看后面的说明),比如对于这么个C#类型:
```csharp
public class GetGenericMethodTest
{
int a = 100;
public int Foo<T1, T2>(T1 p1, T2 p2)
{
Debug.Log(typeof(T1));
Debug.Log(typeof(T2));
Debug.Log(p1);
Debug.Log(p2);
return a;
}
public static void Bar<T1, T2>(T1 p1, T2 p2)
{
Debug.Log(typeof(T1));
Debug.Log(typeof(T2));
Debug.Log(p1);
Debug.Log(p2);
}
}
```
在lua那这么调用:
```lua
local foo_generic = xlua.get_generic_method(CS.GetGenericMethodTest, 'Foo')
local bar_generic = xlua.get_generic_method(CS.GetGenericMethodTest, 'Bar')
local foo = foo_generic(CS.System.Int32, CS.System.Double)
local bar = bar_generic(CS.System.Double, CS.UnityEngine.GameObject)
-- call instance method
local o = CS.GetGenericMethodTest()
local ret = foo(o, 1, 2)
print(ret)
-- call static method
bar(2, nil)
```
使用限制,只有下面几种情况可以:
* mono下可以
* il2cpp下,如果泛型参数是引用类型可以
* il2cpp下,如果泛型参数是值类型,C#那有用同样的泛型参数调用过(如果是hotfix场景下,一般在C#那会用同样的泛型参数调用过,所以在hotfix功能下一般都可用)
## 支持lua调用C#重载函数吗?
支持,但没有C#端支持的那么完善,比如重载方法void Foo(int a)和void Foo(short a),由于int和short都对应lua的number,是没法根据参数判断调用的是哪个重载。这时你可以借助扩展方法来为其中一个起一个别名。
## 编辑器下运行正常,打包的时候生成代码报“没有某方法/属性/字段定义”怎么办?
往往是由于该方法/属性/字段是扩在条件编译里头,只在UNITY_EDITOR下有效,这是可以通过把这方法/属性/字段加到黑名单来解决,加了之后要等编译完成后重新执行代码生成。
## this[string field]或者this[object field]操作符重载为什么在lua无法访问?(比如Dictionary\<string, xxx\>, Dictionary\<object, xxx\>在lua中无法通过dic['abc']或者dic.abc检索值)
因为:1、这个特性会导致基类定义的方法、属性、字段等无法访问(比如Animation无法访问到GetComponent方法);2、key为当前类某方法、属性、字段的名字的数据无法检索,比如Dictionary类型,dic['TryGetValue']返回的是一个函数,指向Dictionary的TryGetValue方法。
如果你的版本大于2.1.11,可以用get_Item来获取值,用set_Item来设置值。要注意只有this[string field]或者this[object field]才有这两个替代api,其它类型的key是没有的。
```lua
dic:set_Item('a', 1)
dic:set_Item('b', 2)
print(dic:get_Item('a'))
print(dic:get_Item('b'))
```
如果你的版本小于或等于2.1.11,建议直接方法该操作符的等效方法,比如Dictionary的TryGetValue,如果该方法没有提供,可以在C#那通过Extension method封装一个使用。
## 有的Unity对象,在C#为null,在lua为啥不为nil呢?比如一个已经Destroy的GameObject
其实那C#对象并不为null,是UnityEngine.Object重载的==操作符,当一个对象被Destroy,未初始化等情况,obj == null返回true,但这C#对象并不为null,可以通过System.Object.ReferenceEquals(null, obj)来验证下。
对应这种情况,可以为UnityEngine.Object写一个扩展方法:
```csharp
[LuaCallCSharp]
[ReflectionUse]
public static class UnityEngineObjectExtention
{
public static bool IsNull(this UnityEngine.Object o) // 或者名字叫IsDestroyed等等
{
return o == null;
}
}
```
然后在lua那你对所有UnityEngine.Object实例都使用IsNull判断
```lua
print(go:GetComponent('Animator'):IsNull())
```
## 泛型实例怎么构造
涉及的类型都在mscorlib,Assembly-CSharp程序集的话,泛型实例的构造和普通类型是一样的,都是CS.namespace.typename(),可能比较特殊的是typename的表达,泛型实例的typename的表达包含了标识符非法符号,最后一部分要换成["typename"],以List<string>为例
```lua
local lst = CS.System.Collections.Generic["List`1[System.String]"]()
```
如果某个泛型实例的typename不确定,可以在C#测打印下typeof(不确定的类型).ToString()
如果涉及mscorlib,Assembly-CSharp程序集之外的类型的话,可以用C#的反射来做:
```lua
local dic = CS.System.Activator.CreateInstance(CS.System.Type.GetType('System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UnityEngine.Vector3, UnityEngine]],mscorlib'))
dic:Add('a', CS.UnityEngine.Vector3(1, 2, 3))
print(dic:TryGetValue('a'))
```
如果你的xLua版本大于v2.1.12,将会有更漂亮的表达方式
```lua
-- local List_String = CS.System.Collections.Generic['List<>'](CS.System.String) -- another way
local List_String = CS.System.Collections.Generic.List(CS.System.String)
local lst = List_String()
local Dictionary_String_Vector3 = CS.System.Collections.Generic.Dictionary(CS.System.String, CS.UnityEngine.Vector3)
local dic = Dictionary_String_Vector3()
dic:Add('a', CS.UnityEngine.Vector3(1, 2, 3))
print(dic:TryGetValue('a'))
```
## 调用LuaEnv.Dispose时,报“try to dispose a LuaEnv with C# callback!”错是什么原因?
这是由于C#还存在指向lua虚拟机里头某个函数的delegate,为了防止业务在虚拟机释放后调用这些无效(因为其引用的lua函数所在虚拟机都释放了)delegate导致的异常甚至崩溃,做了这个检查。
怎么解决?释放这些delegate即可,所谓释放,在C#中,就是没有引用:
你是在C#通过LuaTable.Get获取并保存到对象成员,赋值该成员为null;
你是在lua那把lua函数注册到一些事件事件回调,反注册这些回调;
如果你是通过xlua.hotfix(class, method, func)注入到C#,则通过xlua.hotfix(class, method, nil)删除;
要注意以上操作在Dispose之前完成。
xlua提供了一个工具函数来帮助你找到被C#引用着的lua函数,util.print_func_ref_by_csharp,使用很简单,执行如下lua代码:
```lua
local util = require 'xlua.util'
util.print_func_ref_by_csharp()
```
可以看到控制台有类似这样的输出,下面第一行表示有一个在main.lua的第2行定义的函数被C#引用着
```bash
LUA: main.lua:2
LUA: main.lua:13
```
## 调用LuaEnv.Dispose崩溃
很可能是这个Dispose操作是由lua那驱动执行,相当于在lua执行的过程中把lua虚拟机给释放了,改为只由C#执行即可。
## C#参数(或字段)类型是object时,传递整数默认是以long类型传递,如何指明其它类型?比如int
看[例子11](../Examples/11_RawObject/RawObjectTest.cs)
## 如何做到先执行原来的C#逻辑,然后再执行补丁
用util.hotfix_ex,可以调用原先的C#逻辑
```lua
local util = require 'xlua.util'
util.hotfix_ex(CS.HotfixTest, 'Add', function(self, a, b)
local org_sum = self:Add(a, b)
print('org_sum', org_sum)
return a + b
end)
```
## 怎么把C#的函数赋值给一个委托字段
2.1.8及之前版本,你把C#函数当成一个lua函数即可,性能会略低,因为委托调用时先通过Birdage适配代码调用lua,然后lua再调用回C#。
2.1.9 xlua.util新增createdelegate函数
比如如下C#代码
```csharp
public class TestClass
{
public void Foo(int a)
{
}
public static void SFoo(int a)
{
}
}
public delegate void TestDelegate(int a);
```
你可以指明用Foo函数创建一个TestDelegate实例
```lua
local util = require 'xlua.util'
local d1 = util.createdelegate(CS.TestDelegate, obj, CS.TestClass, 'Foo', {typeof(CS.System.Int32)}) --由于Foo是实例方法,所以参数2需要传TestClass实例
local d2 = util.createdelegate(CS.TestDelegate, nil, CS.TestClass, 'SFoo', {typeof(CS.System.Int32)})
obj_has_TestDelegate.field = d1 + d2 --到时调用field的时候将会触发Foo和SFoo,这不会经过Lua适配
```
## 为什么有时Lua错误直接中断了而没错误信息?
一般两种情况:
1、你的错误代码用协程跑,而标准的lua,协程出错是通过resume返回值来表示,可以查阅相关的lua官方文档。如果你希望协程出错直接抛异常,可以在你的resume调用那加个assert。
把类似下面的代码:
```lua
coroutine.resume(co, ...)
```
改为:
```lua
assert(coroutine.resume(co, ...))
```
2、上层catch后,不打印
比如某些sdk,在回调业务时,try-catch后把异常吃了。
## 重载含糊如何处理
比如由于忽略out参数导致的Physics.Raycast其中一个重载调用不了,比如short,int无法区分的问题。
首先out参数导致重载含糊比较少见,目前只反馈(截至2017-9-22)过Physics.Raycast一个,建议通过自行封装来解决(short,int这种情况也适用):静态函数的直接封装个另外名字的,如果是成员方法则通过Extension method来封装。
如果是hotfix场景,我们之前并没有提前封装,又希望调用指定重载怎么办?
可以通过xlua.tofunction结合反射来处理,xlua.tofunction输入一个MethodBase对象,返回一个lua函数。比如下面的C#代码:
```csharp
class TestOverload
{
public int Add(int a, int b)
{
Debug.Log("int version");
return a + b;
}
public short Add(short a, short b)
{
Debug.Log("short version");
return (short)(a + b);
}
}
```
我们可以这么调用指定重载:
```lua
local m1 = typeof(CS.TestOverload):GetMethod('Add', {typeof(CS.System.Int16), typeof(CS.System.Int16)})
local m2 = typeof(CS.TestOverload):GetMethod('Add', {typeof(CS.System.Int32), typeof(CS.System.Int32)})
local f1 = xlua.tofunction(m1) --切记对于同一个MethodBase,只tofunction一次,然后重复使用
local f2 = xlua.tofunction(m2)
local obj = CS.TestOverload()
f1(obj, 1, 2) --调用short版本,成员方法,所以要传对象,静态方法则不需要
f2(obj, 1, 2) --调用int版本
```
注意:xlua.tofunction由于使用不太方便,以及使用了反射,所以建议做作为临时方案,尽量用封装的方法来解决。
## 支持interface扩展方法么?
考虑到生成代码量,不支持通过obj:ExtentionMethod()的方式去调用,支持通过静态方法的方式去调用CS.ExtentionClass.ExtentionMethod(obj)
## 如何把xLua的Wrap生成操作集成到我项目的自动打包流程中?
可以参考[例子13](../Examples/13_BuildFromCLI/),通过命令行调用Unity自定义类方法出包。
## 使用热补丁特性,打手机版本时报DelegatesGensBridge.cs引用了不存在的类(比如仅编辑器使用的类型),应该如何处理?
这是因为Hotfix列表里头配置的类型(假设是类型A),对这些不存在的类型(假设是类型B)引用。找到这种类型,从Hotfix配置列表中排除(注意,排除的类型A,而不是类型B)。
如何找?VS中选中报不存在的类型,然后“Find All References”找到引用了这个类型的所有方法、属性。。这些方法、属性等等所在的类型就是你要排除的类型。
## 如何加载字节码
用luac编译后直接加载即可。
要注意默认lua字节码是区分32位和64位的,32位luac生成的字节码只能在32位虚拟机里头跑,可以按《[通用字节码](compatible_bytecode.md)》一文处理下。
## lua持有的c#对象怎么释放
达成下面两点即可释放:
* 1、lua所有对该C#对象释放
* 2、lua完成一次gc周期
貌似所有gc都是上述条件,但对于lua要特别说明下第二点,lua不像C#那样会后台启动一个gc线程在做垃圾回收,而是把gc拆分成小步骤插入到有内存分配。
所以注意一点:你没在运行lua代码,或者lua代码运行并未分配内存,你怎么等也不会有内存回收。
默认gc配置,lua要到达上次内存回收完成时内存占用的两倍才开启一轮新的gc周期,举例上次回收完毕20M内存,那么下次要等到40M才开始一轮gc周期。
按xLua的设计,一个C#对象引用传递到lua,仅让lua增加4字节内存(然而这可能是在C#侧内存占用很大的对象,比如贴图),可以看到通过持有C#引用要达成默认配置开启gc周期条件是比较困难的。
这时可以这么干:
* 1、设置GcPause,让gc更快开启,默认200表示2倍上次回收内存时开启,coco2dx设置为100,表示完成一趟gc后马上开启下一趟,另外也可以设置GcStepmul来加快gc回收速度,默认是200表示回收比内存分配快两倍,GcStepmul在coco2dx设置为5000
* 2、可以在场景切换之类对于性能要求不高的地方加入全量gc调用(通过LuaEnv.FullGc或者在lua里头调用collectgarbage('collect')都可以)。
## 多线程下莫名crash怎么解决
多线程使用需要在(Player Setting/Scripting Define Symbols)下添加THREAD_SAFE宏。
常见的不明显的多线程的场景,比如c#异步socket,对象析构函数等。
## maOS10.15以上,启动unity的时候提示xlua.bundle损坏,移动到废纸篓
执行
```bash
sudo xattr -r -d com.apple.quarantine xlua.bundle
```
================================================
FILE: Assets/XLua/Doc/faq.md.meta
================================================
fileFormatVersion: 2
guid: 13645b7c8597d7840adaff65764ad40f
timeCreated: 1481765808
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/features.md
================================================
# 特性
## 总体
* Lua虚拟机支持
* Lua5.3
* Luajit2.1
* Unity3D版本支持
* 各版本均支持
* 平台支持
* windows 64/32
* android
* ios 64/32/bitcode
* osx
* uwp
* webgl
* 互访技术
* 生成适配代码
* 反射
* 易用性
* 解压即可用
* 开发期无需生成代码
* 生成代码和反射间可无缝切换
* 更简单的无GC api
* 菜单简单易懂
* 配置可以多份,按模块划分,也可以直接在目标类型上打Attribute标签
* 自动生成link.xml防止代码剪裁
* Plugins部分采用cmake编译,更简单
* 核心代码不依赖生成代码,可以随时删除生成目录
* 性能
* Lazyload技术,避免用不上的类型的开销
* lua函数映射到c# delegate,lua table映射到interface,可实现接口层面无C# gc alloc开销
* 所有基本值类型,所有枚举,字段都是值类型的struct,在Lua和C#间传递无C# gc alloc
* LuaTable,LuaFunction提供无gc访问接口
* 通过代码生成期的静态分析,生成最优代码
* 支持C#和Lua间指针传递
* 自动解除已经Destroy的UnityEngine.Object的引用
* 扩展性
* 不用改代码就可以加入Lua第三方扩展
* 生成引擎提供接口做二次开发
## 支持为如下C#实现打补丁
* 构造函数
* 析构函数
* 成员函数
* 静态函数
* 泛化函数
* 操作符重载
* 成员属性
* 静态属性
* 事件
## Lua代码加载
* 加载字符串
* 支持加载后立即执行
* 支持加载后返回一个delegate或者LuaFunction,调用delegate或者LuaFunction后可传脚本参数
* Resources目录的文件
* 直接require
* 自定义loader
* Lua里头require时触发
* require参数透传给loader,loader读取Lua代码返回
* Lua原有的方式
* Lua原有的方式都保留
## Lua调用C#
* 创建C#对象
* C#静态属性,字段
* C#静态方法
* C#成员属性,字段
* C#成员方法
* C#继承
* 子类对象可以直接调用父类的方法,访问父类属性
* 子类模块可以直接调用父类的静态方法,静态属性
* 扩展方法(Extension methods)
* 就像普通成员方法一样使用
* 参数的输入输出属性(out,ref)
* out对应一个lua返回值
* ref对应一个lua参数以及一个lua返回值
* 函数重载
* 支持重载
* 由于lua数据类型远比C#要少,会出现无法判断的情况,可通过扩展方法来来调用。
* 操作符重载
* 支持的操作符:+,-,*,/,==,一元-,<,<=, %,[]
* 其它操作符可以借助扩展方法调用
* 参数默认值
* C#参数有默认值,在lua可以不传
* 可变参数
* 在对应可变参数部分,直接输入一个个参数即可,不需要把这些参数扩到一个数组里头
* 泛化方法调用
* 静态方法可以自行封装使用
* 成员函数可通过扩展方法封装使用
* 枚举类型
* 数字或字符串到枚举的转换
* delegate
* 调用一个C# delegate
* +操作符
* -操作符
* 把一个lua函数作为一个c# delegate传递给c#
* event
* 增加事件回调
* 移除事件回调
* 64位整数
* 传递无gc而且无精度损失
* lua53下使用原生64位支持
* 可以和number运算
* 以java的方式支持无符号64位整数
* table的自动转换到C#复杂类型
* obj.complexField = {a = 1, b = {c = 1}},obj是一个C#对象,complexField是两层嵌套的struct或者class
* typeof
* 对应C#的typeof操作符,返回Type对象
* lua侧直接clone
* decimal
* 传递无gc而且无精度损失
## C#调用Lua
* 调用Lua函数
* 以delegate方式调用Lua函数
* 以LuaFunction调用lua函数
* 访问Lua的table
* LuaTable的泛化Get/Set接口,调用无gc,可指明Key,Value的类型
* 用标注了CSharpCallLua的interface访问
* 值拷贝到struct,class
## Lua虚拟机
* 虚拟机gc参数读取及设置
## 工具链
* Lua Profiler
* 可根据函数调用总时长,平均每次调用时长,调用次数排序
* 显示lua函数名及其所在文件的名字及行号
* 如果C#函数,会显示这个是C#函数
* 支持真机调试
================================================
FILE: Assets/XLua/Doc/features.md.meta
================================================
fileFormatVersion: 2
guid: 6dcae34981e53564ea1ad644fe0b2f7c
timeCreated: 1481768591
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/hotfix.md
================================================
## 简介
热补丁允许你使用 xLua 的代码逻辑, 替换掉原有的 C# 程序逻辑, 以实现热补丁.
## 使用方式
1. 打开该特性
添加 `HOTFIX_ENABLE` 宏,(在 Unity3D 的 "File->Build Setting->Scripting Define Symbols" 下添加)。编辑器、各手机平台这个宏要分别设置!如果是自动化打包,要注意在代码里头用 API 设置的宏是不生效的,需要在编辑器设置。
(建议平时开发业务代码不打开 `HOTFIX_ENABLE`,只在构建手机版本或者要在编译器下开发补丁时打开 `HOTFIX_ENABLE`)
2. 在菜单中找到 "XLua/Generate Code" 按钮并单击。
3. 注入,构建手机包这个步骤会在构建时自动进行,编辑器下开发补丁需要手动执行 "XLua/Hotfix Inject In Editor" 菜单。打印 “hotfix inject finish!” 或者 “had injected!” 才算成功,否则会打印错误信息。
如果已经打印了 “hotfix inject finish!” 或者 “had injected!”,执行 `xlua.hotfix` 仍然报类似 “xlua.access, no field __Hitfix0_Update” 的错误,要么是该类没配置到 Hotfix 列表,要么是注入成功后,又触发了编译,覆盖了注入结果。
## 局限性
不支持静态构造函数。
目前只支持 Assets 下代码的热补丁,不支持引擎,C# 系统库的热补丁。
## API
`xlua.hotfix(class, [method_name], fix)`
* 描述 : 注入lua补丁
* class : C#类,两种表示方法,CS.Namespace.TypeName或者字符串方式"Namespace.TypeName",字符串格式和C#的Type.GetType要求一致,如果是内嵌类型(Nested Type)是非Public类型的话,只能用字符串方式表示"Namespace.TypeName+NestedTypeName";
* method_name : 方法名,可选;
* fix : 如果传了method_name,fix将会是一个function,否则通过table提供一组函数。table的组织按key是method_name,value是function的方式。
`base(csobj)`
* 描述 : 子类override函数通过base调用父类实现。
* csobj : 对象
* 返回值 : 新对象,可以通过该对象base上的方法
例子(位于HotfixTest2.cs):
```lua
xlua.hotfix(CS.BaseTest, 'Foo', function(self, p)
print('BaseTest', p)
base(self):Foo(p)
end)
```
`util.hotfix_ex(class, method_name, fix)`
* 描述 : xlua.hotfix的增强版本,可以在fix函数里头执行原来的函数,缺点是fix的执行会略慢。
* method_name : 方法名;
* fix : 用来替换C#方法的lua function。
## 标识要热更新的类型
和其它配置一样,有两种方式
方式一:直接在类里头打Hotfix标签(不建议,示例只是为了方便演示采取这种方式);
!!注意,方式一在高版本 Unity 不支持
方式二:在一个静态类的静态字段或者属性里头配置一个列表。属性可以用于实现的比较复杂的配置,比如根据命名空间做白名单。
!!注意,高版本 Unity 需要把配置文件放 Editor 目录下
```csharp
//如果涉及到Assembly-CSharp.dll之外的其它dll,如下代码需要放到Editor目录
public static class HotfixCfg
{
[Hotfix]
public static List<Type> by_field = new List<Type>()
{
typeof(HotFixSubClass),
typeof(GenericClass<>),
};
[Hotfix]
public static List<Type> by_property
{
get
{
return (from type in Assembly.Load("Assembly-CSharp").GetTypes()
where type.Namespace == "XXXX"
select type).ToList();
}
}
}
```
## Hotfix Flag
Hotfix标签可以设置一些标志位对生成代码及插桩定制化
* Stateless、Stateful
遗留设置,`Stateful` 方式在新版本已经删除,因为这种方式可以用 `xlua.util.state` 接口达到类似的效果,该接口的使用可以看下`HotfixTest2.cs` 里的示例代码。
由于没 `Stateful`,默认就是 `Stateless`,所以也没必要设置该标志位。
* ValueTypeBoxing
值类型的适配delegate会收敛到object,好处是代码量更少,不好的是值类型会产生boxing及gc,适用于对text段敏感的业务。
* IgnoreProperty
不对属性注入及生成适配代码,一般而言,大多数属性的实现都很简单,出错几率比较小,建议不注入。
* IgnoreNotPublic
不对非public的方法注入及生成适配代码。除了像MonoBehaviour那种会被反射调用的私有方法必须得注入,其它仅被本类调用的非public方法可以不注入,只不过修复时会工作量稍大,所有引用到这个函数的public方法都要重写。
* Inline
不生成适配 delegate,直接在函数体注入处理代码。
* IntKey
不生成静态字段,而是把所有注入点放到一个数组集中管理。
好处:对 text 段影响小。
坏处:使用不像默认方式那么方便,需要通过id来指明hotfix哪个函数,而这个id是代码注入工具时分配的,函数到id的映射会保存在 `Gen/Resources/hotfix_id_map.lua.txt`,并且自动加时间戳备份到 `hotfix_id_map.lua.txt` 同级目录,发布手机版本后请妥善保存该文件。
该文件的格式大概如下(注意:该文件仅IntKey模式使用,当你没类型指定IntKey模式注入,该文件只返回个空表):
```lua
return {
["HotfixTest"] = {
[".ctor"] = {
5
},
["Start"] = {
6
},
["Update"] = {
7
},
["FixedUpdate"] = {
8
},
["Add"] = {
9,10
},
["OnGUI"] = {
11
},
},
}
```
想要替换 `HotfixTest` 的 `Update` 函数,你得
```lua
CS.XLua.HotfixDelegateBridge.Set(7, func)
```
如果是重载函数,将会一个函数名对应多个 id,比如上面的 `Add` 函数。
能不能自动化一些呢?可以,`xlua.util` 提供了 `auto_id_map` 函数,执行一次后你就可以像以前那样直接用类,方法名去指明修补的函数。
```lua
(require 'xlua.util').auto_id_map()
xlua.hotfix(CS.HotfixTest, 'Update', function(self)
self.tick = self.tick + 1
if (self.tick % 50) == 0 then
print('<<<<<<<<Update in lua, tick = ' .. self.tick)
end
end)
```
前提是 `hotfix_id_map.lua.txt` 放到可以通过 `require 'hotfix_id_map'` 引用到的地方。
## 使用建议
* 对所有较大可能变动的类型加上 `Hotfix` 标识;
* 建议用反射找出所有函数参数、字段、属性、事件涉及的 delegate 类型,标注 `CSharpCallLua`;
* 业务代码、引擎 API、系统 API,需要在 Lua 补丁里头高性能访问的类型,加上 `LuaCallCSharp`;
* 引擎 API、系统 API 可能被代码剪裁调(C#无引用的地方都会被剪裁),如果觉得可能会新增 C# 代码之外的 API 调用,这些 API 所在的类型要么加 `LuaCallCSharp`,要么加 `ReflectionUse`;
## 打补丁
xlua可以用lua函数替换 C# 的构造函数,函数,属性,事件的替换。lua实现都是函数,比如属性对于一个 getter 函数和一个 setter 函数,事件对应一个 `add` 函数和一个 `remove` 函数。
* 函数
`method_name` 传函数名,支持重载,不同重载都是转发到同一个 lua 函数。
比如:
```csharp
// 要fix的C#类
[Hotfix]
public class HotfixCalc
{
public int Add(int a, int b)
{
return a - b;
}
public Vector3 Add(Vector3 a, Vector3 b)
{
return a - b;
}
}
```
```lua
xlua.hotfix(CS.HotfixCalc, 'Add', function(self, a, b)
return a + b
end)
```
静态函数和成员函数的区别是,成员函数会加一个 self 参数,这个 self 在 Stateless 方式下是 C# 对象本身(对应 C# 的 this)
普通参数对于 lua 的参数,ref 参数对应 lua 的一个参数和一个返回值,out参数对于lua的一个返回值。
泛化函数的打补丁规则和普通函数一样。
* 构造函数
构造函数对应的 `method_name` 是 ".ctor"。
和普通函数不一样的是,构造函数的热补丁并不是替换,而是执行原有逻辑后调用lua。
* 属性
对于名为 “AProp” 的属性,会对应一个 getter,`method_name` 等于 `get_AProp`,setter 的 `method_name` 等于 `set_AProp`。
* []操作符
赋值对应 `set_Item`,取值对应 `get_Item`。第一个参数是 self,赋值后面跟 key,value,取值只有 key 参数,返回值是取出的值。
* 其它操作符
C#的操作符都有一套内部表示,比如 `+` 号的操作符函数名是 `op_Addition`(其它操作符的内部表示可以去请参照相关资料),覆盖这函数就覆盖了 C# 的 `+` 号操作符。
* 事件
比如对于事件“AEvent”,+= 操作符是 add_AEvent,-=对应的是 remove_AEvent。这两个函数均是第一个参数是self,第二个参数是操作符后面跟的delegate。
通过 `xlua.private_accessible`(版本号大于2.1.11不需要调用 `xlua.private_accessible`)来直接访问事件对应的私有 delegate 的直接访问后,可以通过对象的"&事件名"字段直接触发事件,例如 `self['&MyEvent']()`,其中MyEvent是事件名。
* 析构函数
method_name 是 "Finalize",传一个 self 参数。
和普通函数不一样的是,析构函数的热补丁并不是替换,而是开头调用 lua 函数后继续原有逻辑。
* 泛化类型
其它规则一致,需要说明的是,每个泛化类型实例化后都是一个独立的类型,只能针对实例化后的类型分别打补丁。比如:
```csharp
public class GenericClass<T>
{
}
```
你只能对 `GenericClass<double>`,`GenericClass<int>` 这些类,而不是对 `GenericClass` 打补丁。
对 `GenericClass<double>` 打补丁的实例如下:
```csharp
luaenv.DoString(@"
xlua.hotfix(CS.GenericClass(CS.System.Double), {
['.ctor'] = function(obj, a)
print('GenericClass<double>', obj, a)
end;
Func1 = function(obj)
print('GenericClass<double>.Func1', obj)
end;
Func2 = function(obj)
print('GenericClass<double>.Func2', obj)
return 1314
end
})
");
```
* Unity协程
通过 `util.cs_generator` 可以用一个 function 模拟一个 `IEnumerator`,在里头用 `coroutine.yield`,就类似 C# 里头的 yield return。比如下面的 C# 代码和对应的 hotfix 代码是等同效果的
```csharp
[XLua.Hotfix]
public class HotFixSubClass : MonoBehaviour {
IEnumerator Start()
{
while (true)
{
yield return new WaitForSeconds(3);
Debug.Log("Wait for 3 seconds");
}
}
}
```
```csharp
luaenv.DoString(@"
local util = require 'xlua.util'
xlua.hotfix(CS.HotFixSubClass,{
Start = function(self)
return util.cs_generator(function()
while true do
coroutine.yield(CS.UnityEngine.WaitForSeconds(3))
print('Wait for 3 seconds')
end
end)
end;
})
");
```
* 整个类
如果要替换整个类,不需要一次次的调用 `xlua.hotfix` 去替换,可以整个一次完成。只要给一个 table,按 `method_name = function` 组织即可
```lua
xlua.hotfix(CS.StatefullTest, {
['.ctor'] = function(csobj)
return util.state(csobj, {evt = {}, start = 0, prop = 0})
end;
set_AProp = function(self, v)
print('set_AProp', v)
self.prop = v
end;
get_AProp = function(self)
return self.prop
end;
get_Item = function(self, k)
print('get_Item', k)
return 1024
end;
set_Item = function(self, k, v)
print('set_Item', k, v)
end;
add_AEvent = function(self, cb)
print('add_AEvent', cb)
table.insert(self.evt, cb)
end;
remove_AEvent = function(self, cb)
print('remove_AEvent', cb)
for i, v in ipairs(self.evt) do
if v == cb then
table.remove(self.evt, i)
break
end
end
end;
Start = function(self)
print('Start')
for _, cb in ipairs(self.evt) do
cb(self.start, 2)
end
self.start = self.start + 1
end;
StaticFunc = function(a, b, c)
print(a, b, c)
end;
GenericTest = function(self, a)
print(self, a)
end;
Finalize = function(self)
print('Finalize', self)
end
})
```
================================================
FILE: Assets/XLua/Doc/hotfix.md.meta
================================================
fileFormatVersion: 2
guid: a96cb06c040f28c4aab024ca7634360b
timeCreated: 1482837382
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/logo.png.meta
================================================
fileFormatVersion: 2
guid: 6b9f4e2e38c36db40bc5bdfe20038d94
timeCreated: 1481715979
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 1
linearTexture: 0
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: .25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 8
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: -1
mipBias: -1
wrapMode: -1
nPOTScale: 1
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: .5, y: .5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
alphaIsTransparency: 0
textureType: -1
buildTargetSettings: []
spriteSheet:
sprites: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/signature.md
================================================
## 源代码签名的用处
可以防止文件传输的过程被黑客篡改。
## xLua的签名功能的使用
* 用Tools/KeyPairsGen.exe生成公私钥对,key_ras文件保存的是私钥,key_ras.pub保存的是公钥,这两个文件请妥善保存,私钥关系到游戏安全,请做好保密工作;
* 用Tools/FilesSignature.exe对源代码进行签名:
* key_ras文件要放到执行目录;
* 参数是源目录和目标目录,这个工具会自动把源目录及其子目录下所有lua后缀的文件签名,按同样的目录结构放到目标目录下;
* 通过SignatureLoader对自己原有的CustomLoader包装后使用;
* SignatureLoader的构造函数有两个,一个是公钥,也就是key_ras.pub里头的内容,一个是原来的Loader;
================================================
FILE: Assets/XLua/Doc/signature.md.meta
================================================
fileFormatVersion: 2
guid: 54ea702ea6cb89a46b7986dc7fa8482e
timeCreated: 1489376033
licenseType: Pro
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc/xLua.png.meta
================================================
fileFormatVersion: 2
guid: b2926ca0864130e40b99cbe18d0fc395
timeCreated: 1481699971
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 1
linearTexture: 0
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: .25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 8
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: -1
mipBias: -1
wrapMode: -1
nPOTScale: 1
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: .5, y: .5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
alphaIsTransparency: 0
textureType: -1
buildTargetSettings: []
spriteSheet:
sprites: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:
================================================
FILE: Assets/XLua/Doc.meta
================================================
fileFormatVersion: 2
guid: 67edfc4b640373846b14362bf8769576
folderAsset: yes
DefaultImporter:
userData:
================================================
FILE: Assets/XLua/Editor/ExampleConfig.cs
================================================
/*
* Tencent is pleased to support the open source community by making xLua available.
* Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved.
* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
* http://opensource.org/licenses/MIT
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
*/
using System.Collections.Generic;
using System;
using XLua;
using System.Reflection;
using System.Linq;
//配置的详细介绍请看Doc下《XLua的配置.doc》
public static class ExampleConfig
{
/***************如果你全lua编程,可以参考这份自动化配置***************/
//--------------begin 纯lua编程配置参考----------------------------
//static List<string> exclude = new List<string> {
// "HideInInspector", "ExecuteInEditMode",
// "AddComponentMenu", "ContextMenu",
// "RequireComponent", "DisallowMultipleComponent",
// "SerializeField", "AssemblyIsEditorAssembly",
// "Attribute", "Types",
// "UnitySurrogateSelector", "TrackedReference",
// "TypeInferenceRules", "FFTWindow",
// "RPC", "Network", "MasterServer",
// "BitStream", "HostData",
// "ConnectionTesterStatus", "GUI", "EventType",
// "EventModifiers", "FontStyle", "TextAlignment",
// "TextEditor", "TextEditorDblClickSnapping",
// "TextGenerator", "TextClipping", "Gizmos",
// "ADBannerView", "ADInterstitialAd",
// "Android", "Tizen", "jvalue",
// "iPhone", "iOS", "Windows", "CalendarIdentifier",
// "CalendarUnit", "CalendarUnit",
// "ClusterInput", "FullScreenMovieControlMode",
// "FullScreenMovieScalingMode", "Handheld",
// "LocalNotification", "NotificationServices",
// "RemoteNotificationType", "RemoteNotification",
// "SamsungTV", "TextureCompressionQuality",
// "TouchScreenKeyboardType", "TouchScreenKeyboard",
// "MovieTexture", "UnityEngineInternal",
// "Terrain", "Tree", "SplatPrototype",
// "DetailPrototype", "DetailRenderMode",
// "MeshSubsetCombineUtility", "AOT", "Social", "Enumerator",
// "SendMouseEvents", "Cursor", "Flash", "ActionScript",
// "OnRequestRebuild", "Ping",
// "ShaderVariantCollection", "SimpleJson.Reflection",
// "CoroutineTween", "GraphicRebuildTracker",
// "Advertisements", "UnityEditor", "WSA",
// "EventProvider", "Apple",
// "ClusterInput", "Motion",
// "UnityEngine.UI.ReflectionMethodsCache", "NativeLeakDetection",
// "NativeLeakDetectionMode", "WWWAudioExtensions", "UnityEngine.Experimental",
//};
//static bool isExcluded(Type type)
//{
// var fullName = type.FullName;
// for (int i = 0; i < exclude.Count; i++)
// {
// if (fullName.Contains(exclude[i]))
// {
// return true;
// }
// }
// return false;
//}
//[LuaCallCSharp]
//public static IEnumerable<Type> LuaCallCSharp
//{
// get
// {
// List<string> namespaces = new List<string>() // 在这里添加名字空间
// {
// "UnityEngine",
// "UnityEngine.UI"
// };
// var unityTypes = (from assembly in AppDomain.CurrentDomain.GetAssemblies()
// where !(assembly.ManifestModule is System.Reflection.Emit.ModuleBuilder)
// from type in assembly.GetExportedTypes()
// where type.Namespace != null && namespaces.Contains(type.Namespace) && !isExcluded(type)
// && type.BaseType != typeof(MulticastDelegate) && !type.IsInterface && !type.IsEnum
// select type);
// string[] customAssemblys = new string[] {
// "Assembly-CSharp",
// };
// var customTypes = (from assembly in customAssemblys.Select(s => Assembly.Load(s))
// from type in assembly.GetExportedTypes()
// where type.Namespace == null || !type.Namespace.StartsWith("XLua")
// && type.BaseType != typeof(MulticastDelegate) && !type.IsInterface && !type.IsEnum
// select type);
// return unityTypes.Concat(customTypes);
// }
//}
////自动把LuaCallCSharp涉及到的delegate加到CSharpCallLua列表,后续可以直接用lua函数做callback
//[CSharpCallLua]
//public static List<Type> CSharpCallLua
//{
// get
// {
// var lua_call_csharp = LuaCallCSharp;
// var delegate_types = new List<Type>();
// var flag = BindingFlags.Public | BindingFlags.Instance
// | BindingFlags.Static | BindingFlags.IgnoreCase | BindingFlags.DeclaredOnly;
// foreach (var field in (from type in lua_call_csharp select type).SelectMany(type => type.GetFields(flag)))
// {
// if (typeof(Delegate).IsAssignableFrom(field.FieldType))
// {
// deleg
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
Showing preview only (1,227K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (14377 symbols across 639 files)
FILE: Assets/Plugins/iOS/HotfixFlags.cpp
function xlua_get_hotfix_flag (line 9) | int xlua_get_hotfix_flag(int idx) {
function xlua_set_hotfix_flag (line 17) | void xlua_set_hotfix_flag(int idx, int flag) {
FILE: Assets/XLua/Editor/ExampleConfig.cs
class ExampleConfig (line 16) | public static class ExampleConfig
FILE: Assets/XLua/Editor/XLuaUnityDefaultConfig.cs
class XLuaUnityDefaultConfig (line 12) | static class XLuaUnityDefaultConfig
method IsSpanType (line 16) | static bool IsSpanType(Type type)
method IsSpanMember (line 28) | static bool IsSpanMember(MemberInfo memberInfo)
FILE: Assets/XLua/Examples/01_Helloworld/Helloworld.cs
class Helloworld (line 14) | public class Helloworld : MonoBehaviour
method Start (line 17) | void Start()
method Update (line 25) | void Update()
FILE: Assets/XLua/Examples/02_U3DScripting/LuaBehaviour.cs
class Injection (line 17) | [System.Serializable]
class LuaBehaviour (line 24) | [LuaCallCSharp]
method Awake (line 40) | void Awake()
method Start (line 79) | void Start()
method Update (line 88) | void Update()
method OnDestroy (line 102) | void OnDestroy()
FILE: Assets/XLua/Examples/04_LuaObjectOrented/InvokeLua.cs
class PropertyChangedEventArgs (line 15) | public class PropertyChangedEventArgs : EventArgs
class InvokeLua (line 21) | public class InvokeLua : MonoBehaviour
type ICalc (line 23) | [CSharpCallLua]
method Add (line 28) | int Add(int a, int b);
method Start (line 89) | void Start()
method Test (line 96) | void Test(LuaEnv luaenv)
method Notify (line 118) | void Notify(object sender, PropertyChangedEventArgs e)
method Update (line 124) | void Update()
FILE: Assets/XLua/Examples/05_NoGc/NoGc.cs
type Pedding (line 15) | [GCOptimize]
type MyStruct (line 22) | [GCOptimize]
method MyStruct (line 26) | public MyStruct(int p1, int p2)
type MyEnum (line 39) | [LuaCallCSharp]
type IExchanger (line 64) | [CSharpCallLua]
method exchange (line 67) | void exchange(Array arr);
class NoGc (line 70) | [LuaCallCSharp]
method FloatParamMethod (line 97) | public float FloatParamMethod(float p)
method Vector3ParamMethod (line 102) | public Vector3 Vector3ParamMethod(Vector3 p)
method StructParamMethod (line 107) | public MyStruct StructParamMethod(MyStruct p)
method EnumParamMethod (line 112) | public MyEnum EnumParamMethod(MyEnum p)
method DecimalParamMethod (line 117) | public decimal DecimalParamMethod(decimal p)
method Start (line 123) | void Start()
method Update (line 187) | void Update()
method OnDestroy (line 236) | void OnDestroy()
FILE: Assets/XLua/Examples/06_Coroutine/CoroutineTest.cs
class CoroutineTest (line 6) | public class CoroutineTest : MonoBehaviour
method Start (line 10) | void Start()
method Update (line 17) | void Update()
method OnDestroy (line 25) | void OnDestroy()
FILE: Assets/XLua/Examples/06_Coroutine/Coroutine_Runner.cs
class Coroutine_Runner (line 9) | public class Coroutine_Runner : MonoBehaviour
class CoroutineConfig (line 14) | public static class CoroutineConfig
FILE: Assets/XLua/Examples/07_AsyncTest/AsyncTest.cs
class AsyncTest (line 16) | public class AsyncTest : MonoBehaviour
method Start (line 20) | void Start()
method Update (line 27) | void Update()
FILE: Assets/XLua/Examples/07_AsyncTest/MessageBox.cs
class MessageBox (line 18) | public class MessageBox : MonoBehaviour
method ShowAlertBox (line 21) | public static void ShowAlertBox(string message, string title, Action o...
method ShowConfirmBox (line 51) | public static void ShowConfirmBox(string message, string title, Action...
class MessageBoxConfig (line 101) | public static class MessageBoxConfig
FILE: Assets/XLua/Examples/08_Hotfix/Editor/HotfixTestCfg.cs
class HotfixTestCfg (line 7) | public static class HotfixTestCfg
FILE: Assets/XLua/Examples/08_Hotfix/HotfixTest.cs
class HotfixTest (line 6) | [Hotfix]
method Start (line 14) | void Start()
method Update (line 19) | void Update()
method OnGUI (line 27) | void OnGUI()
FILE: Assets/XLua/Examples/08_Hotfix/HotfixTest2.cs
class HotfixCalc (line 6) | [Hotfix]
method Add (line 9) | public int Add(int a, int b)
method Add (line 14) | public Vector3 Add(Vector3 a, Vector3 b)
method TestOut (line 19) | public int TestOut(int a, out double b, ref string c)
method TestOut (line 26) | public int TestOut(int a, out double b, ref string c, GameObject go)
method Test1 (line 31) | public T Test1<T>()
method Test2 (line 36) | public T1 Test2<T1, T2, T3>(T1 a, out T2 b, ref T3 c)
method Test3 (line 42) | public static int Test3<T>(T a)
method Test4 (line 47) | public static void Test4<T>(T a)
method Test5 (line 51) | public void Test5<T>(int a, params T[] arg)
class NoHotfixCalc (line 57) | public class NoHotfixCalc
method Add (line 59) | public int Add(int a, int b)
class GenericClass (line 65) | [Hotfix]
method GenericClass (line 70) | public GenericClass(T a)
method Func1 (line 75) | public void Func1()
method Func2 (line 80) | public T Func2()
class InnerTypeTest (line 86) | [Hotfix]
method Foo (line 89) | public void Foo()
type _InnerStruct (line 95) | struct _InnerStruct
method Bar (line 101) | _InnerStruct Bar()
class BaseTestHelper (line 107) | public class BaseTestHelper
class BaseTestBase (line 112) | public class BaseTestBase<T> : BaseTestHelper
method Foo (line 114) | public virtual void Foo(int p)
class BaseTest (line 120) | [Hotfix]
method Foo (line 124) | public override void Foo(int p)
method Proxy (line 129) | public void Proxy(int p)
method ToString (line 134) | public override string ToString()
type StructTest (line 140) | [Hotfix]
method StructTest (line 144) | public StructTest(GameObject go)
method GetGo (line 149) | public GameObject GetGo(int a, object b)
method ToString (line 154) | public override string ToString()
method Proxy (line 159) | public string Proxy()
type GenericStruct (line 165) | [Hotfix]
method GenericStruct (line 170) | public GenericStruct(T a)
method GetA (line 175) | public T GetA(int p)
class HotfixTest2 (line 181) | public class HotfixTest2 : MonoBehaviour
method Start (line 185) | void Start()
method TestStateful (line 415) | void TestStateful()
method Update (line 438) | void Update()
FILE: Assets/XLua/Examples/08_Hotfix/StatefullTest.cs
class StatefullTest (line 5) | [XLua.Hotfix]
method StatefullTest (line 8) | public StatefullTest()
method StatefullTest (line 13) | public StatefullTest(int a, int b)
method Start (line 54) | public void Start()
method Update (line 59) | void Update()
method GenericTest (line 64) | public void GenericTest<T>(T a)
method StaticFunc (line 69) | static public void StaticFunc(int a, int b)
method StaticFunc (line 72) | static public void StaticFunc(string a, int b, int c)
FILE: Assets/XLua/Examples/09_GenericMethod/Foo.cs
class Foo1Parent (line 10) | [LuaCallCSharp]
class Foo2Parent (line 15) | [LuaCallCSharp]
class Foo1Child (line 20) | [LuaCallCSharp]
class Foo2Child (line 25) | [LuaCallCSharp]
class Foo (line 30) | [LuaCallCSharp]
method Test1 (line 35) | public void Test1<T>(T a) where T : Foo1Parent
method Test2 (line 40) | public T1 Test2<T1, T2>(T1 a, T2 b, GameObject c) where T1 : Foo1Paren...
method UnsupportedMethod1 (line 53) | public void UnsupportedMethod1<T>(T a)
method UnsupportedMethod2 (line 61) | public void UnsupportedMethod2<T>() where T : Foo1Parent
method UnsupportedMethod3 (line 69) | public void UnsupportedMethod3<T>(T a) where T : IDisposable
class FooExtension (line 77) | [LuaCallCSharp]
method PlainExtension (line 80) | public static void PlainExtension(this Foo1Parent a)
method Extension1 (line 85) | public static T Extension1<T>(this T a) where T : Foo1Parent
method Extension2 (line 91) | public static T Extension2<T>(this T a, GameObject b) where T : Foo1Pa...
method Extension2 (line 97) | public static void Extension2<T1, T2>(this T1 a, T2 b) where T1 : Foo1...
method UnsupportedExtension (line 102) | public static T UnsupportedExtension<T>(this GameObject obj) where T :...
FILE: Assets/XLua/Examples/09_GenericMethod/GenericMethodExample.cs
class GenericMethodExample (line 7) | public class GenericMethodExample : MonoBehaviour
method Start (line 25) | private void Start()
method Update (line 31) | private void Update()
method OnDestroy (line 37) | private void OnDestroy()
FILE: Assets/XLua/Examples/10_SignatureLoader/SignatureLoaderTest.cs
class SignatureLoaderTest (line 8) | public class SignatureLoaderTest : MonoBehaviour
method Start (line 13) | void Start()
method Update (line 52) | void Update()
FILE: Assets/XLua/Examples/11_RawObject/RawObjectTest.cs
class RawObjectTest (line 6) | public class RawObjectTest : MonoBehaviour
method PrintType (line 8) | public static void PrintType(object o)
method Start (line 14) | void Start()
method Update (line 25) | void Update()
FILE: Assets/XLua/Examples/12_ReImplementInLua/ReImplementInLua.cs
type PushAsTableStruct (line 8) | [GCOptimize(OptimizeFlag.PackAsTable)]
class ReImplementInLua (line 15) | public class ReImplementInLua : MonoBehaviour
method Start (line 19) | void Start()
method Update (line 143) | void Update()
FILE: Assets/XLua/Examples/13_BuildFromCLI/Editor/BuildFromCLI.cs
class BuildFromCLI (line 9) | public static class BuildFromCLI
method BuildFromUnityMenu (line 14) | [MenuItem("XLua/Examples/13_BuildFromCLI")]
method Build (line 25) | public static void Build()
method build (line 32) | private static void build(string outputDir, string packageName)
FILE: Assets/XLua/Examples/14_HotfixAsyncAwait/HotfixAsyncAwaitTest.cs
class HotfixAsyncAwaitTest (line 9) | [Hotfix]
method Method1 (line 12) | [Hotfix]
method AsyncMethod1 (line 19) | [Hotfix]
method AsyncMethod2 (line 28) | [Hotfix]
method AsyncMethod3 (line 37) | [Hotfix]
method AsyncMethod4 (line 48) | [Hotfix]
method MyTask (line 57) | [Hotfix]
method MyTask1 (line 67) | [Hotfix]
method MyTask2 (line 77) | [Hotfix]
method DoHotfixMethod1 (line 99) | [ContextMenu("DoHotfix Method1")]
method DoHotfixAsyncMethod1 (line 106) | [ContextMenu("DoHotfix AsyncMethod1")]
method DoHotfixAsyncMethod2 (line 113) | [ContextMenu("DoHotfix AsyncMethod2")]
method DoHotfixAsyncMethod3 (line 120) | [ContextMenu("DoHotfix AsyncMethod3")]
method DoHotfixAsyncMethod4 (line 127) | [ContextMenu("DoHotfix AsyncMethod4")]
method DoHotfixMyTask (line 134) | [ContextMenu("DoHotfix MyTask")]
method DoHotfixMyTask1 (line 141) | [ContextMenu("DoHotfix MyTask1")]
method DoHotfixMyTask2 (line 148) | [ContextMenu("DoHotfix MyTask2")]
method OnGUI (line 156) | void OnGUI()
class HotfixAsyncAwaitTest (line 86) | public partial class HotfixAsyncAwaitTest
method Method1 (line 12) | [Hotfix]
method AsyncMethod1 (line 19) | [Hotfix]
method AsyncMethod2 (line 28) | [Hotfix]
method AsyncMethod3 (line 37) | [Hotfix]
method AsyncMethod4 (line 48) | [Hotfix]
method MyTask (line 57) | [Hotfix]
method MyTask1 (line 67) | [Hotfix]
method MyTask2 (line 77) | [Hotfix]
method DoHotfixMethod1 (line 99) | [ContextMenu("DoHotfix Method1")]
method DoHotfixAsyncMethod1 (line 106) | [ContextMenu("DoHotfix AsyncMethod1")]
method DoHotfixAsyncMethod2 (line 113) | [ContextMenu("DoHotfix AsyncMethod2")]
method DoHotfixAsyncMethod3 (line 120) | [ContextMenu("DoHotfix AsyncMethod3")]
method DoHotfixAsyncMethod4 (line 127) | [ContextMenu("DoHotfix AsyncMethod4")]
method DoHotfixMyTask (line 134) | [ContextMenu("DoHotfix MyTask")]
method DoHotfixMyTask1 (line 141) | [ContextMenu("DoHotfix MyTask1")]
method DoHotfixMyTask2 (line 148) | [ContextMenu("DoHotfix MyTask2")]
method OnGUI (line 156) | void OnGUI()
FILE: Assets/XLua/Examples/ExampleGenConfig.cs
class ExampleGenConfig (line 17) | public static class ExampleGenConfig
method IsBlacklistedGenericType (line 104) | private static bool IsBlacklistedGenericType(Type type)
FILE: Assets/XLua/Src/CodeEmit.cs
class CodeEmit (line 28) | public class CodeEmit
method CodeEmit (line 88) | public CodeEmit()
method emitPush (line 135) | private void emitPush(ILGenerator il, Type type, short dataPos, bool i...
method EmitDelegateImpl (line 221) | public Type EmitDelegateImpl(IEnumerable<IGrouping<MethodInfo, Type>> ...
method EmitGetObject (line 279) | private void EmitGetObject(ILGenerator il, int offset, Type type, Loca...
method SetGenInterfaces (line 379) | public void SetGenInterfaces(List<Type> gen_interfaces)
method EmitInterfaceImpl (line 390) | public Type EmitInterfaceImpl(Type to_be_impl)
method emitEmptyMethod (line 609) | private void emitEmptyMethod(ILGenerator il, Type returnType)
method defineImplementMethod (line 628) | private MethodBuilder defineImplementMethod(TypeBuilder type_builder, ...
method emitLiteralLoad (line 650) | private void emitLiteralLoad(ILGenerator il, Type type, object obj, in...
method emitMethodImpl (line 736) | private void emitMethodImpl(MethodInfo to_be_impl, ILGenerator il, boo...
method checkType (line 921) | void checkType(ILGenerator il, Type type, LocalBuilder translator, int...
method emitRegisterFunc (line 945) | void emitRegisterFunc(ILGenerator il, MethodBuilder method, int index,...
method emitCatchBlock (line 956) | void emitCatchBlock(ILGenerator il, LocalBuilder ex, LocalBuilder wrap...
method emitFieldWrap (line 972) | public MethodBuilder emitFieldWrap(TypeBuilder typeBuilder, FieldInfo ...
method emitPropertyWrap (line 1049) | public MethodBuilder emitPropertyWrap(TypeBuilder typeBuilder, Propert...
method addToBlackList (line 1139) | static void addToBlackList(List<string> info)
method initBlackList (line 1179) | static void initBlackList()
method isMemberInBlackList (line 1215) | static bool isMemberInBlackList(MemberInfo mb)
method isMethodInBlackList (line 1225) | static bool isMethodInBlackList(MethodBase mb)
method EmitTypeWrap (line 1235) | public Type EmitTypeWrap(Type toBeWrap)
method emitEventWrap (line 1458) | MethodBuilder emitEventWrap(TypeBuilder typeBuilder, EventInfo ev)
method emitUpdateIfNeeded (line 1572) | void emitUpdateIfNeeded(ILGenerator il, LocalBuilder L, LocalBuilder t...
method firstDefaultValue (line 1587) | int firstDefaultValue(MethodBase method)
method emitMethodWrap (line 1597) | MethodBuilder emitMethodWrap(TypeBuilder typeBuilder, List<MethodBase>...
FILE: Assets/XLua/Src/CopyByValue.cs
class CopyByValue (line 23) | public static partial class CopyByValue
method Pack (line 26) | public static bool Pack(IntPtr buff, int offset, byte field)
method UnPack (line 30) | public static bool UnPack(IntPtr buff, int offset, out byte field)
method Pack (line 34) | public static bool Pack(IntPtr buff, int offset, sbyte field)
method UnPack (line 38) | public static bool UnPack(IntPtr buff, int offset, out sbyte field)
method Pack (line 46) | public static bool Pack(IntPtr buff, int offset, short field)
method UnPack (line 50) | public static bool UnPack(IntPtr buff, int offset, out short field)
method Pack (line 54) | public static bool Pack(IntPtr buff, int offset, ushort field)
method UnPack (line 58) | public static bool UnPack(IntPtr buff, int offset, out ushort field)
method Pack (line 66) | public static bool Pack(IntPtr buff, int offset, int field)
method UnPack (line 70) | public static bool UnPack(IntPtr buff, int offset, out int field)
method Pack (line 74) | public static bool Pack(IntPtr buff, int offset, uint field)
method UnPack (line 78) | public static bool UnPack(IntPtr buff, int offset, out uint field)
method Pack (line 86) | public static bool Pack(IntPtr buff, int offset, long field)
method UnPack (line 90) | public static bool UnPack(IntPtr buff, int offset, out long field)
method Pack (line 94) | public static bool Pack(IntPtr buff, int offset, ulong field)
method UnPack (line 98) | public static bool UnPack(IntPtr buff, int offset, out ulong field)
method Pack (line 106) | public static bool Pack(IntPtr buff, int offset, float field)
method UnPack (line 110) | public static bool UnPack(IntPtr buff, int offset, out float field)
method Pack (line 115) | public static bool Pack(IntPtr buff, int offset, double field)
method UnPack (line 119) | public static bool UnPack(IntPtr buff, int offset, out double field)
method Pack (line 124) | public static bool Pack(IntPtr buff, int offset, decimal field)
method UnPack (line 128) | public static bool UnPack(IntPtr buff, int offset, out decimal field)
method IsStruct (line 144) | public static bool IsStruct(Type type)
FILE: Assets/XLua/Src/DelegateBridge.cs
class DelegateBridgeBase (line 25) | public abstract class DelegateBridgeBase : LuaBase
method DelegateBridgeBase (line 35) | public DelegateBridgeBase(int reference, LuaEnv luaenv) : base(referen...
method TryGetDelegate (line 40) | public bool TryGetDelegate(Type key, out Delegate value)
method AddDelegate (line 55) | public void AddDelegate(Type key, Delegate value)
method GetDelegateByType (line 81) | public virtual Delegate GetDelegateByType(Type type)
class HotfixDelegateBridge (line 87) | public static class HotfixDelegateBridge
method xlua_get_hotfix_flag (line 90) | [DllImport("__Internal", CallingConvention = CallingConvention.Cdecl)]
method xlua_set_hotfix_flag (line 94) | [DllImport("__Internal", CallingConvention = CallingConvention.Cdecl)]
method xlua_get_hotfix_flag (line 97) | public static bool xlua_get_hotfix_flag(int idx)
method Get (line 103) | public static DelegateBridge Get(int idx)
method Set (line 108) | public static void Set(int idx, DelegateBridge val)
class DelegateBridge (line 126) | public partial class DelegateBridge : DelegateBridgeBase
method DelegateBridge (line 132) | public DelegateBridge(int reference, LuaEnv luaenv) : base(reference, ...
method PCall (line 136) | public void PCall(IntPtr L, int nArgs, int nResults, int errFunc)
method InvokeSessionStart (line 147) | public void InvokeSessionStart()
method Invoke (line 157) | public void Invoke(int nRet)
method InvokeSessionEnd (line 169) | public void InvokeSessionEnd()
method InvokeSessionEndWithResult (line 176) | public TResult InvokeSessionEndWithResult<TResult>()
method InParam (line 196) | public void InParam<T>(T p)
method InParams (line 209) | public void InParams<T>(T[] ps)
method OutParam (line 226) | public void OutParam<TResult>(int pos, out TResult ret)
FILE: Assets/XLua/Src/Editor/Generator.cs
class GeneratorConfig (line 24) | public static class GeneratorConfig
method GeneratorConfig (line 32) | static GeneratorConfig()
type CustomGenTask (line 65) | public struct CustomGenTask
type UserConfig (line 71) | public struct UserConfig
class GenCodeMenuAttribute (line 78) | public class GenCodeMenuAttribute : Attribute
class GenPathAttribute (line 83) | public class GenPathAttribute : Attribute
type XLuaTemplate (line 88) | public struct XLuaTemplate
type XLuaTemplates (line 94) | public struct XLuaTemplates
class Generator (line 107) | public static class Generator
method Generator (line 114) | static Generator()
method IsOverride (line 157) | static bool IsOverride(MethodBase method)
method OverloadCosting (line 163) | static int OverloadCosting(MethodBase mi)
method GetExtensionMethods (line 185) | static IEnumerable<MethodInfo> GetExtensionMethods(Type extendedType)
method isSupportedExtensionMethod (line 203) | static bool isSupportedExtensionMethod(MethodBase method, Type extende...
method IsDoNotGen (line 251) | static bool IsDoNotGen(Type type, string name)
method getClassInfo (line 256) | static void getClassInfo(Type type, LuaTable parameters)
class LazyMemberInfo (line 475) | class LazyMemberInfo
method getInterfaceInfo (line 483) | static void getInterfaceInfo(Type type, LuaTable parameters)
method isObsolete (line 503) | static bool isObsolete(MemberInfo mb)
method isObsolete (line 514) | static bool isObsolete(Type type)
method isMemberInBlackList (line 524) | static bool isMemberInBlackList(MemberInfo mb)
method isMethodInBlackList (line 549) | static bool isMethodInBlackList(MethodBase mb)
method GenOne (line 591) | static void GenOne(Type type, Action<Type, LuaTable> type_info_getter,...
method GenEnumWrap (line 630) | static void GenEnumWrap(IEnumerable<Type> types, string save_path)
method NonmalizeName (line 647) | static string NonmalizeName(string name)
method GenInterfaceBridge (line 652) | static void GenInterfaceBridge(IEnumerable<Type> types, string save_path)
class ParameterInfoSimulation (line 668) | class ParameterInfoSimulation
class MethodInfoSimulation (line 677) | class MethodInfoSimulation
method GetParameters (line 684) | public ParameterInfoSimulation[] GetParameters()
method makeMethodInfoSimulation (line 693) | static MethodInfoSimulation makeMethodInfoSimulation(MethodInfo method)
method isNotPublic (line 725) | static bool isNotPublic(Type type)
method hasGenericParameter (line 770) | static bool hasGenericParameter(Type type)
method makeHotfixMethodInfoSimulation (line 790) | static MethodInfoSimulation makeHotfixMethodInfoSimulation(MethodBase ...
class MethodInfoSimulationComparer (line 838) | class MethodInfoSimulationComparer : IEqualityComparer<MethodInfoSimul...
method Equals (line 840) | public bool Equals(MethodInfoSimulation x, MethodInfoSimulation y)
method GetHashCode (line 869) | public int GetHashCode(MethodInfoSimulation obj)
method injectByGeneric (line 875) | static bool injectByGeneric(MethodBase method, HotfixFlag hotfixType)
method HasFlag (line 898) | static bool HasFlag(this HotfixFlag toCheck, HotfixFlag flag)
method GenDelegateBridge (line 903) | static void GenDelegateBridge(IEnumerable<Type> types, string save_pat...
method GenWrapPusher (line 967) | static void GenWrapPusher(IEnumerable<Type> types, string save_path)
method GenWrap (line 989) | static void GenWrap(IEnumerable<Type> types, string save_path)
method clear (line 1043) | static void clear(string path)
class DelegateByMethodDecComparer (line 1055) | class DelegateByMethodDecComparer : IEqualityComparer<Type>
method Equals (line 1057) | public bool Equals(Type x, Type y)
method GetHashCode (line 1061) | public int GetHashCode(Type obj)
method GenDelegateBridges (line 1074) | public static void GenDelegateBridges(IEnumerable<Type> hotfix_check_t...
method GenEnumWraps (line 1081) | public static void GenEnumWraps()
method makeGenericMethodIfNeeded (line 1088) | static MethodInfo makeGenericMethodIfNeeded(MethodInfo method)
method GenLuaRegister (line 1112) | public static void GenLuaRegister(bool minimum = false)
method AllSubStruct (line 1168) | public static void AllSubStruct(Type type, Action<Type> cb)
class XluaFieldInfo (line 1189) | class XluaFieldInfo
class XluaTypeInfo (line 1197) | class XluaTypeInfo
method getXluaTypeInfo (line 1205) | static XluaTypeInfo getXluaTypeInfo(Type t, Dictionary<Type, Type> set)
method GenPackUnpack (line 1249) | public static void GenPackUnpack(IEnumerable<Type> types, string save_...
method AddToList (line 1296) | static void AddToList(List<Type> list, Func<object> get, object attr)
FILE: Assets/XLua/Src/Editor/Hotfix.cs
class HotfixConfig (line 35) | public static class HotfixConfig
method getHotfixType (line 38) | static int getHotfixType(MemberInfo memberInfo)
method mergeConfig (line 55) | static void mergeConfig(MemberInfo test, Type cfg_type, Func<IEnumerab...
method GetConfig (line 77) | public static void GetConfig(Dictionary<string, int> hotfixCfg, IEnume...
method GetHotfixAssembly (line 104) | public static List<Assembly> GetHotfixAssembly()
method GetHotfixAssemblyPaths (line 150) | public static List<string> GetHotfixAssemblyPaths()
type HotfixFlagInTool (line 160) | [Flags]
class ExtentionMethods (line 175) | static class ExtentionMethods
method HasFlag (line 177) | public static bool HasFlag(this HotfixFlagInTool toCheck, HotfixFlagIn...
method MakeGenericMethod (line 182) | public static MethodReference MakeGenericMethod(this MethodReference s...
method GetGeneric (line 194) | public static FieldReference GetGeneric(this FieldDefinition definition)
method GetGeneric (line 209) | public static TypeReference GetGeneric(this TypeDefinition definition)
method TryImport (line 224) | public static TypeReference TryImport(this ModuleDefinition module, Ty...
method TryImport (line 241) | public static MethodReference TryImport(this ModuleDefinition module, ...
class Hotfix (line 259) | public class Hotfix
method Init (line 285) | public void Init(AssemblyDefinition injectAssembly, AssemblyDefinition...
method getAssemblyFullName (line 367) | static string getAssemblyFullName(IMetadataScope scope)
method isSameType (line 386) | static bool isSameType(TypeReference left, TypeReference right)
method createDelegateFor (line 413) | MethodDefinition createDelegateFor(MethodDefinition method, AssemblyDe...
method getDelegateInvokeFor (line 486) | MethodDefinition getDelegateInvokeFor(MethodDefinition method, MethodD...
method findHotfixDelegate (line 498) | bool findHotfixDelegate(MethodDefinition method, out MethodReference i...
method hasGenericParameter (line 564) | static bool hasGenericParameter(TypeReference type)
method hasGenericParameter (line 592) | static bool hasGenericParameter(MethodDefinition method)
method hasGenericParameterSkipDelaringType (line 598) | static bool hasGenericParameterSkipDelaringType(MethodDefinition method)
method isNoPublic (line 610) | static bool isNoPublic(TypeReference type)
method genericInOut (line 663) | static bool genericInOut(MethodDefinition method, HotfixFlagInTool hot...
method InjectType (line 688) | public bool InjectType(TypeReference hotfixAttributeType, TypeDefiniti...
method HotfixInject (line 800) | [PostProcessScene]
method readAssembly (line 828) | static AssemblyDefinition readAssembly(string assemblyPath)
method writeAssembly (line 845) | static void writeAssembly(AssemblyDefinition assembly, string assembly...
method HotfixInject (line 862) | public static void HotfixInject(string injectAssemblyPath, string xlua...
method Info (line 919) | static void Info(string info)
method Error (line 928) | static void Error(string info)
method Clean (line 937) | static void Clean(AssemblyDefinition assembly)
method getDelegateName (line 949) | static string getDelegateName(MethodDefinition method)
method findNextRet (line 971) | static Instruction findNextRet(Mono.Collections.Generic.Collection<Ins...
method fixBranch (line 990) | void fixBranch(ILProcessor processor, Mono.Collections.Generic.Collect...
method findOverride (line 1028) | static MethodDefinition findOverride(TypeDefinition type, MethodRefere...
method _findBase (line 1050) | static MethodReference _findBase(TypeReference type, MethodDefinition ...
method findBase (line 1088) | static MethodReference findBase(TypeDefinition type, MethodDefinition ...
method getBaseType (line 1107) | static TypeReference getBaseType(TypeReference typeReference)
method tryImport (line 1127) | static TypeReference tryImport(TypeReference type, TypeReference toImp...
method tryImport (line 1144) | static MethodReference tryImport(TypeReference type, MethodReference t...
method tryAddBaseProxy (line 1161) | static MethodDefinition tryAddBaseProxy(TypeDefinition type, MethodDef...
method injectMethod (line 1201) | bool injectMethod(MethodDefinition method, HotfixFlagInTool hotfixType)
method injectGenericMethod (line 1370) | bool injectGenericMethod(MethodDefinition method, HotfixFlagInTool hot...
method OutputIntKeyMapper (line 1592) | public void OutputIntKeyMapper(Stream output)
method ContainNotAsciiChar (line 1638) | static bool ContainNotAsciiChar(string s)
method HotfixInject (line 1651) | [PostProcessScene]
method HotfixInject (line 1659) | public static void HotfixInject(string assemblyDir)
class MyCustomBuildProcessor (line 1625) | class MyCustomBuildProcessor : IPostBuildPlayerScriptDLLs
method OnPostBuildPlayerScriptDLLs (line 1628) | public void OnPostBuildPlayerScriptDLLs(BuildReport report)
class Hotfix (line 1636) | public static class Hotfix
method Init (line 285) | public void Init(AssemblyDefinition injectAssembly, AssemblyDefinition...
method getAssemblyFullName (line 367) | static string getAssemblyFullName(IMetadataScope scope)
method isSameType (line 386) | static bool isSameType(TypeReference left, TypeReference right)
method createDelegateFor (line 413) | MethodDefinition createDelegateFor(MethodDefinition method, AssemblyDe...
method getDelegateInvokeFor (line 486) | MethodDefinition getDelegateInvokeFor(MethodDefinition method, MethodD...
method findHotfixDelegate (line 498) | bool findHotfixDelegate(MethodDefinition method, out MethodReference i...
method hasGenericParameter (line 564) | static bool hasGenericParameter(TypeReference type)
method hasGenericParameter (line 592) | static bool hasGenericParameter(MethodDefinition method)
method hasGenericParameterSkipDelaringType (line 598) | static bool hasGenericParameterSkipDelaringType(MethodDefinition method)
method isNoPublic (line 610) | static bool isNoPublic(TypeReference type)
method genericInOut (line 663) | static bool genericInOut(MethodDefinition method, HotfixFlagInTool hot...
method InjectType (line 688) | public bool InjectType(TypeReference hotfixAttributeType, TypeDefiniti...
method HotfixInject (line 800) | [PostProcessScene]
method readAssembly (line 828) | static AssemblyDefinition readAssembly(string assemblyPath)
method writeAssembly (line 845) | static void writeAssembly(AssemblyDefinition assembly, string assembly...
method HotfixInject (line 862) | public static void HotfixInject(string injectAssemblyPath, string xlua...
method Info (line 919) | static void Info(string info)
method Error (line 928) | static void Error(string info)
method Clean (line 937) | static void Clean(AssemblyDefinition assembly)
method getDelegateName (line 949) | static string getDelegateName(MethodDefinition method)
method findNextRet (line 971) | static Instruction findNextRet(Mono.Collections.Generic.Collection<Ins...
method fixBranch (line 990) | void fixBranch(ILProcessor processor, Mono.Collections.Generic.Collect...
method findOverride (line 1028) | static MethodDefinition findOverride(TypeDefinition type, MethodRefere...
method _findBase (line 1050) | static MethodReference _findBase(TypeReference type, MethodDefinition ...
method findBase (line 1088) | static MethodReference findBase(TypeDefinition type, MethodDefinition ...
method getBaseType (line 1107) | static TypeReference getBaseType(TypeReference typeReference)
method tryImport (line 1127) | static TypeReference tryImport(TypeReference type, TypeReference toImp...
method tryImport (line 1144) | static MethodReference tryImport(TypeReference type, MethodReference t...
method tryAddBaseProxy (line 1161) | static MethodDefinition tryAddBaseProxy(TypeDefinition type, MethodDef...
method injectMethod (line 1201) | bool injectMethod(MethodDefinition method, HotfixFlagInTool hotfixType)
method injectGenericMethod (line 1370) | bool injectGenericMethod(MethodDefinition method, HotfixFlagInTool hot...
method OutputIntKeyMapper (line 1592) | public void OutputIntKeyMapper(Stream output)
method ContainNotAsciiChar (line 1638) | static bool ContainNotAsciiChar(string s)
method HotfixInject (line 1651) | [PostProcessScene]
method HotfixInject (line 1659) | public static void HotfixInject(string assemblyDir)
FILE: Assets/XLua/Src/Editor/LinkXmlGen/LinkXmlGen.cs
class LinkXmlGen (line 9) | public class LinkXmlGen : ScriptableObject
method GetTasks (line 13) | public static IEnumerable<CustomGenTask> GetTasks(LuaEnv lua_env, User...
method GenLinkXml (line 29) | [GenCodeMenu]//加到Generate Code菜单里头
FILE: Assets/XLua/Src/Editor/Report.cs
class Report (line 11) | [InitializeOnLoad]
method Report (line 27) | static Report()
FILE: Assets/XLua/Src/Editor/TemplateRef.cs
class TemplateRef (line 5) | public class TemplateRef : ScriptableObject
FILE: Assets/XLua/Src/GenAttributes.cs
type GenFlag (line 14) | public enum GenFlag
class LuaCallCSharpAttribute (line 22) | public class LuaCallCSharpAttribute : Attribute
method LuaCallCSharpAttribute (line 32) | public LuaCallCSharpAttribute(GenFlag flag = GenFlag.No)
class CSharpCallLuaAttribute (line 40) | public class CSharpCallLuaAttribute : Attribute
class BlackListAttribute (line 45) | public class BlackListAttribute : Attribute
type OptimizeFlag (line 50) | [Flags]
class GCOptimizeAttribute (line 58) | public class GCOptimizeAttribute : Attribute
method GCOptimizeAttribute (line 69) | public GCOptimizeAttribute(OptimizeFlag flag = OptimizeFlag.Default)
class ReflectionUseAttribute (line 76) | public class ReflectionUseAttribute : Attribute
class DoNotGenAttribute (line 82) | public class DoNotGenAttribute : Attribute
class AdditionalPropertiesAttribute (line 87) | public class AdditionalPropertiesAttribute : Attribute
type HotfixFlag (line 92) | [Flags]
class HotfixAttribute (line 108) | public class HotfixAttribute : Attribute
method HotfixAttribute (line 119) | public HotfixAttribute(HotfixFlag e = HotfixFlag.Stateless)
class HotfixDelegateAttribute (line 125) | [AttributeUsage(AttributeTargets.Delegate)]
class SysGenConfig (line 131) | public static class SysGenConfig
FILE: Assets/XLua/Src/InternalGlobals.cs
class InternalGlobals (line 25) | internal partial class InternalGlobals
FILE: Assets/XLua/Src/LuaBase.cs
class LuaBase (line 23) | public abstract class LuaBase : IDisposable
method LuaBase (line 35) | public LuaBase(int reference, LuaEnv luaenv)
method Dispose (line 46) | public void Dispose()
method Dispose (line 52) | public virtual void Dispose(bool disposeManagedResources)
method Equals (line 79) | public override bool Equals(object o)
method GetHashCode (line 104) | public override int GetHashCode()
method push (line 112) | internal virtual void push(RealStatePtr L)
FILE: Assets/XLua/Src/LuaDLL.cs
class Lua (line 34) | public partial class Lua
method lua_tothread (line 42) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_get_lib_version (line 45) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_gc (line 48) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_getupvalue (line 51) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_setupvalue (line 54) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_pushthread (line 57) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_isfunction (line 60) | public static bool lua_isfunction(IntPtr L, int stackPos)
method lua_islightuserdata (line 65) | public static bool lua_islightuserdata(IntPtr L, int stackPos)
method lua_istable (line 70) | public static bool lua_istable(IntPtr L, int stackPos)
method lua_isthread (line 75) | public static bool lua_isthread(IntPtr L, int stackPos)
method luaL_error (line 80) | public static int luaL_error(IntPtr L, string message) //[-0, +1, m]
method lua_setfenv (line 86) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method luaL_newstate (line 89) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_close (line 92) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method luaopen_xlua (line 95) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)] //[-0...
method luaL_openlibs (line 98) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)] //[-0...
method xlua_objlen (line 101) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_createtable (line 104) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_newtable (line 107) | public static void lua_newtable(IntPtr L)//[-0, +0, m]
method xlua_getglobal (line 112) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_setglobal (line 115) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_getloaders (line 118) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_settop (line 121) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_pop (line 124) | public static void lua_pop(IntPtr L, int amount)
method lua_insert (line 128) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_remove (line 131) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_rawget (line 134) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_rawset (line 137) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_setmetatable (line 140) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_rawequal (line 143) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_pushvalue (line 146) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_pushcclosure (line 149) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_replace (line 152) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_gettop (line 155) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_type (line 158) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_isnil (line 161) | public static bool lua_isnil(IntPtr L, int index)
method lua_isnumber (line 166) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_isboolean (line 169) | public static bool lua_isboolean(IntPtr L, int index)
method luaL_ref (line 174) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method luaL_ref (line 177) | public static int luaL_ref(IntPtr L)//[-1, +0, m]
method xlua_rawgeti (line 182) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method xlua_rawseti (line 185) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_getref (line 188) | public static void lua_getref(IntPtr L, int reference)
method pcall_prepare (line 193) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method luaL_unref (line 196) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_unref (line 199) | public static void lua_unref(IntPtr L, int reference)
method lua_isstring (line 204) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_isinteger (line 207) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_pushnil (line 210) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_pushstdcallcfunction (line 213) | public static void lua_pushstdcallcfunction(IntPtr L, lua_CSFunction f...
method xlua_upvalueindex (line 222) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_pcall (line 225) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_tonumber (line 228) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_tointeger (line 231) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_touint (line 234) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_toboolean (line 237) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_topointer (line 240) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_tolstring (line 243) | [DllImport(LUADLL,CallingConvention = CallingConvention.Cdecl)]
method lua_tostring (line 246) | public static string lua_tostring(IntPtr L, int index)
method lua_atpanic (line 276) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_pushnumber (line 279) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_pushboolean (line 282) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method xlua_pushinteger (line 285) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pushuint (line 288) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_pushstring (line 292) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_pushstring (line 295) | public static void lua_pushstring(IntPtr L, string str) //业务使用
method xlua_pushlstring (line 322) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pushasciistring (line 325) | public static void xlua_pushasciistring(IntPtr L, string str) // for i...
method lua_pushstring (line 353) | public static void lua_pushstring(IntPtr L, byte[] str)
method lua_tobytes (line 365) | public static byte[] lua_tobytes(IntPtr L, int index)//[-0, +0, m]
method luaL_newmetatable (line 382) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method xlua_pgettable (line 385) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_psettable (line 388) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method luaL_getmetatable (line 391) | public static void luaL_getmetatable(IntPtr L, string meta)
method xluaL_loadbuffer (line 397) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method luaL_loadbuffer (line 400) | public static int luaL_loadbuffer(IntPtr L, string buff, string name)/...
method xlua_tocsobj_safe (line 406) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method xlua_tocsobj_fast (line 409) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_error (line 412) | public static int lua_error(IntPtr L)
method lua_checkstack (line 417) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_next (line 420) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method lua_pushlightuserdata (line 423) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method xlua_tag (line 426) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method luaL_where (line 429) | [DllImport(LUADLL,CallingConvention=CallingConvention.Cdecl)]
method xlua_tryget_cachedud (line 432) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pushcsobj (line 435) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method gen_obj_indexer (line 438) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]//[,,m]
method gen_obj_newindexer (line 441) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]//[,,m]
method gen_cls_indexer (line 444) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]//[,,m]
method gen_cls_newindexer (line 447) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]//[,,m]
method get_error_func_ref (line 450) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]//[,,m]
method load_error_func (line 453) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]//[,,m]
method luaopen_i64lib (line 456) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method luaopen_socket_core (line 460) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_pushint64 (line 464) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_pushuint64 (line 467) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_isint64 (line 470) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_isuint64 (line 473) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_toint64 (line 476) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_touint64 (line 479) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_push_csharp_function (line 482) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_csharp_str_error (line 485) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_csharp_error (line 488) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]//[-0,...
method xlua_pack_int8_t (line 491) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_unpack_int8_t (line 493) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pack_int16_t (line 496) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_unpack_int16_t (line 498) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pack_int32_t (line 501) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_unpack_int32_t (line 503) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pack_int64_t (line 506) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_unpack_int64_t (line 508) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pack_float (line 511) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_unpack_float (line 513) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pack_double (line 516) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_unpack_double (line 518) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pushstruct (line 521) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pushcstable (line 524) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method lua_touserdata (line 527) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_gettypeid (line 530) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_get_registry_index (line 533) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pgettable_bypath (line 536) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_psettable_bypath (line 539) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pack_float2 (line 546) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_unpack_float2 (line 548) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pack_float3 (line 550) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_unpack_float3 (line 552) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pack_float4 (line 554) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_unpack_float4 (line 556) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pack_float5 (line 558) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_unpack_float5 (line 560) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pack_float6 (line 562) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_unpack_float6 (line 564) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_pack_decimal (line 567) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_unpack_decimal (line 569) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_is_eq_str (line 572) | public static bool xlua_is_eq_str(IntPtr L, int index, string str)
method xlua_is_eq_str (line 577) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_gl (line 580) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_set_csharp_wrapper_caller (line 584) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_push_csharp_wrapper (line 587) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_set_csharp_wrapper_caller (line 590) | public static void xlua_set_csharp_wrapper_caller(CSharpWrapperCaller ...
FILE: Assets/XLua/Src/LuaEnv.cs
type GCAction (line 447) | internal struct GCAction
FILE: Assets/XLua/Src/LuaException.cs
class LuaException (line 13) | [Serializable]
method LuaException (line 16) | public LuaException(string message) : base(message)
FILE: Assets/XLua/Src/LuaFunction.cs
method LuaFunction (line 26) | public LuaFunction(int reference, LuaEnv luaenv) : base(reference, luaenv)
FILE: Assets/XLua/Src/LuaTable.cs
method LuaTable (line 28) | public LuaTable(int reference, LuaEnv luaenv) : base(reference, luaenv)
FILE: Assets/XLua/Src/MethodWarpsCache.cs
class OverloadMethodWrap (line 25) | public class OverloadMethodWrap
method OverloadMethodWrap (line 55) | public OverloadMethodWrap(ObjectTranslator translator, Type targetType...
method Init (line 63) | public void Init(ObjectCheckers objCheckers, ObjectCasters objCasters)
method Check (line 148) | public bool Check(RealStatePtr L)
method Call (line 178) | public int Call(RealStatePtr L)
class MethodWrap (line 280) | public class MethodWrap
method MethodWrap (line 286) | public MethodWrap(string methodName, List<OverloadMethodWrap> overload...
method Call (line 293) | public int Call(RealStatePtr L)
class MethodWrapsCache (line 320) | public class MethodWrapsCache
method MethodWrapsCache (line 330) | public MethodWrapsCache(ObjectTranslator translator, ObjectCheckers ob...
method GetConstructorWrap (line 337) | public LuaCSFunction GetConstructorWrap(Type type)
method GetMethodWrap (line 402) | public LuaCSFunction GetMethodWrap(Type type, string methodName)
method GetMethodWrapInCache (line 428) | public LuaCSFunction GetMethodWrapInCache(Type type, string methodName)
method GetDelegateWrap (line 440) | public LuaCSFunction GetDelegateWrap(Type type)
method GetEventWrap (line 454) | public LuaCSFunction GetEventWrap(Type type, string eventName)
method _GenMethodWrap (line 535) | public MethodWrap _GenMethodWrap(Type type, string methodName, IEnumer...
method tryMakeGenericMethod (line 558) | private static bool tryMakeGenericMethod(ref MethodBase method)
FILE: Assets/XLua/Src/ObjectCasters.cs
class ObjectCheckers (line 30) | public class ObjectCheckers
method ObjectCheckers (line 35) | public ObjectCheckers(ObjectTranslator translator)
method objectCheck (line 60) | private static bool objectCheck(RealStatePtr L, int idx)
method luaTableCheck (line 65) | private bool luaTableCheck(RealStatePtr L, int idx)
method numberCheck (line 70) | private bool numberCheck(RealStatePtr L, int idx)
method decimalCheck (line 75) | private bool decimalCheck(RealStatePtr L, int idx)
method strCheck (line 80) | private bool strCheck(RealStatePtr L, int idx)
method bytesCheck (line 85) | private bool bytesCheck(RealStatePtr L, int idx)
method boolCheck (line 90) | private bool boolCheck(RealStatePtr L, int idx)
method int64Check (line 95) | private bool int64Check(RealStatePtr L, int idx)
method uint64Check (line 100) | private bool uint64Check(RealStatePtr L, int idx)
method luaFunctionCheck (line 105) | private bool luaFunctionCheck(RealStatePtr L, int idx)
method intptrCheck (line 110) | private bool intptrCheck(RealStatePtr L, int idx)
method genChecker (line 115) | private ObjectCheck genChecker(Type type)
method genNullableChecker (line 186) | public ObjectCheck genNullableChecker(ObjectCheck oc)
method AddChecker (line 194) | public void AddChecker(Type type, ObjectCheck oc)
method GetChecker (line 199) | public ObjectCheck GetChecker(Type type)
class ObjectCasters (line 218) | public class ObjectCasters
method ObjectCasters (line 223) | public ObjectCasters(ObjectTranslator translator)
method charCaster (line 248) | private static object charCaster(RealStatePtr L, int idx, object target)
method sbyteCaster (line 253) | private static object sbyteCaster(RealStatePtr L, int idx, object target)
method byteCaster (line 258) | private static object byteCaster(RealStatePtr L, int idx, object target)
method shortCaster (line 263) | private static object shortCaster(RealStatePtr L, int idx, object target)
method ushortCaster (line 268) | private static object ushortCaster(RealStatePtr L, int idx, object tar...
method intCaster (line 273) | private static object intCaster(RealStatePtr L, int idx, object target)
method uintCaster (line 278) | private static object uintCaster(RealStatePtr L, int idx, object target)
method longCaster (line 283) | private static object longCaster(RealStatePtr L, int idx, object target)
method ulongCaster (line 288) | private static object ulongCaster(RealStatePtr L, int idx, object target)
method getDouble (line 293) | private static object getDouble(RealStatePtr L, int idx, object target)
method floatCaster (line 298) | private static object floatCaster(RealStatePtr L, int idx, object target)
method decimalCaster (line 303) | private object decimalCaster(RealStatePtr L, int idx, object target)
method getBoolean (line 310) | private static object getBoolean(RealStatePtr L, int idx, object target)
method getString (line 315) | private static object getString(RealStatePtr L, int idx, object target)
method getBytes (line 320) | private object getBytes(RealStatePtr L, int idx, object target)
method getIntptr (line 330) | private object getIntptr(RealStatePtr L, int idx, object target)
method getObject (line 335) | private object getObject(RealStatePtr L, int idx, object target)
method getLuaTable (line 393) | private object getLuaTable(RealStatePtr L, int idx, object target)
method getLuaFunction (line 408) | private object getLuaFunction(RealStatePtr L, int idx, object target)
method AddCaster (line 423) | public void AddCaster(Type type, ObjectCast oc)
method genCaster (line 428) | private ObjectCast genCaster(Type type)
method genNullableCaster (line 710) | ObjectCast genNullableCaster(ObjectCast oc)
method GetCaster (line 725) | public ObjectCast GetCaster(Type type)
FILE: Assets/XLua/Src/ObjectPool.cs
class ObjectPool (line 15) | public class ObjectPool
type Slot (line 19) | struct Slot
method Slot (line 24) | public Slot(int next, object obj)
method Clear (line 48) | public void Clear()
method extend_capacity (line 55) | void extend_capacity()
method Add (line 65) | public int Add(object obj)
method TryGetValue (line 90) | public bool TryGetValue(int index, out object obj)
method Get (line 102) | public object Get(int index)
method Remove (line 111) | public object Remove(int index)
method Replace (line 125) | public object Replace(int index, object o)
method Check (line 137) | public int Check(int check_pos, int max_check, Func<object, bool> chec...
FILE: Assets/XLua/Src/ObjectTranslator.cs
class ReferenceEqualsComparer (line 29) | class ReferenceEqualsComparer : IEqualityComparer<object>
method Equals (line 31) | public new bool Equals(object o1, object o2)
method GetHashCode (line 35) | public int GetHashCode(object obj)
class MonoPInvokeCallbackAttribute (line 42) | public class MonoPInvokeCallbackAttribute : System.Attribute
method MonoPInvokeCallbackAttribute (line 45) | public MonoPInvokeCallbackAttribute(Type t) { type = t; }
type LuaTypes (line 49) | public enum LuaTypes
type LuaGCOptions (line 63) | public enum LuaGCOptions
type LuaThreadStatus (line 75) | public enum LuaThreadStatus
class LuaIndexes (line 86) | sealed class LuaIndexes
class ObjectTranslator (line 105) | public partial class ObjectTranslator
method DelayWrapLoader (line 125) | public void DelayWrapLoader(Type type, Action<RealStatePtr> loader)
method AddInterfaceBridgeCreator (line 130) | public void AddInterfaceBridgeCreator(Type type, Func<int, LuaEnv, Lua...
method TryDelayWrapLoader (line 136) | public bool TryDelayWrapLoader(RealStatePtr L, Type type)
method Alias (line 195) | public void Alias(Type type, string alias)
method addAssemblieByName (line 207) | void addAssemblieByName(IEnumerable<Assembly> assemblies_usorted, stri...
method ObjectTranslator (line 219) | public ObjectTranslator(LuaEnv luaenv,RealStatePtr L)
type LOGLEVEL (line 268) | internal enum LOGLEVEL{
class CompareByArgRet (line 278) | class CompareByArgRet : IEqualityComparer<MethodInfo>
method Equals (line 280) | public bool Equals(MethodInfo x, MethodInfo y)
method GetHashCode (line 284) | public int GetHashCode(MethodInfo method)
method initCSharpCallLua (line 297) | void initCSharpCallLua()
method getCreatorUsingGeneric (line 352) | Func<DelegateBridgeBase, Delegate> getCreatorUsingGeneric(DelegateBrid...
method getDelegate (line 421) | Delegate getDelegate(DelegateBridgeBase bridge, Type delegateType)
method CreateDelegateBridge (line 472) | public object CreateDelegateBridge(RealStatePtr L, Type delegateType, ...
method AllDelegateBridgeReleased (line 552) | public bool AllDelegateBridgeReleased()
method ReleaseLuaBase (line 564) | public void ReleaseLuaBase(RealStatePtr L, int reference, bool is_dele...
method CreateInterfaceBridge (line 599) | public object CreateInterfaceBridge(RealStatePtr L, Type interfaceType...
method CreateArrayMetatable (line 621) | public void CreateArrayMetatable(RealStatePtr L)
method CreateDelegateMetatable (line 630) | public void CreateDelegateMetatable(RealStatePtr L)
method CreateEnumerablePairs (line 642) | internal void CreateEnumerablePairs(RealStatePtr L)
method OpenLib (line 674) | public void OpenLib(RealStatePtr L)
method createFunctionMetatable (line 718) | internal void createFunctionMetatable(RealStatePtr L)
method FindType (line 737) | internal Type FindType(string className, bool isQualifiedName = false)
method hasMethod (line 772) | bool hasMethod(Type type, string methodName)
method collectObject (line 784) | internal void collectObject(int obj_index_to_collect)
method addObject (line 813) | int addObject(object obj, bool is_valuetype, bool is_enum)
method GetObject (line 828) | internal object GetObject(RealStatePtr L,int index)
method GetTypeOf (line 833) | public Type GetTypeOf(RealStatePtr L, int idx)
method Assignable (line 844) | public bool Assignable<T>(RealStatePtr L, int index)
method Assignable (line 849) | public bool Assignable(RealStatePtr L, int index, Type type)
method GetObject (line 880) | public object GetObject(RealStatePtr L, int index, Type type)
method Get (line 912) | public void Get<T>(RealStatePtr L, int index, out T v)
method PushByType (line 925) | public void PushByType<T>(RealStatePtr L, T v)
method GetByType (line 939) | public T GetByType<T>(RealStatePtr L, int index)
method GetParams (line 953) | public T[] GetParams<T>(RealStatePtr L, int index)
method GetParams (line 963) | public Array GetParams(RealStatePtr L, int index, Type type) //反射版本
method PushParams (line 973) | public void PushParams(RealStatePtr L, Array ary)
method GetDelegate (line 985) | public T GetDelegate<T>(RealStatePtr L, int index) where T :class
method GetTypeId (line 1007) | public int GetTypeId(RealStatePtr L, Type type)
method PrivateAccessible (line 1015) | public void PrivateAccessible(RealStatePtr L, Type type)
method getTypeId (line 1027) | internal int getTypeId(RealStatePtr L, Type type, out bool is_first, L...
method pushPrimitive (line 1103) | void pushPrimitive(RealStatePtr L, object o)
method PushAny (line 1147) | public void PushAny(RealStatePtr L, object o)
method TranslateToEnumToTop (line 1200) | public int TranslateToEnumToTop(RealStatePtr L, Type type, int idx)
method Push (line 1222) | public void Push(RealStatePtr L, LuaCSFunction o)
method Push (line 1235) | public void Push(RealStatePtr L, LuaBase o)
method Push (line 1247) | public void Push(RealStatePtr L, object o)
method PushObject (line 1291) | public void PushObject(RealStatePtr L, object o, int type_id)
method Update (line 1313) | public void Update(RealStatePtr L, int index, object obj)
method getCsObj (line 1335) | private object getCsObj(RealStatePtr L, int index, int udata)
method SafeGetCSObj (line 1373) | internal object SafeGetCSObj(RealStatePtr L, int index)
method FastGetCSObj (line 1378) | internal object FastGetCSObj(RealStatePtr L,int index)
method ReleaseCSObj (line 1383) | internal void ReleaseCSObj(RealStatePtr L, int index)
method GetFixCSFunction (line 1398) | internal LuaCSFunction GetFixCSFunction(int index)
method PushFixCSFunction (line 1403) | internal void PushFixCSFunction(RealStatePtr L, LuaCSFunction func)
method CallCSharpWrapper (line 1421) | internal int CallCSharpWrapper(RealStatePtr L, int funcidx, int top)
method ensureCSharpWrapperCapacity (line 1426) | void ensureCSharpWrapperCapacity(int min)
method PushCSharpWrapper (line 1446) | internal void PushCSharpWrapper(RealStatePtr L, CSharpWrapper func)
method popValues (line 1461) | internal object[] popValues(RealStatePtr L,int oldTop)
method popValues (line 1480) | internal object[] popValues(RealStatePtr L,int oldTop,Type[] popTypes)
method registerCustomOp (line 1513) | void registerCustomOp(Type type, PushCSObject push, GetCSObject get, U...
method HasCustomOp (line 1520) | public bool HasCustomOp(Type type)
method tryGetPushFuncByType (line 1527) | bool tryGetPushFuncByType<T>(Type type, out T func) where T : class
method tryGetGetFuncByType (line 1567) | bool tryGetGetFuncByType<T>(Type type, out T func) where T : class
method RegisterPushAndGetAndUpdate (line 1612) | public void RegisterPushAndGetAndUpdate<T>(Action<RealStatePtr, T> pus...
method RegisterChecker (line 1643) | public void RegisterChecker<T>(CheckFunc<T> check)
method RegisterCaster (line 1651) | public void RegisterCaster<T>(GetFunc<T> get)
method PushDecimal (line 1663) | public void PushDecimal(RealStatePtr L, decimal val)
method IsDecimal (line 1678) | public bool IsDecimal(RealStatePtr L, int index)
method GetDecimal (line 1684) | public decimal GetDecimal(RealStatePtr L, int index)
method Get (line 1691) | public void Get(RealStatePtr L, int index, out decimal val)
FILE: Assets/XLua/Src/ObjectTranslatorPool.cs
class ObjectTranslatorPool (line 24) | public class ObjectTranslatorPool
method FindTranslator (line 41) | public static ObjectTranslator FindTranslator(RealStatePtr L)
method ObjectTranslatorPool (line 47) | public ObjectTranslatorPool ()
method Add (line 51) | public void Add (RealStatePtr L, ObjectTranslator translator)
method Find (line 66) | public ObjectTranslator Find (RealStatePtr L)
method Remove (line 89) | public void Remove (RealStatePtr L)
FILE: Assets/XLua/Src/RawObject.cs
type RawObject (line 11) | public interface RawObject
class Any (line 19) | public class Any<T> : RawObject
method Any (line 23) | public Any(T i)
class Byte (line 37) | public class Byte : Any<byte>
method Byte (line 39) | public Byte(byte i) : base(i)
class SByte (line 44) | public class SByte : Any<sbyte>
method SByte (line 46) | public SByte(sbyte i) : base(i)
class Char (line 51) | public class Char : Any<char>
method Char (line 53) | public Char(char i) : base(i)
class Int16 (line 58) | public class Int16 : Any<short>
method Int16 (line 60) | public Int16(short i) : base(i)
class UInt16 (line 65) | public class UInt16 : Any<ushort>
method UInt16 (line 67) | public UInt16(ushort i) : base(i)
class Int32 (line 72) | public class Int32 : Any<int>
method Int32 (line 74) | public Int32(int i) : base(i)
class UInt32 (line 79) | public class UInt32 : Any<uint>
method UInt32 (line 81) | public UInt32(uint i) : base(i)
class Int64 (line 86) | public class Int64 : Any<long>
method Int64 (line 88) | public Int64(long i) : base(i)
class UInt64 (line 93) | public class UInt64 : Any<ulong>
method UInt64 (line 95) | public UInt64(ulong i) : base(i)
class Float (line 100) | public class Float : Any<float>
method Float (line 102) | public Float(float i) : base(i)
FILE: Assets/XLua/Src/SignatureLoader.cs
class SignatureLoader (line 11) | public class SignatureLoader
method SignatureLoader (line 22) | public SignatureLoader(string publicKey, LuaEnv.CustomLoader loader)
method load_and_verify (line 36) | byte[] load_and_verify(ref string filepath)
FILE: Assets/XLua/Src/StaticLuaCallbacks.cs
method StaticLuaCallbacks (line 33) | public StaticLuaCallbacks()
method EnumAnd (line 44) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method EnumOr (line 66) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method StaticCSFunction (line 88) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method FixCSFunction (line 103) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method CSharpWrapperCallerImpl (line 120) | [MonoPInvokeCallback(typeof(LuaDLL.CSharpWrapperCaller))]
method DelegateCall (line 136) | public static int DelegateCall(RealStatePtr L, int top)
method DelegateCall (line 138) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method LuaGC (line 158) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method ToString (line 180) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method DelegateCombine (line 197) | public static int DelegateCombine(RealStatePtr L, int top)
method DelegateCombine (line 199) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method DelegateRemove (line 223) | public static int DelegateRemove(RealStatePtr L, int top)
method DelegateRemove (line 225) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method tryPrimitiveArrayGet (line 251) | static bool tryPrimitiveArrayGet(Type type, RealStatePtr L, object obj, ...
method ArrayIndexer (line 334) | public static int ArrayIndexer(RealStatePtr L, int top)
method ArrayIndexer (line 336) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method TryPrimitiveArraySet (line 390) | public static bool TryPrimitiveArraySet(Type type, RealStatePtr L, objec...
method ArrayNewIndexer (line 494) | public static int ArrayNewIndexer(RealStatePtr L, int top)
method ArrayNewIndexer (line 496) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method ArrayLength (line 550) | public static int ArrayLength(RealStatePtr L, int top)
method ArrayLength (line 552) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method MetaFuncIndex (line 569) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method Panic (line 594) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method Print (line 602) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method LoadSocketCore (line 640) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method LoadCS (line 647) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method LoadBuiltinLib (line 655) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method LoadFromResource (line 684) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method LoadFromStreamingAssetsPath (line 715) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method LoadFromCustomLoaders (line 774) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method LoadAssembly (line 807) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method ImportType (line 848) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method ImportGenericType (line 879) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method Cast (line 919) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method getType (line 946) | static Type getType(RealStatePtr L, ObjectTranslator translator, int idx)
method XLuaAccess (line 969) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method XLuaPrivateAccessible (line 1034) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method XLuaMetatableOperation (line 1059) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method DelegateConstructor (line 1103) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method ToFunction (line 1123) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method GenericMethodWraper (line 1145) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method GetGenericMethod (line 1175) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method ReleaseCsObject (line 1225) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
FILE: Assets/XLua/Src/TemplateEngine/TemplateEngine.cs
type TokenType (line 29) | public enum TokenType
class Chunk (line 34) | public class Chunk
method Chunk (line 38) | public Chunk(TokenType type, string text)
class TemplateFormatException (line 45) | class TemplateFormatException : Exception
method TemplateFormatException (line 47) | public TemplateFormatException(string message)
class Parser (line 52) | public class Parser
method Parser (line 60) | static Parser()
method EscapeString (line 70) | static string EscapeString(string input)
method GetRegexString (line 91) | static string GetRegexString()
method Parse (line 116) | public static List<Chunk> Parse(string snippet)
class LuaTemplate (line 150) | public class LuaTemplate
method ComposeCode (line 152) | public static string ComposeCode(List<Chunk> chunks)
method Compile (line 178) | public static LuaFunction Compile(LuaEnv luaenv, string snippet)
method Execute (line 183) | public static string Execute(LuaFunction compiledTemplate, LuaTable pa...
method Execute (line 191) | public static string Execute(LuaFunction compiledTemplate)
method Compile (line 198) | [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
method Execute (line 220) | [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]
method OpenLib (line 238) | public static void OpenLib(RealStatePtr L)
FILE: Assets/XLua/Src/TypeExtensions.cs
class TypeExtensions (line 8) | internal static class TypeExtensions
method IsValueType (line 10) | public static bool IsValueType(this Type type)
method IsEnum (line 19) | public static bool IsEnum(this Type type)
method IsPrimitive (line 28) | public static bool IsPrimitive(this Type type)
method IsAbstract (line 37) | public static bool IsAbstract(this Type type)
method IsSealed (line 46) | public static bool IsSealed(this Type type)
method IsInterface (line 55) | public static bool IsInterface(this Type type)
method IsClass (line 64) | public static bool IsClass(this Type type)
method BaseType (line 73) | public static Type BaseType(this Type type)
method IsGenericType (line 82) | public static bool IsGenericType(this Type type)
method IsGenericTypeDefinition (line 91) | public static bool IsGenericTypeDefinition(this Type type)
method IsSubclassOf (line 101) | public static bool IsSubclassOf(this Type type, Type c)
method IsDefined (line 106) | public static bool IsDefined(this Type type, Type attributeType, bool ...
method GetGenericParameterConstraints (line 111) | public static Type[] GetGenericParameterConstraints(this Type type)
method IsNestedPublic (line 117) | public static bool IsNestedPublic(this Type type)
method IsPublic (line 126) | public static bool IsPublic(this Type type)
method GetFriendlyName (line 135) | public static string GetFriendlyName(this Type type)
FILE: Assets/XLua/Src/Utils.cs
type LazyMemberTypes (line 27) | public enum LazyMemberTypes
class Utils (line 37) | public static partial class Utils
method LoadField (line 39) | public static bool LoadField(RealStatePtr L, int idx, string field_name)
method GetMainState (line 47) | public static RealStatePtr GetMainState(RealStatePtr L)
method GetAssemblies (line 62) | public static List<Assembly> GetAssemblies()
method GetAssemblyList (line 76) | public static async System.Threading.Tasks.Task<List<Assembly>> GetAss...
method GetAllTypes (line 98) | public static IEnumerable<Type> GetAllTypes(bool exclude_generic_defin...
method GetAllTypes (line 108) | public static List<Type> GetAllTypes(bool exclude_generic_definition =...
method genFieldGetter (line 136) | static LuaCSFunction genFieldGetter(Type type, FieldInfo field)
method genFieldSetter (line 164) | static LuaCSFunction genFieldSetter(Type type, FieldInfo field)
method genItemGetter (line 207) | static LuaCSFunction genItemGetter(Type type, PropertyInfo[] props)
method genItemSetter (line 259) | static LuaCSFunction genItemSetter(Type type, PropertyInfo[] props)
method genEnumCastFrom (line 315) | static LuaCSFunction genEnumCastFrom(Type type)
method GetExtensionMethodsOf (line 331) | internal static IEnumerable<MethodInfo> GetExtensionMethodsOf(Type typ...
type MethodKey (line 396) | struct MethodKey
method makeReflectionWrap (line 402) | static void makeReflectionWrap(RealStatePtr L, Type type, int cls_fiel...
method loadUpvalue (line 583) | public static void loadUpvalue(RealStatePtr L, Type type, string metaf...
method RegisterEnumType (line 608) | public static void RegisterEnumType(RealStatePtr L, Type type)
method MakePrivateAccessible (line 618) | public static void MakePrivateAccessible(RealStatePtr L, Type type)
method LazyReflectionCall (line 672) | [MonoPInvokeCallback(typeof(LuaCSFunction))]
method ReflectionWrap (line 823) | public static void ReflectionWrap(RealStatePtr L, Type type, bool priv...
method BeginObjectRegister (line 975) | public static void BeginObjectRegister(Type type, RealStatePtr L, Obje...
method abs_idx (line 1035) | static int abs_idx(int top, int idx)
method EndObjectRegister (line 1046) | public static void EndObjectRegister(Type type, RealStatePtr L, Object...
method EndObjectRegister (line 1049) | public static void EndObjectRegister(Type type, RealStatePtr L, Object...
method RegisterFunc (line 1162) | public static void RegisterFunc(RealStatePtr L, int idx, string name, ...
method RegisterFunc (line 1171) | public static void RegisterFunc(RealStatePtr L, int idx, string name, ...
method RegisterLazyFunc (line 1180) | public static void RegisterLazyFunc(RealStatePtr L, int idx, string na...
method RegisterObject (line 1194) | public static void RegisterObject(RealStatePtr L, ObjectTranslator tra...
method BeginClassRegister (line 1203) | public static void BeginClassRegister(Type type, RealStatePtr L, CShar...
method BeginClassRegister (line 1206) | public static void BeginClassRegister(Type type, RealStatePtr L, LuaCS...
method EndClassRegister (line 1260) | public static void EndClassRegister(Type type, RealStatePtr L, ObjectT...
method getPathOfType (line 1308) | static List<string> getPathOfType(Type type)
method LoadCSTable (line 1330) | public static void LoadCSTable(RealStatePtr L, Type type)
method SetCSTable (line 1357) | public static void SetCSTable(RealStatePtr L, Type type, int cls_table)
method IsParamsMatch (line 1412) | public static bool IsParamsMatch(MethodInfo delegateMethod, MethodInfo...
method IsSupportedMethod (line 1441) | public static bool IsSupportedMethod(MethodInfo method)
method MakeGenericMethodWithConstraints (line 1474) | public static MethodInfo MakeGenericMethodWithConstraints(MethodInfo m...
method getExtendedType (line 1494) | private static Type getExtendedType(MethodInfo method)
method IsStaticPInvokeCSFunction (line 1509) | public static bool IsStaticPInvokeCSFunction(LuaCSFunction csFunction)
method IsPublic (line 1518) | public static bool IsPublic(Type type)
FILE: Assets/XLua/Tutorial/CSharpCallLua/CSCallLua.cs
class CSCallLua (line 17) | public class CSCallLua : MonoBehaviour
class DClass (line 49) | public class DClass
type ItfD (line 55) | [CSharpCallLua]
method add (line 60) | int add(int a, int b);
method Start (line 70) | void Start()
method Update (line 116) | void Update()
method OnDestroy (line 124) | void OnDestroy()
FILE: Assets/XLua/Tutorial/LoadLuaScript/ByFile/ByFile.cs
class ByFile (line 15) | public class ByFile : MonoBehaviour
method Start (line 19) | void Start()
method Update (line 26) | void Update()
method OnDestroy (line 34) | void OnDestroy()
FILE: Assets/XLua/Tutorial/LoadLuaScript/ByString/ByString.cs
class ByString (line 15) | public class ByString : MonoBehaviour
method Start (line 19) | void Start()
method Update (line 26) | void Update()
method OnDestroy (line 34) | void OnDestroy()
FILE: Assets/XLua/Tutorial/LoadLuaScript/Loader/CustomLoader.cs
class CustomLoader (line 15) | public class CustomLoader : MonoBehaviour
method Start (line 19) | void Start()
method Update (line 35) | void Update()
method OnDestroy (line 43) | void OnDestroy()
FILE: Assets/XLua/Tutorial/LuaCallCSharp/LuaCallCs.cs
class BaseClass (line 17) | [LuaCallCSharp]
method BSFunc (line 20) | public static void BSFunc()
method BMFunc (line 27) | public void BMFunc()
type Param1 (line 35) | public struct Param1
type TestEnum (line 41) | [LuaCallCSharp]
class DerivedClass (line 49) | [LuaCallCSharp]
type TestEnumInner (line 52) | [LuaCallCSharp]
method DMFunc (line 59) | public void DMFunc()
method ComplexFunc (line 66) | public double ComplexFunc(Param1 p1, ref int p2, out string p3, Action...
method TestFunc (line 79) | public void TestFunc(int i)
method TestFunc (line 84) | public void TestFunc(string i)
method DefaultValueFunc (line 96) | public void DefaultValueFunc(int a = 100, string b = "cccc", string c ...
method VariableParamsFunc (line 101) | public void VariableParamsFunc(int a, params string[] strs)
method EnumTestFunc (line 110) | public TestEnum EnumTestFunc(TestEnum e)
method CallEvent (line 123) | public void CallEvent()
method TestLong (line 128) | public ulong TestLong(long n)
class InnerCalc (line 133) | class InnerCalc : ICalc
method add (line 135) | public int add(int a, int b)
method GetCalc (line 143) | public ICalc GetCalc()
method GenericMethod (line 148) | public void GenericMethod<T>()
type ICalc (line 154) | [LuaCallCSharp]
method add (line 157) | int add(int a, int b);
class DerivedClassExtensions (line 160) | [LuaCallCSharp]
method GetSomeData (line 163) | public static int GetSomeData(this DerivedClass obj)
method GetSomeBaseData (line 169) | public static int GetSomeBaseData(this BaseClass obj)
method GenericMethodOfString (line 175) | public static void GenericMethodOfString(this DerivedClass obj)
class LuaCallCs (line 182) | public class LuaCallCs : MonoBehaviour
method Start (line 296) | void Start()
method Update (line 303) | void Update()
method OnDestroy (line 311) | void OnDestroy()
FILE: General/LuaMemoryLeakChecker/LuaMemoryLeakChecker.cs
type RelationshipType (line 19) | public enum RelationshipType
class Lua (line 28) | public partial class Lua
method xlua_report_table_size (line 30) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_report_object_relationship (line 33) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_registry_pointer (line 36) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
method xlua_global_pointer (line 39) | [DllImport(LUADLL, CallingConvention = CallingConvention.Cdecl)]
class LuaMemoryLeakChecker (line 50) | public static class LuaMemoryLeakChecker
class Data (line 56) | public class Data
method ToString (line 61) | public override string ToString()
method getSizeReport (line 85) | static Data getSizeReport(LuaEnv env)
type RefInfo (line 97) | struct RefInfo
method makeKey (line 108) | static string makeKey(LuaDLL.RelationshipType type, string key, double...
method getRelationship (line 126) | static Dictionary<IntPtr, List<RefInfo>> getRelationship(LuaEnv env)
method StartMemoryLeakCheck (line 177) | public static Data StartMemoryLeakCheck(this LuaEnv env)
method findGrowing (line 183) | static Data findGrowing(Data from, Data to)
method MemoryLeakCheck (line 199) | public static Data MemoryLeakCheck(this LuaEnv env, Data last)
method MemoryLeakReport (line 205) | public static string MemoryLeakReport(this LuaEnv env, Data data, int ...
FILE: General/LuaMemoryLeakChecker/LuaMemoryLeakCheckerTest.cs
class LuaMemoryLeakCheckerTest (line 5) | public class LuaMemoryLeakCheckerTest : MonoBehaviour
method Start (line 11) | void Start()
method Update (line 79) | void Update()
method OnDestroy (line 113) | void OnDestroy()
FILE: General/Src/FilesSignature.cs
class FilesSignature (line 7) | public class FilesSignature
method usage (line 9) | static void usage()
method doSignature (line 14) | static void doSignature(string from, string to, SHA1 sha, RSACryptoSer...
method Main (line 39) | public static void Main(string[] args)
FILE: General/Src/KeyPairsGen.cs
class KeyPairsGen (line 7) | public class KeyPairsGen
method Main (line 10) | public static void Main(string[] args)
FILE: General/Src/XLuaGenerate.cs
class XLuaGenerate (line 10) | public class XLuaGenerate
method Useage (line 12) | public static void Useage()
method Main (line 17) | public static void Main(string[] args)
FILE: General/Src/XLuaHotfixInject.cs
class XLuaHotfixInject (line 9) | public class XLuaHotfixInject
method Useage (line 11) | public static void Useage()
method Main (line 16) | public static void Main(string[] args)
FILE: General/Src/XLuaTemplates.Designer.cs
class XLuaTemplates (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
method XLuaTemplates (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...
FILE: General/Src/XLuaTest.cs
class XLuaTestCfg (line 5) | public static class XLuaTestCfg
class Calc (line 23) | [LuaCallCSharp]
method Add (line 27) | public int Add(int a, int b)
class CalcByConfig (line 33) | public class CalcByConfig
method Add (line 35) | public int Add(int a, int b)
type Point (line 41) | [LuaCallCSharp]
method Point (line 45) | public Point(float _x, float _y)
class AccessByGenGode (line 54) | public class AccessByGenGode
method Print (line 56) | public void Print(Point pos)
class AccessByReflection (line 62) | public class AccessByReflection
method Print (line 64) | public void Print(Point pos)
class XLuaTest (line 70) | public class XLuaTest
method Main (line 75) | public static void Main()
FILE: General/Src/XLuaUnitTest.cs
class XLuaUnitTest (line 5) | public class XLuaUnitTest
method Main (line 8) | public static void Main()
FILE: Test/PrefTest/xLuaPerfTest/PeformentTestConfig.cs
class PeformentTestConfig (line 7) | public static class PeformentTestConfig {
FILE: Test/PrefTest/xLuaPerfTest/PerfMain.cs
class TestUtils (line 7) | [LuaCallCSharp]
method IsAndroid (line 10) | public static bool IsAndroid()
class PerfMain (line 23) | public class PerfMain : MonoBehaviour {
method Start (line 33) | void Start () {
method Update (line 53) | void Update () {
method OnGUI (line 57) | void OnGUI()
method PerformentTest (line 78) | private int PerformentTest(string title, int load, PerfTest execute)
method StartCSCallLua (line 114) | private void StartCSCallLua()
method StartLuaCallCS (line 187) | private void StartLuaCallCS()
method StartConstruct (line 315) | private void StartConstruct()
method StartAddRemoveCB (line 327) | private void StartAddRemoveCB()
method StartCSCallLuaCB (line 337) | private void StartCSCallLuaCB()
method CPS (line 357) | private int CPS(int loop_times, double ms)
class ParaClass (line 385) | [LuaCallCSharp]
type ParaStruct (line 389) | [GCOptimize]
type ITableAccess (line 394) | [CSharpCallLua]
method func (line 398) | void func();
class ClassLuaCallCS (line 401) | [LuaCallCSharp]
type LuaEnum (line 406) | [LuaCallCSharp]
method funcBaseParam (line 430) | public void funcBaseParam(int x)
method funcClassParam (line 433) | public void funcClassParam(ParaClass x)
method funcStructParam (line 436) | public void funcStructParam(ParaStruct x)
method funcVec3Param (line 439) | public void funcVec3Param(Vector3 x)
method funcInParam (line 442) | public void funcInParam(ref int x)
method funcOutParam (line 445) | public void funcOutParam(out int x)
method funcInOutParam (line 450) | public void funcInOutParam(ref int x, out int y)
method funcTwoParam (line 455) | public void funcTwoParam(int x, int y)
method sFuncBaseParam (line 464) | public static void sFuncBaseParam(int x)
method sFuncClassParam (line 467) | public static void sFuncClassParam(ParaClass x)
method sFuncStructParam (line 470) | public static void sFuncStructParam(ParaStruct x)
method sFuncVec3Param (line 473) | public static void sFuncVec3Param(Vector3 x)
method sFuncInParam (line 476) | public static void sFuncInParam(ref int x)
method sFuncOutParam (line 479) | public static void sFuncOutParam(out int x)
method sFuncInOutParam (line 484) | public static void sFuncInOutParam(ref int x, out int y)
method sFuncTwoParam (line 489) | public static void sFuncTwoParam(int x, int y)
method InvokeBaseParaCB (line 494) | public void InvokeBaseParaCB()
method InvokeClassParaCB (line 501) | public void InvokeClassParaCB()
method InvokeStructParaCB (line 509) | public void InvokeStructParaCB()
method InvokeVec3ParaCB (line 517) | public void InvokeVec3ParaCB()
FILE: Test/UnitTest/xLuaTest/CSharpCallLua/CSObjectForTestCSCallLua.cs
class tableValue1ClassEqual (line 10) | public class tableValue1ClassEqual{
class tableValue1ClassLess (line 17) | public class tableValue1ClassLess{
method tableValue1ClassLess (line 20) | public tableValue1ClassLess()
class tableValue1ClassMore (line 25) | public class tableValue1ClassMore{
class tableValue1ClassPrivate (line 32) | public class tableValue1ClassPrivate{
method Get (line 36) | public int Get()
method Set (line 40) | public void Set(int value)
class tableValue1ClassParamConstucter (line 46) | public class tableValue1ClassParamConstucter{
method tableValue1ClassParamConstucter (line 50) | public tableValue1ClassParamConstucter(int key1, int key2, bool key3)
class tableValue1ClassTwoConstructer (line 58) | public class tableValue1ClassTwoConstructer{
method tableValue1ClassTwoConstructer (line 62) | public tableValue1ClassTwoConstructer()
method tableValue1ClassTwoConstructer (line 66) | public tableValue1ClassTwoConstructer(int key1, int key2, bool key3)
class tableValue1ClassException (line 74) | public class tableValue1ClassException{
method tableValue1ClassException (line 78) | public tableValue1ClassException()
class tableValue2Class (line 84) | public class tableValue2Class
class tableValue4Class (line 91) | public class tableValue4Class
type tableVarIncludeInf (line 100) | [CSharpCallLua]
type tableValue1InfEqual (line 107) | [CSharpCallLua]
method sub (line 114) | int sub(int a, int b);
type tableValue1InfMore (line 117) | [CSharpCallLua]
method sub (line 124) | int sub(int a, int b);
type tableValue1InfLess (line 127) | [CSharpCallLua]
method sub (line 132) | int sub(int a, int b);
type tableValue1InfTypeDiff (line 135) | [CSharpCallLua]
method sub (line 140) | int sub(int a, int b);
type tableValue2Inf (line 143) | [CSharpCallLua]
FILE: Test/UnitTest/xLuaTest/CSharpCallLua/TCForTestCSCallLua.cs
class LuaEnvSingletonForTest (line 10) | public class LuaEnvSingletonForTest {
class GenClass (line 32) | public static class GenClass
type Pedding (line 41) | public struct Pedding
type TestStruct (line 46) | [GCOptimize]
method TestStruct (line 50) | public TestStruct(int p1, int p2)
class TCForTestCSCallLua (line 63) | [LuaCallCSharp]
method LOG (line 68) | public void LOG(string text)
type TestResult (line 292) | public struct TestResult
method ToString (line 296) | public override string ToString()
method TCForTestCSCallLua (line 302) | public TCForTestCSCallLua()
method setResult (line 307) | public void setResult(bool result, string msg, out TestResult resultSt...
method updateResult (line 313) | public void updateResult(bool result, string msg, ref TestResult resul...
method AddLoader1 (line 323) | public byte[] AddLoader1(ref string filename)
method AddLoader2 (line 333) | public byte[] AddLoader2(ref string filename)
method listToString (line 348) | public string listToString(List<int> a)
method listToStr (line 357) | public string listToStr(List<string> a)
method testDoString2LoadLua_Step_1 (line 366) | public TestResult testDoString2LoadLua_Step_1()
method testDoString2LoadLua_Step_2 (line 393) | public TestResult testDoString2LoadLua_Step_2()
method testDoString2LoadLua_Step_3 (line 423) | public TestResult testDoString2LoadLua_Step_3()
method testRequire2LoadLua_Step_1_3 (line 450) | public TestResult testRequire2LoadLua_Step_1_3()
method testRequire2LoadLua_Step_4 (line 478) | public TestResult testRequire2LoadLua_Step_4()
method testRequire2LoadLua_Step_5 (line 504) | public TestResult testRequire2LoadLua_Step_5()
method testRequire2LoadLua_Step_6 (line 526) | public TestResult testRequire2LoadLua_Step_6()
method testRequire2LoadLua_Step_7 (line 548) | public TestResult testRequire2LoadLua_Step_7()
method testAddLoader2LoadLua_Step_1_2 (line 570) | public TestResult testAddLoader2LoadLua_Step_1_2()
method testAddLoader2LoadLua_Step_3 (line 598) | public TestResult testAddLoader2LoadLua_Step_3()
method testAddLoader2LoadLua_Step_6 (line 621) | public TestResult testAddLoader2LoadLua_Step_6()
method testAddLoader2LoadLua_Step_7 (line 644) | public TestResult testAddLoader2LoadLua_Step_7()
method testGetBasicDataTypeBool_Step_1 (line 673) | public TestResult testGetBasicDataTypeBool_Step_1()
method testGetBasicDataTypeString_Step_2 (line 696) | public TestResult testGetBasicDataTypeString_Step_2()
method testGetBasicDataTypeNumberToSByte (line 755) | public TestResult testGetBasicDataTypeNumberToSByte()
method testGetBasicDataTypeNumberToByte (line 791) | public TestResult testGetBasicDataTypeNumberToByte()
method testGetBasicDataTypeNumberToShort (line 827) | public TestResult testGetBasicDataTypeNumberToShort()
method testGetBasicDataTypeNumberToUShort (line 855) | public TestResult testGetBasicDataTypeNumberToUShort()
method testGetBasicDataTypeNumberToInt (line 883) | public TestResult testGetBasicDataTypeNumberToInt()
method testGetBasicDataTypeNumberToUInt (line 923) | public TestResult testGetBasicDataTypeNumberToUInt()
method testGetBasicDataTypeNumberToLong (line 951) | public TestResult testGetBasicDataTypeNumberToLong()
method testGetBasicDataTypeNumberToULong (line 980) | public TestResult testGetBasicDataTypeNumberToULong()
method testGetBasicDataTypeNumberToDouble (line 1008) | public TestResult testGetBasicDataTypeNumberToDouble()
method testGetBasicDataTypeNumberToChar (line 1036) | public TestResult testGetBasicDataTypeNumberToChar()
method testGetBasicDataTypeNumberToFloat (line 1064) | public TestResult testGetBasicDataTypeNumberToFloat()
method testGetBasicDataTypeNumberToDecimal (line 1092) | public TestResult testGetBasicDataTypeNumberToDecimal()
method testGetBasicDataType_Step_4 (line 1122) | public TestResult testGetBasicDataType_Step_4()
method testGetBasicDataType_Step_5 (line 1149) | public TestResult testGetBasicDataType_Step_5()
method testGetTableToClass_Step_1 (line 1181) | public TestResult testGetTableToClass_Step_1()
method testGetTableToClass_Step_2 (line 1217) | public TestResult testGetTableToClass_Step_2()
method testGetTableToClass_Step_3 (line 1242) | public TestResult testGetTableToClass_Step_3()
method testGetTableToClass_Step_4 (line 1275) | public TestResult testGetTableToClass_Step_4()
method testGetTableToClass_Step_5 (line 1306) | public TestResult testGetTableToClass_Step_5()
method testGetTableToClass_Step_1_1 (line 1336) | public TestResult testGetTableToClass_Step_1_1()
method testGetTableToClass_Step_1_3 (line 1360) | public TestResult testGetTableToClass_Step_1_3()
method testGetTableToClass_Step_1_4 (line 1390) | public TestResult testGetTableToClass_Step_1_4()
method testGetTableToInterface_Step_6 (line 1412) | public TestResult testGetTableToInterface_Step_6()
method testGetTableToInterface_Step_7 (line 1452) | public TestResult testGetTableToInterface_Step_7()
method testGetTableToInterface_Step_8 (line 1483) | public TestResult testGetTableToInterface_Step_8()
method testGetTableToInterface_Step_9 (line 1506) | public TestResult testGetTableToInterface_Step_9()
method testGetTableToInterface_Step_6_1 (line 1538) | public TestResult testGetTableToInterface_Step_6_1()
method testGetTableToDic_Step_10 (line 1566) | public TestResult testGetTableToDic_Step_10()
method testGetTableToDic_Step_11_1 (line 1591) | public TestResult testGetTableToDic_Step_11_1()
method testGetTableToDic_Step_11_2 (line 1613) | public TestResult testGetTableToDic_Step_11_2()
method testGetTableToDic_Step_11_3 (line 1636) | public TestResult testGetTableToDic_Step_11_3()
method testGetTableToList_Step_12 (line 1658) | public TestResult testGetTableToList_Step_12()
method testGetTableToList_Step_13_1_int (line 1681) | public TestResult testGetTableToList_Step_13_1_int()
method testGetTableToList_Step_13_1_string (line 1703) | public TestResult testGetTableToList_Step_13_1_string()
method testGetTableToList_Step_13_2 (line 1725) | public TestResult testGetTableToList_Step_13_2()
method testGetTableToLuaTable_Step_14 (line 1747) | public TestResult testGetTableToLuaTable_Step_14()
method testGetFuncToDelegate_Step_1 (line 1784) | public TestResult testGetFuncToDelegate_Step_1()
method testGetFuncToDelegate_Step_2_1 (line 1808) | public TestResult testGetFuncToDelegate_Step_2_1()
method testGetFuncToDelegate_Step_2_2 (line 1849) | public TestResult testGetFuncToDelegate_Step_2_2()
method testGetFuncToDelegate_Step_2_3 (line 1884) | public TestResult testGetFuncToDelegate_Step_2_3()
method testGetFuncToDelegate_Step_2_4 (line 1917) | public TestResult testGetFuncToDelegate_Step_2_4()
method testGetFuncToDelegate_Step_3 (line 1942) | public TestResult testGetFuncToDelegate_Step_3()
method testGetFuncToDelegate_Step_5 (line 1966) | public TestResult testGetFuncToDelegate_Step_5()
method testGetFuncToDelegate_Step_5_1 (line 2003) | public TestResult testGetFuncToDelegate_Step_5_1()
method testGetFuncToDelegate_Step_5_1_0 (line 2038) | public TestResult testGetFuncToDelegate_Step_5_1_0()
method testGetFuncToDelegate_Step_6 (line 2108) | public TestResult testGetFuncToDelegate_Step_6()
method testGetFuncToLuaFunc_Step_8 (line 2140) | public TestResult testGetFuncToLuaFunc_Step_8()
method testGetFuncToLuaFunc_Step_9_1 (line 2164) | public TestResult testGetFuncToLuaFunc_Step_9_1()
method testGetFuncToLuaFunc_Step_10 (line 2209) | public TestResult testGetFuncToLuaFunc_Step_10()
method testGetFuncToLuaFunc_Step_12 (line 2234) | public TestResult testGetFuncToLuaFunc_Step_12()
method testGetFuncToLuaFunc_Step_13 (line 2276) | public TestResult testGetFuncToLuaFunc_Step_13()
method testGetFuncToDelegate_Step_7_1 (line 2313) | public TestResult testGetFuncToDelegate_Step_7_1()
method testGetFuncToDelegate_Step_7_2 (line 2337) | public TestResult testGetFuncToDelegate_Step_7_2()
method testGetFuncToDelegate_Step_7_3 (line 2361) | public TestResult testGetFuncToDelegate_Step_7_3()
method testLuaTableGetSetKeyValue_BasicType_int_1 (line 2386) | public TestResult testLuaTableGetSetKeyValue_BasicType_int_1()
method testLuaTableGetSetKeyValue_BasicType_int_2 (line 2435) | public TestResult testLuaTableGetSetKeyValue_BasicType_int_2()
method testLuaTableGetSetKeyValue_BasicType_string_1 (line 2473) | public TestResult testLuaTableGetSetKeyValue_BasicType_string_1()
method testLuaTableGetSetKeyValue_BasicType_sbyte (line 2501) | public TestResult testLuaTableGetSetKeyValue_BasicType_sbyte()
method testLuaTableGetSetKeyValue_BasicType_byte (line 2537) | public TestResult testLuaTableGetSetKeyValue_BasicType_byte()
method testLuaTableGetSetKeyValue_BasicType_short (line 2573) | public TestResult testLuaTableGetSetKeyValue_BasicType_short()
method testLuaTableGetSetKeyValue_BasicType_ushort (line 2609) | public TestResult testLuaTableGetSetKeyValue_BasicType_ushort()
method testLuaTableGetSetKeyValue_BasicType_long (line 2645) | public TestResult testLuaTableGetSetKeyValue_BasicType_long()
method testLuaTableGetSetKeyValue_BasicType_ulong (line 2681) | public TestResult testLuaTableGetSetKeyValue_BasicType_ulong()
method testLuaTableGetSetKeyValue_BasicType_double (line 2716) | public TestResult testLuaTableGetSetKeyValue_BasicType_double()
method testLuaTableGetSetKeyValue_BasicType_float (line 2752) | public TestResult testLuaTableGetSetKeyValue_BasicType_float()
method testLuaTableGetSetKeyValue_BasicType_char (line 2789) | public TestResult testLuaTableGetSetKeyValue_BasicType_char()
method testLuaTableGetSetKeyValue_BasicType_decimal (line 2825) | public TestResult testLuaTableGetSetKeyValue_BasicType_decimal()
method testLuaTableGetSetKeyValue_struct (line 2863) | public TestResult testLuaTableGetSetKeyValue_struct()
method testLuaTableGetSetKeyValue_class (line 2892) | public TestResult testLuaTableGetSetKeyValue_class()
method testLuaTableGetSetKeyValue_interface (line 2929) | public TestResult testLuaTableGetSetKeyValue_interface()
method testLuaTableGetSetKeyValue_dict (line 2982) | public TestResult testLuaTableGetSetKeyValue_dict()
method testLuaTableGetSetKeyValue_list (line 3016) | public TestResult testLuaTableGetSetKeyValue_list()
method testLuaTableGetSetKeyValue_delegate (line 3046) | public TestResult testLuaTableGetSetKeyValue_delegate()
FILE: Test/UnitTest/xLuaTest/CSharpCallLua/TestCSCallLua.cs
class TestCSCallLua (line 9) | public class TestCSCallLua
method Start (line 15) | void Start()
method Update (line 87) | void Update()
FILE: Test/UnitTest/xLuaTest/LuaCallCS/CSObjectForLuaCallCS.cs
class NoContClass (line 10) | [LuaCallCSharp]
method add (line 15) | public int add (int a, int b)
method dec (line 20) | public static int dec(int a, int b)
class OneParamContClass (line 28) | [LuaCallCSharp]
method add (line 33) | public int add (int a, int b)
method OneParamContClass (line 37) | public OneParamContClass(int a)
class MultiContClass (line 44) | [LuaCallCSharp]
method add (line 49) | public int add (int a, int b)
method MultiContClass (line 53) | public MultiContClass()
method MultiContClass (line 59) | public MultiContClass(int a)
method dec (line 65) | public static int dec(int a, int b)
class TwoParamsContClass (line 71) | [LuaCallCSharp]
method add (line 76) | public int add (int a, int b)
method TwoParamsContClass (line 80) | public TwoParamsContClass(int a, int b)
class OverClassA (line 87) | [LuaCallCSharp]
method sub (line 91) | public int sub(int a, int b)
class OverClassB (line 97) | [LuaCallCSharp]
method sub (line 101) | public int sub(int a, int b)
method Set (line 106) | public static void Set(bool flag)
method sum (line 111) | protected internal int sum(int a, int b, int c)
class OverClassC (line 117) | [LuaCallCSharp]
method div (line 121) | public int div(int a, int b)
method sub (line 130) | public int sub(int a, int b)
class NoGenOverClassA (line 136) | public class NoGenOverClassA : MultiContClass
method sub (line 139) | public int sub(int a, int b)
method Set (line 144) | public static void Set(bool flag)
class OverClassCDeriveNGA (line 150) | [LuaCallCSharp]
method div (line 154) | public int div(int a, int b)
class abstractFatherClass (line 164) | [LuaCallCSharp]
method add (line 167) | public abstract int add(int a, int b);
class ChildCalss (line 171) | [LuaCallCSharp]
method add (line 174) | public override int add(int a, int b)
method setA (line 178) | public void setA( int value)
method getA (line 182) | public int getA()
class StaticTestClass (line 188) | [LuaCallCSharp]
method Add (line 193) | public static void Add()
FILE: Test/UnitTest/xLuaTest/LuaTestCommon.cs
class LuaEnvSingleton (line 8) | public class LuaEnvSingleton {
class LuaTestCommon (line 28) | [LuaCallCSharp]
method IsXLuaGeneral (line 52) | public static bool IsXLuaGeneral()
method IsMacPlatform (line 61) | public static bool IsMacPlatform()
method IsIOSPlatform (line 78) | public static bool IsIOSPlatform()
method Log (line 87) | public static void Log(string str)
class TestCaseGenConfig (line 99) | public class TestCaseGenConfig
FILE: Test/UnitTest/xLuaTest/LuaTestObj.cs
class LongStatic (line 7) | [LuaCallCSharp]
type LuaTestType (line 14) | [LuaCallCSharp]
type FirstPushEnum (line 23) | [LuaCallCSharp]
class LuaTestObj (line 36) | [LuaCallCSharp]
method CallEvent (line 200) | public int CallEvent(float y)
method CallStaticEvent (line 205) | public static int CallStaticEvent(float y)
method DefaultParaFuncSingle (line 210) | public static int DefaultParaFuncSingle(int i, string str = "abc")
method DefaultParaFuncMulti (line 215) | public static int DefaultParaFuncMulti(int i, string str = "abc", doub...
method VariableParamFunc (line 220) | public static int VariableParamFunc(int i, params string[] strs)
method VariableParamFunc2 (line 225) | public static int VariableParamFunc2(params int[] strs)
method TestEnumFunc (line 230) | public static int TestEnumFunc(LuaTestType x)
method TestGetType (line 235) | public static string TestGetType(Type x)
method Gen64BitInt (line 251) | public static void Gen64BitInt()
method CreateTestLuaObj (line 266) | public static ITestLuaClass CreateTestLuaObj()
method CalcAdd (line 283) | public static int CalcAdd(int x)
method calcadd (line 289) | public static int calcadd(int x)
method CalcDel (line 295) | public static int CalcDel(int x)
method CalcMul (line 301) | public static int CalcMul(int x)
method GenDelegate (line 307) | public static void GenDelegate()
method OverLoad1 (line 315) | public static int OverLoad1(int x, int y)
method OverLoad1 (line 320) | public static int OverLoad1(int x)
method OverLoad1 (line 325) | public static int OverLoad1(params int[] vars)
method OverLoad2 (line 335) | public static int OverLoad2(int x, float y)
method OverLoad2 (line 340) | public static int OverLoad2(string x, string y)
method OverLoad3 (line 345) | public static int OverLoad3(int x)
method OverLoad3 (line 350) | public static int OverLoad3(short y)
method OutRefFunc1 (line 356) | public static void OutRefFunc1(int x, out int y, ref int z)
method OutRefFunc2 (line 361) | public static void OutRefFunc2(ref int x, int y, out int z)
method OutRefFunc3 (line 366) | public static void OutRefFunc3(int x, out int y, ref int z)
method OutRefFunc4 (line 371) | public static int OutRefFunc4(int x, out int y, ref int z)
method OutRefFunc5 (line 377) | public static int OutRefFunc5(ref int x, int y, out int z)
method OutRefFunc6 (line 383) | public static int OutRefFunc6(int x, int y)
method OutRefFunc11 (line 388) | public static void OutRefFunc11(ITestLuaClass x, out ITestLuaClass y, ...
method OutRefFunc12 (line 394) | public static void OutRefFunc12(ref ITestLuaClass x, ITestLuaClass y, ...
method OutRefFunc13 (line 400) | public static void OutRefFunc13(ITestLuaClass x, out ITestLuaClass y, ...
method OutRefFunc14 (line 406) | public static int OutRefFunc14(ITestLuaClass x, out ITestLuaClass y, r...
method OutRefFunc15 (line 413) | public static int OutRefFunc15(ref ITestLuaClass x, ITestLuaClass y, o...
method OutRefFunc16 (line 420) | public static int OutRefFunc16(ITestLuaClass x, ITestLuaClass y)
method OutRefFunc21 (line 425) | public static void OutRefFunc21(TestDelegate x, out TestDelegate y, re...
method OutRefFunc22 (line 430) | public static void OutRefFunc22(ref TestDelegate x, TestDelegate y, ou...
method OutRefFunc23 (line 435) | public static void OutRefFunc23(TestDelegate x, out TestDelegate y, re...
method OutRefFunc24 (line 440) | public static int OutRefFunc24(TestDelegate x, out TestDelegate y, ref...
method OutRefFunc25 (line 446) | public static int OutRefFunc25(ref TestDelegate x, TestDelegate y, out...
method OutRefFunc26 (line 452) | public static int OutRefFunc26(TestDelegate x, TestDelegate y)
method Sum (line 457) | public int Sum(int a, int b, int c)
method Sum (line 462) | public static int Sum(int a, int b)
method GenericMethod (line 467) | public void GenericMethod<T>()
method GetPtr (line 474) | public IntPtr GetPtr()
method PrintPtr (line 481) | public byte PrintPtr(IntPtr p)
method VariableParamFuncDefault (line 490) | public int VariableParamFuncDefault(int d, int i = 1, params string[] ...
method StaticVariableParamFuncDefault (line 495) | public static double StaticVariableParamFuncDefault(double d, double i...
method FuncReturnByteArray (line 500) | public static byte[] FuncReturnByteArray()
method FuncReturnByte (line 506) | public static byte FuncReturnByte()
method FuncReturnIntArray (line 512) | public static int[] FuncReturnIntArray()
method FuncReturnInt (line 518) | public static int FuncReturnInt()
method TestImplicit (line 525) | public static LayerMask TestImplicit()
method VariableParamFunc (line 531) | public static int VariableParamFunc(int i, params int[] strs)
method FirstPushEnumFunc (line 536) | public static string FirstPushEnumFunc(int i)
class TestCastClass (line 564) | [LuaCallCSharp]
method TestFunc1 (line 567) | public bool TestFunc1()
type ITestLuaClass (line 574) | [LuaCallCSharp]
method TestFunc1 (line 577) | bool TestFunc1();
class TestLuaClass (line 581) | internal class TestLuaClass : ITestLuaClass
method TestFunc1 (line 583) | public bool TestFunc1()
class TestChineseString (line 590) | [LuaCallCSharp]
method GetShortChinString (line 594) | public string GetShortChinString()
method GetLongChineString (line 599) | public string GetLongChineString()
method GetCombineString (line 604) | public string GetCombineString()
method GetComplexString (line 609) | public string GetComplexString()
method GetHuoxingString (line 614) | public string GetHuoxingString()
class TestUlongAndLongType (line 626) | public class TestUlongAndLongType
method UlongAdd (line 649) | public ulong UlongAdd()
method LongAdd (line 675) | public long LongAdd()
type Employeestruct (line 688) | [LuaCallCSharp]
type ConStruct (line 723) | public struct ConStruct{
method ConStruct (line 727) | public ConStruct(int x, int y, string z)
type StaticPusherStructA (line 735) | [GCOptimize]
method StaticPusherStructA (line 741) | public StaticPusherStructA(byte a, sbyte b)
type StaticPusherStructB (line 749) | [GCOptimize]
method StaticPusherStructB (line 757) | public StaticPusherStructB(short a, ushort b, int c, uint d)
type StaticPusherStructAll (line 766) | [GCOptimize]
type ITest (line 778) | public interface ITest
method Add (line 780) | int Add(int x,int y);
type NoGenCodeStruct (line 783) | public struct NoGenCodeStruct:ITest{
method Add (line 877) | public int Add(int x, int y)
class NoGenCodeBaseClass (line 891) | public class NoGenCodeBaseClass
method InitStruct (line 893) | public NoGenCodeStruct InitStruct(out int add){
method SetStruct (line 912) | public void SetStruct(ref NoGenCodeStruct var, out NoGenCodeStruct value)
method GetStruct (line 931) | public NoGenCodeStruct GetStruct(){
method SetStruct (line 935) | public void SetStruct(GenCodeStruct var, out int add, out NoGenCodeStr...
method GetStaticVar (line 970) | public static NoGenCodeStruct GetStaticVar()
method SetStaticPusherStruct (line 976) | public void SetStaticPusherStruct(StaticPusherStructAll inVar, ref Sta...
class NoGenCodeDrivedClass (line 1008) | public class NoGenCodeDrivedClass:NoGenCodeBaseClass
method Add (line 1016) | public int Add(int x, int y)
method Add (line 1021) | public void Add(ConStruct invar, ref ConStruct refvar, out ConStruct o...
type HasConstructStruct (line 1032) | [LuaCallCSharp]
method HasConstructStruct (line 1037) | public HasConstructStruct(int x, int y, string z)
type IGenCodeTest (line 1045) | [LuaCallCSharp]
method Add (line 1048) | int Add(int x,int y);
type GenCodeStruct (line 1051) | [LuaCallCSharp]
method Add (line 1146) | public int Add(int x, int y)
class GenCodeBaseClass (line 1160) | [LuaCallCSharp]
method InitStruct (line 1163) | public GenCodeStruct InitStruct(out int add){
method SetStruct (line 1182) | public void SetStruct(ref GenCodeStruct var, out GenCodeStruct value)
method GetStruct (line 1201) | public GenCodeStruct GetStruct(){
method SetStruct (line 1205) | public void SetStruct(NoGenCodeStruct var, out int add, out GenCodeStr...
method SetStaticPusherStruct (line 1240) | public void SetStaticPusherStruct(StaticPusherStructAll inVar, ref Sta...
class GenCodeDrivedClass (line 1272) | [LuaCallCSharp]
method Add (line 1281) | public int Add(int x, int y)
method Add (line 1286) | public void Add(HasConstructStruct invar, ref HasConstructStruct refva...
class CClass (line 1296) | [LuaCallCSharp]
method CClass (line 1299) | public CClass(int x, int y, string z)
method Add (line 1310) | public void Add(HasConstructStruct invar, ref HasConstructStruct refva...
method VariableParamFunc (line 1317) | public int VariableParamFunc(params HasConstructStruct[] structs)
class BClass (line 1330) | public class BClass:CClass
method BClass (line 1332) | public BClass(int x, int y, string z):base(x, y, z)
method Sub (line 1343) | public void Sub(HasConstructStruct invar, ref HasConstructStruct refva...
class AClass (line 1354) | [LuaCallCSharp]
method AClass (line 1357) | public AClass(int x, int y , string z):base(x, y, z)
method Div (line 1362) | public int Div(int x, int y)
type NoGen2FloatStruct (line 1374) | public struct NoGen2FloatStruct{
method NoGen2FloatStruct (line 1377) | public NoGen2FloatStruct(float a, float b)
type NoGen3FloatStruct (line 1384) | public struct NoGen3FloatStruct{
method NoGen3FloatStruct (line 1388) | public NoGen3FloatStruct(float a, float b, float c)
type NoGen4FloatStruct (line 1396) | public struct NoGen4FloatStruct{
method NoGen4FloatStruct (line 1401) | public NoGen4FloatStruct(float a, float b, float c, float d)
type NoGen5FloatStruct (line 1410) | public struct NoGen5FloatStruct{
method NoGen5FloatStruct (line 1416) | public NoGen5FloatStruct(float a, float b, float c, float d, float e)
type NoGen6FloatStruct (line 1426) | public struct NoGen6FloatStruct{
method NoGen6FloatStruct (line 1433) | public NoGen6FloatStruct(float a, float b, float c, float d, float e, ...
class TestNoGenFloatStructClass (line 1444) | public class TestNoGenFloatStructClass {
method Add2 (line 1471) | public void Add2(ref NoGen2FloatStruct x, ref Gen2FloatStruct y)
method Sub3 (line 1479) | public void Sub3(ref NoGen3FloatStruct x, ref Gen3FloatStruct y)
method Multiply4 (line 1489) | public void Multiply4(ref NoGen4FloatStruct x, ref Gen4FloatStruct y)
method All5 (line 1501) | public void All5(ref NoGen5FloatStruct x, ref Gen5FloatStruct y)
method All6 (line 1515) | public void All6(ref NoGen6FloatStruct x, ref Gen6FloatStruct y)
type Gen2FloatStruct (line 1538) | [GCOptimize]
method Gen2FloatStruct (line 1543) | public Gen2FloatStruct(float a, float b)
type Gen3FloatStruct (line 1550) | [GCOptimize]
method Gen3FloatStruct (line 1556) | public Gen3FloatStruct(float a, float b, float c)
type Gen4FloatStruct (line 1564) | [GCOptimize]
method Gen4FloatStruct (line 1571) | public Gen4FloatStruct(float a, float b, float c, float d)
type Gen5FloatStruct (line 1580) | [GCOptimize]
method Gen5FloatStruct (line 1588) | public Gen5FloatStruct(float a, float b, float c, float d, float e)
type Gen6FloatStruct (line 1598) | [GCOptimize]
method Gen6FloatStruct (line 1607) | public Gen6FloatStruct(float a, float b, float c, float d, float e, fl...
class TestGenFloatStructClass (line 1618) | [LuaCallCSharp]
method Add2 (line 1646) | public void Add2(ref NoGen2FloatStruct x, ref Gen2FloatStruct y)
method Sub3 (line 1654) | public void Sub3(ref NoGen3FloatStruct x, ref Gen3FloatStruct y)
method Multiply4 (line 1664) | public void Multiply4(ref NoGen4FloatStruct x, ref Gen4FloatStruct y)
method All5 (line 1676) | public void All5(ref NoGen5FloatStruct x, ref Gen5FloatStruct y)
method All6 (line 1690) | public void All6(ref NoGen6FloatStruct x, ref Gen6FloatStruct y)
type NoGen2IntStruct (line 1713) | public struct NoGen2IntStruct{
method NoGen2IntStruct (line 1716) | public NoGen2IntStruct(int a, int b)
class TestReflectEventClass (line 1724) | public class TestReflectEventClass{
method CallEvent (line 1728) | public int CallEvent(float y)
class TestExtensionMethodForStruct (line 1736) | [LuaCallCSharp]
method PrintSalary (line 1739) | public static void PrintSalary(this Employeestruct i)
method GetIncomeForOneYear (line 1744) | public static int GetIncomeForOneYear(this Employeestruct i)
method Add (line 1749) | public static int Add(this Employeestruct i, Employeestruct d)
method Sub (line 1754) | public static void Sub(this Employeestruct i, Employeestruct d, out Em...
class TestExtensionMethodFOrClass (line 1766) | [LuaCallCSharp]
method PrintAllString (line 1769) | public static void PrintAllString(this TestChineseString i)
method GetLongStringLength (line 1774) | public static int GetLongStringLength(this TestChineseString i)
method Add (line 1779) | public static int Add(this TestChineseString i, TestChineseString d)
method Replace (line 1784) | public static void Replace(this TestChineseString i , TestChineseStrin...
class EmployeeTemplate (line 1793) | [LuaCallCSharp]
method GetSalary (line 1796) | public void GetSalary()
method GetBasicSalary (line 1802) | public abstract int GetBasicSalary();
method AddBonus (line 1803) | public abstract int AddBonus();
class Manager (line 1806) | [LuaCallCSharp]
method GetBasicSalary (line 1809) | public override int GetBasicSalary()
method AddBonus (line 1815) | public override int AddBonus()
class TableAutoTransSimpleClass (line 1822) | [GCOptimize]
method TableAutoTransSimpleClass (line 1826) | public TableAutoTransSimpleClass()
method TableAutoTransSimpleClass (line 1829) | public TableAutoTransSimpleClass(int x, string y, long z)
class TableAutoTransComplexClass (line 1863) | [GCOptimize]
method TableAutoTransComplexClass (line 1867) | public TableAutoTransComplexClass()
method TableAutoTransComplexClass (line 1871) | public TableAutoTransComplexClass(int A, TableAutoTransSimpleClass B )
type TableAutoTransSimpleStruct (line 1896) | [GCOptimize]
type TableAutoTransComplexStruct (line 1903) | [GCOptimize]
class TestTableAutoTransClass (line 1913) | [GCOptimize]
method SimpleClassMethod (line 1917) | public TableAutoTransSimpleClass SimpleClassMethod(TableAutoTransSimpl...
method ComplexClassMethod (line 1922) | public TableAutoTransComplexClass ComplexClassMethod(TableAutoTransCom...
method SimpleStructMethod (line 1927) | public TableAutoTransSimpleStruct SimpleStructMethod(TableAutoTransSim...
method ComplexStructMethod (line 1932) | public TableAutoTransComplexStruct ComplexStructMethod(TableAutoTransC...
method OneListMethod (line 1937) | public int OneListMethod(int[] args)
method TwoDimensionListMethod (line 1947) | public int TwoDimensionListMethod(int[][] args)
class ReferTestClass (line 1962) | [LuaCallCSharp]
method ReferTestClass (line 1965) | public ReferTestClass(int x, ref int y, out string z)
method ReferTestClass (line 1974) | public ReferTestClass(int x, out string z)
method Get_X_Y_ADD (line 1982) | public int Get_X_Y_ADD()
FILE: Test/UnitTest/xLuaTest/LuaTestObjReflect.cs
type LuaTestTypeReflect (line 7) | public enum LuaTestTypeReflect
type FirstPushEnumReflect (line 15) | public enum FirstPushEnumReflect
class LuaTestObjReflect (line 26) | public class LuaTestObjReflect
method CallEvent (line 187) | public int CallEvent(float y)
method CallStaticEvent (line 194) | public static int CallStaticEvent(float y)
method DefaultParaFuncSingle (line 199) | public static int DefaultParaFuncSingle(int i, string str = "abc")
method DefaultParaFuncMulti (line 204) | public static int DefaultParaFuncMulti(int i, string str = "abc", doub...
method VariableParamFunc (line 209) | public static int VariableParamFunc(int i, params string[] strs)
method TestEnumFunc (line 214) | public static int TestEnumFunc(LuaTestTypeReflect x)
method TestGetType (line 219) | public static string TestGetType(Type x)
method Gen64BitInt (line 235) | public static void Gen64BitInt()
method CreateTestLuaObj (line 250) | public static ITestLuaClassReflect CreateTestLuaObj()
method CalcAdd (line 267) | public static int CalcAdd(int x)
method calcadd (line 273) | public static int calcadd(int x)
method CalcDel (line 279) | public static int CalcDel(int x)
method CalcMul (line 285) | public static int CalcMul(int x)
method GenDelegate (line 291) | public static void GenDelegate()
method OverLoad1 (line 298) | public static int OverLoad1(int x, int y)
method OverLoad1 (line 303) | public static int OverLoad1(int x)
method OverLoad1 (line 308) | public static int OverLoad1(params int[] vars)
method OverLoad2 (line 318) | public static int OverLoad2(int x, float y)
method OverLoad2 (line 323) | public static int OverLoad2(string x, string y)
method OverLoad3 (line 328) | public static int OverLoad3(int x)
method OverLoad3 (line 333) | public static int OverLoad3(short y)
method OutRefFunc1 (line 339) | public static void OutRefFunc1(int x, out int y, ref int z)
method OutRefFunc2 (line 344) | public static void OutRefFunc2(ref int x, int y, out int z)
method OutRefFunc3 (line 349) | public static void OutRefFunc3(int x, out int y, ref int z)
method OutRefFunc4 (line 354) | public static int OutRefFunc4(int x, out int y, ref int z)
method OutRefFunc5 (line 360) | public static int OutRefFunc5(ref int x, int y, out int z)
method OutRefFunc6 (line 366) | public static int OutRefFunc6(int x, int y)
method OutRefFunc11 (line 371) | public static void OutRefFunc11(ITestLuaClassReflect x, out ITestLuaCl...
method OutRefFunc12 (line 377) | public static void OutRefFunc12(ref ITestLuaClassReflect x, ITestLuaCl...
method OutRefFunc13 (line 383) | public static void OutRefFunc13(ITestLuaClassReflect x, out ITestLuaCl...
method OutRefFunc14 (line 389) | public static int OutRefFunc14(ITestLuaClassReflect x, out ITestLuaCla...
method OutRefFunc15 (line 396) | public static int OutRefFunc15(ref ITestLuaClassReflect x, ITestLuaCla...
method OutRefFunc16 (line 403) | public static int OutRefFunc16(ITestLuaClassReflect x, ITestLuaClassRe...
method OutRefFunc21 (line 408) | public static void OutRefFunc21(TestDelegateReflect x, out TestDelegat...
method OutRefFunc22 (line 413) | public static void OutRefFunc22(ref TestDelegateReflect x, TestDelegat...
method OutRefFunc23 (line 418) | public static void OutRefFunc23(TestDelegateReflect x, out TestDelegat...
method OutRefFunc24 (line 423) | public static int OutRefFunc24(TestDelegateReflect x, out TestDelegate...
method OutRefFunc25 (line 429) | public static int OutRefFunc25(ref TestDelegateReflect x, TestDelegate...
method OutRefFunc26 (line 435) | public static int OutRefFunc26(TestDelegateReflect x, TestDelegateRefl...
method Sum (line 440) | public int Sum(int a, int b, int c)
method Sum (line 445) | public static int Sum(int a, int b)
method GenericMethod (line 450) | public void GenericMethod<T>()
method GetPtr (line 457) | public IntPtr GetPtr()
method PrintPtr (line 464) | public byte PrintPtr(IntPtr p)
method VariableParamFuncDefault (line 472) | public int VariableParamFuncDefault(int d, int i = 1, params string[] ...
method StaticVariableParamFuncDefault (line 477) | public static double StaticVariableParamFuncDefault(double d, double i...
method FuncReturnByteArray (line 482) | public static byte[] FuncReturnByteArray()
method FuncReturnByte (line 488) | public static byte FuncReturnByte()
method FuncReturnIntArray (line 494) | public static int[] FuncReturnIntArray()
method FuncReturnInt (line 500) | public static int FuncReturnInt()
method TestImplicit (line 507) | public static LayerMask TestImplicit()
method VariableParamFunc (line 513) | public static int VariableParamFunc(int i, params int[] strs)
method VariableParamFunc2 (line 518) | public static int VariableParamFunc2(params int[] strs)
method FirstPushEnumFunc (line 523) | public static string FirstPushEnumFunc(int i)
class TestCastClassReflect (line 551) | public class TestCastClassReflect
method TestFunc1 (line 553) | public bool TestFunc1()
type ITestLuaClassReflect (line 560) | public interface ITestLuaClassReflect
method TestFunc1 (line 562) | bool TestFunc1();
class TestLuaClassReflect (line 566) | internal class TestLuaClassReflect : ITestLuaClassReflect
method TestFunc1 (line 568) | public bool TestFunc1()
class TestChineseStringReflect (line 575) | public class TestChineseStringReflect
method GetShortChinString (line 578) | public string GetShortChinString()
method GetLongChineString (line 583) | public string GetLongChineString()
method GetCombineString (line 588) | public string GetCombineString()
method GetComplexString (line 593) | public string GetComplexString()
method GetHuoxingString (line 598) | public string GetHuoxingString()
class TestUlongAndLongTypeReflect (line 610) | public class TestUlongAndLongTypeReflect
method UlongAdd (line 633) | public ulong UlongAdd()
method LongAdd (line 659) | public long LongAdd()
type EmployeestructReflect (line 672) | public struct EmployeestructReflect
type HasConstructStructReflect (line 705) | public struct HasConstructStructReflect{
method HasConstructStructReflect (line 709) | public HasConstructStructReflect(int x, int y, string z)
class CClassReflect (line 717) | public class CClassReflect
method CClassReflect (line 719) | public CClassReflect(int x, int y, string z)
method Add (line 730) | public void Add(HasConstructStructReflect invar, ref HasConstructStruc...
method VariableParamFunc (line 737) | public int VariableParamFunc(params HasConstructStructReflect[] structs)
class BClassReflect (line 750) | public class BClassReflect:CClassReflect
method BClassReflect (line 752) | public BClassReflect(int x, int y, string z):base(x, y, z)
method Sub (line 763) | public void Sub(HasConstructStructReflect invar, ref HasConstructStruc...
class AClassReflect (line 774) | public class AClassReflect:BClassReflect
method AClassReflect (line 776) | public AClassReflect(int x, int y , string z):base(x, y, z)
method Div (line 781) | public int Div(int x, int y)
class TestExtensionMethodForStructReflect (line 795) | [ReflectionUse]
method PrintSalary (line 798) | public static void PrintSalary(this EmployeestructReflect i)
method GetIncomeForOneYear (line 803) | public static int GetIncomeForOneYear(this EmployeestructReflect i)
method Add (line 808) | public static int Add(this EmployeestructReflect i, EmployeestructRefl...
method Sub (line 813) | public static void Sub(this EmployeestructReflect i, EmployeestructRef...
class TestExtensionMethodForClassReflect (line 823) | [ReflectionUse]
method PrintAllString (line 826) | public static void PrintAllString(this TestChineseStringReflect i)
method GetLongStringLength (line 831) | public static int GetLongStringLength(this TestChineseStringReflect i)
method Add (line 836) | public static int Add(this TestChineseStringReflect i, TestChineseStri...
method Replace (line 841) | public static void Replace(this TestChineseStringReflect i , TestChine...
class EmployeeTemplateReflect (line 850) | public abstract class EmployeeTemplateReflect
method GetSalary (line 852) | public void GetSalary()
method GetBasicSalary (line 857) | public abstract int GetBasicSalary();
method AddBonus (line 858) | public abstract int AddBonus();
class ManagerReflect (line 861) | public class ManagerReflect : EmployeeTemplateReflect
method GetBasicSalary (line 863) | public override int GetBasicSalary()
method AddBonus (line 869) | public override int AddBonus()
class TableAutoTransSimpleClassReflect (line 876) | public class TableAutoTransSimpleClassReflect
method TableAutoTransSimpleClassReflect (line 878) | public TableAutoTransSimpleClassReflect()
method TableAutoTransSimpleClassReflect (line 881) | public TableAutoTransSimpleClassReflect(int x, string y, long z)
class TableAutoTransComplexClassReflect (line 915) | public class TableAutoTransComplexClassReflect
method TableAutoTransComplexClassReflect (line 917) | public TableAutoTransComplexClassReflect()
method TableAutoTransComplexClassReflect (line 921) | public TableAutoTransComplexClassReflect(int A, TableAutoTransSimpleCl...
type TableAutoTransSimpleStructReflect (line 946) | public struct TableAutoTransSimpleStructReflect
type TableAutoTransComplexStructReflect (line 952) | public struct TableAutoTransComplexStructReflect
class TestTableAutoTransClassReflect (line 959) | public class TestTableAutoTransClassReflect
method SimpleClassMethod (line 961) | public TableAutoTransSimpleClassReflect SimpleClassMethod(TableAutoTra...
method ComplexClassMethod (line 966) | public TableAutoTransComplexClassReflect ComplexClassMethod(TableAutoT...
method SimpleStructMethod (line 971) | public TableAutoTransSimpleStructReflect SimpleStructMethod(TableAutoT...
method ComplexStructMethod (line 976) | public TableAutoTransComplexStructReflect ComplexStructMethod(TableAut...
method OneListMethod (line 981) | public int OneListMethod(int[] args)
method TwoDimensionListMethod (line 991) | public int TwoDimensionListMethod(int[][] args)
class ReferTestClassReflect (line 1007) | public class ReferTestClassReflect
method ReferTestClassReflect (line 1009) | public ReferTestClassReflect(int x, ref int y, out string z)
method ReferTestClassReflect (line 1018) | public ReferTestClassReflect(int x, out string z)
method Get_X_Y_ADD (line 1026) | public int Get_X_Y_ADD()
FILE: Test/UnitTest/xLuaTest/Main.cs
class Main (line 6) | public class Main : MonoBehaviour {
method Start (line 9) | void Start () {
method Update (line 15) | void Update () {
FILE: WebGLPlugins/i64lib.c
type IntegerType (line 42) | enum IntegerType {
type Integer64 (line 48) | typedef struct {
function LUALIB_API (line 57) | LUALIB_API void lua_pushint64(lua_State* L, int64_t n) {
function LUALIB_API (line 66) | LUALIB_API int lua_isint64(lua_State* L, int pos) {
function LUALIB_API (line 83) | LUALIB_API int lua_isint64_or_uint64(lua_State* L, int pos) {
function LUALIB_API (line 100) | LUALIB_API int64_t lua_toint64(lua_State* L, int pos) {
function LUALIB_API (line 121) | LUALIB_API void lua_pushuint64(lua_State* L, uint64_t n) {
function LUALIB_API (line 131) | LUALIB_API int lua_isuint64(lua_State* L, int pos) {
function LUALIB_API (line 148) | LUALIB_API uint64_t lua_touint64(lua_State* L, int pos) {
function LUALIB_API (line 168) | LUALIB_API void lua_pushuint64(lua_State* L, uint64_t n) {
function LUALIB_API (line 172) | LUALIB_API int lua_isuint64(lua_State* L, int pos) {
function LUALIB_API (line 176) | LUALIB_API uint64_t lua_touint64(lua_State* L, int pos) {
function LUALIB_API (line 181) | LUALIB_API int lua_isinteger64(lua_State* L, int pos) {
function Integer64 (line 198) | static Integer64 lua_checkinteger64(lua_State* L, int pos) {
function int64_add (line 223) | static int int64_add(lua_State* L) {
function int64_sub (line 237) | static int int64_sub(lua_State* L) {
function int64_mul (line 252) | static int int64_mul(lua_State* L) {
function int64_div (line 266) | static int int64_div(lua_State* L) {
function int64_mod (line 284) | static int int64_mod(lua_State* L) {
function int64_unm (line 302) | static int int64_unm(lua_State* L) {
function int64_pow (line 308) | static int int64_pow(lua_State* L) {
function int64_eq (line 322) | static int int64_eq(lua_State* L) {
function int64_lt (line 336) | static int int64_lt(lua_State* L) {
function int64_le (line 350) | static int int64_le(lua_State* L) {
function int64_tostring (line 364) | static int int64_tostring(lua_State* L) {
function LUALIB_API (line 379) | LUALIB_API void lua_pushint64(lua_State* L, int64_t n) {
function LUALIB_API (line 382) | LUALIB_API void lua_pushuint64(lua_State* L, uint64_t n) {
function LUALIB_API (line 386) | LUALIB_API int lua_isint64(lua_State* L, int pos) {
function LUALIB_API (line 390) | LUALIB_API int lua_isuint64(lua_State* L, int pos) {
function LUALIB_API (line 394) | LUALIB_API int64_t lua_toint64(lua_State* L, int pos) {
function LUALIB_API (line 398) | LUALIB_API uint64_t lua_touint64(lua_State* L, int pos) {
function uint64_tostring (line 403) | static int uint64_tostring(lua_State* L) {
function uint64_compare (line 417) | static int uint64_compare(lua_State* L) {
function uint64_divide (line 424) | static int uint64_divide(lua_State* L) {
function uint64_remainder (line 434) | static int uint64_remainder(lua_State* L) {
function LUALIB_API (line 444) | LUALIB_API int uint64_parse(lua_State* L)
function LUALIB_API (line 451) | LUALIB_API int luaopen_i64lib(lua_State* L)
FILE: WebGLPlugins/lapi.c
function TValue (line 60) | static TValue *index2addr (lua_State *L, int idx) {
function growstack (line 91) | static void growstack (lua_State *L, void *ud) {
function LUA_API (line 97) | LUA_API int lua_checkstack (lua_State *L, int n) {
function LUA_API (line 118) | LUA_API void lua_xmove (lua_State *from, lua_State *to, int n) {
function LUA_API (line 134) | LUA_API lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf) {
function LUA_API (line 144) | LUA_API const lua_Number *lua_version (lua_State *L) {
function LUA_API (line 160) | LUA_API int lua_absindex (lua_State *L, int idx) {
function LUA_API (line 167) | LUA_API int lua_gettop (lua_State *L) {
function LUA_API (line 172) | LUA_API void lua_settop (lua_State *L, int idx) {
function reverse (line 193) | static void reverse (lua_State *L, StkId from, StkId to) {
function LUA_API (line 207) | LUA_API void lua_rotate (lua_State *L, int idx, int n) {
function LUA_API (line 222) | LUA_API void lua_copy (lua_State *L, int fromidx, int toidx) {
function LUA_API (line 237) | LUA_API void lua_pushvalue (lua_State *L, int idx) {
function LUA_API (line 251) | LUA_API int lua_type (lua_State *L, int idx) {
function LUA_API (line 257) | LUA_API const char *lua_typename (lua_State *L, int t) {
function LUA_API (line 264) | LUA_API int lua_iscfunction (lua_State *L, int idx) {
function LUA_API (line 270) | LUA_API int lua_isinteger (lua_State *L, int idx) {
function LUA_API (line 276) | LUA_API int lua_isnumber (lua_State *L, int idx) {
function LUA_API (line 283) | LUA_API int lua_isstring (lua_State *L, int idx) {
function LUA_API (line 289) | LUA_API int lua_isuserdata (lua_State *L, int idx) {
function LUA_API (line 295) | LUA_API int lua_rawequal (lua_State *L, int index1, int index2) {
function LUA_API (line 302) | LUA_API void lua_arith (lua_State *L, int op) {
function LUA_API (line 318) | LUA_API int lua_compare (lua_State *L, int index1, int index2, int op) {
function LUA_API (line 337) | LUA_API size_t lua_stringtonumber (lua_State *L, const char *s) {
function LUA_API (line 345) | LUA_API lua_Number lua_tonumberx (lua_State *L, int idx, int *pisnum) {
function LUA_API (line 356) | LUA_API lua_Integer lua_tointegerx (lua_State *L, int idx, int *pisnum) {
function LUA_API (line 367) | LUA_API int lua_toboolean (lua_State *L, int idx) {
function LUA_API (line 373) | LUA_API const char *lua_tolstring (lua_State *L, int idx, size_t *len) {
function LUA_API (line 392) | LUA_API size_t lua_rawlen (lua_State *L, int idx) {
function LUA_API (line 404) | LUA_API lua_CFunction lua_tocfunction (lua_State *L, int idx) {
function LUA_API (line 413) | LUA_API void *lua_touserdata (lua_State *L, int idx) {
function LUA_API (line 423) | LUA_API lua_State *lua_tothread (lua_State *L, int idx) {
function LUA_API (line 429) | LUA_API const void *lua_topointer (lua_State *L, int idx) {
function LUA_API (line 450) | LUA_API void lua_pushnil (lua_State *L) {
function LUA_API (line 458) | LUA_API void lua_pushnumber (lua_State *L, lua_Number n) {
function LUA_API (line 466) | LUA_API void lua_pushinteger (lua_State *L, lua_Integer n) {
function LUA_API (line 479) | LUA_API const char *lua_pushlstring (lua_State *L, const char *s, size_t...
function LUA_API (line 491) | LUA_API const char *lua_pushstring (lua_State *L, const char *s) {
function LUA_API (line 508) | LUA_API const char *lua_pushvfstring (lua_State *L, const char *fmt,
function LUA_API (line 519) | LUA_API const char *lua_pushfstring (lua_State *L, const char *fmt, ...) {
function LUA_API (line 532) | LUA_API void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n) {
function LUA_API (line 556) | LUA_API void lua_pushboolean (lua_State *L, int b) {
function LUA_API (line 564) | LUA_API void lua_pushlightuserdata (lua_State *L, void *p) {
function LUA_API (line 572) | LUA_API int lua_pushthread (lua_State *L) {
function auxgetstr (line 587) | static int auxgetstr (lua_State *L, const TValue *t, const char *k) {
function LUA_API (line 604) | LUA_API int lua_getglobal (lua_State *L, const char *name) {
function LUA_API (line 611) | LUA_API int lua_gettable (lua_State *L, int idx) {
function LUA_API (line 621) | LUA_API int lua_getfield (lua_State *L, int idx, const char *k) {
function LUA_API (line 627) | LUA_API int lua_geti (lua_State *L, int idx, lua_Integer n) {
function LUA_API (line 646) | LUA_API int lua_rawget (lua_State *L, int idx) {
function LUA_API (line 657) | LUA_API int lua_rawgeti (lua_State *L, int idx, lua_Integer n) {
function LUA_API (line 669) | LUA_API int lua_rawgetp (lua_State *L, int idx, const void *p) {
function LUA_API (line 683) | LUA_API void lua_createtable (lua_State *L, int narray, int nrec) {
function LUA_API (line 696) | LUA_API int lua_getmetatable (lua_State *L, int objindex) {
function LUA_API (line 723) | LUA_API int lua_getuservalue (lua_State *L, int idx) {
function auxsetstr (line 742) | static void auxsetstr (lua_State *L, const TValue *t, const char *k) {
function LUA_API (line 758) | LUA_API void lua_setglobal (lua_State *L, const char *name) {
function LUA_API (line 765) | LUA_API void lua_settable (lua_State *L, int idx) {
function LUA_API (line 776) | LUA_API void lua_setfield (lua_State *L, int idx, const char *k) {
function LUA_API (line 782) | LUA_API void lua_seti (lua_State *L, int idx, lua_Integer n) {
function LUA_API (line 800) | LUA_API void lua_rawset (lua_State *L, int idx) {
function LUA_API (line 816) | LUA_API void lua_rawseti (lua_State *L, int idx, lua_Integer n) {
function LUA_API (line 829) | LUA_API void lua_rawsetp (lua_State *L, int idx, const void *p) {
function LUA_API (line 845) | LUA_API int lua_setmetatable (lua_State *L, int objindex) {
function LUA_API (line 885) | LUA_API void lua_setuservalue (lua_State *L, int idx) {
function LUA_API (line 908) | LUA_API void lua_callk (lua_State *L, int nargs, int nresults,
type CallS (line 934) | struct CallS { /* data to 'f_call' */
function f_call (line 940) | static void f_call (lua_State *L, void *ud) {
function LUA_API (line 947) | LUA_API int lua_pcallk (lua_State *L, int nargs, int nresults, int errfunc,
function LUA_API (line 991) | LUA_API int lua_load (lua_State *L, lua_Reader reader, void *data,
function LUA_API (line 1015) | LUA_API int lua_dump (lua_State *L, lua_Writer writer, void *data, int s...
function LUA_API (line 1030) | LUA_API int lua_status (lua_State *L) {
function LUA_API (line 1039) | LUA_API int lua_gc (lua_State *L, int what, int data) {
function LUA_API (line 1113) | LUA_API int lua_error (lua_State *L) {
function LUA_API (line 1122) | LUA_API int lua_next (lua_State *L, int idx) {
function LUA_API (line 1139) | LUA_API void lua_concat (lua_State *L, int n) {
function LUA_API (line 1155) | LUA_API void lua_len (lua_State *L, int idx) {
function LUA_API (line 1165) | LUA_API lua_Alloc lua_getallocf (lua_State *L, void **ud) {
function LUA_API (line 1175) | LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud) {
function LUA_API (line 1183) | LUA_API void *lua_newuserdata (lua_State *L, size_t size) {
function LUA_API (line 1221) | LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n) {
function LUA_API (line 1235) | LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n) {
function UpVal (line 1256) | static UpVal **getupvalref (lua_State *L, int fidx, int n, LClosure **pf) {
function LUA_API (line 1267) | LUA_API void *lua_upvalueid (lua_State *L, int fidx, int n) {
function LUA_API (line 1286) | LUA_API void lua_upvaluejoin (lua_State *L, int fidx1, int n1,
FILE: WebGLPlugins/lauxlib.c
function findfield (line 46) | static int findfield (lua_State *L, int objidx, int level) {
function pushglobalfuncname (line 73) | static int pushglobalfuncname (lua_State *L, lua_Debug *ar) {
function pushfuncname (line 94) | static void pushfuncname (lua_State *L, lua_Debug *ar) {
function lastlevel (line 110) | static int lastlevel (lua_State *L) {
function LUALIB_API (line 125) | LUALIB_API void luaL_traceback (lua_State *L, lua_State *L1,
function LUALIB_API (line 164) | LUALIB_API int luaL_argerror (lua_State *L, int arg, const char *extrams...
function typeerror (line 182) | static int typeerror (lua_State *L, int arg, const char *tname) {
function tag_error (line 196) | static void tag_error (lua_State *L, int arg, int tag) {
function LUALIB_API (line 205) | LUALIB_API void luaL_where (lua_State *L, int level) {
function LUALIB_API (line 223) | LUALIB_API int luaL_error (lua_State *L, const char *fmt, ...) {
function LUALIB_API (line 234) | LUALIB_API int luaL_fileresult (lua_State *L, int stat, const char *fnam...
function LUALIB_API (line 274) | LUALIB_API int luaL_execresult (lua_State *L, int stat) {
function LUALIB_API (line 299) | LUALIB_API int luaL_newmetatable (lua_State *L, const char *tname) {
function LUALIB_API (line 312) | LUALIB_API void luaL_setmetatable (lua_State *L, const char *tname) {
function LUALIB_API (line 318) | LUALIB_API void *luaL_testudata (lua_State *L, int ud, const char *tname) {
function LUALIB_API (line 333) | LUALIB_API void *luaL_checkudata (lua_State *L, int ud, const char *tnam...
function LUALIB_API (line 348) | LUALIB_API int luaL_checkoption (lua_State *L, int arg, const char *def,
function LUALIB_API (line 368) | LUALIB_API void luaL_checkstack (lua_State *L, int space, const char *ms...
function LUALIB_API (line 378) | LUALIB_API void luaL_checktype (lua_State *L, int arg, int t) {
function LUALIB_API (line 384) | LUALIB_API void luaL_checkany (lua_State *L, int arg) {
function LUALIB_API (line 390) | LUALIB_API const char *luaL_checklstring (lua_State *L, int arg, size_t ...
function LUALIB_API (line 397) | LUALIB_API const char *luaL_optlstring (lua_State *L, int arg,
function LUALIB_API (line 408) | LUALIB_API lua_Number luaL_checknumber (lua_State *L, int arg) {
function LUALIB_API (line 417) | LUALIB_API lua_Number luaL_optnumber (lua_State *L, int arg, lua_Number ...
function interror (line 422) | static void interror (lua_State *L, int arg) {
function LUALIB_API (line 430) | LUALIB_API lua_Integer luaL_checkinteger (lua_State *L, int arg) {
function LUALIB_API (line 440) | LUALIB_API lua_Integer luaL_optinteger (lua_State *L, int arg,
type UBox (line 455) | typedef struct UBox {
function boxgc (line 476) | static int boxgc (lua_State *L) {
function LUALIB_API (line 505) | LUALIB_API char *luaL_prepbuffsize (luaL_Buffer *B, size_t sz) {
function LUALIB_API (line 528) | LUALIB_API void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l) {
function LUALIB_API (line 537) | LUALIB_API void luaL_addstring (luaL_Buffer *B, const char *s) {
function LUALIB_API (line 542) | LUALIB_API void luaL_pushresult (luaL_Buffer *B) {
function LUALIB_API (line 552) | LUALIB_API void luaL_pushresultsize (luaL_Buffer *B, size_t sz) {
function LUALIB_API (line 558) | LUALIB_API void luaL_addvalue (luaL_Buffer *B) {
function LUALIB_API (line 569) | LUALIB_API void luaL_buffinit (lua_State *L, luaL_Buffer *B) {
function LUALIB_API (line 577) | LUALIB_API char *luaL_buffinitsize (lua_State *L, luaL_Buffer *B, size_t...
function LUALIB_API (line 595) | LUALIB_API int luaL_ref (lua_State *L, int t) {
function LUALIB_API (line 616) | LUALIB_API void luaL_unref (lua_State *L, int t, int ref) {
type LoadF (line 635) | typedef struct LoadF {
function errfile (line 660) | static int errfile (lua_State *L, const char *what, int fnameindex) {
function skipBOM (line 669) | static int skipBOM (LoadF *lf) {
function skipcomment (line 690) | static int skipcomment (LoadF *lf, int *cp) {
function LUALIB_API (line 703) | LUALIB_API int luaL_loadfilex (lua_State *L, const char *filename,
type LoadS (line 739) | typedef struct LoadS {
function LUALIB_API (line 755) | LUALIB_API int luaL_loadbufferx (lua_State *L, const char *buff, size_t ...
function LUALIB_API (line 764) | LUALIB_API int luaL_loadstring (lua_State *L, const char *s) {
function LUALIB_API (line 772) | LUALIB_API int luaL_getmetafield (lua_State *L, int obj, const char *eve...
function LUALIB_API (line 788) | LUALIB_API int luaL_callmeta (lua_State *L, int obj, const char *event) {
function LUALIB_API (line 798) | LUALIB_API lua_Integer luaL_len (lua_State *L, int idx) {
function LUALIB_API (line 810) | LUALIB_API const char *luaL_tolstring (lua_State *L, int idx, size_t *le...
function libsize (line 884) | static int libsize (const luaL_Reg *l) {
function LUALIB_API (line 897) | LUALIB_API void luaL_pushmodule (lua_State *L, const char *modname,
function LUALIB_API (line 913) | LUALIB_API void luaL_openlib (lua_State *L, const char *libname,
function LUALIB_API (line 934) | LUALIB_API void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup) {
function LUALIB_API (line 951) | LUALIB_API int luaL_getsubtable (lua_State *L, int idx, const char *fnam...
function LUALIB_API (line 971) | LUALIB_API void luaL_requiref (lua_State *L, const char *modname,
function LUALIB_API (line 991) | LUALIB_API const char *luaL_gsub (lua_State *L, const char *s, const cha...
function panic (line 1019) | static int panic (lua_State *L) {
function LUALIB_API (line 1026) | LUALIB_API lua_State *luaL_newstate (void) {
function LUALIB_API (line 1033) | LUALIB_API void luaL_checkversion_ (lua_State *L, lua_Number ver, size_t...
FILE: WebGLPlugins/lauxlib.h
type luaL_Reg (line 31) | typedef struct luaL_Reg {
type luaL_Buffer (line 148) | typedef struct luaL_Buffer {
type luaL_Stream (line 193) | typedef struct luaL_Stream {
FILE: WebGLPlugins/lbaselib.c
function luaB_print (line 24) | static int luaB_print (lua_State *L) {
function luaB_tonumber (line 69) | static int luaB_tonumber (lua_State *L) {
function luaB_error (line 102) | static int luaB_error (lua_State *L) {
function luaB_getmetatable (line 114) | static int luaB_getmetatable (lua_State *L) {
function luaB_setmetatable (line 125) | static int luaB_setmetatable (lua_State *L) {
function luaB_rawequal (line 138) | static int luaB_rawequal (lua_State *L) {
function luaB_rawlen (line 146) | static int luaB_rawlen (lua_State *L) {
function luaB_rawget (line 155) | static int luaB_rawget (lua_State *L) {
function luaB_rawset (line 163) | static int luaB_rawset (lua_State *L) {
function luaB_collectgarbage (line 173) | static int luaB_collectgarbage (lua_State *L) {
function luaB_type (line 201) | static int luaB_type (lua_State *L) {
function pairsmeta (line 209) | static int pairsmeta (lua_State *L, const char *method, int iszero,
function luaB_next (line 226) | static int luaB_next (lua_State *L) {
function luaB_pairs (line 238) | static int luaB_pairs (lua_State *L) {
function ipairsaux (line 246) | static int ipairsaux (lua_State *L) {
function luaB_ipairs (line 257) | static int luaB_ipairs (lua_State *L) {
function load_aux (line 270) | static int load_aux (lua_State *L, int status, int envidx) {
function luaB_loadfile (line 287) | static int luaB_loadfile (lua_State *L) {
function luaB_load (line 334) | static int luaB_load (lua_State *L) {
function dofilecont (line 356) | static int dofilecont (lua_State *L, int d1, lua_KContext d2) {
function luaB_dofile (line 362) | static int luaB_dofile (lua_State *L) {
function luaB_assert (line 372) | static int luaB_assert (lua_State *L) {
function luaB_select (line 385) | static int luaB_select (lua_State *L) {
function finishpcall (line 408) | static int finishpcall (lua_State *L, int status, lua_KContext extra) {
function luaB_pcall (line 419) | static int luaB_pcall (lua_State *L) {
function luaB_xpcall (line 434) | static int luaB_xpcall (lua_State *L) {
function luaB_tostring (line 446) | static int luaB_tostring (lua_State *L) {
function LUAMOD_API (line 486) | LUAMOD_API int luaopen_base (lua_State *L) {
FILE: WebGLPlugins/lbitlib.c
function lua_Unsigned (line 49) | static lua_Unsigned andaux (lua_State *L) {
function b_and (line 58) | static int b_and (lua_State *L) {
function b_test (line 65) | static int b_test (lua_State *L) {
function b_or (line 72) | static int b_or (lua_State *L) {
function b_xor (line 82) | static int b_xor (lua_State *L) {
function b_not (line 92) | static int b_not (lua_State *L) {
function b_shift (line 99) | static int b_shift (lua_State *L, lua_Unsigned r, lua_Integer i) {
function b_lshift (line 116) | static int b_lshift (lua_State *L) {
function b_rshift (line 121) | static int b_rshift (lua_State *L) {
function b_arshift (line 126) | static int b_arshift (lua_State *L) {
function b_rot (line 141) | static int b_rot (lua_State *L, lua_Integer d) {
function b_lrot (line 152) | static int b_lrot (lua_State *L) {
function b_rrot (line 157) | static int b_rrot (lua_State *L) {
function fieldargs (line 168) | static int fieldargs (lua_State *L, int farg, int *width) {
function b_extract (line 180) | static int b_extract (lua_State *L) {
function b_replace (line 190) | static int b_replace (lua_State *L) {
function LUAMOD_API (line 220) | LUAMOD_API int luaopen_bit32 (lua_State *L) {
function LUAMOD_API (line 229) | LUAMOD_API int luaopen_bit32 (lua_State *L) {
FILE: WebGLPlugins/lcode.c
function tonumeral (line 43) | static int tonumeral(const expdesc *e, TValue *v) {
function luaK_nil (line 64) | void luaK_nil (FuncState *fs, int from, int n) {
function getjump (line 90) | static int getjump (FuncState *fs, int pc) {
function fixjump (line 103) | static void fixjump (FuncState *fs, int pc, int dest) {
function luaK_concat (line 116) | void luaK_concat (FuncState *fs, int *l1, int l2) {
function luaK_jump (line 136) | int luaK_jump (FuncState *fs) {
function luaK_ret (line 149) | void luaK_ret (FuncState *fs, int first, int nret) {
function condjump (line 158) | static int condjump (FuncState *fs, OpCode op, int A, int B, int C) {
function luaK_getlabel (line 168) | int luaK_getlabel (FuncState *fs) {
function Instruction (line 179) | static Instruction *getjumpcontrol (FuncState *fs, int pc) {
function patchtestreg (line 195) | static int patchtestreg (FuncState *fs, int node, int reg) {
function removevalues (line 213) | static void removevalues (FuncState *fs, int list) {
function patchlistaux (line 224) | static void patchlistaux (FuncState *fs, int list, int vtarget, int reg,
function dischargejpc (line 242) | static void dischargejpc (FuncState *fs) {
function luaK_patchtohere (line 252) | void luaK_patchtohere (FuncState *fs, int list) {
function luaK_patchlist (line 263) | void luaK_patchlist (FuncState *fs, int list, int target) {
function luaK_patchclose (line 278) | void luaK_patchclose (FuncState *fs, int list, int level) {
function luaK_code (line 293) | static int luaK_code (FuncState *fs, Instruction i) {
function luaK_codeABC (line 312) | int luaK_codeABC (FuncState *fs, OpCode o, int a, int b, int c) {
function luaK_codeABx (line 324) | int luaK_codeABx (FuncState *fs, OpCode o, int a, unsigned int bc) {
function codeextraarg (line 335) | static int codeextraarg (FuncState *fs, int a) {
function luaK_codek (line 346) | int luaK_codek (FuncState *fs, int reg, int k) {
function luaK_checkstack (line 361) | void luaK_checkstack (FuncState *fs, int n) {
function luaK_reserveregs (line 375) | void luaK_reserveregs (FuncState *fs, int n) {
function freereg (line 386) | static void freereg (FuncState *fs, int reg) {
function freeexp (line 397) | static void freeexp (FuncState *fs, expdesc *e) {
function freeexps (line 407) | static void freeexps (FuncState *fs, expdesc *e1, expdesc *e2) {
function addk (line 428) | static int addk (FuncState *fs, TValue *key, TValue *v) {
function luaK_stringK (line 458) | int luaK_stringK (FuncState *fs, TString *s) {
function luaK_intK (line 471) | int luaK_intK (FuncState *fs, lua_Integer n) {
function luaK_numberK (line 481) | static int luaK_numberK (FuncState *fs, lua_Number r) {
function boolK (line 491) | static int boolK (FuncState *fs, int b) {
function nilK (line 501) | static int nilK (FuncState *fs) {
function luaK_setreturns (line 515) | void luaK_setreturns (FuncState *fs, expdesc *e, int nresults) {
function luaK_setoneret (line 539) | void luaK_setoneret (FuncState *fs, expdesc *e) {
function luaK_dischargevars (line 556) | void luaK_dischargevars (FuncState *fs, expdesc *e) {
function discharge2reg (line 595) | static void discharge2reg (FuncState *fs, expdesc *e, int reg) {
function discharge2anyreg (line 641) | static void discharge2anyreg (FuncState *fs, expdesc *e) {
function code_loadbool (line 649) | static int code_loadbool (FuncState *fs, int A, int b, int jump) {
function need_value (line 659) | static int need_value (FuncState *fs, int list) {
function exp2reg (line 675) | static void exp2reg (FuncState *fs, expdesc *e, int reg) {
function luaK_exp2nextreg (line 703) | void luaK_exp2nextreg (FuncState *fs, expdesc *e) {
function luaK_exp2anyreg (line 715) | int luaK_exp2anyreg (FuncState *fs, expdesc *e) {
function luaK_exp2anyregup (line 734) | void luaK_exp2anyregup (FuncState *fs, expdesc *e) {
function luaK_exp2val (line 744) | void luaK_exp2val (FuncState *fs, expdesc *e) {
function luaK_exp2RK (line 758) | int luaK_exp2RK (FuncState *fs, expdesc *e) {
function luaK_storevar (line 782) | void luaK_storevar (FuncState *fs, expdesc *var, expdesc *ex) {
function luaK_self (line 809) | void luaK_self (FuncState *fs, expdesc *e, expdesc *key) {
function negatecondition (line 825) | static void negatecondition (FuncState *fs, expdesc *e) {
function jumponcond (line 839) | static int jumponcond (FuncState *fs, expdesc *e, int cond) {
function luaK_goiftrue (line 857) | void luaK_goiftrue (FuncState *fs, expdesc *e) {
function luaK_goiffalse (line 884) | void luaK_goiffalse (FuncState *fs, expdesc *e) {
function codenot (line 910) | static void codenot (FuncState *fs, expdesc *e) {
function luaK_indexed (line 946) | void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k) {
function validop (line 960) | static int validop (int op, TValue *v1, TValue *v2) {
function constfolding (line 978) | static int constfolding (FuncState *fs, int op, expdesc *e1,
function codeunexpval (line 1004) | static void codeunexpval (FuncState *fs, OpCode op, expdesc *e, int line) {
function codebinexpval (line 1022) | static void codebinexpval (FuncState *fs, OpCode op,
function codecomp (line 1037) | static void codecomp (FuncState *fs, BinOpr opr, expdesc *e1, expdesc *e...
function luaK_prefix (line 1066) | void luaK_prefix (FuncState *fs, UnOpr op, expdesc *e, int line) {
function luaK_infix (line 1086) | void luaK_infix (FuncState *fs, BinOpr op, expdesc *v) {
function luaK_posfix (line 1124) | void luaK_posfix (FuncState *fs, BinOpr op,
function luaK_fixline (line 1177) | void luaK_fixline (FuncState *fs, int line) {
function luaK_setlist (line 1189) | void luaK_setlist (FuncState *fs, int base, int nelems, int tostore) {
FILE: WebGLPlugins/lcode.h
type BinOpr (line 26) | typedef enum BinOpr {
type UnOpr (line 40) | typedef enum UnOpr { OPR_MINUS, OPR_BNOT, OPR_NOT, OPR_LEN, OPR_NOUNOPR ...
FILE: WebGLPlugins/lcorolib.c
function lua_State (line 21) | static lua_State *getco (lua_State *L) {
function auxresume (line 28) | static int auxresume (lua_State *L, lua_State *co, int narg) {
function luaB_coresume (line 57) | static int luaB_coresume (lua_State *L) {
function luaB_auxwrap (line 74) | static int luaB_auxwrap (lua_State *L) {
function luaB_cocreate (line 89) | static int luaB_cocreate (lua_State *L) {
function luaB_cowrap (line 99) | static int luaB_cowrap (lua_State *L) {
function luaB_yield (line 106) | static int luaB_yield (lua_State *L) {
function luaB_costatus (line 111) | static int luaB_costatus (lua_State *L) {
function luaB_yieldable (line 138) | static int luaB_yieldable (lua_State *L) {
function luaB_corunning (line 144) | static int luaB_corunning (lua_State *L) {
function LUAMOD_API (line 164) | LUAMOD_API int luaopen_coroutine (lua_State *L) {
FILE: WebGLPlugins/ldblib.c
function checkstack (line 35) | static void checkstack (lua_State *L, lua_State *L1, int n) {
function db_getregistry (line 41) | static int db_getregistry (lua_State *L) {
function db_getmetatable (line 47) | static int db_getmetatable (lua_State *L) {
function db_setmetatable (line 56) | static int db_setmetatable (lua_State *L) {
function db_getuservalue (line 66) | static int db_getuservalue (lua_State *L) {
function db_setuservalue (line 75) | static int db_setuservalue (lua_State *L) {
function lua_State (line 90) | static lua_State *getthread (lua_State *L, int *arg) {
function settabss (line 107) | static void settabss (lua_State *L, const char *k, const char *v) {
function settabsi (line 112) | static void settabsi (lua_State *L, const char *k, int v) {
function settabsb (line 117) | static void settabsb (lua_State *L, const char *k, int v) {
function treatstackoption (line 130) | static void treatstackoption (lua_State *L, lua_State *L1, const char *f...
function db_getinfo (line 145) | static int db_getinfo (lua_State *L) {
function db_getlocal (line 193) | static int db_getlocal (lua_State *L) {
function db_setlocal (line 224) | static int db_setlocal (lua_State *L) {
function auxupvalue (line 248) | static int auxupvalue (lua_State *L, int get) {
function db_getupvalue (line 260) | static int db_getupvalue (lua_State *L) {
function db_setupvalue (line 265) | static int db_setupvalue (lua_State *L) {
function checkupval (line 275) | static int checkupval (lua_State *L, int argf, int argnup) {
function db_upvalueid (line 284) | static int db_upvalueid (lua_State *L) {
function db_upvaluejoin (line 291) | static int db_upvaluejoin (lua_State *L) {
function hookf (line 305) | static void hookf (lua_State *L, lua_Debug *ar) {
function makemask (line 324) | static int makemask (const char *smask, int count) {
function db_sethook (line 347) | static int db_sethook (lua_State *L) {
function db_gethook (line 379) | static int db_gethook (lua_State *L) {
function db_debug (line 402) | static int db_debug (lua_State *L) {
function db_traceback (line 417) | static int db_traceback (lua_State *L) {
function LUAMOD_API (line 452) | LUAMOD_API int luaopen_debug (lua_State *L) {
FILE: WebGLPlugins/ldebug.c
function currentpc (line 45) | static int currentpc (CallInfo *ci) {
function currentline (line 51) | static int currentline (CallInfo *ci) {
function swapextra (line 62) | static void swapextra (lua_State *L) {
function LUA_API (line 81) | LUA_API void lua_sethook (lua_State *L, lua_Hook func, int mask, int cou...
function LUA_API (line 95) | LUA_API lua_Hook lua_gethook (lua_State *L) {
function LUA_API (line 100) | LUA_API int lua_gethookmask (lua_State *L) {
function LUA_API (line 105) | LUA_API int lua_gethookcount (lua_State *L) {
function LUA_API (line 110) | LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar) {
function LUA_API (line 171) | LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int...
function LUA_API (line 195) | LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int...
function funcinfo (line 211) | static void funcinfo (lua_Debug *ar, Closure *cl) {
function collectvalidlines (line 229) | static void collectvalidlines (lua_State *L, Closure *f) {
function auxgetinfo (line 262) | static int auxgetinfo (lua_State *L, const char *what, lua_Debug *ar,
function LUA_API (line 309) | LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar) {
function kname (line 355) | static void kname (Proto *p, int pc, int c, const char **name) {
function filterpc (line 375) | static int filterpc (int pc, int jmptarget) {
function findsetreg (line 385) | static int findsetreg (Proto *p, int lastpc, int reg) {
function isinstack (line 546) | static int isinstack (CallInfo *ci, const TValue *o) {
function l_noret (line 585) | l_noret luaG_typeerror (lua_State *L, const TValue *o, const char *op) {
function l_noret (line 591) | l_noret luaG_concaterror (lua_State *L, const TValue *p1, const TValue *...
function l_noret (line 597) | l_noret luaG_opinterror (lua_State *L, const TValue *p1,
function l_noret (line 609) | l_noret luaG_tointerror (lua_State *L, const TValue *p1, const TValue *p...
function l_noret (line 617) | l_noret luaG_ordererror (lua_State *L, const TValue *p1, const TValue *p...
function l_noret (line 640) | l_noret luaG_errormsg (lua_State *L) {
function l_noret (line 652) | l_noret luaG_runerror (lua_State *L, const char *fmt, ...) {
function luaG_traceexec (line 665) | void luaG_traceexec (lua_State *L) {
FILE: WebGLPlugins/ldo.c
type lua_longjmp (line 84) | struct lua_longjmp {
function seterrorobj (line 91) | static void seterrorobj (lua_State *L, int errcode, StkId oldtop) {
function l_noret (line 110) | l_noret luaD_throw (lua_State *L, int errcode) {
function luaD_rawrunprotected (line 136) | int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud) {
function correctstack (line 158) | static void correctstack (lua_State *L, TValue *oldstack) {
function luaD_reallocstack (line 177) | void luaD_reallocstack (lua_State *L, int newsize) {
function luaD_growstack (line 191) | void luaD_growstack (lua_State *L, int n) {
function stackinuse (line 210) | static int stackinuse (lua_State *L) {
function luaD_shrinkstack (line 221) | void luaD_shrinkstack (lua_State *L) {
function luaD_inctop (line 240) | void luaD_inctop (lua_State *L) {
function luaD_hook (line 253) | void luaD_hook (lua_State *L, int event, int line) {
function callhook (line 280) | static void callhook (lua_State *L, CallInfo *ci) {
function StkId (line 293) | static StkId adjust_varargs (lua_State *L, Proto *p, int actual) {
function tryfuncTM (line 315) | static void tryfuncTM (lua_State *L, StkId func) {
function moveresults (line 334) | static int moveresults (lua_State *L, const TValue *firstResult, StkId res,
function luaD_poscall (line 376) | int luaD_poscall (lua_State *L, CallInfo *ci, StkId firstResult, int nre...
function luaD_precall (line 413) | int luaD_precall (lua_State *L, StkId func, int nresults) {
function stackerror (line 481) | static void stackerror (lua_State *L) {
function luaD_call (line 495) | void luaD_call (lua_State *L, StkId func, int nResults) {
function luaD_callnoyield (line 507) | void luaD_callnoyield (lua_State *L, StkId func, int nResults) {
function finishCcall (line 518) | static void finishCcall (lua_State *L, int status) {
function unroll (line 548) | static void unroll (lua_State *L, void *ud) {
function CallInfo (line 566) | static CallInfo *findpcall (lua_State *L) {
function recover (line 581) | static int recover (lua_State *L, int status) {
function resume_error (line 603) | static int resume_error (lua_State *L, const char *msg, int narg) {
function resume (line 619) | static void resume (lua_State *L, void *ud) {
function LUA_API (line 648) | LUA_API int lua_resume (lua_State *L, lua_State *from, int nargs) {
function LUA_API (line 687) | LUA_API int lua_isyieldable (lua_State *L) {
function LUA_API (line 692) | LUA_API int lua_yieldk (lua_State *L, int nresults, lua_KContext ctx,
function luaD_pcall (line 721) | int luaD_pcall (lua_State *L, Pfunc func, void *u,
type SParser (line 748) | struct SParser { /* data to 'f_parser' */
function checkmode (line 757) | static void checkmode (lua_State *L, const char *mode, const char *x) {
function f_parser (line 766) | static void f_parser (lua_State *L, void *ud) {
function luaD_protectedparser (line 783) | int luaD_protectedparser (lua_State *L, ZIO *z, const char *name,
FILE: WebGLPlugins/ldump.c
type DumpState (line 22) | typedef struct {
function DumpBlock (line 40) | static void DumpBlock (const void *b, size_t size, DumpState *D) {
function DumpByte (line 52) | static void DumpByte (int y, DumpState *D) {
function DumpInt (line 58) | static void DumpInt (int x, DumpState *D) {
function DumpNumber (line 63) | static void DumpNumber (lua_Number x, DumpState *D) {
function DumpInteger (line 68) | static void DumpInteger (lua_Integer x, DumpState *D) {
function DumpString (line 73) | static void DumpString (const TString *s, DumpState *D) {
function DumpCode (line 90) | static void DumpCode (const Proto *f, DumpState *D) {
function DumpConstants (line 98) | static void DumpConstants (const Proto *f, DumpState *D) {
function DumpProtos (line 128) | static void DumpProtos (const Proto *f, DumpState *D) {
function DumpUpvalues (line 137) | static void DumpUpvalues (const Proto *f, DumpState *D) {
function DumpDebug (line 147) | static void DumpDebug (const Proto *f, DumpState *D) {
function DumpFunction (line 166) | static void DumpFunction (const Proto *f, TString *psource, DumpState *D) {
function DumpHeader (line 184) | static void DumpHeader (DumpState *D) {
function luaU_dump (line 202) | int luaU_dump(lua_State *L, const Proto *f, lua_Writer w, void *data,
FILE: WebGLPlugins/lfunc.c
function CClosure (line 25) | CClosure *luaF_newCclosure (lua_State *L, int n) {
function LClosure (line 33) | LClosure *luaF_newLclosure (lua_State *L, int n) {
function luaF_initupvals (line 45) | void luaF_initupvals (lua_State *L, LClosure *cl) {
function UpVal (line 57) | UpVal *luaF_findupval (lua_State *L, StkId level) {
function luaF_close (line 83) | void luaF_close (lua_State *L, StkId level) {
function Proto (line 99) | Proto *luaF_newproto (lua_State *L) {
function luaF_freeproto (line 125) | void luaF_freeproto (lua_State *L, Proto *f) {
FILE: WebGLPlugins/lfunc.h
type UpVal (line 35) | struct UpVal {
FILE: WebGLPlugins/lgc.c
function removeentry (line 125) | static void removeentry (Node *n) {
function iscleared (line 139) | static int iscleared (global_State *g, const TValue *o) {
function luaC_barrier_ (line 155) | void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v) {
function luaC_barrierback_ (line 171) | void luaC_barrierback_ (lua_State *L, Table *t) {
function luaC_upvalbarrier_ (line 185) | void luaC_upvalbarrier_ (lua_State *L, UpVal *uv) {
function luaC_fix (line 194) | void luaC_fix (lua_State *L, GCObject *o) {
function GCObject (line 208) | GCObject *luaC_newobj (lua_State *L, int tt, size_t sz) {
function reallymarkobject (line 235) | static void reallymarkobject (global_State *g, GCObject *o) {
function markmt (line 289) | static void markmt (global_State *g) {
function markbeingfnz (line 299) | static void markbeingfnz (global_State *g) {
function remarkupvals (line 312) | static void remarkupvals (global_State *g) {
function restartcollection (line 337) | static void restartcollection (global_State *g) {
function traverseweakvalue (line 361) | static void traverseweakvalue (global_State *g, Table *h) {
function traverseephemeron (line 394) | static int traverseephemeron (global_State *g, Table *h) {
function traversestrongtable (line 433) | static void traversestrongtable (global_State *g, Table *h) {
function lu_mem (line 451) | static lu_mem traversetable (global_State *g, Table *h) {
function traverseproto (line 479) | static int traverseproto (global_State *g, Proto *f) {
function lu_mem (line 501) | static lu_mem traverseCclosure (global_State *g, CClosure *cl) {
function lu_mem (line 514) | static lu_mem traverseLclosure (global_State *g, LClosure *cl) {
function lu_mem (line 530) | static lu_mem traversethread (global_State *g, lua_State *th) {
function propagatemark (line 559) | static void propagatemark (global_State *g) {
function propagateall (line 603) | static void propagateall (global_State *g) {
function convergeephemerons (line 608) | static void convergeephemerons (global_State *g) {
function clearkeys (line 639) | static void clearkeys (global_State *g, GCObject *l, GCObject *f) {
function clearvalues (line 657) | static void clearvalues (global_State *g, GCObject *l, GCObject *f) {
function luaC_upvdeccount (line 677) | void luaC_upvdeccount (lua_State *L, UpVal *uv) {
function freeLclosure (line 685) | static void freeLclosure (lua_State *L, LClosure *cl) {
function freeobj (line 696) | static void freeobj (lua_State *L, GCObject *o) {
function GCObject (line 734) | static GCObject **sweeplist (lua_State *L, GCObject **p, lu_mem count) {
function GCObject (line 757) | static GCObject **sweeptolive (lua_State *L, GCObject **p) {
function checkSizes (line 777) | static void checkSizes (lua_State *L, global_State *g) {
function GCObject (line 787) | static GCObject *udata2finalize (global_State *g) {
function dothecall (line 800) | static void dothecall (lua_State *L, void *ud) {
function GCTM (line 806) | static void GCTM (lua_State *L, int propagateerrors) {
function runafewfinalizers (line 843) | static int runafewfinalizers (lua_State *L) {
function callallpendingfinalizers (line 858) | static void callallpendingfinalizers (lua_State *L) {
function GCObject (line 868) | static GCObject **findlast (GCObject **p) {
function separatetobefnz (line 879) | static void separatetobefnz (global_State *g, int all) {
function luaC_checkfinalizer (line 901) | void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt) {
function setpause (line 939) | static void setpause (global_State *g) {
function entersweep (line 958) | static void entersweep (lua_State *L) {
function luaC_freeallobjects (line 966) | void luaC_freeallobjects (lua_State *L) {
function l_mem (line 981) | static l_mem atomic (lua_State *L) {
function lu_mem (line 1028) | static lu_mem sweepstep (lua_State *L, global_State *g,
function lu_mem (line 1044) | static lu_mem singlestep (lua_State *L) {
function luaC_runtilstate (line 1103) | void luaC_runtilstate (lua_State *L, int statesmask) {
function l_mem (line 1114) | static l_mem getdebt (global_State *g) {
function luaC_step (line 1128) | void luaC_step (lua_State *L) {
function luaC_fullgc (line 1158) | void luaC_fullgc (lua_State *L, int isemergency) {
FILE: WebGLPlugins/linit.c
function LUALIB_API (line 60) | LUALIB_API void luaL_openlibs (lua_State *L) {
FILE: WebGLPlugins/liolib.c
function l_checkmode (line 40) | static int l_checkmode (const char *mode) {
type luaL_Stream (line 142) | typedef luaL_Stream LStream;
function io_type (line 150) | static int io_type (lua_State *L) {
function f_tostring (line 164) | static int f_tostring (lua_State *L) {
function FILE (line 174) | static FILE *tofile (lua_State *L) {
function LStream (line 188) | static LStream *newprefile (lua_State *L) {
function aux_close (line 201) | static int aux_close (lua_State *L) {
function io_close (line 209) | static int io_close (lua_State *L) {
function f_gc (line 217) | static int f_gc (lua_State *L) {
function io_fclose (line 228) | static int io_fclose (lua_State *L) {
function LStream (line 235) | static LStream *newfile (lua_State *L) {
function opencheck (line 243) | static void opencheck (lua_State *L, const char *fname, const char *mode) {
function io_open (line 251) | static int io_open (lua_State *L) {
function io_pclose (line 265) | static int io_pclose (lua_State *L) {
function io_popen (line 275) | static int io_popen (lua_State *L) {
function io_tmpfile (line 289) | static int io_tmpfile (lua_State *L) {
function FILE (line 296) | static FILE *getiofile (lua_State *L, const char *findex) {
function g_iofile (line 306) | static int g_iofile (lua_State *L, const char *f, const char *mode) {
function io_input (line 323) | static int io_input (lua_State *L) {
function io_output (line 328) | static int io_output (lua_State *L) {
function aux_lines (line 342) | static void aux_lines (lua_State *L, int toclose) {
function f_lines (line 352) | static int f_lines (lua_State *L) {
function io_lines (line 359) | static int io_lines (lua_State *L) {
type RN (line 393) | typedef struct {
function nextc (line 404) | static int nextc (RN *rn) {
function test2 (line 420) | static int test2 (RN *rn, const char *set) {
function readdigits (line 430) | static int readdigits (RN *rn, int hex) {
function read_number (line 443) | static int read_number (lua_State *L, FILE *f) {
function test_eof (line 477) | static int test_eof (lua_State *L, FILE *f) {
function read_line (line 485) | static int read_line (lua_State *L, FILE *f, int chop) {
function read_all (line 506) | static void read_all (lua_State *L, FILE *f) {
function read_chars (line 519) | static int read_chars (lua_State *L, FILE *f, size_t n) {
function g_read (line 532) | static int g_read (lua_State *L, FILE *f, int first) {
function io_read (line 582) | static int io_read (lua_State *L) {
function f_read (line 587) | static int f_read (lua_State *L) {
function io_readline (line 592) | static int io_readline (lua_State *L) {
function g_write (line 623) | static int g_write (lua_State *L, FILE *f, int arg) {
function io_write (line 647) | static int io_write (lua_State *L) {
function f_write (line 652) | static int f_write (lua_State *L) {
function f_seek (line 659) | static int f_seek (lua_State *L) {
function f_setvbuf (line 678) | static int f_setvbuf (lua_State *L) {
function io_flush (line 690) | static int io_flush (lua_State *L) {
function f_flush (line 695) | static int f_flush (lua_State *L) {
function createmeta (line 736) | static void createmeta (lua_State *L) {
function io_noclose (line 748) | static int io_noclose (lua_State *L) {
function createstdfile (line 757) | static void createstdfile (lua_State *L, FILE *f, const char *k,
function LUAMOD_API (line 770) | LUAMOD_API int luaopen_io (lua_State *L) {
FILE: WebGLPlugins/llex.c
function save (line 57) | static void save (LexState *ls, int c) {
function luaX_init (line 70) | void luaX_init (lua_State *L) {
function l_noret (line 109) | static l_noret lexerror (LexState *ls, const char *msg, int token) {
function l_noret (line 117) | l_noret luaX_syntaxerror (LexState *ls, const char *msg) {
function TString (line 127) | TString *luaX_newstring (LexState *ls, const char *str, size_t l) {
function inclinenumber (line 151) | static void inclinenumber (LexState *ls) {
function luaX_setinput (line 162) | void luaX_setinput (lua_State *L, LexState *ls, ZIO *z, TString *source,
function check_next1 (line 186) | static int check_next1 (LexState *ls, int c) {
function check_next2 (line 199) | static int check_next2 (LexState *ls, const char *set) {
function read_numeral (line 214) | static int read_numeral (LexState *ls, SemInfo *seminfo) {
function skip_sep (line 251) | static int skip_sep (LexState *ls) {
function read_long_string (line 264) | static void read_long_string (LexState *ls, SemInfo *seminfo, int sep) {
function esccheck (line 303) | static void esccheck (LexState *ls, int c, const char *msg) {
function gethexa (line 312) | static int gethexa (LexState *ls) {
function readhexaesc (line 319) | static int readhexaesc (LexState *ls) {
function readutf8esc (line 327) | static unsigned long readutf8esc (LexState *ls) {
function utf8esc (line 345) | static void utf8esc (LexState *ls) {
function readdecesc (line 353) | static int readdecesc (LexState *ls) {
function read_string (line 366) | static void read_string (LexState *ls, int del, SemInfo *seminfo) {
function llex (line 429) | static int llex (LexState *ls, SemInfo *seminfo) {
function luaX_next (line 549) | void luaX_next (LexState *ls) {
function luaX_lookahead (line 560) | int luaX_lookahead (LexState *ls) {
FILE: WebGLPlugins/llex.h
type RESERVED (line 26) | enum RESERVED {
type SemInfo (line 43) | typedef union {
type Token (line 50) | typedef struct Token {
type LexState (line 58) | typedef struct LexState {
FILE: WebGLPlugins/llimits.h
type LUAI_UMEM (line 23) | typedef LUAI_UMEM lu_mem;
type LUAI_MEM (line 24) | typedef LUAI_MEM l_mem;
type lu_mem (line 26) | typedef size_t lu_mem;
type l_mem (line 27) | typedef ptrdiff_t l_mem;
type lu_mem (line 29) | typedef unsigned long lu_mem;
type l_mem (line 30) | typedef long l_mem;
type lu_byte (line 35) | typedef unsigned char lu_byte;
type LUAI_USER_ALIGNMENT_T (line 65) | typedef LUAI_USER_ALIGNMENT_T L_Umaxalign;
type L_Umaxalign (line 67) | typedef union {
type LUAI_UACNUMBER (line 79) | typedef LUAI_UACNUMBER l_uacNumber;
type LUAI_UACINT (line 80) | typedef LUAI_UACINT l_uacInt;
type Instruction (line 163) | typedef unsigned int Instruction;
type Instruction (line 165) | typedef unsigned long Instruction;
FILE: WebGLPlugins/lmathlib.c
function math_abs (line 39) | static int math_abs (lua_State *L) {
function math_sin (line 50) | static int math_sin (lua_State *L) {
function math_cos (line 55) | static int math_cos (lua_State *L) {
function math_tan (line 60) | static int math_tan (lua_State *L) {
function math_asin (line 65) | static int math_asin (lua_State *L) {
function math_acos (line 70) | static int math_acos (lua_State *L) {
function math_atan (line 75) | static int math_atan (lua_State *L) {
function math_toint (line 83) | static int math_toint (lua_State *L) {
function pushnumint (line 96) | static void pushnumint (lua_State *L, lua_Number d) {
function math_floor (line 105) | static int math_floor (lua_State *L) {
function math_ceil (line 116) | static int math_ceil (lua_State *L) {
function math_fmod (line 127) | static int math_fmod (lua_State *L) {
function math_modf (line 149) | static int math_modf (lua_State *L) {
function math_sqrt (line 166) | static int math_sqrt (lua_State *L) {
function math_ult (line 172) | static int math_ult (lua_State *L) {
function math_log (line 179) | static int math_log (lua_State *L) {
function math_exp (line 195) | static int math_exp (lua_State *L) {
function math_deg (line 200) | static int math_deg (lua_State *L) {
function math_rad (line 205) | static int math_rad (lua_State *L) {
function math_min (line 211) | static int math_min (lua_State *L) {
function math_max (line 225) | static int math_max (lua_State *L) {
function math_random (line 243) | static int math_random (lua_State *L) {
function math_randomseed (line 273) | static int math_randomseed (lua_State *L) {
function math_type (line 280) | static int math_type (lua_State *L) {
function math_cosh (line 302) | static int math_cosh (lua_State *L) {
function math_sinh (line 307) | static int math_sinh (lua_State *L) {
function math_tanh (line 312) | static int math_tanh (lua_State *L) {
function math_pow (line 317) | static int math_pow (lua_State *L) {
function math_frexp (line 324) | static int math_frexp (lua_State *L) {
function math_ldexp (line 331) | static int math_ldexp (lua_State *L) {
function math_log10 (line 338) | static int math_log10 (lua_State *L) {
function LUAMOD_API (line 394) | LUAMOD_API int luaopen_math (lua_State *L) {
FILE: WebGLPlugins/lmem.c
function l_noret (line 68) | l_noret luaM_toobig (lua_State *L) {
FILE: WebGLPlugins/loadlib.c
function lsys_unloadlib (line 121) | static void lsys_unloadlib (void *lib) {
function lua_CFunction (line 133) | static lua_CFunction lsys_sym (lua_State *L, void *lib, const char *sym) {
function setprogdir (line 168) | static void setprogdir (lua_State *L) {
function pusherror (line 185) | static void pusherror (lua_State *L) {
function lsys_unloadlib (line 195) | static void lsys_unloadlib (void *lib) {
function lua_CFunction (line 208) | static lua_CFunction lsys_sym (lua_State *L, void *lib, const char *sym) {
function lsys_unloadlib (line 231) | static void lsys_unloadlib (void *lib) {
function lua_CFunction (line 243) | static lua_CFunction lsys_sym (lua_State *L, void *lib, const char *sym) {
function noenv (line 278) | static int noenv (lua_State *L) {
function setpath (line 290) | static void setpath (lua_State *L, const char *fieldname,
function addtoclib (line 335) | static void addtoclib (lua_State *L, const char *path, void *plib) {
function gctm (line 349) | static int gctm (lua_State *L) {
function lookforfunc (line 376) | static int lookforfunc (lua_State *L, const char *path, const char *sym) {
function ll_loadlib (line 397) | static int ll_loadlib (lua_State *L) {
function readable (line 420) | static int readable (const char *filename) {
function ll_searchpath (line 462) | static int ll_searchpath (lua_State *L) {
function checkload (line 488) | static int checkload (lua_State *L, int stat, const char *filename) {
function searcher_Lua (line 499) | static int searcher_Lua (lua_State *L) {
function loadfunc (line 516) | static int loadfunc (lua_State *L, const char *filename, const char *mod...
function searcher_C (line 534) | static int searcher_C (lua_State *L) {
function searcher_Croot (line 542) | static int searcher_Croot (lua_State *L) {
function searcher_preload (line 564) | static int searcher_preload (lua_State *L) {
function findloader (line 573) | static void findloader (lua_State *L, const char *name) {
function ll_require (line 601) | static int ll_require (lua_State *L) {
function set_env (line 638) | static void set_env (lua_State *L) {
function dooptions (line 650) | static void dooptions (lua_State *L, int n) {
function modinit (line 662) | static void modinit (lua_State *L, const char *modname) {
function ll_module (line 677) | static int ll_module (lua_State *L) {
function ll_seeall (line 695) | static int ll_seeall (lua_State *L) {
function createsearcherstable (line 737) | static void createsearcherstable (lua_State *L) {
function createclibstable (line 761) | static void createclibstable (lua_State *L) {
function LUAMOD_API (line 771) | LUAMOD_API int luaopen_package (lua_State *L) {
FILE: WebGLPlugins/lobject.c
function luaO_int2fb (line 41) | int luaO_int2fb (unsigned int x) {
function luaO_fb2int (line 57) | int luaO_fb2int (int x) {
function luaO_ceillog2 (line 65) | int luaO_ceillog2 (unsigned int x) {
function lua_Integer (line 83) | static lua_Integer intarith (lua_State *L, int op, lua_Integer v1,
function lua_Number (line 103) | static lua_Number numarith (lua_State *L, int op, lua_Number v1,
function luaO_arith (line 123) | void luaO_arith (lua_State *L, int op, const TValue *p1, const TValue *p2,
function luaO_hexavalue (line 163) | int luaO_hexavalue (int c) {
function isneg (line 169) | static int isneg (const char **s) {
function lua_Number (line 193) | static lua_Number lua_strx2number (const char *s, char **endptr) {
function luaO_str2num (line 331) | size_t luaO_str2num (const char *s, TValue *o) {
function luaO_utf8esc (line 346) | int luaO_utf8esc (char *buff, unsigned long x) {
function luaO_tostring (line 371) | void luaO_tostring (lua_State *L, StkId obj) {
function pushstr (line 390) | static void pushstr (lua_State *L, const char *str, size_t l) {
function luaO_chunkid (line 486) | void luaO_chunkid (char *out, const char *source, size_t bufflen) {
FILE: WebGLPlugins/lobject.h
type GCObject (line 72) | typedef struct GCObject GCObject;
type GCObject (line 85) | struct GCObject {
type Value (line 100) | typedef union Value {
type TValue (line 113) | typedef struct lua_TValue {
type TValue (line 294) | typedef TValue *StkId;
type TString (line 303) | typedef struct TString {
type UTString (line 318) | typedef union UTString {
type Udata (line 346) | typedef struct Udata {
type UUdata (line 358) | typedef union UUdata {
type Upvaldesc (line 386) | typedef struct Upvaldesc {
type LocVar (line 397) | typedef struct LocVar {
type Proto (line 407) | typedef struct Proto {
type UpVal (line 436) | typedef struct UpVal UpVal;
type CClosure (line 446) | typedef struct CClosure {
type LClosure (line 453) | typedef struct LClosure {
type Closure (line 460) | typedef union Closure {
type TKey (line 475) | typedef union TKey {
type Node (line 491) | typedef struct Node {
type Table (line 497) | typedef struct Table {
FILE: WebGLPlugins/lopcodes.h
type OpMode (line 32) | enum OpMode {iABC, iABx, iAsBx, iAx}
type OpCode (line 167) | typedef enum {
type OpArgMask (line 274) | enum OpArgMask {
FILE: WebGLPlugins/loslib.c
function time_t (line 69) | static time_t l_checktime (lua_State *L, int arg) {
function os_execute (line 141) | static int os_execute (lua_State *L) {
function os_remove (line 157) | static int os_remove (lua_State *L) {
function os_rename (line 163) | static int os_rename (lua_State *L) {
function os_tmpname (line 170) | static int os_tmpname (lua_State *L) {
function os_getenv (line 181) | static int os_getenv (lua_State *L) {
function os_clock (line 191) | static int os_clock (lua_State *L) {
function setfield (line 205) | static void setfield (lua_State *L, const char *key, int value) {
function setboolfield (line 210) | static void setboolfield (lua_State *L, const char *key, int value) {
function setallfields (line 221) | static void setallfields (lua_State *L, struct tm *stm) {
function getboolfield (line 234) | static int getboolfield (lua_State *L, const char *key) {
function getfield (line 247) | static int getfield (lua_State *L, const char *key, int d, int delta) {
function os_date (line 291) | static int os_date (lua_State *L) {
function os_time (line 332) | static int os_time (lua_State *L) {
function os_difftime (line 357) | static int os_difftime (lua_State *L) {
function os_setlocale (line 367) | static int os_setlocale (lua_State *L) {
function os_exit (line 379) | static int os_exit (lua_State *L) {
function LUAMOD_API (line 411) | LUAMOD_API int luaopen_os (lua_State *L) {
FILE: WebGLPlugins/lparser.c
type BlockCnt (line 48) | typedef struct BlockCnt {
function l_noret (line 67) | static l_noret semerror (LexState *ls, const char *msg) {
function l_noret (line 73) | static l_noret error_expected (LexState *ls, int token) {
function l_noret (line 79) | static l_noret errorlimit (FuncState *fs, int limit, const char *what) {
function checklimit (line 92) | static void checklimit (FuncState *fs, int v, int l, const char *what) {
function testnext (line 97) | static int testnext (LexState *ls, int c) {
function check (line 106) | static void check (LexState *ls, int c) {
function checknext (line 112) | static void checknext (LexState *ls, int c) {
function check_match (line 122) | static void check_match (LexState *ls, int what, int who, int where) {
function TString (line 135) | static TString *str_checkname (LexState *ls) {
function init_exp (line 144) | static void init_exp (expdesc *e, expkind k, int i) {
function codestring (line 151) | static void codestring (LexState *ls, expdesc *e, TString *s) {
function checkname (line 156) | static void checkname (LexState *ls, expdesc *e) {
function registerlocalvar (line 161) | static int registerlocalvar (LexState *ls, TString *varname) {
function new_localvar (line 175) | static void new_localvar (LexState *ls, TString *name) {
function new_localvarliteral_ (line 187) | static void new_localvarliteral_ (LexState *ls, const char *name, size_t...
function LocVar (line 195) | static LocVar *getlocvar (FuncState *fs, int i) {
function adjustlocalvars (line 202) | static void adjustlocalvars (LexState *ls, int nvars) {
function removevars (line 211) | static void removevars (FuncState *fs, int tolevel) {
function searchupvalue (line 218) | static int searchupvalue (FuncState *fs, TString *name) {
function newupvalue (line 228) | static int newupvalue (FuncState *fs, TString *name, expdesc *v) {
function searchvar (line 244) | static int searchvar (FuncState *fs, TString *n) {
function markupval (line 258) | static void markupval (FuncState *fs, int level) {
function singlevaraux (line 270) | static void singlevaraux (FuncState *fs, TString *n, expdesc *var, int b...
function singlevar (line 295) | static void singlevar (LexState *ls, expdesc *var) {
function adjust_assign (line 309) | static void adjust_assign (LexState *ls, int nvars, int nexps, expdesc *...
function enterlevel (line 331) | static void enterlevel (LexState *ls) {
function closegoto (line 341) | static void closegoto (LexState *ls, int g, Labeldesc *label) {
function findlabel (line 365) | static int findlabel (LexState *ls, int g) {
function newlabelentry (line 385) | static int newlabelentry (LexState *ls, Labellist *l, TString *name,
function findgotos (line 403) | static void findgotos (LexState *ls, Labeldesc *lb) {
function movegotosout (line 421) | static void movegotosout (FuncState *fs, BlockCnt *bl) {
function enterblock (line 439) | static void enterblock (FuncState *fs, BlockCnt *bl, lu_byte isloop) {
function breaklabel (line 454) | static void breaklabel (LexState *ls) {
function l_noret (line 464) | static l_noret undefgoto (LexState *ls, Labeldesc *gt) {
function leaveblock (line 473) | static void leaveblock (FuncState *fs) {
function Proto (line 499) | static Proto *addprototype (LexState *ls) {
function codeclosure (line 522) | static void codeclosure (LexState *ls, expdesc *v) {
function open_func (line 529) | static void open_func (LexState *ls, FuncState *fs, BlockCnt *bl) {
function close_func (line 552) | static void close_func (LexState *ls) {
function block_follow (line 587) | static int block_follow (LexState *ls, int withuntil) {
function statlist (line 598) | static void statlist (LexState *ls) {
function fieldsel (line 610) | static void fieldsel (LexState *ls, expdesc *v) {
function yindex (line 621) | static void yindex (LexState *ls, expdesc *v) {
type ConsControl (line 637) | struct ConsControl {
function recfield (line 646) | static void recfield (LexState *ls, struct ConsControl *cc) {
function closelistfield (line 667) | static void closelistfield (FuncState *fs, struct ConsControl *cc) {
function lastlistfield (line 678) | static void lastlistfield (FuncState *fs, struct ConsControl *cc) {
function listfield (line 693) | static void listfield (LexState *ls, struct ConsControl *cc) {
function field (line 702) | static void field (LexState *ls, struct ConsControl *cc) {
function constructor (line 724) | static void constructor (LexState *ls, expdesc *t) {
function parlist (line 753) | static void parlist (LexState *ls) {
function body (line 782) | static void body (LexState *ls, expdesc *e, int ismethod, int line) {
function explist (line 804) | static int explist (LexState *ls, expdesc *v) {
function funcargs (line 817) | static void funcargs (LexState *ls, expdesc *f, int line) {
function primaryexp (line 871) | static void primaryexp (LexState *ls, expdesc *v) {
function suffixedexp (line 893) | static void suffixedexp (LexState *ls, expdesc *v) {
function simpleexp (line 931) | static void simpleexp (LexState *ls, expdesc *v) {
function UnOpr (line 986) | static UnOpr getunopr (int op) {
function BinOpr (line 997) | static BinOpr getbinopr (int op) {
function BinOpr (line 1048) | static BinOpr subexpr (LexState *ls, expdesc *v, int limit) {
function expr (line 1078) | static void expr (LexState *ls, expdesc *v) {
function block (line 1093) | static void block (LexState *ls) {
type LHS_assign (line 1107) | struct LHS_assign {
function check_conflict (line 1119) | static void check_conflict (LexState *ls, struct LHS_assign *lh, expdesc...
function assignment (line 1147) | static void assignment (LexState *ls, struct LHS_assign *lh, int nvars) {
function cond (line 1177) | static int cond (LexState *ls) {
function gotostat (line 1187) | static void gotostat (LexState *ls, int pc) {
function checkrepeated (line 1203) | static void checkrepeated (FuncState *fs, Labellist *ll, TString *label) {
function skipnoopstat (line 1217) | static void skipnoopstat (LexState *ls) {
function labelstat (line 1223) | static void labelstat (LexState *ls, TString *label, int line) {
function whilestat (line 1241) | static void whilestat (LexState *ls, int line) {
function repeatstat (line 1260) | static void repeatstat (LexState *ls, int line) {
function exp1 (line 1280) | static int exp1 (LexState *ls) {
function forbody (line 1291) | static void forbody (LexState *ls, int base, int line, int nvars, int is...
function fornum (line 1317) | static void fornum (LexState *ls, TString *varname, int line) {
function forlist (line 1339) | static void forlist (LexState *ls, TString *indexname) {
function forstat (line 1364) | static void forstat (LexState *ls, int line) {
function test_then_block (line 1382) | static void test_then_block (LexState *ls, int *escapelist) {
function ifstat (line 1417) | static void ifstat (LexState *ls, int line) {
function localfunc (line 1431) | static void localfunc (LexState *ls) {
function localstat (line 1442) | static void localstat (LexState *ls) {
function funcname (line 1462) | static int funcname (LexState *ls, expdesc *v) {
function funcstat (line 1476) | static void funcstat (LexState *ls, int line) {
function exprstat (line 1488) | static void exprstat (LexState *ls) {
function retstat (line 1504) | static void retstat (LexState *ls) {
function statement (line 1537) | static void statement (LexState *ls) {
function mainfunc (line 1612) | static void mainfunc (LexState *ls, FuncState *fs) {
function LClosure (line 1626) | LClosure *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff,
FILE: WebGLPlugins/lparser.h
type expkind (line 25) | typedef enum {
type expdesc (line 54) | typedef struct expdesc {
type Vardesc (line 72) | typedef struct Vardesc {
type Labeldesc (line 78) | typedef struct Labeldesc {
type Labellist (line 87) | typedef struct Labellist {
type Dyndata (line 95) | typedef struct Dyndata {
type BlockCnt (line 107) | struct BlockCnt
type FuncState (line 111) | typedef struct FuncState {
FILE: WebGLPlugins/lstate.c
type LX (line 54) | typedef struct LX {
type LG (line 63) | typedef struct LG {
function makeseed (line 81) | static unsigned int makeseed (lua_State *L) {
function luaE_setdebt (line 98) | void luaE_setdebt (global_State *g, l_mem debt) {
function CallInfo (line 108) | CallInfo *luaE_extendCI (lua_State *L) {
function luaE_freeCI (line 122) | void luaE_freeCI (lua_State *L) {
function luaE_shrinkCI (line 137) | void luaE_shrinkCI (lua_State *L) {
function stack_init (line 151) | static void stack_init (lua_State *L1, lua_State *L) {
function freestack (line 171) | static void freestack (lua_State *L) {
function init_registry (line 184) | static void init_registry (lua_State *L, global_State *g) {
function f_luaopen (line 203) | static void f_luaopen (lua_State *L, void *ud) {
function preinit_thread (line 221) | static void preinit_thread (lua_State *L, global_State *g) {
function close_state (line 242) | static void close_state (lua_State *L) {
function LUA_API (line 255) | LUA_API lua_State *lua_newthread (lua_State *L) {
function luaE_freethread (line 285) | void luaE_freethread (lua_State *L, lua_State *L1) {
function LUA_API (line 295) | LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) {
function LUA_API (line 341) | LUA_API void lua_close (lua_State *L) {
FILE: WebGLPlugins/lstate.h
type lua_longjmp (line 33) | struct lua_longjmp
type stringtable (line 58) | typedef struct stringtable {
type CallInfo (line 74) | typedef struct CallInfo {
type global_State (line 119) | typedef struct global_State {
type lua_State (line 160) | struct lua_State {
type TString (line 195) | struct TString
type Udata (line 196) | struct Udata
type Table (line 198) | struct Table
type Proto (line 199) | struct Proto
type lua_State (line 200) | struct lua_State
FILE: WebGLPlugins/lstring.c
function luaS_eqlngstr (line 40) | int luaS_eqlngstr (TString *a, TString *b) {
function luaS_hash (line 49) | unsigned int luaS_hash (const char *str, size_t l, unsigned int seed) {
function luaS_hashlongstr (line 58) | unsigned int luaS_hashlongstr (TString *ts) {
function luaS_resize (line 71) | void luaS_resize (lua_State *L, int newsize) {
function luaS_clearcache (line 103) | void luaS_clearcache (global_State *g) {
function luaS_init (line 116) | void luaS_init (lua_State *L) {
function TString (line 133) | static TString *createstrobj (lua_State *L, size_t l, int tag, unsigned ...
function TString (line 147) | TString *luaS_createlngstrobj (lua_State *L, size_t l) {
function luaS_remove (line 154) | void luaS_remove (lua_State *L, TString *ts) {
function TString (line 167) | static TString *internshrstr (lua_State *L, const char *str, size_t l) {
function TString (line 199) | TString *luaS_newlstr (lua_State *L, const char *str, size_t l) {
function TString (line 219) | TString *luaS_new (lua_State *L, const char *str) {
function Udata (line 236) | Udata *luaS_newudata (lua_State *L, size_t s) {
FILE: WebGLPlugins/lstrlib.c
function str_len (line 54) | static int str_len (lua_State *L) {
function lua_Integer (line 63) | static lua_Integer posrelat (lua_Integer pos, size_t len) {
function str_sub (line 70) | static int str_sub (lua_State *L) {
function str_reverse (line 84) | static int str_reverse (lua_State *L) {
function str_lower (line 96) | static int str_lower (lua_State *L) {
function str_upper (line 109) | static int str_upper (lua_State *L) {
function str_rep (line 122) | static int str_rep (lua_State *L) {
function str_byte (line 148) | static int str_byte (lua_State *L) {
function str_char (line 167) | static int str_char (lua_State *L) {
function writer (line 182) | static int writer (lua_State *L, const void *b, size_t size, void *B) {
function str_dump (line 189) | static int str_dump (lua_State *L) {
type MatchState (line 214) | typedef struct MatchState {
function check_capture (line 242) | static int check_capture (MatchState *ms, int l) {
function capture_to_close (line 250) | static int capture_to_close (MatchState *ms) {
function match_class (line 282) | static int match_class (int c, int cl) {
function matchbracketclass (line 302) | static int matchbracketclass (int c, const char *p, const char *ec) {
function singlematch (line 325) | static int singlematch (MatchState *ms, const char *s, const char *p,
function push_onecapture (line 550) | static void push_onecapture (MatchState *ms, int i, const char *s,
function push_captures (line 569) | static int push_captures (MatchState *ms, const char *s, const char *e) {
function nospecials (line 580) | static int nospecials (const char *p, size_t l) {
function prepstate (line 591) | static void prepstate (MatchState *ms, lua_State *L,
function reprepstate (line 601) | static void reprepstate (MatchState *ms) {
function str_find_aux (line 607) | static int str_find_aux (lua_State *L, int find) {
function str_find (line 654) | static int str_find (lua_State *L) {
function str_match (line 6
Copy disabled (too large)
Download .json
Condensed preview — 1547 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (18,452K chars).
[
{
"path": ".github/workflows/build.yml",
"chars": 6172,
"preview": "name: build\n\non: \n push:\n paths: \n - build/**\n - .github/workflows/build.yml\n\njobs:\n android:\n runs-on"
},
{
"path": ".github/workflows/publish.yml",
"chars": 8953,
"preview": "name: publish\n\non: \n workflow_dispatch:\n inputs:\n tag_name:\n description: 'tag name' \n requir"
},
{
"path": ".gitignore",
"chars": 743,
"preview": ".vs\r\n/Library\r\n/ProjectSettings\r\n/Temp\r\n/Assets/XLua/Gen\r\n/Assets/XLua/Gen.meta\r\nAssets/StreamingAssets.meta\r\nAssets/Str"
},
{
"path": ".travis.yml",
"chars": 827,
"preview": "language: csharp\r\nscript:\r\n - cd build\r\n - chmod +x *.sh\r\n - ./make_linux64_lua53.sh\r\n - ./make_linux64_luajit.sh\r\n "
},
{
"path": "Assets/Plugins/Android/libs/arm64-v8a/libxlua.so.meta",
"chars": 600,
"preview": "fileFormatVersion: 2\nguid: 6c76d1cfa11c6b741ba30b24d36cbcf2\nPluginImporter:\n externalObjects: {}\n serializedVersion: 2"
},
{
"path": "Assets/Plugins/Android/libs/arm64-v8a.meta",
"chars": 172,
"preview": "fileFormatVersion: 2\nguid: 084116138e3349d48bdf50214aebefc5\nfolderAsset: yes\nDefaultImporter:\n externalObjects: {}\n us"
},
{
"path": "Assets/Plugins/Android/libs/armeabi-v7a/libxlua.so.meta",
"chars": 457,
"preview": "fileFormatVersion: 2\nguid: 6e1b2e17cce240d4c8ff5457ac996e0d\ntimeCreated: 1451443249\nlicenseType: Pro\nPluginImporter:\n s"
},
{
"path": "Assets/Plugins/Android/libs/armeabi-v7a.meta",
"chars": 150,
"preview": "fileFormatVersion: 2\nguid: b8d0cd0f5702f0144af2498bce3ee3e9\nfolderAsset: yes\nDefaultImporter:\n userData: \n assetBundle"
},
{
"path": "Assets/Plugins/Android/libs/x86/libxlua.so.meta",
"chars": 455,
"preview": "fileFormatVersion: 2\nguid: 038a89637b659e346a7a712ce0c9271b\ntimeCreated: 1451443249\nlicenseType: Pro\nPluginImporter:\n s"
},
{
"path": "Assets/Plugins/Android/libs/x86.meta",
"chars": 150,
"preview": "fileFormatVersion: 2\nguid: 079ea0ed741ff194a80cce029630b5ac\nfolderAsset: yes\nDefaultImporter:\n userData: \n assetBundle"
},
{
"path": "Assets/Plugins/Android/libs.meta",
"chars": 150,
"preview": "fileFormatVersion: 2\nguid: 9cd62bafd75e7604daf2b561b80d136d\nfolderAsset: yes\nDefaultImporter:\n userData: \n assetBundle"
},
{
"path": "Assets/Plugins/Android.meta",
"chars": 107,
"preview": "fileFormatVersion: 2\nguid: 0004c0a5ad641d4468ebb65779ee48b2\nfolderAsset: yes\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/Plugins/WSA/ARM/xlua.dll.meta",
"chars": 484,
"preview": "fileFormatVersion: 2\nguid: cb3d94d8757d66b40b20f0386b52d01d\ntimeCreated: 1490146878\nlicenseType: Free\nPluginImporter:\n "
},
{
"path": "Assets/Plugins/WSA/ARM.meta",
"chars": 192,
"preview": "fileFormatVersion: 2\nguid: e6375603a0a1e2647b0c426b27646eb7\nfolderAsset: yes\ntimeCreated: 1490146877\nlicenseType: Free\nD"
},
{
"path": "Assets/Plugins/WSA/x64/xlua.dll.meta",
"chars": 484,
"preview": "fileFormatVersion: 2\nguid: a73864467778862409da51f9feb60004\ntimeCreated: 1490146878\nlicenseType: Free\nPluginImporter:\n "
},
{
"path": "Assets/Plugins/WSA/x64.meta",
"chars": 192,
"preview": "fileFormatVersion: 2\nguid: 4d5a7116d7e9a33409205303635b8635\nfolderAsset: yes\ntimeCreated: 1490146877\nlicenseType: Free\nD"
},
{
"path": "Assets/Plugins/WSA/x86/xlua.dll.meta",
"chars": 484,
"preview": "fileFormatVersion: 2\nguid: 3fd23a6414095674493657a67a8043a1\ntimeCreated: 1489995544\nlicenseType: Free\nPluginImporter:\n "
},
{
"path": "Assets/Plugins/WSA/x86.meta",
"chars": 192,
"preview": "fileFormatVersion: 2\nguid: 6e0f35de38a8ed24fa8b20d444c9ee5e\nfolderAsset: yes\ntimeCreated: 1490146877\nlicenseType: Free\nD"
},
{
"path": "Assets/Plugins/WSA.meta",
"chars": 192,
"preview": "fileFormatVersion: 2\nguid: b8c5688e381fddc4eb22e6f96f69541c\nfolderAsset: yes\ntimeCreated: 1489995541\nlicenseType: Free\nD"
},
{
"path": "Assets/Plugins/WebGL/xlua_webgl.cpp",
"chars": 1524,
"preview": "extern \"C\" {\n#include \"../../../WebGLPlugins/lapi.c\"\n#include \"../../../WebGLPlugins/lauxlib.c\"\n#include \"../../../WebGL"
},
{
"path": "Assets/Plugins/WebGL/xlua_webgl.cpp.meta",
"chars": 710,
"preview": "fileFormatVersion: 2\nguid: 92f9773841d5ffd44b794b9b584a5c05\ntimeCreated: 1504062948\nlicenseType: Pro\nPluginImporter:\n s"
},
{
"path": "Assets/Plugins/WebGL.meta",
"chars": 191,
"preview": "fileFormatVersion: 2\nguid: e7f3a5adb034d684cb13cb257c29a1c3\nfolderAsset: yes\ntimeCreated: 1504062948\nlicenseType: Pro\nDe"
},
{
"path": "Assets/Plugins/arm64/libxlua.dylib.meta",
"chars": 1165,
"preview": "fileFormatVersion: 2\nguid: 27cd65c4cc42b42f49caa94f462466de\nPluginImporter:\n externalObjects: {}\n serializedVersion: 2"
},
{
"path": "Assets/Plugins/iOS/HotfixFlags.cpp",
"chars": 959,
"preview": "#include <stddef.h>\n#include <stdlib.h>\n\nint* xlua_hotfix_flags = NULL;\nint xlua_hotfix_flags_len = 0;\n\nextern \"C\" {\n\nin"
},
{
"path": "Assets/Plugins/iOS/HotfixFlags.cpp.meta",
"chars": 456,
"preview": "fileFormatVersion: 2\nguid: ef0ed550afe43d449b58d883fad0585c\ntimeCreated: 1498103331\nlicenseType: Pro\nPluginImporter:\n s"
},
{
"path": "Assets/Plugins/iOS/libxlua.a.meta",
"chars": 437,
"preview": "fileFormatVersion: 2\nguid: 2d65468f3356ca741b3fbebea91dfb6c\ntimeCreated: 1451443249\nlicenseType: Pro\nPluginImporter:\n s"
},
{
"path": "Assets/Plugins/iOS.meta",
"chars": 107,
"preview": "fileFormatVersion: 2\nguid: 5a4ab2e5e00054b03a7bf96d03e5b4e1\nfolderAsset: yes\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/Plugins/x86/libxlua.so.meta",
"chars": 1373,
"preview": "fileFormatVersion: 2\nguid: 9f19d785ae44ddc478a08a87ccd9dbb2\ntimeCreated: 1488352111\nlicenseType: Pro\nPluginImporter:\n s"
},
{
"path": "Assets/Plugins/x86/xlua.dll.meta",
"chars": 1335,
"preview": "fileFormatVersion: 2\nguid: 79f5c811b2e4e444ab2d97cad5cfd934\nPluginImporter:\n serializedVersion: 1\n iconMap: {}\n execu"
},
{
"path": "Assets/Plugins/x86.meta",
"chars": 107,
"preview": "fileFormatVersion: 2\nguid: 8b0b0c4ffe67d2f4292c5211de91e55f\nfolderAsset: yes\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/Plugins/x86_64/libxlua.so.meta",
"chars": 1382,
"preview": "fileFormatVersion: 2\nguid: 1055830ddb882704fa71275ed9b2a78d\ntimeCreated: 1488352111\nlicenseType: Pro\nPluginImporter:\n s"
},
{
"path": "Assets/Plugins/x86_64/xlua.dll.meta",
"chars": 1347,
"preview": "fileFormatVersion: 2\nguid: abe4c5ca91772ea4fae0ae15603c10e4\nPluginImporter:\n serializedVersion: 1\n iconMap: {}\n execu"
},
{
"path": "Assets/Plugins/x86_64.meta",
"chars": 191,
"preview": "fileFormatVersion: 2\nguid: 8dba1dfb80e5b7d40bd214fc4ed2ed6b\nfolderAsset: yes\ntimeCreated: 1451020766\nlicenseType: Pro\nDe"
},
{
"path": "Assets/Plugins/xlua.bundle/Contents/Info.plist",
"chars": 1329,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "Assets/Plugins/xlua.bundle/Contents/Info.plist.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: ac30af4fb2add4d41a9f50fe4f8292a3\ntimeCreated: 1457422749\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/Plugins/xlua.bundle/Contents/MacOS/xlua.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 6f3b1cda03ac84924b1ee0595fc019f5\ntimeCreated: 1457422749\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/Plugins/xlua.bundle/Contents/MacOS.meta",
"chars": 191,
"preview": "fileFormatVersion: 2\nguid: c9d8e68fa0fd1465294f1255f6ed8563\nfolderAsset: yes\ntimeCreated: 1457422691\nlicenseType: Pro\nDe"
},
{
"path": "Assets/Plugins/xlua.bundle/Contents.meta",
"chars": 191,
"preview": "fileFormatVersion: 2\nguid: 7e4b7549f5e4a4e71806e3ec8e428b15\nfolderAsset: yes\ntimeCreated: 1457422691\nlicenseType: Pro\nDe"
},
{
"path": "Assets/Plugins/xlua.bundle.meta",
"chars": 1027,
"preview": "fileFormatVersion: 2\nguid: e6a34038df77e48438826b6ff94aa69e\nfolderAsset: yes\nPluginImporter:\n serializedVersion: 1\n ic"
},
{
"path": "Assets/Plugins.meta",
"chars": 107,
"preview": "fileFormatVersion: 2\nguid: a16bb6756d0496e42a92390340cb94f5\nfolderAsset: yes\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/CHANGELOG.txt",
"chars": 12681,
"preview": "v2.1.15 2020年6月24日\r\n新增特性\r\n1、生成代码过滤器\r\n2、优化反射查找delegate匹配bridge的性能\r\n3、unity 2019.2以上版本手机版本注入不了的问题\r\n\r\n变更\r\n\r\nbug修复\r\n1、反射查找同"
},
{
"path": "Assets/XLua/CHANGELOG.txt.meta",
"chars": 177,
"preview": "fileFormatVersion: 2\nguid: be3fe4ee249c5274693e7b6f8053e861\ntimeCreated: 1470364015\nlicenseType: Pro\nTextScriptImporter:"
},
{
"path": "Assets/XLua/Doc/Add_Remove_Lua_Lib.md",
"chars": 6134,
"preview": "## What & Why\n\nXLua's currently built-in extension libraries:\n\n* LuaJIT support for 64-bit integers;\n* Positioning tool "
},
{
"path": "Assets/XLua/Doc/Add_Remove_Lua_Lib.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 0ae08314c9c889249bbd484254109060\ntimeCreated: 1529661499\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/Configure_EN.md",
"chars": 8208,
"preview": "# XLua configuration\r\n\r\nAll xLua configurations support three methods: tagging, static lists, and dynamic lists.\r\n\r\nTher"
},
{
"path": "Assets/XLua/Doc/Configure_EN.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 198070d8475ff3043b6c72a906feebee\ntimeCreated: 1529661499\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/Custom_Generate_EN.md",
"chars": 4325,
"preview": "## Secondary development of the build engine\r\n\r\nxLua's build engine supports secondary development, and you can use it t"
},
{
"path": "Assets/XLua/Doc/Custom_Generate_EN.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: c0765c3c416e8f746bf142b05be65ea7\ntimeCreated: 1529661500\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/Faq_EN.md",
"chars": 19963,
"preview": "# FAQs\r\n\r\n## How to use xLua distribution package?\r\n\r\nxLua is currently released as a zip package and can be extracted t"
},
{
"path": "Assets/XLua/Doc/Faq_EN.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 7b6232183a3c52f4f9af4b68f8a687cc\ntimeCreated: 1529661499\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/Hotfix_EN.md",
"chars": 13255,
"preview": "## Usage\r\n\r\n1. Add the HOTFIX_ENABLE macro to enable this feature (to File->Build Setting->Scripting Define Symbols on U"
},
{
"path": "Assets/XLua/Doc/Hotfix_EN.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 7919d0bddff7ee340852008d36cd68ec\ntimeCreated: 1529661499\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/Materials/logo.mat.meta",
"chars": 95,
"preview": "fileFormatVersion: 2\nguid: 953e2ba39b9a2d54388919b75877efb7\nNativeFormatImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Doc/Materials.meta",
"chars": 191,
"preview": "fileFormatVersion: 2\nguid: ee1eae11fbe87b04193ab2c3d15ba2b3\nfolderAsset: yes\ntimeCreated: 1481715983\nlicenseType: Pro\nDe"
},
{
"path": "Assets/XLua/Doc/XLua_API.doc.meta",
"chars": 90,
"preview": "fileFormatVersion: 2\nguid: f05e875da3e1b3844b2360d177d617c9\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Doc/XLua_API.md",
"chars": 5501,
"preview": "## C# API\n\n### LuaEnv类\n\n#### object[] DoString(string chunk, string chunkName = \"chuck\", LuaTable env = null)\n\n描述:\n\n "
},
{
"path": "Assets/XLua/Doc/XLua_API.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: d97e183eaa307684b9b99ded9005b181\ntimeCreated: 1518577405\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/XLua_API_EN.md",
"chars": 8930,
"preview": "## C# APIs\n\n### LuaEnv type\n\n#### object[] DoString(string chunk, string chunkName = \"chuck\", LuaTable env = null)\n\nDesc"
},
{
"path": "Assets/XLua/Doc/XLua_API_EN.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 563bce1ceae59334c860773faa7b3a7a\ntimeCreated: 1529661499\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/XLua_Tutorial_EN.md",
"chars": 14204,
"preview": "## xLua Tutorial\n\n### Load Lua files\n\n1. Execute strings\n\n The most basic way to execute a string is to use LuaEnv.DoS"
},
{
"path": "Assets/XLua/Doc/XLua_Tutorial_EN.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 76e3df78477813b47bb62712878a2f62\ntimeCreated: 1529661499\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/XLua增加删除第三方lua库.doc.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 40e0633beaaf4dd49aca86e58539a814\ntimeCreated: 1469709930\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/XLua增加删除第三方lua库.md",
"chars": 3438,
"preview": "## What&Why\n\nXLua目前内置的扩展库:\n\n* 针对luajit的64位整数支持;\n* 函数调用耗时以及内存泄漏定位工具;\n* 用于支持ZeroBraneStudio的luasocket库;\n* tdr 4 lua;\n\n随着使用"
},
{
"path": "Assets/XLua/Doc/XLua增加删除第三方lua库.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 6a5e50ce3ca4b6140858bd4eb6efc2e9\ntimeCreated: 1518577405\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/XLua复杂值类型(struct)gc优化指南.doc.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 11d97e567c78f3147b86070c103f3d2d\ntimeCreated: 1472455442\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/XLua复杂值类型(struct)gc优化指南.md",
"chars": 586,
"preview": "## 复杂值类型的gc问题\n\nxLua复杂值类型(struct)的默认传递方式是引用传递,这种方式要求先对值类型boxing,传递给lua,lua使用后释放该引用。由于值类型每次boxing将产生一个新对象,当lua侧使用完毕释放该对象的引"
},
{
"path": "Assets/XLua/Doc/XLua复杂值类型(struct)gc优化指南.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 688574fb2ae996243b1cb02ec3a78bee\ntimeCreated: 1518577405\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/XLua性能分析工具.doc.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 5e83c211c4c43834b9c8027b7480ab5f\ntimeCreated: 1462265117\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/XLua性能分析工具.md",
"chars": 955,
"preview": "XLua内置两个小工具进行性能方面问题的分析:一个是Lua函数,Lua调用C#函数的时长(不一定等同于CPU耗时,比如协程yield出去那段时间也会被算入调用时间)分析工具;一个是内存泄漏定位工具。\n\n## 函数调用时长分析工具\n\n### "
},
{
"path": "Assets/XLua/Doc/XLua性能分析工具.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: f8b5c3f531c153c409bb336ba21682ab\ntimeCreated: 1518577405\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/XLua教程.doc.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 9678cc58c9b40e147b514f7f5122ee20\ntimeCreated: 1456291064\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/XLua教程.md",
"chars": 6449,
"preview": "## xLua教程\n\n### Lua文件加载\n\n1. 执行字符串\n\n 最基本是直接用LuaEnv.DoString执行一个字符串,当然,字符串得符合Lua语法\n 比如:\n\n luaenv.DoString(\"pri"
},
{
"path": "Assets/XLua/Doc/XLua教程.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 9d871df7bbc973d468622dd10b6f7ea9\ntimeCreated: 1518577405\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/XLua的配置.doc.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 57c6cf634c35eb146b95206d498cbf99\ntimeCreated: 1480488641\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/compatible_bytecode.md",
"chars": 1099,
"preview": "# 通用字节码\r\n\r\n不少项目希望把项目的 lua 源码通过 luac 编译后加载,但官方 lua 有个缺陷:字节码是分 32 位和 64 位版本的,换句话你 32 位 lua 环境只能跑 32 位 luac 编译出来的东西。\r\n\r\n为此,"
},
{
"path": "Assets/XLua/Doc/compatible_bytecode.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 9ace0cd26c96dc6468f5e054d8168b43\ntimeCreated: 1536904183\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/configure.md",
"chars": 3962,
"preview": "# xLua的配置\r\n\r\nxLua所有的配置都支持三种方式:打标签;静态列表;动态列表。\r\n\r\n配置有两必须两建议:\r\n\r\n* 列表方式均必须是static的字段/属性\r\n* 列表方式均必须放到一个static类\r\n* 建议不用标签方式\r\n"
},
{
"path": "Assets/XLua/Doc/configure.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 8e8a250c7dbdf6b48ae79313470374dc\ntimeCreated: 1498554474\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/custom_generate.md",
"chars": 2794,
"preview": "## 生成引擎二次开发\r\n\r\nxLua的生成引擎支持二次开发,你可以利用它来生成一些文本类型的文件(比如代码,配置等)。xLua本身的link.xml文件的生成就是一个生成引擎插件做的。其它应用场景,比如生成Lua IDE的自动完成配置文件"
},
{
"path": "Assets/XLua/Doc/custom_generate.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 6436d38981b6f5a4d8a2255ea3145ed1\ntimeCreated: 1486519283\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/faq.md",
"chars": 14746,
"preview": "# FAQ\r\n\r\n## xLua发布包怎么用?\r\n\r\nxLua目前以zip包形式发布,在工程目录下解压即可。\r\n\r\n## xLua可以放别的目录吗?\r\n\r\n可以,但生成代码目录需要配置一下(默认放Assets\\XLua\\Gen目录),具体可"
},
{
"path": "Assets/XLua/Doc/faq.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 13645b7c8597d7840adaff65764ad40f\ntimeCreated: 1481765808\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/features.md",
"chars": 2361,
"preview": "# 特性\r\n\r\n## 总体\r\n\r\n* Lua虚拟机支持\r\n * Lua5.3\r\n * Luajit2.1\r\n* Unity3D版本支持\r\n * 各版本均支持\r\n* 平台支持\r\n * windows 64/32\r\n * androi"
},
{
"path": "Assets/XLua/Doc/features.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 6dcae34981e53564ea1ad644fe0b2f7c\ntimeCreated: 1481768591\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/hotfix.md",
"chars": 8754,
"preview": "## 简介\r\n\r\n热补丁允许你使用 xLua 的代码逻辑, 替换掉原有的 C# 程序逻辑, 以实现热补丁.\r\n\r\n## 使用方式\r\n\r\n1. 打开该特性\r\n\r\n 添加 `HOTFIX_ENABLE` 宏,(在 Unity3D 的 \"F"
},
{
"path": "Assets/XLua/Doc/hotfix.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: a96cb06c040f28c4aab024ca7634360b\ntimeCreated: 1482837382\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/logo.png.meta",
"chars": 1188,
"preview": "fileFormatVersion: 2\nguid: 6b9f4e2e38c36db40bc5bdfe20038d94\ntimeCreated: 1481715979\nlicenseType: Pro\nTextureImporter:\n "
},
{
"path": "Assets/XLua/Doc/signature.md",
"chars": 390,
"preview": "## 源代码签名的用处\r\n\r\n可以防止文件传输的过程被黑客篡改。\r\n\r\n## xLua的签名功能的使用\r\n\r\n* 用Tools/KeyPairsGen.exe生成公私钥对,key_ras文件保存的是私钥,key_ras.pub保存的是公钥,"
},
{
"path": "Assets/XLua/Doc/signature.md.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 54ea702ea6cb89a46b7986dc7fa8482e\ntimeCreated: 1489376033\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Doc/xLua.png.meta",
"chars": 1188,
"preview": "fileFormatVersion: 2\nguid: b2926ca0864130e40b99cbe18d0fc395\ntimeCreated: 1481699971\nlicenseType: Pro\nTextureImporter:\n "
},
{
"path": "Assets/XLua/Doc.meta",
"chars": 107,
"preview": "fileFormatVersion: 2\nguid: 67edfc4b640373846b14362bf8769576\nfolderAsset: yes\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Editor/ExampleConfig.cs",
"chars": 14353,
"preview": "/*\r\n * Tencent is pleased to support the open source community by making xLua available.\r\n * Copyright (C) 2016 THL A29"
},
{
"path": "Assets/XLua/Editor/ExampleConfig.cs.meta",
"chars": 284,
"preview": "fileFormatVersion: 2\nguid: 1b852d3c62124624888d03e611f7b1fc\ntimeCreated: 1534126175\nlicenseType: Pro\nMonoImporter:\n ext"
},
{
"path": "Assets/XLua/Editor/XLuaUnityDefaultConfig.cs",
"chars": 1340,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text;\nusing Sys"
},
{
"path": "Assets/XLua/Editor.meta",
"chars": 191,
"preview": "fileFormatVersion: 2\nguid: f890416e958ceb54694b165fb109582a\nfolderAsset: yes\ntimeCreated: 1534492498\nlicenseType: Pro\nDe"
},
{
"path": "Assets/XLua/Examples/01_Helloworld/Helloworld.cs",
"chars": 1127,
"preview": "/*\r\n * Tencent is pleased to support the open source community by making xLua available.\r\n * Copyright (C) 2016 THL A29"
},
{
"path": "Assets/XLua/Examples/01_Helloworld/Helloworld.cs.meta",
"chars": 178,
"preview": "fileFormatVersion: 2\nguid: 480b23bd4e378f2499f8b31ae84b1c05\nMonoImporter:\n serializedVersion: 2\n defaultReferences: []"
},
{
"path": "Assets/XLua/Examples/01_Helloworld/Helloworld.unity.meta",
"chars": 90,
"preview": "fileFormatVersion: 2\nguid: 58e2eda480b0c6e41a793391a9fb9a72\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/01_Helloworld.meta",
"chars": 107,
"preview": "fileFormatVersion: 2\nguid: c8fbb1a01533805479599cd3e19a5e4c\nfolderAsset: yes\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/02_U3DScripting/LuaBehaviour.cs",
"chars": 3640,
"preview": "/*\r\n * Tencent is pleased to support the open source community by making xLua available.\r\n * Copyright (C) 2016 THL A29"
},
{
"path": "Assets/XLua/Examples/02_U3DScripting/LuaBehaviour.cs.meta",
"chars": 178,
"preview": "fileFormatVersion: 2\nguid: b9173d38911503c4a9a371b0760bdd15\nMonoImporter:\n serializedVersion: 2\n defaultReferences: []"
},
{
"path": "Assets/XLua/Examples/02_U3DScripting/LuaTestScript.lua.txt",
"chars": 1172,
"preview": "-- Tencent is pleased to support the open source community by making xLua available.\r\n-- Copyright (C) 2016 THL A29 Limi"
},
{
"path": "Assets/XLua/Examples/02_U3DScripting/LuaTestScript.lua.txt.meta",
"chars": 93,
"preview": "fileFormatVersion: 2\nguid: 7cfed86298c2da543b693ffd8436367a\nTextScriptImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/02_U3DScripting/U3DScripting.unity.meta",
"chars": 90,
"preview": "fileFormatVersion: 2\nguid: 6d9b7cd8ac592564796c9c24b3636677\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/02_U3DScripting.meta",
"chars": 107,
"preview": "fileFormatVersion: 2\nguid: afd3fcbd8a9d48945b874adff2c0aa6d\nfolderAsset: yes\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/03_UIEvent/ButtonInteraction.lua.txt",
"chars": 873,
"preview": "-- Tencent is pleased to support the open source community by making xLua available.\r\n-- Copyright (C) 2016 THL A29 Limi"
},
{
"path": "Assets/XLua/Examples/03_UIEvent/ButtonInteraction.lua.txt.meta",
"chars": 93,
"preview": "fileFormatVersion: 2\nguid: 9b998ff8754d165438f1f34adb4f3d7e\nTextScriptImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/03_UIEvent/UI.unity.meta",
"chars": 90,
"preview": "fileFormatVersion: 2\nguid: f835eeddd75e9f74d95c957aa7ca44b2\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/03_UIEvent.meta",
"chars": 107,
"preview": "fileFormatVersion: 2\nguid: e4adea5640e39ca43a54b81b93ea2f32\nfolderAsset: yes\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/04_LuaObjectOrented/InvokeLua.cs",
"chars": 4725,
"preview": "/*\r\n * Tencent is pleased to support the open source community by making xLua available.\r\n * Copyright (C) 2016 THL A29"
},
{
"path": "Assets/XLua/Examples/04_LuaObjectOrented/InvokeLua.cs.meta",
"chars": 262,
"preview": "fileFormatVersion: 2\nguid: 2e190b5ef59b7a84dbb262cfd11f9107\ntimeCreated: 1478591887\nlicenseType: Pro\nMonoImporter:\n ser"
},
{
"path": "Assets/XLua/Examples/04_LuaObjectOrented/InvokeLua.unity.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 554d570d8b369434ba8a099ebafee542\ntimeCreated: 1478591886\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Examples/04_LuaObjectOrented.meta",
"chars": 191,
"preview": "fileFormatVersion: 2\nguid: 8d8101efdb236b04b9b7cfa592bee593\nfolderAsset: yes\ntimeCreated: 1480404151\nlicenseType: Pro\nDe"
},
{
"path": "Assets/XLua/Examples/05_NoGc/NoGc.cs",
"chars": 7730,
"preview": "/*\r\n * Tencent is pleased to support the open source community by making xLua available.\r\n * Copyright (C) 2016 THL A29"
},
{
"path": "Assets/XLua/Examples/05_NoGc/NoGc.cs.meta",
"chars": 178,
"preview": "fileFormatVersion: 2\nguid: 577a670e2d7ad5e4691e30c9249edf3e\nMonoImporter:\n serializedVersion: 2\n defaultReferences: []"
},
{
"path": "Assets/XLua/Examples/05_NoGc/NoGc.unity.meta",
"chars": 90,
"preview": "fileFormatVersion: 2\nguid: fa308fa7f40ec0348addeff1475bb164\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/05_NoGc.meta",
"chars": 107,
"preview": "fileFormatVersion: 2\nguid: 1e2eb0ecfd63eea4f820ff8575288639\nfolderAsset: yes\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/06_Coroutine/Coroutine.unity.meta",
"chars": 90,
"preview": "fileFormatVersion: 2\nguid: 15727d4119afc7a47b7d3284ca6990db\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/06_Coroutine/CoroutineTest.cs",
"chars": 600,
"preview": "using UnityEngine;\r\nusing XLua;\r\n\r\nnamespace XLuaTest\r\n{\r\n public class CoroutineTest : MonoBehaviour\r\n {\r\n "
},
{
"path": "Assets/XLua/Examples/06_Coroutine/CoroutineTest.cs.meta",
"chars": 178,
"preview": "fileFormatVersion: 2\nguid: 07b1a6730b144ab479c11ab079e2eb68\nMonoImporter:\n serializedVersion: 2\n defaultReferences: []"
},
{
"path": "Assets/XLua/Examples/06_Coroutine/Coroutine_Runner.cs",
"chars": 546,
"preview": "using UnityEngine;\r\nusing XLua;\r\nusing System.Collections.Generic;\r\nusing System.Collections;\r\nusing System;\r\n\r\nnamespac"
},
{
"path": "Assets/XLua/Examples/06_Coroutine/Coroutine_Runner.cs.meta",
"chars": 178,
"preview": "fileFormatVersion: 2\nguid: 9abe5e754f1c63247a254d53e34d1e40\nMonoImporter:\n serializedVersion: 2\n defaultReferences: []"
},
{
"path": "Assets/XLua/Examples/06_Coroutine/Resources/coruntine_test.lua.txt",
"chars": 1329,
"preview": "-- Tencent is pleased to support the open source community by making xLua available.\r\n-- Copyright (C) 2016 THL A29 Limi"
},
{
"path": "Assets/XLua/Examples/06_Coroutine/Resources/coruntine_test.lua.txt.meta",
"chars": 177,
"preview": "fileFormatVersion: 2\nguid: 13b04a36211388b45849c1fb7dd7b956\ntimeCreated: 1463554448\nlicenseType: Pro\nTextScriptImporter:"
},
{
"path": "Assets/XLua/Examples/06_Coroutine/Resources/cs_coroutine.lua.txt",
"chars": 1129,
"preview": "-- Tencent is pleased to support the open source community by making xLua available.\r\n-- Copyright (C) 2016 THL A29 Limi"
},
{
"path": "Assets/XLua/Examples/06_Coroutine/Resources/cs_coroutine.lua.txt.meta",
"chars": 177,
"preview": "fileFormatVersion: 2\nguid: 4f3d9471c4ae0aa47957ff35c0df972e\ntimeCreated: 1463555211\nlicenseType: Pro\nTextScriptImporter:"
},
{
"path": "Assets/XLua/Examples/06_Coroutine/Resources.meta",
"chars": 107,
"preview": "fileFormatVersion: 2\nguid: 08227e7d0eccf384aab65fb19928d3ef\nfolderAsset: yes\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/06_Coroutine.meta",
"chars": 107,
"preview": "fileFormatVersion: 2\nguid: 6a4f6da9af53d384d8228950f82ae562\nfolderAsset: yes\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/07_AsyncTest/AsyncTest.cs",
"chars": 1207,
"preview": "/*\r\n * Tencent is pleased to support the open source community by making xLua available.\r\n * Copyright (C) 2016 THL A29"
},
{
"path": "Assets/XLua/Examples/07_AsyncTest/AsyncTest.cs.meta",
"chars": 178,
"preview": "fileFormatVersion: 2\nguid: b5b2cbe03aa30c446ab56ae6f520277b\nMonoImporter:\n serializedVersion: 2\n defaultReferences: []"
},
{
"path": "Assets/XLua/Examples/07_AsyncTest/AsyncTest.unity.meta",
"chars": 90,
"preview": "fileFormatVersion: 2\nguid: 50ee330b40bfcc54cbdfb1c7c79a02d9\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/07_AsyncTest/MessageBox.cs",
"chars": 4366,
"preview": "/*\r\n * Tencent is pleased to support the open source community by making xLua available.\r\n * Copyright (C) 2016 THL A29"
},
{
"path": "Assets/XLua/Examples/07_AsyncTest/MessageBox.cs.meta",
"chars": 178,
"preview": "fileFormatVersion: 2\nguid: 20d92fd634185584eb982e0ad93a13a9\nMonoImporter:\n serializedVersion: 2\n defaultReferences: []"
},
{
"path": "Assets/XLua/Examples/07_AsyncTest/Resources/AlertBox.prefab.meta",
"chars": 95,
"preview": "fileFormatVersion: 2\nguid: dbfc57f47cf3853418df75ee656fdf90\nNativeFormatImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/07_AsyncTest/Resources/ConfirmBox.prefab.meta",
"chars": 95,
"preview": "fileFormatVersion: 2\nguid: 18c683fc899b71146b50b40d8d5fe57a\nNativeFormatImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/07_AsyncTest/Resources/async_test.lua.txt",
"chars": 1521,
"preview": "-- Tencent is pleased to support the open source community by making xLua available.\r\n-- Copyright (C) 2016 THL A29 Limi"
},
{
"path": "Assets/XLua/Examples/07_AsyncTest/Resources/async_test.lua.txt.meta",
"chars": 93,
"preview": "fileFormatVersion: 2\nguid: 40d0922483b73c8408f163088c9adc26\nTextScriptImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/07_AsyncTest/Resources/message_box.lua.txt",
"chars": 1122,
"preview": "-- Tencent is pleased to support the open source community by making xLua available.\r\n-- Copyright (C) 2016 THL A29 Lim"
},
{
"path": "Assets/XLua/Examples/07_AsyncTest/Resources/message_box.lua.txt.meta",
"chars": 93,
"preview": "fileFormatVersion: 2\nguid: 8cdad601850bd814c9a22efaff55928f\nTextScriptImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/07_AsyncTest/Resources.meta",
"chars": 107,
"preview": "fileFormatVersion: 2\nguid: bf7e4682a398f4243b4b200c3a8a1e35\nfolderAsset: yes\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/07_AsyncTest.meta",
"chars": 191,
"preview": "fileFormatVersion: 2\nguid: 9c07f66d94f59e944b4b4e50357847c2\nfolderAsset: yes\ntimeCreated: 1480404151\nlicenseType: Pro\nDe"
},
{
"path": "Assets/XLua/Examples/08_Hotfix/Editor/HotfixTestCfg.cs",
"chars": 531,
"preview": "using System;\r\nusing System.Collections.Generic;\r\nusing XLua;\r\n\r\nnamespace XLuaTest.Editor\r\n{\r\n public static class "
},
{
"path": "Assets/XLua/Examples/08_Hotfix/Editor/HotfixTestCfg.cs.meta",
"chars": 243,
"preview": "fileFormatVersion: 2\nguid: f5a751e2beef908429c5908d9e24696a\nMonoImporter:\n externalObjects: {}\n serializedVersion: 2\n "
},
{
"path": "Assets/XLua/Examples/08_Hotfix/Editor.meta",
"chars": 172,
"preview": "fileFormatVersion: 2\nguid: 2def16135c9e7644bae2869109a0b48e\nfolderAsset: yes\nDefaultImporter:\n externalObjects: {}\n us"
},
{
"path": "Assets/XLua/Examples/08_Hotfix/HotfixTest.cs",
"chars": 2175,
"preview": "using UnityEngine;\r\nusing XLua;\r\n\r\nnamespace XLuaTest\r\n{\r\n [Hotfix]\r\n public class HotfixTest : MonoBehaviour\r\n "
},
{
"path": "Assets/XLua/Examples/08_Hotfix/HotfixTest.cs.meta",
"chars": 262,
"preview": "fileFormatVersion: 2\nguid: 496cbe3b76e0a8649b6b6e429a322a9a\ntimeCreated: 1482318818\nlicenseType: Pro\nMonoImporter:\n ser"
},
{
"path": "Assets/XLua/Examples/08_Hotfix/HotfixTest.unity.meta",
"chars": 90,
"preview": "fileFormatVersion: 2\nguid: 71b8de6dc619ca64da460a7200f00b9c\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/08_Hotfix/HotfixTest2.cs",
"chars": 12775,
"preview": "using UnityEngine;\r\nusing XLua;\r\n\r\nnamespace XLuaTest\r\n{\r\n [Hotfix]\r\n public class HotfixCalc\r\n {\r\n pub"
},
{
"path": "Assets/XLua/Examples/08_Hotfix/HotfixTest2.cs.meta",
"chars": 262,
"preview": "fileFormatVersion: 2\nguid: beae9af8e5f127546a20bde154f9a580\ntimeCreated: 1482398730\nlicenseType: Pro\nMonoImporter:\n ser"
},
{
"path": "Assets/XLua/Examples/08_Hotfix/HotfixTest2.unity.meta",
"chars": 90,
"preview": "fileFormatVersion: 2\nguid: eb945840f7055384cbf1a3fb17903afe\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/08_Hotfix/StatefullTest.cs",
"chars": 1369,
"preview": "using UnityEngine;\r\n\r\nnamespace XLuaTest\r\n{\r\n [XLua.Hotfix]\r\n public class StatefullTest\r\n {\r\n public S"
},
{
"path": "Assets/XLua/Examples/08_Hotfix/StatefullTest.cs.meta",
"chars": 262,
"preview": "fileFormatVersion: 2\nguid: b093a617e1bf7984c8824ba9d40afbe0\ntimeCreated: 1482643106\nlicenseType: Pro\nMonoImporter:\n ser"
},
{
"path": "Assets/XLua/Examples/08_Hotfix.meta",
"chars": 191,
"preview": "fileFormatVersion: 2\nguid: 08ebe6e4959b8c34aad49a439411e429\nfolderAsset: yes\ntimeCreated: 1482318804\nlicenseType: Pro\nDe"
},
{
"path": "Assets/XLua/Examples/09_GenericMethod/Foo.cs",
"chars": 2629,
"preview": "using System;\nusing System.IO;\nusing System.Collections.Generic;\nusing UnityEngine;\nusing XLua;\n\nnamespace XLuaTest\r\n{\r"
},
{
"path": "Assets/XLua/Examples/09_GenericMethod/Foo.cs.meta",
"chars": 263,
"preview": "fileFormatVersion: 2\nguid: 3894dbe73b280d44e9c58b8e33c93995\ntimeCreated: 1486348303\nlicenseType: Free\nMonoImporter:\n se"
},
{
"path": "Assets/XLua/Examples/09_GenericMethod/GenericMethod.unity.meta",
"chars": 175,
"preview": "fileFormatVersion: 2\nguid: 19477d725133da049be476cb4caedf7d\ntimeCreated: 1486350257\nlicenseType: Free\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Examples/09_GenericMethod/GenericMethodExample.cs",
"chars": 926,
"preview": "using UnityEngine;\r\nusing XLua;\r\n\r\nnamespace XLuaTest\r\n{\r\n\r\n public class GenericMethodExample : MonoBehaviour\r\n "
},
{
"path": "Assets/XLua/Examples/09_GenericMethod/GenericMethodExample.cs.meta",
"chars": 263,
"preview": "fileFormatVersion: 2\nguid: ce77e35c083e6fe4c88cb64a97466161\ntimeCreated: 1486353566\nlicenseType: Free\nMonoImporter:\n se"
},
{
"path": "Assets/XLua/Examples/09_GenericMethod.meta",
"chars": 192,
"preview": "fileFormatVersion: 2\nguid: 0c2493fccdb6a2141933ed2ec5d4786b\nfolderAsset: yes\ntimeCreated: 1486348159\nlicenseType: Free\nD"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/Resources/signatured1.lua.bytes.meta",
"chars": 177,
"preview": "fileFormatVersion: 2\nguid: 44928e4c9a6ef3542b8dc8f3fed4c9d8\ntimeCreated: 1489377018\nlicenseType: Pro\nTextScriptImporter:"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/Resources/signatured2.lua.bytes",
"chars": 115,
"preview": "\u00129ў+4D\u000b\u001eb\u0016r\u001b⁘*\u0005Fən\u0013[b\\؈k\u001b\u0019\u0014\u001ap/9+x\u0015D.C\u0012\u0013\u0007=\u000f8-P^jq*<FViz\u0012*U+ \u001aT\"0g\u001eprint('signatured2: this source was signatured!')"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/Resources/signatured2.lua.bytes.meta",
"chars": 177,
"preview": "fileFormatVersion: 2\nguid: dfe267f4b0fe1a349a23184f840622bd\ntimeCreated: 1489377018\nlicenseType: Pro\nTextScriptImporter:"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/Resources/signatured3.lua.bytes",
"chars": 115,
"preview": "j?\u001eSc\u0017=D\u000e'c+\\TF\u0003]OS'{Kr_\u00132\"F۴@kߐvm<\u0004\u0018+c0t33I+G{\f]s*#0]#\nIˬ={A*Bp*\u001bprint('signatured3: this source was signatured!')"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/Resources/signatured3.lua.bytes.meta",
"chars": 177,
"preview": "fileFormatVersion: 2\nguid: 25beaf0816ae33a43b715f68010bbfdd\ntimeCreated: 1489377018\nlicenseType: Pro\nTextScriptImporter:"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/Resources.meta",
"chars": 191,
"preview": "fileFormatVersion: 2\nguid: 2e7d0896355998b4fa5efcfa1b9f1f84\nfolderAsset: yes\ntimeCreated: 1489376947\nlicenseType: Pro\nDe"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/SignatureLoaderTest.cs",
"chars": 1726,
"preview": "using UnityEngine;\r\nusing System.Collections;\r\nusing XLua;\r\nusing System.IO;\r\n\r\nnamespace XLuaTest\r\n{\r\n public class"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/SignatureLoaderTest.cs.meta",
"chars": 262,
"preview": "fileFormatVersion: 2\nguid: 552b1f9f9174fe446907357379f128b2\ntimeCreated: 1489222400\nlicenseType: Pro\nMonoImporter:\n ser"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/SignatureLoaderTest.unity.meta",
"chars": 90,
"preview": "fileFormatVersion: 2\nguid: 7bf24e9d2076ecd4ba65687e9d238c34\nDefaultImporter:\n userData: \n"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/otherfiles/key_ras",
"chars": 915,
"preview": "<RSAKeyValue><Modulus>t5oMWjVmPmW1SCeGwGELDSXfhO+S/CzCdMP565GW4VSZ/gKCBAZLEuWb/2PIuuPPfb2/9e069J1f+V7SZLqFY+eg2UPlpSdu1k"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/otherfiles/key_ras.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 059b7b0b901925a49a1aab1169c15dee\ntimeCreated: 1489371190\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/otherfiles/key_ras.pub",
"chars": 200,
"preview": "BgIAAACkAABSU0ExAAQAAAEAAQBVDDC5QJ+0uSCJA+EysIC9JBzIsd6wcXa+FuTGXcsJuwyUkabwIiT2+QEjP454RwfSQP8s4VZE1m4npeVD2aDnY4W6ZNJe"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/otherfiles/key_ras.pub.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: ccd4f9e35fcee3b439e31a15449a1765\ntimeCreated: 1489371190\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/otherfiles/signatured1.lua",
"chars": 72,
"preview": "require 'signatured3'\r\nprint('signatured1: this source was signatured!')"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/otherfiles/signatured1.lua.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 213d1592ca01d9a4fba0477875fcd2ef\ntimeCreated: 1489371350\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/otherfiles/signatured2.lua",
"chars": 49,
"preview": "print('signatured2: this source was signatured!')"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/otherfiles/signatured2.lua.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 384893ab7180e0c448d6521421f1859f\ntimeCreated: 1489371350\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/otherfiles/signatured3.lua",
"chars": 49,
"preview": "print('signatured3: this source was signatured!')"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/otherfiles/signatured3.lua.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 8771a42e51c869743bd8cbf0511b8afd\ntimeCreated: 1489371350\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/otherfiles.meta",
"chars": 191,
"preview": "fileFormatVersion: 2\nguid: 41c79b0f7edf32d48a7a81664f1e96ec\nfolderAsset: yes\ntimeCreated: 1489371190\nlicenseType: Pro\nDe"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/signatured1.lua.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: c9d3a7e24d889a7418ad19a390178f88\ntimeCreated: 1489370693\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/signatured2.lua",
"chars": 115,
"preview": "\u00129ў+4D\u000b\u001eb\u0016r\u001b⁘*\u0005Fən\u0013[b\\؈k\u001b\u0019\u0014\u001ap/9+x\u0015D.C\u0012\u0013\u0007=\u000f8-P^jq*<FViz\u0012*U+ \u001aT\"0g\u001eprint('signatured2: this source was signatured!')"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/signatured2.lua.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: dceaef6c0e4f511489f2a9d6d198afa7\ntimeCreated: 1489370693\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/signatured3.lua",
"chars": 115,
"preview": "j?\u001eSc\u0017=D\u000e'c+\\TF\u0003]OS'{Kr_\u00132\"F۴@kߐvm<\u0004\u0018+c0t33I+G{\f]s*#0]#\nIˬ={A*Bp*\u001bprint('signatured3: this source was signatured!')"
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader/signatured3.lua.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 4ee183ed57618894dab4d3b9a68790cf\ntimeCreated: 1489370693\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Examples/10_SignatureLoader.meta",
"chars": 191,
"preview": "fileFormatVersion: 2\nguid: c91c5604efec9954b85970057e91b759\nfolderAsset: yes\ntimeCreated: 1489222333\nlicenseType: Pro\nDe"
},
{
"path": "Assets/XLua/Examples/11_RawObject/RawObject.unity.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: 338b384cc2d92bf42b28fbe2f172c4ec\ntimeCreated: 1520415330\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Examples/11_RawObject/RawObjectTest.cs",
"chars": 786,
"preview": "using UnityEngine;\r\nusing XLua;\r\n\r\nnamespace XLuaTest\r\n{\r\n public class RawObjectTest : MonoBehaviour\r\n {\r\n "
},
{
"path": "Assets/XLua/Examples/11_RawObject/RawObjectTest.cs.meta",
"chars": 262,
"preview": "fileFormatVersion: 2\nguid: 5c9d37dc5ac4e44448bd8858d68604e5\ntimeCreated: 1498116708\nlicenseType: Pro\nMonoImporter:\n ser"
},
{
"path": "Assets/XLua/Examples/11_RawObject.meta",
"chars": 191,
"preview": "fileFormatVersion: 2\nguid: 7e8c24c5719ad6b4b8b2d9ecf19cfec7\nfolderAsset: yes\ntimeCreated: 1498116676\nlicenseType: Pro\nDe"
},
{
"path": "Assets/XLua/Examples/12_ReImplementInLua/ReImplementInLua.cs",
"chars": 4925,
"preview": "using UnityEngine;\r\nusing System.Collections;\r\nusing XLua;\r\n\r\nnamespace XLuaTest\r\n{\r\n\r\n [GCOptimize(OptimizeFlag.Pac"
},
{
"path": "Assets/XLua/Examples/12_ReImplementInLua/ReImplementInLua.cs.meta",
"chars": 262,
"preview": "fileFormatVersion: 2\nguid: cffb50bfe4f87494c8a4851450dfb340\ntimeCreated: 1501577402\nlicenseType: Pro\nMonoImporter:\n ser"
},
{
"path": "Assets/XLua/Examples/12_ReImplementInLua/ReImplementInLua.unity.meta",
"chars": 174,
"preview": "fileFormatVersion: 2\nguid: c4695949a6b369345a5ecdcc82c946c1\ntimeCreated: 1520415435\nlicenseType: Pro\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Examples/12_ReImplementInLua.meta",
"chars": 191,
"preview": "fileFormatVersion: 2\nguid: 58695f06576335e46bf1769637db2255\nfolderAsset: yes\ntimeCreated: 1501577332\nlicenseType: Pro\nDe"
},
{
"path": "Assets/XLua/Examples/13_BuildFromCLI/Editor/BuildFromCLI.cs",
"chars": 1547,
"preview": "using System;\r\nusing UnityEditor;\r\nusing UnityEngine;\r\nusing CSObjectWrapEditor;\r\nusing XLua;\r\n\r\nnamespace XLuaTest\r\n{\r"
},
{
"path": "Assets/XLua/Examples/13_BuildFromCLI/Editor/BuildFromCLI.cs.meta",
"chars": 285,
"preview": "fileFormatVersion: 2\nguid: 1fd3fcc7509943c45af11f63df13d137\ntimeCreated: 1531790057\nlicenseType: Free\nMonoImporter:\n ex"
},
{
"path": "Assets/XLua/Examples/13_BuildFromCLI/Editor.meta",
"chars": 214,
"preview": "fileFormatVersion: 2\nguid: 266e4ca9a64f701449b0468b9a4f1d32\nfolderAsset: yes\ntimeCreated: 1531790107\nlicenseType: Free\nD"
},
{
"path": "Assets/XLua/Examples/13_BuildFromCLI/build.bat",
"chars": 765,
"preview": "@echo off\r\necho =======================================================\r\necho ˵ʾʾеUnityԶ\r\necho C#ԴοBuildFromCLI.cs"
},
{
"path": "Assets/XLua/Examples/13_BuildFromCLI/build.bat.meta",
"chars": 197,
"preview": "fileFormatVersion: 2\nguid: 165d35780a78009469ee772b2ab15e81\ntimeCreated: 1531791711\nlicenseType: Free\nDefaultImporter:\n "
},
{
"path": "Assets/XLua/Examples/13_BuildFromCLI.meta",
"chars": 214,
"preview": "fileFormatVersion: 2\nguid: 7ea057dec6022624fa54a0ccc12648ee\nfolderAsset: yes\ntimeCreated: 1531790017\nlicenseType: Free\nD"
},
{
"path": "Assets/XLua/Examples/14_HotfixAsyncAwait/HotfixAsyncAwaitTest.cs",
"chars": 8366,
"preview": "using System.Collections;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing UnityEngine;\nusing XLua"
}
]
// ... and 1347 more files (download for full content)
About this extraction
This page contains the full source code of the Tencent/xLua GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1547 files (16.7 MB), approximately 4.4M tokens, and a symbol index with 14377 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.