Skip to content

Commit ec3ead0

Browse files
committed
Avoid parsing sourceContents in Js_output
1 parent 64f5df3 commit ec3ead0

File tree

3 files changed

+18
-15
lines changed

3 files changed

+18
-15
lines changed

compiler/lib/js_output.ml

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1903,7 +1903,7 @@ let program ?(accept_unnamed_var = false) f ?source_map p =
19031903
let temp_mappings = ref [] in
19041904
let files = Hashtbl.create 17 in
19051905
let names = Hashtbl.create 17 in
1906-
let contents : string option list ref option =
1906+
let contents : Source_map.Source_text.t list ref option =
19071907
match source_map with
19081908
| None | Some { Source_map.sources_contents = None; _ } -> None
19091909
| Some { Source_map.sources_contents = Some _; _ } -> Some (ref [])
@@ -1918,30 +1918,28 @@ let program ?(accept_unnamed_var = false) f ?source_map p =
19181918
| [], _ -> ()
19191919
| x :: xs, [] ->
19201920
Hashtbl.add files x (Hashtbl.length files);
1921-
Option.iter contents ~f:(fun r -> r := None :: !r);
1921+
Option.iter contents ~f:(fun r -> r := Source_map.Source_text.empty :: !r);
19221922
loop xs []
19231923
| x :: xs, y :: ys ->
19241924
Hashtbl.add files x (Hashtbl.length files);
19251925
Option.iter contents ~f:(fun r -> r := y :: !r);
19261926
loop xs ys
19271927
in
1928-
let sources_contents =
1929-
Option.map ~f:(List.map ~f:Source_map.Source_text.decode) sm.sources_contents
1930-
in
1931-
loop sm.sources (Option.value ~default:[] sources_contents);
1928+
loop sm.sources (Option.value ~default:[] sm.sources_contents);
19321929
List.iter sm.Source_map.names ~f:(fun f ->
19331930
Hashtbl.add names f (Hashtbl.length names));
19341931
true
19351932
in
19361933
let find_source file =
1937-
match Builtins.find file with
1938-
| Some f -> Some (Builtins.File.content f)
1939-
| None ->
1940-
if Sys.file_exists file && not (Sys.is_directory file)
1941-
then
1942-
let content = Fs.read_file file in
1943-
Some content
1944-
else None
1934+
Source_map.Source_text.encode (
1935+
match Builtins.find file with
1936+
| Some f -> Some (Builtins.File.content f)
1937+
| None ->
1938+
if Sys.file_exists file && not (Sys.is_directory file)
1939+
then
1940+
let content = Fs.read_file file in
1941+
Some content
1942+
else None)
19451943
in
19461944
( (fun pos m -> temp_mappings := (pos, m) :: !temp_mappings)
19471945
, (fun file ->
@@ -1985,7 +1983,7 @@ let program ?(accept_unnamed_var = false) f ?source_map p =
19851983
let sources_contents =
19861984
let open Option.Syntax in
19871985
let* r = contents in
1988-
Option.return (List.map ~f:Source_map.Source_text.encode (List.rev !r))
1986+
Option.return (List.rev !r)
19891987
in
19901988
let sources =
19911989
List.map sources ~f:(fun filename ->

compiler/lib/source_map.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
(* Js_of_ocaml compiler
23
* http://www.ocsigen.org/js_of_ocaml/
34
* Copyright (C) 2013 Hugo Heuzard
@@ -566,6 +567,8 @@ module Source_text = struct
566567
external of_json_string : string -> t = "%identity"
567568

568569
external to_json_string : t -> string = "%identity"
570+
571+
let empty = Uninterpreted ""
569572

570573
let to_json =
571574
function

compiler/lib/source_map.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ end
7979
module Source_text : sig
8080
type t
8181

82+
val empty : t
83+
8284
val of_json_string : string -> t
8385
(** By default, sources contents are left uninterpreted as decoding this field can be
8486
costly if the amount of code is large, and is seldom required. It is guaranteed that

0 commit comments

Comments
 (0)