From 7c5f78299cf65d1e1076432e82688f073a78d892 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?johnche=28=E8=BD=A6=E9=9B=84=E7=94=9F=29?= Date: Thu, 10 Aug 2017 15:29:29 +0800 Subject: [PATCH] =?UTF-8?q?2.1.9=E5=8F=91=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/XLua/CHANGELOG.txt | 8 +- .../XLua/Examples/01_Helloworld/Helloworld.cs | 476 +++++++++++++++++- .../Examples/01_Helloworld/Helloworld.unity | Bin 13116 -> 11004 bytes README.md | 2 +- 4 files changed, 478 insertions(+), 8 deletions(-) diff --git a/Assets/XLua/CHANGELOG.txt b/Assets/XLua/CHANGELOG.txt index c6c5f39b9..f1e7012b3 100644 --- a/Assets/XLua/CHANGELOG.txt +++ b/Assets/XLua/CHANGELOG.txt @@ -1,12 +1,12 @@ -v2.1.9 [待发布] +v2.1.9 2017年8月10日 新增特性 -1、新增最小生成模式,可以节省50%的text段空间; +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侧完成; +4、新增 xlua.getmetatable、xlua.setmetatable、xlua.setclass、xlua.genaccessor,用以支持lua使用C#类型直接在lua侧完成; 5、反射下扩展方法的支持; -优化 +工程优化 1、加入travis持续集成; 变更 diff --git a/Assets/XLua/Examples/01_Helloworld/Helloworld.cs b/Assets/XLua/Examples/01_Helloworld/Helloworld.cs index f598a796e..788c64f05 100644 --- a/Assets/XLua/Examples/01_Helloworld/Helloworld.cs +++ b/Assets/XLua/Examples/01_Helloworld/Helloworld.cs @@ -8,17 +8,487 @@ using UnityEngine; using XLua; +using System; +using System.Reflection; +using System.Linq; +using System.Collections.Generic; + +public class BBClass +{ + public void AB() + { + UnityEngine.Debug.Log("BBClass.AB"); + } + + public virtual void CD() + { + UnityEngine.Debug.Log("BBClass.CD"); + } +} + +public class HelloCall +{ + public int Add(int a, int b) + { + return a + b; + } + + public int Add(int a) + { + return a; + } +} + +public class DDClass : BBClass +{ + public void AB() + { + UnityEngine.Debug.Log("DDClass.AB"); + } + + + public override void CD() + { + UnityEngine.Debug.Log("DDClass.CD"); + } +} + +[CSharpCallLua] + +public delegate void AAA(System.IntPtr p, System.UIntPtr p2, out object o); + +public delegate void MyAction(); + +public class TestTestTest +{ + ~TestTestTest() + { + Debug.Log("TestTestTest"); + + } +} + +public interface IHehe +{ + void Foo(); +} + +[LuaCallCSharp] +public struct Hehe : IHehe +{ + public void Foo() + { + + } +} + +[LuaCallCSharp] +public static class TestExtension +{ + public static void AddInput(this U p1, V p2) where U :struct, IHehe where V :struct, IHehe + { + + } + + public static void Des(this U p1) where U : struct, IHehe + { + + } +} + +public class ABCDE +{ + public int AAA; + + public void Foo(int a) + { + Debug.Log("Abc.Foo :" + a + ", AAA" + a); + } + + public static void SFoo(int a) + { + Debug.Log("Abc.SFoo :" + a); + } + + void Bar(double b) + { + + } + + public static Delegate CreateDelegate(Type type, object firstArgument, MethodInfo method) + { + return Delegate.CreateDelegate(type, firstArgument, method); + } +} + +public static class CFG +{ + [LuaCallCSharp] + public static List a = new List() + { + typeof(Delegate), + typeof(ABCDE) + }; +} + +public delegate void MyDelegate(int a); + +[LuaCallCSharp] +public class MyInt +{ + private int m_value; + + public int Value + { + get { return m_value; } + set { m_value = value; } + } + + public MyInt(int value) + { + m_value = value; + } + + public static MyInt operator &(MyInt a, MyInt b) + { + MyInt c = new MyInt(0); + c.Value = a.Value & b.Value; + return c; + } + + public static MyInt operator |(MyInt a, MyInt b) + { + MyInt c = new MyInt(0); + c.Value = a.Value | b.Value; + return c; + } + + public static MyInt operator ^(MyInt a, MyInt b) + { + MyInt c = new MyInt(0); + c.Value = a.Value ^ b.Value; + return c; + } + + public static MyInt operator ~(MyInt a) + { + MyInt c = new MyInt(0); + c.Value = ~a.Value; + return c; + } + + public static MyInt operator <<(MyInt a, int s) + { + MyInt c = new MyInt(0); + c.Value = a.Value << s; + return c; + } + + public static MyInt operator >>(MyInt a, int s) + { + MyInt c = new MyInt(0); + c.Value = a.Value >> s; + return c; + } +} + +enum LargeEnum +{ + A = 1 +} + +[LuaCallCSharp] public class Helloworld : MonoBehaviour { + static public string CCC; + public const string a = "test"; + + public static int? AAA = null; + + public static void ToMyType(object number, ref object CNum) + { + + } + + public static bool SetStruct(ref T currentValue, T newValue) where T : struct + { + return true; + } + + public static bool SetClass(ref T currentValue, T newValue) where T : class + { + return true; + } + + public int PP { get; private set; } + + [Obsolete("hehe")] + public void T1() { } + + [Obsolete("hehe2", true)] + public void T2() { } + + public System.Action act; + + public MyDelegate md; + + public void TestMd() + { + md(100); + } + + public void Foo() + { + if (XLua.HotfixDelegateBridge.xlua_get_hotfix_flag(0)) + { + Debug.Log("Bar"); + } + Debug.Log("Foo"); + } + + public void CallCC(LuaTable scriptEnv) + { + Action cc = scriptEnv.Get("cc"); + cc(); + cc = null; + } // Use this for initialization void Start () { LuaEnv luaenv = new LuaEnv(); - luaenv.DoString("CS.UnityEngine.Debug.Log('hello world')"); + Debug.Log(typeof(Dictionary).AssemblyQualifiedName); + foreach(var t in typeof(DG.Tweening.Core.TweenerCore<,,>).GetGenericArguments()) + { + Debug.Log(t); + foreach(var c in t.GetGenericParameterConstraints()) + { + Debug.Log("c------" + c); + } + + Debug.Log("========" + t.GenericParameterAttributes); + } + + Debug.Log("++++++++++++++++++++++++++++++++++"); + + foreach (var t in typeof(ITestConstrains<>).GetGenericArguments()) + { + Debug.Log(t); + foreach (var c in t.GetGenericParameterConstraints()) + { + Debug.Log("c------" + c); + } + + Debug.Log("========" + t.GenericParameterAttributes); + } + //typeof(ABCDE).GetMethod() + luaenv.Global.Set("self", this); + luaenv.DoString(@" +local m = typeof(CS.ABCDE):GetMethod('Foo', {typeof(CS.System.Int32)}) +print(m) +m = typeof(CS.ABCDE):GetMethod('Bar', {typeof(CS.System.Double)}) +print(m) +m = typeof(CS.ABCDE):GetMethod('Bar', CS.System.Reflection.BindingFlags.Public | CS.System.Reflection.BindingFlags.NonPublic + | CS.System.Reflection.BindingFlags.Instance | CS.System.Reflection.BindingFlags.Static) +print(m) + +m = typeof(CS.ABCDE):GetMethod('Bar', CS.System.Reflection.BindingFlags.Public | CS.System.Reflection.BindingFlags.NonPublic + | CS.System.Reflection.BindingFlags.Instance | CS.System.Reflection.BindingFlags.Static, nil, {typeof(CS.System.Double)}, nil) +print(m) + +print((CS.MyInt(2) & CS.MyInt(3)).Value) +print((CS.MyInt(2) | CS.MyInt(3)).Value) +print((CS.MyInt(2) ~ CS.MyInt(3)).Value) +print((~ CS.MyInt(3)).Value) +print((CS.MyInt(3) >> 1).Value) +print((CS.MyInt(3) << 1).Value) + +print(CS.System.Reflection.BindingFlags.Public, CS.System.Reflection.BindingFlags.NonPublic) +print(CS.System.Reflection.BindingFlags.Public | CS.System.Reflection.BindingFlags.NonPublic) + +local util = require 'xlua.util' + +local abcd = CS.ABCDE() + +local d = util.createdelegate(CS.MyDelegate, abcd, CS.ABCDE, 'Foo', {typeof(CS.System.Int32)}) +local d2 = util.createdelegate(CS.MyDelegate, nil, CS.ABCDE, 'SFoo', {typeof(CS.System.Int32)}) +self.md = d + d2 +self:TestMd() + +--print(CS.System.Type.GetType('System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[UnityEngine.Object, UnityEngine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089')) +--print(CS.System.Type.GetType('System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UnityEngine.Object, UnityEngine]], mscorlib')) +--print(CS.System.Type.GetType('System.Collections.Generic.Dictionary`2[System.String,[UnityEngine.Object, UnityEngine]]')) +--print(xlua.getmetatable('System.Collections.Generic.Dictionary`2[System.String,[UnityEngine.Object, UnityEngine]]')) +--xlua.getmetatable(CS.System.Collections.Generic['Dictionary`2[System.String,[UnityEngine.Object, UnityEngine]]']) +"); + + + + //typeof(ABCDE).GetMethod() luaenv.Dispose(); - } + /*var m = typeof(TestExtension).GetMethod("AddInput"); + foreach(var p in m.GetParameters()) + { + foreach(var c in p.Get) + }*/ + + //LuaEnv luaenv = new LuaEnv(); + //luaenv.DoString("local a = CS.UnityEngine.Quaternion(0,0,0) "); + //luaenv.Global.Set("self", this); + //Debug.Log(luaenv.Global.ContainsKey("self")); + //Debug.Log(luaenv.Global.ContainsKey("self1")); + //for(int i = 0; i< 100000;i++) + //{ + // luaenv.Global.ContainsKey("self"); + // luaenv.Global.ContainsKey("self1"); + //} + //Debug.Log(luaenv.Global.ContainsKey("self")); + //Debug.Log(luaenv.Global.ContainsKey("self1")); + + /* + LuaTable scriptEnv = luaenv.NewTable(); + LuaTable meta = luaenv.NewTable(); + meta.Set("__index", luaenv.Global); + scriptEnv.SetMetaTable(meta); + meta.Dispose();*/ + + //var tg = new TestGC(444); + //luaenv.Global.Set("a", tg); + //luaenv.Global.Set("a", null); + //tg = null; + + //new Int32(); + //luaenv.Global.Set("self", this); + //luaenv.Global.Set("l", new List()); + //luaenv.Global.Set("d1", new Dictionary()); + //luaenv.Global.Set("d2", new Dictionary()); + //luaenv.Global.Set("d3", new Dictionary()); + /*luaenv.DoString(@" +CS.UnityEngine.Debug.Log('hello world') +--local o = CS.UnityEngine.GameObject.Find('Main Camera') +--o:StopAnimation() +--print(self.PP) +--local util = require 'xlua.util' +--xlua.private_accessible(CS.Helloworld) +--self.PP = 10 +--print(self.PP) + +--l:Add(1) +--d1:Add(2, 5) +--d2:Add('h', 4) +--d3:Add('j', 'o') +--iprint('hehe', 1, 2, 3) +");*/ + //UnityEngine.GameObject. + + //LuaFunction geta = luaenv.Global.Get("ReturnA"); + //Debug.Log(geta.Call()[0]); + //LuaTable tbl = luaenv.NewTable(); + //geta.SetEnv(tbl); + //Debug.Log(geta.Call()[0]); + + + //Action cc = scriptEnv.Get("cc"); + //cc(); + //cc = null; + //CallCC(scriptEnv); + + //LuaFunction cc = luaenv.Global.Get("cc"); + //luaenv.PrintTop(); + //cc.Call(1); + //cc.Call(3214); + //luaenv.PrintTop(); + //cc.Call(2435423); + //luaenv.PrintTop(); + //cc.Call(43151); + //luaenv.PrintTop(); + //cc.Dispose(); + + //scriptEnv.Dispose(); + + //System.GC.Collect(); + //System.GC.WaitForPendingFinalizers(); + //luaenv.Tick(); + //luaenv.FullGc(); + //System.GC.Collect(); + //System.GC.WaitForPendingFinalizers(); + ////luaenv.FullGc(); + //Debug.Log("-------------------"); + //luaenv.Dispose(); + //UnityEngine.Debug.Log("a:" + (typeof(int) == typeof(int?))); + //var t = new UnsafeTest(); + //t.UnsafeSet(2, 10); + //Debug.Log(t.UnsafeGet(2)); + + //BBClass bb = new DDClass(); + //bb.AB(); + //bb.CD(); + //(bb as DDClass).AB(); + //(bb as DDClass).CD(); + //foreach(var type in Assembly.Load("Assembly-CSharp").GetTypes()) + //{ + // var bindingAttrOfMethod = BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly | BindingFlags.NonPublic; + // // + // if (type.Namespace != null && type.Namespace.StartsWith("XLua") && + // type.GetConstructors(bindingAttrOfMethod).Any(m => m.Name == ".cctor" && m.IsSpecialName)) + // { + // Debug.LogWarning(type.ToString() + " ok??"); + // foreach (var method in (type.GetMethods(bindingAttrOfMethod).Where(m => m.IsStatic && !m.IsConstructor))) + // { + // Debug.Log("type:" + method.DeclaringType + ",method:" + method); + // } + // } + // else + // { + // //Debug.Log(type.ToString() + " ok"); + // } + //} + + //Array arr = new int[] { 1 }; + //Debug.Log(arr.GetValue(1)); + //var type = typeof(Dictionary<,>); + //Debug.Log("B:" + type.IsGenericTypeDefinition); + //foreach(var garg in type.GetGenericArguments()) + //{ + // Debug.Log(garg + ",p:"+ garg.DeclaringType+ ",m:" + garg.DeclaringMethod); + //} + + //Debug.Log("B:" + typeof(System.Collections.Generic.IEqualityComparer<>)); + //Debug.Log("B:" + typeof(Dictionary)); + } // Update is called once per frame void Update () { - + if (getInjection(1) != null) + { + var injection = getInjection(1) as MyAction; + injection(); + } } + + static object[] injectionList = null; + + object getInjection(int idx) + { + if (injectionList == null || idx >= injectionList.Length) + { + return null; + } + else + { + return injectionList[idx]; + } + } + + +} + +[Hotfix] +public class ObjectPool +{ + public static ObjectPool get_Instance() + { + return null; + } } + + + diff --git a/Assets/XLua/Examples/01_Helloworld/Helloworld.unity b/Assets/XLua/Examples/01_Helloworld/Helloworld.unity index 6d5b1fdf4553d65999e250790d5decba91248d80..ab05bced974d4214323bd846360b6819b7a66376 100644 GIT binary patch literal 11004 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 A761SM literal 13116 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 diff --git a/README.md b/README.md index efbedcf89..3083a941c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ![](Assets/XLua/Doc/xLua.png) [![license](http://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/Tencent/xLua/blob/master/LICENSE.TXT) -[![release](https://img.shields.io/badge/release-v2.1.8-blue.svg)](https://github.com/Tencent/xLua/releases) +[![release](https://img.shields.io/badge/release-v2.1.9-blue.svg)](https://github.com/Tencent/xLua/releases) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-blue.svg)](https://github.com/Tencent/xLua/pulls) [![Build status](https://travis-ci.org/Tencent/xLua.svg?branch=master)](https://travis-ci.org/Tencent/xLua)