CCSexp: Escape empty atoms

Otherwise (`List [ `Atom "" ]) would be formatted as "()", which is (`List []).
This commit is contained in:
juloo 2020-03-28 22:45:10 +01:00 committed by Simon Cruanes
parent a5b8a0aa18
commit 203723d350

View file

@ -61,6 +61,9 @@ module Make(Sexp : SEXP) = struct
false
with Exit -> true
(* empty atoms must be escaped *)
let _must_escape s = String.length s = 0 || _must_escape s
let rec to_buf b t =
Sexp.match_ t
~atom:(fun s ->
@ -358,6 +361,14 @@ include (Make(struct
*)
(*$inject
let sexp_bijective s = to_string s |> parse_string = Ok s
*)
(*$T
sexp_bijective (`List [`Atom ""])
*)
(*$inject
let sexp_gen =
let mkatom a = `Atom a and mklist l = `List l in
@ -384,15 +395,10 @@ include (Make(struct
| `List l -> Q.Iter.map mklist (Q.Shrink.list ~shrink l)
in
Q.make ~print ~small ~shrink gen
let rec sexp_valid = function
| `Atom "" -> false
| `Atom _ -> true
| `List l -> List.for_all sexp_valid l
*)
(*$Q & ~count:100
sexp_gen (fun s -> sexp_valid s ==> (to_string s |> parse_string = Ok s))
sexp_gen sexp_bijective
*)
let atom s : t = `Atom s