git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Fix an optimizer bug
53cc34fPhil Freeman
examples/passing/OptimizerBug.pursnew file+5
@@ -0,0 +1,5 @@
1+module OptimizerBug where
2+
3+x = 1 + y
4+
5+y = x
purescript.cabal+1−1
@@ -1,5 +1,5 @@
1name: purescript
1name: purescript
2−version: 0.2.10.1
2+version: 0.2.10.2
3cabal-version: >=1.8
3cabal-version: >=1.8
4build-type: Simple
4build-type: Simple
5license: MIT
5license: MIT
src/Language/PureScript.hs+1−1
@@ -33,6 +33,6 @@ compile :: Options -> [Module] -> Either String (String, String, Environment)
33compile opts ms = do
33compile opts ms = do
34 desugared <- desugar ms
34 desugared <- desugar ms
35 (_, env) <- runCheck $ forM_ desugared $ \(Module moduleName decls) -> typeCheckAll (ModuleName moduleName) decls
35 (_, env) <- runCheck $ forM_ desugared $ \(Module moduleName decls) -> typeCheckAll (ModuleName moduleName) decls
36− let js = prettyPrintJS . map (optimize opts) . concatMap (flip (moduleToJs opts) env) $ desugared
36+ let js = prettyPrintJS . concatMap (flip (moduleToJs opts) env) $ desugared
37 let exts = intercalate "\n" . map (flip moduleToPs env) $ desugared
37 let exts = intercalate "\n" . map (flip moduleToPs env) $ desugared
38 return (js, exts, env)
38 return (js, exts, env)
src/Language/PureScript/CodeGen/JS.hs+2−1
@@ -33,13 +33,14 @@ import Language.PureScript.CodeGen.Monad
33import Language.PureScript.Options
33import Language.PureScript.Options
34import Language.PureScript.CodeGen.JS.AST as AST
34import Language.PureScript.CodeGen.JS.AST as AST
35import Language.PureScript.Types
35import Language.PureScript.Types
36+import Language.PureScript.CodeGen.Optimize
36
37
37moduleToJs :: Options -> Module -> Environment -> [JS]
38moduleToJs :: Options -> Module -> Environment -> [JS]
38moduleToJs opts (Module pname@(ProperName name) decls) env =
39moduleToJs opts (Module pname@(ProperName name) decls) env =
39 mapMaybe filterRawDecls decls ++
40 mapMaybe filterRawDecls decls ++
40 [ JSVariableIntroduction (Ident name) Nothing
41 [ JSVariableIntroduction (Ident name) Nothing
41 , JSApp (JSFunction Nothing [Ident name]
42 , JSApp (JSFunction Nothing [Ident name]
42− (JSBlock (concat $ mapMaybe (\decl -> declToJs opts (ModuleName pname) decl env) decls)))
43+ (JSBlock (concat $ mapMaybe (\decl -> fmap (map $ optimize opts) $ declToJs opts (ModuleName pname) decl env) decls)))
43 [JSAssignment (JSAssignVariable (Ident name))
44 [JSAssignment (JSAssignVariable (Ident name))
44 (JSBinary Or (JSVar (Ident name)) (JSObjectLiteral []))]
45 (JSBinary Or (JSVar (Ident name)) (JSObjectLiteral []))]
45 ]
46 ]