Skip to content

Commit 18ae8f5

Browse files
committed
Add --codegen option to support separate compilation
1 parent eb505ed commit 18ae8f5

4 files changed

Lines changed: 15 additions & 5 deletions

File tree

psc/Main.hs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,12 @@ dceModules :: Term [String]
107107
dceModules = value $ optAll [] $ (optInfo [ "m", "module" ])
108108
{ optDoc = "Enables dead code elimination, all code which is not a transitive dependency of a specified module will be removed. This argument can be used multiple times." }
109109

110+
codeGenModules :: Term [String]
111+
codeGenModules = value $ optAll [] $ (optInfo [ "codegen" ])
112+
{ optDoc = "A list of modules for which Javascript and externs should be generated. This argument can be used multiple times." }
113+
110114
options :: Term P.Options
111-
options = P.Options <$> tco <*> magicDo <*> runMain <*> noOpts <*> browserNamespace <*> dceModules
115+
options = P.Options <$> tco <*> magicDo <*> runMain <*> noOpts <*> browserNamespace <*> dceModules <*> codeGenModules
112116

113117
stdInOrInputFiles :: FilePath -> Term (Maybe [FilePath])
114118
stdInOrInputFiles prelude = combine <$> useStdIn <*> (not <$> noPrelude) <*> inputFiles

psci/Main.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ completion = completeWord Nothing " \t\n\r" findCompletions
195195
-- | Compilation options.
196196
--
197197
options :: P.Options
198-
options = P.Options True True (Just "Main") True "PS" []
198+
options = P.Options True True (Just "Main") True "PS" [] []
199199

200200
-- |
201201
-- Makes a volatile module to execute the current expression.

src/Language/PureScript.hs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,10 @@ compile opts ms = do
6868
regrouped <- createBindingGroupsModule . collapseBindingGroupsModule $ elaborated
6969
let entryPoints = moduleNameFromString `map` optionsModules opts
7070
let elim = if null entryPoints then regrouped else eliminateDeadCode entryPoints regrouped
71-
let js = mapMaybe (flip (moduleToJs opts) env) elim
72-
let exts = intercalate "\n" . map (`moduleToPs` env) $ elim
71+
let codeGenModules = moduleNameFromString `map` optionsCodeGenModules opts
72+
let modulesToCodeGen = if null codeGenModules then elim else filter (\(Module mn _ _) -> mn `elem` codeGenModules) elim
73+
let js = mapMaybe (flip (moduleToJs opts) env) modulesToCodeGen
74+
let exts = intercalate "\n" . map (`moduleToPs` env) $ modulesToCodeGen
7375
js' <- case mainModuleIdent of
7476
Just mmi -> do
7577
when ((mmi, Ident C.main) `M.notMember` names env) $

src/Language/PureScript/Options.hs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,14 @@ data Options = Options {
4545
-- The modules to keep while enabling dead code elimination
4646
--
4747
, optionsModules :: [String]
48+
-- |
49+
-- The modules to code gen
50+
--
51+
, optionsCodeGenModules :: [String]
4852
} deriving Show
4953

5054
-- |
5155
-- Default compiler options
5256
--
5357
defaultOptions :: Options
54-
defaultOptions = Options False False Nothing False "PS" []
58+
defaultOptions = Options False False Nothing False "PS" [] []

0 commit comments

Comments
 (0)