git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
C++: update to 0.9 (untested)
ece2ea5Andy Arvanitis
pcc/Main.hs−7
@@ -101,12 +101,6 @@ outputDirectory = strOption $
101 <> showDefault
101 <> showDefault
102 <> help "The output directory"
102 <> help "The output directory"
103
103
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−
110noTco :: Parser Bool
104noTco :: Parser Bool
111noTco = switch $
105noTco = switch $
112 long "no-tco"
106 long "no-tco"
@@ -157,7 +151,6 @@ options = P.Options <$> noTco
157 <*> noOpts
151 <*> noOpts
158 <*> verboseErrors
152 <*> verboseErrors
159 <*> (not <$> comments)
153 <*> (not <$> comments)
160− <*> requirePath
161 <*> sourceMaps
154 <*> sourceMaps
162
155
163pccOptions :: Parser PCCOptions
156pccOptions :: Parser PCCOptions
pcc/Make.hs+1−2
@@ -15,6 +15,7 @@
15{-# LANGUAGE DataKinds #-}
15{-# LANGUAGE DataKinds #-}
16{-# LANGUAGE FlexibleContexts #-}
16{-# LANGUAGE FlexibleContexts #-}
17{-# LANGUAGE GeneralizedNewtypeDeriving #-}
17{-# LANGUAGE GeneralizedNewtypeDeriving #-}
18+{-# LANGUAGE PatternGuards #-}
18{-# LANGUAGE TupleSections #-}
19{-# LANGUAGE TupleSections #-}
19{-# LANGUAGE TemplateHaskell #-}
20{-# LANGUAGE TemplateHaskell #-}
20
21
@@ -29,9 +30,7 @@ import Control.Monad.Error.Class (MonadError(..))
29import Control.Monad.Reader
30import Control.Monad.Reader
30
31
31import Data.FileEmbed (embedFile)
32import Data.FileEmbed (embedFile)
32−import Data.List (intercalate)
33import Data.Maybe (fromMaybe)
33import Data.Maybe (fromMaybe)
34−import Data.String (fromString)
35import Data.Time.Clock
34import Data.Time.Clock
36import Data.Version (showVersion)
35import Data.Version (showVersion)
37import qualified Data.Map as M
36import qualified Data.Map as M
pcc/Makefile.hs+1−1
@@ -10,13 +10,13 @@
10--
10--
11-------------------------------------------------------------------------------
11-------------------------------------------------------------------------------
12{-# LANGUAGE OverloadedStrings #-}
12{-# LANGUAGE OverloadedStrings #-}
13+{-# LANGUAGE PatternGuards #-}
13{-# LANGUAGE TemplateHaskell #-}
14{-# LANGUAGE TemplateHaskell #-}
14
15
15module Makefile where
16module Makefile where
16
17
17import Control.Monad (when)
18import Control.Monad (when)
18import Data.FileEmbed (embedFile)
19import Data.FileEmbed (embedFile)
19−import Data.List
20import System.Environment (getExecutablePath)
20import System.Environment (getExecutablePath)
21import System.Directory (doesFileExist)
21import System.Directory (doesFileExist)
22
22
src/Language/PureScript/CodeGen/Cpp.hs+4−2
@@ -26,6 +26,8 @@ module Language.PureScript.CodeGen.Cpp
26 , P.prettyPrintCpp
26 , P.prettyPrintCpp
27 ) where
27 ) where
28
28
29+import Prelude.Compat
30+
29import Data.Char (isLetter)
31import Data.Char (isLetter)
30import Data.List
32import Data.List
31import Data.Function (on)
33import Data.Function (on)
@@ -185,7 +187,7 @@ moduleToCpp env (Module _ mn imps _ foreigns decls) = do
185 isIndexer :: Cpp -> Bool
187 isIndexer :: Cpp -> Bool
186 isIndexer (CppIndexer (CppStringLiteral _) (CppVar _)) = True
188 isIndexer (CppIndexer (CppStringLiteral _) (CppVar _)) = True
187 isIndexer _ = False
189 isIndexer _ = False
188− classes = qualifiedToCpp (Ident . runProperName) . fst <$>
190+ classes = qualifiedToCpp (Ident . runProperName) . T.constraintClass <$>
189 maybe [] extractConstraints ty'
191 maybe [] extractConstraints ty'
190 dictClasses = zip (CppVar . fst <$> arg' : args') classes
192 dictClasses = zip (CppVar . fst <$> arg' : args') classes
191 convertDictIndexers = everywhereOnCpp (dictIndexerToEnum dictClasses)
193 convertDictIndexers = everywhereOnCpp (dictIndexerToEnum dictClasses)
@@ -452,7 +454,7 @@ moduleToCpp env (Module _ mn imps _ foreigns decls) = do
452 where
454 where
453 arg' = identToCpp arg
455 arg' = identToCpp arg
454 args' = identToCpp <$> (fst $ unAbs body [])
456 args' = identToCpp <$> (fst $ unAbs body [])
455− classes = qualifiedToCpp (Ident . runProperName) . fst <$>
457+ classes = qualifiedToCpp (Ident . runProperName) . T.constraintClass <$>
456 maybe [] extractConstraints ty
458 maybe [] extractConstraints ty
457 dictClasses = zip (CppVar <$> arg' : args') classes
459 dictClasses = zip (CppVar <$> arg' : args') classes
458 convertDictIndexers = everywhereOnCpp (dictIndexerToEnum dictClasses)
460 convertDictIndexers = everywhereOnCpp (dictIndexerToEnum dictClasses)
src/Language/PureScript/CodeGen/Cpp/AST.hs+2
@@ -18,6 +18,8 @@
18
18
19module Language.PureScript.CodeGen.Cpp.AST where
19module Language.PureScript.CodeGen.Cpp.AST where
20
20
21+import Prelude.Compat
22+
21#if __GLASGOW_HASKELL__ < 710
23#if __GLASGOW_HASKELL__ < 710
22import Control.Applicative (Applicative, (<$>), (<*>))
24import Control.Applicative (Applicative, (<$>), (<*>))
23import Data.Traversable (traverse)
25import Data.Traversable (traverse)
src/Language/PureScript/CodeGen/Cpp/Common.hs+4
@@ -17,9 +17,12 @@
17
17
18module Language.PureScript.CodeGen.Cpp.Common where
18module Language.PureScript.CodeGen.Cpp.Common where
19
19
20+import Prelude.Compat
21+
20import Data.Char
22import Data.Char
21import Data.List (intercalate)
23import Data.List (intercalate)
22
24
25+import Language.PureScript.Crash
23import Language.PureScript.Names
26import Language.PureScript.Names
24
27
25-- |
28-- |
@@ -36,6 +39,7 @@ identToCpp (Ident name) | nameIsCppReserved name = '_' : name ++ "_"
36identToCpp (Ident name@('$' : s)) | all isDigit s = name
39identToCpp (Ident name@('$' : s)) | all isDigit s = name
37identToCpp (Ident name) = concatMap identCharToString name
40identToCpp (Ident name) = concatMap identCharToString name
38identToCpp (Op op) = concatMap identCharToString op
41identToCpp (Op op) = concatMap identCharToString op
42+identToCpp (GenIdent _ _) = internalError "GenIdent in identToJs"
39
43
40-- |
44-- |
41-- Test if a string is a valid Cpp identifier without escaping.
45-- Test if a string is a valid Cpp identifier without escaping.
src/Language/PureScript/CodeGen/Cpp/File.hs+2
@@ -17,6 +17,8 @@
17
17
18module Language.PureScript.CodeGen.Cpp.File where
18module Language.PureScript.CodeGen.Cpp.File where
19
19
20+import Prelude.Compat
21+
20import Data.Maybe
22import Data.Maybe
21
23
22import Language.PureScript.CodeGen.Cpp.AST
24import Language.PureScript.CodeGen.Cpp.AST
src/Language/PureScript/CodeGen/Cpp/Optimizer.hs+2
@@ -38,6 +38,8 @@ module Language.PureScript.CodeGen.Cpp.Optimizer (
38 optimize
38 optimize
39) where
39) where
40
40
41+import Prelude.Compat
42+
41#if __GLASGOW_HASKELL__ < 710
43#if __GLASGOW_HASKELL__ < 710
42import Control.Applicative (Applicative)
44import Control.Applicative (Applicative)
43#endif
45#endif
src/Language/PureScript/CodeGen/Cpp/Optimizer/Blocks.hs+5−3
@@ -19,6 +19,8 @@ module Language.PureScript.CodeGen.Cpp.Optimizer.Blocks
19 , collapseIfElses
19 , collapseIfElses
20 ) where
20 ) where
21
21
22+import Prelude.Compat
23+
22import Language.PureScript.CodeGen.Cpp.AST
24import Language.PureScript.CodeGen.Cpp.AST
23import qualified Language.PureScript.Constants as C
25import qualified Language.PureScript.Constants as C
24
26
@@ -49,12 +51,12 @@ collapseIfElses = everywhereOnCpp collapse
49 collapse :: Cpp -> Cpp
51 collapse :: Cpp -> Cpp
50 collapse (CppBlock cpps) = CppBlock (go cpps)
52 collapse (CppBlock cpps) = CppBlock (go cpps)
51 where
53 where
52− go (st'@(CppIfElse (CppBinary Equal a _) _ Nothing) : sts') =
54+ go (st'@(CppIfElse (CppBinary Equal lhs _) _ Nothing) : sts') =
53 if length (fst cpps') > 1
55 if length (fst cpps') > 1
54− then CppSwitch a (mkCases <$> fst cpps') : snd cpps'
56+ then CppSwitch lhs (mkCases <$> fst cpps') : snd cpps'
55 else st' : sts'
57 else st' : sts'
56 where
58 where
57− cpps' = span (isIntEq a) (st' : sts')
59+ cpps' = span (isIntEq lhs) (st' : sts')
58 isIntEq :: Cpp -> Cpp -> Bool
60 isIntEq :: Cpp -> Cpp -> Bool
59 isIntEq a (CppIfElse (CppBinary Equal a' (CppNumericLiteral (Left _))) (CppBlock [CppReturn _]) Nothing)
61 isIntEq a (CppIfElse (CppBinary Equal a' (CppNumericLiteral (Left _))) (CppBlock [CppReturn _]) Nothing)
60 | a == a' = True
62 | a == a' = True
src/Language/PureScript/CodeGen/Cpp/Optimizer/Common.hs+2
@@ -15,6 +15,8 @@
15
15
16module Language.PureScript.CodeGen.Cpp.Optimizer.Common where
16module Language.PureScript.CodeGen.Cpp.Optimizer.Common where
17
17
18+import Prelude.Compat
19+
18import Data.Maybe (fromMaybe)
20import Data.Maybe (fromMaybe)
19
21
20import Language.PureScript.CodeGen.Cpp.AST
22import 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 (
26 evaluateIifes
26 evaluateIifes
27) where
27) where
28
28
29+import Prelude.Compat
30+
29#if __GLASGOW_HASKELL__ < 710
31#if __GLASGOW_HASKELL__ < 710
30import Control.Applicative (Applicative)
32import Control.Applicative (Applicative)
31#endif
33#endif
src/Language/PureScript/CodeGen/Cpp/Optimizer/MagicDo.hs+2
@@ -18,6 +18,8 @@ module Language.PureScript.CodeGen.Cpp.Optimizer.MagicDo (
18 magicDo
18 magicDo
19) where
19) where
20
20
21+import Prelude.Compat
22+
21import Language.PureScript.CodeGen.Cpp.AST
23import Language.PureScript.CodeGen.Cpp.AST
22import Language.PureScript.CodeGen.Cpp.Common
24import Language.PureScript.CodeGen.Cpp.Common
23import Language.PureScript.CodeGen.Cpp.Types
25import Language.PureScript.CodeGen.Cpp.Types
src/Language/PureScript/CodeGen/Cpp/Optimizer/TCO.hs+2
@@ -15,6 +15,8 @@
15
15
16module Language.PureScript.CodeGen.Cpp.Optimizer.TCO (tco) where
16module Language.PureScript.CodeGen.Cpp.Optimizer.TCO (tco) where
17
17
18+import Prelude.Compat
19+
18import Data.List
20import Data.List
19import Data.Monoid
21import Data.Monoid
20
22
src/Language/PureScript/CodeGen/Cpp/Optimizer/Unused.hs+2
@@ -15,6 +15,8 @@
15
15
16module Language.PureScript.CodeGen.Cpp.Optimizer.Unused where
16module Language.PureScript.CodeGen.Cpp.Optimizer.Unused where
17
17
18+import Prelude.Compat
19+
18import Language.PureScript.CodeGen.Cpp.AST
20import Language.PureScript.CodeGen.Cpp.AST
19import Language.PureScript.CodeGen.Cpp.Optimizer.Common
21import Language.PureScript.CodeGen.Cpp.Optimizer.Common
20
22
src/Language/PureScript/CodeGen/Cpp/Types.hs+2
@@ -18,6 +18,8 @@
18
18
19module Language.PureScript.CodeGen.Cpp.Types where
19module Language.PureScript.CodeGen.Cpp.Types where
20
20
21+import Prelude.Compat
22+
21import Data.List
23import Data.List
22
24
23import Language.PureScript.CodeGen.Cpp.Common
25import Language.PureScript.CodeGen.Cpp.Common
src/Language/PureScript/Pretty/Cpp.hs+2
@@ -22,6 +22,8 @@ module Language.PureScript.Pretty.Cpp (
22 prettyPrintCpp,
22 prettyPrintCpp,
23) where
23) where
24
24
25+import Prelude.Compat
26+
25import Data.Bits
27import Data.Bits
26import Data.Char
28import Data.Char
27import Data.List
29import Data.List