on master help sign in
Include freeVars in Opt.Facts
commit99ff520f06ca03698faf3a83e0b3593588171cde authorJoeyEremondi <joey@eremondi.com> dateFri 28 Aug 2015, 16:32 (11 years ago) parentfa6377f
2 files changed+10−3
src/AST/Expression/Optimized.hs+3−1 src/Optimize/TailCalls.hs+7−2
src/AST/Expression/Optimized.hs+3−1
@@ -6,6 +6,7 @@ module AST.Expression.Optimized
66 ) where
77
88import qualified AST.Expression.General as General
9+import qualified AST.Expression.Canonical as Canonical
910import qualified AST.Pattern as Pattern
1011import qualified AST.Type as Type
1112import qualified AST.Variable as Var
@@ -26,10 +27,11 @@ data Def
2627
2728data Facts = Facts
2829 { tailRecursionDetails :: Maybe String
30+ , freeVariables :: [Var.Canonical]
2931 }
3032 deriving (Show)
3133
3234
3335dummyFacts :: Facts
3436dummyFacts =
35− Facts Nothing
37+ Facts Nothing []
src/Optimize/TailCalls.hs+7−2
@@ -51,7 +51,7 @@ mapSnd func (x, a) =
5151-- CONVERT DEFINITIONS
5252
5353detectTailRecursion :: Can.Def -> Opt.Def
54−detectTailRecursion (Can.Definition _ pattern expression _) =
54+detectTailRecursion (Can.Definition canonFacts pattern expression _) =
5555 let
5656 (args, body) =
5757 Expr.collectLambdas expression
@@ -71,9 +71,14 @@ detectTailRecursion (Can.Definition _ pattern expression _) =
7171
7272 lambda x e =
7373 A.A () (Lambda x e)
74+
75+ facts =
76+ Opt.Facts
77+ (if isTailCall then fmap fst context else Nothing)
78+ (Can.freeVariables canonFacts)
7479 in
7580 Opt.Definition
76− (Opt.Facts (if isTailCall then fmap fst context else Nothing))
81+ facts
7782 (removeAnnotations pattern)
7883 (foldr lambda optExpr (map removeAnnotations args))
7984