Guest User

Untitled

a guest
Feb 16th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.36 KB | None | 0 0
  1. diff -w -r -C 2 ocaml-3.12.0/bytecomp/translmod.ml ocaml-3.12.0+recmodules/bytecomp/translmod.ml
  2. *** ocaml-3.12.0/bytecomp/translmod.ml 2010-01-22 13:48:24.000000000 +0100
  3. --- ocaml-3.12.0+recmodules/bytecomp/translmod.ml 2011-06-09 19:25:21.312516999 +0200
  4. ***************
  5. *** 177,180 ****
  6. --- 177,215 ----
  7. let status = Array.create num_bindings Undefined in
  8. let res = ref [] in
  9. +
  10. + let rec emit_binding i =
  11. + match status.(i) with
  12. + Defined -> true
  13. + | Inprogress -> false
  14. + | Undefined ->
  15. + let defined = ref true in
  16. + status.(i) <- Inprogress;
  17. + for j = 0 to num_bindings - 1 do
  18. + if IdentSet.mem id.(j) fv.(i) then begin
  19. + let dep_defined = emit_binding j in
  20. + if not dep_defined && !defined then defined := false
  21. + end
  22. + done;
  23. + if !defined then begin
  24. + res := (id.(i), None, rhs.(i)) :: !res;
  25. + status.(i) <- Defined;
  26. + true
  27. + end else
  28. + false
  29. + in
  30. + for i = 0 to num_bindings - 1 do
  31. + match status.(i) with
  32. + Undefined -> ignore (emit_binding i)
  33. + | Inprogress -> ()
  34. + | Defined -> ()
  35. + done;
  36. +
  37. + for i = 0 to num_bindings - 1 do
  38. + match status.(i) with
  39. + Undefined -> ()
  40. + | Inprogress -> status.(i) <- Undefined
  41. + | Defined -> ()
  42. + done;
  43. +
  44. let rec emit_binding i =
  45. match status.(i) with
  46. ***************
  47. *** 185,199 ****
  48. status.(i) <- Inprogress;
  49. for j = 0 to num_bindings - 1 do
  50. ! if IdentSet.mem id.(j) fv.(i) then emit_binding j
  51. done
  52. end;
  53. res := (id.(i), init.(i), rhs.(i)) :: !res;
  54. ! status.(i) <- Defined in
  55. for i = 0 to num_bindings - 1 do
  56. match status.(i) with
  57. Undefined -> emit_binding i
  58. | Inprogress -> assert false
  59. ! | Defined -> ()
  60. done;
  61. List.rev !res
  62.  
  63. --- 220,236 ----
  64. status.(i) <- Inprogress;
  65. for j = 0 to num_bindings - 1 do
  66. ! if IdentSet.mem id.(j) fv.(i) then emit_binding j;
  67. done
  68. end;
  69. res := (id.(i), init.(i), rhs.(i)) :: !res;
  70. ! status.(i) <- Defined
  71. ! in
  72. for i = 0 to num_bindings - 1 do
  73. match status.(i) with
  74. Undefined -> emit_binding i
  75. | Inprogress -> assert false
  76. ! | Defined _ -> ()
  77. done;
  78. +
  79. List.rev !res
  80.  
  81. diff -w -r -C 2 ocaml-3.12.0/typing/typemod.ml ocaml-3.12.0+recmodules/typing/typemod.ml
  82. *** ocaml-3.12.0/typing/typemod.ml 2010-06-07 10:24:02.000000000 +0200
  83. --- ocaml-3.12.0+recmodules/typing/typemod.ml 2011-06-09 19:24:11.572517000 +0200
  84. ***************
  85. *** 463,472 ****
  86. (fun (_, smty) (id, mty) -> (id, transl_modtype env_c smty))
  87. sdecls curr in
  88. ! let init =
  89. ! List.map
  90. ! (fun (name, smty) ->
  91. ! (Ident.create name, approx_modtype env smty))
  92. ! sdecls in
  93. ! let env0 = make_env init in
  94. let dcl1 = transition env0 init in
  95. let env1 = make_env dcl1 in
  96. --- 463,475 ----
  97. (fun (_, smty) (id, mty) -> (id, transl_modtype env_c smty))
  98. sdecls curr in
  99. ! let (env0, rev_init) = List.fold_left
  100. ! (fun (env, init) (name, smty) ->
  101. ! let id = Ident.create name in
  102. ! let mty = approx_modtype env smty in
  103. ! (Env.add_module id mty env),
  104. ! (id, mty) :: init
  105. ! )
  106. ! (env, []) sdecls in
  107. ! let init = List.rev rev_init in
  108. let dcl1 = transition env0 init in
  109. let env1 = make_env dcl1 in
Add Comment
Please, Sign In to add comment