git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
C++: update to 0.9 (untested)
commitece2ea5ad3998fa156f937bdb9493b78c0f36136 authorAndy Arvanitis <andyarvanitis@gmail.com> dateTue 10 May 2016, 21:57 (10 years ago) parentd4c9de2
16 files changed+35−15
pcc/Main.hs−7 pcc/Make.hs+1−2 pcc/Makefile.hs+1−1 src/Language/PureScript/CodeGen/Cpp.hs+4−2 src/Language/PureScript/CodeGen/Cpp/AST.hs+2 src/Language/PureScript/CodeGen/Cpp/Common.hs+4 src/Language/PureScript/CodeGen/Cpp/File.hs+2 src/Language/PureScript/CodeGen/Cpp/Optimizer.hs+2 src/Language/PureScript/CodeGen/Cpp/Optimizer/Blocks.hs+5−3 src/Language/PureScript/CodeGen/Cpp/Optimizer/Common.hs+2 src/Language/PureScript/CodeGen/Cpp/Optimizer/Inliner.hs+2 src/Language/PureScript/CodeGen/Cpp/Optimizer/MagicDo.hs+2 src/Language/PureScript/CodeGen/Cpp/Optimizer/TCO.hs+2 src/Language/PureScript/CodeGen/Cpp/Optimizer/Unused.hs+2 src/Language/PureScript/CodeGen/Cpp/Types.hs+2 src/Language/PureScript/Pretty/Cpp.hs+2
pcc/Main.hs−7
@@ -101,12 +101,6 @@ outputDirectory = strOption $
101101 <> showDefault
102102 <> help "The output directory"
103103
104−requirePath :: Parser (Maybe FilePath)
105−requirePath = optional $ strOption $
106− short 'r'
107− <> long "require-path"
108− <> help "The path prefix to use for require() calls in the generated code"
109−
110104noTco :: Parser Bool
111105noTco = switch $
112106 long "no-tco"
@@ -157,7 +151,6 @@ options = P.Options <$> noTco
157151 <*> noOpts
158152 <*> verboseErrors
159153 <*> (not <$> comments)
160− <*> requirePath
161154 <*> sourceMaps
162155
163156pccOptions :: Parser PCCOptions
pcc/Make.hs+1−2
@@ -15,6 +15,7 @@
1515{-# LANGUAGE DataKinds #-}
1616{-# LANGUAGE FlexibleContexts #-}
1717{-# LANGUAGE GeneralizedNewtypeDeriving #-}
18+{-# LANGUAGE PatternGuards #-}
1819{-# LANGUAGE TupleSections #-}
1920{-# LANGUAGE TemplateHaskell #-}
2021
@@ -29,9 +30,7 @@ import Control.Monad.Error.Class (MonadError(..))
2930import Control.Monad.Reader
3031
3132import Data.FileEmbed (embedFile)
32−import Data.List (intercalate)
3333import Data.Maybe (fromMaybe)
34−import Data.String (fromString)
3534import Data.Time.Clock
3635import Data.Version (showVersion)
3736import qualified Data.Map as M
pcc/Makefile.hs+1−1
@@ -10,13 +10,13 @@
1010--
1111-------------------------------------------------------------------------------
1212{-# LANGUAGE OverloadedStrings #-}
13+{-# LANGUAGE PatternGuards #-}
1314{-# LANGUAGE TemplateHaskell #-}
1415
1516module Makefile where
1617
1718import Control.Monad (when)
1819import Data.FileEmbed (embedFile)
19−import Data.List
2020import System.Environment (getExecutablePath)
2121import System.Directory (doesFileExist)
2222
src/Language/PureScript/CodeGen/Cpp.hs+4−2
@@ -26,6 +26,8 @@ module Language.PureScript.CodeGen.Cpp
2626 , P.prettyPrintCpp
2727 ) where
2828
29+import Prelude.Compat
30+
2931import Data.Char (isLetter)
3032import Data.List
3133import Data.Function (on)
@@ -185,7 +187,7 @@ moduleToCpp env (Module _ mn imps _ foreigns decls) = do
185187 isIndexer :: Cpp -> Bool
186188 isIndexer (CppIndexer (CppStringLiteral _) (CppVar _)) = True
187189 isIndexer _ = False
188− classes = qualifiedToCpp (Ident . runProperName) . fst <$>
190+ classes = qualifiedToCpp (Ident . runProperName) . T.constraintClass <$>
189191 maybe [] extractConstraints ty'
190192 dictClasses = zip (CppVar . fst <$> arg' : args') classes
191193 convertDictIndexers = everywhereOnCpp (dictIndexerToEnum dictClasses)
@@ -452,7 +454,7 @@ moduleToCpp env (Module _ mn imps _ foreigns decls) = do
452454 where
453455 arg' = identToCpp arg
454456 args' = identToCpp <$> (fst $ unAbs body [])
455− classes = qualifiedToCpp (Ident . runProperName) . fst <$>
457+ classes = qualifiedToCpp (Ident . runProperName) . T.constraintClass <$>
456458 maybe [] extractConstraints ty
457459 dictClasses = zip (CppVar <$> arg' : args') classes
458460 convertDictIndexers = everywhereOnCpp (dictIndexerToEnum dictClasses)
src/Language/PureScript/CodeGen/Cpp/AST.hs+2
@@ -18,6 +18,8 @@
1818
1919module Language.PureScript.CodeGen.Cpp.AST where
2020
21+import Prelude.Compat
22+
2123#if __GLASGOW_HASKELL__ < 710
2224import Control.Applicative (Applicative, (<$>), (<*>))
2325import Data.Traversable (traverse)
src/Language/PureScript/CodeGen/Cpp/Common.hs+4
@@ -17,9 +17,12 @@
1717
1818module Language.PureScript.CodeGen.Cpp.Common where
1919
20+import Prelude.Compat
21+
2022import Data.Char
2123import Data.List (intercalate)
2224
25+import Language.PureScript.Crash
2326import Language.PureScript.Names
2427
2528-- |
@@ -36,6 +39,7 @@ identToCpp (Ident name) | nameIsCppReserved name = '_' : name ++ "_"
3639identToCpp (Ident name@('$' : s)) | all isDigit s = name
3740identToCpp (Ident name) = concatMap identCharToString name
3841identToCpp (Op op) = concatMap identCharToString op
42+identToCpp (GenIdent _ _) = internalError "GenIdent in identToJs"
3943
4044-- |
4145-- Test if a string is a valid Cpp identifier without escaping.
src/Language/PureScript/CodeGen/Cpp/File.hs+2
@@ -17,6 +17,8 @@
1717
1818module Language.PureScript.CodeGen.Cpp.File where
1919
20+import Prelude.Compat
21+
2022import Data.Maybe
2123
2224import Language.PureScript.CodeGen.Cpp.AST
src/Language/PureScript/CodeGen/Cpp/Optimizer.hs+2
@@ -38,6 +38,8 @@ module Language.PureScript.CodeGen.Cpp.Optimizer (
3838 optimize
3939) where
4040
41+import Prelude.Compat
42+
4143#if __GLASGOW_HASKELL__ < 710
4244import Control.Applicative (Applicative)
4345#endif
src/Language/PureScript/CodeGen/Cpp/Optimizer/Blocks.hs+5−3
@@ -19,6 +19,8 @@ module Language.PureScript.CodeGen.Cpp.Optimizer.Blocks
1919 , collapseIfElses
2020 ) where
2121
22+import Prelude.Compat
23+
2224import Language.PureScript.CodeGen.Cpp.AST
2325import qualified Language.PureScript.Constants as C
2426
@@ -49,12 +51,12 @@ collapseIfElses = everywhereOnCpp collapse
4951 collapse :: Cpp -> Cpp
5052 collapse (CppBlock cpps) = CppBlock (go cpps)
5153 where
52− go (st'@(CppIfElse (CppBinary Equal a _) _ Nothing) : sts') =
54+ go (st'@(CppIfElse (CppBinary Equal lhs _) _ Nothing) : sts') =
5355 if length (fst cpps') > 1
54− then CppSwitch a (mkCases <$> fst cpps') : snd cpps'
56+ then CppSwitch lhs (mkCases <$> fst cpps') : snd cpps'
5557 else st' : sts'
5658 where
57− cpps' = span (isIntEq a) (st' : sts')
59+ cpps' = span (isIntEq lhs) (st' : sts')
5860 isIntEq :: Cpp -> Cpp -> Bool
5961 isIntEq a (CppIfElse (CppBinary Equal a' (CppNumericLiteral (Left _))) (CppBlock [CppReturn _]) Nothing)
6062 | a == a' = True
src/Language/PureScript/CodeGen/Cpp/Optimizer/Common.hs+2
@@ -15,6 +15,8 @@
1515
1616module Language.PureScript.CodeGen.Cpp.Optimizer.Common where
1717
18+import Prelude.Compat
19+
1820import Data.Maybe (fromMaybe)
1921
2022import Language.PureScript.CodeGen.Cpp.AST
src/Language/PureScript/CodeGen/Cpp/Optimizer/Inliner.hs+2
@@ -26,6 +26,8 @@ module Language.PureScript.CodeGen.Cpp.Optimizer.Inliner (
2626 evaluateIifes
2727) where
2828
29+import Prelude.Compat
30+
2931#if __GLASGOW_HASKELL__ < 710
3032import Control.Applicative (Applicative)
3133#endif
src/Language/PureScript/CodeGen/Cpp/Optimizer/MagicDo.hs+2
@@ -18,6 +18,8 @@ module Language.PureScript.CodeGen.Cpp.Optimizer.MagicDo (
1818 magicDo
1919) where
2020
21+import Prelude.Compat
22+
2123import Language.PureScript.CodeGen.Cpp.AST
2224import Language.PureScript.CodeGen.Cpp.Common
2325import Language.PureScript.CodeGen.Cpp.Types
src/Language/PureScript/CodeGen/Cpp/Optimizer/TCO.hs+2
@@ -15,6 +15,8 @@
1515
1616module Language.PureScript.CodeGen.Cpp.Optimizer.TCO (tco) where
1717
18+import Prelude.Compat
19+
1820import Data.List
1921import Data.Monoid
2022
src/Language/PureScript/CodeGen/Cpp/Optimizer/Unused.hs+2
@@ -15,6 +15,8 @@
1515
1616module Language.PureScript.CodeGen.Cpp.Optimizer.Unused where
1717
18+import Prelude.Compat
19+
1820import Language.PureScript.CodeGen.Cpp.AST
1921import Language.PureScript.CodeGen.Cpp.Optimizer.Common
2022
src/Language/PureScript/CodeGen/Cpp/Types.hs+2
@@ -18,6 +18,8 @@
1818
1919module Language.PureScript.CodeGen.Cpp.Types where
2020
21+import Prelude.Compat
22+
2123import Data.List
2224
2325import Language.PureScript.CodeGen.Cpp.Common
src/Language/PureScript/Pretty/Cpp.hs+2
@@ -22,6 +22,8 @@ module Language.PureScript.Pretty.Cpp (
2222 prettyPrintCpp,
2323) where
2424
25+import Prelude.Compat
26+
2527import Data.Bits
2628import Data.Char
2729import Data.List