aboutsummaryrefslogtreecommitdiffstatsci
path: root/src/CompilerServices/CompilerServices.cs
diff options
context:
space:
mode:
authorjpbruyere <jp.bruyere@hotmail.com>2017-01-01 19:59:28 +0100
committerjpbruyere <jp.bruyere@hotmail.com>2017-01-01 19:59:28 +0100
commit26fc4b0e6268e58d7694ccf87e57de59d3b6b9a1 (patch)
treeed3d810484032e4ce194964a3a13503fda5841d0 /src/CompilerServices/CompilerServices.cs
parent0f1346e33b59f7693f4ff40b5524c93d2629c5ce (diff)
debug when vc of ds newVal is null
Diffstat (limited to 'src/CompilerServices/CompilerServices.cs')
-rw-r--r--src/CompilerServices/CompilerServices.cs10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/CompilerServices/CompilerServices.cs b/src/CompilerServices/CompilerServices.cs
index c0acc5d5..42ae5f7b 100644
--- a/src/CompilerServices/CompilerServices.cs
+++ b/src/CompilerServices/CompilerServices.cs
@@ -456,7 +456,14 @@ namespace Crow
il.MarkLabel (convert);
if (dstType == typeof(string)) {
+ System.Reflection.Emit.Label emitNullStr = il.DefineLabel ();
+ il.Emit (OpCodes.Dup);
+ il.Emit (OpCodes.Brfalse, emitNullStr);
il.Emit (OpCodes.Callvirt, CompilerServices.miObjToString);
+ il.Emit (OpCodes.Br, endConvert);
+ il.MarkLabel (emitNullStr);
+ il.Emit (OpCodes.Pop);//remove null string from stack
+ il.Emit (OpCodes.Ldstr, "");//replace with empty string
} else if (dstType.IsPrimitive) {
//il.Emit (OpCodes.Unbox_Any, dstType);
il.Emit (OpCodes.Callvirt, CompilerServices.GetConvertMethod (dstType));
@@ -464,7 +471,10 @@ namespace Crow
il.Emit (OpCodes.Unbox_Any, dstType);
} else{
il.Emit (OpCodes.Stloc_0); //save orig value in loc0
+ //first check if not null
il.Emit (OpCodes.Ldloc_0);
+ il.Emit (OpCodes.Dup);
+ il.Emit (OpCodes.Brfalse, endConvert);
il.Emit (OpCodes.Callvirt, miGetType);
il.Emit (OpCodes.Ldtoken, dstType);//push destination property type for testing
il.Emit (OpCodes.Call, CompilerServices.miGetTypeFromHandle);