From 8657cca0f46052b466c2b703fffdf28a47886713 Mon Sep 17 00:00:00 2001 From: jpbruyere Date: Wed, 10 Feb 2016 22:35:19 +0100 Subject: [PATCH] that's working, but convertions in IL has to be reworked --- src/GraphicObjects/GraphicObject.cs | 34 ++++++++++++++--------------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/src/GraphicObjects/GraphicObject.cs b/src/GraphicObjects/GraphicObject.cs index 90d850b5..56a289bd 100644 --- a/src/GraphicObjects/GraphicObject.cs +++ b/src/GraphicObjects/GraphicObject.cs @@ -453,11 +453,9 @@ namespace Crow il.Emit(OpCodes.Nop); - int cpt = 0; - foreach (PropertyInfo pi in thisType.GetProperties(BindingFlags.Public | BindingFlags.Instance)) { string name = ""; - cpt++; + #region retrieve custom attributes if (pi.GetSetMethod () == null) continue; @@ -485,7 +483,6 @@ namespace Crow il.Emit (OpCodes.Ldnull); } else { Type dvType = defaultValue.GetType (); - Debug.WriteLine (dvType.ToString ()); if (dvType.IsValueType) { switch (Type.GetTypeCode (dvType)) { @@ -537,11 +534,9 @@ namespace Crow il.Emit (OpCodes.Pop); continue; } - } else if (dvType.FullName == "System.String") { + } else if (dvType.FullName == "System.String") il.Emit (OpCodes.Ldstr, Convert.ToString (defaultValue)); -// il.Emit (OpCodes.Pop); -// continue; - }else{ + else{ if (!dvType.IsEnum) { il.Emit (OpCodes.Pop); continue; @@ -550,20 +545,23 @@ namespace Crow } if (pi.PropertyType != dvType) { - MethodInfo miParse = pi.PropertyType.GetMethod ("Parse", BindingFlags.Static | BindingFlags.Public); - if (miParse != null) { - il.Emit (OpCodes.Callvirt, miParse); - if (miParse.ReturnType != pi.PropertyType) - il.Emit(OpCodes.Unbox_Any, pi.PropertyType); -// il.Emit(OpCodes.Castclass, pi.PropertyType); - - } else - Debugger.Break (); + if (Type.GetTypeCode (dvType) == TypeCode.String) { + MethodInfo miParse = pi.PropertyType.GetMethod ("Parse", BindingFlags.Static | BindingFlags.Public); + if (miParse != null) { + il.Emit (OpCodes.Callvirt, miParse); + if (miParse.ReturnType != pi.PropertyType) + il.Emit (OpCodes.Unbox_Any, pi.PropertyType); + } else + throw new Exception ("no Parse method found for: " + pi.PropertyType.FullName); + } else { + MethodInfo conv = CompilerServices.GetConvertMethod (pi.PropertyType); + il.Emit(OpCodes.Callvirt, conv); + il.Emit (OpCodes.Unbox_Any, pi.PropertyType); + } } } il.Emit (OpCodes.Callvirt, pi.GetSetMethod ()); - } il.Emit(OpCodes.Ret); -- 2.47.3