git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Add --codegen option to support separate compilation
commit18ae8f5dd8a77ab8d87cb7c850b63d5eeec736fd authorPhil Freeman <paf31@cantab.net> dateWed 12 Mar 2014, 22:53 (13 years ago) parenteb505ed
4 files changed+15−5
psc/Main.hs+5−1 psci/Main.hs+1−1 src/Language/PureScript.hs+4−2 src/Language/PureScript/Options.hs+5−1
psc/Main.hs+5−1
@@ -107,8 +107,12 @@ dceModules :: Term [String]
107107dceModules = 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+
110114options :: 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
113117stdInOrInputFiles :: FilePath -> Term (Maybe [FilePath])
114118stdInOrInputFiles prelude = combine <$> useStdIn <*> (not <$> noPrelude) <*> inputFiles
psci/Main.hs+1−1
@@ -195,7 +195,7 @@ completion = completeWord Nothing " \t\n\r" findCompletions
195195-- | Compilation options.
196196--
197197options :: 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+4−2
@@ -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+5−1
@@ -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--
5357defaultOptions :: Options
54−defaultOptions = Options False False Nothing False "PS" []
58+defaultOptions = Options False False Nothing False "PS" [] []