git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Move FFI JS parsing for psc/psc-make sharing
d928713Gary Burgess
psc/Main.hs+1−3
@@ -45,8 +45,6 @@ import qualified Language.PureScript.Constants as C
45import qualified Language.PureScript.CoreFn as CF
45import qualified Language.PureScript.CoreFn as CF
46import qualified Paths_purescript as Paths
46import qualified Paths_purescript as Paths
47
47
48−import Foreign
49−
50data PSCOptions = PSCOptions
48data PSCOptions = PSCOptions
51 { pscInput :: [FilePath]
49 { pscInput :: [FilePath]
52 , pscForeignInput :: [FilePath]
50 , pscForeignInput :: [FilePath]
@@ -104,7 +102,7 @@ parseInputs :: (Functor m, Applicative m, MonadError P.MultipleErrors m, MonadWr
104 => [(Maybe FilePath, String)] -> [(FilePath, String)] -> m ([(Maybe FilePath, P.Module)], M.Map P.ModuleName String)
102 => [(Maybe FilePath, String)] -> [(FilePath, String)] -> m ([(Maybe FilePath, P.Module)], M.Map P.ModuleName String)
105parseInputs modules foreigns =
103parseInputs modules foreigns =
106 (,) <$> P.parseModulesFromFiles (fromMaybe "") modules
104 (,) <$> P.parseModulesFromFiles (fromMaybe "") modules
107− <*> parseForeignModulesFromFiles foreigns
105+ <*> P.parseForeignModulesFromFiles foreigns
108
106
109compileJS :: forall m. (Functor m, Applicative m, MonadError P.MultipleErrors m, MonadWriter P.MultipleErrors m, MonadReader (P.Options P.Compile) m)
107compileJS :: forall m. (Functor m, Applicative m, MonadError P.MultipleErrors m, MonadWriter P.MultipleErrors m, MonadReader (P.Options P.Compile) m)
110 => [P.Module] -> M.Map P.ModuleName String -> [String] -> m (String, String)
108 => [P.Module] -> M.Map P.ModuleName String -> [String] -> m (String, String)
purescript.cabal+2−1
@@ -88,6 +88,7 @@ library
88 Language.PureScript.Parser.Lexer
88 Language.PureScript.Parser.Lexer
89 Language.PureScript.Parser.Common
89 Language.PureScript.Parser.Common
90 Language.PureScript.Parser.Declarations
90 Language.PureScript.Parser.Declarations
91+ Language.PureScript.Parser.JS
91 Language.PureScript.Parser.Kinds
92 Language.PureScript.Parser.Kinds
92 Language.PureScript.Parser.State
93 Language.PureScript.Parser.State
93 Language.PureScript.Parser.Types
94 Language.PureScript.Parser.Types
@@ -148,7 +149,7 @@ executable psc
148 main-is: Main.hs
149 main-is: Main.hs
149 buildable: True
150 buildable: True
150 hs-source-dirs: psc
151 hs-source-dirs: psc
151− other-modules: Foreign
152+ other-modules:
152 ghc-options: -Wall -O2 -fno-warn-unused-do-bind
153 ghc-options: -Wall -O2 -fno-warn-unused-do-bind
153
154
154executable psc-make
155executable psc-make
src/Language/PureScript/Parser.hs+1
@@ -33,3 +33,4 @@ import Language.PureScript.Parser.State as P
33import Language.PureScript.Parser.Kinds as P
33import Language.PureScript.Parser.Kinds as P
34import Language.PureScript.Parser.Lexer as P
34import Language.PureScript.Parser.Lexer as P
35import Language.PureScript.Parser.Declarations as P
35import Language.PureScript.Parser.Declarations as P
36+import Language.PureScript.Parser.JS as P
psc/Foreign.hs → src/Language/PureScript/Parser/JS.hsrenamed+12−8
@@ -14,26 +14,30 @@
14
14
15{-# LANGUAGE FlexibleContexts #-}
15{-# LANGUAGE FlexibleContexts #-}
16
16
17−module Foreign (parseForeignModulesFromFiles) where
17+module Language.PureScript.Parser.JS (parseForeignModulesFromFiles) where
18
18
19import Control.Applicative ((*>), (<*))
19import Control.Applicative ((*>), (<*))
20import Control.Monad (msum)
20import Control.Monad (msum)
21import Control.Monad.Error.Class (MonadError(..))
21import Control.Monad.Error.Class (MonadError(..))
22+import Language.PureScript.Errors
23+import Language.PureScript.Names
24+import Language.PureScript.Parser.Common
25+import Language.PureScript.Parser.Lexer
26+import Prelude hiding (lex)
22import qualified Data.Map as M
27import qualified Data.Map as M
23−import qualified Language.PureScript as P
24import qualified Text.Parsec as PS
28import qualified Text.Parsec as PS
25
29
26−parseForeignModulesFromFiles :: (MonadError P.MultipleErrors m, Functor m) => [(FilePath, String)] -> m (M.Map P.ModuleName String)
30+parseForeignModulesFromFiles :: (MonadError MultipleErrors m, Functor m) => [(FilePath, String)] -> m (M.Map ModuleName String)
27parseForeignModulesFromFiles files = do
31parseForeignModulesFromFiles files = do
28− foreigns <- P.parU files $ \(path, file) ->
32+ foreigns <- parU files $ \(path, file) ->
29 case findModuleName (lines file) of
33 case findModuleName (lines file) of
30 Just name -> return (name, file)
34 Just name -> return (name, file)
31− Nothing -> throwError (P.errorMessage $ P.ErrorParsingFFIModule path)
35+ Nothing -> throwError (errorMessage $ ErrorParsingFFIModule path)
32 return $ M.fromList foreigns
36 return $ M.fromList foreigns
33
37
34−findModuleName :: [String] -> Maybe P.ModuleName
38+findModuleName :: [String] -> Maybe ModuleName
35findModuleName = msum . map parseComment
39findModuleName = msum . map parseComment
36 where
40 where
37− parseComment :: String -> Maybe P.ModuleName
41+ parseComment :: String -> Maybe ModuleName
38 parseComment s = either (const Nothing) Just $
42 parseComment s = either (const Nothing) Just $
39− P.lex "" s >>= P.runTokenParser "" (P.symbol' "//" *> P.reserved "module" *> P.moduleName <* PS.eof)
43+ lex "" s >>= runTokenParser "" (symbol' "//" *> reserved "module" *> moduleName <* PS.eof)