فهرست منبع

[cs] generate the variables of the fixed statement in the correct place, as one fixed var may depend on another

Cauê Waneck 10 سال پیش
والد
کامیت
aeeb7c25cb
1فایلهای تغییر یافته به همراه11 افزوده شده و 9 حذف شده
  1. 11 9
      gencs.ml

+ 11 - 9
gencs.ml

@@ -1365,18 +1365,20 @@ let configure gen =
 									write w "fixed(";
 									let vf = mk_temp gen "fixed" v.v_type in
 									expr_s w { expr with eexpr = TVar(vf, Some e) };
-									let acc = (expr,v,vf) :: acc in
 									write w ") ";
-									if tl = [] then acc else loop tl acc
-								| _ -> assert false
+									begin_block w;
+									expr_s w { expr with eexpr = TVar(v, Some (mk_local vf expr.epos)) };
+									write w ";";
+									newline w;
+									loop tl (acc + 1)
+								| [] -> acc
 							in
-							let vars = loop (List.rev !fixeds) [] in
-							begin_block w;
-							List.iter (fun (expr,v,vf) ->
-								expr_s w { expr with eexpr = TVar(v, Some (mk_local vf expr.epos)) };
-								write w ";") vars;
+							let nblocks = loop (List.rev !fixeds) 0 in
+							in_value := false;
 							expr_s w { e with eexpr = TBlock el };
-							end_block w
+							for i = 1 to nblocks do
+								end_block w
+							done
 						| _ ->
 							trace (debug_expr e);
 							gen.gcon.error "Invalid 'fixed' keyword format" e.epos