Bläddra i källkod

Merge pull request #3688 from HaxeFoundation/analyzer_fixes

Analyzer fixes
Dan Korostelev 10 år sedan
förälder
incheckning
89bc90572f

+ 2 - 2
analyzer.ml

@@ -779,9 +779,9 @@ module Ssa = struct
 				{e with eexpr = TBinop(OpAssign,e1,e2)}
 			| TBinop(OpAssignOp op,({eexpr = TLocal v} as e1),e2) ->
 				let e1 = loop ctx e1 in
+				let e2 = loop ctx e2 in
 				let e_op = mk (TBinop(op,e1,e2)) e.etype e.epos in
 				let _ = assign_var ctx v e_op e1.epos in
-				let e2 = loop ctx e2 in
 				{e with eexpr = TBinop(OpAssignOp op,e1,e2)}
 			| TUnop((Increment | Decrement as op),flag,({eexpr = TLocal v} as e1)) ->
 				let op = match op with Increment -> OpAdd | Decrement -> OpSub | _ -> assert false in
@@ -1244,7 +1244,7 @@ module LocalDce = struct
 			| TVar(v,None) -> is_used v
 			| TVar(v,Some e1) -> is_used v || Optimizer.has_side_effect e1
 			| TBinop(OpAssign,{eexpr = TLocal v},e2) -> is_used v || Optimizer.has_side_effect e2
-			| _ -> true
+			| _ -> Optimizer.has_side_effect e
 		in
 		let rec collect e = match e.eexpr with
 			| TLocal v ->

+ 1 - 2
tests/optimization/src/TestJs.hx

@@ -44,8 +44,7 @@ class TestJs {
 	}
 
 	@:js("var a = { v : [{ b : 1}]};a;var tmp;switch(a.v.length) {case 1:switch(a.v[0].b) {case 1:tmp = true;break;default:tmp = false;}break;default:tmp = false;}if(tmp) {}")
-	@:analyzer(no_const_propagation)
-	@:analyzer(no_check_has_effect)
+	@:analyzer(no_const_propagation, no_local_dce, no_check_has_effect)
 	static function testDeepMatchingWithoutClosures() {
 		var a = {v: [{b: 1}]};
 		a;

+ 1 - 1
tests/unit/src/unit/TestDCE.hx

@@ -1,6 +1,6 @@
 package unit;
 
-@:analyzer(no_check_has_effect)
+@:analyzer(no_check_has_effect, no_local_dce)
 class DCEClass {
 	// used statics
 	static function staticUsed() { }

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

@@ -0,0 +1,11 @@
+package unit.issues;
+
+class Issue3687 extends Test {
+	function test() {
+		var a = 0;
+		var b = 0;
+		b = 1;
+		a += b;
+		eq(a, 1);
+	}
+}