let to_buffer_mach ~buf sexp =
let rec loop may_need_space = function
| Atom str ->
let str' = maybe_esc_str str in
let new_may_need_space = str' == str in
if may_need_space && new_may_need_space then Buffer.add_char buf ' ';
Buffer.add_string buf str';
new_may_need_space
| List (h :: t) ->
Buffer.add_char buf '(';
let may_need_space = loop false h in
loop_rest may_need_space t;
false
| List [] -> Buffer.add_string buf "()"; false
and loop_rest may_need_space = function
| h :: t ->
let may_need_space = loop may_need_space h in
loop_rest may_need_space t
| [] -> Buffer.add_char buf ')' in
ignore (loop false sexp)