Skip to content

Commit 7726d2f

Browse files
committed
Move Sexp functions to wasm/ subdirectory
This was made necessary by the changes requested in ocsigen/js_of_ocaml#1657.
1 parent 7f5486a commit 7726d2f

File tree

7 files changed

+81
-59
lines changed

7 files changed

+81
-59
lines changed

compiler/lib/build_info.ml

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -90,19 +90,9 @@ let parse s =
9090
in
9191
Some t
9292

93-
let to_sexp info =
94-
Sexp.List
95-
(info
96-
|> StringMap.bindings
97-
|> List.map ~f:(fun (k, v) -> Sexp.List [ Atom k; Atom v ]))
98-
99-
let from_sexp info =
100-
let open Sexp.Util in
101-
info
102-
|> assoc
103-
|> List.fold_left
104-
~f:(fun m (k, v) -> StringMap.add k (single string v) m)
105-
~init:StringMap.empty
93+
let to_map : t -> string StringMap.t = Fun.id
94+
95+
let of_map : string StringMap.t -> t = Fun.id
10696

10797
exception
10898
Incompatible_build_info of

compiler/lib/build_info.mli

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ val to_string : t -> string
3434

3535
val parse : string -> t option
3636

37-
val to_sexp : t -> Sexp.t
37+
val to_map : t -> string StringMap.t
3838

39-
val from_sexp : Sexp.t -> t
39+
val of_map : string StringMap.t -> t
4040

4141
val with_kind : t -> kind -> t
4242

compiler/lib/unit_info.ml

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -149,43 +149,3 @@ let parse acc s =
149149
| Some ("Effects_without_cps", b) ->
150150
Some { acc with effects_without_cps = bool_of_string (String.trim b) }
151151
| Some (_, _) -> None)
152-
153-
let to_sexp t =
154-
let add nm skip v rem = if skip then rem else Sexp.List (Atom nm :: v) :: rem in
155-
let set nm f rem =
156-
add
157-
nm
158-
(List.equal ~eq:String.equal (f empty) (f t))
159-
(List.map ~f:(fun x -> Sexp.Atom x) (f t))
160-
rem
161-
in
162-
let bool nm f rem =
163-
add
164-
nm
165-
(Bool.equal (f empty) (f t))
166-
(if f t then [ Atom "true" ] else [ Atom "false" ])
167-
rem
168-
in
169-
[]
170-
|> bool "effects_without_cps" (fun t -> t.effects_without_cps)
171-
|> set "primitives" (fun t -> t.primitives)
172-
|> bool "force_link" (fun t -> t.force_link)
173-
|> set "requires" (fun t -> StringSet.elements t.requires)
174-
|> add "provides" false [ Atom (StringSet.choose t.provides) ]
175-
176-
let from_sexp t =
177-
let open Sexp.Util in
178-
let opt_list l = l |> Option.map ~f:(List.map ~f:string) in
179-
let list default l = Option.value ~default (opt_list l) in
180-
let set default l =
181-
Option.value ~default (Option.map ~f:StringSet.of_list (opt_list l))
182-
in
183-
let bool default v = Option.value ~default (Option.map ~f:(single bool) v) in
184-
{ provides = t |> member "provides" |> mandatory (single string) |> StringSet.singleton
185-
; requires = t |> member "requires" |> set empty.requires
186-
; primitives = t |> member "primitives" |> list empty.primitives
187-
; force_link = t |> member "force_link" |> bool empty.force_link
188-
; effects_without_cps =
189-
t |> member "effects_without_cps" |> bool empty.effects_without_cps
190-
; crcs = StringMap.empty
191-
}

compiler/lib/unit_info.mli

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,3 @@ val prefix : string
4141
val to_string : t -> string
4242

4343
val parse : t -> string -> t option
44-
45-
val to_sexp : t -> Sexp.t list
46-
47-
val from_sexp : Sexp.t -> t
File renamed without changes.
File renamed without changes.

compiler/lib/wasm/wa_link.ml

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,82 @@ open Stdlib
2020

2121
let times = Debug.find "times"
2222

23+
module Build_info : sig
24+
include module type of Build_info
25+
26+
val to_sexp : t -> Sexp.t
27+
28+
val from_sexp : Sexp.t -> t
29+
end = struct
30+
include Build_info
31+
32+
let to_sexp info =
33+
Sexp.List
34+
(info
35+
|> to_map
36+
|> StringMap.bindings
37+
|> List.map ~f:(fun (k, v) -> Sexp.List [ Atom k; Atom v ]))
38+
39+
let from_sexp info =
40+
let open Sexp.Util in
41+
info
42+
|> assoc
43+
|> List.fold_left
44+
~f:(fun m (k, v) -> StringMap.add k (single string v) m)
45+
~init:StringMap.empty
46+
|> of_map
47+
end
48+
49+
module Unit_info : sig
50+
include module type of Unit_info
51+
52+
val to_sexp : t -> Sexp.t list
53+
54+
val from_sexp : Sexp.t -> t
55+
end = struct
56+
include Unit_info
57+
58+
let to_sexp t =
59+
let add nm skip v rem = if skip then rem else Sexp.List (Atom nm :: v) :: rem in
60+
let set nm f rem =
61+
add
62+
nm
63+
(List.equal ~eq:String.equal (f empty) (f t))
64+
(List.map ~f:(fun x -> Sexp.Atom x) (f t))
65+
rem
66+
in
67+
let bool nm f rem =
68+
add
69+
nm
70+
(Bool.equal (f empty) (f t))
71+
(if f t then [ Atom "true" ] else [ Atom "false" ])
72+
rem
73+
in
74+
[]
75+
|> bool "effects_without_cps" (fun t -> t.effects_without_cps)
76+
|> set "primitives" (fun t -> t.primitives)
77+
|> bool "force_link" (fun t -> t.force_link)
78+
|> set "requires" (fun t -> StringSet.elements t.requires)
79+
|> add "provides" false [ Atom (StringSet.choose t.provides) ]
80+
81+
let from_sexp t =
82+
let open Sexp.Util in
83+
let opt_list l = l |> Option.map ~f:(List.map ~f:string) in
84+
let list default l = Option.value ~default (opt_list l) in
85+
let set default l =
86+
Option.value ~default (Option.map ~f:StringSet.of_list (opt_list l))
87+
in
88+
let bool default v = Option.value ~default (Option.map ~f:(single bool) v) in
89+
{ provides = t |> member "provides" |> mandatory (single string) |> StringSet.singleton
90+
; requires = t |> member "requires" |> set empty.requires
91+
; primitives = t |> member "primitives" |> list empty.primitives
92+
; force_link = t |> member "force_link" |> bool empty.force_link
93+
; effects_without_cps =
94+
t |> member "effects_without_cps" |> bool empty.effects_without_cps
95+
; crcs = StringMap.empty
96+
}
97+
end
98+
2399
module Wasm_binary = struct
24100
let header = "\000asm\001\000\000\000"
25101

0 commit comments

Comments
 (0)