@@ -10,8 +10,12 @@ import Data.Array.NonEmpty as NEA
1010import Data.Array.NonEmpty as NonEmptyArray
1111import Data.Maybe (Maybe(..), maybe)
1212import Data.Newtype (class Newtype, un)
13+import Data.String.Regex as R
14+import Data.String.Regex.Unsafe as R.Unsafe
15+import Data.String.Regex.Flags as R.Flags
1316import Dodo (Doc)
1417import Dodo as D
18+import Partial.Unsafe (unsafeCrashWith)
1519import Prim as Prim
1620import PureScript.Backend.Chez.Constants (libChezSchemePrefix, scmPrefixed)
1721import PureScript.Backend.Optimizer.CoreFn (Ident(..), ModuleName(..), Prop(..), Qualified(..))
@@ -347,6 +351,23 @@ toChezIdent i (Level l) = case i of
347351 _ -> i' <> show l
348352 Nothing -> "_" <> show l
349353
354+jsonToChezString :: Prim.String -> Prim.String
355+jsonToChezString str = unicodeReplace str
356+ where
357+ unicodeRegex :: R.Regex
358+ unicodeRegex = R.Unsafe.unsafeRegex """\\u([A-F\d]{4})""" R.Flags.global
359+
360+ unicodeReplace :: Prim.String -> Prim.String
361+ unicodeReplace s = R.replace' unicodeRegex unicodeReplaceMatch s
362+
363+ unicodeReplaceMatch
364+ :: Prim.String
365+ -> Prim.Array (Maybe Prim.String)
366+ -> Prim.String
367+ unicodeReplaceMatch _ = case _ of
368+ [ (Just x) ] -> "\\x" <> x <> ";"
369+ _ -> unsafeCrashWith "Error matching at unicodeReplaceMatch in jsonToChezString"
370+
350371--
351372
352373chezCond :: NonEmptyArray { c :: ChezExpr, e :: ChezExpr } -> Maybe ChezExpr -> ChezExpr