aboutsummaryrefslogtreecommitdiffstatsci
path: root/src/CompilerServices
diff options
context:
space:
mode:
Diffstat (limited to 'src/CompilerServices')
-rw-r--r--src/CompilerServices/CompilerServices.cs12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/CompilerServices/CompilerServices.cs b/src/CompilerServices/CompilerServices.cs
index 36c88030..f8bbcdf0 100644
--- a/src/CompilerServices/CompilerServices.cs
+++ b/src/CompilerServices/CompilerServices.cs
@@ -237,8 +237,18 @@ namespace go
if (!srcValueType.IsValueType)
il.Emit(OpCodes.Castclass, srcValueType);
- il.Emit(OpCodes.Callvirt, miToStr);
+ if (piTarget.PropertyType == typeof(string))
+ il.Emit(OpCodes.Callvirt, miToStr);
il.Emit(OpCodes.Callvirt, piTarget.GetSetMethod());
+
+ //initialize target with actual value
+ if (miSrc.MemberType == MemberTypes.Property)
+ piTarget.GetSetMethod().Invoke(binding.Source, new object[] { (miSrc as PropertyInfo).GetGetMethod().Invoke(_source,null)});
+ else if (miSrc.MemberType == MemberTypes.Field){
+ MethodInfo miSetTarget = piTarget.GetSetMethod();
+ FieldInfo fiSource = miSrc as FieldInfo;
+ miSetTarget.Invoke(binding.Source, new object[] { fiSource.GetValue(_source)});
+ }
}
il.MarkLabel(labFailed);
il.Emit(OpCodes.Ret);