@@ -849,63 +849,51 @@ let link ~output_file ~linkall ~enable_source_maps ~files =
849849 if times () then Format. eprintf " build JS runtime: %a@." Timer. print t1;
850850 if times () then Format. eprintf " emit: %a@." Timer. print t
851851
852- let opt_with action x f =
853- match x with
854- | None -> f None
855- | Some x -> action x (fun y -> f (Some y))
856-
857- let rec get_source_map_files files src_index =
852+ let rec get_source_map_files ~tmp_buf files src_index =
858853 let z = Zip. open_in files.(! src_index) in
859854 incr src_index;
860- if Zip. has_entry z ~name: " source_map.map "
861- then
862- let data = Zip. read_entry z ~name: " source_map.map " in
863- let sm = Source_map.Standard. of_string data in
864- if not ( Wasm_source_map. is_empty sm)
865- then (
866- let l = ref [] in
867- Wasm_source_map. iter_sources (Standard sm) (fun i j file ->
868- l := source_name i j file :: ! l);
869- if not (List. is_empty ! l)
870- then z, Array. of_list (List. rev ! l)
871- else (
872- Zip. close_in z;
873- get_source_map_files files src_index) )
874- else (
875- Zip. close_in z;
876- get_source_map_files files src_index)
877- else get_source_map_files files src_index
878-
879- let add_source_map files z opt_source_map_file =
880- Option. iter
881- ~f: ( fun file ->
882- Zip. add_file z ~name: " source_map.map " ~file ;
883- let sm = Source_map. of_file file in
884- let files = Array. of_list files in
885- let src_index = ref 0 in
886- let st = ref None in
887- let finalize () =
855+ let l = ref [] in
856+ ( if Zip. has_entry z ~name: " source_map.map "
857+ then
858+ let data = Zip. read_entry z ~name: " source_map.map " in
859+ let sm = Source_map.Standard. of_string ~tmp_buf data in
860+ if not ( Wasm_source_map. is_empty sm)
861+ then
862+ Wasm_source_map. iter_sources (Standard sm) (fun i j file ->
863+ l := source_name i j file :: ! l) );
864+ if not (List. is_empty ! l)
865+ then z, Array. of_list (List. rev ! l)
866+ else (
867+ Zip. close_in z;
868+ get_source_map_files ~tmp_buf files src_index)
869+
870+ let add_source_map files z sm =
871+ let tmp_buf = Buffer. create 10000 in
872+ Zip. add_entry z ~name: " source_map.map " ~contents: ( Source_map. to_string sm);
873+ let files = Array. of_list files in
874+ let src_index = ref 0 in
875+ let st = ref None in
876+ let finalize () =
877+ match ! st with
878+ | Some ( _ , ( z' , _ )) -> Zip. close_in z'
879+ | None -> ()
880+ in
881+ Wasm_source_map. iter_sources sm ( fun i j file ->
882+ let z', files =
888883 match ! st with
889- | Some (_ , (z' , _ )) -> Zip. close_in z'
890- | None -> ()
884+ | Some (i' , st ) when Poly. equal i i' -> st
885+ | _ ->
886+ let st' = get_source_map_files ~tmp_buf files src_index in
887+ finalize () ;
888+ st := Some (i, st');
889+ st'
891890 in
892- Wasm_source_map. iter_sources sm (fun i j file ->
893- let z', files =
894- match ! st with
895- | Some (i' , st ) when Poly. equal i i' -> st
896- | _ ->
897- let st' = get_source_map_files files src_index in
898- finalize () ;
899- st := Some (i, st');
900- st'
901- in
902- if Array. length files > 0 (* Source has source map *)
903- then
904- let name = files.(Option. value ~default: 0 j) in
905- if Zip. has_entry z' ~name
906- then Zip. copy_file z' z ~src_name: name ~dst_name: (source_name i j file));
907- finalize () )
908- opt_source_map_file
891+ if Array. length files > 0 (* Source has source map *)
892+ then
893+ let name = files.(Option. value ~default: 0 j) in
894+ if Zip. has_entry z' ~name
895+ then Zip. copy_file z' z ~src_name: name ~dst_name: (source_name i j file));
896+ finalize ()
909897
910898let make_library ~output_file ~enable_source_maps ~files =
911899 let info =
@@ -936,33 +924,31 @@ let make_library ~output_file ~enable_source_maps ~files =
936924 @@ fun tmp_output_file ->
937925 let z = Zip. open_out tmp_output_file in
938926 add_info z ~build_info ~unit_data () ;
939- (*
940- - Merge all code files into a single code file (gathering source maps)
941- - Copy source files
942- *)
943927 Fs. with_intermediate_file (Filename. temp_file " wasm" " .wasm" )
944928 @@ fun tmp_wasm_file ->
945- opt_with
946- Fs. with_intermediate_file
947- (if enable_source_maps then Some (Filename. temp_file " wasm" " .map" ) else None )
948- @@ fun opt_output_sourcemap_file ->
949- Wasm_link. f
950- (List. map
951- ~f: (fun file ->
952- let z' = Zip. open_in file in
953- { Wasm_link. module_name = " OCaml"
954- ; file
955- ; code = Some (Zip. read_entry z' ~name: " code.wasm" )
956- ; opt_source_map =
957- (if Zip. has_entry z' ~name: " source_map.map"
958- then Some (`Data (Zip. read_entry z' ~name: " source_map.map" ))
959- else None )
960- })
961- files)
962- ~output_file: tmp_wasm_file
963- ~opt_output_sourcemap_file ;
929+ let output_sourcemap =
930+ Wasm_link. f
931+ (let tmp_buf = Buffer. create 10000 in
932+ List. map
933+ ~f: (fun file ->
934+ let z' = Zip. open_in file in
935+ { Wasm_link. module_name = " OCaml"
936+ ; file
937+ ; code = Some (Zip. read_entry z' ~name: " code.wasm" )
938+ ; opt_source_map =
939+ (if enable_source_maps && Zip. has_entry z' ~name: " source_map.map"
940+ then
941+ Some
942+ (Source_map.Standard. of_string
943+ ~tmp_buf
944+ (Zip. read_entry z' ~name: " source_map.map" ))
945+ else None )
946+ })
947+ files)
948+ ~output_file: tmp_wasm_file
949+ in
964950 Zip. add_file z ~name: " code.wasm" ~file: tmp_wasm_file;
965- add_source_map files z opt_output_sourcemap_file ;
951+ if enable_source_maps then add_source_map files z output_sourcemap ;
966952 Zip. close_out z
967953
968954let link ~output_file ~linkall ~mklib ~enable_source_maps ~files =
0 commit comments