Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff -w -r -C 2 ocaml-3.12.0/bytecomp/translmod.ml ocaml-3.12.0+recmodules/bytecomp/translmod.ml
- *** ocaml-3.12.0/bytecomp/translmod.ml 2010-01-22 13:48:24.000000000 +0100
- --- ocaml-3.12.0+recmodules/bytecomp/translmod.ml 2011-06-09 19:25:21.312516999 +0200
- ***************
- *** 177,180 ****
- --- 177,215 ----
- let status = Array.create num_bindings Undefined in
- let res = ref [] in
- +
- + let rec emit_binding i =
- + match status.(i) with
- + Defined -> true
- + | Inprogress -> false
- + | Undefined ->
- + let defined = ref true in
- + status.(i) <- Inprogress;
- + for j = 0 to num_bindings - 1 do
- + if IdentSet.mem id.(j) fv.(i) then begin
- + let dep_defined = emit_binding j in
- + if not dep_defined && !defined then defined := false
- + end
- + done;
- + if !defined then begin
- + res := (id.(i), None, rhs.(i)) :: !res;
- + status.(i) <- Defined;
- + true
- + end else
- + false
- + in
- + for i = 0 to num_bindings - 1 do
- + match status.(i) with
- + Undefined -> ignore (emit_binding i)
- + | Inprogress -> ()
- + | Defined -> ()
- + done;
- +
- + for i = 0 to num_bindings - 1 do
- + match status.(i) with
- + Undefined -> ()
- + | Inprogress -> status.(i) <- Undefined
- + | Defined -> ()
- + done;
- +
- let rec emit_binding i =
- match status.(i) with
- ***************
- *** 185,199 ****
- status.(i) <- Inprogress;
- for j = 0 to num_bindings - 1 do
- ! if IdentSet.mem id.(j) fv.(i) then emit_binding j
- done
- end;
- res := (id.(i), init.(i), rhs.(i)) :: !res;
- ! status.(i) <- Defined in
- for i = 0 to num_bindings - 1 do
- match status.(i) with
- Undefined -> emit_binding i
- | Inprogress -> assert false
- ! | Defined -> ()
- done;
- List.rev !res
- --- 220,236 ----
- status.(i) <- Inprogress;
- for j = 0 to num_bindings - 1 do
- ! if IdentSet.mem id.(j) fv.(i) then emit_binding j;
- done
- end;
- res := (id.(i), init.(i), rhs.(i)) :: !res;
- ! status.(i) <- Defined
- ! in
- for i = 0 to num_bindings - 1 do
- match status.(i) with
- Undefined -> emit_binding i
- | Inprogress -> assert false
- ! | Defined _ -> ()
- done;
- +
- List.rev !res
- diff -w -r -C 2 ocaml-3.12.0/typing/typemod.ml ocaml-3.12.0+recmodules/typing/typemod.ml
- *** ocaml-3.12.0/typing/typemod.ml 2010-06-07 10:24:02.000000000 +0200
- --- ocaml-3.12.0+recmodules/typing/typemod.ml 2011-06-09 19:24:11.572517000 +0200
- ***************
- *** 463,472 ****
- (fun (_, smty) (id, mty) -> (id, transl_modtype env_c smty))
- sdecls curr in
- ! let init =
- ! List.map
- ! (fun (name, smty) ->
- ! (Ident.create name, approx_modtype env smty))
- ! sdecls in
- ! let env0 = make_env init in
- let dcl1 = transition env0 init in
- let env1 = make_env dcl1 in
- --- 463,475 ----
- (fun (_, smty) (id, mty) -> (id, transl_modtype env_c smty))
- sdecls curr in
- ! let (env0, rev_init) = List.fold_left
- ! (fun (env, init) (name, smty) ->
- ! let id = Ident.create name in
- ! let mty = approx_modtype env smty in
- ! (Env.add_module id mty env),
- ! (id, mty) :: init
- ! )
- ! (env, []) sdecls in
- ! let init = List.rev rev_init in
- let dcl1 = transition env0 init in
- let env1 = make_env dcl1 in
Add Comment
Please, Sign In to add comment