@@ -42,8 +42,10 @@ import qualified Data.Map as M
42import qualified Language.PureScript as P
42import qualified Language.PureScript as P
43import qualified Language.PureScript.CodeGen.JS as J
43import qualified Language.PureScript.CodeGen.JS as J
44import qualified Language.PureScript.Constants as C
44import qualified Language.PureScript.Constants as C
45+import qualified Language.PureScript.CoreFn as CF
45import qualified Paths_purescript as Paths
46import qualified Paths_purescript as Paths
47import Foreign
49import Foreign
49data PSCOptions = PSCOptions
51data PSCOptions = PSCOptions
@@ -82,7 +84,7 @@ compile (PSCOptions input inputForeign opts stdin output externs usePrefix) = do
82 hPutStrLn stderr err
84 hPutStrLn stderr err
83 exitFailure
85 exitFailure
84 Right (ms, foreigns) ->
86 Right (ms, foreigns) ->
85− case runPSC opts (compileJS (map snd ms) M.empty prefix) of
87+ case runPSC opts (compileJS (map snd ms) foreigns prefix) of
86 Left errs -> do
88 Left errs -> do
87 hPutStrLn stderr (P.prettyPrintMultipleErrors (P.optionsVerboseErrors opts) errs)
89 hPutStrLn stderr (P.prettyPrintMultipleErrors (P.optionsVerboseErrors opts) errs)
88 exitFailure
90 exitFailure
@@ -106,13 +108,21 @@ compileJS :: forall m. (Functor m, Applicative m, MonadError P.MultipleErrors m,
106 => [P.Module] -> M.Map P.ModuleName String -> [String] -> m (String, String)
108 => [P.Module] -> M.Map P.ModuleName String -> [String] -> m (String, String)
107compileJS ms foreigns prefix = do
109compileJS ms foreigns prefix = do
108 (modulesToCodeGen, exts, env, nextVar) <- P.compile ms
110 (modulesToCodeGen, exts, env, nextVar) <- P.compile ms
109− js <- concat <$> evalSupplyT nextVar (traverse J.moduleToJs modulesToCodeGen)
111+ js <- concat <$> evalSupplyT nextVar (traverse codegenModule modulesToCodeGen)
110 js' <- generateMain env js
112 js' <- generateMain env js
111 let pjs = unlines $ map ("// " ++) prefix ++ [P.prettyPrintJS js']
113 let pjs = unlines $ map ("// " ++) prefix ++ [P.prettyPrintJS js']
112 return (pjs, exts)
114 return (pjs, exts)
118+ --codegenModule :: CF.Module CF.Ann -> m [J.JS]
120+ J.moduleToJs m $ (\js -> J.JSApp (J.JSFunction Nothing [] (J.JSBlock
121+ [ J.JSVariableIntroduction "exports" (Just $ J.JSObjectLiteral [])
123+ , J.JSReturn (J.JSVar "exports")
124+ ])) []) <$> CF.moduleName m `M.lookup` foreigns
116 generateMain :: P.Environment -> [J.JS] -> m [J.JS]
126 generateMain :: P.Environment -> [J.JS] -> m [J.JS]
117 generateMain env js = do
127 generateMain env js = do
118 mainName <- asks P.optionsMain
128 mainName <- asks P.optionsMain