Mercurial > meta
diff json.ur @ 30:4e673b535434
Optimizing JSON generation
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Thu, 04 Dec 2014 19:52:51 -0500 |
parents | 7530b2b54353 |
children |
line wrap: on
line diff
--- a/json.ur Sun Jul 29 12:27:36 2012 -0400 +++ b/json.ur Thu Dec 04 19:52:51 2014 -0500 @@ -39,22 +39,20 @@ fun escape s = let - val len = String.length s - - fun esc i = - if i >= len then - "\"" - else + fun esc s = + case s of + "" => "\"" + | _ => let - val ch = String.sub s i + val ch = String.sub s 0 in (if ch = #"\"" || ch = #"\\" then "\\" ^ String.str ch else - String.str ch) ^ esc (i+1) + String.str ch) ^ esc (String.suffix s 1) end in - "\"" ^ esc 0 + "\"" ^ esc s end fun unescape s = @@ -210,7 +208,7 @@ (fn [nm ::_] [t ::_] [r ::_] [[nm] ~ r] (j : json t) name v acc => escape name ^ ":" ^ j.ToJson v ^ (case acc of "" => "" - | _ => "," ^ acc)) + | acc => "," ^ acc)) "" fl jss names r ^ "}", FromJson = fn s => let