From 203723d3505dfbdf983e32223a98e850cc6f8a79 Mon Sep 17 00:00:00 2001 From: juloo Date: Sat, 28 Mar 2020 22:45:10 +0100 Subject: [PATCH] CCSexp: Escape empty atoms Otherwise (`List [ `Atom "" ]) would be formatted as "()", which is (`List []). --- src/sexp/CCSexp.ml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/sexp/CCSexp.ml b/src/sexp/CCSexp.ml index 201ab78b..b9c5f05c 100644 --- a/src/sexp/CCSexp.ml +++ b/src/sexp/CCSexp.ml @@ -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