From 70060e9979ef409a886ef100d9de210203293cbc Mon Sep 17 00:00:00 2001 From: ale Date: Fri, 1 Sep 2023 16:55:37 +0800 Subject: [PATCH 01/15] =?UTF-8?q?=E5=A4=84=E7=90=86=20nullable=20GetValueO?= =?UTF-8?q?rDefault?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../VSProj/Src/Core/ReflectionMethodInvoker.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Source/VSProj/Src/Core/ReflectionMethodInvoker.cs b/Source/VSProj/Src/Core/ReflectionMethodInvoker.cs index 2de7441..b730435 100644 --- a/Source/VSProj/Src/Core/ReflectionMethodInvoker.cs +++ b/Source/VSProj/Src/Core/ReflectionMethodInvoker.cs @@ -34,6 +34,7 @@ internal class ReflectionMethodInvoker bool isNullableHasValue = false; bool isNullableValue = false; + bool isNullableGetValueOrDefault = false; public ReflectionMethodInvoker(MethodBase method) { @@ -75,6 +76,7 @@ public ReflectionMethodInvoker(MethodBase method) && method.DeclaringType.GetGenericTypeDefinition() == typeof(Nullable<>); isNullableHasValue = isNullableMethod && method.Name == "get_HasValue"; isNullableValue = isNullableMethod && method.Name == "get_Value"; + isNullableGetValueOrDefault = isNullableMethod && method.Name == "GetValueOrDefault"; } // #lizard forgives @@ -156,6 +158,20 @@ public unsafe void Invoke(VirtualMachine virtualMachine, ref Call call, bool isI { ret = instance; } + else if (isNullableGetValueOrDefault) + { + if(instance == null) + { + if(paramCount == 0) + ret = System.Activator.CreateInstance(returnType); + else + ret = args[0]; + } + else + { + ret = instance; + } + } else { if (method.IsStatic == false && instance == null) From 6647ad9d59056e512911ab02de98ba960baf9713 Mon Sep 17 00:00:00 2001 From: ale Date: Fri, 29 Mar 2024 12:06:11 +0800 Subject: [PATCH 02/15] =?UTF-8?q?stash=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets/Helloworld/Editor/HelloworldCfg.cs | 8 +- .../UnityProj/Assets/Helloworld/Helloworld.cs | 104 +- .../Assets/Helloworld/Helloworld.unity | Bin 12964 -> 19256 bytes .../Assets/IFix/Editor/ILFixCodeGen.cs | 899 ++++++++++++++++++ .../Assets/IFix/Editor/ILFixCodeGen.cs.meta | 3 + .../Assets/IFix/Editor/ILFixEditor.cs | 300 +++++- .../Assets/IFix/IFixBindingCaller.cs | 14 + .../Assets/IFix/IFixBindingCaller.cs.meta | 3 + 8 files changed, 1269 insertions(+), 62 deletions(-) create mode 100644 Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs create mode 100644 Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs.meta create mode 100644 Source/UnityProj/Assets/IFix/IFixBindingCaller.cs create mode 100644 Source/UnityProj/Assets/IFix/IFixBindingCaller.cs.meta diff --git a/Source/UnityProj/Assets/Helloworld/Editor/HelloworldCfg.cs b/Source/UnityProj/Assets/Helloworld/Editor/HelloworldCfg.cs index 8651e8b..83ea385 100644 --- a/Source/UnityProj/Assets/Helloworld/Editor/HelloworldCfg.cs +++ b/Source/UnityProj/Assets/Helloworld/Editor/HelloworldCfg.cs @@ -21,10 +21,10 @@ static IEnumerable hotfix { return new List() { - typeof(Helloworld), - typeof(IFix.Test.Calculator), - //AnotherClass在Pro Standard Assets下,会编译到Assembly-CSharp-firstpass.dll下,用来演示多dll的修复 - typeof(AnotherClass), + // typeof(Helloworld), + // typeof(IFix.Test.Calculator), + // //AnotherClass在Pro Standard Assets下,会编译到Assembly-CSharp-firstpass.dll下,用来演示多dll的修复 + // typeof(AnotherClass), }; } } diff --git a/Source/UnityProj/Assets/Helloworld/Helloworld.cs b/Source/UnityProj/Assets/Helloworld/Helloworld.cs index 9fc99ad..f5cc16a 100644 --- a/Source/UnityProj/Assets/Helloworld/Helloworld.cs +++ b/Source/UnityProj/Assets/Helloworld/Helloworld.cs @@ -5,16 +5,63 @@ * This file is subject to the terms and conditions defined in file 'LICENSE', which is part of this source code package. */ +using System; +using System.Collections.Generic; using UnityEngine; using IFix.Core; using System.IO; using System.Diagnostics; +using System.Runtime.InteropServices; + +public static class StackClass where T : unmanaged +{ + public static Stack cache = new Stack(); +} // 跑不同仔细看文档Doc/example.md public class Helloworld : MonoBehaviour { + public static unsafe object BoxValueToObject(T value) where T : unmanaged + { + Stack cache = StackClass.cache; + object result = null; + lock (cache) + { + result = cache.Count <= 0 ? default(T) : cache.Pop(); + } + + GCHandle h = GCHandle.Alloc(result, GCHandleType.Pinned); + IntPtr ptr = h.AddrOfPinnedObject(); + + T* valuePtr = (T*)(ptr).ToPointer(); + *valuePtr = value; + + h.Free(); + + return result; + } + + public static unsafe void UnBoxObjectToValue(object value, out T ret) where T : unmanaged + { + Stack cache = StackClass.cache; + + GCHandle h = GCHandle.Alloc(value, GCHandleType.Pinned); + IntPtr ptr = h.AddrOfPinnedObject(); + T* valuePtr = (T*)(ptr).ToPointer(); + lock (cache) + { + cache.Push(value); + } + + h.Free(); + + ret = *valuePtr; + } + + // check and load patchs - void Start () { + void Start () + { VirtualMachine.Info = (s) => UnityEngine.Debug.Log(s); //try to load patch for Assembly-CSharp.dll var patch = Resources.Load("Assembly-CSharp.patch"); @@ -38,6 +85,49 @@ void Start () { test(); } + struct MyStruct + { + public int x; + public int y; + + public MyStruct(int x, int y) + { + this.x = x; + this.y = y; + } + //public List list; + } + + private void CallObject(object o) + { + Vector3 newPos;// = (Vector3)o; + UnBoxObjectToValue(o, out newPos); + } + + private void CallMyObject(object o) + { + MyStruct newPos;// = (MyStruct)o; + UnBoxObjectToValue(o, out newPos); + } + + Vector3 pos = new Vector3(1, 2, 3); + MyStruct s = new MyStruct(1, 1); + private unsafe void Update() + { + for (int i = 0; i < 1000; i++) + { + object v = BoxValueToObject(pos);//pos; + CallObject(v); + } + + for (int i = 0; i < 1000; i++) + { + object sv = BoxValueToObject(s);//s; + CallMyObject(sv); + } + + } + [IFix.Patch] void test() { @@ -50,16 +140,16 @@ void test() var anotherClass = new AnotherClass(1); //AnotherClass in Assembly-CSharp-firstpass.dll var ret = anotherClass.Call(i => i + 1); - UnityEngine.Debug.Log("anotherClass.Call, ret = " + ret); - - //test for InjectFix/Fix(Android) InjectFix/Fix(IOS) Menu for unity 2018.3 or newer + UnityEngine.Debug.Log("anotherClass.Call, ret = " + ret); + + //test for InjectFix/Fix(Android) InjectFix/Fix(IOS) Menu for unity 2018.3 or newer #if UNITY_2018_3_OR_NEWER #if UNITY_IOS UnityEngine.Debug.Log("UNITY_IOS"); -#endif +#endif #if UNITY_EDITOR - UnityEngine.Debug.Log("UNITY_EDITOR"); -#endif + UnityEngine.Debug.Log("UNITY_EDITOR"); +#endif #if UNITY_ANDROID UnityEngine.Debug.Log("UNITY_ANDROID"); #endif diff --git a/Source/UnityProj/Assets/Helloworld/Helloworld.unity b/Source/UnityProj/Assets/Helloworld/Helloworld.unity index dae19800717df4c8c7399885d834c246bbb2c7ed..66a95cf614a1fad4bb6c63db25808f842eb1d55e 100644 GIT binary patch literal 19256 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 diff --git a/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs b/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs new file mode 100644 index 0000000..0d122bd --- /dev/null +++ b/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs @@ -0,0 +1,899 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Text; +using System.Text.RegularExpressions; +using UnityEngine; +using UnityEngine.UI; + +namespace IFix.Editor +{ + public class ILFixCodeGen + { + #region static + + public static HashSet delegateDict = new HashSet(); + public static HashSet ctorCache = new HashSet(); + public static void ClearMethod() + { + delegateDict.Clear(); + ctorCache.Clear(); + } + + public static bool TryGetDelegateStr(MethodInfo mi, out string ret) + { + bool result = true; + ret = MethodInfoToDelegateStr(mi); + if (!delegateDict.Contains(ret)) + { + result = false; + delegateDict.Add(ret); + } + + return result; + } + + #endregion + + #region cal name + + static string[] prefix = new string[] { "System.Collections.Generic" }; + + static string RemoveRef(string s, bool removearray = true) + { + if (s.EndsWith("&")) s = s.Substring(0, s.Length - 1); + if (s.EndsWith("[]") && removearray) s = s.Substring(0, s.Length - 2); + if (s.StartsWith(prefix[0])) s = s.Substring(prefix[0].Length + 1, s.Length - prefix[0].Length - 1); + + s = s.Replace("+", "."); + if (s.Contains("`")) + { + string regstr = @"`\d"; + Regex r = new Regex(regstr, RegexOptions.None); + s = r.Replace(s, ""); + s = s.Replace("[", "<"); + s = s.Replace("]", ">"); + } + + return s; + } + + static string FullName(Type t) + { + if (t.FullName == null) + { + Debug.Log(t.Name); + return t.Name; + } + + return FullName(t.FullName); + } + + static string FullName(string str) + { + if (str == null) + { + throw new NullReferenceException(); + } + + return RemoveRef(str.Replace("+", ".")); + } + + static string SimpleType(Type t) + { + string tn = t.Name; + switch (tn) + { + case "Single": + return "float"; + case "String": + return "string"; + case "String[]": + return "string[]"; + case "Double": + return "double"; + case "Boolean": + return "bool"; + case "Int32": + return "int"; + case "Int32[]": + return "int[]"; + case "UInt32": + return "uint"; + case "UInt32[]": + return "uint[]"; + case "Int16": + return "short"; + case "Int16[]": + return "short[]"; + case "UInt16": + return "ushort"; + case "UInt16[]": + return "ushort[]"; + case "Object": + return FullName(t); + default: + tn = TypeDecl(t); + tn = tn.Replace("System.Collections.Generic.", ""); + tn = tn.Replace("System.Object", "object"); + return tn; + } + } + + static string _Name(string n) + { + n = n.Replace("*", "__X"); + string ret = ""; + for (int i = 0; i < n.Length; i++) + { + if (char.IsLetterOrDigit(n[i])) + ret += n[i]; + else + ret += "_"; + } + + return ret; + } + + static string GenericBaseName(Type t) + { + string n = t.FullName; + if (n.IndexOf('[') > 0) + { + n = n.Substring(0, n.IndexOf('[')); + } + + return n.Replace("+", "."); + } + + static string GenericName(Type t, string sep = "_") + { + try + { + Type[] tt = t.GetGenericArguments(); + string ret = ""; + for (int n = 0; n < tt.Length; n++) + { + string dt = SimpleType(tt[n]); + ret += dt; + if (n < tt.Length - 1) + ret += sep; + } + + return ret; + } + catch (Exception e) + { + Debug.Log(e.ToString()); + return ""; + } + } + + public static string ExportName(MethodBase mb) + { + string clsname = ExportName(mb.DeclaringType); + ParameterInfo[] pars = mb.GetParameters(); + var parameterTypeNames = string.Join("_", Array.ConvertAll(pars, p => ExportName(p.ParameterType))); + return clsname + "_" + parameterTypeNames + _Name(mb.Name); + } + + public static string ExportName(Type t) + { + if (t.IsGenericType) + { + return string.Format("{0}_{1}", _Name(GenericBaseName(t)), _Name(GenericName(t))); + } + else + { + string name = RemoveRef(t.FullName, true); + return name.Replace(".", "_").Replace("*", "__X"); + } + } + + static string TypeDecl(Type t) + { + if (t == typeof(void)) return "void"; + if (t.IsGenericType) + { + string ret = GenericBaseName(t); + + string gs = ""; + gs += "<"; + Type[] types = t.GetGenericArguments(); + for (int n = 0; n < types.Length; n++) + { + gs += SimpleType(types[n]); + if (n < types.Length - 1) + gs += ","; + } + + gs += ">"; + + ret = Regex.Replace(ret, @"`\d", gs); + + return RemoveRef(ret); + } + + if (t.IsArray) + { + return TypeDecl(t.GetElementType()) + "[]"; + } + else + return RemoveRef(t.ToString(), false); + } + + static string MethodInfoToDelegateStr(MethodInfo method) + { + List args = new List(); + var parameters = method.GetParameters(); + if (!method.IsStatic) + { + args.Add(_Name(SimpleType(method.ReflectedType))); + } + + for (int i = 0, imax = parameters.Length; i args = new List(); + var parameters = method.GetParameters(); + if (!method.IsStatic && !(method is ConstructorInfo)) + { + args.Add(SimpleType(method.ReflectedType) +" arg0"); + } + + for (int i = 0, imax = parameters.Length; i TypeDecl(p.ParameterType))); + return $"{TypeDecl(method.DeclaringType)}.{method.Name}({parameterTypeNames})"; + } + + static MethodInfo tryFixGenericMethod(MethodInfo method) + { + if (!method.ContainsGenericParameters) + return method; + + try + { + Type[] genericTypes = method.GetGenericArguments(); + for (int j = 0; j < genericTypes.Length; j++) + { + Type[] contraints = genericTypes[j].GetGenericParameterConstraints(); + if (contraints != null && contraints.Length == 1 && contraints[0] != typeof(ValueType)) + genericTypes[j] = contraints[0]; + else + return method; + } + // only fixed here + return method.MakeGenericMethod(genericTypes); + } + catch (Exception e) + { + Debug.LogError(e); + } + return method; + } + + ConstructorInfo[] GetValidConstructor(Type t) + { + List ret = new List(); + if (t.GetConstructor(Type.EmptyTypes) == null && t.IsAbstract && t.IsSealed) + return ret.ToArray(); + if (t.IsAbstract) + return ret.ToArray(); + if (t.BaseType != null && t.BaseType.Name == "MonoBehaviour") + return ret.ToArray(); + + ConstructorInfo[] cons = t.GetConstructors( + BindingFlags.Instance | BindingFlags.Public + ); + foreach (ConstructorInfo ci in cons) + { + ret.Add(ci); + } + + return ret.ToArray(); + } + + MethodInfo[] GetValidMethodInfo(Type t) + { + List methods = new List(); + + BindingFlags bf = BindingFlags.Public + | BindingFlags.DeclaredOnly | BindingFlags.NonPublic + | BindingFlags.Instance | BindingFlags.Static; + + MethodInfo[] members = t.GetMethods(bf); + foreach (MethodInfo mi in members) + { + if(mi.ReturnType.IsNotPublic) continue; + bool hasPrivateType = false; + foreach (var item in mi.GetParameters()) + { + if (item.ParameterType.IsNotPublic) + { + hasPrivateType = true; + break; + } + } + if(hasPrivateType)continue; + methods.Add(tryFixGenericMethod(mi)); + } + + return methods.ToArray(); + } + + bool IsBaseType(Type t) + { + return t.IsPrimitive; + } + + bool IsValueType(Type t) + { + if (t.IsByRef) t = t.GetElementType(); + return t.BaseType == typeof(ValueType) && !IsBaseType(t); + } + + bool IsOutArg(ParameterInfo p) + { + return (p.IsOut || p.IsDefined(typeof(System.Runtime.InteropServices.OutAttribute), false)) && + !p.ParameterType.IsArray; + } + + string FuncCall(MethodBase m, int parOffset = 0) + { + string str = ""; + ParameterInfo[] pars = m.GetParameters(); + if (!m.IsStatic && !(m is ConstructorInfo)) + { + str += "a0"; + if (pars.Length > 0) str += ","; + } + + for (int n = parOffset; n < pars.Length; n++) + { + ParameterInfo p = pars[n]; + if (p.ParameterType.IsByRef && p.IsOut) + str += string.Format("out a{0}", n + 1); + else if (p.ParameterType.IsByRef) + str += string.Format("ref a{0}", n + 1); + else + str += string.Format("a{0}", n + 1); + if (n < pars.Length - 1) + str += ","; + } + + return str; + } + + string FuncGetArg(ParameterInfo p) + { + Type t = p.ParameterType; + + if (t.IsPrimitive) + { + if (t == typeof(int)) + { + return "call.GetInt32"; + } + else if (t == typeof(float)) + { + return "call.GetSingle"; + } + else if (t == typeof(bool)) + { + return "call.GetBoolean"; + } + else if (t == typeof(double)) + { + return "call.GetDouble"; + } + else if (t == typeof(long)) + { + return "call.GetInt64"; + } + else if (t == typeof(byte)) + { + return "call.GetByte"; + } + else if (t == typeof(uint)) + { + return "call.GetUInt32"; + } + else if (t == typeof(ushort)) + { + return "call.GetUInt16"; + } + else if (t == typeof(short)) + { + return "call.GetInt16"; + } + else if (t == typeof(char)) + { + return "call.GetChar"; + } + else if (t == typeof(ulong)) + { + return "call.GetUInt64"; + } + else if (t == typeof(sbyte)) + { + return "call.GetSByte"; + } + else if (t == typeof(IntPtr)) + { + return "call.GetIntPtr"; + } + else if (t == typeof(UIntPtr)) + { + return "call.GetUIntPtr"; + } + } + else if (t.IsEnum) + { + var underlyingType = Enum.GetUnderlyingType(t); + if (underlyingType == typeof(long) || underlyingType == typeof(ulong)) + { + return "call.GetInt64"; + } + else + { + return "call.GetInt32"; + } + } + else if (t.IsPointer) + { + var originType = t.GetElementType(); + if (originType == typeof(long) || originType == typeof(ulong)) + { + return "call.GetInt64Point"; + } + else + { + return "call.GetInt32Point"; + } + } + + return "call.GetObject"; + } + + string FuncPushResult(Type t) + { + if (t.IsPrimitive) + { + if (t == typeof(int)) + { + return "call.PushInt32AsResult(result);"; + } + else if (t == typeof(uint)) + { + return "call.PushUInt32AsResult(result);"; + } + else if (t == typeof(float)) + { + return "call.PushSingleAsResult(result);"; + } + else if (t == typeof(bool)) + { + return "call.PushBooleanAsResult(result);"; + } + else if (t == typeof(double)) + { + return "call.PushDoubleAsResult(result);"; + } + else if (t == typeof(long)) + { + return "call.PushInt64AsResult(result);"; + } + else if (t == typeof(byte)) + { + return "call.PushByteAsResult(result);"; + } + else if (t == typeof(ushort)) + { + return "call.PushUInt16AsResult(result);"; + } + else if (t == typeof(short)) + { + return "call.PushInt16AsResult(result);"; + } + else if (t == typeof(char)) + { + return "call.PushCharAsResult(result);"; + } + else if (t == typeof(ulong)) + { + return "call.PushUInt64AsResult(result);"; + } + else if (t == typeof(sbyte)) + { + return "call.PushSByteAsResult(result);"; + } + else if (t == typeof(IntPtr)) + { + return "call.PushIntPtr64AsResult(result);"; + } + else if (t == typeof(UIntPtr)) + { + return "call.PushUIntPtr64AsResult(result);"; + } + } + else if (t.IsEnum) + { + var underlyingType = Enum.GetUnderlyingType(t); + if (underlyingType == typeof(long) || underlyingType == typeof(ulong)) + { + return "call.PushInt64AsResult((long)result);"; + } + else + { + return "call.PushInt32AsResult((int)result);"; + } + } + else if (t.IsPointer) + { + return "call.PushIntPtr64AsResult((IntPtr)result);"; + } + + return "call.PushObjectAsResult(result, result.GetType());"; + } + + #endregion + + #region write + + void Write(StreamWriter file, string fmt, params object[] args) + { + fmt = Regex.Replace(fmt, @"\r\n?|\n|\r", NewLine); + + if (fmt.StartsWith("}")) indent--; + + for (int n = 0; n < indent; n++) + file.Write(" "); + + + if (args.Length == 0) + file.WriteLine(fmt); + else + { + string line = string.Format(fmt, args); + file.WriteLine(line); + } + + if (fmt.EndsWith("{")) indent++; + } + + private void WriteHead(MethodBase mb, StreamWriter file, string exportName) + { + + Write(file, "using System;"); + Write(file, "using IFix.Core;"); + Write(file, "using System.Collections.Generic;"); + Write(file, "using System.Reflection;"); + Write(file, "#if UNITY_5_5_OR_NEWER"); + Write(file, "using UnityEngine.Profiling;"); + Write(file, "#endif"); + + Write(file, "namespace IFix.Binding"); + Write(file, "{"); + Write(file, "public unsafe class {0} : IFixBindingCaller", exportName); + Write(file, "{"); + if (mb is MethodInfo) + { + Write(file, MethodInfoToDelegate((MethodInfo)mb)); + Write(file, ""); + Write(file, "private IFixCallDel del;"); + Write(file, ""); + } + Write(file, "public {0}(MethodBase method) : base(method) {{", exportName); + if (mb is MethodInfo) + { + Write(file, "del = (IFixCallDel)Delegate.CreateDelegate(typeof(IFixCallDel), (MethodInfo)method);"); + } + Write(file, "}"); + + } + + private void End(StreamWriter file) + { + Write(file, "}"); + Write(file, "}"); + file.Flush(); + file.Close(); + } + + private void WriteFunctionAttr(StreamWriter file) + { +// Write(file, "[SLua.MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]"); +// #if UNITY_5_3_OR_NEWER +// Write(file, "[UnityEngine.Scripting.Preserve]"); +// #endif + } + + void WriteTry(StreamWriter file) + { + Write(file, "#if DEBUG"); + Write(file, "try {"); + Write(file, "Profiler.BeginSample(method.Name);"); + Write(file, "#endif"); + } + + void WriteCatchExecption(StreamWriter file) + { + // Write(file, "}"); + // Write(file, "catch(Exception e) {"); + // Write(file, "return error(l,e);"); + Write(file, "#if DEBUG"); + Write(file, "}"); + WriteFinaly(file); + Write(file, "#endif"); + } + + void WriteFinaly(StreamWriter file) + { + Write(file, "finally {"); + Write(file, "Profiler.EndSample();"); + Write(file, "}"); + + } + + void WriteOk(StreamWriter file) + { + Write(file, "pushValue(l,true);"); + } + + void WriteBad(StreamWriter file) + { + Write(file, "pushValue(l,false);"); + } + + void WriteError(StreamWriter file, string err) + { + WriteBad(file); + Write(file, "LuaDLL.lua_pushstring(l,\"{0}\");", err); + Write(file, "return 2;"); + } + + void WriteReturn(StreamWriter file, string val) + { + Write(file, "pushValue(l,true);"); + Write(file, "pushValue(l,{0});", val); + Write(file, "return 2;"); + } + + private void WriteMethodCaller(MethodBase mb, StreamWriter file) + { + Write(file, ""); + Write(file, "public void Invoke(VirtualMachine vm, ref Call call, bool instantiate) {"); + WriteTry(file); + + ParameterInfo[] pars = mb.GetParameters(); + if (mb is ConstructorInfo) + { + Write(file, "{0} result;", TypeDecl(mb.ReflectedType)); + for (int n = 0; n < pars.Length; n++) + { + var p = pars[n]; + Write(file, "var a{0} = ({1}){3}({2});", n+1, TypeDecl(p.ParameterType) ,n, FuncGetArg(p)); + } + Write(file, "result = new {0}({1});", TypeDecl(mb.ReflectedType), FuncCall(mb)); + Write(file, "call.PushObjectAsResult(result, result.GetType());"); + } + else + { + var mi = mb as MethodInfo; + if (mi.ReturnType != typeof(void)) + { + Write(file, "{0} result;", SimpleType(mi.ReturnType)); + } + + if (!mb.IsStatic) + { + Write(file, "var a0 = ({0})call.GetObject(0);", SimpleType(mb.DeclaringType)); + } + + for (int n = 0; n < pars.Length; n++) + { + var p = pars[n]; + Write(file, "var a{0} = ({1}){3}({2});", n+1, SimpleType(p.ParameterType) ,mb.IsStatic ? n : n + 1, FuncGetArg(p)); + } + + if (mi.ReturnType != typeof(void)) + { + Write(file, "result = del({0});", FuncCall(mi)); + Write(file, FuncPushResult(mi.ReturnType)); + //Write(file, "call.PushObjectAsResult(result, result.GetType());"); + } + else + { + Write(file, "del({0});", FuncCall(mi)); + } + } + + WriteCatchExecption(file); + Write(file, "}"); + } + + #endregion + + #region public + + public void DeleteAll() + { + if (Directory.Exists(path)) + { + foreach (var file in Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories)) + { + File.Delete(file); + } + } + } + + public void Generate(Type t) + { + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + } + + ConstructorInfo[] cons = GetValidConstructor(t); + string exportName; + foreach (var item in cons) + { + GenerateMethod(item); + } + + var mis = GetValidMethodInfo(t); + foreach (var item in mis) + { + GenerateMethod(item); + } + + } + + public void GenerateMethod(MethodBase mb) + { + try + { + if (mb is ConstructorInfo) + { + ConstructorInfo ci = mb as ConstructorInfo; + if (ci.ReflectedType.IsSubclassOf(typeof(Delegate))) return; + if (ctorCache.Contains(ci)) + { + return; + } + + ctorCache.Add(ci); + StreamWriter file = Begin(mb); + WriteHead(mb, file, ExportName(mb)); + WriteMethodCaller(mb, file); + End(file); + } + else if (mb is MethodInfo) + { + string exportName; + var item = mb as MethodInfo; + if (item.IsGenericMethodDefinition) return; + + if (TryGetDelegateStr(item, out exportName)) return; + StreamWriter file = Begin(item); + WriteHead(item, file, exportName); + WriteMethodCaller(item, file); + End(file); + } + } + catch (Exception e) + { + Debug.LogError(e); + } + + + } + + #endregion + + StreamWriter Begin(MethodBase mb) + { + string clsname = ExportName(mb); + if (mb is MethodInfo) + { + TryGetDelegateStr((MethodInfo)mb, out clsname); + } + + string f = path + clsname + ".cs"; + StreamWriter file = new StreamWriter(f, false, Encoding.UTF8); + file.NewLine = NewLine; + return file; + } + + #region property + + public EOL eol = EOL.CRLF; + + public enum EOL + { + Native, + CRLF, + CR, + LF, + } + + string NewLine + { + get + { + switch (eol) + { + case EOL.Native: + return System.Environment.NewLine; + case EOL.CRLF: + return "\r\n"; + case EOL.CR: + return "\r"; + case EOL.LF: + return "\n"; + default: + return ""; + } + } + } + + #endregion + + #region member + + class PropPair + { + public string get = "null"; + public string set = "null"; + public bool isInstance = true; + } + + public string path; + + int indent = 0; + HashSet funcname = new HashSet(); + Dictionary propname = new Dictionary(); + Dictionary directfunc = new Dictionary(); + + #endregion + } +} \ No newline at end of file diff --git a/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs.meta b/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs.meta new file mode 100644 index 0000000..0513572 --- /dev/null +++ b/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 852e4e3ccd604cacb3e6662661f0a3d1 +timeCreated: 1708949102 \ No newline at end of file diff --git a/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs b/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs index 402c054..9d065f4 100644 --- a/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs +++ b/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs @@ -15,17 +15,58 @@ using System.Text.RegularExpressions; using System.Text; using System.Reflection; +using System.Reflection.Emit; +using Debug = System.Diagnostics.Debug; #if UNITY_2018_3_OR_NEWER using UnityEditor.Build.Player; #endif + +public static class OpCodeLookup +{ + // 单字节操作码集合 + public static readonly OpCode[] SingleByteOpCodes; + + // 多字节操作码集合 + public static readonly OpCode[] MultiByteOpCodes; + + // 静态构造函数,用于初始化操作码集合 + static OpCodeLookup() + { + // 获取所有操作码 + var opcodes = typeof(OpCodes).GetFields(BindingFlags.Public | BindingFlags.Static); + + // 初始化单字节操作码集合 + SingleByteOpCodes = new OpCode[256]; + foreach (var opcode in opcodes) + { + var code = (OpCode)opcode.GetValue(null); + if (code.Size == 1) + { + SingleByteOpCodes[code.Value] = code; + } + } + + // 初始化多字节操作码集合 + MultiByteOpCodes = new OpCode[256]; + foreach (var opcode in opcodes) + { + var code = (OpCode)opcode.GetValue(null); + if (code.Size == 2) + { + MultiByteOpCodes[code.Value & 0xff] = code; + } + } + } +} + namespace IFix.Editor { //版本选择窗口 public class VersionSelector : EditorWindow { public string buttonText = "Patch"; - public string[] options = new string[] {}; + public string[] options = new string[] { }; public int index = 0; public Action callback = null; @@ -51,6 +92,7 @@ void doPatch() { callback(index); } + Close(); } } @@ -59,6 +101,7 @@ public class IFixEditor { //备份目录 const string BACKUP_PATH = "./IFixDllBackup"; + //备份文件的时间戳生成格式 const string TIMESTAMP_FORMAT = "yyyyMMddHHmmss"; @@ -84,6 +127,7 @@ public static void CallIFix(List args) { UnityEngine.Debug.LogError("can not find mono!"); } + var inject_tool_path = "./IFixToolKit/IFix.exe"; //"--runtime = v4.0.30319" if (!File.Exists(inject_tool_path)) @@ -99,7 +143,7 @@ public static void CallIFix(List args) #else hotfix_injection.StartInfo.Arguments = "--debug \"" + inject_tool_path + "\" \"" #endif - + string.Join("\" \"", args.ToArray()) + "\""; + + string.Join("\" \"", args.ToArray()) + "\""; hotfix_injection.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; hotfix_injection.StartInfo.RedirectStandardOutput = true; hotfix_injection.StartInfo.UseShellExecute = false; @@ -110,7 +154,7 @@ public static void CallIFix(List args) //UnityEngine.Debug.Log(hotfix_injection.StartInfo.Arguments); StringBuilder exceptionInfo = null; - while(!hotfix_injection.StandardOutput.EndOfStream) + while (!hotfix_injection.StandardOutput.EndOfStream) { string line = hotfix_injection.StandardOutput.ReadLine(); if (exceptionInfo != null) @@ -137,6 +181,7 @@ public static void CallIFix(List args) } } } + hotfix_injection.WaitForExit(); if (exceptionInfo != null) { @@ -152,15 +197,17 @@ public static void InjectAssemblys() UnityEngine.Debug.LogError("compiling or playing"); return; } + EditorUtility.DisplayProgressBar("Inject", "injecting...", 0); try { InjectAllAssemblys(); } - catch(Exception e) + catch (Exception e) { UnityEngine.Debug.LogError(e); } + EditorUtility.ClearProgressBar(); #if UNITY_2019_3_OR_NEWER EditorUtility.RequestScriptReload(); @@ -198,7 +245,7 @@ public static void GetBackupInfo(out string[] backups, out string[] timestamps) backups = allBackup.Select(path => r.Match(path).Groups[1].Captures[0].Value).ToArray(); timestamps = allBackup.Select(path => DateTime.ParseExact(r.Match(path).Groups[1].Captures[0].Value, - TIMESTAMP_FORMAT, System.Globalization.CultureInfo.InvariantCulture) + TIMESTAMP_FORMAT, System.Globalization.CultureInfo.InvariantCulture) .ToString("yyyy-MM-dd hh:mm:ss tt")).ToArray(); } @@ -209,10 +256,7 @@ public static void SelectBackup(string buttonText, Action cb) string[] timestamps; GetBackupInfo(out backups, out timestamps); - VersionSelector.Show(timestamps.ToArray(), index => - { - cb(backups[index]); - }, buttonText); + VersionSelector.Show(timestamps.ToArray(), index => { cb(backups[index]); }, buttonText); } /// @@ -221,7 +265,8 @@ public static void SelectBackup(string buttonText, Action cb) /// 程序集路径 public static void InjectAssembly(string assembly) { - var configure = Configure.GetConfigureByTags(new List() { + var configure = Configure.GetConfigureByTags(new List() + { "IFix.IFixAttribute", "IFix.InterpretAttribute", "IFix.ReverseWrapperAttribute", @@ -237,7 +282,7 @@ public static void InjectAssembly(string assembly) var blackList = new List(); using (BinaryWriter writer = new BinaryWriter(new FileStream(processCfgPath, FileMode.Create, - FileAccess.Write))) + FileAccess.Write))) { writer.Write(configure.Count); @@ -262,16 +307,17 @@ public static void InjectAssembly(string assembly) writer.Write(cfgItem.Value); if (filters.Count > 0 && kv.Key == "IFix.IFixAttribute") { - foreach(var method in cfgItem.Key.GetMethods(BindingFlags.Instance - | BindingFlags.Static | BindingFlags.Public - | BindingFlags.NonPublic | BindingFlags.DeclaredOnly)) + foreach (var method in cfgItem.Key.GetMethods(BindingFlags.Instance + | BindingFlags.Static | BindingFlags.Public + | BindingFlags.NonPublic | + BindingFlags.DeclaredOnly)) { - foreach(var filter in filters) + foreach (var filter in filters) { if ((bool)filter.Invoke(null, new object[] - { - method - })) + { + method + })) { blackList.Add(method); } @@ -286,23 +332,27 @@ public static void InjectAssembly(string assembly) if (hasSomethingToDo) { - var core_path = "./Assets/Plugins/IFix.Core.dll"; var assembly_path = string.Format("./Library/{0}/{1}.dll", targetAssembliesFolder, assembly); var patch_path = string.Format("./{0}.ill.bytes", assembly); - List args = new List() { "-inject", core_path, assembly_path, - processCfgPath, patch_path, assembly_path }; + List args = new List() + { + "-inject", core_path, assembly_path, + processCfgPath, patch_path, assembly_path + }; foreach (var path in - (from asm in AppDomain.CurrentDomain.GetAssemblies() - select Path.GetDirectoryName(asm.ManifestModule.FullyQualifiedName)).Distinct()) + (from asm in AppDomain.CurrentDomain.GetAssemblies() + select Path.GetDirectoryName(asm.ManifestModule.FullyQualifiedName)).Distinct()) { try { //UnityEngine.Debug.Log("searchPath:" + path); args.Add(path); } - catch { } + catch + { + } } CallIFix(args); @@ -327,7 +377,7 @@ public static void InjectAllAssemblys() { InjectAssembly(assembly); } - + //doBackup(DateTime.Now.ToString(TIMESTAMP_FORMAT)); AssetDatabase.Refresh(); @@ -340,6 +390,7 @@ private static string GetScriptAssembliesFolder() { assembliesFolder = "ScriptAssemblies"; } + return assembliesFolder; } @@ -371,6 +422,7 @@ static void doBackup(string ts) { continue; } + File.Copy(dllFile, string.Format("{0}/{1}-{2}.dll", BACKUP_PATH, assembly, ts), true); var mdbFile = string.Format("{0}{1}.dll.mdb", scriptAssembliesDir, assembly); @@ -402,6 +454,7 @@ static void doRestore(string ts) { continue; } + File.Copy(dllFile, string.Format("{0}{1}.dll", scriptAssembliesDir, assembly), true); UnityEngine.Debug.Log("Revert to: " + dllFile); @@ -437,8 +490,8 @@ static string GetCecilTypeName(Type type) else { return Regex.Replace(type.ToString().Replace('+', '/'), @"(`\d).+", "$1") - + "<" + string.Join(",", type.GetGenericArguments().Select(t => GetCecilTypeName(t)) - .ToArray()) + ">"; + + "<" + string.Join(",", type.GetGenericArguments().Select(t => GetCecilTypeName(t)) + .ToArray()) + ">"; } } else @@ -462,13 +515,13 @@ public enum Platform private static string parseCompileTemplate(string path) { return string.Join("\n", File.ReadAllLines(path).Where(line => !line.StartsWith("Assets/") - && !line.StartsWith("\"Assets/") - && !line.StartsWith("'Assets/") - && !line.StartsWith("-r:Assets/") - && !line.StartsWith("-r:\"Assets/") - && !line.StartsWith("-r:'Assets/") - && !line.StartsWith("-out") - ).ToArray()); + && !line.StartsWith("\"Assets/") + && !line.StartsWith("'Assets/") + && !line.StartsWith("-r:Assets/") + && !line.StartsWith("-r:\"Assets/") + && !line.StartsWith("-r:'Assets/") + && !line.StartsWith("-out") + ).ToArray()); } //对路径预处理,然后添加到StringBuilder @@ -494,10 +547,11 @@ private static void appendDirectory(StringBuilder src, string dir) foreach (var file in Directory.GetFiles(dir)) { //排除调Editor下的东西 - if (file.IndexOf(Path.DirectorySeparatorChar + "Editor" + Path.DirectorySeparatorChar) > 0 ) + if (file.IndexOf(Path.DirectorySeparatorChar + "Editor" + Path.DirectorySeparatorChar) > 0) { continue; } + //排除Assembly-CSharp-firstpass if (file.Substring(file.Length - 3).ToLower() == ".cs") { @@ -507,11 +561,12 @@ private static void appendDirectory(StringBuilder src, string dir) { continue; } + appendFile(src, file); } } - foreach(var subDir in Directory.GetDirectories(dir)) + foreach (var subDir in Directory.GetDirectories(dir)) { appendDirectory(src, subDir); } @@ -540,9 +595,11 @@ private static string getCompileArguments(Platform platform, string output) + " in IFixToolKit directory!"); } } + compileTemplate = parseCompileTemplate(path); compileTemplates.Add(platform, compileTemplate); } + StringBuilder cmd = new StringBuilder(); StringBuilder src = new StringBuilder(); StringBuilder dll = new StringBuilder(); @@ -567,7 +624,10 @@ private static string getCompileArguments(Platform platform, string output) #if (UNITY_EDITOR || XLUA_GENERAL) && !NET_STANDARD_2_0 } #endif - } catch { } + } + catch + { + } } cmd.AppendLine(compileTemplate); @@ -632,7 +692,7 @@ public static void Compile(string compileArgFile) { UnityEngine.Debug.Log(compileProcess.StandardOutput.ReadLine()); } - + compileProcess.WaitForExit(); } @@ -650,7 +710,7 @@ public static void GenPlatformPatch(Platform platform, string patchOutputDir, scriptCompilationSettings.group = BuildTargetGroup.Android; scriptCompilationSettings.target = BuildTarget.Android; } - else if(platform == Platform.ios) + else if (platform == Platform.ios) { scriptCompilationSettings.group = BuildTargetGroup.iOS; scriptCompilationSettings.target = BuildTarget.iOS; @@ -661,7 +721,8 @@ public static void GenPlatformPatch(Platform platform, string patchOutputDir, scriptCompilationSettings.target = BuildTarget.StandaloneWindows; } - ScriptCompilationResult scriptCompilationResult = PlayerBuildInterface.CompilePlayerScripts(scriptCompilationSettings, outputDir); + ScriptCompilationResult scriptCompilationResult = + PlayerBuildInterface.CompilePlayerScripts(scriptCompilationSettings, outputDir); foreach (var assembly in injectAssemblys) { @@ -755,6 +816,7 @@ static bool hasGenericParameter(Type type) { return hasGenericParameter(type.GetElementType()); } + if (type.IsGenericType) { foreach (var typeArg in type.GetGenericArguments()) @@ -764,8 +826,10 @@ static bool hasGenericParameter(Type type) return true; } } + return false; } + return type.IsGenericParameter; } @@ -781,8 +845,8 @@ static bool hasGenericParameter(MethodBase method) return true; } } - return false; + return false; } /// @@ -793,7 +857,7 @@ static bool hasGenericParameter(MethodBase method) /// IFix.Core.dll所在路径 /// 生成的patch的保存路径 public static void GenPatch(string assembly, string assemblyCSharpPath - = "./Library/ScriptAssemblies/Assembly-CSharp.dll", + = "./Library/ScriptAssemblies/Assembly-CSharp.dll", string corePath = "./Assets/Plugins/IFix.Core.dll", string patchPath = "Assembly-CSharp.patch.bytes") { var patchMethods = Configure.GetTagMethods(typeof(PatchAttribute), assembly).ToList(); @@ -821,7 +885,7 @@ public static void GenPatch(string assembly, string assemblyCSharpPath var processCfgPath = "./process_cfg"; using (BinaryWriter writer = new BinaryWriter(new FileStream(processCfgPath, FileMode.Create, - FileAccess.Write))) + FileAccess.Write))) { writeMethods(writer, patchMethods); writeMethods(writer, newMethods); @@ -830,19 +894,24 @@ public static void GenPatch(string assembly, string assemblyCSharpPath writeClasses(writer, newClasses); } - List args = new List() { "-patch", corePath, assemblyCSharpPath, "null", - processCfgPath, patchPath }; + List args = new List() + { + "-patch", corePath, assemblyCSharpPath, "null", + processCfgPath, patchPath + }; foreach (var path in - (from asm in AppDomain.CurrentDomain.GetAssemblies() - select Path.GetDirectoryName(asm.ManifestModule.FullyQualifiedName)).Distinct()) + (from asm in AppDomain.CurrentDomain.GetAssemblies() + select Path.GetDirectoryName(asm.ManifestModule.FullyQualifiedName)).Distinct()) { try { //UnityEngine.Debug.Log("searchPath:" + path); args.Add(path); } - catch { } + catch + { + } } CallIFix(args); @@ -869,9 +938,136 @@ public static void Patch() { UnityEngine.Debug.LogError(e); } + EditorUtility.ClearProgressBar(); } + [MenuItem("InjectFix/GenBinding", false, 2)] + public static void GenBinding() + { + ILFixCodeGen gen = new ILFixCodeGen(); + gen.path = "Assets/IFix/Binding/"; + ILFixCodeGen.ClearMethod(); + gen.DeleteAll(); + // custom type + gen.Generate(typeof(List)); + //gen.Generate(typeof(string)); + + // search by dll caller + var methods = FindAllMethod(typeof(Helloworld).Assembly); + foreach (var item in methods) + { + gen.GenerateMethod(item); + } + } + + public bool Generate(Type t) + { + if (!t.IsGenericTypeDefinition && (t != typeof(YieldInstruction) && t != typeof(Coroutine)) + || (t.BaseType != null && t.BaseType == typeof(System.MulticastDelegate))) + { + } + + return false; + } + + public static List FindAllMethod(Assembly assembly) + { + HashSet result = new HashSet(); + + // 遍历程序集中的所有类型 + foreach (var type in assembly.GetTypes()) + { + if (type.IsSubclassOf(typeof(Delegate))) + continue; + // 遍历类型中的所有方法 + var methods = type.GetMethods(BindingFlags.Public + | BindingFlags.DeclaredOnly | BindingFlags.NonPublic + | BindingFlags.Instance | BindingFlags.Static); + foreach (var methodInfo in methods) + { + if(methodInfo.ReflectedType.Namespace.Contains("IFix")) continue; + // 输出方法的名称 + //UnityEngine.Debug.Log($"方法: {ILFixCodeGen.GetUniqueStringForMethod(methodInfo)}"); + + // 获取方法体 + var methodBody = methodInfo.GetMethodBody(); + + // 检查方法是否有方法体 + if (methodBody != null) + { + // 获取方法体中的 IL 字节码 + var ilBytes = methodBody.GetILAsByteArray(); + + // 创建一个指向 IL 字节码的索引 + int ilIndex = 0; + + // 遍历 IL 字节码 + while (ilIndex < ilBytes.Length) + { + // 从 IL 字节码中读取操作码 + var opcodeValue = ilBytes[ilIndex++]; + var opcode = OpCodes.Nop; // 默认为 Nop,以防止未知操作码 + if (opcodeValue != 0xFE) // 如果操作码的值不在 0xFE 开头的范围内 + { + opcode = OpCodeLookup.SingleByteOpCodes[opcodeValue]; // 使用单字节操作码查找表 + } + else // 如果操作码的值在 0xFE 开头的范围内 + { + opcodeValue = ilBytes[ilIndex++]; + opcode = OpCodeLookup.MultiByteOpCodes[opcodeValue]; // 使用多字节操作码查找表 + } + + // 检查是否是方法调用指令 + if (opcode == OpCodes.Call || opcode == OpCodes.Callvirt || opcode == OpCodes.Newobj) + { + // 读取调用的方法的元数据标记 + int metadataToken = BitConverter.ToInt32(ilBytes, ilIndex); + ilIndex += 4; + + // 解析元数据标记获取调用的方法信息 + var calledMethod = methodInfo.Module.ResolveMethod(metadataToken); + if (!result.Contains(calledMethod)) + { + result.Add(calledMethod); + // 输出调用的方法信息 + //UnityEngine.Debug.Log($" 调用方法: {ILFixCodeGen.GetUniqueStringForMethod(calledMethod)}"); + } + } + + // 检查是否有操作数,并根据操作码的操作数类型移动索引 + switch (opcode.OperandType) + { + case OperandType.InlineBrTarget: + case OperandType.InlineField: + case OperandType.InlineI: + case OperandType.InlineI8: + case OperandType.InlineMethod: + case OperandType.InlineR: + case OperandType.InlineSig: + case OperandType.InlineString: + case OperandType.InlineSwitch: + case OperandType.InlineTok: + case OperandType.InlineType: + case OperandType.InlineVar: + ilIndex += 4; + break; + case OperandType.ShortInlineBrTarget: + case OperandType.ShortInlineI: + case OperandType.ShortInlineR: + case OperandType.ShortInlineVar: + ilIndex += 1; + break; + } + } + } + } + } + + return result.ToList(); + } + + #if UNITY_2018_3_OR_NEWER [MenuItem("InjectFix/Fix(Android)", false, 3)] public static void CompileToAndroid() @@ -881,10 +1077,11 @@ public static void CompileToAndroid() { GenPlatformPatch(Platform.android, ""); } - catch(Exception e) + catch (Exception e) { UnityEngine.Debug.LogError(e); } + EditorUtility.ClearProgressBar(); } @@ -896,12 +1093,13 @@ public static void CompileToIOS() { GenPlatformPatch(Platform.ios, ""); } - catch(Exception e) + catch (Exception e) { UnityEngine.Debug.LogError(e); } + EditorUtility.ClearProgressBar(); } #endif } -} +} \ No newline at end of file diff --git a/Source/UnityProj/Assets/IFix/IFixBindingCaller.cs b/Source/UnityProj/Assets/IFix/IFixBindingCaller.cs new file mode 100644 index 0000000..c5db17f --- /dev/null +++ b/Source/UnityProj/Assets/IFix/IFixBindingCaller.cs @@ -0,0 +1,14 @@ +using System.Reflection; + +namespace IFix +{ + public class IFixBindingCaller + { + protected MethodBase method; + + public IFixBindingCaller(MethodBase method) + { + this.method = method; + } + } +} \ No newline at end of file diff --git a/Source/UnityProj/Assets/IFix/IFixBindingCaller.cs.meta b/Source/UnityProj/Assets/IFix/IFixBindingCaller.cs.meta new file mode 100644 index 0000000..0b52e34 --- /dev/null +++ b/Source/UnityProj/Assets/IFix/IFixBindingCaller.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ff67f7b63401419ebd7201a969c3abdc +timeCreated: 1709199666 \ No newline at end of file From 17e9fef40f80014c2fb28047f8268a80791cf47d Mon Sep 17 00:00:00 2001 From: ale Date: Thu, 18 Apr 2024 12:38:17 +0800 Subject: [PATCH 03/15] =?UTF-8?q?=E8=A7=A3=E5=86=B3=20=E8=99=9A=E6=8B=9F?= =?UTF-8?q?=E6=9C=BA=E5=86=85=E9=83=A8=E7=9A=84GC=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 38 + Source/UnityProj/Assets/Helloworld/Calc.cs | 114 ++- .../Assets/Helloworld/Editor/HelloworldCfg.cs | 4 +- .../UnityProj/Assets/Helloworld/Helloworld.cs | 77 +- .../Assets/Helloworld/Helloworld.unity | 4 +- .../UnityProj/Assets/Helloworld/InvokeTest.cs | 183 +++++ .../Assets/Helloworld/InvokeTest.cs.meta | 11 + .../UnityProj/Assets/Helloworld/PerfTest.cs | 156 ++++ .../Assets/Helloworld/PerfTest.cs.meta | 11 + Source/UnityProj/Assets/IFix/Editor.meta | 3 +- .../Assets/IFix/Editor/ILFixCodeGen.cs | 657 ++++++---------- .../Assets/IFix/Editor/ILFixCodeGen.cs.meta | 6 +- .../Assets/IFix/Editor/ILFixEditor.cs | 83 +- .../Assets/IFix/Editor/ILFixEditor.cs.meta | 15 +- .../Assets/IFix/IFixBindingCaller.cs | 14 - .../Assets/IFix/IFixBindingCaller.cs.meta | 3 - Source/UnityProj/Assets/IFix/TypeNameUtils.cs | 182 +++++ .../Assets/IFix/TypeNameUtils.cs.meta | 3 + Source/UnityProj/Assets/NewClass.meta | 8 + Source/UnityProj/Assets/NewClass/Editor.meta | 8 + .../NewClass/Editor/NewClassTestCfg.cs.meta | 11 + Source/UnityProj/Assets/Plugins/Android.meta | 8 + .../Plugins/Android/AndroidManifest.xml | 18 + .../Plugins/Android/AndroidManifest.xml.meta | 7 + Source/UnityProj/Assets/StreamingAssets.meta | 8 + .../Builder/SimpleVirtualMachineBuilder.cs | 63 +- Source/VSProj/Src/Core/ObjectClone.cs | 16 +- .../Src/Core/ReflectionMethodInvoker.cs | 24 +- Source/VSProj/Src/Core/StackOperation.cs | 743 +++++++++++++++++- Source/VSProj/Src/Core/VirtualMachine.cs | 179 +++-- Source/VSProj/Src/PerfTest/PerfTest.cs | 85 +- Source/VSProj/Src/Tools/CodeTranslator.cs | 54 +- .../VSProj/Src/UnitTest/VirtualMachineTest.cs | 2 +- .../ThirdParty/UnityEngine.CoreModule.dll | Bin 0 -> 1180160 bytes .../ThirdParty/UnityEngine.PhysicsModule.dll | Bin 0 -> 88064 bytes Source/VSProj/build_for_unity.bat | 34 +- Source/VSProj/build_response | 23 + Source/VSProj/vs2013/IFix.Core.csproj | 8 +- Source/VSProj/vs2013/IFix.PerfTest.csproj | 2 +- 39 files changed, 2175 insertions(+), 690 deletions(-) create mode 100644 .gitignore create mode 100644 Source/UnityProj/Assets/Helloworld/InvokeTest.cs create mode 100644 Source/UnityProj/Assets/Helloworld/InvokeTest.cs.meta create mode 100644 Source/UnityProj/Assets/Helloworld/PerfTest.cs create mode 100644 Source/UnityProj/Assets/Helloworld/PerfTest.cs.meta delete mode 100644 Source/UnityProj/Assets/IFix/IFixBindingCaller.cs delete mode 100644 Source/UnityProj/Assets/IFix/IFixBindingCaller.cs.meta create mode 100644 Source/UnityProj/Assets/IFix/TypeNameUtils.cs create mode 100644 Source/UnityProj/Assets/IFix/TypeNameUtils.cs.meta create mode 100644 Source/UnityProj/Assets/NewClass.meta create mode 100644 Source/UnityProj/Assets/NewClass/Editor.meta create mode 100644 Source/UnityProj/Assets/NewClass/Editor/NewClassTestCfg.cs.meta create mode 100644 Source/UnityProj/Assets/Plugins/Android.meta create mode 100644 Source/UnityProj/Assets/Plugins/Android/AndroidManifest.xml create mode 100644 Source/UnityProj/Assets/Plugins/Android/AndroidManifest.xml.meta create mode 100644 Source/UnityProj/Assets/StreamingAssets.meta create mode 100644 Source/VSProj/ThirdParty/UnityEngine.CoreModule.dll create mode 100644 Source/VSProj/ThirdParty/UnityEngine.PhysicsModule.dll create mode 100644 Source/VSProj/build_response diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f65ff87 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +/Source/UnityProj/Assets/IFix/Binding.meta +/Source/UnityProj/Assets/IFix/Binding +/Source/UnityProj/Library +/Source/UnityProj/AndroidBuild +/Source/UnityProj/obj +/Source/UnityProj/Logs +/Source/UnityProj/.idea +/Source/UnityProj/.vs +/Source/UnityProj/Assembly-CSharp-firstpass.csproj +/Source/UnityProj/Assembly-CSharp-firstpass.patch.bytes +/Source/UnityProj/UnityProj.sln +/Source/UnityProj/UnityProj.sln.DotSettings.user +/Source/UnityProj/Assembly-CSharp.csproj +/Source/UnityProj/Assembly-CSharp.dll +/Source/UnityProj/Assembly-CSharp.patch.bytes +/Source/UnityProj/Assembly-CSharp-Editor.csproj +/Source/UnityProj/ProjectSettings +/Source/UnityProj/buildexe +/Source/UnityProj/buildvs +/Source/UnityProj/buildvs2 +/Source/VSProj/vs2013/.idea +/Source/VSProj/vs2013/obj +/Source/VSProj/vs2013/IFix.sln.DotSettings.user +/Source/UnityProj/Temp +/Source/VSProj/Lib +/Source/VSProj/Bin +/Source/VSProj/Data +/Source/UnityProj/UserSettings +/Source/UnityProj/Assets/Plugins/IFix.Core.pdb.meta +/Source/UnityProj/Assets/Plugins/IFix.Core.dll +/Source/UnityProj/Assets/Plugins/IFix.Core.pdb +/Source/UnityProj/IFixToolKit/IFix.exe.mdb +/Source/UnityProj/IFixToolKit/IFix.exe +/Source/UnityProj/Packages +/Source/UnityProj/Assets/Resources.meta +/Source/UnityProj/Assets/Resources +/Source/VSProj/Instruction.cs +/Source/VSProj/ShuffleInstruction.exe diff --git a/Source/UnityProj/Assets/Helloworld/Calc.cs b/Source/UnityProj/Assets/Helloworld/Calc.cs index 4d6bb5e..431ebb3 100644 --- a/Source/UnityProj/Assets/Helloworld/Calc.cs +++ b/Source/UnityProj/Assets/Helloworld/Calc.cs @@ -5,31 +5,93 @@ * This file is subject to the terms and conditions defined in file 'LICENSE', which is part of this source code package. */ -namespace IFix.Test + +//HelloworldCfg.cs里配置了这个类型 + +using System; +using IFix; +using UnityEngine; + +public enum TestEnumValue { - //HelloworldCfg.cs里配置了这个类型 - public class Calculator - { - //修改成正确的逻辑后,打开如下注释,生成的补丁将修正该函数 - //[Patch] - public int Add(int a, int b) - { - return a * b; - } - - public int Sub(int a, int b) - { - return a / b; - } - - public int Mult(int a, int b) - { - return a * b; - } - - public int Div(int a, int b) - { - return a / b; - } - } + t1, + t2 } + +public struct AllValueStruct +{ + public int x; +} + +public struct ChildClassStruct +{ + public ClassStruct cs; +} + +public struct ClassStruct +{ + public GameObject go; +} + +public class Calculator +{ + private TestEnumValue thisEnum = TestEnumValue.t2; + private Vector3 v = Vector3.right; + + private AllValueStruct astruct = new AllValueStruct(); + //修改成正确的逻辑后,打开如下注释,生成的补丁将修正该函数 + [Patch] + public int Add(int a, int b) + { + return + TestAllValueStruct(default(AllValueStruct)) + TestAllValueStruct(default(AllValueStruct)) + TestAllValueStruct(astruct) + + TestVector3(default(Vector3)) + TestVector3(default(Vector3)) + TestVector3(v) + TestVector3(Vector3.one) + + TestEnum(default(TestEnumValue)) + TestEnum(default(TestEnumValue)) + TestEnum(thisEnum) + TestEnum(TestEnumValue.t1); + //return DoAdd(a, b); + } + + public int TestEnum(TestEnumValue v) + { + return (int)v; + } + + public int TestAllValueStruct(AllValueStruct v) + { + return 10000; + } + + public int TestAllValueStruct(ChildClassStruct v) + { + return 996; + } + + public int TestAllValueStruct(ClassStruct v) + { + return 996; + } + + public int DoAdd(int a, int b) + { + return a * b; + } + + public int Sub(int a, int b) + { + return a / b; + } + + public int TestVector3(Vector3 v) + { + return 0; + } + + public int Mult(int a, int b) + { + return a * b; + } + + public int Div(int a, int b) + { + return a / b; + } +} \ No newline at end of file diff --git a/Source/UnityProj/Assets/Helloworld/Editor/HelloworldCfg.cs b/Source/UnityProj/Assets/Helloworld/Editor/HelloworldCfg.cs index 83ea385..f2e4fbb 100644 --- a/Source/UnityProj/Assets/Helloworld/Editor/HelloworldCfg.cs +++ b/Source/UnityProj/Assets/Helloworld/Editor/HelloworldCfg.cs @@ -21,8 +21,8 @@ static IEnumerable hotfix { return new List() { - // typeof(Helloworld), - // typeof(IFix.Test.Calculator), + typeof(Helloworld), + typeof(Calculator), // //AnotherClass在Pro Standard Assets下,会编译到Assembly-CSharp-firstpass.dll下,用来演示多dll的修复 // typeof(AnotherClass), }; diff --git a/Source/UnityProj/Assets/Helloworld/Helloworld.cs b/Source/UnityProj/Assets/Helloworld/Helloworld.cs index f5cc16a..04d2e3d 100644 --- a/Source/UnityProj/Assets/Helloworld/Helloworld.cs +++ b/Source/UnityProj/Assets/Helloworld/Helloworld.cs @@ -11,7 +11,9 @@ using IFix.Core; using System.IO; using System.Diagnostics; +using System.Reflection; using System.Runtime.InteropServices; +using Unity.Collections.LowLevel.Unsafe; public static class StackClass where T : unmanaged { @@ -19,7 +21,7 @@ public static class StackClass where T : unmanaged } // 跑不同仔细看文档Doc/example.md -public class Helloworld : MonoBehaviour { +public unsafe class Helloworld : MonoBehaviour { public static unsafe object BoxValueToObject(T value) where T : unmanaged { @@ -54,14 +56,38 @@ public static unsafe void UnBoxObjectToValue(object value, out T ret) where T } h.Free(); + fixed (T* p = &ret) + { + *p = *valuePtr; + } + } - ret = *valuePtr; + public class TestHandle + { + public int v1; + public long v2; + public Vector3 v4; + public short v3; } - - + + private void StructHandle(byte* ptr, Value* evaluationStackBase, Value* evaluationStackPointer, + object[] managedStack) + { + var v = *(AllValueStruct*)ptr; + EvaluationStackOperation.PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + + public TestEnumValue _enumValue = TestEnumValue.t1; // check and load patchs void Start () { + print( UnsafeUtility.IsUnmanaged(typeof(TestEnumValue))); + + KeyValuePair l = default; + List li = default; + MyStruct ms = default; + Vector3 z = default; + VirtualMachine.Info = (s) => UnityEngine.Debug.Log(s); //try to load patch for Assembly-CSharp.dll var patch = Resources.Load("Assembly-CSharp.patch"); @@ -69,7 +95,19 @@ void Start () { UnityEngine.Debug.Log("loading Assembly-CSharp.patch ..."); var sw = Stopwatch.StartNew(); - PatchManager.Load(new MemoryStream(patch.bytes)); + var vm = PatchManager.Load(new MemoryStream(patch.bytes)); + vm.externInvokersHandle = (MethodBase mb, out ExternInvoker ei) => + { + bool ret = false; + var fb = new IFix.Binding.IFixBindingCaller(mb, out ret); + ei = fb.Invoke; + return ret; + }; + + EvaluationStackOperation.RegistPushFieldAction(typeof(AllValueStruct), StructHandle); + + + UnityEngine.Debug.Log("patch Assembly-CSharp.patch, using " + sw.ElapsedMilliseconds + " ms"); } //try to load patch for Assembly-CSharp-firstpass.dll @@ -83,9 +121,10 @@ void Start () } test(); + } - struct MyStruct + public struct MyStruct { public int x; public int y; @@ -100,7 +139,7 @@ public MyStruct(int x, int y) private void CallObject(object o) { - Vector3 newPos;// = (Vector3)o; + Vector3 newPos = new Vector3();// = (Vector3)o; UnBoxObjectToValue(o, out newPos); } @@ -112,28 +151,20 @@ private void CallMyObject(object o) Vector3 pos = new Vector3(1, 2, 3); MyStruct s = new MyStruct(1, 1); - private unsafe void Update() + + Calculator calc; + private void Update() { - for (int i = 0; i < 1000; i++) - { - object v = BoxValueToObject(pos);//pos; - CallObject(v); - } - - for (int i = 0; i < 1000; i++) - { - object sv = BoxValueToObject(s);//s; - CallMyObject(sv); - } - + if(calc == null) calc = new Calculator(); + calc.Add(10, 9); } - [IFix.Patch] + //[IFix.Patch] void test() { - var calc = new IFix.Test.Calculator(); + if(calc == null) calc = new Calculator(); //test calc.Add - UnityEngine.Debug.Log("10 + 9 = " + calc.Add(10, 9)); + UnityEngine.Debug.Log("10 + 9 = " +calc.Add(10, 9)); //test calc.Sub UnityEngine.Debug.Log("10 - 2 = " + calc.Sub(10, 2)); diff --git a/Source/UnityProj/Assets/Helloworld/Helloworld.unity b/Source/UnityProj/Assets/Helloworld/Helloworld.unity index 66a95cf..93c24e7 100644 --- a/Source/UnityProj/Assets/Helloworld/Helloworld.unity +++ b/Source/UnityProj/Assets/Helloworld/Helloworld.unity @@ -536,7 +536,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1270849614} - m_Enabled: 0 + m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 2cc296780118d7c4983e4a80bca00e8d, type: 3} m_Name: @@ -564,7 +564,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1270849614} - m_Enabled: 1 + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 6c8e426081d922d499eb7adce900c5c9, type: 3} m_Name: diff --git a/Source/UnityProj/Assets/Helloworld/InvokeTest.cs b/Source/UnityProj/Assets/Helloworld/InvokeTest.cs new file mode 100644 index 0000000..029d97c --- /dev/null +++ b/Source/UnityProj/Assets/Helloworld/InvokeTest.cs @@ -0,0 +1,183 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Reflection; +using System.Threading; +using System.Threading.Tasks; +//using IFix.Binding; +using IFix.Core; +using IFix.Test; +using UnityEngine; + + +public class TestClass +{ + public TestClass() + { + } + + public TestClass(string data) + { + Data = data; + } + + private string data; + + private string Data + { + get { return data; } + set { data = value; } + } + + public static int GetValue(int v) + { + return v; + } +} + +public class IFixTestClassWrapper +{ + public unsafe static int Invoke(int v) + { + return TestClass.GetValue(v); + } + + public unsafe void Invoke(VirtualMachine virtualMachine, ref Call call, bool isInstantiate) + { + TestClass @class = (TestClass)call.GetObject(); + int v = call.GetInt32(sizeof(Value)); + int ret = TestClass.GetValue(v); + call.PushObjectAsResult(ret, typeof(int)); + } +} + +public class InvokeTest : MonoBehaviour +{ + private TestClass testClass; + private IFixTestClassWrapper ifix; + private Type @class; + + private PropertyInfo cachedPropertyInfo; + private MethodInfo cachedMethodInfo; + + private Func getDelegate; + + private Func getValue; + + // Start is called before the first frame update + void Start() + { + //Test(); + AtomAdd(); + } + + public void AtomAdd() + { + int result = 0; + Stopwatch st = new Stopwatch(); + + st.Start(); + for (int i = 0; i < 1000000; i++) + { + result++; + } + + st.Stop(); + UnityEngine.Debug.LogError($"normal:{st.ElapsedMilliseconds}ms, result:{result}"); + + st.Restart(); + result = 0; + Parallel.For(0, 10, (index) => + { + for (int i = 0; i < 100000; i++) + { + lock (this) + { + result++; + } + } + }); + st.Stop(); + UnityEngine.Debug.LogError($"lock in:{st.ElapsedMilliseconds}ms, result:{result}"); + + st.Restart(); + result = 0; + Parallel.For(0, 10, (index) => + { + lock (this) + { + for (int i = 0; i < 100000; i++) + { + result++; + } + } + }); + st.Stop(); + UnityEngine.Debug.LogError($"lock out:{st.ElapsedMilliseconds}ms, result:{result}"); + + result = 0; + st.Restart(); + Parallel.For(0, 10, (index) => + { + for (int i = 0; i < 100000; i++) + { + Interlocked.Increment(ref result); + } + }); + st.Stop(); + UnityEngine.Debug.LogError($"Interlocked.Increment:{st.ElapsedMilliseconds}ms, result:{result}"); + + result = 0; + st.Restart(); + Parallel.For(0, 10, (index) => + { + int originalValue; + int newValue; + for (int i = 0; i < 100000; i++) + { + do + { + originalValue = result; + newValue = originalValue + 1; + } while (Interlocked.CompareExchange(ref result, newValue, originalValue) != originalValue); + } + }); + st.Stop(); + UnityEngine.Debug.LogError($"Interlocked.CompareExchange:{st.ElapsedMilliseconds}ms, result:{result}"); + } + + + [ContextMenu("Test")] + public void Test() + { + //PerfTest.CallOrigin(); + //PerfTest.SafeCallExtern(); + //MethodInfo mi = typeof(List).GetMethod("get_Item"); + //var invoker = new System_Collections_Generic_List_1_int_System_Int32get_Item(mi); + AssetBundle ab = + AssetBundle.LoadFromFile("D:/work/InjectFix/Source/UnityProj/buildexe/e6b45fcfc63ff8a19a769f547e3c.ab"); + } + + public string GetViaReflection() + { + BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public; + PropertyInfo property = @class.GetProperty("Data", bindingFlags); + return (string)property.GetValue(testClass, null); + } + + public string GetViaCacheReflection() + { + return (string)cachedPropertyInfo.GetValue(testClass, null); + } + + public string GetViaDelegate() + { + return getDelegate(testClass); + } + + // Update is called once per frame + void Update() + { + } +} \ No newline at end of file diff --git a/Source/UnityProj/Assets/Helloworld/InvokeTest.cs.meta b/Source/UnityProj/Assets/Helloworld/InvokeTest.cs.meta new file mode 100644 index 0000000..f486fee --- /dev/null +++ b/Source/UnityProj/Assets/Helloworld/InvokeTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c8e426081d922d499eb7adce900c5c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Source/UnityProj/Assets/Helloworld/PerfTest.cs b/Source/UnityProj/Assets/Helloworld/PerfTest.cs new file mode 100644 index 0000000..2099a1d --- /dev/null +++ b/Source/UnityProj/Assets/Helloworld/PerfTest.cs @@ -0,0 +1,156 @@ +/* + * Tencent is pleased to support the open source community by making InjectFix available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * InjectFix is licensed under the MIT License, except for the third-party components listed in the file 'LICENSE' which may be subject to their corresponding license terms. + * This file is subject to the terms and conditions defined in file 'LICENSE', which is part of this source code package. + */ + +using IFix.Core; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace IFix.Test +{ + public class PerfTest + { + //基准测试,空方法调用 + static void Base() + { + int LOOPS = 10000000; + var virtualMachine = SimpleVirtualMachineBuilder.CreateVirtualMachine(LOOPS); + Call call = default; + for (int i = 0; i < 3; i++) + { + var sw = Stopwatch.StartNew(); + Call.BeginRef(ref call); + virtualMachine.Execute(1, ref call, 0); + Call.End(ref call); + sw.Stop(); + Console.WriteLine("Base " + i + " : " + (LOOPS / (int)sw.Elapsed.TotalMilliseconds * 1000) + "\r\n"); + } + } + + //通过Call对象调用add方法,该方法逻辑如下,SimpleVirtualMachineBuilder通过硬编码指令获得 + //int add(int a, int b) + //{ + // return a + b; + //} + //原生方法通过这种方式调用虚拟机方法 + static unsafe void SafeCall() + { + IntPtr nativePointer = System.Runtime.InteropServices.Marshal.AllocHGlobal(sizeof(Value) + * VirtualMachine.MAX_EVALUATION_STACK_SIZE); + Value* evaluationStackPointer = (Value*)nativePointer.ToPointer(); + object[] managedStack = new object[VirtualMachine.MAX_EVALUATION_STACK_SIZE]; + + int LOOPS = 10000000; + var virtualMachine = SimpleVirtualMachineBuilder.CreateVirtualMachine(LOOPS); + + var sw = Stopwatch.StartNew(); + Call call = default; + int ret = 0; + for (int i = 0; i < LOOPS; i++) + { + Call.BeginRef(ref call); + call.PushInt32(4); + call.PushInt32(6); + virtualMachine.Execute(0, ref call, 2); + ret = call.GetInt32(); + } + Console.WriteLine($"SafeCall {ret}" + " : " + ((int)sw.Elapsed.TotalMilliseconds) + "ms\r\n"); + } + + + public struct Vector3 + { + + } + + public int __Gen_Wrap_1(object P0, Vector3 P1) + { + Call call = Call.Begin(); + call.PushObject(P0); + call.PushValueUnmanaged(P1); + return call.GetInt32(0); + } + + static unsafe void CallOrigin() + { + int LOOPS = 1000000; + + var sw = Stopwatch.StartNew(); + int ret = 0; + SimpleVirtualMachineBuilder sb = new SimpleVirtualMachineBuilder(); + // for (int i = 0; i < LOOPS; i++) + // { + // ret = sb.GetValue(10, 20); + // } + Console.WriteLine($"CallOrigin {ret}" + " : " + ((int)sw.Elapsed.TotalMilliseconds) + "ms\r\n"); + } + + static unsafe void SafeCallExtern() + { + int LOOPS = 1;//1000000; + SimpleVirtualMachineBuilder sb = new SimpleVirtualMachineBuilder(); + var virtualMachine = SimpleVirtualMachineBuilder.CreateVirtualMachine(LOOPS); + + var sw = Stopwatch.StartNew(); + int ret = 0; + Call call = default; + List list = new List { 12 }; + for (int i = 0; i < LOOPS; i++) + { + Call.BeginRef(ref call); + call.PushObject(sb); + call.PushObject(list); + virtualMachine.Execute(2, ref call, 3); + ret = call.GetInt32(); + } + sw.Stop(); + Console.WriteLine($"SafeCallExtern ret:{ret} " + " : " + (sw.Elapsed.TotalMilliseconds) + "ms\r\n"); + } + + //直接通过指针操作栈,调用add方法 + //虚拟机内部方法间调用是通过这种方式 + unsafe static void UnsafeCall() + { + IntPtr nativePointer = System.Runtime.InteropServices.Marshal.AllocHGlobal(sizeof(Value) + * VirtualMachine.MAX_EVALUATION_STACK_SIZE); + Value* evaluationStackPointer = (Value*)nativePointer.ToPointer(); + object[] managedStack = new object[VirtualMachine.MAX_EVALUATION_STACK_SIZE]; + byte* stackValueHandler = (byte*)Marshal.AllocHGlobal(32 * VirtualMachine.MAX_EVALUATION_STACK_SIZE).ToPointer(); + + int LOOPS = 10000000; + var virtualMachine = SimpleVirtualMachineBuilder.CreateVirtualMachine(LOOPS); + var sw = Stopwatch.StartNew(); + + int ret = 0; + for (int i = 0; i < LOOPS; i++) + { + evaluationStackPointer->Value1 = 10; + evaluationStackPointer->Type = IFix.Core.ValueType.Integer; + + (evaluationStackPointer + 1)->Value1 = 20; + (evaluationStackPointer + 1)->Type = IFix.Core.ValueType.Integer; + + virtualMachine.Execute(0, evaluationStackPointer, managedStack, evaluationStackPointer, 2); + ret = evaluationStackPointer->Value1; + } + Console.WriteLine($"UnsafeCall {ret}" + " : " + ((int)sw.Elapsed.TotalMilliseconds) + "ms\r\n"); + + System.Runtime.InteropServices.Marshal.FreeHGlobal(nativePointer); + } + + public static void Main(string[] args) + { + CallOrigin(); + SafeCallExtern(); + //Base(); + SafeCall(); + UnsafeCall(); + Console.Read(); + } + } +} diff --git a/Source/UnityProj/Assets/Helloworld/PerfTest.cs.meta b/Source/UnityProj/Assets/Helloworld/PerfTest.cs.meta new file mode 100644 index 0000000..91f5181 --- /dev/null +++ b/Source/UnityProj/Assets/Helloworld/PerfTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f053a4b31d5d7644981ceeab0fff448 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Source/UnityProj/Assets/IFix/Editor.meta b/Source/UnityProj/Assets/IFix/Editor.meta index 3a5016d..fdfeb92 100644 --- a/Source/UnityProj/Assets/IFix/Editor.meta +++ b/Source/UnityProj/Assets/IFix/Editor.meta @@ -1,9 +1,8 @@ fileFormatVersion: 2 guid: 89d3afd1ac6383a4bb803e86127d5ed3 folderAsset: yes -timeCreated: 1514965388 -licenseType: Pro DefaultImporter: + externalObjects: {} userData: assetBundleName: assetBundleVariant: diff --git a/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs b/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs index 0d122bd..f742d36 100644 --- a/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs +++ b/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs @@ -2,8 +2,11 @@ using System.Collections.Generic; using System.IO; using System.Reflection; +using System.Runtime.InteropServices; using System.Text; using System.Text.RegularExpressions; +using IFix.Utils; +using Unity.Collections.LowLevel.Unsafe; using UnityEngine; using UnityEngine.UI; @@ -13,278 +16,67 @@ public class ILFixCodeGen { #region static - public static HashSet delegateDict = new HashSet(); - public static HashSet ctorCache = new HashSet(); - public static void ClearMethod() + public Dictionary> delegateDict = new Dictionary>(); + public Dictionary> ctorCache = new Dictionary>(); + public void ClearMethod() { delegateDict.Clear(); ctorCache.Clear(); } - public static bool TryGetDelegateStr(MethodInfo mi, out string ret) + public bool TryGetDelegateStr(MethodInfo mi, out string ret) { bool result = true; - ret = MethodInfoToDelegateStr(mi); - if (!delegateDict.Contains(ret)) + var key = TypeNameUtils.GetUniqueMethodName(mi); + if (!delegateDict.ContainsKey(key)) { result = false; - delegateDict.Add(ret); - } - - return result; - } - - #endregion - - #region cal name - - static string[] prefix = new string[] { "System.Collections.Generic" }; - - static string RemoveRef(string s, bool removearray = true) - { - if (s.EndsWith("&")) s = s.Substring(0, s.Length - 1); - if (s.EndsWith("[]") && removearray) s = s.Substring(0, s.Length - 2); - if (s.StartsWith(prefix[0])) s = s.Substring(prefix[0].Length + 1, s.Length - prefix[0].Length - 1); - - s = s.Replace("+", "."); - if (s.Contains("`")) - { - string regstr = @"`\d"; - Regex r = new Regex(regstr, RegexOptions.None); - s = r.Replace(s, ""); - s = s.Replace("[", "<"); - s = s.Replace("]", ">"); - } - - return s; - } - - static string FullName(Type t) - { - if (t.FullName == null) - { - Debug.Log(t.Name); - return t.Name; - } - - return FullName(t.FullName); - } - - static string FullName(string str) - { - if (str == null) - { - throw new NullReferenceException(); - } - - return RemoveRef(str.Replace("+", ".")); - } - - static string SimpleType(Type t) - { - string tn = t.Name; - switch (tn) - { - case "Single": - return "float"; - case "String": - return "string"; - case "String[]": - return "string[]"; - case "Double": - return "double"; - case "Boolean": - return "bool"; - case "Int32": - return "int"; - case "Int32[]": - return "int[]"; - case "UInt32": - return "uint"; - case "UInt32[]": - return "uint[]"; - case "Int16": - return "short"; - case "Int16[]": - return "short[]"; - case "UInt16": - return "ushort"; - case "UInt16[]": - return "ushort[]"; - case "Object": - return FullName(t); - default: - tn = TypeDecl(t); - tn = tn.Replace("System.Collections.Generic.", ""); - tn = tn.Replace("System.Object", "object"); - return tn; - } - } - - static string _Name(string n) - { - n = n.Replace("*", "__X"); - string ret = ""; - for (int i = 0; i < n.Length; i++) - { - if (char.IsLetterOrDigit(n[i])) - ret += n[i]; - else - ret += "_"; - } - - return ret; - } - - static string GenericBaseName(Type t) - { - string n = t.FullName; - if (n.IndexOf('[') > 0) - { - n = n.Substring(0, n.IndexOf('[')); - } - - return n.Replace("+", "."); - } - - static string GenericName(Type t, string sep = "_") - { - try - { - Type[] tt = t.GetGenericArguments(); - string ret = ""; - for (int n = 0; n < tt.Length; n++) - { - string dt = SimpleType(tt[n]); - ret += dt; - if (n < tt.Length - 1) - ret += sep; - } - - return ret; - } - catch (Exception e) - { - Debug.Log(e.ToString()); - return ""; - } - } - - public static string ExportName(MethodBase mb) - { - string clsname = ExportName(mb.DeclaringType); - ParameterInfo[] pars = mb.GetParameters(); - var parameterTypeNames = string.Join("_", Array.ConvertAll(pars, p => ExportName(p.ParameterType))); - return clsname + "_" + parameterTypeNames + _Name(mb.Name); - } - - public static string ExportName(Type t) - { - if (t.IsGenericType) - { - return string.Format("{0}_{1}", _Name(GenericBaseName(t)), _Name(GenericName(t))); + ret = MethodInfoToDelegate(mi); + delegateDict.Add(key, new Tuple(methodCount, ret)); } else { - string name = RemoveRef(t.FullName, true); - return name.Replace(".", "_").Replace("*", "__X"); + ret = delegateDict[key].Item2; } - } - - static string TypeDecl(Type t) - { - if (t == typeof(void)) return "void"; - if (t.IsGenericType) - { - string ret = GenericBaseName(t); - - string gs = ""; - gs += "<"; - Type[] types = t.GetGenericArguments(); - for (int n = 0; n < types.Length; n++) - { - gs += SimpleType(types[n]); - if (n < types.Length - 1) - gs += ","; - } - - gs += ">"; - ret = Regex.Replace(ret, @"`\d", gs); - - return RemoveRef(ret); - } - - if (t.IsArray) - { - return TypeDecl(t.GetElementType()) + "[]"; - } - else - return RemoveRef(t.ToString(), false); + return result; } - static string MethodInfoToDelegateStr(MethodInfo method) - { - List args = new List(); - var parameters = method.GetParameters(); - if (!method.IsStatic) - { - args.Add(_Name(SimpleType(method.ReflectedType))); - } - - for (int i = 0, imax = parameters.Length; i args = new List(); var parameters = method.GetParameters(); if (!method.IsStatic && !(method is ConstructorInfo)) { - args.Add(SimpleType(method.ReflectedType) +" arg0"); + args.Add( TypeNameUtils.SimpleType(method.ReflectedType) +" arg0"); } for (int i = 0, imax = parameters.Length; i TypeDecl(p.ParameterType))); - return $"{TypeDecl(method.DeclaringType)}.{method.Name}({parameterTypeNames})"; - } - static MethodInfo tryFixGenericMethod(MethodInfo method) { if (!method.ContainsGenericParameters) @@ -390,12 +182,13 @@ string FuncCall(MethodBase m, int parOffset = 0) for (int n = parOffset; n < pars.Length; n++) { ParameterInfo p = pars[n]; + int idx = (!m.IsStatic && !(m is ConstructorInfo)) ? n + 1 : n; if (p.ParameterType.IsByRef && p.IsOut) - str += string.Format("out a{0}", n + 1); + str += string.Format("out a{0}", idx); else if (p.ParameterType.IsByRef) - str += string.Format("ref a{0}", n + 1); + str += string.Format("ref a{0}", idx); else - str += string.Format("a{0}", n + 1); + str += string.Format("a{0}", idx); if (n < pars.Length - 1) str += ","; } @@ -407,66 +200,64 @@ string FuncGetArg(ParameterInfo p) { Type t = p.ParameterType; - if (t.IsPrimitive) + if (t == typeof(int)) { - if (t == typeof(int)) - { - return "call.GetInt32"; - } - else if (t == typeof(float)) - { - return "call.GetSingle"; - } - else if (t == typeof(bool)) - { - return "call.GetBoolean"; - } - else if (t == typeof(double)) - { - return "call.GetDouble"; - } - else if (t == typeof(long)) - { - return "call.GetInt64"; - } - else if (t == typeof(byte)) - { - return "call.GetByte"; - } - else if (t == typeof(uint)) - { - return "call.GetUInt32"; - } - else if (t == typeof(ushort)) - { - return "call.GetUInt16"; - } - else if (t == typeof(short)) - { - return "call.GetInt16"; - } - else if (t == typeof(char)) - { - return "call.GetChar"; - } - else if (t == typeof(ulong)) - { - return "call.GetUInt64"; - } - else if (t == typeof(sbyte)) - { - return "call.GetSByte"; - } - else if (t == typeof(IntPtr)) - { - return "call.GetIntPtr"; - } - else if (t == typeof(UIntPtr)) - { - return "call.GetUIntPtr"; - } + return "call.GetInt32"; } - else if (t.IsEnum) + if (t == typeof(float)) + { + return "call.GetSingle"; + } + if (t == typeof(bool)) + { + return "call.GetBoolean"; + } + if (t == typeof(double)) + { + return "call.GetDouble"; + } + if (t == typeof(long)) + { + return "call.GetInt64"; + } + if (t == typeof(byte)) + { + return "call.GetByte"; + } + if (t == typeof(uint)) + { + return "call.GetUInt32"; + } + if (t == typeof(ushort)) + { + return "call.GetUInt16"; + } + if (t == typeof(short)) + { + return "call.GetInt16"; + } + if (t == typeof(char)) + { + return "call.GetChar"; + } + if (t == typeof(ulong)) + { + return "call.GetUInt64"; + } + if (t == typeof(sbyte)) + { + return "call.GetSByte"; + } + if (t == typeof(IntPtr)) + { + return "call.GetIntPtr"; + } + if (t == typeof(UIntPtr)) + { + return "call.GetUIntPtr"; + } + + if (t.IsEnum) { var underlyingType = Enum.GetUnderlyingType(t); if (underlyingType == typeof(long) || underlyingType == typeof(ulong)) @@ -490,7 +281,6 @@ string FuncGetArg(ParameterInfo p) return "call.GetInt32Point"; } } - return "call.GetObject"; } @@ -571,10 +361,14 @@ string FuncPushResult(Type t) { return "call.PushIntPtr64AsResult((IntPtr)result);"; } - + else if(UnsafeUtility.IsUnmanaged(t)) + { + return "call.PushValueUnmanagedAsResult(result);"; + } return "call.PushObjectAsResult(result, result.GetType());"; } + #endregion #region write @@ -600,155 +394,207 @@ void Write(StreamWriter file, string fmt, params object[] args) if (fmt.EndsWith("{")) indent++; } - private void WriteHead(MethodBase mb, StreamWriter file, string exportName) + private void WriteHead(StreamWriter file) { - Write(file, "using System;"); Write(file, "using IFix.Core;"); Write(file, "using System.Collections.Generic;"); Write(file, "using System.Reflection;"); + Write(file, "using IFix.Utils;"); Write(file, "#if UNITY_5_5_OR_NEWER"); Write(file, "using UnityEngine.Profiling;"); + Write(file, "#else"); + Write(file, "using UnityEngine;"); Write(file, "#endif"); Write(file, "namespace IFix.Binding"); Write(file, "{"); - Write(file, "public unsafe class {0} : IFixBindingCaller", exportName); + Write(file, "public unsafe class IFixBindingCaller"); Write(file, "{"); - if (mb is MethodInfo) + Write(file, "public ExternInvoker Invoke = null;"); + Write(file, "private MethodBase method;"); + Write(file, "private Delegate caller = null;"); + } + + private void End(StreamWriter file) + { + Write(file, "public IFixBindingCaller(MethodBase method, out bool isSuccess)"); + Write(file, "{"); + Write(file, "this.method = method;"); + Write(file, "isSuccess = false;"); + Write(file, "object methodUniqueStr = string.Intern(TypeNameUtils.GetUniqueMethodName(method));"); + Write(file, ""); + foreach (var item in delegateDict) { - Write(file, MethodInfoToDelegate((MethodInfo)mb)); - Write(file, ""); - Write(file, "private IFixCallDel del;"); - Write(file, ""); + Write(file, $"if (methodUniqueStr == \"{item.Key}\")"); + Write(file, "{"); + Write(file, $"Invoke = Invoke{item.Value.Item1};"); + Write(file, "isSuccess = true;"); + Write(file, "return;"); + Write(file, "}"); } - Write(file, "public {0}(MethodBase method) : base(method) {{", exportName); - if (mb is MethodInfo) + + Write(file, ""); + foreach (var item in ctorCache) { - Write(file, "del = (IFixCallDel)Delegate.CreateDelegate(typeof(IFixCallDel), (MethodInfo)method);"); + Write(file, $"if (methodUniqueStr == (object)\"{item.Key}\")"); + Write(file, "{"); + Write(file, $"Invoke = Invoke{item.Value.Item1};"); + Write(file, "isSuccess = true;"); + Write(file, "return;"); + Write(file, "}"); } - Write(file, "}"); - } + Write(file, "}"); - private void End(StreamWriter file) - { Write(file, "}"); Write(file, "}"); file.Flush(); file.Close(); } - private void WriteFunctionAttr(StreamWriter file) - { -// Write(file, "[SLua.MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))]"); -// #if UNITY_5_3_OR_NEWER -// Write(file, "[UnityEngine.Scripting.Preserve]"); -// #endif - } - void WriteTry(StreamWriter file) { + Write(file, "try"); + Write(file, "{"); Write(file, "#if DEBUG"); - Write(file, "try {"); Write(file, "Profiler.BeginSample(method.Name);"); Write(file, "#endif"); } - void WriteCatchExecption(StreamWriter file) + void WriteFinaly(StreamWriter file, int paramStart, int paramCount) { - // Write(file, "}"); - // Write(file, "catch(Exception e) {"); - // Write(file, "return error(l,e);"); - Write(file, "#if DEBUG"); Write(file, "}"); - WriteFinaly(file); - Write(file, "#endif"); - } - - void WriteFinaly(StreamWriter file) - { - Write(file, "finally {"); + Write(file, "finally"); + Write(file, "{"); + Write(file, "#if DEBUG"); Write(file, "Profiler.EndSample();"); + Write(file, "#endif"); + + Write(file, "Value* pArg = call.argumentBase;"); + Write(file, "if (pushResult) pArg++;"); + Write(file, "var managedStack = call.managedStack;"); + Write(file, $"for (int i = {paramStart}; i < {paramCount}; i++)"); + Write(file, "{"); + Write(file, "EvaluationStackOperation.RecycleObject(managedStack[pArg - call.evaluationStackBase]);"); + Write(file, "managedStack[pArg - call.evaluationStackBase] = null;"); + Write(file, "pArg++;"); Write(file, "}"); + Write(file, "}"); } - void WriteOk(StreamWriter file) + private void WriteMethodCaller(MethodBase mb, StreamWriter file) { - Write(file, "pushValue(l,true);"); - } + if (mb is MethodInfo) + { + string delegateStr; + if (TryGetDelegateStr((MethodInfo)mb, out delegateStr)) + { + return; + } + Write(file, delegateStr); + } + else if (mb is ConstructorInfo) + { + var cr = TypeNameUtils.GetUniqueMethodName(mb); + if (!ctorCache.ContainsKey(cr)) + { + ctorCache.Add(cr, new Tuple(methodCount, MethodInfoToDelegate(mb))); + } + } - void WriteBad(StreamWriter file) - { - Write(file, "pushValue(l,false);"); - } + Write(file, ""); + Write(file, "public void Invoke{0}(VirtualMachine vm, ref Call call, bool instantiate) {{", methodCount); - void WriteError(StreamWriter file, string err) - { - WriteBad(file); - Write(file, "LuaDLL.lua_pushstring(l,\"{0}\");", err); - Write(file, "return 2;"); - } + bool pushResult = mb is ConstructorInfo || + (mb is MethodInfo && ((MethodInfo)mb).ReturnType != typeof(void)); - void WriteReturn(StreamWriter file, string val) - { - Write(file, "pushValue(l,true);"); - Write(file, "pushValue(l,{0});", val); - Write(file, "return 2;"); - } + int paramStart = 0; + if (pushResult) + { + paramStart = 1; + } - private void WriteMethodCaller(MethodBase mb, StreamWriter file) - { - Write(file, ""); - Write(file, "public void Invoke(VirtualMachine vm, ref Call call, bool instantiate) {"); + int paramCount = mb.GetParameters().Length; + if (mb is MethodInfo && !((MethodInfo)mb).IsStatic) + { + paramCount += 1; + } + + string pushResultStr = pushResult ? "true" : "false"; + + Write(file, $"bool pushResult = {pushResultStr};"); WriteTry(file); ParameterInfo[] pars = mb.GetParameters(); if (mb is ConstructorInfo) { - Write(file, "{0} result;", TypeDecl(mb.ReflectedType)); + Write(file, "{0} result;", TypeNameUtils.SimpleType(mb.ReflectedType)); for (int n = 0; n < pars.Length; n++) { var p = pars[n]; - Write(file, "var a{0} = ({1}){3}({2});", n+1, TypeDecl(p.ParameterType) ,n, FuncGetArg(p)); + Write(file, "var a{0} = ({1}){3}({2});", n, TypeNameUtils.SimpleType(p.ParameterType) ,n, FuncGetArg(p)); + } + Write(file, "result = new {0}({1});", TypeNameUtils.SimpleType(mb.ReflectedType), FuncCall(mb)); + if (UnsafeUtility.IsUnmanaged(mb.ReflectedType)) + { + Write(file, "call.PushValueUnmanagedAsResult(result);"); + } + else + { + Write(file, "call.PushObjectAsResult(result, result.GetType());"); } - Write(file, "result = new {0}({1});", TypeDecl(mb.ReflectedType), FuncCall(mb)); - Write(file, "call.PushObjectAsResult(result, result.GetType());"); + + } else { var mi = mb as MethodInfo; if (mi.ReturnType != typeof(void)) { - Write(file, "{0} result;", SimpleType(mi.ReturnType)); + Write(file, "{0} result;", TypeNameUtils.SimpleType(mi.ReturnType)); } if (!mb.IsStatic) { - Write(file, "var a0 = ({0})call.GetObject(0);", SimpleType(mb.DeclaringType)); + Write(file, "var a0 = ({0})call.GetObject(0);", TypeNameUtils.SimpleType(mb.DeclaringType)); } for (int n = 0; n < pars.Length; n++) { var p = pars[n]; - Write(file, "var a{0} = ({1}){3}({2});", n+1, SimpleType(p.ParameterType) ,mb.IsStatic ? n : n + 1, FuncGetArg(p)); + var idx = mb.IsStatic ? n : n + 1; + Write(file, "var a{0} = ({1}){3}({2});", idx, TypeNameUtils.SimpleType(p.ParameterType) , idx, FuncGetArg(p)); } - + + Write(file, "if (caller == null)"); + Write(file, "{"); + Write(file, "caller = Delegate.CreateDelegate(typeof(IFixCallDel{0}), (MethodInfo)method);", methodCount); + Write(file, "}"); if (mi.ReturnType != typeof(void)) { - Write(file, "result = del({0});", FuncCall(mi)); + Write(file, "result = ((IFixCallDel{1})caller)({0});", FuncCall(mi), methodCount); Write(file, FuncPushResult(mi.ReturnType)); //Write(file, "call.PushObjectAsResult(result, result.GetType());"); } else { - Write(file, "del({0});", FuncCall(mi)); + Write(file, "((IFixCallDel{1})caller)({0});", FuncCall(mi), methodCount); + } + + for (int n = 0; n < pars.Length; n++) + { + var p = pars[n]; + var idx = mb.IsStatic ? n : n + 1; + if(p.ParameterType.IsByRef) + Write(file, "call.UpdateReference({0}, a{0}, vm, typeof({1}));", idx, TypeNameUtils.SimpleType(p.ParameterType)); } } - WriteCatchExecption(file); + WriteFinaly(file, paramStart, paramCount); Write(file, "}"); + Write(file, ""); } #endregion @@ -766,80 +612,27 @@ public void DeleteAll() } } - public void Generate(Type t) + public void GenAll(List mbList) { - if (!Directory.Exists(path)) - { - Directory.CreateDirectory(path); - } - - ConstructorInfo[] cons = GetValidConstructor(t); - string exportName; - foreach (var item in cons) - { - GenerateMethod(item); - } + var file = Begin(); + WriteHead(file); - var mis = GetValidMethodInfo(t); - foreach (var item in mis) + for (int i = 0, imax = mbList.Count; i < imax; i++) { - GenerateMethod(item); + WriteMethodCaller(mbList[i], file); + methodCount++; } - - } - - public void GenerateMethod(MethodBase mb) - { - try - { - if (mb is ConstructorInfo) - { - ConstructorInfo ci = mb as ConstructorInfo; - if (ci.ReflectedType.IsSubclassOf(typeof(Delegate))) return; - if (ctorCache.Contains(ci)) - { - return; - } - - ctorCache.Add(ci); - StreamWriter file = Begin(mb); - WriteHead(mb, file, ExportName(mb)); - WriteMethodCaller(mb, file); - End(file); - } - else if (mb is MethodInfo) - { - string exportName; - var item = mb as MethodInfo; - if (item.IsGenericMethodDefinition) return; - - if (TryGetDelegateStr(item, out exportName)) return; - StreamWriter file = Begin(item); - WriteHead(item, file, exportName); - WriteMethodCaller(item, file); - End(file); - } - } - catch (Exception e) - { - Debug.LogError(e); - } - - + + End(file); } #endregion - StreamWriter Begin(MethodBase mb) + StreamWriter Begin() { - string clsname = ExportName(mb); - if (mb is MethodInfo) - { - TryGetDelegateStr((MethodInfo)mb, out clsname); - } - - string f = path + clsname + ".cs"; - StreamWriter file = new StreamWriter(f, false, Encoding.UTF8); + string bindingFile = path + "IFixBindingCaller.cs"; + + StreamWriter file = new StreamWriter(bindingFile, false, Encoding.UTF8); file.NewLine = NewLine; return file; } @@ -888,7 +681,7 @@ class PropPair } public string path; - + public int methodCount = 0; int indent = 0; HashSet funcname = new HashSet(); Dictionary propname = new Dictionary(); diff --git a/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs.meta b/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs.meta index 0513572..e280786 100644 --- a/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs.meta +++ b/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs.meta @@ -1,3 +1,3 @@ -fileFormatVersion: 2 -guid: 852e4e3ccd604cacb3e6662661f0a3d1 -timeCreated: 1708949102 \ No newline at end of file +fileFormatVersion: 2 +guid: f7f4398db3d54a5a90b2cd75845ef132 +timeCreated: 1711696371 \ No newline at end of file diff --git a/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs b/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs index 9d065f4..e83f0ef 100644 --- a/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs +++ b/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs @@ -1,4 +1,4 @@ -/* +/* * Tencent is pleased to support the open source community by making InjectFix available. * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. * InjectFix is licensed under the MIT License, except for the third-party components listed in the file 'LICENSE' which may be subject to their corresponding license terms. @@ -947,18 +947,18 @@ public static void GenBinding() { ILFixCodeGen gen = new ILFixCodeGen(); gen.path = "Assets/IFix/Binding/"; - ILFixCodeGen.ClearMethod(); + gen.methodCount = 0; + gen.ClearMethod(); gen.DeleteAll(); // custom type - gen.Generate(typeof(List)); + //gen.Generate(typeof(List)); //gen.Generate(typeof(string)); - + // search by dll caller - var methods = FindAllMethod(typeof(Helloworld).Assembly); - foreach (var item in methods) - { - gen.GenerateMethod(item); - } + List initObjList = new List(); + var methods = FindAllMethod(typeof(Helloworld).Assembly, initObjList); + gen.GenAll(methods); + } public bool Generate(Type t) @@ -971,22 +971,40 @@ public bool Generate(Type t) return false; } - public static List FindAllMethod(Assembly assembly) + public static List FindAllMethod(Assembly assembly, List initTypeList) { HashSet result = new HashSet(); // 遍历程序集中的所有类型 foreach (var type in assembly.GetTypes()) { + if (type.FullName == "IFix.ILFixDynamicMethodWrapper") + { + throw new Exception("You can't gen binding when dll is injected"); + } + if (type.IsSubclassOf(typeof(Delegate))) continue; // 遍历类型中的所有方法 var methods = type.GetMethods(BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); - foreach (var methodInfo in methods) + + var constructors = type.GetConstructors(BindingFlags.Public + | BindingFlags.DeclaredOnly | BindingFlags.NonPublic + | BindingFlags.Instance | BindingFlags.Static); + + List mbList = new List(); + mbList.AddRange(methods); + mbList.AddRange(constructors); + + foreach (var methodInfo in mbList) { - if(methodInfo.ReflectedType.Namespace.Contains("IFix")) continue; + // if (methodInfo == null) continue; + // if(methodInfo.ReflectedType.ReflectedType == null) continue; + // if(string.IsNullOrEmpty(methodInfo.ReflectedType.Namespace)) continue; + if(methodInfo.ReflectedType.Namespace == "IFix.Core") continue; + if(methodInfo.ReflectedType.Namespace == "IFix.Binding") continue; // 输出方法的名称 //UnityEngine.Debug.Log($"方法: {ILFixCodeGen.GetUniqueStringForMethod(methodInfo)}"); @@ -1026,13 +1044,44 @@ public static List FindAllMethod(Assembly assembly) ilIndex += 4; // 解析元数据标记获取调用的方法信息 - var calledMethod = methodInfo.Module.ResolveMethod(metadataToken); - if (!result.Contains(calledMethod)) + try { - result.Add(calledMethod); - // 输出调用的方法信息 - //UnityEngine.Debug.Log($" 调用方法: {ILFixCodeGen.GetUniqueStringForMethod(calledMethod)}"); + var calledMethod = methodInfo.Module.ResolveMethod(metadataToken); + if (!result.Contains(calledMethod)) + { + if (calledMethod is ConstructorInfo) + { + if (!calledMethod.ReflectedType.IsValueType) + { + //UnityEngine.Debug.Log($"class ctor:{calledMethod.ReflectedType}, {calledMethod.Name}"); + } + else if(calledMethod.IsPublic) + { + result.Add(calledMethod); + } + // class对象的构造函数不处理 + } + else + { + result.Add(calledMethod); + } + + // 输出调用的方法信息 + //UnityEngine.Debug.Log($" 调用方法: {ILFixCodeGen.GetUniqueStringForMethod(calledMethod)}"); + } + } + catch (Exception e) + { + UnityEngine.Debug.LogError(e); } + + } + else if (opcode == OpCodes.Initobj) + { + int metadataToken = BitConverter.ToInt32(ilBytes, ilIndex); + ilIndex += 1; + var operandType = methodInfo.Module.ResolveType(metadataToken); + initTypeList.Add(operandType); } // 检查是否有操作数,并根据操作码的操作数类型移动索引 diff --git a/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs.meta b/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs.meta index 37eb3ba..a670837 100644 --- a/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs.meta +++ b/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs.meta @@ -1,12 +1,3 @@ -fileFormatVersion: 2 -guid: ea1d006806821c945ad3dfda116f04f7 -timeCreated: 1514863799 -licenseType: Pro -MonoImporter: - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: +fileFormatVersion: 2 +guid: a28e2c8f14b84f79a08c48fb75479f32 +timeCreated: 1711696371 \ No newline at end of file diff --git a/Source/UnityProj/Assets/IFix/IFixBindingCaller.cs b/Source/UnityProj/Assets/IFix/IFixBindingCaller.cs deleted file mode 100644 index c5db17f..0000000 --- a/Source/UnityProj/Assets/IFix/IFixBindingCaller.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Reflection; - -namespace IFix -{ - public class IFixBindingCaller - { - protected MethodBase method; - - public IFixBindingCaller(MethodBase method) - { - this.method = method; - } - } -} \ No newline at end of file diff --git a/Source/UnityProj/Assets/IFix/IFixBindingCaller.cs.meta b/Source/UnityProj/Assets/IFix/IFixBindingCaller.cs.meta deleted file mode 100644 index 0b52e34..0000000 --- a/Source/UnityProj/Assets/IFix/IFixBindingCaller.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: ff67f7b63401419ebd7201a969c3abdc -timeCreated: 1709199666 \ No newline at end of file diff --git a/Source/UnityProj/Assets/IFix/TypeNameUtils.cs b/Source/UnityProj/Assets/IFix/TypeNameUtils.cs new file mode 100644 index 0000000..097425c --- /dev/null +++ b/Source/UnityProj/Assets/IFix/TypeNameUtils.cs @@ -0,0 +1,182 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text.RegularExpressions; +using UnityEngine; + +namespace IFix.Utils +{ + public static class TypeNameUtils + { + static string[] prefix = new string[] { "System.Collections.Generic" }; + + static string RemoveRef(string s, bool removearray = true) + { + if (s.EndsWith("&")) s = s.Substring(0, s.Length - 1); + if (s.EndsWith("[]") && removearray) s = s.Substring(0, s.Length - 2); + if (s.StartsWith(prefix[0])) s = s.Substring(prefix[0].Length + 1, s.Length - prefix[0].Length - 1); + + s = s.Replace("+", "."); + if (s.Contains("`")) + { + string regstr = @"`\d"; + Regex r = new Regex(regstr, RegexOptions.None); + s = r.Replace(s, ""); + s = s.Replace("[", "<"); + s = s.Replace("]", ">"); + } + + return s; + } + + public static string FullName(Type t) + { + if (t.FullName == null) + { + Debug.Log(t.Name); + return t.Name; + } + + return FullName(t.FullName); + } + + public static string FullName(string str) + { + if (str == null) + { + throw new NullReferenceException(); + } + + return RemoveRef(str.Replace("+", ".")); + } + + public static string SimpleType(Type t) + { + string tn = t.Name; + switch (tn) + { + case "Single": + return "float"; + case "String": + return "string"; + case "String[]": + return "string[]"; + case "Double": + return "double"; + case "Boolean": + return "bool"; + case "Int32": + return "int"; + case "Int32[]": + return "int[]"; + case "UInt32": + return "uint"; + case "UInt32[]": + return "uint[]"; + case "Int16": + return "short"; + case "Int16[]": + return "short[]"; + case "UInt16": + return "ushort"; + case "UInt16[]": + return "ushort[]"; + case "Object": + return FullName(t); + case "Void*": + return "void*"; + default: + tn = TypeDecl(t); + tn = tn.Replace("System.Collections.Generic.", ""); + tn = tn.Replace("System.Object", "object"); + return tn; + } + } + + public static string _Name(string n) + { + n = n.Replace("*", "__X"); + string ret = ""; + for (int i = 0; i < n.Length; i++) + { + if (char.IsLetterOrDigit(n[i])) + ret += n[i]; + else + ret += "_"; + } + + return ret; + } + + public static string GenericBaseName(Type t) + { + string n = t.FullName; + if (n.IndexOf('[') > 0) + { + n = n.Substring(0, n.IndexOf('[')); + } + + return n.Replace("+", "."); + } + + public static string GetUniqueMethodName(MethodBase method) + { + List args = new List(); + var parameters = method.GetParameters(); + if (!method.IsStatic && !(method is ConstructorInfo)) + { + args.Add( TypeNameUtils.SimpleType(method.ReflectedType)); + } + + for (int i = 0, imax = parameters.Length; i + + + + + + + + + + + + diff --git a/Source/UnityProj/Assets/Plugins/Android/AndroidManifest.xml.meta b/Source/UnityProj/Assets/Plugins/Android/AndroidManifest.xml.meta new file mode 100644 index 0000000..6f1a985 --- /dev/null +++ b/Source/UnityProj/Assets/Plugins/Android/AndroidManifest.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1c2b5d1d59f046043bf9daf86a883405 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Source/UnityProj/Assets/StreamingAssets.meta b/Source/UnityProj/Assets/StreamingAssets.meta new file mode 100644 index 0000000..d4c108e --- /dev/null +++ b/Source/UnityProj/Assets/StreamingAssets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a6780cd738c6be94198101a994b79f4c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Source/VSProj/Src/Builder/SimpleVirtualMachineBuilder.cs b/Source/VSProj/Src/Builder/SimpleVirtualMachineBuilder.cs index 6641591..1b7edd2 100644 --- a/Source/VSProj/Src/Builder/SimpleVirtualMachineBuilder.cs +++ b/Source/VSProj/Src/Builder/SimpleVirtualMachineBuilder.cs @@ -5,6 +5,8 @@ * This file is subject to the terms and conditions defined in file 'LICENSE', which is part of this source code package. */ +using System.Reflection; + namespace IFix.Core { using System.Collections.Generic; @@ -13,6 +15,40 @@ namespace IFix.Core public class SimpleVirtualMachineBuilder { + public unsafe int GetValue(long* a, long* b) + { + long ret = 0; + for (int i = 0; i < 1000; i++) + { + ret = *a + *b; + } + + return (int)ret; + } + + public unsafe int CallTest(List v) + { + var l = new List(); + l.Add(1); + l[0] = 1; + var c = l.Count; + + return v.Count; + } + + public unsafe int CallGetValue(long a, long b) + { + KeyValuePair v = default(KeyValuePair); + return (int)v.Value; + } + + public static string GetUniqueStringForMethod(MethodBase method) + { + var parameters = method.GetParameters(); + var parameterTypeNames = string.Join(",", Array.ConvertAll(parameters, p => p.ParameterType.FullName)); + return $"{method.DeclaringType.FullName}.{method.Name}({parameterTypeNames})"; + } + unsafe static public VirtualMachine CreateVirtualMachine(int loopCount) { Instruction[][] methods = new Instruction[][] @@ -48,6 +84,16 @@ unsafe static public VirtualMachine CreateVirtualMachine(int loopCount) new Instruction {Code = Code.Blt, Operand = -10 }, //14 new Instruction {Code = Code.Ret, Operand = 0 } + }, + new Instruction[] // call extern fun + { + new Instruction {Code = Code.StackSpace, Operand = (1 << 16) | 1 }, + new Instruction {Code = Code.Ldarg, Operand = 1 }, + + new Instruction {Code = Code.CallExtern, Operand = (1 << 16) | 2}, + // new Instruction {Code = Code.Stloc, Operand = 0 }, + // new Instruction {Code = Code.Ldloc, Operand = 0 }, + new Instruction {Code = Code.Ret, Operand = 1 } } }; @@ -69,14 +115,25 @@ unsafe static public VirtualMachine CreateVirtualMachine(int loopCount) } nativePointers.Add(nativePointer); } - - return new VirtualMachine(unmanagedCodes, () => + var newTuple = typeof(Tuple).GetConstructor(new []{typeof(int), typeof(int)}); + var newM = typeof(List).GetMethod("get_Count", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + var externMethods = new MethodBase[3]; + externMethods[0] = typeof(SimpleVirtualMachineBuilder).GetMethod("GetValue"); + externMethods[1] = newTuple; + externMethods[2] = newM; + + var ret = new VirtualMachine(unmanagedCodes, () => { for (int i = 0; i < nativePointers.Count; i++) { System.Runtime.InteropServices.Marshal.FreeHGlobal(nativePointers[i]); } - }); + }) + { + ExternMethods = externMethods, + }; + + return ret; } } } diff --git a/Source/VSProj/Src/Core/ObjectClone.cs b/Source/VSProj/Src/Core/ObjectClone.cs index 76d193b..86431ab 100644 --- a/Source/VSProj/Src/Core/ObjectClone.cs +++ b/Source/VSProj/Src/Core/ObjectClone.cs @@ -11,13 +11,13 @@ namespace IFix.Core using System; using System.Linq.Expressions; - public class ObjectClone + public static class ObjectClone { - MethodInfo memberwiseClone; + static MethodInfo memberwiseClone; //Func ptrToMemberwiseClone; //FieldInfo target; - //Func cloneFunc; - public ObjectClone() + static Func cloneFunc; + static ObjectClone() { memberwiseClone = typeof(object).GetMethod("MemberwiseClone", BindingFlags.Instance | BindingFlags.NonPublic); @@ -28,16 +28,16 @@ public ObjectClone() // | BindingFlags.NonPublic); //var p = Expression.Parameter(typeof(object), "obj"); //var mce = Expression.Call(p, methodInfo); - //cloneFunc = Expression.Lambda>(mce, p).Compile();//TODO: 需要用到jit么? + cloneFunc = (Func)Delegate.CreateDelegate(typeof(Func), memberwiseClone); //Expression.Lambda>(mce, p).Compile();//TODO: 需要用到jit么? } - public object Clone(object obj) + public static object Clone(object obj) { - return memberwiseClone.Invoke(obj, null);//1.79s + //return memberwiseClone.Invoke(obj, null);//1.79s //target.SetValue(ptrToMemberwiseClone, obj); //return ptrToMemberwiseClone();//1.17s //return ((Func)Delegate.CreateDelegate(typeof(Func), obj, memberwiseClone))();//3.05s - //return cloneFunc(obj);//0.06s + return cloneFunc(obj);//0.06s } } } \ No newline at end of file diff --git a/Source/VSProj/Src/Core/ReflectionMethodInvoker.cs b/Source/VSProj/Src/Core/ReflectionMethodInvoker.cs index b730435..836c8b8 100644 --- a/Source/VSProj/Src/Core/ReflectionMethodInvoker.cs +++ b/Source/VSProj/Src/Core/ReflectionMethodInvoker.cs @@ -13,7 +13,6 @@ namespace IFix.Core internal class ReflectionMethodInvoker { int paramCount; - bool hasThis; bool hasReturn; @@ -24,7 +23,7 @@ internal class ReflectionMethodInvoker Type[] rawTypes; - //object[] args; + object[] args; MethodBase method; @@ -43,7 +42,7 @@ public ReflectionMethodInvoker(MethodBase method) refFlags = new bool[paramCount]; outFlags = new bool[paramCount]; rawTypes = new Type[paramCount]; - //args = new object[paramCount]; + args = new object[paramCount]; for (int i = 0; i < paramerInfos.Length; i++) { @@ -84,7 +83,6 @@ public unsafe void Invoke(VirtualMachine virtualMachine, ref Call call, bool isI { var managedStack = call.managedStack; var pushResult = false; - var args = new object[paramCount]; try { //virtualMachine._Info("method: " + method); @@ -161,9 +159,9 @@ public unsafe void Invoke(VirtualMachine virtualMachine, ref Call call, bool isI else if (isNullableGetValueOrDefault) { if(instance == null) - { - if(paramCount == 0) - ret = System.Activator.CreateInstance(returnType); + { + if (paramCount == 0) + ret = EvaluationStackOperation.CreateBoxValue(returnType); else ret = args[0]; } @@ -183,6 +181,8 @@ public unsafe void Invoke(VirtualMachine virtualMachine, ref Call call, bool isI ret = method.Invoke(instance, args); } } + + EvaluationStackOperation.RecycleObject(instance); } for (int i = 0; i < paramCount; i++) @@ -239,10 +239,11 @@ public unsafe void Invoke(VirtualMachine virtualMachine, ref Call call, bool isI //} finally { - //for (int i = 0; i < paramCount; i++) - //{ - // args[i] = null; - //} + for (int i = 0; i < paramCount; i++) + { + EvaluationStackOperation.RecycleObject(args[i]); + args[i] = null; + } Value* pArg = call.argumentBase; if (pushResult) { @@ -250,6 +251,7 @@ public unsafe void Invoke(VirtualMachine virtualMachine, ref Call call, bool isI } for (int i = (pushResult ? 1 : 0); i < paramCount + ((hasThis && !isInstantiate) ? 1 : 0); i++) { + EvaluationStackOperation.RecycleObject(managedStack[pArg - call.evaluationStackBase]); managedStack[pArg - call.evaluationStackBase] = null; pArg++; } diff --git a/Source/VSProj/Src/Core/StackOperation.cs b/Source/VSProj/Src/Core/StackOperation.cs index 541d55c..884c67d 100644 --- a/Source/VSProj/Src/Core/StackOperation.cs +++ b/Source/VSProj/Src/Core/StackOperation.cs @@ -5,6 +5,10 @@ * This file is subject to the terms and conditions defined in file 'LICENSE', which is part of this source code package. */ +using System.Text; +using Unity.Collections.LowLevel.Unsafe; +using UnityEngine; + namespace IFix.Core { using System; @@ -14,13 +18,13 @@ namespace IFix.Core using System.Collections.Generic; [StructLayout(LayoutKind.Sequential)] - unsafe struct UnmanagedStack + public unsafe struct UnmanagedStack { public Value* Base; public Value* Top; } - unsafe class ThreadStackInfo + public unsafe class ThreadStackInfo { public UnmanagedStack* UnmanagedStack; public object[] ManagedStack; @@ -85,7 +89,7 @@ internal static ThreadStackInfo Stack } } - unsafe internal static class EvaluationStackOperation + unsafe public static class EvaluationStackOperation { internal static void UnboxPrimitive(Value* evaluationStackPointer, object obj, Type type) { @@ -264,24 +268,48 @@ internal static unsafe object ToObject(Value* evaluationStackBase, Value* evalua { int i = evaluationStackPointer->Value1; if (type == typeof(int)) - return i; + { + var ret = BoxValueToObject(i); + return ret; + } else if (type == typeof(bool)) - return i == 1; + { + var ret = BoxValueToObject(i == 1); + return ret; + } else if (type == typeof(sbyte)) - return (sbyte)i; + { + var ret = BoxValueToObject((sbyte)i); + return ret; + } else if (type == typeof(byte)) - return (byte)i; + { + var ret = BoxValueToObject((byte)i); + return ret; + } else if (type == typeof(char)) - return (char)i; + { + var ret = BoxValueToObject((char)i); + return ret; + } else if (type == typeof(short)) - return (short)i; + { + var ret = BoxValueToObject((short)i); + return ret; + } else if (type == typeof(ushort)) - return (ushort)i; + { + var ret = BoxValueToObject((ushort)i); + return ret; + } else if (type == typeof(uint)) - return (uint)i; + { + var ret = BoxValueToObject((uint)i); + return ret; + } else if (type.IsEnum) { - return Enum.ToObject(type, i); + return CreateEnumValue(type, i); } else return null; @@ -291,23 +319,27 @@ internal static unsafe object ToObject(Value* evaluationStackBase, Value* evalua long l = *(long*)&evaluationStackPointer->Value1; if (type == typeof(long)) { - return l; + var ret = BoxValueToObject((long)l); + return ret; } else if (type == typeof(ulong)) { - return (ulong)l; + var ret = BoxValueToObject((ulong)l); + return ret; } else if (type == typeof(IntPtr)) { - return new IntPtr(l); + var ret = BoxValueToObject(new IntPtr(l)); + return ret; } else if (type == typeof(UIntPtr)) { - return new UIntPtr((ulong)l); + var ret = BoxValueToObject(new UIntPtr((ulong)l)); + return ret; } else if (type.IsEnum) { - return Enum.ToObject(type, l); + return CreateEnumValue(type, l); } else { @@ -318,7 +350,8 @@ internal static unsafe object ToObject(Value* evaluationStackBase, Value* evalua { if (type == typeof(float)) { - return *(float*)&evaluationStackPointer->Value1; + var ret = BoxValueToObject(*(float*)&evaluationStackPointer->Value1); + return ret; } else { @@ -329,7 +362,8 @@ internal static unsafe object ToObject(Value* evaluationStackBase, Value* evalua { if (type == typeof(double)) { - return *(double*)&evaluationStackPointer->Value1; + var ret = BoxValueToObject(*(double*)&evaluationStackPointer->Value1); + return ret; } else { @@ -341,7 +375,7 @@ internal static unsafe object ToObject(Value* evaluationStackBase, Value* evalua case ValueType.ValueType: if (valueTypeClone && managedStack[evaluationStackPointer->Value1] != null) { - return virtualMachine.objectClone.Clone(managedStack[evaluationStackPointer->Value1]); + return CloneObject(managedStack[evaluationStackPointer->Value1]); } else { @@ -414,6 +448,437 @@ internal static unsafe object ToObject(Value* evaluationStackBase, Value* evalua } } + static Dictionary> cacheDict = new Dictionary>(); + + public static unsafe object CreateBoxValue(Type t) + { + if (!UnsafeUtility.IsUnmanaged(t)) return Activator.CreateInstance(t); + + Stack cache; + lock (cacheDict) + { + if (!cacheDict.TryGetValue(t, out cache)) + { + cache = new Stack(4); + cacheDict[t] = cache; + } + } + + object result = null; + lock (cache) + { + result = cache.Count <= 0 ? Activator.CreateInstance(t) : cache.Pop(); + } + + GCHandle h = GCHandle.Alloc(result, GCHandleType.Pinned); + IntPtr ptr = h.AddrOfPinnedObject(); + + void* valuePtr = ptr.ToPointer(); + int size = UnsafeUtility.SizeOf(t); + UnsafeUtility.MemClear(valuePtr, size); + + h.Free(); + + return result; + } + + public static unsafe object CreateEnumValue(Type t, int value) + { + if (!t.IsEnum) return null; + + Stack cache; + lock (cacheDict) + { + if (!cacheDict.TryGetValue(t, out cache)) + { + cache = new Stack(4); + cacheDict[t] = cache; + } + } + + object result = null; + lock (cache) + { + result = cache.Count <= 0 ? Enum.ToObject(t, value) : cache.Pop(); + } + + ulong gcHandle; + byte* b = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(result, out gcHandle); + *(int*)(b + 16) = value; + UnsafeUtility.ReleaseGCObject(gcHandle); + + return result; + } + + public static unsafe object CreateEnumValue(Type t, long value) + { + if (!t.IsEnum) return null; + + Stack cache; + lock (cacheDict) + { + if (!cacheDict.TryGetValue(t, out cache)) + { + cache = new Stack(4); + cacheDict[t] = cache; + } + } + + object result = null; + lock (cache) + { + result = cache.Count <= 0 ? Activator.CreateInstance(t) : cache.Pop(); + } + + ulong gcHandle; + byte* b = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(result, out gcHandle); + *(long*)(b + 16) = value; + UnsafeUtility.ReleaseGCObject(gcHandle); + + return result; + } + + public static unsafe object BoxValueToObject(T value) where T : unmanaged + { + Stack cache; + lock (cacheDict) + { + if (!cacheDict.TryGetValue(typeof(T), out cache)) + { + cache = new Stack(4); + cacheDict[typeof(T)] = cache; + } + } + + object result = null; + lock (cache) + { + result = cache.Count <= 0 ? default(T) : cache.Pop(); + } + + GCHandle h = GCHandle.Alloc(result, GCHandleType.Pinned); + IntPtr ptr = h.AddrOfPinnedObject(); + + T* valuePtr = (T*)(ptr).ToPointer(); + *valuePtr = value; + + h.Free(); + + return result; + } + + public static unsafe object CloneObject(object value) + { + if (value == null) return null; + Type t = value.GetType(); + if (!t.IsValueType) return value; + + if(!UnsafeUtility.IsUnmanaged(t)) return ObjectClone.Clone(value); + + Stack cache; + lock (cacheDict) + { + if (!cacheDict.TryGetValue(t, out cache)) + { + cache = new Stack(4); + cacheDict[t] = cache; + } + } + + object result = null; + lock (cache) + { + if (cache.Count > 0) + { + result = cache.Pop(); + GCHandle h1 = GCHandle.Alloc(value, GCHandleType.Pinned); + byte* ptr1 = (byte*)h1.AddrOfPinnedObject(); + + GCHandle h2 = GCHandle.Alloc(result, GCHandleType.Pinned); + byte* ptr2 = (byte*)h2.AddrOfPinnedObject().ToPointer(); + + int size = UnsafeUtility.SizeOf(t); + UnsafeUtility.MemCpy(ptr2, ptr1, size); + + h1.Free();h2.Free(); + } + else + { + result = ObjectClone.Clone(value); + } + } + + return result; + } + + public static unsafe void UnBoxObjectToValue(object value, out T ret) where T : unmanaged + { + Stack cache; + Type t = value.GetType(); + lock (cacheDict) + { + if (!cacheDict.TryGetValue(t, out cache)) + { + cache = new Stack(4); + cacheDict[t] = cache; + } + } + + GCHandle h = GCHandle.Alloc(value, GCHandleType.Pinned); + IntPtr ptr = h.AddrOfPinnedObject(); + T* valuePtr = (T*)(ptr).ToPointer(); + lock (cache) + { + cache.Push(value); + } + + fixed (T* p = &ret) + { + *p = *valuePtr; + } + + h.Free(); + } + + public static void RecycleObject(object value) + { + if (value == null) return; + if (!UnsafeUtility.IsUnmanaged(value.GetType())) return; + + Stack cache; + Type t = value.GetType(); + if (!cacheDict.TryGetValue(t, out cache)) + { + cache = new Stack(8); + cacheDict[t] = cache; + } + + // 防止泄漏 + if (cache.Count > 32) return; + foreach (var item in cache) + { + if (item == value) return; + } + + cache.Push(value); + } + + public static string BoxObjectInfo() + { + StringBuilder sb = new StringBuilder(); + + lock (cacheDict) + { + foreach (var item in cacheDict) + { + sb.Append(item.Key.ToString()); + sb.Append(":"); + sb.AppendLine(item.Value.Count.ToString()); + } + } + + return sb.ToString(); + } + + public static void PushValueUnmanaged(Value* evaluationStackBase, Value* evaluationStackPointer, + object[] managedStack, T v) where T : unmanaged + { + var o = BoxValueToObject(v); + PushObject(evaluationStackBase, evaluationStackPointer, managedStack, o, typeof(T)); + } + + public static T GetValueUnmanaged(Value* evaluationStackBase, byte* valueStackBase, int offset = 0) where T : unmanaged + { + var ptr = evaluationStackBase + offset; + return *((T*)((long)valueStackBase + ptr->Value1)); + } + + public delegate void PushFieldHandle(byte* ptr, Value* evaluationStackBase, Value* evaluationStackPointer, object[] managedStack); + private static Dictionary PushFieldAction = new Dictionary(); + + public static void RegistPushFieldAction(Type t, PushFieldHandle a) + { + PushFieldAction.Add(t, a); + } + + public static void PushField(Value* evaluationStackBase, Value* evaluationStackPointer, + object[] managedStack, object obj, FieldInfo fieldInfo) + { + Type t = fieldInfo.FieldType; + if (UnsafeUtility.IsUnmanaged(t)) + { + ulong gcHandle; + byte* ptr = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(obj, out gcHandle); + int offset = UnsafeUtility.GetFieldOffset(fieldInfo); + if (t == typeof(bool)) + { + var v = *(bool*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(byte)) + { + var v = *(byte*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(sbyte)) + { + var v = *(sbyte*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(char)) + { + var v = *(char*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(short)) + { + var v = *(short*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(ushort)) + { + var v = *(ushort*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(int)) + { + var v = *(int*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(uint)) + { + var v = *(uint*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(long)) + { + var v = *(long*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(ulong)) + { + var v = *(ulong*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(float)) + { + var v = *(float*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(double)) + { + var v = *(double*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(IntPtr)) + { + var v = *(IntPtr*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(UIntPtr)) + { + var v = *(UIntPtr*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(Vector3)) + { + var v = *(Vector3*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(Vector2)) + { + var v = *(Vector2*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(Vector4)) + { + var v = *(Vector4*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(Rect)) + { + var v = *(Rect*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(Color)) + { + var v = *(Color*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(Color32)) + { + var v = *(Color32*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(Ray)) + { + var v = *(Ray*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t == typeof(RaycastHit)) + { + var v = *(RaycastHit*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (t.IsEnum) + { + var underlyingType = Enum.GetUnderlyingType(t); + if (underlyingType == typeof(long)) + { + var v = *(long*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (underlyingType == typeof(ulong)) + { + var v = *(ulong*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (underlyingType == typeof(int)) + { + var v = *(int*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (underlyingType == typeof(uint)) + { + var v = *(uint*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (underlyingType == typeof(short)) + { + var v = *(short*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (underlyingType == typeof(ushort)) + { + var v = *(ushort*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + else if (underlyingType == typeof(byte)) + { + var v = *(byte*)(ptr + offset); + PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + } + } + else if (PushFieldAction.TryGetValue(t, out PushFieldHandle a)) + { + var addr = ptr + offset; + a?.Invoke(addr, evaluationStackBase, evaluationStackPointer, managedStack); + } + else + { + object ret = fieldInfo.GetValue(obj); + PushObject(evaluationStackBase, evaluationStackPointer, managedStack, ret, t); + } + UnsafeUtility.ReleaseGCObject(gcHandle); + } + else + { + object ret = fieldInfo.GetValue(obj); + PushObject(evaluationStackBase, evaluationStackPointer, managedStack, ret, t); + } + + } + public static void PushObject(Value* evaluationStackBase, Value* evaluationStackPointer, object[] managedStack, object obj, Type type) { @@ -422,6 +887,7 @@ public static void PushObject(Value* evaluationStackBase, Value* evaluationStack if (type.IsPrimitive) { UnboxPrimitive(evaluationStackPointer, obj, type); + RecycleObject(obj); return; } else if (type.IsEnum) @@ -438,17 +904,96 @@ public static void PushObject(Value* evaluationStackBase, Value* evaluationStack evaluationStackPointer->Type = ValueType.Integer; evaluationStackPointer->Value1 = Convert.ToInt32(obj); } + RecycleObject(obj); return; } } int pos = (int)(evaluationStackPointer - evaluationStackBase); evaluationStackPointer->Value1 = pos; + RecycleObject(managedStack[pos]); managedStack[pos] = obj; evaluationStackPointer->Type = (obj != null && type.IsValueType) ? ValueType.ValueType : ValueType.Object; } + + public static void PushDouble(Value* evaluationStackPointer, double d) + { + evaluationStackPointer->Type = ValueType.Double; + *(double*)(&evaluationStackPointer->Value1) = d; + } + + public static void PushInt64(Value* evaluationStackPointer, Int64 obj) + { + evaluationStackPointer->Type = ValueType.Long; + *(long*)(&evaluationStackPointer->Value1) = obj; + } + + public static void PushUInt64(Value* evaluationStackPointer, UInt64 obj) + { + evaluationStackPointer->Type = ValueType.Long; + *(UInt64*)(&evaluationStackPointer->Value1) = obj; + } + + public static void PushSingle(Value* evaluationStackPointer, float f) + { + evaluationStackPointer->Type = ValueType.Float; + *(float*)(&evaluationStackPointer->Value1) = f; + } + + public static void PushInt32(Value* evaluationStackPointer, Int32 obj) + { + evaluationStackPointer->Type = ValueType.Integer; + evaluationStackPointer->Value1 = (int)obj; + } + + public static void PushIntPtr(Value* evaluationStackPointer, IntPtr i) + { + PushInt64(evaluationStackPointer, i.ToInt64()); + } + + public static void PushUIntPtr(Value* evaluationStackPointer, UIntPtr i) + { + PushUInt64(evaluationStackPointer, i.ToUInt64()); + } + + public static void PushUInt32(Value* evaluationStackPointer, UInt32 obj) + { + evaluationStackPointer->Type = ValueType.Integer; + evaluationStackPointer->Value1 = (int)obj; + } + + public static void PushInt16(Value* evaluationStackPointer, short us) + { + PushInt32(evaluationStackPointer, us); + } + + public static void PushUInt16(Value* evaluationStackPointer, ushort us) + { + PushInt32(evaluationStackPointer, us); + } + + public static void PushChar(Value* evaluationStackPointer, char c) + { + PushInt32(evaluationStackPointer, c); + } + + public static void PushSByte(Value* evaluationStackPointer, sbyte sb) + { + PushInt32(evaluationStackPointer, sb); + } + + public static void PushByte(Value* evaluationStackPointer, byte b) + { + PushInt32(evaluationStackPointer, b); + } + + public static void PushBoolean(Value* evaluationStackPointer, bool b) + { + PushInt32(evaluationStackPointer, b ? 1 : 0); + } + public static void UpdateReference(Value* evaluationStackBase, Value* evaluationStackPointer, object[] managedStack, object obj, VirtualMachine virtualMachine, Type type) //反射专用 { @@ -538,15 +1083,15 @@ public static void UpdateReference(Value* evaluationStackBase, Value* evaluation unsafe public struct Call { - internal Value* argumentBase; + public Value* argumentBase; - internal Value* evaluationStackBase; + public Value* evaluationStackBase; - internal object[] managedStack; + public object[] managedStack; - internal Value* currentTop;//用于push状态 + public Value* currentTop;//用于push状态 - internal Value** topWriteBack; + public Value** topWriteBack; public static Call Begin() { @@ -557,20 +1102,27 @@ public static Call Begin() currentTop = stack.UnmanagedStack->Top, argumentBase = stack.UnmanagedStack->Top, evaluationStackBase = stack.UnmanagedStack->Base, - topWriteBack = &(stack.UnmanagedStack->Top) + topWriteBack = &(stack.UnmanagedStack->Top), }; } - - internal static Call BeginForStack(ThreadStackInfo stack) + + public static void BeginRef(ref Call ret) { - return new Call() - { - managedStack = stack.ManagedStack, - currentTop = stack.UnmanagedStack->Top, - argumentBase = stack.UnmanagedStack->Top, - evaluationStackBase = stack.UnmanagedStack->Base, - topWriteBack = &(stack.UnmanagedStack->Top) - }; + var stack = ThreadStackInfo.Stack; + ret.managedStack = stack.ManagedStack; + ret.currentTop = stack.UnmanagedStack->Top; + ret.argumentBase = stack.UnmanagedStack->Top; + ret.evaluationStackBase = stack.UnmanagedStack->Base; + ret.topWriteBack = &(stack.UnmanagedStack->Top); + } + + public static void BeginForStack(ThreadStackInfo stack, ref Call ret) + { + ret.managedStack = stack.ManagedStack; + ret.currentTop = stack.UnmanagedStack->Top; + ret.argumentBase = stack.UnmanagedStack->Top; + ret.evaluationStackBase = stack.UnmanagedStack->Base; + ret.topWriteBack = &(stack.UnmanagedStack->Top); } public void PushBoolean(bool b) @@ -712,6 +1264,22 @@ public IntPtr GetIntPtr(int offset = 0) { return new IntPtr(GetInt64(offset)); } + + public int* GetInt32Point(int offset = 0) + { + IntPtr p = new IntPtr(GetInt64(offset)); + int* v = (int*)((byte*)p.ToPointer() + 4); + + return v; + } + + public long* GetInt64Point(int offset = 0) + { + IntPtr p = new IntPtr(GetInt64(offset)); + long* v = (long*)((byte*)p.ToPointer() + 4); + + return v; + } public void PushUIntPtr(UIntPtr i) { @@ -732,6 +1300,12 @@ public void PushObject(object o) currentTop++; } + public void PushValueUnmanaged(T v) where T : unmanaged + { + var o = EvaluationStackOperation.BoxValueToObject(v); + PushObject(o); + } + public void PushValueType(object o) { int pos = (int)(currentTop - evaluationStackBase); @@ -745,7 +1319,14 @@ public object GetObject(int offset = 0) { var ptr = argumentBase + offset; object ret = managedStack[ptr->Value1]; + + // 因为拿出去之后就被unbox掉了所以这里可以回收 + if (ptr->Type == ValueType.ValueType) + { + EvaluationStackOperation.RecycleObject(ret); + } managedStack[ptr - evaluationStackBase] = null; + return ret; } @@ -780,7 +1361,97 @@ public void PushObjectAsResult(object obj, Type type) //反射专用 EvaluationStackOperation.PushObject(evaluationStackBase, argumentBase, managedStack, obj, type); currentTop = argumentBase + 1; } + + public void PushValueUnmanagedAsResult(T v) where T : unmanaged//反射专用 + { + EvaluationStackOperation.PushValueUnmanaged(evaluationStackBase, argumentBase, managedStack, v); + currentTop = argumentBase + 1; + } + public void PushInt32AsResult(int value) + { + EvaluationStackOperation.PushInt32(argumentBase, value); + currentTop = argumentBase + 1; + } + + public void PushUInt32AsResult(uint value) + { + EvaluationStackOperation.PushUInt32(argumentBase, value); + currentTop = argumentBase + 1; + } + + public void PushUIntPtr64AsResult(UIntPtr value) + { + EvaluationStackOperation.PushUIntPtr(argumentBase, value); + currentTop = argumentBase + 1; + } + + public void PushIntPtr64AsResult(IntPtr value) + { + EvaluationStackOperation.PushIntPtr(argumentBase, value); + currentTop = argumentBase + 1; + } + + public void PushUInt64AsResult(ulong value) + { + EvaluationStackOperation.PushUInt64(argumentBase, value); + currentTop = argumentBase + 1; + } + + public void PushInt64AsResult(long value) + { + EvaluationStackOperation.PushInt64(argumentBase, value); + currentTop = argumentBase + 1; + } + + public void PushDoubleAsResult(double value) + { + EvaluationStackOperation.PushDouble(argumentBase, value); + currentTop = argumentBase + 1; + } + + public void PushSingleAsResult(float value) + { + EvaluationStackOperation.PushSingle(argumentBase, value); + currentTop = argumentBase + 1; + } + + public void PushInt16AsResult(short s) + { + EvaluationStackOperation.PushInt32(argumentBase, s); + currentTop = argumentBase + 1; + } + + public void PushUInt16AsResult(ushort us) + { + EvaluationStackOperation.PushInt32(argumentBase, us); + currentTop = argumentBase + 1; + } + + public void PushCharAsResult(char c) + { + EvaluationStackOperation.PushInt32(argumentBase, c); + currentTop = argumentBase + 1; + } + + public void PushSByteAsResult(sbyte sb) + { + EvaluationStackOperation.PushInt32(argumentBase, sb); + currentTop = argumentBase + 1; + } + + public void PushByteAsResult(byte b) + { + EvaluationStackOperation.PushInt32(argumentBase, b); + currentTop = argumentBase + 1; + } + + public void PushBooleanAsResult(bool b) + { + EvaluationStackOperation.PushBoolean(argumentBase, b); + currentTop = argumentBase + 1; + } + public void PushRef(int offset) { //Console.WriteLine("PushRef:" + offset + " address:" + new IntPtr(argumentBase + offset)); diff --git a/Source/VSProj/Src/Core/VirtualMachine.cs b/Source/VSProj/Src/Core/VirtualMachine.cs index 128099a..f1f7475 100644 --- a/Source/VSProj/Src/Core/VirtualMachine.cs +++ b/Source/VSProj/Src/Core/VirtualMachine.cs @@ -5,6 +5,8 @@ * This file is subject to the terms and conditions defined in file 'LICENSE', which is part of this source code package. */ +using System.Runtime.InteropServices; + namespace IFix.Core { using System; @@ -101,7 +103,8 @@ public unsafe void CheckInit(VirtualMachine virtualMachine, object obj) { if( MethodId >= 0 && !HasInitialize(obj) ) { - Call call = Call.BeginForStack(stack); + Call call = default; + Call.BeginForStack(stack, ref call); virtualMachine.Execute(MethodId, ref call, 0, 0); SetValue(obj, call.GetObject()); } @@ -186,8 +189,6 @@ unsafe public class VirtualMachine public const int MAX_EVALUATION_STACK_SIZE = 1024 * 10; - internal ObjectClone objectClone = new ObjectClone(); - Instruction** unmanagedCodes; ExceptionHandler[][] exceptionHandlers; @@ -341,6 +342,11 @@ public WrappersManager WrappersManager } } + public delegate bool ExternInvokersHandle(MethodBase mb, out ExternInvoker ei); + + public ExternInvokersHandle externInvokersHandle; + + internal VirtualMachine(Instruction** unmanaged_codes, Action on_dispose) { unmanagedCodes = unmanaged_codes; @@ -384,9 +390,10 @@ void store(Value* stackBase, Value* dst, Value* src, object[] managedStack) if (dst->Type >= ValueType.Object) { var obj = (dst->Type == ValueType.ValueType && managedStack[src->Value1] != null) //Nullable box后可能为空 - ? objectClone.Clone(managedStack[src->Value1]) + ? EvaluationStackOperation.CloneObject(managedStack[src->Value1]) : managedStack[src->Value1]; var dstPos = dst->Value1 = (int)(dst - stackBase); + EvaluationStackOperation.RecycleObject(managedStack[dstPos]); managedStack[dstPos] = obj; } else if (dst->Type == ValueType.ChainFieldReference) @@ -405,8 +412,10 @@ void copy(Value* stackBase, Value* dst, Value* src, object[] managedStack) { object obj = null; if (managedStack[src->Value1] != null) //Nullable box后可能为空 - obj = objectClone.Clone(managedStack[src->Value1]); + obj = EvaluationStackOperation.CloneObject(managedStack[src->Value1]); + var dstPos = dst->Value1 = (int)(dst - stackBase); + EvaluationStackOperation.RecycleObject(managedStack[dstPos]); managedStack[dstPos] = obj; } else if (dst->Type == ValueType.ChainFieldReference) @@ -897,8 +906,16 @@ public static void _Info(string a) var externInvokeFunc = externInvokers[methodId]; if (externInvokeFunc == null) { - externInvokers[methodId] = externInvokeFunc - = (new ReflectionMethodInvoker(externMethods[methodId])).Invoke; + if (externInvokersHandle != null && externInvokersHandle(externMethods[methodId], out externInvokeFunc)) + { + externInvokers[methodId] = externInvokeFunc; + } + else + { + externInvokers[methodId] = externInvokeFunc + = (new ReflectionMethodInvoker(externMethods[methodId])).Invoke; + } + } //Info("call extern: " + externMethods[methodId]); var top = evaluationStackPointer - paramCount; @@ -988,6 +1005,7 @@ public static void _Info(string a) int resultPos = argumentBase->Value1; if (resultPos != argumentPos) { + EvaluationStackOperation.RecycleObject(managedStack[argumentPos]); managedStack[argumentPos] = managedStack[resultPos]; //managedStack[resultPos] = null; } @@ -995,6 +1013,7 @@ public static void _Info(string a) } for (int i = 0; i < evaluationStackPointer - evaluationStackBase - 1; i++) { + EvaluationStackOperation.RecycleObject(managedStack[i + argumentPos + 1]); managedStack[i + argumentPos + 1] = null; } @@ -1004,6 +1023,7 @@ public static void _Info(string a) { for (int i = 0; i < evaluationStackPointer - evaluationStackBase; i++) { + EvaluationStackOperation.RecycleObject(managedStack[i + argumentPos]); managedStack[i + argumentPos] = null; } return argumentBase; @@ -1017,6 +1037,7 @@ public static void _Info(string a) store(evaluationStackBase, localBase + pc->Operand, evaluationStackPointer, managedStack); //print("+++after stloc", locs + ins.Operand); + EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer - evaluationStackBase]); managedStack[evaluationStackPointer - evaluationStackBase] = null; } break; @@ -1057,22 +1078,21 @@ public static void _Info(string a) //_Info("Ldfld:" + fieldInfo + ",obj=" + obj.GetType()); object fieldValue = null; - if(fieldInfo == null) { newFieldInfos[fieldIndex].CheckInit(this, obj); - fieldValue = newFieldInfos[fieldIndex].GetValue(obj); + EvaluationStackOperation.PushObject(evaluationStackBase, ptr, managedStack, fieldValue, fieldType); } else { - fieldValue = fieldInfo.GetValue(obj); + EvaluationStackOperation.PushField(evaluationStackBase, ptr, managedStack, obj, fieldInfo); + //fieldValue = fieldInfo.GetValue(obj); } //_Info("fieldValue:" + fieldValue); //throw new Exception("fieldValue=" + fieldValue); - EvaluationStackOperation.PushObject(evaluationStackBase, ptr, managedStack, - fieldValue, fieldType); + // EvaluationStackOperation.PushObject(evaluationStackBase, ptr, managedStack, fieldValue, fieldType); } else { @@ -1106,7 +1126,9 @@ public static void _Info(string a) transfer = managedStack[evaluationStackPointer->Value1] == null; break; } + EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer - evaluationStackBase]); managedStack[evaluationStackPointer - evaluationStackBase] = null; + if (transfer) { pc += pc->Operand; @@ -1168,7 +1190,10 @@ public static void _Info(string a) EvaluationStackOperation.UpdateReference(evaluationStackBase, ptr, managedStack, obj, this, declaringType); } + + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; + EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer - 1 - evaluationStackBase]); managedStack[evaluationStackPointer - 1 - evaluationStackBase] = null; evaluationStackPointer = ptr; } @@ -1201,6 +1226,8 @@ public static void _Info(string a) transfer = managedStack[evaluationStackPointer->Value1] != null; break; } + + EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer - evaluationStackBase]); managedStack[evaluationStackPointer - evaluationStackBase] = null; if (transfer) { @@ -1247,6 +1274,7 @@ public static void _Info(string a) case Code.Ldnull://1.203347% { var pos = (int)(evaluationStackPointer - evaluationStackBase); + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = null; evaluationStackPointer->Value1 = pos; evaluationStackPointer->Type = ValueType.Object; @@ -1360,6 +1388,7 @@ public static void _Info(string a) { var ptr = evaluationStackPointer - 1; Array arr = managedStack[ptr->Value1] as Array; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; ptr->Type = ValueType.Integer; ptr->Value1 = arr.Length; @@ -1406,7 +1435,9 @@ public static void _Info(string a) throw new ArrayTypeMismatchException(); } arr[idx] = managedStack[valPtr->Value1]; + EvaluationStackOperation.RecycleObject(managedStack[arrPtr - evaluationStackBase]); managedStack[arrPtr - evaluationStackBase] = null; //清理,如果有的话 + EvaluationStackOperation.RecycleObject(managedStack[valPtr - evaluationStackBase]); managedStack[valPtr - evaluationStackBase] = null; evaluationStackPointer = arrPtr; } @@ -1414,6 +1445,7 @@ public static void _Info(string a) case Code.Pop://0.4614846% { evaluationStackPointer--; + EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer - evaluationStackBase]); managedStack[evaluationStackPointer - evaluationStackBase] = null; ; } break; @@ -1626,43 +1658,45 @@ public static void _Info(string a) var obj = managedStack[ptr->Value1]; ptr->Type = ValueType.Object; ptr->Value1 = pos; - if (obj == null) - { - managedStack[pos] = null; - } - else - { - bool canAssign = type.IsAssignableFrom(obj.GetType()); - managedStack[pos] = canAssign - ? obj : null; - if (pc->Operand < 0 && canAssign) - { - if ((obj is AnonymousStorey) && (obj as AnonymousStorey).typeId != -(pc->Operand + 1)) - { - var fromInfo = anonymousStoreyInfos[(obj as AnonymousStorey).typeId]; - var targetInfo = anonymousStoreyInfos[-(pc->Operand + 1)]; - - if (fromInfo.Slots != null && targetInfo.Slots != null && fromInfo.Slots.Length == targetInfo.Slots.Length) - { - for (int i = 0; i < fromInfo.Slots.Length; ++i) - { - if (fromInfo.Slots[i] != targetInfo.Slots[i]) - { - canAssign = false; - break; - } - } - } - else - { - canAssign = false; - } - - if (!canAssign) - { - managedStack[pos] = null; - } - } + if (obj == null) + { + EvaluationStackOperation.RecycleObject(managedStack[pos]); + managedStack[pos] = null; + } + else + { + bool canAssign = type.IsAssignableFrom(obj.GetType()); + managedStack[pos] = canAssign + ? obj : null; + if (pc->Operand < 0 && canAssign) + { + if ((obj is AnonymousStorey) && (obj as AnonymousStorey).typeId != -(pc->Operand + 1)) + { + var fromInfo = anonymousStoreyInfos[(obj as AnonymousStorey).typeId]; + var targetInfo = anonymousStoreyInfos[-(pc->Operand + 1)]; + + if (fromInfo.Slots != null && targetInfo.Slots != null && fromInfo.Slots.Length == targetInfo.Slots.Length) + { + for (int i = 0; i < fromInfo.Slots.Length; ++i) + { + if (fromInfo.Slots[i] != targetInfo.Slots[i]) + { + canAssign = false; + break; + } + } + } + else + { + canAssign = false; + } + + if (!canAssign) + { + EvaluationStackOperation.RecycleObject(managedStack[pos]); + managedStack[pos] = null; + } + } } } } @@ -1764,6 +1798,7 @@ public static void _Info(string a) int exceptionPos = (int)(evaluationStackPointer - evaluationStackBase - 1); var exception = managedStack[(evaluationStackPointer - 1)->Value1] as Exception; + EvaluationStackOperation.RecycleObject(managedStack[exceptionPos]); managedStack[exceptionPos] = null; evaluationStackPointer--; throw exception; @@ -1850,6 +1885,8 @@ public static void _Info(string a) evaluationStackPointer - 1, managedStack, staticFieldTypes[fieldIndex], this); //_Info("store static field " + fieldIndex + " : " + staticFields[fieldIndex]); } + + EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer - 1 - evaluationStackBase]); managedStack[evaluationStackPointer - 1 - evaluationStackBase] = null; evaluationStackPointer--; } @@ -1992,6 +2029,9 @@ public static void _Info(string a) case ValueType.Integer: val = (void*)(uint)ptr->Value1; break; + case ValueType.StackReference: + val = (*(IntPtr*)(&ptr->Value1)).ToPointer(); + break; default: val = null; throwRuntimeException(new NotImplementedException("Conv_U for" + ptr->Type), true); @@ -2006,6 +2046,7 @@ public static void _Info(string a) evaluationStackPointer--; store(evaluationStackBase, argumentBase + pc->Operand, evaluationStackPointer, managedStack); + EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer - evaluationStackBase]); managedStack[evaluationStackPointer - evaluationStackBase] = null; ; } break; @@ -2022,7 +2063,9 @@ public static void _Info(string a) var lpos = (int)(lhs - evaluationStackBase); var rpos = (int)(rhs - evaluationStackBase); eq = ReferenceEquals(managedStack[lhs->Value1], managedStack[rhs->Value1]); + EvaluationStackOperation.RecycleObject(managedStack[lpos]); managedStack[lpos] = null; + EvaluationStackOperation.RecycleObject(managedStack[rpos]); managedStack[rpos] = null; } else @@ -2144,6 +2187,7 @@ public static void _Info(string a) //managedStack[ptr->Value1] = null; if (src->Type >= ValueType.Object) { + EvaluationStackOperation.RecycleObject(managedStack[src - evaluationStackBase]); managedStack[src - evaluationStackBase] = null; } evaluationStackPointer = ptr; @@ -2152,11 +2196,13 @@ public static void _Info(string a) case ValueType.ArrayReference: { var obj = managedStack[ptr->Value1]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; int idx = ptr->Value2; arraySet(obj, idx, src, managedStack, evaluationStackBase); if (src->Type >= ValueType.Object) { + EvaluationStackOperation.RecycleObject(managedStack[src - evaluationStackBase]); managedStack[src - evaluationStackBase] = null; } evaluationStackPointer = ptr; @@ -2200,6 +2246,7 @@ public static void _Info(string a) } if (src->Type >= ValueType.Object) { + EvaluationStackOperation.RecycleObject(managedStack[src - evaluationStackBase]); managedStack[src - evaluationStackBase] = null; } evaluationStackPointer = ptr; @@ -2214,13 +2261,15 @@ public static void _Info(string a) int offset = (int)(des - evaluationStackBase); des->Value1 = offset; managedStack[offset] = managedStack[src->Value1]; + EvaluationStackOperation.RecycleObject(managedStack[src - evaluationStackBase]); managedStack[src - evaluationStackBase] = null; } else if (src->Type == ValueType.ValueType) { int offset = (int)(des - evaluationStackBase); des->Value1 = offset; - managedStack[offset] = objectClone.Clone(managedStack[src->Value1]); + managedStack[offset] = EvaluationStackOperation.CloneObject(managedStack[src->Value1]); + EvaluationStackOperation.RecycleObject(managedStack[src - evaluationStackBase]); managedStack[src - evaluationStackBase] = null; } //Console.WriteLine("store to stack address:" + new IntPtr(des) @@ -2307,6 +2356,7 @@ AnonymousStorey anonyObj case ValueType.ArrayReference: { var obj = managedStack[ptr->Value1]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; int idx = ptr->Value2; arrayGet(obj, idx, ptr, managedStack, evaluationStackBase); @@ -2357,7 +2407,7 @@ AnonymousStorey anonyObj else if (src->Type == ValueType.ValueType) { managedStack[ptr - evaluationStackBase] - = objectClone.Clone(managedStack[src->Value1]); + = EvaluationStackOperation.CloneObject(managedStack[src->Value1]); ptr->Value1 = (int)(ptr - evaluationStackBase); } } @@ -2405,9 +2455,10 @@ AnonymousStorey anonyObj var ptr = evaluationStackPointer - 1; var type = externTypes[pc->Operand]; EvaluationStackOperation.UpdateReference(evaluationStackBase, ptr, managedStack, - Activator.CreateInstance(type), this, type); + EvaluationStackOperation.CreateBoxValue(type), this, type); if (ptr->Type >= ValueType.Object) { + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; } evaluationStackPointer = ptr; @@ -2437,6 +2488,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1 - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1 - 1; var obj = managedStack[ptr->Value1]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer = ptr; byte[] byteArr = obj as byte[]; @@ -2465,6 +2517,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var obj = managedStack[ptr->Value1]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Integer; @@ -2583,6 +2636,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var arr = managedStack[ptr->Value1] as int[]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Integer; @@ -2613,6 +2667,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1 - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1 - 1; var obj = managedStack[ptr->Value1]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer = ptr; int[] intArr = obj as int[]; @@ -2791,7 +2846,9 @@ AnonymousStorey anonyObj var val = EvaluationStackOperation.ToObject(evaluationStackBase, valPtr, managedStack, arr.GetType().GetElementType(), this, false); arr.SetValue(val, idx); + EvaluationStackOperation.RecycleObject(managedStack[arrPtr - evaluationStackBase]); managedStack[arrPtr - evaluationStackBase] = null; //清理,如果有的话 + EvaluationStackOperation.RecycleObject(managedStack[valPtr - evaluationStackBase]); managedStack[valPtr - evaluationStackBase] = null; evaluationStackPointer = arrPtr; } @@ -2836,6 +2893,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1 - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1 - 1; var obj = managedStack[ptr->Value1]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer = ptr; short[] shortArr = obj as short[]; @@ -2920,6 +2978,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var obj = managedStack[ptr->Value1]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Integer; @@ -3152,6 +3211,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var obj = managedStack[ptr->Value1]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Long; @@ -3225,6 +3285,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var arr = managedStack[ptr->Value1] as uint[]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Integer; @@ -3260,6 +3321,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1 - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1 - 1; var obj = managedStack[ptr->Value1]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer = ptr; long[] longArr = obj as long[]; @@ -3280,6 +3342,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var obj = managedStack[ptr->Value1]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Integer; @@ -3501,6 +3564,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1 - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1 - 1; var obj = managedStack[ptr->Value1]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer = ptr; IntPtr[] intPtrArr = obj as IntPtr[]; @@ -3523,6 +3587,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1 - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1 - 1; var arr = managedStack[ptr->Value1] as double[]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer = ptr; arr[idx] = val; @@ -3533,6 +3598,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var obj = managedStack[ptr->Value1]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Long; @@ -3634,6 +3700,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var arr = managedStack[ptr->Value1] as double[]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Double; @@ -3645,6 +3712,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var arr = managedStack[ptr->Value1] as float[]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Float; @@ -3763,6 +3831,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var obj = managedStack[ptr->Value1]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Integer; @@ -3813,6 +3882,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1 - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1 - 1; var arr = managedStack[ptr->Value1] as float[]; + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer = ptr; arr[idx] = val; @@ -3846,6 +3916,7 @@ AnonymousStorey anonyObj { var exceptionPos = (evaluationStackPointer - evaluationStackBase - 1); var exception = managedStack[(evaluationStackPointer - 1)->Value1] as Exception; + EvaluationStackOperation.RecycleObject(managedStack[exceptionPos]); managedStack[exceptionPos] = null; evaluationStackPointer--; throw exception; @@ -3923,6 +3994,7 @@ AnonymousStorey anonyObj int newPos = (int)(newEvaluationStackPointer - evaluationStackBase); for (int i = newPos; i < topPos; i++) { + EvaluationStackOperation.RecycleObject(managedStack[i]); managedStack[i] = null; } @@ -3942,6 +4014,7 @@ AnonymousStorey anonyObj int newPos = (int)(argumentBase - evaluationStackBase) - refCount; for (int i = newPos; i < topPos; i++) { + EvaluationStackOperation.RecycleObject(managedStack[i]); managedStack[i] = null; } @@ -3951,7 +4024,7 @@ AnonymousStorey anonyObj } throwExcepton = null; - throw e; + throw new Exception(e.Message + e.StackTrace); } } } diff --git a/Source/VSProj/Src/PerfTest/PerfTest.cs b/Source/VSProj/Src/PerfTest/PerfTest.cs index c54524f..2099a1d 100644 --- a/Source/VSProj/Src/PerfTest/PerfTest.cs +++ b/Source/VSProj/Src/PerfTest/PerfTest.cs @@ -9,6 +9,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Runtime.InteropServices; namespace IFix.Test { @@ -19,11 +20,11 @@ static void Base() { int LOOPS = 10000000; var virtualMachine = SimpleVirtualMachineBuilder.CreateVirtualMachine(LOOPS); - + Call call = default; for (int i = 0; i < 3; i++) { var sw = Stopwatch.StartNew(); - Call call = Call.Begin(); + Call.BeginRef(ref call); virtualMachine.Execute(1, ref call, 0); Call.End(ref call); sw.Stop(); @@ -37,22 +38,78 @@ static void Base() // return a + b; //} //原生方法通过这种方式调用虚拟机方法 - static void SafeCall() + static unsafe void SafeCall() { + IntPtr nativePointer = System.Runtime.InteropServices.Marshal.AllocHGlobal(sizeof(Value) + * VirtualMachine.MAX_EVALUATION_STACK_SIZE); + Value* evaluationStackPointer = (Value*)nativePointer.ToPointer(); + object[] managedStack = new object[VirtualMachine.MAX_EVALUATION_STACK_SIZE]; + int LOOPS = 10000000; var virtualMachine = SimpleVirtualMachineBuilder.CreateVirtualMachine(LOOPS); var sw = Stopwatch.StartNew(); + Call call = default; + int ret = 0; for (int i = 0; i < LOOPS; i++) { - Call call = Call.Begin(); + Call.BeginRef(ref call); call.PushInt32(4); call.PushInt32(6); virtualMachine.Execute(0, ref call, 2); - Call.End(ref call); - call.GetInt32(); + ret = call.GetInt32(); + } + Console.WriteLine($"SafeCall {ret}" + " : " + ((int)sw.Elapsed.TotalMilliseconds) + "ms\r\n"); + } + + + public struct Vector3 + { + + } + + public int __Gen_Wrap_1(object P0, Vector3 P1) + { + Call call = Call.Begin(); + call.PushObject(P0); + call.PushValueUnmanaged(P1); + return call.GetInt32(0); + } + + static unsafe void CallOrigin() + { + int LOOPS = 1000000; + + var sw = Stopwatch.StartNew(); + int ret = 0; + SimpleVirtualMachineBuilder sb = new SimpleVirtualMachineBuilder(); + // for (int i = 0; i < LOOPS; i++) + // { + // ret = sb.GetValue(10, 20); + // } + Console.WriteLine($"CallOrigin {ret}" + " : " + ((int)sw.Elapsed.TotalMilliseconds) + "ms\r\n"); + } + + static unsafe void SafeCallExtern() + { + int LOOPS = 1;//1000000; + SimpleVirtualMachineBuilder sb = new SimpleVirtualMachineBuilder(); + var virtualMachine = SimpleVirtualMachineBuilder.CreateVirtualMachine(LOOPS); + + var sw = Stopwatch.StartNew(); + int ret = 0; + Call call = default; + List list = new List { 12 }; + for (int i = 0; i < LOOPS; i++) + { + Call.BeginRef(ref call); + call.PushObject(sb); + call.PushObject(list); + virtualMachine.Execute(2, ref call, 3); + ret = call.GetInt32(); } - Console.WriteLine("SafeCall " + " : " + (LOOPS / (int)sw.Elapsed.TotalMilliseconds * 1000) + "\r\n"); + sw.Stop(); + Console.WriteLine($"SafeCallExtern ret:{ret} " + " : " + (sw.Elapsed.TotalMilliseconds) + "ms\r\n"); } //直接通过指针操作栈,调用add方法 @@ -63,10 +120,13 @@ unsafe static void UnsafeCall() * VirtualMachine.MAX_EVALUATION_STACK_SIZE); Value* evaluationStackPointer = (Value*)nativePointer.ToPointer(); object[] managedStack = new object[VirtualMachine.MAX_EVALUATION_STACK_SIZE]; - + byte* stackValueHandler = (byte*)Marshal.AllocHGlobal(32 * VirtualMachine.MAX_EVALUATION_STACK_SIZE).ToPointer(); + int LOOPS = 10000000; var virtualMachine = SimpleVirtualMachineBuilder.CreateVirtualMachine(LOOPS); var sw = Stopwatch.StartNew(); + + int ret = 0; for (int i = 0; i < LOOPS; i++) { evaluationStackPointer->Value1 = 10; @@ -74,17 +134,20 @@ unsafe static void UnsafeCall() (evaluationStackPointer + 1)->Value1 = 20; (evaluationStackPointer + 1)->Type = IFix.Core.ValueType.Integer; - + virtualMachine.Execute(0, evaluationStackPointer, managedStack, evaluationStackPointer, 2); + ret = evaluationStackPointer->Value1; } - Console.WriteLine("UnsafeCall " + " : " + (LOOPS / (int)sw.Elapsed.TotalMilliseconds * 1000) + "\r\n"); + Console.WriteLine($"UnsafeCall {ret}" + " : " + ((int)sw.Elapsed.TotalMilliseconds) + "ms\r\n"); System.Runtime.InteropServices.Marshal.FreeHGlobal(nativePointer); } public static void Main(string[] args) { - Base(); + CallOrigin(); + SafeCallExtern(); + //Base(); SafeCall(); UnsafeCall(); Console.Read(); diff --git a/Source/VSProj/Src/Tools/CodeTranslator.cs b/Source/VSProj/Src/Tools/CodeTranslator.cs index 104bc51..b0cc58d 100644 --- a/Source/VSProj/Src/Tools/CodeTranslator.cs +++ b/Source/VSProj/Src/Tools/CodeTranslator.cs @@ -9,8 +9,15 @@ using System.Linq; using System.Collections.Generic; using System.IO; +using System.Reflection; +using System.Runtime.InteropServices; using Mono.Cecil; using Mono.Cecil.Cil; +using FieldAttributes = Mono.Cecil.FieldAttributes; +using MethodAttributes = Mono.Cecil.MethodAttributes; +using ParameterAttributes = Mono.Cecil.ParameterAttributes; +using PropertyAttributes = Mono.Cecil.PropertyAttributes; +using TypeAttributes = Mono.Cecil.TypeAttributes; namespace IFix { @@ -2037,6 +2044,7 @@ public enum ProcessResult new Dictionary(); private MethodReference Call_PushValueType_Ref; + private MethodReference Call_PushValueUnmanaged; TypeReference wrapperParamerterType(TypeReference type) { if (type.IsByReference) @@ -2317,6 +2325,19 @@ private void EmitAsyncBuilderStartMethod(IEnumerable allTypes) itfBridgeType.Methods.Add(targetMethod); } + public static bool IsUnmanaged(TypeReference t) + { + if (!t.IsValueType) return false; + + TypeDefinition typeDef = t.Resolve(); + foreach (var f in typeDef.Fields) + { + if(f.IsStatic) continue; + if (!IsUnmanaged(f.FieldType)) return false; + } + + return true; + } /// /// 获取一个方法的适配器 @@ -2516,15 +2537,20 @@ MethodDefinition getWrapperMethod(TypeDefinition type, FieldDefinition anonObj, emitLdarg(instructions, ilProcessor, i + 1); emitLoadRef(instructions, paramRawType); MethodReference push; + if (pushMap.TryGetValue(tryGetUnderlyingType(paramRawType), out push)) { instructions.Add(Instruction.Create(OpCodes.Callvirt, push)); } else { - if (paramRawType.IsValueType) + if (IsUnmanaged(paramRawType)) { - instructions.Add(Instruction.Create(OpCodes.Callvirt, Call_PushValueType_Ref)); + var rawType = tryGetUnderlyingType(getRawType(parameterTypes[i])); + instructions.Add(Instruction.Create(OpCodes.Callvirt, + makeGenericMethod(Call_PushValueUnmanaged, rawType)) + ); + //instructions.Add(Instruction.Create(OpCodes.Callvirt, Call_PushValueType_Ref)); } else { @@ -2580,11 +2606,16 @@ MethodDefinition getWrapperMethod(TypeDefinition type, FieldDefinition anonObj, { if (paramRawType.IsValueType) { - instructions.Add(Instruction.Create(OpCodes.Box, paramRawType)); + var rawType = tryGetUnderlyingType(getRawType(parameterTypes[i])); + instructions.Add(Instruction.Create(OpCodes.Callvirt, + makeGenericMethod(Call_PushValueUnmanaged, rawType)) + ); + + //instructions.Add(Instruction.Create(OpCodes.Box, paramRawType)); //Console.WriteLine("Call_PushValueType_Ref for " + method.Name + ", pidx:" + i // + ", ptype:" + parameterTypes[i] + ", paramRawType:" + paramRawType + ",wrap:" // + wrapperMethod.Name); - instructions.Add(Instruction.Create(OpCodes.Callvirt, Call_PushValueType_Ref)); + //instructions.Add(Instruction.Create(OpCodes.Callvirt, Call_PushValueType_Ref)); } else { @@ -2762,12 +2793,12 @@ void emitLoadRef(Mono.Collections.Generic.Collection instructions, } else { - if (type.IsValueType) - { - instructions.Add(Instruction.Create(OpCodes.Ldobj, type)); - instructions.Add(Instruction.Create(OpCodes.Box, type)); - } - else + // if (type.IsValueType) + // { + // instructions.Add(Instruction.Create(OpCodes.Ldobj, type)); + // instructions.Add(Instruction.Create(OpCodes.Box, type)); + // } + // else { instructions.Add(Instruction.Create(OpCodes.Ldind_Ref)); } @@ -2907,7 +2938,10 @@ void init(AssemblyDefinition assembly, AssemblyDefinition ilfixAassembly) Call_Ref = assembly.MainModule.ImportReference(Call); Call_Begin_Ref = importMethodReference(Call, "Begin"); Call_PushRef_Ref = importMethodReference(Call, "PushRef"); + Call_PushValueType_Ref = importMethodReference(Call, "PushValueType"); + Call_PushValueUnmanaged = importMethodReference(Call, "PushValueUnmanaged"); + Call_GetAsType_Ref = importMethodReference(Call, "GetAsType"); VirtualMachine_Execute_Ref = assembly.MainModule.ImportReference( diff --git a/Source/VSProj/Src/UnitTest/VirtualMachineTest.cs b/Source/VSProj/Src/UnitTest/VirtualMachineTest.cs index 4f44926..ce568da 100644 --- a/Source/VSProj/Src/UnitTest/VirtualMachineTest.cs +++ b/Source/VSProj/Src/UnitTest/VirtualMachineTest.cs @@ -44,7 +44,7 @@ public static void Init() public void SimpleTest() { var virtualMachine = SimpleVirtualMachineBuilder.CreateVirtualMachine(1); - Call call = Call.Begin(); + Call call = Call.BeginRef(); call.PushInt32(4); call.PushInt32(6); virtualMachine.Execute(0, ref call, 2); diff --git a/Source/VSProj/ThirdParty/UnityEngine.CoreModule.dll b/Source/VSProj/ThirdParty/UnityEngine.CoreModule.dll new file mode 100644 index 0000000000000000000000000000000000000000..48ed751ba927ae6755255061568f9770217ee055 GIT binary patch literal 1180160 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

(;-4+8PkhzV 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

g-zNV~7u;G#%ei{&U@; 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 literal 0 HcmV?d00001 diff --git a/Source/VSProj/ThirdParty/UnityEngine.PhysicsModule.dll b/Source/VSProj/ThirdParty/UnityEngine.PhysicsModule.dll new file mode 100644 index 0000000000000000000000000000000000000000..7936ae830ae041d4ea9d94d0e068bf7a675272ea GIT binary patch literal 88064 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

yY%;|CcFEYmZVQH^Pl7uAJBHO{%Z*%t#5#&bM8 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 bq`&(&O9PK^cnrADT!))Q_dEFimm2tg=z(nx literal 0 HcmV?d00001 diff --git a/Source/VSProj/build_for_unity.bat b/Source/VSProj/build_for_unity.bat index d0ee967..76cd0b6 100644 --- a/Source/VSProj/build_for_unity.bat +++ b/Source/VSProj/build_for_unity.bat @@ -1,26 +1,22 @@ -@set UNITY_HOME=D:\Program Files\Unity523f1 -if exist "%UNITY_HOME%\Editor\Data\Mono\bin\gmcs" ( - @set GMCS="%UNITY_HOME%\Editor\Data\Mono\bin\gmcs" -) else ( - @set GMCS="%UNITY_HOME%\Editor\Data\MonoBleedingEdge\bin\mcs.bat" -) -@set MONO="%UNITY_HOME%\Editor\Data\MonoBleedingEdge\bin\mono" +@set UNITY_HOME=D:\work\techcenter1\techcenter\X3Engine\Release\Windows\WindowsEditor +@set UNITY_HOME_LIB=D:/work/techcenter1/techcenter/X3Engine/Release/Windows/WindowsEditor/Data/MonoBleedingEdge/lib + +@set GMCS="%UNITY_HOME%\Data\MonoBleedingEdge\bin\mcs.bat" +@set CSC="%UNITY_HOME%\Data\Tools\Roslyn\csc" + +@set MONO="%UNITY_HOME%\Data\MonoBleedingEdge\bin\mono" @set DLL_OUTPUT=..\UnityProj\Assets\Plugins\IFix.Core.dll @set TOOL_KIT_PATH=..\UnityProj\IFixToolKit call %GMCS% ShuffleInstruction.cs -out:.\ShuffleInstruction.exe %MONO% ShuffleInstruction.exe Src\Core\Instruction.cs Instruction.cs -call %GMCS% -define:UNITY_IPHONE -unsafe -target:library -out:%DLL_OUTPUT% Src\Builder\*.cs Src\Version.cs Instruction.cs ^ -Src\Core\AnonymousStorey.cs ^ -Src\Core\DataDefine.cs ^ -Src\Core\GenericDelegate.cs ^ -Src\Core\Il2CppSetOptionAttribute.cs ^ -Src\Core\ObjectClone.cs ^ -Src\Core\ReflectionMethodInvoker.cs ^ -Src\Core\StackOperation.cs ^ -Src\Core\SwitchFlags.cs ^ -Src\Core\Utils.cs ^ -Src\Core\VirtualMachine.cs ^ -Src\Core\WrappersManager.cs + +call %CSC% /noconfig ^ +/reference:%UNITY_HOME_LIB%/mono/4.7.1-api/mscorlib.dll ^ +/reference:%UNITY_HOME_LIB%/mono/4.7.1-api/System.dll ^ +/reference:%UNITY_HOME_LIB%/mono/4.7.1-api/System.Core.dll ^ +/reference:%UNITY_HOME%/Data/Managed/UnityEngine/UnityEngine.CoreModule.dll ^ +/reference:%UNITY_HOME%/Data/Managed/UnityEngine/UnityEngine.PhysicsModule.dll @build_response + md %TOOL_KIT_PATH% copy /Y ThirdParty\Mono.Cecil* %TOOL_KIT_PATH% call %GMCS% -define:UNITY_IPHONE -unsafe -reference:ThirdParty\Mono.Cecil.dll,ThirdParty\Mono.Cecil.Mdb.dll,ThirdParty\Mono.Cecil.Pdb.dll -out:%TOOL_KIT_PATH%\IFix.exe -debug Instruction.cs Src\Tools\*.cs Src\Version.cs diff --git a/Source/VSProj/build_response b/Source/VSProj/build_response new file mode 100644 index 0000000..8fdd17d --- /dev/null +++ b/Source/VSProj/build_response @@ -0,0 +1,23 @@ +/target:library +/nowarn:0169 +/nowarn:0649 +/out:../UnityProj/Assets/Plugins/IFix.Core.dll +/debug:portable +/unsafe +/preferreduilang:en-US +/langversion:latest +/define:UNITY_IPHONE +Instruction.cs +Src\Builder\*.cs +Src\Version.cs +Src\Core\AnonymousStorey.cs +Src\Core\DataDefine.cs +Src\Core\GenericDelegate.cs +Src\Core\Il2CppSetOptionAttribute.cs +Src\Core\ObjectClone.cs +Src\Core\ReflectionMethodInvoker.cs +Src\Core\StackOperation.cs +Src\Core\SwitchFlags.cs +Src\Core\Utils.cs +Src\Core\VirtualMachine.cs +Src\Core\WrappersManager.cs \ No newline at end of file diff --git a/Source/VSProj/vs2013/IFix.Core.csproj b/Source/VSProj/vs2013/IFix.Core.csproj index 261a7ab..a5a7360 100644 --- a/Source/VSProj/vs2013/IFix.Core.csproj +++ b/Source/VSProj/vs2013/IFix.Core.csproj @@ -9,7 +9,7 @@ Properties IFix.Core IFix.Core - v3.5 + v4.5 512 @@ -40,6 +40,12 @@ + + ..\ThirdParty\UnityEngine.CoreModule.dll + + + ..\ThirdParty\UnityEngine.PhysicsModule.dll + diff --git a/Source/VSProj/vs2013/IFix.PerfTest.csproj b/Source/VSProj/vs2013/IFix.PerfTest.csproj index aae3043..0943d0d 100644 --- a/Source/VSProj/vs2013/IFix.PerfTest.csproj +++ b/Source/VSProj/vs2013/IFix.PerfTest.csproj @@ -9,7 +9,7 @@ Properties IFix.PerfTest IFix.PerfTest - v3.5 + v4.5 512 From dec7c74d2de2bacc7e6d97d9c9fcc2430b26e0d1 Mon Sep 17 00:00:00 2001 From: ale Date: Thu, 25 Apr 2024 14:14:10 +0800 Subject: [PATCH 04/15] =?UTF-8?q?=E7=BB=A7=E7=BB=AD=E9=99=8D=E4=BD=8E=20in?= =?UTF-8?q?jectfix=E7=9A=84GC=EF=BC=8C=E5=8A=A0=E5=BF=ABinjectfix=20bindin?= =?UTF-8?q?g=E7=9A=84=E5=90=AF=E5=8A=A8=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets/IFix/Editor/ILFixCodeGen.cs | 219 +++-- .../Assets/IFix/Editor/ILFixEditor.cs | 66 +- Source/UnityProj/Assets/IFix/TypeNameUtils.cs | 31 +- Source/VSProj/Src/Core/Instruction.cs | 369 ++++---- Source/VSProj/Src/Core/StackOperation.cs | 882 ++++++++---------- Source/VSProj/Src/Core/VirtualMachine.cs | 53 +- Source/VSProj/Src/Tools/CodeTranslator.cs | 35 +- Source/VSProj/build_for_unity.bat | 30 +- Source/VSProj/vs2013/IFix.Core.csproj | 5 +- Source/VSProj/vs2013/IFix.csproj | 2 +- 10 files changed, 883 insertions(+), 809 deletions(-) diff --git a/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs b/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs index f742d36..b91a181 100644 --- a/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs +++ b/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs @@ -2,20 +2,17 @@ using System.Collections.Generic; using System.IO; using System.Reflection; -using System.Runtime.InteropServices; using System.Text; using System.Text.RegularExpressions; using IFix.Utils; using Unity.Collections.LowLevel.Unsafe; using UnityEngine; -using UnityEngine.UI; namespace IFix.Editor { public class ILFixCodeGen { #region static - public Dictionary> delegateDict = new Dictionary>(); public Dictionary> ctorCache = new Dictionary>(); public void ClearMethod() @@ -28,6 +25,31 @@ public bool TryGetDelegateStr(MethodInfo mi, out string ret) { bool result = true; var key = TypeNameUtils.GetUniqueMethodName(mi); + + if (string.IsNullOrEmpty(key)) + { + ret = ""; + return true; + } + + if (key.Contains("!")) + { + ret = ""; + return true; + } + + if(key.Contains(">d__")) + { + ret = ""; + return true; + } + + if (key.Contains("<>")) + { + ret = ""; + return true; + } + if (!delegateDict.ContainsKey(key)) { result = false; @@ -70,7 +92,7 @@ public string MethodInfoToDelegate(MethodBase method) ? (method as MethodInfo).ReturnType : (method as ConstructorInfo).ReflectedType; - return string.Format("delegate {0} IFixCallDel{2}({1});", TypeNameUtils.SimpleType(retType), parameterTypeNames, methodCount); + return string.Format("public delegate {0} IFixCallDel{2}({1});", TypeNameUtils.SimpleType(retType), parameterTypeNames, methodCount); } #endregion @@ -256,7 +278,9 @@ string FuncGetArg(ParameterInfo p) { return "call.GetUIntPtr"; } - + + if (t.IsGenericParameter) return ""; + if (t.IsEnum) { var underlyingType = Enum.GetUnderlyingType(t); @@ -361,11 +385,12 @@ string FuncPushResult(Type t) { return "call.PushIntPtr64AsResult((IntPtr)result);"; } - else if(UnsafeUtility.IsUnmanaged(t)) + else if(UnsafeUtility.IsUnmanaged(t) + && Nullable.GetUnderlyingType(t) == null ) { return "call.PushValueUnmanagedAsResult(result);"; } - return "call.PushObjectAsResult(result, result.GetType());"; + return $"call.PushObjectAsResult(result, typeof({TypeNameUtils.SimpleType(t)}));"; } @@ -394,6 +419,15 @@ void Write(StreamWriter file, string fmt, params object[] args) if (fmt.EndsWith("{")) indent++; } + StreamWriter BeginNewPart() + { + string bindingFile = path + "IFixBindingCaller.New.cs"; + + StreamWriter file = new StreamWriter(bindingFile, false, Encoding.UTF8); + file.NewLine = NewLine; + return file; + } + private void WriteHead(StreamWriter file) { Write(file, "using System;"); @@ -409,42 +443,97 @@ private void WriteHead(StreamWriter file) Write(file, "namespace IFix.Binding"); Write(file, "{"); - Write(file, "public unsafe class IFixBindingCaller"); + Write(file, "public unsafe partial class IFixBindingCaller"); Write(file, "{"); Write(file, "public ExternInvoker Invoke = null;"); Write(file, "private MethodBase method;"); Write(file, "private Delegate caller = null;"); + Write(file, "#if DEBUG"); + Write(file, "private string methodName;"); + Write(file, "#endif"); + Write(file, ""); + + Write(file, "void PopEvaluationStack(ref Call call, bool pushResult, int start, int end)"); + + Write(file, "{"); + Write(file, "Value* pArg = call.argumentBase;"); + Write(file, "Value* evaluationStackBase = call.evaluationStackBase;"); + Write(file, "object[] managedStack = call.managedStack;"); + + Write(file, "if (pushResult) pArg++;"); + Write(file, "for (int i = start; i < end; i++)"); + Write(file, "{"); + Write(file, "EvaluationStackOperation.RecycleObject(managedStack[pArg - evaluationStackBase]);"); + Write(file, "managedStack[pArg - evaluationStackBase] = null;"); + Write(file, "pArg++;"); + Write(file, "}"); + Write(file, "}"); } private void End(StreamWriter file) { - Write(file, "public IFixBindingCaller(MethodBase method, out bool isSuccess)"); + Write(file, "}"); + Write(file, "}"); + file.Flush(); + file.Close(); + + indent = 0; + file = BeginNewPart(); + Write(file, "namespace IFix.Binding"); Write(file, "{"); - Write(file, "this.method = method;"); - Write(file, "isSuccess = false;"); - Write(file, "object methodUniqueStr = string.Intern(TypeNameUtils.GetUniqueMethodName(method));"); - Write(file, ""); + Write(file, "using System;"); + Write(file, "using System.Reflection;"); + Write(file, "using IFix.Utils;"); + Write(file, "using System.Collections.Generic;"); + Write(file, "using IFix.Core;"); + + Write(file, "public unsafe partial class IFixBindingCaller"); + Write(file, "{"); + Write(file, "private static Dictionary> delDict = new Dictionary> {"); foreach (var item in delegateDict) { - Write(file, $"if (methodUniqueStr == \"{item.Key}\")"); - Write(file, "{"); - Write(file, $"Invoke = Invoke{item.Value.Item1};"); - Write(file, "isSuccess = true;"); - Write(file, "return;"); - Write(file, "}"); + Write(file, "[\"{0}\"] = new Tuple({1}, true),", item.Key, item.Value.Item1); } - - Write(file, ""); + foreach (var item in ctorCache) { - Write(file, $"if (methodUniqueStr == (object)\"{item.Key}\")"); - Write(file, "{"); - Write(file, $"Invoke = Invoke{item.Value.Item1};"); - Write(file, "isSuccess = true;"); - Write(file, "return;"); - Write(file, "}"); + Write(file, "[\"{0}\"] = new Tuple({1}, false),", item.Key, item.Value.Item1); } + Write(file, "};"); + + Write(file, "public IFixBindingCaller(MethodBase method, out bool isSuccess)"); + Write(file, "{"); + Write(file, "this.method = method;"); + Write(file, "isSuccess = false;"); + Write(file, "#if DEBUG"); + Write(file, "methodName = $\"{method.ReflectedType.FullName}.{method.Name}\";"); + Write(file, "#endif"); + Write(file, "string methodUniqueStr = string.Intern(TypeNameUtils.GetUniqueMethodName(method));"); + Write(file, ""); + + Write(file, $"if (methodUniqueStr == \"\")"); + Write(file, "{"); + Write(file, "isSuccess = false;"); + Write(file, "return;"); + Write(file, "}"); + + Write(file, "if (delDict.TryGetValue(methodUniqueStr, out Tuple info))"); + Write(file, "{"); + + Write(file, "var invokeMethod = typeof(IFixBindingCaller).GetMethod($\"Invoke{info.Item1}\");"); + Write(file, "Invoke = (ExternInvoker)Delegate.CreateDelegate(typeof(ExternInvoker), this, invokeMethod);"); + Write(file, "if (info.Item2)"); + Write(file, "{"); + Write(file, "var delType = Type.GetType($\"IFix.Binding.IFixBindingCaller+IFixCallDel{info.Item1}\");"); + Write(file, "caller = Delegate.CreateDelegate(delType, (MethodInfo)method);"); + Write(file, "}"); + + Write(file, "isSuccess = true;"); + Write(file, "return;"); + Write(file, "}"); + Write(file, ""); + Write(file, "}"); Write(file, "}"); @@ -458,7 +547,7 @@ void WriteTry(StreamWriter file) Write(file, "try"); Write(file, "{"); Write(file, "#if DEBUG"); - Write(file, "Profiler.BeginSample(method.Name);"); + Write(file, "Profiler.BeginSample(methodName);"); Write(file, "#endif"); } @@ -470,34 +559,25 @@ void WriteFinaly(StreamWriter file, int paramStart, int paramCount) Write(file, "#if DEBUG"); Write(file, "Profiler.EndSample();"); Write(file, "#endif"); - - Write(file, "Value* pArg = call.argumentBase;"); - Write(file, "if (pushResult) pArg++;"); - Write(file, "var managedStack = call.managedStack;"); - Write(file, $"for (int i = {paramStart}; i < {paramCount}; i++)"); - Write(file, "{"); - Write(file, "EvaluationStackOperation.RecycleObject(managedStack[pArg - call.evaluationStackBase]);"); - Write(file, "managedStack[pArg - call.evaluationStackBase] = null;"); - Write(file, "pArg++;"); - Write(file, "}"); - + Write(file, $"PopEvaluationStack(ref call, pushResult, {paramStart}, {paramCount});"); Write(file, "}"); } - private void WriteMethodCaller(MethodBase mb, StreamWriter file) + private bool WriteMethodCaller(MethodBase mb, StreamWriter file) { if (mb is MethodInfo) { string delegateStr; if (TryGetDelegateStr((MethodInfo)mb, out delegateStr)) { - return; + return false; } Write(file, delegateStr); } else if (mb is ConstructorInfo) { var cr = TypeNameUtils.GetUniqueMethodName(mb); + if (cr == "") return false; if (!ctorCache.ContainsKey(cr)) { ctorCache.Add(cr, new Tuple(methodCount, MethodInfoToDelegate(mb))); @@ -537,13 +617,15 @@ private void WriteMethodCaller(MethodBase mb, StreamWriter file) Write(file, "var a{0} = ({1}){3}({2});", n, TypeNameUtils.SimpleType(p.ParameterType) ,n, FuncGetArg(p)); } Write(file, "result = new {0}({1});", TypeNameUtils.SimpleType(mb.ReflectedType), FuncCall(mb)); - if (UnsafeUtility.IsUnmanaged(mb.ReflectedType)) + + if (UnsafeUtility.IsUnmanaged(mb.ReflectedType) + && Nullable.GetUnderlyingType(mb.ReflectedType) == null ) { Write(file, "call.PushValueUnmanagedAsResult(result);"); } else { - Write(file, "call.PushObjectAsResult(result, result.GetType());"); + Write(file, $"call.PushObjectAsResult(result, typeof({TypeNameUtils.SimpleType(mb.ReflectedType)}));"); } @@ -565,13 +647,16 @@ private void WriteMethodCaller(MethodBase mb, StreamWriter file) { var p = pars[n]; var idx = mb.IsStatic ? n : n + 1; - Write(file, "var a{0} = ({1}){3}({2});", idx, TypeNameUtils.SimpleType(p.ParameterType) , idx, FuncGetArg(p)); + if (!p.IsOut) + { + Write(file, "var a{0} = ({1}){3}({2});", idx, TypeNameUtils.SimpleType(p.ParameterType) , idx, FuncGetArg(p)); + } + else + { + Write(file, "{1} a{0};", idx, TypeNameUtils.SimpleType(p.ParameterType)); + } } - Write(file, "if (caller == null)"); - Write(file, "{"); - Write(file, "caller = Delegate.CreateDelegate(typeof(IFixCallDel{0}), (MethodInfo)method);", methodCount); - Write(file, "}"); if (mi.ReturnType != typeof(void)) { Write(file, "result = ((IFixCallDel{1})caller)({0});", FuncCall(mi), methodCount); @@ -587,14 +672,29 @@ private void WriteMethodCaller(MethodBase mb, StreamWriter file) { var p = pars[n]; var idx = mb.IsStatic ? n : n + 1; - if(p.ParameterType.IsByRef) - Write(file, "call.UpdateReference({0}, a{0}, vm, typeof({1}));", idx, TypeNameUtils.SimpleType(p.ParameterType)); + if (p.ParameterType.IsByRef) + { + Type t = p.ParameterType; + if (UnsafeUtility.IsUnmanaged(t) + && Nullable.GetUnderlyingType(t) == null) + { + Write(file, "call.UpdateReference({0}, EvaluationStackOperation.BoxValueToObject(a{0}), vm, typeof({1}));", idx, TypeNameUtils.SimpleType(p.ParameterType)); + } + else + { + Write(file, "call.UpdateReference({0}, a{0}, vm, typeof({1}));", idx, TypeNameUtils.SimpleType(p.ParameterType)); + } + + } + + } } WriteFinaly(file, paramStart, paramCount); Write(file, "}"); Write(file, ""); + return true; } #endregion @@ -619,8 +719,8 @@ public void GenAll(List mbList) for (int i = 0, imax = mbList.Count; i < imax; i++) { - WriteMethodCaller(mbList[i], file); - methodCount++; + if(WriteMethodCaller(mbList[i], file)) + methodCount++; } End(file); @@ -630,6 +730,11 @@ public void GenAll(List mbList) StreamWriter Begin() { + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + } + string bindingFile = path + "IFixBindingCaller.cs"; StreamWriter file = new StreamWriter(bindingFile, false, Encoding.UTF8); @@ -673,19 +778,9 @@ string NewLine #region member - class PropPair - { - public string get = "null"; - public string set = "null"; - public bool isInstance = true; - } - public string path; public int methodCount = 0; int indent = 0; - HashSet funcname = new HashSet(); - Dictionary propname = new Dictionary(); - Dictionary directfunc = new Dictionary(); #endregion } diff --git a/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs b/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs index e83f0ef..e678197 100644 --- a/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs +++ b/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs @@ -955,23 +955,25 @@ public static void GenBinding() //gen.Generate(typeof(string)); // search by dll caller - List initObjList = new List(); - var methods = FindAllMethod(typeof(Helloworld).Assembly, initObjList); - gen.GenAll(methods); - - } - - public bool Generate(Type t) - { - if (!t.IsGenericTypeDefinition && (t != typeof(YieldInstruction) && t != typeof(Coroutine)) - || (t.BaseType != null && t.BaseType == typeof(System.MulticastDelegate))) + List mbList = new List(); + var asses = AppDomain.CurrentDomain.GetAssemblies(); + foreach (var assembly in injectAssemblys) { + foreach (var ass in asses) + { + if (!(ass.ManifestModule is System.Reflection.Emit.ModuleBuilder) + && (ass.GetName().Name == assembly)) + { + UnityEngine.Debug.Log( string.Format("Scan {0} assembly", ass.GetName().Name)); + mbList.AddRange(FindAllMethod(ass)); + } + } } - - return false; + + gen.GenAll(mbList); } - public static List FindAllMethod(Assembly assembly, List initTypeList) + public static List FindAllMethod(Assembly assembly) { HashSet result = new HashSet(); @@ -1000,13 +1002,16 @@ public static List FindAllMethod(Assembly assembly, List initT foreach (var methodInfo in mbList) { - // if (methodInfo == null) continue; - // if(methodInfo.ReflectedType.ReflectedType == null) continue; - // if(string.IsNullOrEmpty(methodInfo.ReflectedType.Namespace)) continue; - if(methodInfo.ReflectedType.Namespace == "IFix.Core") continue; - if(methodInfo.ReflectedType.Namespace == "IFix.Binding") continue; + if (methodInfo == null) continue; + if(methodInfo.ReflectedType == null) continue; + if (!string.IsNullOrEmpty(methodInfo.ReflectedType.Namespace)) + { + if(methodInfo.ReflectedType.Namespace == "IFix.Core") continue; + if(methodInfo.ReflectedType.Namespace == "IFix.Binding") continue; + if(methodInfo.ReflectedType.Namespace.Contains("UnityEditor")) continue; + } // 输出方法的名称 - //UnityEngine.Debug.Log($"方法: {ILFixCodeGen.GetUniqueStringForMethod(methodInfo)}"); + // 获取方法体 var methodBody = methodInfo.GetMethodBody(); @@ -1041,12 +1046,13 @@ public static List FindAllMethod(Assembly assembly, List initT { // 读取调用的方法的元数据标记 int metadataToken = BitConverter.ToInt32(ilBytes, ilIndex); - ilIndex += 4; + //ilIndex += 4; // 解析元数据标记获取调用的方法信息 try { var calledMethod = methodInfo.Module.ResolveMethod(metadataToken); + //UnityEngine.Debug.Log($"find method: {calledMethod.ReflectedType.FullName}.{calledMethod.Name}"); if (!result.Contains(calledMethod)) { if (calledMethod is ConstructorInfo) @@ -1063,26 +1069,26 @@ public static List FindAllMethod(Assembly assembly, List initT } else { - result.Add(calledMethod); + // struct的instance方法很难用无GC方法创建委托,暂时不管,以后可以用 直接调用方法 + if (!calledMethod.IsStatic && calledMethod.ReflectedType.IsValueType) + { + } + else + { + result.Add(calledMethod); + } } // 输出调用的方法信息 //UnityEngine.Debug.Log($" 调用方法: {ILFixCodeGen.GetUniqueStringForMethod(calledMethod)}"); } } - catch (Exception e) + catch //(Exception e) { - UnityEngine.Debug.LogError(e); + //UnityEngine.Debug.LogError(e); } } - else if (opcode == OpCodes.Initobj) - { - int metadataToken = BitConverter.ToInt32(ilBytes, ilIndex); - ilIndex += 1; - var operandType = methodInfo.Module.ResolveType(metadataToken); - initTypeList.Add(operandType); - } // 检查是否有操作数,并根据操作码的操作数类型移动索引 switch (opcode.OperandType) diff --git a/Source/UnityProj/Assets/IFix/TypeNameUtils.cs b/Source/UnityProj/Assets/IFix/TypeNameUtils.cs index 097425c..01a917d 100644 --- a/Source/UnityProj/Assets/IFix/TypeNameUtils.cs +++ b/Source/UnityProj/Assets/IFix/TypeNameUtils.cs @@ -111,6 +111,7 @@ public static string _Name(string n) public static string GenericBaseName(Type t) { string n = t.FullName; + if (string.IsNullOrEmpty(n)) return "!"; if (n.IndexOf('[') > 0) { n = n.Substring(0, n.IndexOf('[')); @@ -121,16 +122,39 @@ public static string GenericBaseName(Type t) public static string GetUniqueMethodName(MethodBase method) { + Type retType = (method is MethodInfo) + ? (method as MethodInfo).ReturnType + : (method as ConstructorInfo).ReflectedType; + + if (!retType.IsVisible) + { + return ""; + } + + if (string.IsNullOrEmpty(retType.FullName)) return ""; + string ctor = ""; List args = new List(); var parameters = method.GetParameters(); if (!method.IsStatic && !(method is ConstructorInfo)) { + if (!method.ReflectedType.IsVisible) + { + return ""; + } args.Add( TypeNameUtils.SimpleType(method.ReflectedType)); } + else if (method is ConstructorInfo) + { + ctor = "ctor"; + } for (int i = 0, imax = parameters.Length; i /// 指令MAGIC ///

- public const ulong INSTRUCTION_FORMAT_MAGIC = 317431043901; + public const ulong INSTRUCTION_FORMAT_MAGIC = 1719456845587952638UL; /// /// 当前指令 diff --git a/Source/VSProj/Src/Core/StackOperation.cs b/Source/VSProj/Src/Core/StackOperation.cs index 884c67d..d68e2ab 100644 --- a/Source/VSProj/Src/Core/StackOperation.cs +++ b/Source/VSProj/Src/Core/StackOperation.cs @@ -84,6 +84,7 @@ internal static ThreadStackInfo Stack stack = new ThreadStackInfo(); Thread.SetData(localSlot, stack); } + return stack; } } @@ -97,6 +98,7 @@ internal static void UnboxPrimitive(Value* evaluationStackPointer, object obj, T { obj = Convert.ChangeType(obj, type); } + if (obj is int) { evaluationStackPointer->Type = ValueType.Integer; @@ -171,7 +173,8 @@ internal static void UnboxPrimitive(Value* evaluationStackPointer, object obj, T throw new NotImplementedException("Unbox a " + obj.GetType() + " to " + type); } - internal static object mGet(bool isArray, object root, int layer, int[] fieldIdList, FieldInfo[] fieldInfos, Dictionary newFieldInfos) + internal static object mGet(bool isArray, object root, int layer, int[] fieldIdList, FieldInfo[] fieldInfos, + Dictionary newFieldInfos) { //Console.WriteLine("mGet " + root); var fieldId = fieldIdList[layer]; @@ -184,8 +187,8 @@ internal static object mGet(bool isArray, object root, int layer, int[] fieldIdL else { var fieldInfo = fieldInfos[fieldId]; - - if(fieldInfo == null) + + if (fieldInfo == null) { return newFieldInfos[fieldId].GetValue(root); } @@ -197,13 +200,14 @@ internal static object mGet(bool isArray, object root, int layer, int[] fieldIdL { var fieldInfo = fieldInfos[fieldId]; - if(fieldInfo == null) + if (fieldInfo == null) { - return newFieldInfos[fieldId].GetValue(mGet(isArray, root, layer - 1, fieldIdList, fieldInfos, newFieldInfos)); + return newFieldInfos[fieldId] + .GetValue(mGet(isArray, root, layer - 1, fieldIdList, fieldInfos, newFieldInfos)); } - + //VirtualMachine._Info("before --- " + fieldInfo); - var ret = fieldInfo.GetValue(mGet(isArray, root, layer - 1, fieldIdList, fieldInfos, newFieldInfos)); + var ret = fieldInfo.GetValue(mGet(isArray, root, layer - 1, fieldIdList, fieldInfos, newFieldInfos)); //VirtualMachine._Info("after --- " + fieldInfo); return ret; } @@ -223,7 +227,7 @@ internal static void mSet(bool isArray, object root, object val, int layer, int[ { var fieldInfo = fieldInfos[fieldId]; - if(fieldInfo == null) + if (fieldInfo == null) { newFieldInfos[fieldId].SetValue(root, val); } @@ -242,7 +246,7 @@ internal static void mSet(bool isArray, object root, object val, int layer, int[ var parent = mGet(isArray, root, layer - 1, fieldIdList, fieldInfos, newFieldInfos); //VirtualMachine._Info("after get " + fieldInfo); //VirtualMachine._Info("before set " + fieldInfo); - if(fieldInfo == null) + if (fieldInfo == null) { newFieldInfos[fieldId].SetValue(parent, val); } @@ -250,6 +254,7 @@ internal static void mSet(bool isArray, object root, object val, int layer, int[ { fieldInfo.SetValue(parent, val); } + //VirtualMachine._Info("set2 " + val.GetType() + " to " + fieldInfo + " of " + parent.GetType()); //VirtualMachine._Info("after set " + fieldInfo); mSet(isArray, root, parent, layer - 1, fieldIdList, fieldInfos, newFieldInfos); @@ -265,111 +270,111 @@ internal static unsafe object ToObject(Value* evaluationStackBase, Value* evalua switch (evaluationStackPointer->Type) { case ValueType.Integer: + { + int i = evaluationStackPointer->Value1; + if (type == typeof(int)) { - int i = evaluationStackPointer->Value1; - if (type == typeof(int)) - { - var ret = BoxValueToObject(i); - return ret; - } - else if (type == typeof(bool)) - { - var ret = BoxValueToObject(i == 1); - return ret; - } - else if (type == typeof(sbyte)) - { - var ret = BoxValueToObject((sbyte)i); - return ret; - } - else if (type == typeof(byte)) - { - var ret = BoxValueToObject((byte)i); - return ret; - } - else if (type == typeof(char)) - { - var ret = BoxValueToObject((char)i); - return ret; - } - else if (type == typeof(short)) - { - var ret = BoxValueToObject((short)i); - return ret; - } - else if (type == typeof(ushort)) - { - var ret = BoxValueToObject((ushort)i); - return ret; - } - else if (type == typeof(uint)) - { - var ret = BoxValueToObject((uint)i); - return ret; - } - else if (type.IsEnum) - { - return CreateEnumValue(type, i); - } - else - return null; + var ret = BoxValueToObject(i); + return ret; + } + else if (type == typeof(bool)) + { + var ret = BoxValueToObject(i == 1); + return ret; + } + else if (type == typeof(sbyte)) + { + var ret = BoxValueToObject((sbyte)i); + return ret; + } + else if (type == typeof(byte)) + { + var ret = BoxValueToObject((byte)i); + return ret; + } + else if (type == typeof(char)) + { + var ret = BoxValueToObject((char)i); + return ret; + } + else if (type == typeof(short)) + { + var ret = BoxValueToObject((short)i); + return ret; } + else if (type == typeof(ushort)) + { + var ret = BoxValueToObject((ushort)i); + return ret; + } + else if (type == typeof(uint)) + { + var ret = BoxValueToObject((uint)i); + return ret; + } + else if (type.IsEnum) + { + return CreateEnumValue(type, i); + } + else + return null; + } case ValueType.Long: + { + long l = *(long*)&evaluationStackPointer->Value1; + if (type == typeof(long)) { - long l = *(long*)&evaluationStackPointer->Value1; - if (type == typeof(long)) - { - var ret = BoxValueToObject((long)l); - return ret; - } - else if (type == typeof(ulong)) - { - var ret = BoxValueToObject((ulong)l); - return ret; - } - else if (type == typeof(IntPtr)) - { - var ret = BoxValueToObject(new IntPtr(l)); - return ret; - } - else if (type == typeof(UIntPtr)) - { - var ret = BoxValueToObject(new UIntPtr((ulong)l)); - return ret; - } - else if (type.IsEnum) - { - return CreateEnumValue(type, l); - } - else - { - return null; - } + var ret = BoxValueToObject((long)l); + return ret; } + else if (type == typeof(ulong)) + { + var ret = BoxValueToObject((ulong)l); + return ret; + } + else if (type == typeof(IntPtr)) + { + var ret = BoxValueToObject(new IntPtr(l)); + return ret; + } + else if (type == typeof(UIntPtr)) + { + var ret = BoxValueToObject(new UIntPtr((ulong)l)); + return ret; + } + else if (type.IsEnum) + { + return CreateEnumValue(type, l); + } + else + { + return null; + } + } case ValueType.Float: + { + if (type == typeof(float)) { - if (type == typeof(float)) - { - var ret = BoxValueToObject(*(float*)&evaluationStackPointer->Value1); - return ret; - } - else - { - return null; - } + var ret = BoxValueToObject(*(float*)&evaluationStackPointer->Value1); + return ret; } + else + { + return null; + } + } case ValueType.Double: + { + if (type == typeof(double)) { - if (type == typeof(double)) - { - var ret = BoxValueToObject(*(double*)&evaluationStackPointer->Value1); - return ret; - } - else - { - return null; - } + var ret = BoxValueToObject(*(double*)&evaluationStackPointer->Value1); + return ret; } + else + { + return null; + } + } case ValueType.Object: return managedStack[evaluationStackPointer->Value1]; case ValueType.ValueType: @@ -382,77 +387,117 @@ internal static unsafe object ToObject(Value* evaluationStackBase, Value* evalua return managedStack[evaluationStackPointer->Value1]; } case ValueType.StackReference: - { - return ToObject(evaluationStackBase, (*(Value**)&evaluationStackPointer->Value1), - managedStack, type, virtualMachine, valueTypeClone); - } + { + return ToObject(evaluationStackBase, (*(Value**)&evaluationStackPointer->Value1), + managedStack, type, virtualMachine, valueTypeClone); + } case ValueType.FieldReference: case ValueType.ChainFieldReference: + { + //VirtualMachine._Info("ToObject FieldReference:" + evaluationStackPointer->Value2 + // + "," + evaluationStackPointer->Value1); + if (evaluationStackPointer->Type == ValueType.ChainFieldReference) + { + var fieldAddr = managedStack[evaluationStackPointer - evaluationStackBase] as FieldAddr; + var fieldIdList = fieldAddr.FieldIdList; + return mGet(evaluationStackPointer->Value2 != -1, + fieldAddr.Object, fieldIdList.Length - 1, + fieldIdList, virtualMachine.fieldInfos, virtualMachine.newFieldInfos); + } + else { - //VirtualMachine._Info("ToObject FieldReference:" + evaluationStackPointer->Value2 - // + "," + evaluationStackPointer->Value1); - if (evaluationStackPointer->Type == ValueType.ChainFieldReference) + if (evaluationStackPointer->Value2 >= 0) { - var fieldAddr = managedStack[evaluationStackPointer - evaluationStackBase] as FieldAddr; - var fieldIdList = fieldAddr.FieldIdList; - return mGet(evaluationStackPointer->Value2 != -1, - fieldAddr.Object, fieldIdList.Length - 1, - fieldIdList, virtualMachine.fieldInfos, virtualMachine.newFieldInfos); + var fieldInfo = virtualMachine.fieldInfos[evaluationStackPointer->Value2]; + var obj = managedStack[evaluationStackPointer->Value1]; + if (fieldInfo == null) + { + virtualMachine.newFieldInfos[evaluationStackPointer->Value2] + .CheckInit(virtualMachine, obj); + return virtualMachine.newFieldInfos[evaluationStackPointer->Value2].GetValue(obj); + } + + return fieldInfo.GetValue(obj); } else { - if (evaluationStackPointer->Value2 >= 0) - { - var fieldInfo = virtualMachine.fieldInfos[evaluationStackPointer->Value2]; - var obj = managedStack[evaluationStackPointer->Value1]; - if(fieldInfo == null) - { - virtualMachine.newFieldInfos[evaluationStackPointer->Value2].CheckInit(virtualMachine, obj); - return virtualMachine.newFieldInfos[evaluationStackPointer->Value2].GetValue(obj); - } - return fieldInfo.GetValue(obj); - } - else - { - var obj = managedStack[evaluationStackPointer->Value1] as AnonymousStorey; - return obj.Get(-(evaluationStackPointer->Value2 + 1), type, - virtualMachine, valueTypeClone); - } + var obj = managedStack[evaluationStackPointer->Value1] as AnonymousStorey; + return obj.Get(-(evaluationStackPointer->Value2 + 1), type, + virtualMachine, valueTypeClone); } } + } case ValueType.ArrayReference: var arr = managedStack[evaluationStackPointer->Value1] as Array; return arr.GetValue(evaluationStackPointer->Value2); case ValueType.StaticFieldReference: + { + var fieldIndex = evaluationStackPointer->Value1; + if (fieldIndex >= 0) { - var fieldIndex = evaluationStackPointer->Value1; - if (fieldIndex >= 0) + var fieldInfo = virtualMachine.fieldInfos[fieldIndex]; + if (fieldInfo == null) { - var fieldInfo = virtualMachine.fieldInfos[fieldIndex]; - if(fieldInfo == null) - { - virtualMachine.newFieldInfos[fieldIndex].CheckInit(virtualMachine, null); - - return virtualMachine.newFieldInfos[fieldIndex].GetValue(null); - } - return fieldInfo.GetValue(null); - } - else - { - fieldIndex = -(fieldIndex + 1); - return virtualMachine.staticFields[fieldIndex]; + virtualMachine.newFieldInfos[fieldIndex].CheckInit(virtualMachine, null); + + return virtualMachine.newFieldInfos[fieldIndex].GetValue(null); } + + return fieldInfo.GetValue(null); } + else + { + fieldIndex = -(fieldIndex + 1); + return virtualMachine.staticFields[fieldIndex]; + } + } default: throw new NotImplementedException("get obj of " + evaluationStackPointer->Type); } } static Dictionary> cacheDict = new Dictionary>(); + private static readonly int objOffset = 2 * IntPtr.Size; + + public static unsafe object CreateBoxValue(Type t, byte* source, int len) + { + if (!IsUnmanaged(t)) return Activator.CreateInstance(t); + + Stack cache; + lock (cacheDict) + { + if (!cacheDict.TryGetValue(t, out cache)) + { + cache = new Stack(4); + cacheDict[t] = cache; + } + } + + object result = null; + lock (cache) + { + if (cache.Count <= 0) + { + result = Activator.CreateInstance(t); + } + else + { + result = cache.Pop(); + } + } + + ulong gcHandle; + + byte* b = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(result, out gcHandle); + UnsafeUtility.MemCpy((void*)(b + objOffset), source, len); + UnsafeUtility.ReleaseGCObject(gcHandle); + + return result; + } public static unsafe object CreateBoxValue(Type t) { - if (!UnsafeUtility.IsUnmanaged(t)) return Activator.CreateInstance(t); + if (!IsUnmanaged(t)) return Activator.CreateInstance(t); Stack cache; lock (cacheDict) @@ -463,29 +508,34 @@ public static unsafe object CreateBoxValue(Type t) cacheDict[t] = cache; } } - + object result = null; lock (cache) { - result = cache.Count <= 0 ? Activator.CreateInstance(t) : cache.Pop(); + if (cache.Count <= 0) + { + result = Activator.CreateInstance(t); + } + else + { + result = cache.Pop(); + } } - GCHandle h = GCHandle.Alloc(result, GCHandleType.Pinned); - IntPtr ptr = h.AddrOfPinnedObject(); + // nullable + if (result == null) return result; - void* valuePtr = ptr.ToPointer(); + ulong gcHandle; + byte* p = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(result, out gcHandle); int size = UnsafeUtility.SizeOf(t); - UnsafeUtility.MemClear(valuePtr, size); - - h.Free(); + UnsafeUtility.MemClear(p+objOffset, size); + UnsafeUtility.ReleaseGCObject(gcHandle); return result; } public static unsafe object CreateEnumValue(Type t, int value) { - if (!t.IsEnum) return null; - Stack cache; lock (cacheDict) { @@ -495,7 +545,7 @@ public static unsafe object CreateEnumValue(Type t, int value) cacheDict[t] = cache; } } - + object result = null; lock (cache) { @@ -504,16 +554,14 @@ public static unsafe object CreateEnumValue(Type t, int value) ulong gcHandle; byte* b = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(result, out gcHandle); - *(int*)(b + 16) = value; + *(int*)(b + objOffset) = value; UnsafeUtility.ReleaseGCObject(gcHandle); - + return result; } - + public static unsafe object CreateEnumValue(Type t, long value) { - if (!t.IsEnum) return null; - Stack cache; lock (cacheDict) { @@ -523,23 +571,25 @@ public static unsafe object CreateEnumValue(Type t, long value) cacheDict[t] = cache; } } - + object result = null; lock (cache) { result = cache.Count <= 0 ? Activator.CreateInstance(t) : cache.Pop(); } - + ulong gcHandle; byte* b = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(result, out gcHandle); - *(long*)(b + 16) = value; + *(long*)(b + objOffset) = value; UnsafeUtility.ReleaseGCObject(gcHandle); return result; } - - public static unsafe object BoxValueToObject(T value) where T : unmanaged + + public static unsafe object BoxValueToObject(T value) where T : struct { + if (!IsUnmanaged(typeof(T))) return value; + Stack cache; lock (cacheDict) { @@ -549,20 +599,29 @@ public static unsafe object BoxValueToObject(T value) where T : unmanaged cacheDict[typeof(T)] = cache; } } - + object result = null; lock (cache) { - result = cache.Count <= 0 ? default(T) : cache.Pop(); + if (cache.Count <= 0) + { + result = value; + return result; + } + else + { + result = cache.Pop(); + } } - GCHandle h = GCHandle.Alloc(result, GCHandleType.Pinned); - IntPtr ptr = h.AddrOfPinnedObject(); + ulong gcHandle; + + byte* source = (byte*)UnsafeUtility.AddressOf(ref value); + int len = UnsafeUtility.SizeOf(typeof(T)); - T* valuePtr = (T*)(ptr).ToPointer(); - *valuePtr = value; - - h.Free(); + byte* b = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(result, out gcHandle); + UnsafeUtility.MemCpy((void*)(b + objOffset), source, len); + UnsafeUtility.ReleaseGCObject(gcHandle); return result; } @@ -572,9 +631,9 @@ public static unsafe object CloneObject(object value) if (value == null) return null; Type t = value.GetType(); if (!t.IsValueType) return value; - - if(!UnsafeUtility.IsUnmanaged(t)) return ObjectClone.Clone(value); - + + if (!IsUnmanaged(t)) return ObjectClone.Clone(value); + Stack cache; lock (cacheDict) { @@ -584,23 +643,22 @@ public static unsafe object CloneObject(object value) cacheDict[t] = cache; } } - + object result = null; lock (cache) { if (cache.Count > 0) { result = cache.Pop(); - GCHandle h1 = GCHandle.Alloc(value, GCHandleType.Pinned); - byte* ptr1 = (byte*)h1.AddrOfPinnedObject(); - - GCHandle h2 = GCHandle.Alloc(result, GCHandleType.Pinned); - byte* ptr2 = (byte*)h2.AddrOfPinnedObject().ToPointer(); - - int size = UnsafeUtility.SizeOf(t); - UnsafeUtility.MemCpy(ptr2, ptr1, size); + + int len = UnsafeUtility.SizeOf(t); + ulong gcHandle = 0; + byte* source = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(value, out gcHandle) + objOffset; + UnsafeUtility.ReleaseGCObject(gcHandle); - h1.Free();h2.Free(); + byte* b = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(result, out gcHandle); + UnsafeUtility.MemCpy((void*)(b + objOffset), source, len); + UnsafeUtility.ReleaseGCObject(gcHandle); } else { @@ -611,56 +669,41 @@ public static unsafe object CloneObject(object value) return result; } - public static unsafe void UnBoxObjectToValue(object value, out T ret) where T : unmanaged + public static void RecycleObject(object value) { - Stack cache; + if (value == null) return; Type t = value.GetType(); + if (!IsUnmanaged(t)) return; + + Stack cache; lock (cacheDict) { if (!cacheDict.TryGetValue(t, out cache)) { - cache = new Stack(4); + cache = new Stack(8); cacheDict[t] = cache; } } - - GCHandle h = GCHandle.Alloc(value, GCHandleType.Pinned); - IntPtr ptr = h.AddrOfPinnedObject(); - T* valuePtr = (T*)(ptr).ToPointer(); - lock (cache) - { - cache.Push(value); - } - fixed (T* p = &ret) - { - *p = *valuePtr; - } - - h.Free(); - } - - public static void RecycleObject(object value) - { - if (value == null) return; - if (!UnsafeUtility.IsUnmanaged(value.GetType())) return; - Stack cache; - Type t = value.GetType(); - if (!cacheDict.TryGetValue(t, out cache)) + lock (cache) { - cache = new Stack(8); - cacheDict[t] = cache; - } - - // 防止泄漏 + // 防止回收过多导致泄漏 if (cache.Count > 32) return; + + // TODO 去掉这个遍历查找 foreach (var item in cache) { - if (item == value) return; + if (item == value) + { + //UnityEngine.Debug.LogError($"{item.GetType()}:{item} recycle again"); + return; + } } cache.Push(value); + } + } public static string BoxObjectInfo() @@ -681,202 +724,81 @@ public static string BoxObjectInfo() } public static void PushValueUnmanaged(Value* evaluationStackBase, Value* evaluationStackPointer, - object[] managedStack, T v) where T : unmanaged + object[] managedStack, T v) where T : struct { var o = BoxValueToObject(v); PushObject(evaluationStackBase, evaluationStackPointer, managedStack, o, typeof(T)); } - public static T GetValueUnmanaged(Value* evaluationStackBase, byte* valueStackBase, int offset = 0) where T : unmanaged + private static Dictionary offsetCache = new Dictionary(); + + private static int GetOffsetByFieldInfo(FieldInfo f) { - var ptr = evaluationStackBase + offset; - return *((T*)((long)valueStackBase + ptr->Value1)); + if (f == null) return 0; + + int ret = 0; + lock (offsetCache) + { + if (!offsetCache.TryGetValue(f, out ret)) + { + ret = UnsafeUtility.GetFieldOffset(f); + offsetCache.Add(f, ret); + } + } + + return ret; } - public delegate void PushFieldHandle(byte* ptr, Value* evaluationStackBase, Value* evaluationStackPointer, object[] managedStack); - private static Dictionary PushFieldAction = new Dictionary(); - - public static void RegistPushFieldAction(Type t, PushFieldHandle a) + private static Dictionary unmanagedCache = new Dictionary(); + // unmanaged and not nullable + private static bool IsUnmanaged(Type t) { - PushFieldAction.Add(t, a); + if (t == null) return false; + bool ret = false; + lock (unmanagedCache) + { + if (!unmanagedCache.TryGetValue(t, out ret)) + { + ret = UnsafeUtility.IsUnmanaged(t) && !(t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>)); + unmanagedCache.Add(t, ret); + } + } + + return ret; } public static void PushField(Value* evaluationStackBase, Value* evaluationStackPointer, object[] managedStack, object obj, FieldInfo fieldInfo) { Type t = fieldInfo.FieldType; - if (UnsafeUtility.IsUnmanaged(t)) + if (IsUnmanaged(t)) { ulong gcHandle; byte* ptr = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(obj, out gcHandle); - int offset = UnsafeUtility.GetFieldOffset(fieldInfo); - if (t == typeof(bool)) - { - var v = *(bool*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(byte)) - { - var v = *(byte*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(sbyte)) - { - var v = *(sbyte*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(char)) - { - var v = *(char*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(short)) - { - var v = *(short*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(ushort)) - { - var v = *(ushort*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(int)) - { - var v = *(int*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(uint)) - { - var v = *(uint*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(long)) - { - var v = *(long*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(ulong)) - { - var v = *(ulong*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(float)) - { - var v = *(float*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(double)) - { - var v = *(double*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(IntPtr)) - { - var v = *(IntPtr*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(UIntPtr)) - { - var v = *(UIntPtr*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(Vector3)) - { - var v = *(Vector3*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(Vector2)) - { - var v = *(Vector2*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(Vector4)) - { - var v = *(Vector4*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(Rect)) - { - var v = *(Rect*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(Color)) - { - var v = *(Color*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(Color32)) - { - var v = *(Color32*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(Ray)) - { - var v = *(Ray*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t == typeof(RaycastHit)) - { - var v = *(RaycastHit*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (t.IsEnum) + int offset = GetOffsetByFieldInfo(fieldInfo); + + if (t.IsEnum) { var underlyingType = Enum.GetUnderlyingType(t); - if (underlyingType == typeof(long)) - { - var v = *(long*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (underlyingType == typeof(ulong)) - { - var v = *(ulong*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (underlyingType == typeof(int)) - { - var v = *(int*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (underlyingType == typeof(uint)) - { - var v = *(uint*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (underlyingType == typeof(short)) - { - var v = *(short*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (underlyingType == typeof(ushort)) - { - var v = *(ushort*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - else if (underlyingType == typeof(byte)) - { - var v = *(byte*)(ptr + offset); - PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); - } - } - else if (PushFieldAction.TryGetValue(t, out PushFieldHandle a)) - { - var addr = ptr + offset; - a?.Invoke(addr, evaluationStackBase, evaluationStackPointer, managedStack); + int size = UnsafeUtility.SizeOf(underlyingType); + object retV = CreateBoxValue(underlyingType, ptr + offset, size); + + PushObject(evaluationStackBase, evaluationStackPointer, managedStack, retV, underlyingType); } else { - object ret = fieldInfo.GetValue(obj); - PushObject(evaluationStackBase, evaluationStackPointer, managedStack, ret, t); + int size = UnsafeUtility.SizeOf(t); + object retV = CreateBoxValue(t, ptr + offset, size); + PushObject(evaluationStackBase, evaluationStackPointer, managedStack, retV, t); } + UnsafeUtility.ReleaseGCObject(gcHandle); } else { object ret = fieldInfo.GetValue(obj); - PushObject(evaluationStackBase, evaluationStackPointer, managedStack, ret, t); + PushObject(evaluationStackBase, evaluationStackPointer, managedStack, ret, t); } - } public static void PushObject(Value* evaluationStackBase, Value* evaluationStackPointer, @@ -893,28 +815,32 @@ public static void PushObject(Value* evaluationStackBase, Value* evaluationStack else if (type.IsEnum) { var underlyingType = Enum.GetUnderlyingType(type); + ulong gcHandle = 0; + byte* b = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(obj, out gcHandle)+ objOffset; + UnsafeUtility.ReleaseGCObject(gcHandle); + if (underlyingType == typeof(long) || underlyingType == typeof(ulong)) { evaluationStackPointer->Type = ValueType.Long; - *(long*)(&evaluationStackPointer->Value1) = underlyingType == typeof(long) ? - Convert.ToInt64(obj) : (long)Convert.ToUInt64(obj) ; + *(long*)(&evaluationStackPointer->Value1) = *(long*)b; } else { evaluationStackPointer->Type = ValueType.Integer; - evaluationStackPointer->Value1 = Convert.ToInt32(obj); + evaluationStackPointer->Value1 = *(int*)b; } + RecycleObject(obj); return; } } + int pos = (int)(evaluationStackPointer - evaluationStackBase); evaluationStackPointer->Value1 = pos; RecycleObject(managedStack[pos]); managedStack[pos] = obj; - evaluationStackPointer->Type = (obj != null && type.IsValueType) ? - ValueType.ValueType : ValueType.Object; + evaluationStackPointer->Type = (obj != null && type.IsValueType) ? ValueType.ValueType : ValueType.Object; } @@ -923,19 +849,19 @@ public static void PushDouble(Value* evaluationStackPointer, double d) evaluationStackPointer->Type = ValueType.Double; *(double*)(&evaluationStackPointer->Value1) = d; } - + public static void PushInt64(Value* evaluationStackPointer, Int64 obj) { evaluationStackPointer->Type = ValueType.Long; *(long*)(&evaluationStackPointer->Value1) = obj; } - + public static void PushUInt64(Value* evaluationStackPointer, UInt64 obj) { evaluationStackPointer->Type = ValueType.Long; *(UInt64*)(&evaluationStackPointer->Value1) = obj; } - + public static void PushSingle(Value* evaluationStackPointer, float f) { evaluationStackPointer->Type = ValueType.Float; @@ -947,28 +873,28 @@ public static void PushInt32(Value* evaluationStackPointer, Int32 obj) evaluationStackPointer->Type = ValueType.Integer; evaluationStackPointer->Value1 = (int)obj; } - + public static void PushIntPtr(Value* evaluationStackPointer, IntPtr i) { PushInt64(evaluationStackPointer, i.ToInt64()); } - + public static void PushUIntPtr(Value* evaluationStackPointer, UIntPtr i) { PushUInt64(evaluationStackPointer, i.ToUInt64()); } - + public static void PushUInt32(Value* evaluationStackPointer, UInt32 obj) { evaluationStackPointer->Type = ValueType.Integer; evaluationStackPointer->Value1 = (int)obj; } - + public static void PushInt16(Value* evaluationStackPointer, short us) { PushInt32(evaluationStackPointer, us); } - + public static void PushUInt16(Value* evaluationStackPointer, ushort us) { PushInt32(evaluationStackPointer, us); @@ -978,12 +904,12 @@ public static void PushChar(Value* evaluationStackPointer, char c) { PushInt32(evaluationStackPointer, c); } - + public static void PushSByte(Value* evaluationStackPointer, sbyte sb) { PushInt32(evaluationStackPointer, sb); } - + public static void PushByte(Value* evaluationStackPointer, byte b) { PushInt32(evaluationStackPointer, b); @@ -1011,72 +937,75 @@ public static void UpdateReference(Value* evaluationStackBase, Value* evaluation break; case ValueType.FieldReference: case ValueType.ChainFieldReference: + { + if (evaluationStackPointer->Type == ValueType.ChainFieldReference) { - if (evaluationStackPointer->Type == ValueType.ChainFieldReference) - { - var fieldAddr = managedStack[evaluationStackPointer - evaluationStackBase] as FieldAddr; - var fieldIdList = fieldAddr.FieldIdList; - //for(int i = 0; i < fieldIdList.Length; i++) - //{ - // VirtualMachine._Info("fid " + i + ": " + fieldIdList[i] + ", " - // + virtualMachine.fieldInfos[fieldIdList[i]]); - //} - mSet(evaluationStackPointer->Value2 != -1, - fieldAddr.Object, obj, fieldIdList.Length - 1, - fieldIdList, virtualMachine.fieldInfos, virtualMachine.newFieldInfos); - } - else + var fieldAddr = managedStack[evaluationStackPointer - evaluationStackBase] as FieldAddr; + var fieldIdList = fieldAddr.FieldIdList; + //for(int i = 0; i < fieldIdList.Length; i++) + //{ + // VirtualMachine._Info("fid " + i + ": " + fieldIdList[i] + ", " + // + virtualMachine.fieldInfos[fieldIdList[i]]); + //} + mSet(evaluationStackPointer->Value2 != -1, + fieldAddr.Object, obj, fieldIdList.Length - 1, + fieldIdList, virtualMachine.fieldInfos, virtualMachine.newFieldInfos); + } + else + { + if (evaluationStackPointer->Value2 >= 0) { - if (evaluationStackPointer->Value2 >= 0) + var fieldInfo = virtualMachine.fieldInfos[evaluationStackPointer->Value2]; + if (fieldInfo == null) { - - - var fieldInfo = virtualMachine.fieldInfos[evaluationStackPointer->Value2]; - if(fieldInfo == null) - { - virtualMachine.newFieldInfos[evaluationStackPointer->Value2].SetValue(managedStack[evaluationStackPointer->Value1], obj);; - } - else - { - //VirtualMachine._Info("update field: " + fieldInfo); - //VirtualMachine._Info("update field of: " + fieldInfo.DeclaringType); - //VirtualMachine._Info("update ref obj: " - // + managedStack[evaluationStackPointer->Value1]); - //VirtualMachine._Info("update ref obj idx: " + evaluationStackPointer->Value1); - fieldInfo.SetValue(managedStack[evaluationStackPointer->Value1], obj); - } + virtualMachine.newFieldInfos[evaluationStackPointer->Value2] + .SetValue(managedStack[evaluationStackPointer->Value1], obj); + ; } else { - var anonymousStorey = managedStack[evaluationStackPointer->Value1] - as AnonymousStorey; - anonymousStorey.Set(-(evaluationStackPointer->Value2 + 1), obj, type, virtualMachine); + //VirtualMachine._Info("update field: " + fieldInfo); + //VirtualMachine._Info("update field of: " + fieldInfo.DeclaringType); + //VirtualMachine._Info("update ref obj: " + // + managedStack[evaluationStackPointer->Value1]); + //VirtualMachine._Info("update ref obj idx: " + evaluationStackPointer->Value1); + fieldInfo.SetValue(managedStack[evaluationStackPointer->Value1], obj); } } - break; + else + { + var anonymousStorey = managedStack[evaluationStackPointer->Value1] + as AnonymousStorey; + anonymousStorey.Set(-(evaluationStackPointer->Value2 + 1), obj, type, virtualMachine); + } } - case ValueType.StaticFieldReference://更新完毕,直接return + + break; + } + case ValueType.StaticFieldReference: //更新完毕,直接return + { + var fieldIndex = evaluationStackPointer->Value1; + if (fieldIndex >= 0) { - var fieldIndex = evaluationStackPointer->Value1; - if (fieldIndex >= 0) + var fieldInfo = virtualMachine.fieldInfos[evaluationStackPointer->Value1]; + if (fieldInfo == null) { - var fieldInfo = virtualMachine.fieldInfos[evaluationStackPointer->Value1]; - if(fieldInfo == null) - { - virtualMachine.newFieldInfos[evaluationStackPointer->Value1].SetValue(null, obj);; - } - else - { - fieldInfo.SetValue(null, obj); - } + virtualMachine.newFieldInfos[evaluationStackPointer->Value1].SetValue(null, obj); + ; } else { - fieldIndex = -(fieldIndex + 1); - virtualMachine.staticFields[fieldIndex] = obj; + fieldInfo.SetValue(null, obj); } - break; } + else + { + fieldIndex = -(fieldIndex + 1); + virtualMachine.staticFields[fieldIndex] = obj; + } + + break; + } } } } @@ -1089,7 +1018,7 @@ unsafe public struct Call public object[] managedStack; - public Value* currentTop;//用于push状态 + public Value* currentTop; //用于push状态 public Value** topWriteBack; @@ -1105,7 +1034,7 @@ public static Call Begin() topWriteBack = &(stack.UnmanagedStack->Top), }; } - + public static void BeginRef(ref Call ret) { var stack = ThreadStackInfo.Stack; @@ -1115,7 +1044,7 @@ public static void BeginRef(ref Call ret) ret.evaluationStackBase = stack.UnmanagedStack->Base; ret.topWriteBack = &(stack.UnmanagedStack->Top); } - + public static void BeginForStack(ThreadStackInfo stack, ref Call ret) { ret.managedStack = stack.ManagedStack; @@ -1264,7 +1193,7 @@ public IntPtr GetIntPtr(int offset = 0) { return new IntPtr(GetInt64(offset)); } - + public int* GetInt32Point(int offset = 0) { IntPtr p = new IntPtr(GetInt64(offset)); @@ -1272,7 +1201,7 @@ public IntPtr GetIntPtr(int offset = 0) return v; } - + public long* GetInt64Point(int offset = 0) { IntPtr p = new IntPtr(GetInt64(offset)); @@ -1296,11 +1225,12 @@ public void PushObject(object o) int pos = (int)(currentTop - evaluationStackBase); currentTop->Type = ValueType.Object; currentTop->Value1 = pos; + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = o; currentTop++; } - public void PushValueUnmanaged(T v) where T : unmanaged + public void PushValueUnmanaged(T v) where T : struct { var o = EvaluationStackOperation.BoxValueToObject(v); PushObject(o); @@ -1311,6 +1241,7 @@ public void PushValueType(object o) int pos = (int)(currentTop - evaluationStackBase); currentTop->Type = ValueType.ValueType; currentTop->Value1 = pos; + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = o; currentTop++; } @@ -1319,14 +1250,16 @@ public object GetObject(int offset = 0) { var ptr = argumentBase + offset; object ret = managedStack[ptr->Value1]; - + // 因为拿出去之后就被unbox掉了所以这里可以回收 if (ptr->Type == ValueType.ValueType) { EvaluationStackOperation.RecycleObject(ret); } + + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; - + return ret; } @@ -1361,8 +1294,8 @@ public void PushObjectAsResult(object obj, Type type) //反射专用 EvaluationStackOperation.PushObject(evaluationStackBase, argumentBase, managedStack, obj, type); currentTop = argumentBase + 1; } - - public void PushValueUnmanagedAsResult(T v) where T : unmanaged//反射专用 + + public void PushValueUnmanagedAsResult(T v) where T : struct//反射专用 { EvaluationStackOperation.PushValueUnmanaged(evaluationStackBase, argumentBase, managedStack, v); currentTop = argumentBase + 1; @@ -1373,31 +1306,31 @@ public void PushInt32AsResult(int value) EvaluationStackOperation.PushInt32(argumentBase, value); currentTop = argumentBase + 1; } - + public void PushUInt32AsResult(uint value) { EvaluationStackOperation.PushUInt32(argumentBase, value); currentTop = argumentBase + 1; } - + public void PushUIntPtr64AsResult(UIntPtr value) { EvaluationStackOperation.PushUIntPtr(argumentBase, value); currentTop = argumentBase + 1; } - + public void PushIntPtr64AsResult(IntPtr value) { EvaluationStackOperation.PushIntPtr(argumentBase, value); currentTop = argumentBase + 1; } - + public void PushUInt64AsResult(ulong value) { EvaluationStackOperation.PushUInt64(argumentBase, value); currentTop = argumentBase + 1; } - + public void PushInt64AsResult(long value) { EvaluationStackOperation.PushInt64(argumentBase, value); @@ -1409,7 +1342,7 @@ public void PushDoubleAsResult(double value) EvaluationStackOperation.PushDouble(argumentBase, value); currentTop = argumentBase + 1; } - + public void PushSingleAsResult(float value) { EvaluationStackOperation.PushSingle(argumentBase, value); @@ -1421,7 +1354,7 @@ public void PushInt16AsResult(short s) EvaluationStackOperation.PushInt32(argumentBase, s); currentTop = argumentBase + 1; } - + public void PushUInt16AsResult(ushort us) { EvaluationStackOperation.PushInt32(argumentBase, us); @@ -1433,25 +1366,25 @@ public void PushCharAsResult(char c) EvaluationStackOperation.PushInt32(argumentBase, c); currentTop = argumentBase + 1; } - + public void PushSByteAsResult(sbyte sb) { EvaluationStackOperation.PushInt32(argumentBase, sb); currentTop = argumentBase + 1; } - + public void PushByteAsResult(byte b) { EvaluationStackOperation.PushInt32(argumentBase, b); currentTop = argumentBase + 1; } - + public void PushBooleanAsResult(bool b) { EvaluationStackOperation.PushBoolean(argumentBase, b); currentTop = argumentBase + 1; } - + public void PushRef(int offset) { //Console.WriteLine("PushRef:" + offset + " address:" + new IntPtr(argumentBase + offset)); @@ -1472,5 +1405,4 @@ public static void End(ref Call call) //ThreadStackInfo.Stack.UnmanagedStack->Top = call.argumentBase; } } - } \ No newline at end of file diff --git a/Source/VSProj/Src/Core/VirtualMachine.cs b/Source/VSProj/Src/Core/VirtualMachine.cs index f1f7475..052c507 100644 --- a/Source/VSProj/Src/Core/VirtualMachine.cs +++ b/Source/VSProj/Src/Core/VirtualMachine.cs @@ -103,7 +103,7 @@ public unsafe void CheckInit(VirtualMachine virtualMachine, object obj) { if( MethodId >= 0 && !HasInitialize(obj) ) { - Call call = default; + Call call = default(Call); Call.BeginForStack(stack, ref call); virtualMachine.Execute(MethodId, ref call, 0, 0); SetValue(obj, call.GetObject()); @@ -398,6 +398,7 @@ void store(Value* stackBase, Value* dst, Value* src, object[] managedStack) } else if (dst->Type == ValueType.ChainFieldReference) { + EvaluationStackOperation.RecycleObject(managedStack[dst - stackBase]); managedStack[dst - stackBase] = managedStack[src - stackBase]; } } @@ -420,6 +421,7 @@ void copy(Value* stackBase, Value* dst, Value* src, object[] managedStack) } else if (dst->Type == ValueType.ChainFieldReference) { + EvaluationStackOperation.RecycleObject(managedStack[dst - stackBase]); managedStack[dst - stackBase] = managedStack[src - stackBase]; } } @@ -862,6 +864,7 @@ public static void _Info(string a) var pm = evaluationStackPointer - 1; var po = pm - 1; var o = managedStack[po->Value1]; + EvaluationStackOperation.RecycleObject(managedStack[po - evaluationStackBase]); managedStack[po - evaluationStackBase] = null; Delegate del = null; if (pm->Type == ValueType.Integer) @@ -893,10 +896,12 @@ public static void _Info(string a) else { var mi = managedStack[pm->Value1] as MethodInfo; + EvaluationStackOperation.RecycleObject(managedStack[pm - evaluationStackBase]); managedStack[pm - evaluationStackBase] = null; del = Delegate.CreateDelegate(method.DeclaringType, o, mi); } po->Value1 = (int)(po - evaluationStackBase); + EvaluationStackOperation.RecycleObject(managedStack[po->Value1]); managedStack[po->Value1] = del; evaluationStackPointer = pm; break; @@ -1123,6 +1128,7 @@ public static void _Info(string a) break; case ValueType.Object: case ValueType.ValueType: + EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer->Value1]); transfer = managedStack[evaluationStackPointer->Value1] == null; break; } @@ -1171,13 +1177,16 @@ public static void _Info(string a) if(fieldInfo != null) { - fieldInfo.SetValue(obj, EvaluationStackOperation.ToObject(evaluationStackBase, - evaluationStackPointer - 1, managedStack, fieldType, this)); + object value = EvaluationStackOperation.ToObject(evaluationStackBase, + evaluationStackPointer - 1, managedStack, fieldType, this); + fieldInfo.SetValue(obj, value); + EvaluationStackOperation.RecycleObject(value); } else { - newFieldInfos[fieldIndex].SetValue(obj, EvaluationStackOperation.ToObject(evaluationStackBase, - evaluationStackPointer - 1, managedStack, fieldType, this)); + object value = EvaluationStackOperation.ToObject(evaluationStackBase, + evaluationStackPointer - 1, managedStack, fieldType, this); + newFieldInfos[fieldIndex].SetValue(obj, value); } //如果field,array元素是值类型,需要重新update回去 @@ -1475,6 +1484,7 @@ public static void _Info(string a) var type = externTypes[pc->Operand]; var ptr = evaluationStackPointer - 1; int pos = (int)(ptr - evaluationStackBase); + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = Array.CreateInstance(type, ptr->Value1); ptr->Type = ValueType.Object; ptr->Value1 = pos; @@ -1565,6 +1575,7 @@ public static void _Info(string a) int idx = (evaluationStackPointer - 1)->Value1; var arrPos = arrPtr - evaluationStackBase; var arr = managedStack[arrPtr->Value1] as object[]; + EvaluationStackOperation.RecycleObject(managedStack[arrPos] ); managedStack[arrPos] = arr[idx]; arrPtr->Value1 = (int)arrPos; evaluationStackPointer = evaluationStackPointer - 1; @@ -1582,6 +1593,7 @@ public static void _Info(string a) { var type = externTypes[pc->Operand]; var pos = (int)(ptr - evaluationStackBase); + switch (ptr->Type) { case ValueType.ValueType: @@ -1590,18 +1602,22 @@ public static void _Info(string a) case ValueType.Integer: if (type.IsEnum) { + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = Enum.ToObject(type, ptr->Value1); } else if (type == typeof(int)) { + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = ptr->Value1; } else if (type == typeof(uint)) { + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = (uint)ptr->Value1; } else { + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = Convert.ChangeType(ptr->Value1, type); } ptr->Value1 = pos; @@ -1609,35 +1625,43 @@ public static void _Info(string a) case ValueType.Long: if (type == typeof(long)) { + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = *(long*)&ptr->Value1; } else if (type == typeof(ulong)) { + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = *(ulong*)&ptr->Value1; } else if (type.IsEnum) { + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = Enum.ToObject(type, *(long*)&ptr->Value1); } else if (type == typeof(IntPtr)) { + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = new IntPtr(*(long*)&ptr->Value1); } else if (type == typeof(UIntPtr)) { + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = new UIntPtr(*(ulong*)&ptr->Value1); } else { + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = Convert.ChangeType(*(long*)&ptr->Value1, type); } ptr->Value1 = pos; break; case ValueType.Float: + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = *(float*)&ptr->Value1; ptr->Value1 = pos; break; case ValueType.Double: + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = *(double*)&ptr->Value1; ptr->Value1 = pos; break; @@ -1666,6 +1690,7 @@ public static void _Info(string a) else { bool canAssign = type.IsAssignableFrom(obj.GetType()); + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = canAssign ? obj : null; if (pc->Operand < 0 && canAssign) @@ -1873,6 +1898,7 @@ public static void _Info(string a) else { fieldInfo.SetValue(null, value); + EvaluationStackOperation.RecycleObject(value); } } else @@ -1939,6 +1965,7 @@ public static void _Info(string a) var newFieldIdList = new int[fieldIdList.Length + 1]; Array.Copy(fieldIdList, newFieldIdList, fieldIdList.Length); newFieldIdList[fieldIdList.Length] = pc->Operand; + EvaluationStackOperation.RecycleObject(managedStack[offset]); managedStack[offset] = new FieldAddr() { Object = fieldAddr.Object, @@ -1958,6 +1985,7 @@ public static void _Info(string a) Object = managedStack[ptr->Value1], FieldIdList = new int[] { ptr->Value2, pc->Operand } }; + EvaluationStackOperation.RecycleObject(managedStack[offset]); managedStack[offset] = fieldAddr; ptr->Value2 = ptr->Type == ValueType.FieldReference ? -1 : -2; } @@ -1971,6 +1999,7 @@ public static void _Info(string a) ptr->Type = ValueType.FieldReference; ptr->Value1 = (int)(ptr - evaluationStackBase); + EvaluationStackOperation.RecycleObject(managedStack[ptr->Value1]); managedStack[ptr->Value1] = obj; ptr->Value2 = pc->Operand; //_Info("sigle ref type = " + obj.GetType() + ",hc=" + obj.GetHashCode() @@ -2235,6 +2264,7 @@ public static void _Info(string a) else { fieldInfo.SetValue(null, val); + EvaluationStackOperation.RecycleObject(val); } } else @@ -2260,6 +2290,7 @@ public static void _Info(string a) { int offset = (int)(des - evaluationStackBase); des->Value1 = offset; + EvaluationStackOperation.RecycleObject(managedStack[offset]); managedStack[offset] = managedStack[src->Value1]; EvaluationStackOperation.RecycleObject(managedStack[src - evaluationStackBase]); managedStack[src - evaluationStackBase] = null; @@ -2268,6 +2299,7 @@ public static void _Info(string a) { int offset = (int)(des - evaluationStackBase); des->Value1 = offset; + EvaluationStackOperation.RecycleObject(managedStack[offset]); managedStack[offset] = EvaluationStackOperation.CloneObject(managedStack[src->Value1]); EvaluationStackOperation.RecycleObject(managedStack[src - evaluationStackBase]); managedStack[src - evaluationStackBase] = null; @@ -2401,6 +2433,7 @@ AnonymousStorey anonyObj *ptr = *src; if (src->Type == ValueType.Object) { + EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = managedStack[src->Value1]; ptr->Value1 = (int)(ptr - evaluationStackBase); } @@ -2741,6 +2774,7 @@ AnonymousStorey anonyObj var ptr = evaluationStackPointer - 1 - lastInstruction->Operand; var obj = EvaluationStackOperation.ToObject(evaluationStackBase, ptr, managedStack, type, this); var pos = (int)(ptr - evaluationStackBase); + EvaluationStackOperation.RecycleObject(managedStack[pos]); managedStack[pos] = obj; ptr->Value1 = pos; ptr->Type = ValueType.Object; @@ -2790,6 +2824,7 @@ AnonymousStorey anonyObj { evaluationStackPointer->Type = ValueType.Object; evaluationStackPointer->Value1 = (int)(evaluationStackPointer - evaluationStackBase); + EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer->Value1]); managedStack[evaluationStackPointer->Value1] = externMethods[pc->Operand]; evaluationStackPointer++; } @@ -2816,6 +2851,7 @@ AnonymousStorey anonyObj { var src = pos - 1; pos->Value1 = (int)(pos - evaluationStackBase); + EvaluationStackOperation.RecycleObject(managedStack[pos->Value1]); managedStack[pos->Value1] = managedStack[src->Value1]; } //_Info("des t:" + pos->Type + ",v:" + pos->Value1); @@ -2828,11 +2864,13 @@ AnonymousStorey anonyObj // var dsp = pos + p; //_Info("p " + p + ":" + dsp->Type + ",v:" + dsp->Value1); //} + EvaluationStackOperation.RecycleObject(managedStack[pos->Value1]); managedStack[pos->Value1] = anonymousStorey; Execute(unmanagedCodes[anonymousStoreyInfo.CtorId], pos, managedStack, evaluationStackBase, pn + 1, anonymousStoreyInfo.CtorId); pos->Type = ValueType.Object; pos->Value1 = (int)(pos - evaluationStackBase); + EvaluationStackOperation.RecycleObject(managedStack[pos->Value1]); managedStack[pos->Value1] = anonymousStorey; evaluationStackPointer = pos + 1; } @@ -3430,6 +3468,7 @@ AnonymousStorey anonyObj { ptr->Type = ValueType.Object; ptr->Value1 = (int)(ptr - evaluationStackBase); + EvaluationStackOperation.RecycleObject(managedStack[ptr->Value1]); managedStack[ptr->Value1] = externMethods[pc->Operand]; } else @@ -3469,6 +3508,7 @@ AnonymousStorey anonyObj ptr->Type = ValueType.Object; ptr->Value1 = (int)(ptr - evaluationStackBase); + EvaluationStackOperation.RecycleObject(managedStack[ptr->Value1]); managedStack[ptr->Value1] = foundMethod; } } @@ -4001,6 +4041,7 @@ AnonymousStorey anonyObj evaluationStackPointer = newEvaluationStackPointer; evaluationStackPointer->Type = ValueType.Object; evaluationStackPointer->Value1 = newPos; + EvaluationStackOperation.RecycleObject(managedStack[newPos]); managedStack[newPos] = e; evaluationStackPointer++; @@ -4020,7 +4061,7 @@ AnonymousStorey anonyObj if (topWriteBack != null) { - *topWriteBack = argumentBase - refCount; + *topWriteBack = argumentBase - refCount; } throwExcepton = null; diff --git a/Source/VSProj/Src/Tools/CodeTranslator.cs b/Source/VSProj/Src/Tools/CodeTranslator.cs index b0cc58d..fcf15d5 100644 --- a/Source/VSProj/Src/Tools/CodeTranslator.cs +++ b/Source/VSProj/Src/Tools/CodeTranslator.cs @@ -9,15 +9,8 @@ using System.Linq; using System.Collections.Generic; using System.IO; -using System.Reflection; -using System.Runtime.InteropServices; using Mono.Cecil; using Mono.Cecil.Cil; -using FieldAttributes = Mono.Cecil.FieldAttributes; -using MethodAttributes = Mono.Cecil.MethodAttributes; -using ParameterAttributes = Mono.Cecil.ParameterAttributes; -using PropertyAttributes = Mono.Cecil.PropertyAttributes; -using TypeAttributes = Mono.Cecil.TypeAttributes; namespace IFix { @@ -2325,19 +2318,6 @@ private void EmitAsyncBuilderStartMethod(IEnumerable allTypes) itfBridgeType.Methods.Add(targetMethod); } - public static bool IsUnmanaged(TypeReference t) - { - if (!t.IsValueType) return false; - - TypeDefinition typeDef = t.Resolve(); - foreach (var f in typeDef.Fields) - { - if(f.IsStatic) continue; - if (!IsUnmanaged(f.FieldType)) return false; - } - - return true; - } /// /// 获取一个方法的适配器 @@ -2537,14 +2517,13 @@ MethodDefinition getWrapperMethod(TypeDefinition type, FieldDefinition anonObj, emitLdarg(instructions, ilProcessor, i + 1); emitLoadRef(instructions, paramRawType); MethodReference push; - if (pushMap.TryGetValue(tryGetUnderlyingType(paramRawType), out push)) { instructions.Add(Instruction.Create(OpCodes.Callvirt, push)); } else { - if (IsUnmanaged(paramRawType)) + if (paramRawType.IsValueType) { var rawType = tryGetUnderlyingType(getRawType(parameterTypes[i])); instructions.Add(Instruction.Create(OpCodes.Callvirt, @@ -2793,12 +2772,12 @@ void emitLoadRef(Mono.Collections.Generic.Collection instructions, } else { - // if (type.IsValueType) - // { - // instructions.Add(Instruction.Create(OpCodes.Ldobj, type)); - // instructions.Add(Instruction.Create(OpCodes.Box, type)); - // } - // else + if (type.IsValueType) + { + instructions.Add(Instruction.Create(OpCodes.Ldobj, type)); + instructions.Add(Instruction.Create(OpCodes.Box, type)); + } + else { instructions.Add(Instruction.Create(OpCodes.Ldind_Ref)); } diff --git a/Source/VSProj/build_for_unity.bat b/Source/VSProj/build_for_unity.bat index 76cd0b6..5e969fc 100644 --- a/Source/VSProj/build_for_unity.bat +++ b/Source/VSProj/build_for_unity.bat @@ -1,22 +1,26 @@ @set UNITY_HOME=D:\work\techcenter1\techcenter\X3Engine\Release\Windows\WindowsEditor -@set UNITY_HOME_LIB=D:/work/techcenter1/techcenter/X3Engine/Release/Windows/WindowsEditor/Data/MonoBleedingEdge/lib - -@set GMCS="%UNITY_HOME%\Data\MonoBleedingEdge\bin\mcs.bat" -@set CSC="%UNITY_HOME%\Data\Tools\Roslyn\csc" - +if exist "%UNITY_HOME%\Data\Mono\bin\gmcs" ( + @set GMCS="%UNITY_HOME%\Data\Mono\bin\gmcs" +) else ( + @set GMCS="%UNITY_HOME%\Data\MonoBleedingEdge\bin\mcs.bat" +) @set MONO="%UNITY_HOME%\Data\MonoBleedingEdge\bin\mono" @set DLL_OUTPUT=..\UnityProj\Assets\Plugins\IFix.Core.dll @set TOOL_KIT_PATH=..\UnityProj\IFixToolKit call %GMCS% ShuffleInstruction.cs -out:.\ShuffleInstruction.exe %MONO% ShuffleInstruction.exe Src\Core\Instruction.cs Instruction.cs - -call %CSC% /noconfig ^ -/reference:%UNITY_HOME_LIB%/mono/4.7.1-api/mscorlib.dll ^ -/reference:%UNITY_HOME_LIB%/mono/4.7.1-api/System.dll ^ -/reference:%UNITY_HOME_LIB%/mono/4.7.1-api/System.Core.dll ^ -/reference:%UNITY_HOME%/Data/Managed/UnityEngine/UnityEngine.CoreModule.dll ^ -/reference:%UNITY_HOME%/Data/Managed/UnityEngine/UnityEngine.PhysicsModule.dll @build_response - +call %GMCS% -define:UNITY_IPHONE -unsafe -target:library -reference:%UNITY_HOME%/Data/Managed/UnityEngine/UnityEngine.CoreModule.dll -out:%DLL_OUTPUT% Src\Builder\*.cs Src\Version.cs Instruction.cs ^ +Src\Core\AnonymousStorey.cs ^ +Src\Core\DataDefine.cs ^ +Src\Core\GenericDelegate.cs ^ +Src\Core\Il2CppSetOptionAttribute.cs ^ +Src\Core\ObjectClone.cs ^ +Src\Core\ReflectionMethodInvoker.cs ^ +Src\Core\StackOperation.cs ^ +Src\Core\SwitchFlags.cs ^ +Src\Core\Utils.cs ^ +Src\Core\VirtualMachine.cs ^ +Src\Core\WrappersManager.cs md %TOOL_KIT_PATH% copy /Y ThirdParty\Mono.Cecil* %TOOL_KIT_PATH% call %GMCS% -define:UNITY_IPHONE -unsafe -reference:ThirdParty\Mono.Cecil.dll,ThirdParty\Mono.Cecil.Mdb.dll,ThirdParty\Mono.Cecil.Pdb.dll -out:%TOOL_KIT_PATH%\IFix.exe -debug Instruction.cs Src\Tools\*.cs Src\Version.cs diff --git a/Source/VSProj/vs2013/IFix.Core.csproj b/Source/VSProj/vs2013/IFix.Core.csproj index a5a7360..34ff933 100644 --- a/Source/VSProj/vs2013/IFix.Core.csproj +++ b/Source/VSProj/vs2013/IFix.Core.csproj @@ -9,7 +9,7 @@ Properties IFix.Core IFix.Core - v4.5 + v3.5 512 @@ -43,9 +43,6 @@ ..\ThirdParty\UnityEngine.CoreModule.dll - - ..\ThirdParty\UnityEngine.PhysicsModule.dll - diff --git a/Source/VSProj/vs2013/IFix.csproj b/Source/VSProj/vs2013/IFix.csproj index 090cabe..5fc83d3 100644 --- a/Source/VSProj/vs2013/IFix.csproj +++ b/Source/VSProj/vs2013/IFix.csproj @@ -9,7 +9,7 @@ Properties IFix IFix - v3.5 + v4.5 512 From d74526342b500f03ab3a0d7c6a0d781a5ebd5d39 Mon Sep 17 00:00:00 2001 From: ale Date: Thu, 25 Apr 2024 21:27:30 +0800 Subject: [PATCH 05/15] =?UTF-8?q?=E5=9B=9E=E6=94=B6=20SetValue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/VSProj/Src/Core/StackOperation.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Source/VSProj/Src/Core/StackOperation.cs b/Source/VSProj/Src/Core/StackOperation.cs index d68e2ab..da39fac 100644 --- a/Source/VSProj/Src/Core/StackOperation.cs +++ b/Source/VSProj/Src/Core/StackOperation.cs @@ -236,6 +236,7 @@ internal static void mSet(bool isArray, object root, object val, int layer, int[ //VirtualMachine._Info("set1 " + val.GetType() + " to " + fieldInfo + " of " + root.GetType() // + ", root.hc = " + root.GetHashCode()); fieldInfo.SetValue(root, val); + EvaluationStackOperation.RecycleObject(val); } } } @@ -253,6 +254,7 @@ internal static void mSet(bool isArray, object root, object val, int layer, int[ else { fieldInfo.SetValue(parent, val); + EvaluationStackOperation.RecycleObject(val); } //VirtualMachine._Info("set2 " + val.GetType() + " to " + fieldInfo + " of " + parent.GetType()); @@ -970,6 +972,7 @@ public static void UpdateReference(Value* evaluationStackBase, Value* evaluation // + managedStack[evaluationStackPointer->Value1]); //VirtualMachine._Info("update ref obj idx: " + evaluationStackPointer->Value1); fieldInfo.SetValue(managedStack[evaluationStackPointer->Value1], obj); + EvaluationStackOperation.RecycleObject(obj); } } else @@ -996,6 +999,7 @@ public static void UpdateReference(Value* evaluationStackBase, Value* evaluation else { fieldInfo.SetValue(null, obj); + EvaluationStackOperation.RecycleObject(obj); } } else From 82eaa4bc12c5e190561fd3b19ed6d20e35edd479 Mon Sep 17 00:00:00 2001 From: ale <345036769@qq.com> Date: Thu, 25 Jul 2024 22:17:20 +0800 Subject: [PATCH 06/15] =?UTF-8?q?=E6=8F=90=E5=8D=87=20=E5=8F=8D=E5=B0=84?= =?UTF-8?q?=E8=B0=83=E7=94=A8=E7=9A=84=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Source/UnityProj/Assets/Helloworld/Calc.cs | 53 +- .../UnityProj/Assets/Helloworld/Helloworld.cs | 183 +++---- .../Assets/Helloworld/Helloworld.unity | 231 +++++++- .../Assets/IFix/Editor/ILFixCodeGen.cs | 407 ++++++-------- .../Assets/IFix/Editor/ILFixEditor.cs | 5 +- Source/UnityProj/Assets/IFix/TypeNameUtils.cs | 30 +- Source/VSProj/Src/Core/BoxUtils.cs | 462 ++++++++++++++++ Source/VSProj/Src/Core/GenericDelegate.cs | 6 +- .../Src/Core/ReflectionMethodInvoker.cs | 167 +++--- Source/VSProj/Src/Core/StackOperation.cs | 514 ++++-------------- Source/VSProj/Src/Core/VirtualMachine.cs | 244 +++++---- .../ThirdParty/UnityEngine.CoreModule.dll | Bin 1180160 -> 1195008 bytes .../ThirdParty/UnityEngine.PhysicsModule.dll | Bin 88064 -> 0 bytes Source/VSProj/build_for_unity.bat | 34 +- Source/VSProj/build_response | 1 + Source/VSProj/vs2013/IFix.Core.csproj | 3 + 16 files changed, 1339 insertions(+), 1001 deletions(-) create mode 100644 Source/VSProj/Src/Core/BoxUtils.cs delete mode 100644 Source/VSProj/ThirdParty/UnityEngine.PhysicsModule.dll diff --git a/Source/UnityProj/Assets/Helloworld/Calc.cs b/Source/UnityProj/Assets/Helloworld/Calc.cs index 431ebb3..c0cc78b 100644 --- a/Source/UnityProj/Assets/Helloworld/Calc.cs +++ b/Source/UnityProj/Assets/Helloworld/Calc.cs @@ -1,7 +1,7 @@ /* * Tencent is pleased to support the open source community by making InjectFix available. * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * InjectFix is licensed under the MIT License, except for the third-party components listed in the file 'LICENSE' which may be subject to their corresponding license terms. + * InjectFix is licensed under the MIT License, except for the third-party components listed in the file 'LICENSE' which may be subject to their corresponding license terms. * This file is subject to the terms and conditions defined in file 'LICENSE', which is part of this source code package. */ @@ -14,8 +14,8 @@ public enum TestEnumValue { - t1, - t2 + t1 = 1, + t2 = 2, } public struct AllValueStruct @@ -37,52 +37,59 @@ public class Calculator { private TestEnumValue thisEnum = TestEnumValue.t2; private Vector3 v = Vector3.right; + private Vector3? nullableV1 = null; + private Vector3? nullableV2 = Vector3.left; private AllValueStruct astruct = new AllValueStruct(); + //修改成正确的逻辑后,打开如下注释,生成的补丁将修正该函数 [Patch] public int Add(int a, int b) { return - TestAllValueStruct(default(AllValueStruct)) + TestAllValueStruct(default(AllValueStruct)) + TestAllValueStruct(astruct) - + TestVector3(default(Vector3)) + TestVector3(default(Vector3)) + TestVector3(v) + TestVector3(Vector3.one) - + TestEnum(default(TestEnumValue)) + TestEnum(default(TestEnumValue)) + TestEnum(thisEnum) + TestEnum(TestEnumValue.t1); - //return DoAdd(a, b); + TestAllValueStruct(default(AllValueStruct)) + TestAllValueStruct(default(AllValueStruct)) + + TestAllValueStruct(astruct) + + TestVector3(default(Vector3)) + TestVector3(default(Vector3)) + TestVector3(v) + TestVector3(Vector3.one) + + TestEnum(TestEnumValue.t2) + TestEnum(default(TestEnumValue)) + TestEnum(thisEnum) + TestEnum(TestEnumValue.t1) + + TestRefInt(ref a) + a + + TestNullable(null) + TestNullable(Vector3.left) + TestNullable(nullableV1) + TestNullable(nullableV2); + //return DoAdd(a, b); } - public int TestEnum(TestEnumValue v) + public int TestNullable(Vector3? v) { - return (int)v; - } + if (v == null) + { + return 9 * 1000000; + } - public int TestAllValueStruct(AllValueStruct v) - { - return 10000; + return (int)(v.Value.x + v.Value.y + v.Value.z) * 1000000; } - - public int TestAllValueStruct(ChildClassStruct v) + + public int TestRefInt(ref int v) { - return 996; + v = 100000; + return v; } - - public int TestAllValueStruct(ClassStruct v) + + public int TestEnum(TestEnumValue v) { - return 996; + return (int)v * 1000; } - public int DoAdd(int a, int b) + public int TestAllValueStruct(AllValueStruct v) { - return a * b; + return v.x * 10000; } public int Sub(int a, int b) { return a / b; } - + public int TestVector3(Vector3 v) { - return 0; + return 10 * (int)(v.x + v.y + v.z); } public int Mult(int a, int b) diff --git a/Source/UnityProj/Assets/Helloworld/Helloworld.cs b/Source/UnityProj/Assets/Helloworld/Helloworld.cs index 04d2e3d..18d88b1 100644 --- a/Source/UnityProj/Assets/Helloworld/Helloworld.cs +++ b/Source/UnityProj/Assets/Helloworld/Helloworld.cs @@ -1,7 +1,7 @@ /* * Tencent is pleased to support the open source community by making InjectFix available. * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - * InjectFix is licensed under the MIT License, except for the third-party components listed in the file 'LICENSE' which may be subject to their corresponding license terms. + * InjectFix is licensed under the MIT License, except for the third-party components listed in the file 'LICENSE' which may be subject to their corresponding license terms. * This file is subject to the terms and conditions defined in file 'LICENSE', which is part of this source code package. */ @@ -13,158 +13,113 @@ using System.Diagnostics; using System.Reflection; using System.Runtime.InteropServices; +using IFix; +using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; +using UnityEngine.Assertions.Must; +using UnityEngine.Profiling; +using Random = UnityEngine.Random; -public static class StackClass where T : unmanaged -{ - public static Stack cache = new Stack(); -} // 跑不同仔细看文档Doc/example.md -public unsafe class Helloworld : MonoBehaviour { +public unsafe class Helloworld : MonoBehaviour +{ + public TestEnumValue _enumValue = TestEnumValue.t1; - public static unsafe object BoxValueToObject(T value) where T : unmanaged - { - Stack cache = StackClass.cache; - object result = null; - lock (cache) - { - result = cache.Count <= 0 ? default(T) : cache.Pop(); - } - - GCHandle h = GCHandle.Alloc(result, GCHandleType.Pinned); - IntPtr ptr = h.AddrOfPinnedObject(); + private Dictionary dict = new Dictionary(); - T* valuePtr = (T*)(ptr).ToPointer(); - *valuePtr = value; - - h.Free(); + [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] + private static extern IntPtr memset(void* dest, int c, void* count); - return result; + struct Dummpy + { + public T v; } - public static unsafe void UnBoxObjectToValue(object value, out T ret) where T : unmanaged + // check and load patchs + void Start() { - Stack cache = StackClass.cache; - - GCHandle h = GCHandle.Alloc(value, GCHandleType.Pinned); - IntPtr ptr = h.AddrOfPinnedObject(); - T* valuePtr = (T*)(ptr).ToPointer(); - lock (cache) + int b = 100; + void* buff = (void*)(&b); + + var sw = Stopwatch.StartNew(); + for (int i = 0, imax = 10000000; i < imax; i++) { - cache.Push(value); + memset(buff, 0, (void*)4); } - - h.Free(); - fixed (T* p = &ret) + UnityEngine.Debug.Log("Test call 1000w memset, using " + (float)sw.ElapsedMilliseconds + " ms"); + + print(b); + + sw = Stopwatch.StartNew(); + for (int i = 0, imax = 10000000; i < imax; i++) { - *p = *valuePtr; + UnsafeUtility.MemClear(buff, 4); } + UnityEngine.Debug.Log("Test call 1000w UnsafeUtility.MemClear, using " + (float)sw.ElapsedMilliseconds + " ms"); + + print(b); + + Type t = typeof(int); + void* addr = BoxUtils.GetObjectAddr(t); + print(BoxUtils.AddrToObject(addr)); + + test(); + if(calc == null) calc = new Calculator(); } - public class TestHandle - { - public int v1; - public long v2; - public Vector3 v4; - public short v3; - } - private void StructHandle(byte* ptr, Value* evaluationStackBase, Value* evaluationStackPointer, - object[] managedStack) + Vector3 pos = new Vector3(1, 2, 3); + + Calculator calc; + + private void Update() { - var v = *(AllValueStruct*)ptr; - EvaluationStackOperation.PushValueUnmanaged(evaluationStackBase, evaluationStackPointer, managedStack, v); + for(int i = 0;i<10;i++) + calc.Add(10, 9); } - public TestEnumValue _enumValue = TestEnumValue.t1; - // check and load patchs - void Start () + public void LoadPatch() { - print( UnsafeUtility.IsUnmanaged(typeof(TestEnumValue))); - - KeyValuePair l = default; - List li = default; - MyStruct ms = default; - Vector3 z = default; - - VirtualMachine.Info = (s) => UnityEngine.Debug.Log(s); - //try to load patch for Assembly-CSharp.dll var patch = Resources.Load("Assembly-CSharp.patch"); if (patch != null) - { + { UnityEngine.Debug.Log("loading Assembly-CSharp.patch ..."); - var sw = Stopwatch.StartNew(); + var sw = Stopwatch.StartNew(); var vm = PatchManager.Load(new MemoryStream(patch.bytes)); - vm.externInvokersHandle = (MethodBase mb, out ExternInvoker ei) => - { - bool ret = false; - var fb = new IFix.Binding.IFixBindingCaller(mb, out ret); - ei = fb.Invoke; - return ret; - }; - - EvaluationStackOperation.RegistPushFieldAction(typeof(AllValueStruct), StructHandle); - - - UnityEngine.Debug.Log("patch Assembly-CSharp.patch, using " + sw.ElapsedMilliseconds + " ms"); } - //try to load patch for Assembly-CSharp-firstpass.dll - patch = Resources.Load("Assembly-CSharp-firstpass.patch"); - if (patch != null) - { - UnityEngine.Debug.Log("loading Assembly-CSharp-firstpass ..."); - var sw = Stopwatch.StartNew(); - PatchManager.Load(new MemoryStream(patch.bytes)); - UnityEngine.Debug.Log("patch Assembly-CSharp-firstpass, using " + sw.ElapsedMilliseconds + " ms"); - } - - test(); + test(); } - public struct MyStruct + public void TestRand() { - public int x; - public int y; + var sw = Stopwatch.StartNew(); + //DoTestRand(); + for(int i = 0;i<1000;i++) + calc.Add(10, 9); - public MyStruct(int x, int y) - { - this.x = x; - this.y = y; - } - //public List list; - } - - private void CallObject(object o) - { - Vector3 newPos = new Vector3();// = (Vector3)o; - UnBoxObjectToValue(o, out newPos); + UnityEngine.Debug.Log("Test call 1000 Struct, using " + (float)sw.ElapsedMilliseconds + " ms"); } - private void CallMyObject(object o) + [Patch] + public void DoTestRand() { - MyStruct newPos;// = (MyStruct)o; - UnBoxObjectToValue(o, out newPos); - } - - Vector3 pos = new Vector3(1, 2, 3); - MyStruct s = new MyStruct(1, 1); - - Calculator calc; - private void Update() - { - if(calc == null) calc = new Calculator(); - calc.Add(10, 9); + for (int i = 0; i < 10000000; i++) + { + Random.Range(-500, 500); + } } //[IFix.Patch] void test() { - if(calc == null) calc = new Calculator(); - //test calc.Add - UnityEngine.Debug.Log("10 + 9 = " +calc.Add(10, 9)); + if (calc == null) calc = new Calculator(); + //test calc.Add + UnityEngine.Debug.Log("10 + 9 = " + calc.Add(10, 9)); + UnityEngine.Debug.Log("10 + 9 = " + calc.Add(10, 9)); + UnityEngine.Debug.Log("10 + 9 = " + calc.Add(10, 9)); //test calc.Sub UnityEngine.Debug.Log("10 - 2 = " + calc.Sub(10, 2)); @@ -186,4 +141,4 @@ void test() #endif #endif } -} +} \ No newline at end of file diff --git a/Source/UnityProj/Assets/Helloworld/Helloworld.unity b/Source/UnityProj/Assets/Helloworld/Helloworld.unity index 93c24e7..80779f7 100644 --- a/Source/UnityProj/Assets/Helloworld/Helloworld.unity +++ b/Source/UnityProj/Assets/Helloworld/Helloworld.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0.99999946, b: 0.99999946, a: 1} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -121,6 +121,214 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &124702724 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 124702725} + - component: {fileID: 124702728} + - component: {fileID: 124702727} + - component: {fileID: 124702726} + m_Layer: 5 + m_Name: Button (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &124702725 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 124702724} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 526540681} + m_Father: {fileID: 1000919263} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 184, y: 0} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &124702726 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 124702724} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 124702727} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1270849615} + m_MethodName: LoadPatch + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &124702727 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 124702724} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &124702728 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 124702724} + m_CullTransparentMesh: 0 +--- !u!1 &526540680 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 526540681} + - component: {fileID: 526540683} + - component: {fileID: 526540682} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &526540681 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 526540680} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 124702725} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &526540682 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 526540680} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: load patch +--- !u!222 &526540683 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 526540680} + m_CullTransparentMesh: 0 --- !u!1 &720124718 GameObject: m_ObjectHideFlags: 0 @@ -249,7 +457,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0} + m_AnchoredPosition: {x: -157, y: 0} m_SizeDelta: {x: 160, y: 30} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &807815159 @@ -295,8 +503,8 @@ MonoBehaviour: m_OnClick: m_PersistentCalls: m_Calls: - - m_Target: {fileID: 1270849618} - m_MethodName: Test + - m_Target: {fileID: 1270849615} + m_MethodName: TestRand m_Mode: 1 m_Arguments: m_ObjectArgument: {fileID: 0} @@ -434,6 +642,7 @@ RectTransform: m_LocalScale: {x: 0, y: 0, z: 0} m_Children: - {fileID: 807815158} + - {fileID: 124702725} m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -521,7 +730,6 @@ GameObject: - component: {fileID: 1270849617} - component: {fileID: 1270849616} - component: {fileID: 1270849615} - - component: {fileID: 1270849618} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -541,6 +749,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 2cc296780118d7c4983e4a80bca00e8d, type: 3} m_Name: m_EditorClassIdentifier: + _enumValue: 0 --- !u!81 &1270849616 AudioListener: m_ObjectHideFlags: 0 @@ -557,18 +766,6 @@ Behaviour: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1270849614} m_Enabled: 1 ---- !u!114 &1270849618 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1270849614} - m_Enabled: 0 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 6c8e426081d922d499eb7adce900c5c9, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!20 &1270849619 Camera: m_ObjectHideFlags: 0 diff --git a/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs b/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs index b91a181..82ec151 100644 --- a/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs +++ b/Source/UnityProj/Assets/IFix/Editor/ILFixCodeGen.cs @@ -6,7 +6,6 @@ using System.Text.RegularExpressions; using IFix.Utils; using Unity.Collections.LowLevel.Unsafe; -using UnityEngine; namespace IFix.Editor { @@ -14,11 +13,13 @@ public class ILFixCodeGen { #region static public Dictionary> delegateDict = new Dictionary>(); - public Dictionary> ctorCache = new Dictionary>(); + public Dictionary ctorCache = new Dictionary(); + public Dictionary publicInstanceStructCache = new Dictionary(); public void ClearMethod() { delegateDict.Clear(); ctorCache.Clear(); + publicInstanceStructCache.Clear(); } public bool TryGetDelegateStr(MethodInfo mi, out string ret) @@ -120,7 +121,7 @@ static MethodInfo tryFixGenericMethod(MethodInfo method) } catch (Exception e) { - Debug.LogError(e); + //Debug.LogError(e); } return method; } @@ -197,8 +198,11 @@ string FuncCall(MethodBase m, int parOffset = 0) ParameterInfo[] pars = m.GetParameters(); if (!m.IsStatic && !(m is ConstructorInfo)) { - str += "a0"; - if (pars.Length > 0) str += ","; + if (!(!m.IsStatic && m.ReflectedType.IsValueType && m.IsPublic)) + { + str += "a0"; + if (pars.Length > 0) str += ","; + } } for (int n = parOffset; n < pars.Length; n++) @@ -221,95 +225,18 @@ string FuncCall(MethodBase m, int parOffset = 0) string FuncGetArg(ParameterInfo p) { Type t = p.ParameterType; - - if (t == typeof(int)) - { - return "call.GetInt32"; - } - if (t == typeof(float)) - { - return "call.GetSingle"; - } - if (t == typeof(bool)) - { - return "call.GetBoolean"; - } - if (t == typeof(double)) - { - return "call.GetDouble"; - } - if (t == typeof(long)) - { - return "call.GetInt64"; - } - if (t == typeof(byte)) - { - return "call.GetByte"; - } - if (t == typeof(uint)) - { - return "call.GetUInt32"; - } - if (t == typeof(ushort)) - { - return "call.GetUInt16"; - } - if (t == typeof(short)) - { - return "call.GetInt16"; - } - if (t == typeof(char)) - { - return "call.GetChar"; - } - if (t == typeof(ulong)) - { - return "call.GetUInt64"; - } - if (t == typeof(sbyte)) - { - return "call.GetSByte"; - } - if (t == typeof(IntPtr)) - { - return "call.GetIntPtr"; - } - if (t == typeof(UIntPtr)) - { - return "call.GetUIntPtr"; - } - - if (t.IsGenericParameter) return ""; - - if (t.IsEnum) - { - var underlyingType = Enum.GetUnderlyingType(t); - if (underlyingType == typeof(long) || underlyingType == typeof(ulong)) - { - return "call.GetInt64"; - } - else - { - return "call.GetInt32"; - } - } - else if (t.IsPointer) - { - var originType = t.GetElementType(); - if (originType == typeof(long) || originType == typeof(ulong)) - { - return "call.GetInt64Point"; - } - else - { - return "call.GetInt32Point"; - } - } - return "call.GetObject"; + return string.Format("({0})", TypeNameUtils.SimpleType(t)); } string FuncPushResult(Type t) { + try{ + var enn = t.IsEnum; + } + catch + { + UnityEngine.Debug.Log(t); + } if (t.IsPrimitive) { if (t == typeof(int)) @@ -369,7 +296,11 @@ string FuncPushResult(Type t) return "call.PushUIntPtr64AsResult(result);"; } } - else if (t.IsEnum) + else if (t.IsPointer) + { + return "call.PushIntPtr64AsResult((IntPtr)result);"; + } + else if (!t.IsGenericType && t.IsEnum) { var underlyingType = Enum.GetUnderlyingType(t); if (underlyingType == typeof(long) || underlyingType == typeof(ulong)) @@ -381,10 +312,6 @@ string FuncPushResult(Type t) return "call.PushInt32AsResult((int)result);"; } } - else if (t.IsPointer) - { - return "call.PushIntPtr64AsResult((IntPtr)result);"; - } else if(UnsafeUtility.IsUnmanaged(t) && Nullable.GetUnderlyingType(t) == null ) { @@ -405,7 +332,7 @@ void Write(StreamWriter file, string fmt, params object[] args) if (fmt.StartsWith("}")) indent--; for (int n = 0; n < indent; n++) - file.Write(" "); + file.Write("\t"); if (args.Length == 0) @@ -419,15 +346,6 @@ void Write(StreamWriter file, string fmt, params object[] args) if (fmt.EndsWith("{")) indent++; } - StreamWriter BeginNewPart() - { - string bindingFile = path + "IFixBindingCaller.New.cs"; - - StreamWriter file = new StreamWriter(bindingFile, false, Encoding.UTF8); - file.NewLine = NewLine; - return file; - } - private void WriteHead(StreamWriter file) { Write(file, "using System;"); @@ -445,29 +363,7 @@ private void WriteHead(StreamWriter file) Write(file, "{"); Write(file, "public unsafe partial class IFixBindingCaller"); Write(file, "{"); - Write(file, "public ExternInvoker Invoke = null;"); - Write(file, "private MethodBase method;"); - Write(file, "private Delegate caller = null;"); - Write(file, "#if DEBUG"); - Write(file, "private string methodName;"); - Write(file, "#endif"); Write(file, ""); - - Write(file, "void PopEvaluationStack(ref Call call, bool pushResult, int start, int end)"); - - Write(file, "{"); - Write(file, "Value* pArg = call.argumentBase;"); - Write(file, "Value* evaluationStackBase = call.evaluationStackBase;"); - Write(file, "object[] managedStack = call.managedStack;"); - - Write(file, "if (pushResult) pArg++;"); - Write(file, "for (int i = start; i < end; i++)"); - Write(file, "{"); - Write(file, "EvaluationStackOperation.RecycleObject(managedStack[pArg - evaluationStackBase]);"); - Write(file, "managedStack[pArg - evaluationStackBase] = null;"); - Write(file, "pArg++;"); - Write(file, "}"); - Write(file, "}"); } private void End(StreamWriter file) @@ -477,70 +373,33 @@ private void End(StreamWriter file) file.Flush(); file.Close(); - indent = 0; - file = BeginNewPart(); - Write(file, "namespace IFix.Binding"); - Write(file, "{"); - Write(file, "using System;"); - Write(file, "using System.Reflection;"); - Write(file, "using IFix.Utils;"); - Write(file, "using System.Collections.Generic;"); - Write(file, "using IFix.Core;"); + //GenFileDictionary(); + } - Write(file, "public unsafe partial class IFixBindingCaller"); - Write(file, "{"); - Write(file, "private static Dictionary> delDict = new Dictionary> {"); + /* + private void GenFileDictionary() + { + string bindingDelDictPath = path + "/Resources/BindingDelDict.bytes"; + FileDictionary> file = + new FileDictionary>(bindingDelDictPath, 1024, true); + foreach (var item in delegateDict) { - Write(file, "[\"{0}\"] = new Tuple({1}, true),", item.Key, item.Value.Item1); + file.Add(item.Key, new Tuple(item.Value.Item1, true)); } foreach (var item in ctorCache) { - Write(file, "[\"{0}\"] = new Tuple({1}, false),", item.Key, item.Value.Item1); + file.Add(item.Key, new Tuple(item.Value, false)); } - - Write(file, "};"); - - Write(file, "public IFixBindingCaller(MethodBase method, out bool isSuccess)"); - Write(file, "{"); - Write(file, "this.method = method;"); - Write(file, "isSuccess = false;"); - Write(file, "#if DEBUG"); - Write(file, "methodName = $\"{method.ReflectedType.FullName}.{method.Name}\";"); - Write(file, "#endif"); - Write(file, "string methodUniqueStr = string.Intern(TypeNameUtils.GetUniqueMethodName(method));"); - Write(file, ""); - - Write(file, $"if (methodUniqueStr == \"\")"); - Write(file, "{"); - Write(file, "isSuccess = false;"); - Write(file, "return;"); - Write(file, "}"); - - Write(file, "if (delDict.TryGetValue(methodUniqueStr, out Tuple info))"); - Write(file, "{"); - - Write(file, "var invokeMethod = typeof(IFixBindingCaller).GetMethod($\"Invoke{info.Item1}\");"); - Write(file, "Invoke = (ExternInvoker)Delegate.CreateDelegate(typeof(ExternInvoker), this, invokeMethod);"); - Write(file, "if (info.Item2)"); - Write(file, "{"); - Write(file, "var delType = Type.GetType($\"IFix.Binding.IFixBindingCaller+IFixCallDel{info.Item1}\");"); - Write(file, "caller = Delegate.CreateDelegate(delType, (MethodInfo)method);"); - Write(file, "}"); - - Write(file, "isSuccess = true;"); - Write(file, "return;"); - Write(file, "}"); - Write(file, ""); - Write(file, "}"); + foreach (var item in publicInstanceStructCache) + { + file.Add(item.Key, new Tuple(item.Value, false)); + } - Write(file, "}"); - Write(file, "}"); - file.Flush(); file.Close(); - } + }*/ void WriteTry(StreamWriter file) { @@ -565,7 +424,30 @@ void WriteFinaly(StreamWriter file, int paramStart, int paramCount) private bool WriteMethodCaller(MethodBase mb, StreamWriter file) { - if (mb is MethodInfo) + var key = TypeNameUtils.GetUniqueMethodName(mb); + if (string.IsNullOrEmpty(key)) + { + return false; + } + + if (key.Contains("!")) + { + return false; + } + + if(key.Contains(">d__")) + { + return false; + } + + if (key.Contains("<>")) + { + return false; + } + + // class method + if (mb is MethodInfo && + !TypeNameUtils.MethodIsStructPublic(mb)) { string delegateStr; if (TryGetDelegateStr((MethodInfo)mb, out delegateStr)) @@ -580,67 +462,67 @@ private bool WriteMethodCaller(MethodBase mb, StreamWriter file) if (cr == "") return false; if (!ctorCache.ContainsKey(cr)) { - ctorCache.Add(cr, new Tuple(methodCount, MethodInfoToDelegate(mb))); + ctorCache.Add(cr, methodCount); + } + else + { + return false; } } - - Write(file, ""); - Write(file, "public void Invoke{0}(VirtualMachine vm, ref Call call, bool instantiate) {{", methodCount); - - bool pushResult = mb is ConstructorInfo || - (mb is MethodInfo && ((MethodInfo)mb).ReturnType != typeof(void)); - - int paramStart = 0; - if (pushResult) + else if (TypeNameUtils.MethodIsStructPublic(mb)) { - paramStart = 1; + if (!publicInstanceStructCache.ContainsKey(key)) + { + publicInstanceStructCache.Add(key, methodCount); + } + else + { + return false; + } } - - int paramCount = mb.GetParameters().Length; - if (mb is MethodInfo && !((MethodInfo)mb).IsStatic) + else { - paramCount += 1; + return false; } - string pushResultStr = pushResult ? "true" : "false"; - - Write(file, $"bool pushResult = {pushResultStr};"); - WriteTry(file); + Write(file, ""); + Write(file, "public void Invoke{0}(VirtualMachine vm, ref Call call, bool instantiate) {{", methodCount); ParameterInfo[] pars = mb.GetParameters(); if (mb is ConstructorInfo) { - Write(file, "{0} result;", TypeNameUtils.SimpleType(mb.ReflectedType)); for (int n = 0; n < pars.Length; n++) { var p = pars[n]; - Write(file, "var a{0} = ({1}){3}({2});", n, TypeNameUtils.SimpleType(p.ParameterType) ,n, FuncGetArg(p)); + if (p.ParameterType.IsPointer) + { + Write(file, "var a{0} = ({1})((IntPtr)args[{0}]);", n, TypeNameUtils.SimpleType(p.ParameterType)); + } + else + { + Write(file, "var a{0} = ({1})args[{0}];", n, TypeNameUtils.SimpleType(p.ParameterType)); + } } - Write(file, "result = new {0}({1});", TypeNameUtils.SimpleType(mb.ReflectedType), FuncCall(mb)); - if (UnsafeUtility.IsUnmanaged(mb.ReflectedType) - && Nullable.GetUnderlyingType(mb.ReflectedType) == null ) + string retType = TypeNameUtils.SimpleType(mb.ReflectedType); + Write(file, "var result = new {0}({1});", retType, FuncCall(mb)); + if (UnsafeUtility.IsUnmanaged(mb.ReflectedType) + && Nullable.GetUnderlyingType(mb.ReflectedType) == null) { - Write(file, "call.PushValueUnmanagedAsResult(result);"); + Write(file, "ret = BoxUtils.BoxObject(result);"); } else { - Write(file, $"call.PushObjectAsResult(result, typeof({TypeNameUtils.SimpleType(mb.ReflectedType)}));"); + Write(file, "ret = result;"); } - - } else { var mi = mb as MethodInfo; - if (mi.ReturnType != typeof(void)) - { - Write(file, "{0} result;", TypeNameUtils.SimpleType(mi.ReturnType)); - } if (!mb.IsStatic) { - Write(file, "var a0 = ({0})call.GetObject(0);", TypeNameUtils.SimpleType(mb.DeclaringType)); + Write(file, "var a0 = ({0})instance;", TypeNameUtils.SimpleType(mb.DeclaringType)); } for (int n = 0; n < pars.Length; n++) @@ -649,49 +531,107 @@ private bool WriteMethodCaller(MethodBase mb, StreamWriter file) var idx = mb.IsStatic ? n : n + 1; if (!p.IsOut) { - Write(file, "var a{0} = ({1}){3}({2});", idx, TypeNameUtils.SimpleType(p.ParameterType) , idx, FuncGetArg(p)); + if (p.ParameterType.IsPointer) + { + Write(file, "var a{0} = ({1})((IntPtr)args[{2}]);", idx, TypeNameUtils.SimpleType(p.ParameterType), n); + } + else + { + Write(file, "var a{0} = ({1})args[{2}];", idx, TypeNameUtils.SimpleType(p.ParameterType), n); + } } else { Write(file, "{1} a{0};", idx, TypeNameUtils.SimpleType(p.ParameterType)); } } - - if (mi.ReturnType != typeof(void)) + + if (TypeNameUtils.MethodIsStructPublic(mb)) { - Write(file, "result = ((IFixCallDel{1})caller)({0});", FuncCall(mi), methodCount); - Write(file, FuncPushResult(mi.ReturnType)); - //Write(file, "call.PushObjectAsResult(result, result.GetType());"); + string methodName = mi.Name; + if (methodName.Contains("get_")) + { + if (methodName == "get_Item") + { + Write(file, "var result = a0[a1];"); + } + else + { + Write(file, "var result = a0.{0};", methodName.Remove(0, 4)); + } + } + else if (methodName.Contains("set_")) + { + if (methodName == "set_Item") + { + Write(file, "a0[a1] = a2;"); + } + else + { + Write(file, "a0.{0} = a1;", methodName.Remove(0, 4)); + } + } + else + { + if (mi.ReturnType != typeof(void)) + { + Write(file, "var result = a0.{0}({1});", methodName, FuncCall(mi)); + //Write(file, "call.PushObjectAsResult(result, result.GetType());"); + } + else + { + Write(file, "a0.{0}({1});", methodName, FuncCall(mi)); + } + } } else { - Write(file, "((IFixCallDel{1})caller)({0});", FuncCall(mi), methodCount); + if (mi.ReturnType != typeof(void)) + { + Write(file, "var result = ((IFixCallDel{1})caller)({0});", FuncCall(mi), methodCount); + //Write(file, "call.PushObjectAsResult(result, result.GetType());"); + } + else + { + Write(file, "((IFixCallDel{1})caller)({0});", FuncCall(mi), methodCount); + } + } + + + if(mi.ReturnType != typeof(void)) + { + if (UnsafeUtility.IsUnmanaged(mi.ReturnType) + && Nullable.GetUnderlyingType(mi.ReturnType) == null) + { + Write(file, "ret = BoxUtils.BoxObject(result);"); + } + else + { + Write(file, "ret = result;"); + } } + for (int n = 0; n < pars.Length; n++) { var p = pars[n]; var idx = mb.IsStatic ? n : n + 1; if (p.ParameterType.IsByRef) { - Type t = p.ParameterType; - if (UnsafeUtility.IsUnmanaged(t) - && Nullable.GetUnderlyingType(t) == null) + Write(file, "BoxUtils.RecycleObject(args[{0}]);", n); + if (UnsafeUtility.IsUnmanaged(p.ParameterType) + && Nullable.GetUnderlyingType(p.ParameterType) == null) { - Write(file, "call.UpdateReference({0}, EvaluationStackOperation.BoxValueToObject(a{0}), vm, typeof({1}));", idx, TypeNameUtils.SimpleType(p.ParameterType)); + Write(file, "args[{0}] = BoxUtils.BoxObject(a{1});", n, idx); } else { - Write(file, "call.UpdateReference({0}, a{0}, vm, typeof({1}));", idx, TypeNameUtils.SimpleType(p.ParameterType)); + Write(file, "args[{0}] = a{1};", n, idx); } - } - - } } - WriteFinaly(file, paramStart, paramCount); Write(file, "}"); Write(file, ""); return true; @@ -714,7 +654,7 @@ public void DeleteAll() public void GenAll(List mbList) { - var file = Begin(); + var file = Begin(); WriteHead(file); for (int i = 0, imax = mbList.Count; i < imax; i++) @@ -735,6 +675,11 @@ StreamWriter Begin() Directory.CreateDirectory(path); } + if (!Directory.Exists(path + "/Resources")) + { + Directory.CreateDirectory(path + "/Resources"); + } + string bindingFile = path + "IFixBindingCaller.cs"; StreamWriter file = new StreamWriter(bindingFile, false, Encoding.UTF8); diff --git a/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs b/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs index e678197..87bcbb7 100644 --- a/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs +++ b/Source/UnityProj/Assets/IFix/Editor/ILFixEditor.cs @@ -942,7 +942,7 @@ public static void Patch() EditorUtility.ClearProgressBar(); } - [MenuItem("InjectFix/GenBinding", false, 2)] + //[MenuItem("InjectFix/GenBinding", false, 2)] public static void GenBinding() { ILFixCodeGen gen = new ILFixCodeGen(); @@ -1073,6 +1073,9 @@ public static List FindAllMethod(Assembly assembly) if (!calledMethod.IsStatic && calledMethod.ReflectedType.IsValueType) { } + else if (calledMethod.ReflectedType.FullName.Contains("IFix.Core")) + { + } else { result.Add(calledMethod); diff --git a/Source/UnityProj/Assets/IFix/TypeNameUtils.cs b/Source/UnityProj/Assets/IFix/TypeNameUtils.cs index 01a917d..e3315b1 100644 --- a/Source/UnityProj/Assets/IFix/TypeNameUtils.cs +++ b/Source/UnityProj/Assets/IFix/TypeNameUtils.cs @@ -111,7 +111,7 @@ public static string _Name(string n) public static string GenericBaseName(Type t) { string n = t.FullName; - if (string.IsNullOrEmpty(n)) return "!"; + if (string.IsNullOrEmpty(n)) return ""; if (n.IndexOf('[') > 0) { n = n.Substring(0, n.IndexOf('[')); @@ -120,8 +120,18 @@ public static string GenericBaseName(Type t) return n.Replace("+", "."); } + public static bool MethodIsStructPublic(MethodBase mb) + { + return mb is MethodInfo && + (!mb.IsStatic && mb.ReflectedType.IsValueType && mb.IsPublic); + } + public static string GetUniqueMethodName(MethodBase method) { + if(TypeNameUtils.SimpleType(method.ReflectedType) == "!") + { + return ""; + } Type retType = (method is MethodInfo) ? (method as MethodInfo).ReturnType : (method as ConstructorInfo).ReflectedType; @@ -132,7 +142,7 @@ public static string GetUniqueMethodName(MethodBase method) } if (string.IsNullOrEmpty(retType.FullName)) return ""; - string ctor = ""; + string funName = ""; List args = new List(); var parameters = method.GetParameters(); if (!method.IsStatic && !(method is ConstructorInfo)) @@ -141,11 +151,19 @@ public static string GetUniqueMethodName(MethodBase method) { return ""; } - args.Add( TypeNameUtils.SimpleType(method.ReflectedType)); + + if (MethodIsStructPublic(method)) + { + funName = method.Name; + } + else + { + args.Add( TypeNameUtils.SimpleType(method.ReflectedType)); + } } else if (method is ConstructorInfo) { - ctor = "ctor"; + funName = "ctor"; } for (int i = 0, imax = parameters.Length; i + { + public T v; + + public Dummpy(T v) + { + this.v = v; + } + } + + private static Stack[] objectPool = new Stack[256]; + public static readonly int OBJ_OFFSET = 2 * IntPtr.Size; + public static readonly int ONE_OFFSET = IntPtr.Size; + + // 第二个位置 用来上锁的。但是一般不会上锁 type,所以拿来存储自定义数据 + // 这个设计的就是不能lock type + private static void CacheTypeInfo(Type t, object obj = null) + { + void** monitorOffset = (void**)GetObjectAddr(t) + 1; + if (*monitorOffset != null) + { + return; + } + + void** info = (void**)UnsafeUtility.Malloc(32, 16, Allocator.Persistent); + UnsafeUtility.MemClear((void*)info, 32); + + /* + * typeHead(8) + * isEnum(1) + * isPrimitive(1) + * isValueType(1) + * isNullable(1) + * size (4) + * nullable UnderlyingType ptr(8) + * nullableOffset (4) + */ + // 把object的typeinfo 保存下来 + bool isNullable = t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>); + if (t.IsValueType && !isNullable) + { + if (obj == null) obj = Activator.CreateInstance(t); + void** typeHead = (void**)GetObjectAddr(obj); + *info = *typeHead; + } + else + { + *info = null; + } + + bool* bptr = (bool*)info; + *(bptr + 8) = t.IsEnum; + *(bptr + 9) = t.IsPrimitive; + *(bptr + 10) = t.IsValueType; + *(bptr + 11) = isNullable; + *((int*)(bptr + 12)) = UnsafeUtility.SizeOf(t); + if (isNullable) + { + Type ut = Nullable.GetUnderlyingType(t); + *((void**)(bptr + 16)) = GetObjectAddr(ut); + + var f = t.GetField("hasValue", BindingFlags.Instance| BindingFlags.NonPublic); + if (f == null) f = t.GetField("has_value", BindingFlags.Instance| BindingFlags.NonPublic); + + *(int*)(bptr + 24) = UnsafeUtility.GetFieldOffset(f); + } + + *monitorOffset = info; + } + + + /* + * typeHead(8) + * isEnumInit(1)| isEnum(1) + * isPrimitiveInit(1) | isPrimitive(1) + * isValueTypeInit(1) | isValueType(1) + * isNullableInit(1) | isNullable(1) + */ + public static void* GetTypeHead(Type t) + { + void** monitorOffset = (void**)GetObjectAddr(t) + 1; + // 没cache + if (*monitorOffset == null) + { + CacheTypeInfo(t); + } + + return **(void***)monitorOffset; + } + + public static bool GetTypeIsEnum(Type t) + { + void** monitorOffset = (void**)GetObjectAddr(t) + 1; + // 没cache + if (*monitorOffset == null) + { + CacheTypeInfo(t); + } + + return *(*(bool**)monitorOffset + 8); + } + + public static bool GetTypeIsPrimitive(Type t) + { + void** monitorOffset = (void**)GetObjectAddr(t) + 1; + // 没cache + if (*monitorOffset == null) + { + CacheTypeInfo(t); + } + + return *(*(bool**)monitorOffset + 9); + } + + public static bool GetTypeIsValueType(Type t) + { + void** monitorOffset = (void**)GetObjectAddr(t) + 1; + // 没cache + if (*monitorOffset == null) + { + CacheTypeInfo(t); + } + + return *(*(bool**)monitorOffset + 10); + } + + public static bool GetTypeIsNullable(Type t) + { + void** monitorOffset = (void**)GetObjectAddr(t) + 1; + // 没cache + if (*monitorOffset == null) + { + CacheTypeInfo(t); + } + + return *(*(bool**)monitorOffset + 11); + } + + public static int GetTypeSize(Type t) + { + void** monitorOffset = (void**)GetObjectAddr(t) + 1; + // 没cache + if (*monitorOffset == null) + { + CacheTypeInfo(t); + } + + return *(*(int**)monitorOffset + 3); + } + + public static Type GetNullableUnderlying(Type t) + { + void** monitorOffset = (void**)GetObjectAddr(t) + 1; + // 没cache + if (*monitorOffset == null) + { + CacheTypeInfo(t); + } + + void* ptr = *(void**)((byte*)*monitorOffset + 16); + return (Type)AddrToObject(ptr); + } + + public static int GetFieldOffset(FieldInfo fi) + { + long* monitorOffset = (long*)GetObjectAddr(fi) + 1; + if (*monitorOffset == 0) + { + int offset = UnsafeUtility.GetFieldOffset(fi); + if (fi.ReflectedType.IsValueType) + { + *((int*)monitorOffset) = offset + 2 * OBJ_OFFSET; + } + else + { + *((int*)monitorOffset) = offset + OBJ_OFFSET; + } + } + + return *((int*)monitorOffset) - OBJ_OFFSET; + } + + private static Dummpy d; + private static void** objPPtr = (void**)UnsafeUtility.AddressOf(ref d); + public static void* GetObjectAddr(object obj) + { + d.v = obj; + return *objPPtr; + } + + public static object AddrToObject(void* addr) + { + *objPPtr = addr; + return d.v; + } + + public static object CreateDefaultBoxValue(Type t) + { + void* p = null; + void** monitorOffset = (void**)GetObjectAddr(t) + 1; + // 没cache + if (*monitorOffset == null) + { + CacheTypeInfo(t); + } + + byte* typeInfo = (byte*)*monitorOffset; + bool isNullable = *(bool*)(typeInfo + 11); + if (isNullable) return null; + // bool isValueType = *(bool*)(typeInfo + 10); + // if(isValueType) + + return CreateBoxValue(t, ref p, true, true); + } + + public static object CreateBoxValue(Type t, bool jumpNulable = false) + { + void* p = null; + return CreateBoxValue(t, ref p, jumpNulable); + } + + public static object CreateBoxValue(Type t, ref void* objPtr, bool jumpNulable = false, bool clearObj = false) + { + //if (t == typeof(void)) return null; + //if (t == null) return null; + // class type + //if (!t.IsValueType) return null; + + void** monitorOffset = (void**)GetObjectAddr(t) + 1; + // 没cache + if (*monitorOffset == null) + { + CacheTypeInfo(t); + } + + byte* typeInfo = (byte*)*monitorOffset; + bool isValueType = *(bool*)(typeInfo + 10); + if (!isValueType) return null; + + if (!jumpNulable) + { + bool isNullable = *(bool*)(typeInfo + 11); + if (isNullable) + { + t = (Type)AddrToObject(*(void**)(typeInfo + 16)); + + monitorOffset = (void**)GetObjectAddr(t) + 1; + // 没cache + if (*monitorOffset == null) + { + CacheTypeInfo(t); + } + typeInfo = (byte*)*monitorOffset; + } + } + + int size = *(int*)(typeInfo + 12); + int idx = (size + 15) / 16 - 1; + + var pool = objectPool[idx]; + if (pool == null) + { + lock (objectPool) + { + pool = new Stack(); + objectPool[idx] = pool; + } + } + + object obj = null; + void* p; + if (pool.Count > 0) + { + //lock (pool) + { + obj = pool.Pop(); + p = GetObjectAddr(obj); + } + } + else + { + p = UnsafeUtility.Malloc(size + OBJ_OFFSET, OBJ_OFFSET, Allocator.Persistent); + // 把type头设置到 自定义申请的内存中,这样就可以伪造一个 C#的object + *((void**)p) = *(void**)typeInfo; + obj = AddrToObject(p); + } + + // 第二个字段是 lock的hash,一半我们不会用box对象lock + // 所以这里直接拿来当是否被cache + *(int*)((byte*)p + ONE_OFFSET) = size; + // 把type头设置到 自定义申请的内存中,这样就可以伪造一个 C#的object + *(void**)p = *(void**)typeInfo; + objPtr = p; + + if(clearObj) + UnsafeUtility.MemClear((byte*)p + OBJ_OFFSET, size); + + return obj; + } + + public static object CreateReturnValue(Type returnType) + { + if (!GetTypeIsValueType(returnType)) return null; + + void* p = null; + return CreateBoxValue(returnType, ref p); + } + + public static object CloneObject(object value) + { + if (value == null) return null; + Type t = value.GetType(); + + void** monitorOffset = (void**)GetObjectAddr(t) + 1; + // 没cache + if (*monitorOffset == null) + { + CacheTypeInfo(t); + } + byte* typeInfo = (byte*)*monitorOffset; + bool isValueType = *(bool*)(typeInfo + 10); + if (!isValueType) return value; + + void* p = null; + int len = *(int*)(typeInfo + 12); + object result = CreateBoxValue(t, ref p); + byte* source = (byte*)GetObjectAddr(value) + OBJ_OFFSET; + UnsafeUtility.MemCpy((byte*)p + OBJ_OFFSET, source, len); + + return result; + } + + public static object GetFieldValue(object thisArg, FieldInfo fi) + { + Type t = fi.FieldType; + void** monitorOffset = (void**)GetObjectAddr(t) + 1; + // 没cache + if (*monitorOffset == null) + { + CacheTypeInfo(t); + } + byte* typeInfo = (byte*)*monitorOffset; + bool isValueType = *(bool*)(typeInfo + 10); + if (!isValueType) return fi.GetValue(thisArg); + + bool isNullable = *(bool*)(typeInfo + 11); + byte* source = (byte*)GetObjectAddr(thisArg); + int filedOffset = GetFieldOffset(fi); + int len = *(int*)(typeInfo + 12); + + if (isNullable) + { + var ut = (Type)AddrToObject(*(void**)(typeInfo + 16)); + int offset = *(int*)(typeInfo + 24); + if (*(bool*)(source + filedOffset+ offset) == false) return null; + len = GetTypeSize(ut); + t = ut; + } + + void* b = null; + object result = CreateBoxValue(t, ref b, true); + source = source + filedOffset; + + UnsafeUtility.MemCpy((byte*)b + OBJ_OFFSET, source, len); + + return result; + } + + public static object BoxEnumObject(Type t, int value) + { + void* p = null; + object obj = CreateBoxValue(t, ref p, true); + *((int*)((byte*)p + OBJ_OFFSET)) = value; + + return obj; + } + + public static object BoxEnumObject(Type t, long value) + { + void* p = null; + object obj = CreateBoxValue(t, ref p, true); + *((long*)((byte*)p + OBJ_OFFSET)) = value; + + return obj; + } + + public static object BoxObject(T value, bool jumpTypeCheck = false) + { + Type t = typeof(T); + void** monitorOffset = (void**)GetObjectAddr(t) + 1; + // 没cache + if (*monitorOffset == null) + { + CacheTypeInfo(t); + } + byte* typeInfo = (byte*)*monitorOffset; + + if (!jumpTypeCheck) + { + bool isValueType = *(bool*)(typeInfo + 10); + if (!isValueType) return value; + } + + var dummpy = new Dummpy(value); + void* addr = UnsafeUtility.AddressOf(ref dummpy); + + bool isNullable = *(bool*)(typeInfo + 11); + // nullable特殊处理,用offset 判断出来是否为空 + if (isNullable) + { + t = (Type)AddrToObject(*(void**)(typeInfo + 16)); + int offset = *(int*)(typeInfo + 24); + if (*((bool*)addr + offset) == false) return null; + //if (*((bool*)addr + offset) == false) return null; + } + + void* p = null; + object obj = CreateBoxValue(t, ref p, true); + UnsafeUtility.CopyStructureToPtr(ref dummpy, (byte*)p + OBJ_OFFSET); + + return obj; + } + + public static void RecycleObject(object obj) + { + if (obj == null) return; + byte* p = (byte*)GetObjectAddr(obj); + // 第二个字段是 lock的hash,一半我们不会用box对象lock + // 所以这里直接拿来当是否 isInPool + int* sizePtr = (int*)(p + ONE_OFFSET); + int size = *sizePtr; + if (size == 0) return; + // monitor的lock 会超过4096的,但是一般value type的长度不会 + if (size > 4096) return; + // 低位必须全部是0 + if (*(sizePtr - 1) != 0) return; + + int idx = (size + 15) / 16 - 1; + + var pool = objectPool[idx]; + //lock (pool) + { + pool.Push(obj); + } + + //UnsafeUtility.MemClear(p + OBJ_OFFSET, size); + *sizePtr = 0; + } + } +} \ No newline at end of file diff --git a/Source/VSProj/Src/Core/GenericDelegate.cs b/Source/VSProj/Src/Core/GenericDelegate.cs index f41d382..128a243 100644 --- a/Source/VSProj/Src/Core/GenericDelegate.cs +++ b/Source/VSProj/Src/Core/GenericDelegate.cs @@ -68,9 +68,9 @@ internal static Delegate Create(Type delegateType, VirtualMachine virtualMachine MethodInfo delegateMethod = delegateType.GetMethod("Invoke"); var parameters = delegateMethod.GetParameters(); - if ((delegateMethod.ReturnType.IsValueType && delegateMethod.ReturnType != typeof(void)) - || parameters.Length > 4 - || parameters.Any(p => p.ParameterType.IsValueType || p.ParameterType.IsByRef) + if ((BoxUtils.GetTypeIsValueType(delegateMethod.ReturnType) && delegateMethod.ReturnType != typeof(void)) + || parameters.Length > 4 + || parameters.Any(p => BoxUtils.GetTypeIsValueType(p.ParameterType) || p.ParameterType.IsByRef) ) { //如果不在支持的范围,则生成一个永远返回空的构造器 diff --git a/Source/VSProj/Src/Core/ReflectionMethodInvoker.cs b/Source/VSProj/Src/Core/ReflectionMethodInvoker.cs index 836c8b8..04e2f1b 100644 --- a/Source/VSProj/Src/Core/ReflectionMethodInvoker.cs +++ b/Source/VSProj/Src/Core/ReflectionMethodInvoker.cs @@ -7,6 +7,8 @@ using System.Reflection; using System; +using System.Collections.Generic; +using Unity.Collections.LowLevel.Unsafe; namespace IFix.Core { @@ -21,19 +23,53 @@ internal class ReflectionMethodInvoker bool[] outFlags; + bool[] isValueFlags; + Type[] rawTypes; - object[] args; + Stack argsStack; MethodBase method; ConstructorInfo ctor = null; Type returnType = null; + bool returnTypeIsValueType; + Type declaringType = null; + Type cacheReturnType = null; bool isNullableHasValue = false; bool isNullableValue = false; bool isNullableGetValueOrDefault = false; + bool IsConstructor = false; + bool declaringTypeIsValueType = false; + private object[] GetArgs() + { + if (argsStack.Count > 0) + { + //lock (argsStack) + { + return argsStack.Pop(); + } + } + return new object[paramCount]; + } + + private void RecycleArgs(object[] args) + { + for (int i = 0; i < paramCount; i++) + { + if(isValueFlags[i]) + BoxUtils.RecycleObject(args[i]); + + args[i] = null; + } + + //lock (argsStack) + { + argsStack.Push(args); + } + } public ReflectionMethodInvoker(MethodBase method) { @@ -41,8 +77,11 @@ public ReflectionMethodInvoker(MethodBase method) paramCount = paramerInfos.Length; refFlags = new bool[paramCount]; outFlags = new bool[paramCount]; + isValueFlags = new bool[paramCount]; rawTypes = new Type[paramCount]; - args = new object[paramCount]; + // 对象池,防止invoke 调用自己导致参数混乱 + argsStack = new Stack(); + argsStack.Push(new object[paramCount]); for (int i = 0; i < paramerInfos.Length; i++) { @@ -57,18 +96,31 @@ public ReflectionMethodInvoker(MethodBase method) refFlags[i] = false; rawTypes[i] = paramerInfos[i].ParameterType; } + + isValueFlags[i] = paramerInfos[i].ParameterType.IsValueType; } this.method = method; + returnTypeIsValueType = false; if (method.IsConstructor) { ctor = method as ConstructorInfo; returnType = method.DeclaringType; + returnTypeIsValueType = returnType.IsValueType; + cacheReturnType = Nullable.GetUnderlyingType(returnType); + if (cacheReturnType == null) cacheReturnType = returnType; + hasReturn = true; } else { returnType = (method as MethodInfo).ReturnType; hasReturn = returnType != typeof(void); + if (hasReturn) + { + returnTypeIsValueType = returnType.IsValueType; + cacheReturnType = Nullable.GetUnderlyingType(returnType); + if (cacheReturnType == null) cacheReturnType = returnType; + } } hasThis = !method.IsStatic; bool isNullableMethod = method.DeclaringType.IsGenericType @@ -76,6 +128,10 @@ public ReflectionMethodInvoker(MethodBase method) isNullableHasValue = isNullableMethod && method.Name == "get_HasValue"; isNullableValue = isNullableMethod && method.Name == "get_Value"; isNullableGetValueOrDefault = isNullableMethod && method.Name == "GetValueOrDefault"; + + IsConstructor = method.IsConstructor; + declaringTypeIsValueType = method.DeclaringType.IsValueType; + declaringType = method.DeclaringType; } // #lizard forgives @@ -83,6 +139,10 @@ public unsafe void Invoke(VirtualMachine virtualMachine, ref Call call, bool isI { var managedStack = call.managedStack; var pushResult = false; + object ret = null; + var args = GetArgs(); + // invoke中会自己调用自己 + try { //virtualMachine._Info("method: " + method); @@ -103,38 +163,22 @@ public unsafe void Invoke(VirtualMachine virtualMachine, ref Call call, bool isI args[i] = EvaluationStackOperation.ToObject(call.evaluationStackBase, pArg, managedStack, rawTypes[i], virtualMachine); } - //if (pArg->Type >= ValueType.Object) - //{ - // managedStack[pArg->Value1] = null; - //} - //if (method.Name == "Invoke" && method.DeclaringType.Name == "MethodBase") - //{ - // VirtualMachine._Info(i + " pArg->Type:" + pArg->Type); - // VirtualMachine._Info(i + " args[i]:" + args[i]); - // if (args[i] != null) - // { - // VirtualMachine._Info(i + " args[i]:" + args[i].GetHashCode()); - // } - // VirtualMachine._Info(i + " args[i].GetType:" + (args[i] == null ? - // "null" : args[i].GetType().ToString())); - // if (i == 1 && args[i] is object[]) - // { - // var objs = args[i] as object[]; - // for (int j = 0; j < objs.Length;j++) - // { - // VirtualMachine._Info("obj " + j + ": " + (objs[j] == null ? - // "null" : objs[j].GetType().ToString())); - // } - // } - //} pArg++; } - object ret; - - if (isInstantiate || (method.IsConstructor && method.DeclaringType.IsValueType)) + if (isInstantiate || (IsConstructor && declaringTypeIsValueType)) { - ret = ctor.Invoke(args);//TODO: Delegate创建用Delegate.CreateDelegate + if (returnTypeIsValueType) + { + ret = BoxUtils.CreateBoxValue(cacheReturnType, true); + } + else + { + ret = null; + } + + ret = UnsafeUtility.CallMethod(ctor, args, ret); + //ret = ctor.Invoke(args);//TODO: Delegate创建用Delegate.CreateDelegate } else { @@ -142,7 +186,7 @@ public unsafe void Invoke(VirtualMachine virtualMachine, ref Call call, bool isI if (hasThis) { instance = EvaluationStackOperation.ToObject(call.evaluationStackBase, call.argumentBase, - managedStack, method.DeclaringType, virtualMachine, false); + managedStack, declaringType, virtualMachine, false); } //Nullable仍然是值类型,只是新增了是否为null的标志位,仍然通过传地址的方式进行方法调用, //但这在反射调用行不通,参数是object类型,boxing到object就是null,所以会触发 @@ -161,7 +205,7 @@ public unsafe void Invoke(VirtualMachine virtualMachine, ref Call call, bool isI if(instance == null) { if (paramCount == 0) - ret = EvaluationStackOperation.CreateBoxValue(returnType); + ret = BoxUtils.CreateDefaultBoxValue(returnType); else ret = args[0]; } @@ -172,17 +216,27 @@ public unsafe void Invoke(VirtualMachine virtualMachine, ref Call call, bool isI } else { - if (method.IsStatic == false && instance == null) + if (hasThis && instance == null) { throw new TargetException(string.Format("can not invoke method [{0}.{1}], Non-static method require instance but got null.", method.DeclaringType, method.Name)); } else { - ret = method.Invoke(instance, args); + if (returnTypeIsValueType) + { + ret = BoxUtils.CreateBoxValue(cacheReturnType, true); + } + else + { + ret = null; + } + + ret = UnsafeUtility.CallMethod(method, instance, args, ret); + //ret = method.Invoke(instance, args); } } - EvaluationStackOperation.RecycleObject(instance); + BoxUtils.RecycleObject(instance); } for (int i = 0; i < paramCount; i++) @@ -195,9 +249,9 @@ public unsafe void Invoke(VirtualMachine virtualMachine, ref Call call, bool isI if (hasReturn || isInstantiate) { - if (method.IsConstructor && method.DeclaringType.IsValueType && !isInstantiate) + if (IsConstructor && BoxUtils.GetTypeIsValueType(declaringType) && !isInstantiate) { - call.UpdateReference(0, ret, virtualMachine, method.DeclaringType); + call.UpdateReference(0, ret, virtualMachine, declaringType); } else { @@ -210,48 +264,19 @@ public unsafe void Invoke(VirtualMachine virtualMachine, ref Call call, bool isI { throw e.InnerException; } - //catch (TargetException e) - //{ - // //VirtualMachine._Info("exception method: " + method + ", in " + method.DeclaringType + ", msg:" - // + e.InnerException); - // //for (int i = 0; i < paramCount; i++) - // //{ - // // VirtualMachine._Info("arg " + i + " type: " + (args[i] == null ? "null" : args[i].GetType() - // // .ToString()) + " value: " + args[i]); - // //} - // if (e.InnerException is System.ArgumentException && args.Length == 2 && args[1] is object[]) - // { - // //VirtualMachine._Info("exception method: " + method + ", in " + method.DeclaringType - // // + ", msg:" + e.InnerException); - // if (instance is MethodBase) - // { - // MethodBase mb = instance as MethodBase; - // VirtualMachine._Info("exception method: " + mb + ", in " + mb.DeclaringType); - // } - // args = args[1] as object[]; - // for (int i = 0; i < args.Length; i++) - // { - // VirtualMachine._Info("arg " + i + " type: " + (args[i] == null ? - // "null" : args[i].GetType().ToString()) + " value: " + args[i]); - // } - // } - // throw e; - //} finally { - for (int i = 0; i < paramCount; i++) - { - EvaluationStackOperation.RecycleObject(args[i]); - args[i] = null; - } + RecycleArgs(args); + Value* pArg = call.argumentBase; if (pushResult) { pArg++; } - for (int i = (pushResult ? 1 : 0); i < paramCount + ((hasThis && !isInstantiate) ? 1 : 0); i++) + + for (int i = (pushResult ? 1 : 0),imax=paramCount + ((hasThis && !isInstantiate) ? 1 : 0); i < imax; i++) { - EvaluationStackOperation.RecycleObject(managedStack[pArg - call.evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[pArg - call.evaluationStackBase]); managedStack[pArg - call.evaluationStackBase] = null; pArg++; } diff --git a/Source/VSProj/Src/Core/StackOperation.cs b/Source/VSProj/Src/Core/StackOperation.cs index da39fac..ff9f74f 100644 --- a/Source/VSProj/Src/Core/StackOperation.cs +++ b/Source/VSProj/Src/Core/StackOperation.cs @@ -68,21 +68,21 @@ public ThreadStackInfo() //This is a known limitation of the liveness check, as the we don't handle thread static or //context static variables as roots when performing the collection. //The crash will happen in mono_unity_liveness_calculation_from_statics - //[ThreadStatic] - //internal static ThreadStackInfo Stack = null; + [ThreadStatic] + private static ThreadStackInfo stack = null; - static LocalDataStoreSlot localSlot = Thread.AllocateDataSlot(); + //static LocalDataStoreSlot localSlot = Thread.AllocateDataSlot(); internal static ThreadStackInfo Stack { get { - var stack = Thread.GetData(localSlot) as ThreadStackInfo; + //var stack = Thread.GetData(localSlot) as ThreadStackInfo; if (stack == null) { - VirtualMachine._Info("create thread stack"); + //VirtualMachine._Info("create thread stack"); stack = new ThreadStackInfo(); - Thread.SetData(localSlot, stack); + //Thread.SetData(localSlot, stack); } return stack; @@ -94,7 +94,7 @@ unsafe public static class EvaluationStackOperation { internal static void UnboxPrimitive(Value* evaluationStackPointer, object obj, Type type) { - if (obj.GetType().IsEnum) + if (BoxUtils.GetTypeIsEnum(obj.GetType())) { obj = Convert.ChangeType(obj, type); } @@ -236,7 +236,7 @@ internal static void mSet(bool isArray, object root, object val, int layer, int[ //VirtualMachine._Info("set1 " + val.GetType() + " to " + fieldInfo + " of " + root.GetType() // + ", root.hc = " + root.GetHashCode()); fieldInfo.SetValue(root, val); - EvaluationStackOperation.RecycleObject(val); + BoxUtils.RecycleObject(val); } } } @@ -254,7 +254,7 @@ internal static void mSet(bool isArray, object root, object val, int layer, int[ else { fieldInfo.SetValue(parent, val); - EvaluationStackOperation.RecycleObject(val); + BoxUtils.RecycleObject(val); } //VirtualMachine._Info("set2 " + val.GetType() + " to " + fieldInfo + " of " + parent.GetType()); @@ -263,8 +263,46 @@ internal static void mSet(bool isArray, object root, object val, int layer, int[ } } + private static Dictionary readonlyStaticFieldCache = new Dictionary(); + private static HashSet readonlyStaticObjectCache = new HashSet(); + public static object GetStaticValueFromeCache(FieldInfo fi) + { + if (BoxUtils.GetTypeIsValueType(fi.FieldType) && (fi.IsInitOnly || fi.IsLiteral)) + { + object result = null; + lock (readonlyStaticFieldCache) + { + if (!readonlyStaticFieldCache.TryGetValue(fi, out result)) + { + result = fi.GetValue(null); + readonlyStaticFieldCache.Add(fi, result); + readonlyStaticObjectCache.Add(result); + } + } + + return result; + } + + return fi.GetValue(null); + } + + private static Type intType = typeof(int); + private static Type boolType = typeof(bool); + private static Type sbyteType = typeof(sbyte); + private static Type byteType = typeof(byte); + private static Type charType = typeof(char); + private static Type shortType = typeof(short); + private static Type ushortType = typeof(ushort); + private static Type uintType = typeof(uint); + private static Type longType = typeof(long); + private static Type ulongType = typeof(ulong); + private static Type IntPtrType = typeof(IntPtr); + private static Type UIntPtrType = typeof(UIntPtr); + private static Type floatType = typeof(float); + private static Type doubleType = typeof(double); + // #lizard forgives - internal static unsafe object ToObject(Value* evaluationStackBase, Value* evaluationStackPointer, + public static unsafe object ToObject(Value* evaluationStackBase, Value* evaluationStackPointer, object[] managedStack, Type type, VirtualMachine virtualMachine, bool valueTypeClone = true) { //未初始化的local引用可能作为out参数反射调用 @@ -274,49 +312,49 @@ internal static unsafe object ToObject(Value* evaluationStackBase, Value* evalua case ValueType.Integer: { int i = evaluationStackPointer->Value1; - if (type == typeof(int)) + if (type == intType) { - var ret = BoxValueToObject(i); + var ret = BoxUtils.BoxObject(i, true); return ret; } - else if (type == typeof(bool)) + else if (type == boolType) { - var ret = BoxValueToObject(i == 1); + var ret = BoxUtils.BoxObject(i == 1, true); return ret; } - else if (type == typeof(sbyte)) + else if (type == byteType) { - var ret = BoxValueToObject((sbyte)i); + var ret = BoxUtils.BoxObject((byte)i, true); return ret; } - else if (type == typeof(byte)) + else if (BoxUtils.GetTypeIsEnum(type)) { - var ret = BoxValueToObject((byte)i); - return ret; + return BoxUtils.BoxEnumObject(type, i); } - else if (type == typeof(char)) + else if (type == charType) { - var ret = BoxValueToObject((char)i); + var ret = BoxUtils.BoxObject((char)i, true); return ret; } - else if (type == typeof(short)) + else if (type == uintType) { - var ret = BoxValueToObject((short)i); + var ret = BoxUtils.BoxObject((uint)i, true); return ret; } - else if (type == typeof(ushort)) + else if (type == shortType) { - var ret = BoxValueToObject((ushort)i); + var ret = BoxUtils.BoxObject((short)i, true); return ret; } - else if (type == typeof(uint)) + else if (type == ushortType) { - var ret = BoxValueToObject((uint)i); + var ret = BoxUtils.BoxObject((ushort)i, true); return ret; } - else if (type.IsEnum) + else if (type == sbyteType) { - return CreateEnumValue(type, i); + var ret = BoxUtils.BoxObject((sbyte)i, true); + return ret; } else return null; @@ -324,29 +362,29 @@ internal static unsafe object ToObject(Value* evaluationStackBase, Value* evalua case ValueType.Long: { long l = *(long*)&evaluationStackPointer->Value1; - if (type == typeof(long)) + if (type == longType) { - var ret = BoxValueToObject((long)l); + var ret = BoxUtils.BoxObject((long)l, true); return ret; } - else if (type == typeof(ulong)) + else if (type == ulongType) { - var ret = BoxValueToObject((ulong)l); + var ret = BoxUtils.BoxObject((ulong)l, true); return ret; } - else if (type == typeof(IntPtr)) + else if (type == IntPtrType) { - var ret = BoxValueToObject(new IntPtr(l)); + var ret = BoxUtils.BoxObject(new IntPtr(l), true); return ret; } - else if (type == typeof(UIntPtr)) + else if (type == UIntPtrType) { - var ret = BoxValueToObject(new UIntPtr((ulong)l)); + var ret = BoxUtils.BoxObject(new UIntPtr((ulong)l), true); return ret; } - else if (type.IsEnum) + else if (BoxUtils.GetTypeIsEnum(type)) { - return CreateEnumValue(type, l); + return BoxUtils.BoxEnumObject(type, l); } else { @@ -355,9 +393,9 @@ internal static unsafe object ToObject(Value* evaluationStackBase, Value* evalua } case ValueType.Float: { - if (type == typeof(float)) + if (type == floatType) { - var ret = BoxValueToObject(*(float*)&evaluationStackPointer->Value1); + var ret = BoxUtils.BoxObject(*(float*)&evaluationStackPointer->Value1, true); return ret; } else @@ -367,9 +405,9 @@ internal static unsafe object ToObject(Value* evaluationStackBase, Value* evalua } case ValueType.Double: { - if (type == typeof(double)) + if (type == doubleType) { - var ret = BoxValueToObject(*(double*)&evaluationStackPointer->Value1); + var ret = BoxUtils.BoxObject(*(double*)&evaluationStackPointer->Value1, true); return ret; } else @@ -382,7 +420,7 @@ internal static unsafe object ToObject(Value* evaluationStackBase, Value* evalua case ValueType.ValueType: if (valueTypeClone && managedStack[evaluationStackPointer->Value1] != null) { - return CloneObject(managedStack[evaluationStackPointer->Value1]); + return BoxUtils.CloneObject(managedStack[evaluationStackPointer->Value1]); } else { @@ -445,7 +483,7 @@ internal static unsafe object ToObject(Value* evaluationStackBase, Value* evalua return virtualMachine.newFieldInfos[fieldIndex].GetValue(null); } - return fieldInfo.GetValue(null); + return GetStaticValueFromeCache(fieldInfo); } else { @@ -457,350 +495,22 @@ internal static unsafe object ToObject(Value* evaluationStackBase, Value* evalua throw new NotImplementedException("get obj of " + evaluationStackPointer->Type); } } + + - static Dictionary> cacheDict = new Dictionary>(); - private static readonly int objOffset = 2 * IntPtr.Size; - - public static unsafe object CreateBoxValue(Type t, byte* source, int len) - { - if (!IsUnmanaged(t)) return Activator.CreateInstance(t); - - Stack cache; - lock (cacheDict) - { - if (!cacheDict.TryGetValue(t, out cache)) - { - cache = new Stack(4); - cacheDict[t] = cache; - } - } - - object result = null; - lock (cache) - { - if (cache.Count <= 0) - { - result = Activator.CreateInstance(t); - } - else - { - result = cache.Pop(); - } - } - - ulong gcHandle; - - byte* b = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(result, out gcHandle); - UnsafeUtility.MemCpy((void*)(b + objOffset), source, len); - UnsafeUtility.ReleaseGCObject(gcHandle); - - return result; - } - - public static unsafe object CreateBoxValue(Type t) + public static void PushValue(Value* evaluationStackBase, Value* evaluationStackPointer, + object[] managedStack, T v) { - if (!IsUnmanaged(t)) return Activator.CreateInstance(t); - - Stack cache; - lock (cacheDict) - { - if (!cacheDict.TryGetValue(t, out cache)) - { - cache = new Stack(4); - cacheDict[t] = cache; - } - } - - object result = null; - lock (cache) - { - if (cache.Count <= 0) - { - result = Activator.CreateInstance(t); - } - else - { - result = cache.Pop(); - } - } - - // nullable - if (result == null) return result; - - ulong gcHandle; - byte* p = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(result, out gcHandle); - int size = UnsafeUtility.SizeOf(t); - UnsafeUtility.MemClear(p+objOffset, size); - UnsafeUtility.ReleaseGCObject(gcHandle); - - return result; - } - - public static unsafe object CreateEnumValue(Type t, int value) - { - Stack cache; - lock (cacheDict) - { - if (!cacheDict.TryGetValue(t, out cache)) - { - cache = new Stack(4); - cacheDict[t] = cache; - } - } - - object result = null; - lock (cache) - { - result = cache.Count <= 0 ? Enum.ToObject(t, value) : cache.Pop(); - } - - ulong gcHandle; - byte* b = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(result, out gcHandle); - *(int*)(b + objOffset) = value; - UnsafeUtility.ReleaseGCObject(gcHandle); - - return result; - } - - public static unsafe object CreateEnumValue(Type t, long value) - { - Stack cache; - lock (cacheDict) - { - if (!cacheDict.TryGetValue(t, out cache)) - { - cache = new Stack(4); - cacheDict[t] = cache; - } - } - - object result = null; - lock (cache) - { - result = cache.Count <= 0 ? Activator.CreateInstance(t) : cache.Pop(); - } - - ulong gcHandle; - byte* b = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(result, out gcHandle); - *(long*)(b + objOffset) = value; - UnsafeUtility.ReleaseGCObject(gcHandle); - - return result; - } - - public static unsafe object BoxValueToObject(T value) where T : struct - { - if (!IsUnmanaged(typeof(T))) return value; - - Stack cache; - lock (cacheDict) - { - if (!cacheDict.TryGetValue(typeof(T), out cache)) - { - cache = new Stack(4); - cacheDict[typeof(T)] = cache; - } - } - - object result = null; - lock (cache) - { - if (cache.Count <= 0) - { - result = value; - return result; - } - else - { - result = cache.Pop(); - } - } - - ulong gcHandle; - - byte* source = (byte*)UnsafeUtility.AddressOf(ref value); - int len = UnsafeUtility.SizeOf(typeof(T)); - - byte* b = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(result, out gcHandle); - UnsafeUtility.MemCpy((void*)(b + objOffset), source, len); - UnsafeUtility.ReleaseGCObject(gcHandle); - - return result; - } - - public static unsafe object CloneObject(object value) - { - if (value == null) return null; - Type t = value.GetType(); - if (!t.IsValueType) return value; - - if (!IsUnmanaged(t)) return ObjectClone.Clone(value); - - Stack cache; - lock (cacheDict) - { - if (!cacheDict.TryGetValue(t, out cache)) - { - cache = new Stack(4); - cacheDict[t] = cache; - } - } - - object result = null; - lock (cache) - { - if (cache.Count > 0) - { - result = cache.Pop(); - - int len = UnsafeUtility.SizeOf(t); - ulong gcHandle = 0; - byte* source = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(value, out gcHandle) + objOffset; - UnsafeUtility.ReleaseGCObject(gcHandle); - - byte* b = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(result, out gcHandle); - UnsafeUtility.MemCpy((void*)(b + objOffset), source, len); - UnsafeUtility.ReleaseGCObject(gcHandle); - } - else - { - result = ObjectClone.Clone(value); - } - } - - return result; - } - - public static void RecycleObject(object value) - { - if (value == null) return; - Type t = value.GetType(); - if (!IsUnmanaged(t)) return; - - Stack cache; - lock (cacheDict) - { - if (!cacheDict.TryGetValue(t, out cache)) - { - cache = new Stack(8); - cacheDict[t] = cache; - } - } - - - lock (cache) - { - // 防止回收过多导致泄漏 - if (cache.Count > 32) return; - - // TODO 去掉这个遍历查找 - foreach (var item in cache) - { - if (item == value) - { - //UnityEngine.Debug.LogError($"{item.GetType()}:{item} recycle again"); - return; - } - } - - cache.Push(value); - } - - } - - public static string BoxObjectInfo() - { - StringBuilder sb = new StringBuilder(); - - lock (cacheDict) - { - foreach (var item in cacheDict) - { - sb.Append(item.Key.ToString()); - sb.Append(":"); - sb.AppendLine(item.Value.Count.ToString()); - } - } - - return sb.ToString(); - } - - public static void PushValueUnmanaged(Value* evaluationStackBase, Value* evaluationStackPointer, - object[] managedStack, T v) where T : struct - { - var o = BoxValueToObject(v); + var o = BoxUtils.BoxObject(v, true); PushObject(evaluationStackBase, evaluationStackPointer, managedStack, o, typeof(T)); } - private static Dictionary offsetCache = new Dictionary(); - - private static int GetOffsetByFieldInfo(FieldInfo f) - { - if (f == null) return 0; - - int ret = 0; - lock (offsetCache) - { - if (!offsetCache.TryGetValue(f, out ret)) - { - ret = UnsafeUtility.GetFieldOffset(f); - offsetCache.Add(f, ret); - } - } - - return ret; - } - - private static Dictionary unmanagedCache = new Dictionary(); - // unmanaged and not nullable - private static bool IsUnmanaged(Type t) - { - if (t == null) return false; - bool ret = false; - lock (unmanagedCache) - { - if (!unmanagedCache.TryGetValue(t, out ret)) - { - ret = UnsafeUtility.IsUnmanaged(t) && !(t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>)); - unmanagedCache.Add(t, ret); - } - } - - return ret; - } - public static void PushField(Value* evaluationStackBase, Value* evaluationStackPointer, object[] managedStack, object obj, FieldInfo fieldInfo) { Type t = fieldInfo.FieldType; - if (IsUnmanaged(t)) - { - ulong gcHandle; - byte* ptr = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(obj, out gcHandle); - int offset = GetOffsetByFieldInfo(fieldInfo); - - if (t.IsEnum) - { - var underlyingType = Enum.GetUnderlyingType(t); - int size = UnsafeUtility.SizeOf(underlyingType); - object retV = CreateBoxValue(underlyingType, ptr + offset, size); - - PushObject(evaluationStackBase, evaluationStackPointer, managedStack, retV, underlyingType); - } - else - { - int size = UnsafeUtility.SizeOf(t); - object retV = CreateBoxValue(t, ptr + offset, size); - PushObject(evaluationStackBase, evaluationStackPointer, managedStack, retV, t); - } - - UnsafeUtility.ReleaseGCObject(gcHandle); - } - else - { - object ret = fieldInfo.GetValue(obj); - PushObject(evaluationStackBase, evaluationStackPointer, managedStack, ret, t); - } + object ret = BoxUtils.GetFieldValue(obj, fieldInfo); + PushObject(evaluationStackBase, evaluationStackPointer, managedStack, ret, t); } public static void PushObject(Value* evaluationStackBase, Value* evaluationStackPointer, @@ -808,20 +518,18 @@ public static void PushObject(Value* evaluationStackBase, Value* evaluationStack { if (obj != null) { - if (type.IsPrimitive) + if (BoxUtils.GetTypeIsPrimitive(type)) { UnboxPrimitive(evaluationStackPointer, obj, type); - RecycleObject(obj); + BoxUtils.RecycleObject(obj); return; } - else if (type.IsEnum) + else if (BoxUtils.GetTypeIsEnum(type)) { - var underlyingType = Enum.GetUnderlyingType(type); - ulong gcHandle = 0; - byte* b = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(obj, out gcHandle)+ objOffset; - UnsafeUtility.ReleaseGCObject(gcHandle); + int size = UnsafeUtility.SizeOf(type); + byte* b = (byte*)BoxUtils.GetObjectAddr(obj)+ BoxUtils.OBJ_OFFSET; - if (underlyingType == typeof(long) || underlyingType == typeof(ulong)) + if (size == 8) { evaluationStackPointer->Type = ValueType.Long; *(long*)(&evaluationStackPointer->Value1) = *(long*)b; @@ -832,17 +540,18 @@ public static void PushObject(Value* evaluationStackBase, Value* evaluationStack evaluationStackPointer->Value1 = *(int*)b; } - RecycleObject(obj); + BoxUtils.RecycleObject(obj); return; } } int pos = (int)(evaluationStackPointer - evaluationStackBase); evaluationStackPointer->Value1 = pos; - RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = obj; - evaluationStackPointer->Type = (obj != null && type.IsValueType) ? ValueType.ValueType : ValueType.Object; + evaluationStackPointer->Type = (obj != null && BoxUtils.GetTypeIsValueType(type)) + ? ValueType.ValueType : ValueType.Object; } @@ -972,7 +681,7 @@ public static void UpdateReference(Value* evaluationStackBase, Value* evaluation // + managedStack[evaluationStackPointer->Value1]); //VirtualMachine._Info("update ref obj idx: " + evaluationStackPointer->Value1); fieldInfo.SetValue(managedStack[evaluationStackPointer->Value1], obj); - EvaluationStackOperation.RecycleObject(obj); + BoxUtils.RecycleObject(obj); } } else @@ -999,7 +708,7 @@ public static void UpdateReference(Value* evaluationStackBase, Value* evaluation else { fieldInfo.SetValue(null, obj); - EvaluationStackOperation.RecycleObject(obj); + BoxUtils.RecycleObject(obj); } } else @@ -1229,14 +938,14 @@ public void PushObject(object o) int pos = (int)(currentTop - evaluationStackBase); currentTop->Type = ValueType.Object; currentTop->Value1 = pos; - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = o; currentTop++; } public void PushValueUnmanaged(T v) where T : struct { - var o = EvaluationStackOperation.BoxValueToObject(v); + var o = BoxUtils.BoxObject(v, true); PushObject(o); } @@ -1245,11 +954,18 @@ public void PushValueType(object o) int pos = (int)(currentTop - evaluationStackBase); currentTop->Type = ValueType.ValueType; currentTop->Value1 = pos; - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = o; currentTop++; } + public object GetEveryObject(VirtualMachine vm, Type rawType, int offset = 0) + { + object obj = EvaluationStackOperation.ToObject(evaluationStackBase, evaluationStackBase + offset, managedStack, + rawType, vm); + return obj; + } + public object GetObject(int offset = 0) { var ptr = argumentBase + offset; @@ -1258,10 +974,10 @@ public object GetObject(int offset = 0) // 因为拿出去之后就被unbox掉了所以这里可以回收 if (ptr->Type == ValueType.ValueType) { - EvaluationStackOperation.RecycleObject(ret); + BoxUtils.RecycleObject(ret); } - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; return ret; @@ -1301,7 +1017,7 @@ public void PushObjectAsResult(object obj, Type type) //反射专用 public void PushValueUnmanagedAsResult(T v) where T : struct//反射专用 { - EvaluationStackOperation.PushValueUnmanaged(evaluationStackBase, argumentBase, managedStack, v); + EvaluationStackOperation.PushValue(evaluationStackBase, argumentBase, managedStack, v); currentTop = argumentBase + 1; } diff --git a/Source/VSProj/Src/Core/VirtualMachine.cs b/Source/VSProj/Src/Core/VirtualMachine.cs index 052c507..cafa080 100644 --- a/Source/VSProj/Src/Core/VirtualMachine.cs +++ b/Source/VSProj/Src/Core/VirtualMachine.cs @@ -74,7 +74,7 @@ public class NewFieldInfo private object SetDefaultValue(object obj) { - if(FieldType.IsValueType) + if(BoxUtils.GetTypeIsValueType(FieldType)) { var ret = Activator.CreateInstance(FieldType); SetValue(obj, ret); @@ -198,6 +198,7 @@ unsafe public class VirtualMachine ExternInvoker[] externInvokers; MethodBase[] externMethods; + bool?[] externIsNewDelegate; Type[] externTypes; @@ -253,7 +254,8 @@ public MethodBase[] ExternMethods set { externMethods = value; - externInvokers = new ExternInvoker[externMethods.Length]; + externInvokers = new ExternInvoker[externMethods.Length]; + externIsNewDelegate = new bool?[externMethods.Length]; } } @@ -390,15 +392,15 @@ void store(Value* stackBase, Value* dst, Value* src, object[] managedStack) if (dst->Type >= ValueType.Object) { var obj = (dst->Type == ValueType.ValueType && managedStack[src->Value1] != null) //Nullable box后可能为空 - ? EvaluationStackOperation.CloneObject(managedStack[src->Value1]) + ? BoxUtils.CloneObject(managedStack[src->Value1]) : managedStack[src->Value1]; var dstPos = dst->Value1 = (int)(dst - stackBase); - EvaluationStackOperation.RecycleObject(managedStack[dstPos]); + BoxUtils.RecycleObject(managedStack[dstPos]); managedStack[dstPos] = obj; } else if (dst->Type == ValueType.ChainFieldReference) { - EvaluationStackOperation.RecycleObject(managedStack[dst - stackBase]); + BoxUtils.RecycleObject(managedStack[dst - stackBase]); managedStack[dst - stackBase] = managedStack[src - stackBase]; } } @@ -413,15 +415,15 @@ void copy(Value* stackBase, Value* dst, Value* src, object[] managedStack) { object obj = null; if (managedStack[src->Value1] != null) //Nullable box后可能为空 - obj = EvaluationStackOperation.CloneObject(managedStack[src->Value1]); + obj = BoxUtils.CloneObject(managedStack[src->Value1]); var dstPos = dst->Value1 = (int)(dst - stackBase); - EvaluationStackOperation.RecycleObject(managedStack[dstPos]); + BoxUtils.RecycleObject(managedStack[dstPos]); managedStack[dstPos] = obj; } else if (dst->Type == ValueType.ChainFieldReference) { - EvaluationStackOperation.RecycleObject(managedStack[dst - stackBase]); + BoxUtils.RecycleObject(managedStack[dst - stackBase]); managedStack[dst - stackBase] = managedStack[src - stackBase]; } } @@ -859,12 +861,19 @@ public static void _Info(string a) if (code == Code.Newobj) { var method = externMethods[methodId]; - if (method.DeclaringType.BaseType == typeof(MulticastDelegate)) // create delegate + bool? isDelegate = externIsNewDelegate[methodId]; + if (isDelegate == null) + { + isDelegate = method.DeclaringType.BaseType == typeof(MulticastDelegate); + externIsNewDelegate[methodId] = isDelegate; + } + + if (isDelegate == true) // create delegate { var pm = evaluationStackPointer - 1; var po = pm - 1; var o = managedStack[po->Value1]; - EvaluationStackOperation.RecycleObject(managedStack[po - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[po - evaluationStackBase]); managedStack[po - evaluationStackBase] = null; Delegate del = null; if (pm->Type == ValueType.Integer) @@ -896,12 +905,12 @@ public static void _Info(string a) else { var mi = managedStack[pm->Value1] as MethodInfo; - EvaluationStackOperation.RecycleObject(managedStack[pm - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[pm - evaluationStackBase]); managedStack[pm - evaluationStackBase] = null; del = Delegate.CreateDelegate(method.DeclaringType, o, mi); } po->Value1 = (int)(po - evaluationStackBase); - EvaluationStackOperation.RecycleObject(managedStack[po->Value1]); + BoxUtils.RecycleObject(managedStack[po->Value1]); managedStack[po->Value1] = del; evaluationStackPointer = pm; break; @@ -911,16 +920,17 @@ public static void _Info(string a) var externInvokeFunc = externInvokers[methodId]; if (externInvokeFunc == null) { - if (externInvokersHandle != null && externInvokersHandle(externMethods[methodId], out externInvokeFunc)) - { - externInvokers[methodId] = externInvokeFunc; - } - else - { - externInvokers[methodId] = externInvokeFunc - = (new ReflectionMethodInvoker(externMethods[methodId])).Invoke; - } - + externInvokers[methodId] = externInvokeFunc + = (new ReflectionMethodInvoker(externMethods[methodId])).Invoke; + // if (externInvokersHandle != null && externInvokersHandle(externMethods[methodId], out externInvokeFunc)) + // { + // externInvokers[methodId] = externInvokeFunc; + // } + // else + // { + // externInvokers[methodId] = externInvokeFunc + // = (new ReflectionMethodInvoker(externMethods[methodId])).Invoke; + // } } //Info("call extern: " + externMethods[methodId]); var top = evaluationStackPointer - paramCount; @@ -1010,7 +1020,7 @@ public static void _Info(string a) int resultPos = argumentBase->Value1; if (resultPos != argumentPos) { - EvaluationStackOperation.RecycleObject(managedStack[argumentPos]); + BoxUtils.RecycleObject(managedStack[argumentPos]); managedStack[argumentPos] = managedStack[resultPos]; //managedStack[resultPos] = null; } @@ -1018,7 +1028,7 @@ public static void _Info(string a) } for (int i = 0; i < evaluationStackPointer - evaluationStackBase - 1; i++) { - EvaluationStackOperation.RecycleObject(managedStack[i + argumentPos + 1]); + BoxUtils.RecycleObject(managedStack[i + argumentPos + 1]); managedStack[i + argumentPos + 1] = null; } @@ -1028,7 +1038,7 @@ public static void _Info(string a) { for (int i = 0; i < evaluationStackPointer - evaluationStackBase; i++) { - EvaluationStackOperation.RecycleObject(managedStack[i + argumentPos]); + BoxUtils.RecycleObject(managedStack[i + argumentPos]); managedStack[i + argumentPos] = null; } return argumentBase; @@ -1042,7 +1052,7 @@ public static void _Info(string a) store(evaluationStackBase, localBase + pc->Operand, evaluationStackPointer, managedStack); //print("+++after stloc", locs + ins.Operand); - EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[evaluationStackPointer - evaluationStackBase]); managedStack[evaluationStackPointer - evaluationStackBase] = null; } break; @@ -1128,11 +1138,11 @@ public static void _Info(string a) break; case ValueType.Object: case ValueType.ValueType: - EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer->Value1]); + BoxUtils.RecycleObject(managedStack[evaluationStackPointer->Value1]); transfer = managedStack[evaluationStackPointer->Value1] == null; break; } - EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[evaluationStackPointer - evaluationStackBase]); managedStack[evaluationStackPointer - evaluationStackBase] = null; if (transfer) @@ -1180,7 +1190,7 @@ public static void _Info(string a) object value = EvaluationStackOperation.ToObject(evaluationStackBase, evaluationStackPointer - 1, managedStack, fieldType, this); fieldInfo.SetValue(obj, value); - EvaluationStackOperation.RecycleObject(value); + BoxUtils.RecycleObject(value); } else { @@ -1194,15 +1204,15 @@ public static void _Info(string a) || ptr->Type == ValueType.ChainFieldReference || ptr->Type == ValueType.StaticFieldReference || ptr->Type == ValueType.ArrayReference) - && declaringType.IsValueType) + && BoxUtils.GetTypeIsValueType(declaringType)) { EvaluationStackOperation.UpdateReference(evaluationStackBase, ptr, managedStack, obj, this, declaringType); } - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; - EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer - 1 - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[evaluationStackPointer - 1 - evaluationStackBase]); managedStack[evaluationStackPointer - 1 - evaluationStackBase] = null; evaluationStackPointer = ptr; } @@ -1236,7 +1246,7 @@ public static void _Info(string a) break; } - EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[evaluationStackPointer - evaluationStackBase]); managedStack[evaluationStackPointer - evaluationStackBase] = null; if (transfer) { @@ -1283,7 +1293,7 @@ public static void _Info(string a) case Code.Ldnull://1.203347% { var pos = (int)(evaluationStackPointer - evaluationStackBase); - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = null; evaluationStackPointer->Value1 = pos; evaluationStackPointer->Type = ValueType.Object; @@ -1322,7 +1332,7 @@ public static void _Info(string a) else { fieldType = fieldInfo.FieldType; - fieldValue = fieldInfo.GetValue(null); + fieldValue = EvaluationStackOperation.GetStaticValueFromeCache(fieldInfo); } EvaluationStackOperation.PushObject(evaluationStackBase, evaluationStackPointer, @@ -1397,7 +1407,7 @@ public static void _Info(string a) { var ptr = evaluationStackPointer - 1; Array arr = managedStack[ptr->Value1] as Array; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; ptr->Type = ValueType.Integer; ptr->Value1 = arr.Length; @@ -1444,9 +1454,9 @@ public static void _Info(string a) throw new ArrayTypeMismatchException(); } arr[idx] = managedStack[valPtr->Value1]; - EvaluationStackOperation.RecycleObject(managedStack[arrPtr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[arrPtr - evaluationStackBase]); managedStack[arrPtr - evaluationStackBase] = null; //清理,如果有的话 - EvaluationStackOperation.RecycleObject(managedStack[valPtr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[valPtr - evaluationStackBase]); managedStack[valPtr - evaluationStackBase] = null; evaluationStackPointer = arrPtr; } @@ -1454,7 +1464,7 @@ public static void _Info(string a) case Code.Pop://0.4614846% { evaluationStackPointer--; - EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[evaluationStackPointer - evaluationStackBase]); managedStack[evaluationStackPointer - evaluationStackBase] = null; ; } break; @@ -1484,7 +1494,7 @@ public static void _Info(string a) var type = externTypes[pc->Operand]; var ptr = evaluationStackPointer - 1; int pos = (int)(ptr - evaluationStackBase); - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = Array.CreateInstance(type, ptr->Value1); ptr->Type = ValueType.Object; ptr->Value1 = pos; @@ -1575,7 +1585,7 @@ public static void _Info(string a) int idx = (evaluationStackPointer - 1)->Value1; var arrPos = arrPtr - evaluationStackBase; var arr = managedStack[arrPtr->Value1] as object[]; - EvaluationStackOperation.RecycleObject(managedStack[arrPos] ); + BoxUtils.RecycleObject(managedStack[arrPos] ); managedStack[arrPos] = arr[idx]; arrPtr->Value1 = (int)arrPos; evaluationStackPointer = evaluationStackPointer - 1; @@ -1600,24 +1610,24 @@ public static void _Info(string a) case ValueType.Object: break; case ValueType.Integer: - if (type.IsEnum) + if (BoxUtils.GetTypeIsEnum(type)) { - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = Enum.ToObject(type, ptr->Value1); } else if (type == typeof(int)) { - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = ptr->Value1; } else if (type == typeof(uint)) { - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = (uint)ptr->Value1; } else { - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = Convert.ChangeType(ptr->Value1, type); } ptr->Value1 = pos; @@ -1625,43 +1635,43 @@ public static void _Info(string a) case ValueType.Long: if (type == typeof(long)) { - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = *(long*)&ptr->Value1; } else if (type == typeof(ulong)) { - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = *(ulong*)&ptr->Value1; } - else if (type.IsEnum) + else if (BoxUtils.GetTypeIsEnum(type)) { - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = Enum.ToObject(type, *(long*)&ptr->Value1); } else if (type == typeof(IntPtr)) { - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = new IntPtr(*(long*)&ptr->Value1); } else if (type == typeof(UIntPtr)) { - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = new UIntPtr(*(ulong*)&ptr->Value1); } else { - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = Convert.ChangeType(*(long*)&ptr->Value1, type); } ptr->Value1 = pos; break; case ValueType.Float: - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = *(float*)&ptr->Value1; ptr->Value1 = pos; break; case ValueType.Double: - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = *(double*)&ptr->Value1; ptr->Value1 = pos; break; @@ -1684,13 +1694,13 @@ public static void _Info(string a) ptr->Value1 = pos; if (obj == null) { - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = null; } else { bool canAssign = type.IsAssignableFrom(obj.GetType()); - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = canAssign ? obj : null; if (pc->Operand < 0 && canAssign) @@ -1718,7 +1728,7 @@ public static void _Info(string a) if (!canAssign) { - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = null; } } @@ -1823,7 +1833,7 @@ public static void _Info(string a) int exceptionPos = (int)(evaluationStackPointer - evaluationStackBase - 1); var exception = managedStack[(evaluationStackPointer - 1)->Value1] as Exception; - EvaluationStackOperation.RecycleObject(managedStack[exceptionPos]); + BoxUtils.RecycleObject(managedStack[exceptionPos]); managedStack[exceptionPos] = null; evaluationStackPointer--; throw exception; @@ -1898,7 +1908,7 @@ public static void _Info(string a) else { fieldInfo.SetValue(null, value); - EvaluationStackOperation.RecycleObject(value); + BoxUtils.RecycleObject(value); } } else @@ -1912,7 +1922,7 @@ public static void _Info(string a) //_Info("store static field " + fieldIndex + " : " + staticFields[fieldIndex]); } - EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer - 1 - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[evaluationStackPointer - 1 - evaluationStackBase]); managedStack[evaluationStackPointer - 1 - evaluationStackBase] = null; evaluationStackPointer--; } @@ -1943,7 +1953,7 @@ public static void _Info(string a) if ((ptr->Type == ValueType.FieldReference || ptr->Type == ValueType.ChainFieldReference || ptr->Type == ValueType.ArrayReference) && pc->Operand >= 0 - && fieldType.IsValueType) + && BoxUtils.GetTypeIsValueType(fieldType)) { // if (pc->Operand < 0) // { @@ -1965,7 +1975,7 @@ public static void _Info(string a) var newFieldIdList = new int[fieldIdList.Length + 1]; Array.Copy(fieldIdList, newFieldIdList, fieldIdList.Length); newFieldIdList[fieldIdList.Length] = pc->Operand; - EvaluationStackOperation.RecycleObject(managedStack[offset]); + BoxUtils.RecycleObject(managedStack[offset]); managedStack[offset] = new FieldAddr() { Object = fieldAddr.Object, @@ -1985,7 +1995,7 @@ public static void _Info(string a) Object = managedStack[ptr->Value1], FieldIdList = new int[] { ptr->Value2, pc->Operand } }; - EvaluationStackOperation.RecycleObject(managedStack[offset]); + BoxUtils.RecycleObject(managedStack[offset]); managedStack[offset] = fieldAddr; ptr->Value2 = ptr->Type == ValueType.FieldReference ? -1 : -2; } @@ -1999,7 +2009,7 @@ public static void _Info(string a) ptr->Type = ValueType.FieldReference; ptr->Value1 = (int)(ptr - evaluationStackBase); - EvaluationStackOperation.RecycleObject(managedStack[ptr->Value1]); + BoxUtils.RecycleObject(managedStack[ptr->Value1]); managedStack[ptr->Value1] = obj; ptr->Value2 = pc->Operand; //_Info("sigle ref type = " + obj.GetType() + ",hc=" + obj.GetHashCode() @@ -2075,7 +2085,7 @@ public static void _Info(string a) evaluationStackPointer--; store(evaluationStackBase, argumentBase + pc->Operand, evaluationStackPointer, managedStack); - EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[evaluationStackPointer - evaluationStackBase]); managedStack[evaluationStackPointer - evaluationStackBase] = null; ; } break; @@ -2092,9 +2102,9 @@ public static void _Info(string a) var lpos = (int)(lhs - evaluationStackBase); var rpos = (int)(rhs - evaluationStackBase); eq = ReferenceEquals(managedStack[lhs->Value1], managedStack[rhs->Value1]); - EvaluationStackOperation.RecycleObject(managedStack[lpos]); + BoxUtils.RecycleObject(managedStack[lpos]); managedStack[lpos] = null; - EvaluationStackOperation.RecycleObject(managedStack[rpos]); + BoxUtils.RecycleObject(managedStack[rpos]); managedStack[rpos] = null; } else @@ -2216,7 +2226,7 @@ public static void _Info(string a) //managedStack[ptr->Value1] = null; if (src->Type >= ValueType.Object) { - EvaluationStackOperation.RecycleObject(managedStack[src - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[src - evaluationStackBase]); managedStack[src - evaluationStackBase] = null; } evaluationStackPointer = ptr; @@ -2225,13 +2235,13 @@ public static void _Info(string a) case ValueType.ArrayReference: { var obj = managedStack[ptr->Value1]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; int idx = ptr->Value2; arraySet(obj, idx, src, managedStack, evaluationStackBase); if (src->Type >= ValueType.Object) { - EvaluationStackOperation.RecycleObject(managedStack[src - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[src - evaluationStackBase]); managedStack[src - evaluationStackBase] = null; } evaluationStackPointer = ptr; @@ -2264,7 +2274,7 @@ public static void _Info(string a) else { fieldInfo.SetValue(null, val); - EvaluationStackOperation.RecycleObject(val); + BoxUtils.RecycleObject(val); } } else @@ -2276,7 +2286,7 @@ public static void _Info(string a) } if (src->Type >= ValueType.Object) { - EvaluationStackOperation.RecycleObject(managedStack[src - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[src - evaluationStackBase]); managedStack[src - evaluationStackBase] = null; } evaluationStackPointer = ptr; @@ -2290,18 +2300,18 @@ public static void _Info(string a) { int offset = (int)(des - evaluationStackBase); des->Value1 = offset; - EvaluationStackOperation.RecycleObject(managedStack[offset]); + BoxUtils.RecycleObject(managedStack[offset]); managedStack[offset] = managedStack[src->Value1]; - EvaluationStackOperation.RecycleObject(managedStack[src - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[src - evaluationStackBase]); managedStack[src - evaluationStackBase] = null; } else if (src->Type == ValueType.ValueType) { int offset = (int)(des - evaluationStackBase); des->Value1 = offset; - EvaluationStackOperation.RecycleObject(managedStack[offset]); - managedStack[offset] = EvaluationStackOperation.CloneObject(managedStack[src->Value1]); - EvaluationStackOperation.RecycleObject(managedStack[src - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[offset]); + managedStack[offset] = BoxUtils.CloneObject(managedStack[src->Value1]); + BoxUtils.RecycleObject(managedStack[src - evaluationStackBase]); managedStack[src - evaluationStackBase] = null; } //Console.WriteLine("store to stack address:" + new IntPtr(des) @@ -2388,7 +2398,7 @@ AnonymousStorey anonyObj case ValueType.ArrayReference: { var obj = managedStack[ptr->Value1]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; int idx = ptr->Value2; arrayGet(obj, idx, ptr, managedStack, evaluationStackBase); @@ -2412,7 +2422,7 @@ AnonymousStorey anonyObj else { fieldType = fieldInfo.FieldType; - value = fieldInfo.GetValue(null); + value = EvaluationStackOperation.GetStaticValueFromeCache(fieldInfo); } EvaluationStackOperation.PushObject(evaluationStackBase, ptr, @@ -2433,14 +2443,14 @@ AnonymousStorey anonyObj *ptr = *src; if (src->Type == ValueType.Object) { - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = managedStack[src->Value1]; ptr->Value1 = (int)(ptr - evaluationStackBase); } else if (src->Type == ValueType.ValueType) { managedStack[ptr - evaluationStackBase] - = EvaluationStackOperation.CloneObject(managedStack[src->Value1]); + = BoxUtils.CloneObject(managedStack[src->Value1]); ptr->Value1 = (int)(ptr - evaluationStackBase); } } @@ -2488,10 +2498,10 @@ AnonymousStorey anonyObj var ptr = evaluationStackPointer - 1; var type = externTypes[pc->Operand]; EvaluationStackOperation.UpdateReference(evaluationStackBase, ptr, managedStack, - EvaluationStackOperation.CreateBoxValue(type), this, type); + BoxUtils.CreateDefaultBoxValue(type), this, type); if (ptr->Type >= ValueType.Object) { - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; } evaluationStackPointer = ptr; @@ -2521,7 +2531,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1 - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1 - 1; var obj = managedStack[ptr->Value1]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer = ptr; byte[] byteArr = obj as byte[]; @@ -2550,7 +2560,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var obj = managedStack[ptr->Value1]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Integer; @@ -2580,17 +2590,17 @@ AnonymousStorey anonyObj var obj = managedStack[ptr->Value1]; if (ptr->Type == ValueType.Object) { - if (type.IsValueType) + if (BoxUtils.GetTypeIsValueType(type)) { if (obj == null) { throw new NullReferenceException(); } - else if(type.IsPrimitive) + else if(BoxUtils.GetTypeIsValueType(type)) { EvaluationStackOperation.UnboxPrimitive(ptr, obj, type); } - else if(type.IsEnum) + else if(BoxUtils.GetTypeIsEnum(type)) { EvaluationStackOperation.UnboxPrimitive(ptr, obj, Enum.GetUnderlyingType(type)); } @@ -2669,7 +2679,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var arr = managedStack[ptr->Value1] as int[]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Integer; @@ -2700,7 +2710,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1 - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1 - 1; var obj = managedStack[ptr->Value1]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer = ptr; int[] intArr = obj as int[]; @@ -2774,7 +2784,7 @@ AnonymousStorey anonyObj var ptr = evaluationStackPointer - 1 - lastInstruction->Operand; var obj = EvaluationStackOperation.ToObject(evaluationStackBase, ptr, managedStack, type, this); var pos = (int)(ptr - evaluationStackBase); - EvaluationStackOperation.RecycleObject(managedStack[pos]); + BoxUtils.RecycleObject(managedStack[pos]); managedStack[pos] = obj; ptr->Value1 = pos; ptr->Type = ValueType.Object; @@ -2824,7 +2834,7 @@ AnonymousStorey anonyObj { evaluationStackPointer->Type = ValueType.Object; evaluationStackPointer->Value1 = (int)(evaluationStackPointer - evaluationStackBase); - EvaluationStackOperation.RecycleObject(managedStack[evaluationStackPointer->Value1]); + BoxUtils.RecycleObject(managedStack[evaluationStackPointer->Value1]); managedStack[evaluationStackPointer->Value1] = externMethods[pc->Operand]; evaluationStackPointer++; } @@ -2851,7 +2861,7 @@ AnonymousStorey anonyObj { var src = pos - 1; pos->Value1 = (int)(pos - evaluationStackBase); - EvaluationStackOperation.RecycleObject(managedStack[pos->Value1]); + BoxUtils.RecycleObject(managedStack[pos->Value1]); managedStack[pos->Value1] = managedStack[src->Value1]; } //_Info("des t:" + pos->Type + ",v:" + pos->Value1); @@ -2864,13 +2874,13 @@ AnonymousStorey anonyObj // var dsp = pos + p; //_Info("p " + p + ":" + dsp->Type + ",v:" + dsp->Value1); //} - EvaluationStackOperation.RecycleObject(managedStack[pos->Value1]); + BoxUtils.RecycleObject(managedStack[pos->Value1]); managedStack[pos->Value1] = anonymousStorey; Execute(unmanagedCodes[anonymousStoreyInfo.CtorId], pos, managedStack, evaluationStackBase, pn + 1, anonymousStoreyInfo.CtorId); pos->Type = ValueType.Object; pos->Value1 = (int)(pos - evaluationStackBase); - EvaluationStackOperation.RecycleObject(managedStack[pos->Value1]); + BoxUtils.RecycleObject(managedStack[pos->Value1]); managedStack[pos->Value1] = anonymousStorey; evaluationStackPointer = pos + 1; } @@ -2884,9 +2894,9 @@ AnonymousStorey anonyObj var val = EvaluationStackOperation.ToObject(evaluationStackBase, valPtr, managedStack, arr.GetType().GetElementType(), this, false); arr.SetValue(val, idx); - EvaluationStackOperation.RecycleObject(managedStack[arrPtr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[arrPtr - evaluationStackBase]); managedStack[arrPtr - evaluationStackBase] = null; //清理,如果有的话 - EvaluationStackOperation.RecycleObject(managedStack[valPtr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[valPtr - evaluationStackBase]); managedStack[valPtr - evaluationStackBase] = null; evaluationStackPointer = arrPtr; } @@ -2931,7 +2941,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1 - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1 - 1; var obj = managedStack[ptr->Value1]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer = ptr; short[] shortArr = obj as short[]; @@ -3016,7 +3026,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var obj = managedStack[ptr->Value1]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Integer; @@ -3249,7 +3259,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var obj = managedStack[ptr->Value1]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Long; @@ -3323,7 +3333,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var arr = managedStack[ptr->Value1] as uint[]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Integer; @@ -3359,7 +3369,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1 - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1 - 1; var obj = managedStack[ptr->Value1]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer = ptr; long[] longArr = obj as long[]; @@ -3380,7 +3390,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var obj = managedStack[ptr->Value1]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Integer; @@ -3468,7 +3478,7 @@ AnonymousStorey anonyObj { ptr->Type = ValueType.Object; ptr->Value1 = (int)(ptr - evaluationStackBase); - EvaluationStackOperation.RecycleObject(managedStack[ptr->Value1]); + BoxUtils.RecycleObject(managedStack[ptr->Value1]); managedStack[ptr->Value1] = externMethods[pc->Operand]; } else @@ -3508,7 +3518,7 @@ AnonymousStorey anonyObj ptr->Type = ValueType.Object; ptr->Value1 = (int)(ptr - evaluationStackBase); - EvaluationStackOperation.RecycleObject(managedStack[ptr->Value1]); + BoxUtils.RecycleObject(managedStack[ptr->Value1]); managedStack[ptr->Value1] = foundMethod; } } @@ -3604,7 +3614,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1 - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1 - 1; var obj = managedStack[ptr->Value1]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer = ptr; IntPtr[] intPtrArr = obj as IntPtr[]; @@ -3627,7 +3637,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1 - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1 - 1; var arr = managedStack[ptr->Value1] as double[]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer = ptr; arr[idx] = val; @@ -3638,7 +3648,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var obj = managedStack[ptr->Value1]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Long; @@ -3740,7 +3750,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var arr = managedStack[ptr->Value1] as double[]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Double; @@ -3752,7 +3762,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var arr = managedStack[ptr->Value1] as float[]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Float; @@ -3871,7 +3881,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1; var obj = managedStack[ptr->Value1]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer--; ptr->Type = ValueType.Integer; @@ -3922,7 +3932,7 @@ AnonymousStorey anonyObj var idx = (evaluationStackPointer - 1 - 1)->Value1; var ptr = evaluationStackPointer - 1 - 1 - 1; var arr = managedStack[ptr->Value1] as float[]; - EvaluationStackOperation.RecycleObject(managedStack[ptr - evaluationStackBase]); + BoxUtils.RecycleObject(managedStack[ptr - evaluationStackBase]); managedStack[ptr - evaluationStackBase] = null; evaluationStackPointer = ptr; arr[idx] = val; @@ -3956,7 +3966,7 @@ AnonymousStorey anonyObj { var exceptionPos = (evaluationStackPointer - evaluationStackBase - 1); var exception = managedStack[(evaluationStackPointer - 1)->Value1] as Exception; - EvaluationStackOperation.RecycleObject(managedStack[exceptionPos]); + BoxUtils.RecycleObject(managedStack[exceptionPos]); managedStack[exceptionPos] = null; evaluationStackPointer--; throw exception; @@ -4034,14 +4044,14 @@ AnonymousStorey anonyObj int newPos = (int)(newEvaluationStackPointer - evaluationStackBase); for (int i = newPos; i < topPos; i++) { - EvaluationStackOperation.RecycleObject(managedStack[i]); + BoxUtils.RecycleObject(managedStack[i]); managedStack[i] = null; } evaluationStackPointer = newEvaluationStackPointer; evaluationStackPointer->Type = ValueType.Object; evaluationStackPointer->Value1 = newPos; - EvaluationStackOperation.RecycleObject(managedStack[newPos]); + BoxUtils.RecycleObject(managedStack[newPos]); managedStack[newPos] = e; evaluationStackPointer++; @@ -4055,7 +4065,7 @@ AnonymousStorey anonyObj int newPos = (int)(argumentBase - evaluationStackBase) - refCount; for (int i = newPos; i < topPos; i++) { - EvaluationStackOperation.RecycleObject(managedStack[i]); + BoxUtils.RecycleObject(managedStack[i]); managedStack[i] = null; } diff --git a/Source/VSProj/ThirdParty/UnityEngine.CoreModule.dll b/Source/VSProj/ThirdParty/UnityEngine.CoreModule.dll index 48ed751ba927ae6755255061568f9770217ee055..9cb68d4669b6b923da3facb57df75727cbf6b4a8 100644 GIT binary patch literal 1195008 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�TROXV$UX>%~vVFJb=%XGbcA`D)TjzGed6X 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
  • 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

    9SFIOxN~_ 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℘Eo^=VF17A;b;dfOejL|%zC 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
  • u2 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 z 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'rgk4b*rAvDK2E_tRBSIZmf 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 DD<>)$ODk`T*FLp9%l!d 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 z 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 z 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