From ad7a76dace046512868f39cba54cbb27d81e414d Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Thu, 20 Mar 2008 09:36:26 +0000 Subject: [PATCH] Altered transformEachRange to make it more straight-forward --- frontends/RainPasses.hs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/frontends/RainPasses.hs b/frontends/RainPasses.hs index c2baba4..2ae3945 100644 --- a/frontends/RainPasses.hs +++ b/frontends/RainPasses.hs @@ -189,14 +189,10 @@ transformEachRange = doGeneric `ext1M` doStructured doStructured :: Data a => A.Structured a -> PassM (A.Structured a) doStructured (A.Rep repMeta (A.ForEach eachMeta loopVar (A.ExprConstr - _ (A.RangeConstr _ _ (A.Literal _ _ begin) (A.Literal _ _ end)))) body) + _ (A.RangeConstr _ _ begin end))) body) = do body' <- doStructured body - -- TODO should probably not do mini-constant-folding here: - if (isJust $ checkIntegral begin) && (isJust $ checkIntegral end) - then return $ A.Rep repMeta (A.For eachMeta loopVar (A.Literal eachMeta A.Int begin) - (A.Literal eachMeta A.Int $ A.IntLiteral eachMeta $ show ((fromJust $ checkIntegral end) - (fromJust $ checkIntegral begin) + 1)) - ) body' - else dieP eachMeta "Items in range constructor (x..y) are not integer literals" + return $ A.Rep repMeta (A.For eachMeta loopVar begin + (addOne $ subExprs end begin)) body' doStructured s = doGeneric s -- | A pass that changes all the Rain range constructor expressions into the more general array constructor expressions