11-----------------------------------------------------------------------------
22--
33-- Module : Language.PureScript
4- -- Copyright : (c) Phil Freeman 2013
4+ -- Copyright : (c) 2013-14 Phil Freeman, (c) 2014 Gary Burgess, and other contributors
55-- License : MIT
66--
77-- Maintainer : Phil Freeman <paf31@cantab.net>
1717
1818module Language.PureScript (module P , compile , compile' , RebuildPolicy (.. ), MonadMake (.. ), make , prelude ) where
1919
20- import Language.PureScript.Types as P
21- import Language.PureScript.Kinds as P
20+ import Data.FileEmbed (embedFile )
21+ import Data.Function (on )
22+ import Data.List (sortBy , groupBy , intercalate )
23+ import Data.Maybe (fromMaybe )
24+ import Data.Time.Clock
25+ import qualified Data.ByteString.UTF8 as BU
26+ import qualified Data.Map as M
27+ import qualified Data.Set as S
28+
29+ import Control.Applicative
30+ import Control.Arrow ((&&&) )
31+ import Control.Monad.Error
32+
33+ import System.FilePath ((</>) )
34+
2235import Language.PureScript.AST as P
36+ import Language.PureScript.CodeGen as P
37+ import Language.PureScript.DeadCodeElimination as P
38+ import Language.PureScript.Environment as P
39+ import Language.PureScript.Errors as P
40+ import Language.PureScript.Kinds as P
41+ import Language.PureScript.ModuleDependencies as P
2342import Language.PureScript.Names as P
43+ import Language.PureScript.Options as P
2444import Language.PureScript.Parser as P
25- import Language.PureScript.CodeGen as P
26- import Language.PureScript.CodeGen.Common as P
27- import Language.PureScript.TypeChecker as P
2845import Language.PureScript.Pretty as P
46+ import Language.PureScript.Renamer as P
2947import Language.PureScript.Sugar as P
30- import Language.PureScript.Options as P
31- import Language.PureScript.ModuleDependencies as P
32- import Language.PureScript.Environment as P
33- import Language.PureScript.Errors as P
34- import Language.PureScript.DeadCodeElimination as P
3548import Language.PureScript.Supply as P
36- import Language.PureScript.Renamer as P
37-
49+ import Language.PureScript.TypeChecker as P
50+ import Language.PureScript.Types as P
51+ import qualified Language.PureScript.CoreFn as CoreFn
3852import qualified Language.PureScript.Constants as C
3953
40- import Data.List (sortBy , groupBy , intercalate )
41- import Data.Time.Clock
42- import Data.Function (on )
43- import Data.Maybe (fromMaybe )
44- import Data.FileEmbed (embedFile )
45-
46- import Control.Monad.Error
47- import Control.Arrow ((&&&) )
48- import Control.Applicative
49-
50- import qualified Data.Map as M
51- import qualified Data.Set as S
52- import qualified Data.ByteString.UTF8 as BU
53-
54- import System.FilePath ((</>) )
55-
5654-- |
5755-- Compile a collection of modules
5856--
@@ -77,17 +75,18 @@ compile = compile' initEnvironment
7775
7876compile' :: Environment -> Options Compile -> [Module ] -> [String ] -> Either String (String , String , Environment )
7977compile' env opts ms prefix = do
80- (sorted, _) <- sortModules $ map importPrim $ if optionsNoPrelude opts then ms else ( map importPrelude ms)
78+ (sorted, _) <- sortModules $ map importPrim $ if optionsNoPrelude opts then ms else map importPrelude ms
8179 (desugared, nextVar) <- stringifyErrorStack True $ runSupplyT 0 $ desugar sorted
8280 (elaborated, env') <- runCheck' opts env $ forM desugared $ typeCheckModule mainModuleIdent
8381 regrouped <- stringifyErrorStack True $ createBindingGroupsModule . collapseBindingGroupsModule $ elaborated
82+ let corefn = map (CoreFn. moduleToCoreFn env') regrouped
8483 let entryPoints = moduleNameFromString `map` entryPointModules (optionsAdditional opts)
85- let elim = if null entryPoints then regrouped else eliminateDeadCode entryPoints regrouped
84+ let elim = if null entryPoints then corefn else eliminateDeadCode entryPoints corefn
8685 let renamed = renameInModules elim
8786 let codeGenModuleNames = moduleNameFromString `map` codeGenModules (optionsAdditional opts)
88- let modulesToCodeGen = if null codeGenModuleNames then renamed else filter (\ (Module mn _ _) -> mn `elem` codeGenModuleNames) renamed
89- let js = evalSupply nextVar $ concat <$> mapM (\ m -> moduleToJs opts m env' ) modulesToCodeGen
90- let exts = intercalate " \n " . map (`moduleToPs` env') $ modulesToCodeGen
87+ let modulesToCodeGen = if null codeGenModuleNames then renamed else filter (\ (CoreFn. Module mn _ _ _ _) -> mn `elem` codeGenModuleNames) renamed
88+ let js = evalSupply nextVar $ concat <$> mapM (moduleToJs opts) modulesToCodeGen
89+ let exts = intercalate " \n " . map (`moduleToPs` env') $ regrouped
9190 js' <- generateMain env' opts js
9291 let pjs = unlines $ map (" // " ++ ) prefix ++ [prettyPrintJS js']
9392 return (pjs, exts, env')
@@ -156,7 +155,7 @@ make :: (Functor m, Applicative m, Monad m, MonadMake m) => FilePath -> Options
156155make outputDir opts ms prefix = do
157156 let filePathMap = M. fromList (map (\ (fp, Module mn _ _) -> (mn, fp)) ms)
158157
159- (sorted, graph) <- liftError $ sortModules $ map importPrim $ if optionsNoPrelude opts then map snd ms else ( map (importPrelude . snd ) ms)
158+ (sorted, graph) <- liftError $ sortModules $ map importPrim $ if optionsNoPrelude opts then map snd ms else map (importPrelude . snd ) ms
160159
161160 toRebuild <- foldM (\ s (Module moduleName' _ _) -> do
162161 let filePath = runModuleName moduleName'
@@ -199,11 +198,12 @@ make outputDir opts ms prefix = do
199198 regrouped <- lift . liftError . stringifyErrorStack True . createBindingGroups moduleName' . collapseBindingGroups $ elaborated
200199
201200 let mod' = Module moduleName' regrouped exps
202- let [renamed] = renameInModules [mod']
201+ let corefn = CoreFn. moduleToCoreFn env' mod'
202+ let [renamed] = renameInModules [corefn]
203203
204- pjs <- prettyPrintJS <$> moduleToJs opts renamed env'
204+ pjs <- prettyPrintJS <$> moduleToJs opts renamed
205205 let js = unlines $ map (" // " ++ ) prefix ++ [pjs]
206- let exts = unlines $ map (" -- " ++ ) prefix ++ [moduleToPs renamed env']
206+ let exts = unlines $ map (" -- " ++ ) prefix ++ [moduleToPs mod' env']
207207
208208 lift $ writeTextFile jsFile js
209209 lift $ writeTextFile externsFile exts
0 commit comments