Explorar o código

[cs] Try to convert from Double to any other type. Closes #3217

Cauê Waneck %!s(int64=10) %!d(string=hai) anos
pai
achega
2d49622657
Modificáronse 2 ficheiros con 28 adicións e 0 borrados
  1. 10 0
      std/cs/internal/Runtime.hx
  2. 18 0
      tests/unit/src/unit/issues/Issue3217.hx

+ 10 - 0
std/cs/internal/Runtime.hx

@@ -372,6 +372,11 @@ import cs.system.Object;
 			{
 			{
 				value = mkNullable(value, f.FieldType);
 				value = mkNullable(value, f.FieldType);
 			}
 			}
+			if (Object.ReferenceEquals(Lib.toNativeType(cs.system.Double), Lib.getNativeType(value)) && !Object.ReferenceEquals(t, f.FieldType))
+			{
+				var ic = Lib.as(value, IConvertible);
+				value = ic.ToType(f.FieldType, null);
+			}
 
 
 			f.SetValue(obj, value);
 			f.SetValue(obj, value);
 			return value;
 			return value;
@@ -400,6 +405,11 @@ import cs.system.Object;
 			{
 			{
 				value = mkNullable(value, prop.PropertyType);
 				value = mkNullable(value, prop.PropertyType);
 			}
 			}
+			if (Object.ReferenceEquals(Lib.toNativeType(cs.system.Double), Lib.getNativeType(value)) && !Object.ReferenceEquals(t, f.FieldType))
+			{
+				var ic = Lib.as(value, IConvertible);
+				value = ic.ToType(f.FieldType, null);
+			}
 			prop.SetValue(obj, value, null);
 			prop.SetValue(obj, value, null);
 
 
 			return value;
 			return value;

+ 18 - 0
tests/unit/src/unit/issues/Issue3217.hx

@@ -0,0 +1,18 @@
+package unit.issues;
+
+class Issue3217 extends Test
+{
+	public function test()
+	{
+		var t:{ test:Int } = new NativeClass();
+		t.test = 10;
+		eq(t.test,10);
+	}
+}
+
+@:nativeGen
+private class NativeClass
+{
+  public var test:Int;
+  public function new() {}
+}