git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Move FFI JS parsing for psc/psc-make sharing
commitd92871301e88448ed83ed9918fa5bfa4635da6c0 authorGary Burgess <gary.burgess@gmail.com> dateThu 7 May 2015, 21:35 (11 years ago) parent7b5ab61
4 files changed+16−12
psc/Main.hs+1−3 purescript.cabal+2−1 src/Language/PureScript/Parser.hs+1 psc/Foreign.hs → src/Language/PureScript/Parser/JS.hs+12−8
psc/Main.hs+1−3
@@ -45,8 +45,6 @@ import qualified Language.PureScript.Constants as C
4545import qualified Language.PureScript.CoreFn as CF
4646import qualified Paths_purescript as Paths
4747
48−import Foreign
49−
5048data PSCOptions = PSCOptions
5149 { pscInput :: [FilePath]
5250 , pscForeignInput :: [FilePath]
@@ -104,7 +102,7 @@ parseInputs :: (Functor m, Applicative m, MonadError P.MultipleErrors m, MonadWr
104102 => [(Maybe FilePath, String)] -> [(FilePath, String)] -> m ([(Maybe FilePath, P.Module)], M.Map P.ModuleName String)
105103parseInputs modules foreigns =
106104 (,) <$> P.parseModulesFromFiles (fromMaybe "") modules
107− <*> parseForeignModulesFromFiles foreigns
105+ <*> P.parseForeignModulesFromFiles foreigns
108106
109107compileJS :: forall m. (Functor m, Applicative m, MonadError P.MultipleErrors m, MonadWriter P.MultipleErrors m, MonadReader (P.Options P.Compile) m)
110108 => [P.Module] -> M.Map P.ModuleName String -> [String] -> m (String, String)
purescript.cabal+2−1
@@ -88,6 +88,7 @@ library
8888 Language.PureScript.Parser.Lexer
8989 Language.PureScript.Parser.Common
9090 Language.PureScript.Parser.Declarations
91+ Language.PureScript.Parser.JS
9192 Language.PureScript.Parser.Kinds
9293 Language.PureScript.Parser.State
9394 Language.PureScript.Parser.Types
@@ -148,7 +149,7 @@ executable psc
148149 main-is: Main.hs
149150 buildable: True
150151 hs-source-dirs: psc
151− other-modules: Foreign
152+ other-modules:
152153 ghc-options: -Wall -O2 -fno-warn-unused-do-bind
153154
154155executable psc-make
src/Language/PureScript/Parser.hs+1
@@ -33,3 +33,4 @@ import Language.PureScript.Parser.State as P
3333import Language.PureScript.Parser.Kinds as P
3434import Language.PureScript.Parser.Lexer as P
3535import 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 @@
1414
1515{-# LANGUAGE FlexibleContexts #-}
1616
17−module Foreign (parseForeignModulesFromFiles) where
17+module Language.PureScript.Parser.JS (parseForeignModulesFromFiles) where
1818
1919import Control.Applicative ((*>), (<*))
2020import Control.Monad (msum)
2121import 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)
2227import qualified Data.Map as M
23−import qualified Language.PureScript as P
2428import qualified Text.Parsec as PS
2529
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)
2731parseForeignModulesFromFiles files = do
28− foreigns <- P.parU files $ \(path, file) ->
32+ foreigns <- parU files $ \(path, file) ->
2933 case findModuleName (lines file) of
3034 Just name -> return (name, file)
31− Nothing -> throwError (P.errorMessage $ P.ErrorParsingFFIModule path)
35+ Nothing -> throwError (errorMessage $ ErrorParsingFFIModule path)
3236 return $ M.fromList foreigns
3337
34−findModuleName :: [String] -> Maybe P.ModuleName
38+findModuleName :: [String] -> Maybe ModuleName
3539findModuleName = msum . map parseComment
3640 where
37− parseComment :: String -> Maybe P.ModuleName
41+ parseComment :: String -> Maybe ModuleName
3842 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)