From d72c09cb62637b0b90ac0915600501a0fbde8aca Mon Sep 17 00:00:00 2001
From: Thomas Wood <thomas.wood09@imperial.ac.uk>
Date: Thu, 10 Sep 2015 16:34:11 +0100
Subject: [PATCH] Fixup nasty .cmi corruption bug

---
 generator/js_of_ast.ml     | 9 +++++++++
 generator/parse_type.ml    | 3 +--
 generator/tests/cascade.ml | 2 --
 generator/tests/types.ml   | 2 +-
 4 files changed, 11 insertions(+), 5 deletions(-)
 delete mode 100644 generator/tests/cascade.ml

diff --git a/generator/js_of_ast.ml b/generator/js_of_ast.ml
index 8a5f5f1..5153df3 100644
--- a/generator/js_of_ast.ml
+++ b/generator/js_of_ast.ml
@@ -338,7 +338,16 @@ and js_of_structure_item ?(mod_gen=[]) old_env s =
     let name = (fun od -> if od.open_override = Fresh then js_of_longident od.open_txt else "") od in
     if (name <> "" & not_already_created name) then
       module_list := name :: !module_list;
+
+      (* Disable writing of .cmi files for modules we're opening to avoid automatically over-writing existing signature
+       * with an inconsistent one *)
+      let old_dont_write_files = !Clflags.dont_write_files in
+      Clflags.dont_write_files := true;
+
       let new_mod = parse_modules ~mod_gen @@ find_module_path @@ !module_list in
+
+      Clflags.dont_write_files := old_dont_write_files;
+
       module_created := name :: !module_created;
       module_code := new_mod @ !module_code;
     "" 
diff --git a/generator/parse_type.ml b/generator/parse_type.ml
index 1f0b31a..c01d63e 100644
--- a/generator/parse_type.ml
+++ b/generator/parse_type.ml
@@ -102,8 +102,7 @@ let process_implementation_file ppf sourcefile =
   Env.set_unit_name modulename;
   let inputfile = preprocess sourcefile in
   try
-  let env = initial_env () in
-
+    let env = initial_env () in
     let parsetree = parse_file inputfile Parse.implementation ast_impl_magic_number in
     let typedtree = Typemod.type_implementation sourcefile prefixname modulename env parsetree in
     (Some (parsetree, typedtree), inputfile)
diff --git a/generator/tests/cascade.ml b/generator/tests/cascade.ml
deleted file mode 100644
index 4b38c53..0000000
--- a/generator/tests/cascade.ml
+++ /dev/null
@@ -1,2 +0,0 @@
-let f x = 
-	2 + x
\ No newline at end of file
diff --git a/generator/tests/types.ml b/generator/tests/types.ml
index f1ea841..fa24fe8 100644
--- a/generator/tests/types.ml
+++ b/generator/tests/types.ml
@@ -5,4 +5,4 @@ type exprone =
 	| Alpha [@f]
 	| Gamma [@f]
 and exprtwo =
-	| Beta [@f]
\ No newline at end of file
+	| Beta [@f]
-- 
GitLab