浏览代码

[eval] don't be like JavaScript

Simon Krajewski 7 年之前
父节点
当前提交
b15ffbccd6
共有 4 个文件被更改,包括 9 次插入9 次删除
  1. 2 2
      src/macro/eval/evalEmitter.ml
  2. 1 1
      src/macro/eval/evalJit.ml
  3. 3 3
      src/macro/eval/evalMisc.ml
  4. 3 3
      tests/benchs/ds/src/Main.hx

+ 2 - 2
src/macro/eval/evalEmitter.ml

@@ -551,10 +551,10 @@ let emit_not_eq_null exec env = match exec env with
 	| VNull -> VFalse
 	| _ -> VTrue
 
-let emit_op_add exec1 exec2 env =
+let emit_op_add p exec1 exec2 env =
 	let v1 = exec1 env in
 	let v2 = exec2 env in
-	op_add v1 v2
+	op_add p v1 v2
 
 let emit_op_mult p exec1 exec2 env =
 	let v1 = exec1 env in

+ 1 - 1
src/macro/eval/evalJit.ml

@@ -541,7 +541,7 @@ and jit_expr jit return e =
 			let exec1 = jit_expr jit false e1 in
 			let exec2 = jit_expr jit false e2 in
 			begin match op with
-				| OpAdd -> emit_op_add exec1 exec2
+				| OpAdd -> emit_op_add e.epos exec1 exec2
 				| OpMult -> emit_op_mult e.epos exec1 exec2
 				| OpDiv -> emit_op_div e.epos exec1 exec2
 				| OpSub -> emit_op_sub e.epos exec1 exec2

+ 3 - 3
src/macro/eval/evalMisc.ml

@@ -163,14 +163,14 @@ let is_true v = match v with
 	| VTrue -> true
 	| _ -> false
 
-let op_add v1 v2 = match v1,v2 with
+let op_add p v1 v2 = match v1,v2 with
 	| VInt32 i1,VInt32 i2 -> vint32 (Int32.add i1 i2)
 	| VFloat f1,VFloat f2 -> vfloat (f1 +. f2)
 	| VInt32 i,VFloat f | VFloat f,VInt32 i -> vfloat ((Int32.to_float i) +. f)
 	| VString s1,VString s2 -> vstring (concat s1 s2)
 	| VString s1,v2 -> vstring (concat s1 (s_value 0 v2))
 	| v1,VString s2 -> vstring (concat (s_value 0 v1) s2)
-	| v1,v2 -> vstring (concat (s_value 0 v1) (s_value 0 v2))
+	| v1,v2 -> invalid_binop OpAdd v1 v2 p
 
 let op_mult p v1 v2 = match v1,v2 with
 	| VInt32 i1,VInt32 i2 -> vint32 (Int32.mul i1 i2)
@@ -236,7 +236,7 @@ let op_mod p v1 v2 = match v1,v2 with
 	| _ -> invalid_binop OpMod v1 v2 p
 
 let get_binop_fun op p = match op with
-	| OpAdd -> op_add
+	| OpAdd -> op_add p
 	| OpMult -> op_mult p
 	| OpDiv -> op_div p
 	| OpSub -> op_sub p

+ 3 - 3
tests/benchs/ds/src/Main.hx

@@ -66,10 +66,10 @@ class Main {
 		var suite = new Suite("read + write");
 		var a = [1];
 		var v = Vector.fromArrayCopy(a);
-		var sm = new Map();
-		var im = new Map();
-		var om = new Map();
+		var sm = ["foo" => 0];
+		var im = [1 => 0];
 		var key = { foo: 1 };
+		var om = [key => 0];
 		suite.add("Vector", v[0] += 1);
 		suite.add("Array", a[0] += 1);
 		suite.add("StringMap", sm["foo"] += 1);