Add LetBody and LetBinding to the CoreContext.
authorMatthijs Kooijman <matthijs@stdin.nl>
Tue, 30 Mar 2010 14:49:51 +0000 (16:49 +0200)
committerMatthijs Kooijman <matthijs@stdin.nl>
Tue, 30 Mar 2010 14:49:51 +0000 (16:49 +0200)
cλash/CLasH/Normalize/NormalizeTools.hs
cλash/CLasH/Normalize/NormalizeTypes.hs

index 9ca2aa081587eed2b78b1a2c6825cf4c43f4eae4..09ae3f579485c946f311e020ccb55b514a5641ad 100644 (file)
@@ -62,18 +62,18 @@ subeverywhere trans c (App a b) = do
   return $ App a' b'
 
 subeverywhere trans c (Let (NonRec b bexpr) expr) = do
   return $ App a' b'
 
 subeverywhere trans c (Let (NonRec b bexpr) expr) = do
-  bexpr' <- trans (Other:c) bexpr
-  expr' <- trans (Other:c) expr
+  bexpr' <- trans (LetBinding:c) bexpr
+  expr' <- trans (LetBody:c) expr
   return $ Let (NonRec b bexpr') expr'
 
 subeverywhere trans c (Let (Rec binds) expr) = do
   return $ Let (NonRec b bexpr') expr'
 
 subeverywhere trans c (Let (Rec binds) expr) = do
-  expr' <- trans (Other:c) expr
+  expr' <- trans (LetBody:c) expr
   binds' <- mapM transbind binds
   return $ Let (Rec binds') expr'
   where
     transbind :: (CoreBndr, CoreExpr) -> TransformMonad (CoreBndr, CoreExpr)
     transbind (b, e) = do
   binds' <- mapM transbind binds
   return $ Let (Rec binds') expr'
   where
     transbind :: (CoreBndr, CoreExpr) -> TransformMonad (CoreBndr, CoreExpr)
     transbind (b, e) = do
-      e' <- trans (Other:c) e
+      e' <- trans (LetBinding:c) e
       return (b, e')
 
 subeverywhere trans c (Lam x expr) = do
       return (b, e')
 
 subeverywhere trans c (Lam x expr) = do
index 90592526f507b63353e0d4bad2cf6c3ee20fa8fa..e412e96a791635ed33d747e8e7333adffe175b50 100644 (file)
@@ -21,6 +21,11 @@ data CoreContext = AppFirst        -- ^ The expression is the first
                  | AppSecond       -- ^ The expression is the second
                                    --   argument of an application
                                    --   (i.e., something is applied to it)
                  | AppSecond       -- ^ The expression is the second
                                    --   argument of an application
                                    --   (i.e., something is applied to it)
+                 | LetBinding      -- ^ The expression is bound in a
+                                   --   (recursive or non-recursive) let
+                                   --   expression.
+                 | LetBody         -- ^ The expression is the body of a
+                                   --   let expression
                  | Other           -- ^ Another context
 
 -- | Transforms a CoreExpr and keeps track if it has changed.
                  | Other           -- ^ Another context
 
 -- | Transforms a CoreExpr and keeps track if it has changed.