Browse Source

[optimizer] avoid duplicate typing when unrolling loops

closes #6976
Simon Krajewski 7 years ago
parent
commit
7f69052418
1 changed files with 5 additions and 6 deletions
  1. 5 6
      src/typing/forLoop.ml

+ 5 - 6
src/typing/forLoop.ml

@@ -130,13 +130,12 @@ let rec optimize_for_loop ctx (i,pi) e1 e2 p =
 				250
 			in
 			if cost > max_cost then raise Exit;
+			let v = gen_it_local pt in
+			let e2 = type_expr ctx e2 NoValue in
 			let el = List.map (fun e ->
-				let v = gen_it_local pt in
-				let ev = mk (TVar(v, None)) ctx.t.tvoid p in
-				let typed_e2 = type_expr ctx e2 NoValue in
-				let eloc = mk (TLocal v) v.v_type p in
-				let e_assign = mk (TBinop(OpAssign,eloc,e)) e.etype e.epos in
-				concat ev (concat e_assign typed_e2)
+				let ev = mk (TVar(v,Some e)) ctx.t.tvoid e.epos in
+				let e = concat ev e2 in
+				Texpr.duplicate_tvars e
 			) el in
 			Some (mk (TBlock el) ctx.t.tvoid p)
 		with Exit ->