浏览代码

[inliner] fix inline_constructors logic wrt expression-inline

closes #8240
Simon Krajewski 6 年之前
父节点
当前提交
84711c810e
共有 2 个文件被更改,包括 15 次插入1 次删除
  1. 1 1
      src/optimization/inlineConstructors.ml
  2. 14 0
      tests/unit/src/unit/issues/Issue8240.hx

+ 1 - 1
src/optimization/inlineConstructors.ml

@@ -174,7 +174,7 @@ let inline_constructors ctx e =
 	let make_expr_for_rev_list (el:texpr list) (t:t) (p:pos) : texpr = make_expr_for_list (List.rev el) t p in
 	let make_expr_for_rev_list (el:texpr list) (t:t) (p:pos) : texpr = make_expr_for_list (List.rev el) t p in
 	let current_io_id = ref 0 in
 	let current_io_id = ref 0 in
 	let increment_io_id e = match e.eexpr with
 	let increment_io_id e = match e.eexpr with
-		| TObjectDecl _ | TArrayDecl _ | TNew _ -> incr current_io_id
+		| TObjectDecl _ | TArrayDecl _ | TNew _ | (TMeta((Meta.Inline,_,_),{eexpr = TNew _})) -> incr current_io_id
 		| _ -> ()
 		| _ -> ()
 	in
 	in
 	let rec analyze_aliases (seen_ctors:tclass_field list) (captured:bool) (is_lvalue:bool) (e:texpr) : inline_var option =
 	let rec analyze_aliases (seen_ctors:tclass_field list) (captured:bool) (is_lvalue:bool) (e:texpr) : inline_var option =

+ 14 - 0
tests/unit/src/unit/issues/Issue8240.hx

@@ -0,0 +1,14 @@
+package unit.issues;
+
+private class Suite {
+	public function new() {}
+}
+
+class Issue8240 extends unit.Test {
+	@:analyzer(ignore)
+	function test() {
+		var suite = new Suite();
+		var f = function() (for (c in inline new haxe.iterators.StringIteratorUnicode("")) {});
+		utest.Assert.pass();
+	}
+}