فهرست منبع

[java/cs] OpMod receives Float values and return Float values as well. Closes #3447

Cauê Waneck 11 سال پیش
والد
کامیت
16f33030a0
2فایلهای تغییر یافته به همراه20 افزوده شده و 2 حذف شده
  1. 2 2
      gencommon.ml
  2. 18 0
      tests/unit/issues/Issue3447.hx

+ 2 - 2
gencommon.ml

@@ -2268,12 +2268,12 @@ struct
 									dyn_plus_handler e (run e1) (run e2)
 									dyn_plus_handler e (run e1) (run e2)
 							| OpGt | OpGte | OpLt | OpLte  -> (* type 2 *)
 							| OpGt | OpGte | OpLt | OpLte  -> (* type 2 *)
 								{ eexpr = TBinop(op, compare_handler (run e1) (run e2), { eexpr = TConst(TInt(Int32.zero)); etype = gen.gcon.basic.tint; epos = e.epos} ); etype = gen.gcon.basic.tbool; epos = e.epos }
 								{ eexpr = TBinop(op, compare_handler (run e1) (run e2), { eexpr = TConst(TInt(Int32.zero)); etype = gen.gcon.basic.tint; epos = e.epos} ); etype = gen.gcon.basic.tbool; epos = e.epos }
-							| OpMult | OpDiv | OpSub -> (* always cast everything to double *)
+							| OpMult | OpDiv | OpSub | OpMod -> (* always cast everything to double *)
 								let etype, _ = get_etype_one e in
 								let etype, _ = get_etype_one e in
 								{ e with eexpr = TBinop(op, mk_cast etype (run e1), mk_cast etype (run e2)) }
 								{ e with eexpr = TBinop(op, mk_cast etype (run e1), mk_cast etype (run e2)) }
 							| OpBoolAnd | OpBoolOr ->
 							| OpBoolAnd | OpBoolOr ->
 								{ e with eexpr = TBinop(op, mk_cast gen.gcon.basic.tbool (run e1), mk_cast gen.gcon.basic.tbool (run e2)) }
 								{ e with eexpr = TBinop(op, mk_cast gen.gcon.basic.tbool (run e1), mk_cast gen.gcon.basic.tbool (run e2)) }
-							| OpAnd | OpOr | OpXor | OpShl | OpShr | OpUShr | OpMod ->
+							| OpAnd | OpOr | OpXor | OpShl | OpShr | OpUShr ->
 								{ e with eexpr = TBinop(op, mk_cast gen.gcon.basic.tint (run e1), mk_cast gen.gcon.basic.tint (run e2)) }
 								{ e with eexpr = TBinop(op, mk_cast gen.gcon.basic.tint (run e1), mk_cast gen.gcon.basic.tint (run e2)) }
 							| OpAssign | OpAssignOp _ | OpInterval | OpArrow -> assert false)
 							| OpAssign | OpAssignOp _ | OpInterval | OpArrow -> assert false)
 					| TUnop (Increment as op, flag, e1)
 					| TUnop (Increment as op, flag, e1)

+ 18 - 0
tests/unit/issues/Issue3447.hx

@@ -0,0 +1,18 @@
+package unit.issues;
+import unit.Test;
+
+class Issue3447 extends Test
+{
+	function test()
+	{
+		var f:Float = getValue();
+		var val:Float = f % 100;
+		var f2:Dynamic = getValue();
+		var val2:Dynamic = f2 % 100;
+		eq(f,f2);
+	}
+
+	static function getValue() {
+			return 101.5;
+	}
+}