Add AppFirst and AddSecond to CoreContext.
authorMatthijs Kooijman <matthijs@stdin.nl>
Tue, 30 Mar 2010 12:56:43 +0000 (14:56 +0200)
committerMatthijs Kooijman <matthijs@stdin.nl>
Tue, 30 Mar 2010 12:56:43 +0000 (14:56 +0200)
Also let subeverywhere set those contexts when appropriate.

cλash/CLasH/Normalize/NormalizeTools.hs
cλash/CLasH/Normalize/NormalizeTypes.hs

index b1ca36900cd5a37220052ac2687e685ce6141814..c774a335f34f01b65fd9f6b1c51c17f29655702c 100644 (file)
@@ -57,8 +57,8 @@ applyboth first (name, second) context expr = do
 -- expression itself.
 subeverywhere :: Transform -> Transform
 subeverywhere trans c (App a b) = do
-  a' <- trans (Other:c) a
-  b' <- trans (Other:c) b
+  a' <- trans (AppFirst:c) a
+  b' <- trans (AppSecond:c) b
   return $ App a' b'
 
 subeverywhere trans c (Let (NonRec b bexpr) expr) = do
index a7de6dced1645a69539b4d7c0ec39b916aeaea42..90592526f507b63353e0d4bad2cf6c3ee20fa8fa 100644 (file)
@@ -15,7 +15,13 @@ import CLasH.Translator.TranslatorTypes
 type TransformMonad = Writer.WriterT Monoid.Any TranslatorSession
 
 -- | In what context does a core expression occur?
-data CoreContext = Other -- ^ Another context
+data CoreContext = AppFirst        -- ^ The expression is the first
+                                   -- argument of an application (i.e.,
+                                   -- it is applied)
+                 | AppSecond       -- ^ The expression is the second
+                                   --   argument of an application
+                                   --   (i.e., something is applied to it)
+                 | Other           -- ^ Another context
 
 -- | Transforms a CoreExpr and keeps track if it has changed.
 type Transform = [CoreContext] -> CoreSyn.CoreExpr -> TransformMonad CoreSyn.CoreExpr