Browse Source

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

Cauê Waneck 10 years ago
parent
commit
aeeb7c25cb
1 changed files with 11 additions and 9 deletions
  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