]> O.S.I.I.S - jp/crow.git/commitdiff
allow enum value in xml and styling delegates
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Sat, 26 Aug 2017 13:03:27 +0000 (15:03 +0200)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Sat, 26 Aug 2017 13:03:27 +0000 (15:03 +0200)
src/CompilerServices/CompilerServices.cs

index 05dc365292bc0cc9c8b5a8d57f1e9ba94e2734ab..5884ee66ba1aa19cfc21b78eed725b8be72156ec 100644 (file)
@@ -212,7 +212,7 @@ namespace Crow
                                        il.Emit(OpCodes.Ldtoken, pi.PropertyType);
                                        il.Emit(OpCodes.Call, CompilerServices.miGetTypeFromHandle);
                                        //load enum value name
-                                       il.Emit (OpCodes.Ldstr, Convert.ToString (val));//TODO:is this convert required?
+                                       il.Emit (OpCodes.Ldstr, Convert.ToString (val));//TODO:implement here string format?
                                        //load false
                                        il.Emit (OpCodes.Ldc_I4_0);
                                        il.Emit (OpCodes.Callvirt, CompilerServices.miParseEnum);
@@ -751,15 +751,25 @@ namespace Crow
                                                        throw new NotSupportedException ();
                                        }
 
-                                       MethodInfo lopParseMi = lopPI.PropertyType.GetMethod ("Parse");
-                                       if (lopParseMi == null)
-                                               throw new Exception (string.Format
-                                                       ("IML: no static 'Parse' method found in: {0}", lopPI.PropertyType.Name));
-
-                                       il.Emit (OpCodes.Ldstr, operandes [1].Trim ());
+                                       MethodInfo lopParseMi = CompilerServices.miParseEnum;
+                                       if (lopPI.PropertyType.IsEnum){
+                                               //load type of enum
+                                               il.Emit(OpCodes.Ldtoken, lopPI.PropertyType);
+                                               il.Emit(OpCodes.Call, CompilerServices.miGetTypeFromHandle);
+                                               //load enum value name
+                                               il.Emit (OpCodes.Ldstr, operandes [1].Trim ());
+                                               //load false
+                                               il.Emit (OpCodes.Ldc_I4_0);
+                                       }else{
+                                               lopParseMi = lopPI.PropertyType.GetMethod ("Parse");
+                                               if (lopParseMi == null)
+                                                       throw new Exception (string.Format
+                                                               ("IML: no static 'Parse' method found in: {0}", lopPI.PropertyType.Name));
+
+                                               il.Emit (OpCodes.Ldstr, operandes [1].Trim ());
+                                       }
                                        il.Emit (OpCodes.Callvirt, lopParseMi);
                                        il.Emit (OpCodes.Unbox_Any, lopPI.PropertyType);
-
                                        //emit left operand assignment
                                        il.Emit (OpCodes.Callvirt, lopPI.GetSetMethod());
                                } else {//tree parsing and propert gets