git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
TCO loop fixes
commit0cd4f996798858f1a641187764880fb7c9dd2166 authorAndy Arvanitis <andyarvanitis@gmail.com> dateSun 30 Jun 2019, 18:36 (7 years ago) parent5985e07
2 files changed+9−3
src/CodeGen/IL/Optimizer/TCO.hs+2−2 src/CodeGen/IL/Printer.hs+7−1
src/CodeGen/IL/Optimizer/TCO.hs+2−2
@@ -91,9 +91,9 @@ tco mn = everywhere convert where
9191 Block rootSS $
9292 concatMap (\arg -> [ VariableIntroduction rootSS (tcoVar arg) . Just $
9393 Var rootSS (copyVar arg) ]) (outerArgs ++ innerArgs) ++
94− [ Var rootSS (tcoDone <> " := false")
94+ [ Assignment rootSS (Var rootSS $ "var " <> tcoDone) $ BooleanLiteral Nothing False
9595 , VariableIntroduction rootSS tcoResult Nothing
96− , Assignment rootSS (Var rootSS ("var " <> tcoLoop)) (Function rootSS (Just tcoLoop) (outerArgs ++ innerArgs) (Block rootSS [loopify js]))
96+ , Assignment rootSS (Var rootSS $ "var " <> tcoLoop) (Function rootSS (Just tcoLoop) (outerArgs ++ innerArgs) (Block rootSS [loopify js]))
9797 , While rootSS (Unary Nothing Not (Var rootSS tcoDone))
9898 (Block rootSS
9999 [(Assignment rootSS (Var rootSS tcoResult) (App rootSS (Var rootSS tcoLoop) ((map (Var rootSS . tcoVar) outerArgs) ++ (map (Var rootSS . copyVar) innerArgs))))])
src/CodeGen/IL/Printer.hs+7−1
@@ -95,11 +95,17 @@ literals = mkPattern' match'
9595 , return $ emit ")"
9696 ]
9797 match (App _ (Var _ fn) [arg]) | fn == arrayLengthFn = mconcat <$> sequence
98− [ return $ emit arrayLengthFn
98+ [ return $ emit fn
9999 , return $ emit "("
100100 , prettyPrintIL' arg
101101 , return $ emit ")"
102102 ]
103+ match (App _ (Var _ fn) args) | fn == tcoLoop = mconcat <$> sequence
104+ [ return $ emit fn
105+ , return $ emit "("
106+ , intercalate (emit ", ") <$> forM args prettyPrintIL'
107+ , return $ emit ")"
108+ ]
103109 match app@(App{})
104110 | (val, args) <- unApp app []
105111 , length args > 1