@@ -52,11 +52,13 @@ import Language.PureScript.Comments
52import Language.PureScript.CoreFn
52import Language.PureScript.CoreFn
53import Language.PureScript.Names
53import Language.PureScript.Names
54import Language.PureScript.Options
54import Language.PureScript.Options
55+import Language.PureScript.PSString (PSString, mkString)
55import Language.PureScript.Sugar.TypeClasses (superClassDictionaryNames)
56import Language.PureScript.Sugar.TypeClasses (superClassDictionaryNames)
56import Language.PureScript.Traversals (sndM)
57import Language.PureScript.Traversals (sndM)
58import qualified Language.PureScript.Constants as C
59import qualified Language.PureScript.Constants as C
59import qualified Language.PureScript.Environment as E
60import qualified Language.PureScript.Environment as E
61+import Language.PureScript.Label (runLabel)
60import qualified Language.PureScript.Pretty.Cpp as P
62import qualified Language.PureScript.Pretty.Cpp as P
61import qualified Language.PureScript.Types as T
63import qualified Language.PureScript.Types as T
@@ -455,8 +457,8 @@ moduleToCpp otherOpts env (Module _ mn imps _ foreigns decls) = do
455 CppMapLiteral Record $
457 CppMapLiteral Record $
456 (\(k, v) -> (CppSymbol k, v)) <$> sortBy (compare `on` fst) (origFields ++ updatedFields)
458 (\(k, v) -> (CppSymbol k, v)) <$> sortBy (compare `on` fst) (origFields ++ updatedFields)
458− allKeys :: T.Type -> [Text]
460+ allKeys :: T.Type -> [PSString]
459− allKeys (T.TypeApp (T.TypeConstructor _) r@(T.RCons {})) = fst <$> (fst $ T.rowToList r)
461+ allKeys (T.TypeApp (T.TypeConstructor _) r@(T.RCons {})) = runLabel . fst <$> (fst $ T.rowToList r)
460 allKeys (T.ForAll _ t _) = allKeys t
462 allKeys (T.ForAll _ t _) = allKeys t
461 allKeys _ = error "Not a recognized row type"
463 allKeys _ = error "Not a recognized row type"
462 valueToCpp (ObjectUpdate _ _ _) = error $ "Bad Type in object update!"
464 valueToCpp (ObjectUpdate _ _ _) = error $ "Bad Type in object update!"
@@ -485,7 +487,9 @@ moduleToCpp otherOpts env (Module _ mn imps _ foreigns decls) = do
485 Var (_, _, _, Just IsTypeClassConstructor) (Qualified mn' (Ident classname)) ->
487 Var (_, _, _, Just IsTypeClassConstructor) (Qualified mn' (Ident classname)) ->
486 let Just (_, constraints, fns) = findClass (Qualified mn' (ProperName classname))
488 let Just (_, constraints, fns) = findClass (Qualified mn' (ProperName classname))
487 in return . CppMapLiteral Instance $
489 in return . CppMapLiteral Instance $
488− zip (CppSymbol <$> (sort $ superClassDictionaryNames constraints) ++ (fst <$> fns)) args'
491+ (CppSymbol . mkString <$> (sort $ superClassDictionaryNames constraints) ++ (fst <$> fns))
489 Var _ (Qualified (Just _) _) -> applied f args' curriedName'
493 Var _ (Qualified (Just _) _) -> applied f args' curriedName'
490 _ -> applied f args' id
494 _ -> applied f args' id
@@ -567,7 +571,7 @@ moduleToCpp otherOpts env (Module _ mn imps _ foreigns decls) = do
567 go _ _ _ = error "Invalid arguments to bindersToCpp"
571 go _ _ _ = error "Invalid arguments to bindersToCpp"
568 failedPatternError :: [Text] -> Cpp
572 failedPatternError :: [Text] -> Cpp
569 failedPatternError _ =
573 failedPatternError _ =
570− CppThrow $ CppApp (CppVar "runtime_error") [CppStringLiteral errorMessage]
574+ CppThrow $ CppApp (CppVar "runtime_error") [CppStringLiteral $ mkString errorMessage]
571 errorMessage :: Text
575 errorMessage :: Text
572 errorMessage =
576 errorMessage =
573 "Failed pattern match" <>
577 "Failed pattern match" <>
@@ -668,7 +672,7 @@ moduleToCpp otherOpts env (Module _ mn imps _ foreigns decls) = do
668 return [CppIfElse (CppUnary Not (CppVar varName)) (CppBlock done) Nothing]
672 return [CppIfElse (CppUnary Not (CppVar varName)) (CppBlock done) Nothing]
669 literalToBinderCpp varName done (ObjectLiteral bs) = go done bs
673 literalToBinderCpp varName done (ObjectLiteral bs) = go done bs
671− go :: [Cpp] -> [(Text, Binder Ann)] -> m [Cpp]
675+ go :: [Cpp] -> [(PSString, Binder Ann)] -> m [Cpp]
672 go done' [] = return done'
676 go done' [] = return done'
673 go done' ((prop, binder):bs') = do
677 go done' ((prop, binder):bs') = do
674 propVar <- freshName
678 propVar <- freshName
@@ -840,7 +844,7 @@ optIndexers classes = everywhereOnCpp dictIndexerToEnum
840 dictIndexerToEnum :: Cpp -> Cpp
844 dictIndexerToEnum :: Cpp -> Cpp
841 dictIndexerToEnum (CppMapGet (CppSymbol prop) dict)
845 dictIndexerToEnum (CppMapGet (CppSymbol prop) dict)
842 | Just cls <- lookup dict classes =
846 | Just cls <- lookup dict classes =
843− let index = CppAccessor (CppVar $ safeName prop) cls
847+ let index = CppAccessor (CppVar . safeName $ P.utf16Text prop) cls
844 in CppMapGet index dict
848 in CppMapGet index dict
845 dictIndexerToEnum cpp = cpp
849 dictIndexerToEnum cpp = cpp
@@ -894,11 +898,11 @@ convertIfPrimFn (Just ty) (CppFunction name params _ qs body)
894convertIfPrimFn _ cpp = cpp
898convertIfPrimFn _ cpp = cpp
896---------------------------------------------------------------------------------------------------
900---------------------------------------------------------------------------------------------------
897−allSymbols :: [Cpp] -> [Text]
901+allSymbols :: [Cpp] -> [PSString]
898---------------------------------------------------------------------------------------------------
902---------------------------------------------------------------------------------------------------
899allSymbols cpps = nub $ concatMap (everythingOnCpp (++) symbols) cpps
903allSymbols cpps = nub $ concatMap (everythingOnCpp (++) symbols) cpps
901− symbols :: Cpp -> [Text]
905+ symbols :: Cpp -> [PSString]
902 symbols (CppSymbol s) = [s]
906 symbols (CppSymbol s) = [s]
903 symbols _ = []
907 symbols _ = []