Просмотр исходного кода

[optimizer] capture vars can always be affected

closes #9305
Simon Krajewski 5 лет назад
Родитель
Сommit
ca9731f305
2 измененных файлов с 18 добавлено и 0 удалено
  1. 1 0
      src/optimization/optimizerTexpr.ml
  2. 17 0
      tests/unit/src/unit/issues/Issue9305.hx

+ 1 - 0
src/optimization/optimizerTexpr.ml

@@ -52,6 +52,7 @@ let create_affection_checker () =
 	let rec might_be_affected e =
 		let rec loop e = match e.eexpr with
 			| TConst _ | TFunction _ | TTypeExpr _ -> ()
+			| TLocal {v_capture = true} -> raise Exit
 			| TLocal v when Hashtbl.mem modified_locals v.v_id -> raise Exit
 			| TField(e1,fa) when not (is_read_only_field_access e1 fa) -> raise Exit
 			| TCall _ | TNew _ -> raise Exit

+ 17 - 0
tests/unit/src/unit/issues/Issue9305.hx

@@ -0,0 +1,17 @@
+package unit.issues;
+
+class Issue9305 extends unit.Test {
+	function test() {
+		var a = 999;
+		var b = function() {
+			a = 123;
+			return a;
+		}
+		var r = add(a, b());
+		eq(1122, r);
+	}
+
+	static function add(arg1:Int, arg2:Int) {
+		return arg1 + arg2;
+	}
+}