diff src/prim.sml @ 1053:4eb1c4a1b057

Escaping UTF-8 in MonoOpt
author Adam Chlipala <adamc@hcoop.net>
date Thu, 03 Dec 2009 11:20:13 -0500
parents 280f81731426
children b06a2a65e670
line wrap: on
line diff
--- a/src/prim.sml	Wed Nov 25 09:48:23 2009 -0500
+++ b/src/prim.sml	Thu Dec 03 11:20:13 2009 -0500
@@ -68,12 +68,23 @@
       | String s => s
       | Char ch => str ch
 
+fun pad (n, ch, s) =
+    if size s >= n then
+        s
+    else
+        str ch ^ pad (n-1, ch, s)
+
+val gccify = String.translate (fn ch => if Char.isPrint ch then
+                                            str ch
+                                        else
+                                            "\\" ^ pad (3, #"0", Int.fmt StringCvt.OCT (ord ch)))
+
 fun p_t_GCC t =
     case t of
         Int n => string (int2s n)
       | Float n => string (float2s n)
-      | String s => box [string "\"", string (String.toString s), string "\""]
-      | Char ch => box [string "'", string (String.toString (str ch)), string "'"]
+      | String s => box [string "\"", string (gccify s), string "\""]
+      | Char ch => box [string "'", string (gccify (str ch)), string "'"]
 
 fun equal x =
     case x of