Переглянути джерело

[jvm] fix `!=` for `Null<Float>` and `Null<Int>` (closes #9897)

Aleksandr Kuzmenko 5 роки тому
батько
коміт
18798934cd

+ 6 - 0
extra/CHANGES.txt

@@ -1,3 +1,9 @@
+2020-XX-XX 4.1.5:
+
+	Bugfixes:
+
+	jvm : fixed equality checks for `Null<Float>` and `Null<Int>` (#9897)
+
 2020-09-11 4.1.4:
 
 	General improvements:

+ 8 - 1
src/generators/genjvm.ml

@@ -995,7 +995,14 @@ class texpr_to_jvm gctx (jc : JvmClass.builder) (jm : JvmMethod.builder) (return
 						(fun () ->
 							jm#get_code#pop;
 							self#texpr rvalue_any e2;
-							self#boolop (CmpSpecial (jm#get_code#if_nonnull sig2))
+							match op with
+							| CmpEq | CmpGe | CmpLe ->
+								self#boolop (CmpSpecial (jm#get_code#if_nonnull sig2))
+							| CmpNe ->
+								self#boolop (CmpSpecial (jm#get_code#if_null sig2))
+							| _ ->
+								jm#get_code#pop;
+								jm#get_code#bconst false
 						)
 						(fun () ->
 							jm#cast ~not_null:true cast_type;

+ 11 - 0
tests/unit/src/unit/issues/Issue9897.hx

@@ -0,0 +1,11 @@
+package unit.issues;
+
+class Issue9897 extends unit.Test {
+	static var nullValue:Null<Float> = null;
+	static var floatValue:Null<Float> = 100;
+
+	function test() {
+		t(nullValue != floatValue);
+		t(floatValue != nullValue);
+	}
+}