@@ -849,62 +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. 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 sm (fun i j file -> l := source_name i j file :: ! l);
868- if not (List. is_empty ! l)
869- then z, Array. of_list (List. rev ! l)
870- else (
871- Zip. close_in z;
872- get_source_map_files files src_index))
873- else (
874- Zip. close_in z;
875- get_source_map_files files src_index)
876- else get_source_map_files files src_index
877-
878- let add_source_map files z opt_source_map_file =
879- Option. iter
880- ~f: (fun file ->
881- Zip. add_file z ~name: " source_map.map" ~file ;
882- let sm = Source_map. of_file file in
883- let files = Array. of_list files in
884- let src_index = ref 0 in
885- let st = ref None in
886- 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 =
887883 match ! st with
888- | Some (_ , (z' , _ )) -> Zip. close_in z'
889- | 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'
890890 in
891- Wasm_source_map. iter_sources sm (fun i j file ->
892- let z', files =
893- match ! st with
894- | Some (i' , st ) when Poly. equal i i' -> st
895- | _ ->
896- let st' = get_source_map_files files src_index in
897- finalize () ;
898- st := Some (i, st');
899- st'
900- in
901- if Array. length files > 0 (* Source has source map *)
902- then
903- let name = files.(Option. value ~default: 0 j) in
904- if Zip. has_entry z' ~name
905- then Zip. copy_file z' z ~src_name: name ~dst_name: (source_name i j file));
906- finalize () )
907- 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 ()
908897
909898let make_library ~output_file ~enable_source_maps ~files =
910899 let info =
@@ -935,33 +924,31 @@ let make_library ~output_file ~enable_source_maps ~files =
935924 @@ fun tmp_output_file ->
936925 let z = Zip. open_out tmp_output_file in
937926 add_info z ~build_info ~unit_data () ;
938- (*
939- - Merge all code files into a single code file (gathering source maps)
940- - Copy source files
941- *)
942927 Fs. with_intermediate_file (Filename. temp_file " wasm" " .wasm" )
943928 @@ fun tmp_wasm_file ->
944- opt_with
945- Fs. with_intermediate_file
946- (if enable_source_maps then Some (Filename. temp_file " wasm" " .map" ) else None )
947- @@ fun opt_output_sourcemap_file ->
948- Wasm_link. f
949- (List. map
950- ~f: (fun file ->
951- let z' = Zip. open_in file in
952- { Wasm_link. module_name = " OCaml"
953- ; file
954- ; code = Some (Zip. read_entry z' ~name: " code.wasm" )
955- ; opt_source_map =
956- (if Zip. has_entry z' ~name: " source_map.map"
957- then Some (`Data (Zip. read_entry z' ~name: " source_map.map" ))
958- else None )
959- })
960- files)
961- ~output_file: tmp_wasm_file
962- ~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
963950 Zip. add_file z ~name: " code.wasm" ~file: tmp_wasm_file;
964- add_source_map files z opt_output_sourcemap_file ;
951+ if enable_source_maps then add_source_map files z output_sourcemap ;
965952 Zip. close_out z
966953
967954let link ~output_file ~linkall ~mklib ~enable_source_maps ~files =
0 commit comments