aboutsummaryrefslogtreecommitdiffstatsci
path: root/src/CompilerServices
diff options
context:
space:
mode:
authorjpbruyere <jp.bruyere@hotmail.com>2015-06-02 12:28:36 +0200
committerjpbruyere <jp.bruyere@hotmail.com>2015-06-02 12:28:36 +0200
commitc54c8b8e7e369dbba890efdb35a015740d1d95ea (patch)
treef2b7ed73e93c4170e22e3713d4c66e02eeb40d76 /src/CompilerServices
parentb56c22ad826a49b7ea0013c1ca78cf64169fc326 (diff)
listbox update
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);