@@ -23,6 +23,7 @@ module Language.PureScript.CodeGen.Cpp
23 ( module AST
23 ( module AST
24 , module Common
24 , module Common
25 , moduleToCpp
25 , moduleToCpp
26 , P.prettyPrintCpp
27 , P.prettyPrintCpp
@@ -44,6 +45,7 @@ import Language.PureScript.CodeGen.Cpp.File
44import Language.PureScript.CodeGen.Cpp.Optimizer
45import Language.PureScript.CodeGen.Cpp.Optimizer
45import Language.PureScript.CodeGen.Cpp.Optimizer.TCO
46import Language.PureScript.CodeGen.Cpp.Optimizer.TCO
46import Language.PureScript.CodeGen.Cpp.Types
47import Language.PureScript.CodeGen.Cpp.Types
48+import Language.PureScript.CodeGen.Cpp.Unicode
47import Language.PureScript.Comments
49import Language.PureScript.Comments
48import Language.PureScript.CoreFn
50import Language.PureScript.CoreFn
49import Language.PureScript.Names
51import Language.PureScript.Names
@@ -56,6 +58,10 @@ import qualified Language.PureScript.Environment as E
56import qualified Language.PureScript.Pretty.Cpp as P
58import qualified Language.PureScript.Pretty.Cpp as P
57import qualified Language.PureScript.Types as T
59import qualified Language.PureScript.Types as T
61+data OtherOptions = OtherOptions
62+ { optionsUseUCNs :: Bool
60-- Generate code in the simplified C++1x intermediate representation for all declarations in a
66-- Generate code in the simplified C++1x intermediate representation for all declarations in a
@@ -64,9 +70,9 @@ import qualified Language.PureScript.Types as T
64moduleToCpp
70moduleToCpp
65 :: forall m.
71 :: forall m.
66 (Applicative m, Monad m, MonadReader Options m, MonadSupply m)
72 (Applicative m, Monad m, MonadReader Options m, MonadSupply m)
67− => E.Environment -> Module Ann -> m [Cpp]
73+ => OtherOptions -> E.Environment -> Module Ann -> m [Cpp]
68---------------------------------------------------------------------------------------------------
74---------------------------------------------------------------------------------------------------
69−moduleToCpp env (Module _ mn imps _ foreigns decls) = do
75+moduleToCpp otherOpts env (Module _ mn imps _ foreigns decls) = do
70 cppImports <-
76 cppImports <-
71 traverse (pure . runModuleName) . delete (ModuleName [ProperName C.prim]) . (\\ [mn]) $
77 traverse (pure . runModuleName) . delete (ModuleName [ProperName C.prim]) . (\\ [mn]) $
72 (snd <$> imps)
78 (snd <$> imps)
@@ -83,7 +89,7 @@ moduleToCpp env (Module _ mn imps _ foreigns decls) = do
83 E.dataConstructors env
89 E.dataConstructors env
84 cpps' <- traverse (optimize $ namesmap ++ datamap) cpps
90 cpps' <- traverse (optimize $ namesmap ++ datamap) cpps
85 foreignWrappers <- curriedForeigns
91 foreignWrappers <- curriedForeigns
86− let optimized = cpps' ++ foreignWrappers
92+ let optimized = (otherTransforms otherOpts <$> cpps') ++ foreignWrappers
87 let moduleHeader =
93 let moduleHeader =
88 fileBegin mn "HH" ++
94 fileBegin mn "HH" ++
89 P.linebreak ++
95 P.linebreak ++
@@ -917,3 +923,9 @@ filterInlineFuncs = everywhereOnCpp convert
917 shouldRemove CppLambda {} = True
923 shouldRemove CppLambda {} = True
918 shouldRemove _ = False
924 shouldRemove _ = False
919 convert cpp = cpp
925 convert cpp = cpp
927+---------------------------------------------------------------------------------------------------
928+otherTransforms :: OtherOptions -> Cpp -> Cpp
929+---------------------------------------------------------------------------------------------------
930+otherTransforms OtherOptions {optionsUseUCNs = True} = everywhereOnCpp unicodeToUCNs
931+otherTransforms _ = id