Rain: corrected the transformation of foreach loops to use ValAbbrev when looping over an expression

This commit is contained in:
Neil Brown 2007-08-22 17:03:47 +00:00
parent 9e8dd73149
commit d90f0aa680
2 changed files with 6 additions and 5 deletions

View File

@ -74,7 +74,8 @@ testEachPass0 = testPassWithItemsStateCheck "testEachPass0" exp (transformEach o
(tag4 A.For DontCare indexVar (intLiteral 0) (tag2 A.SizeVariable DontCare listVar))
(tag3 A.Spec DontCare
(tag3 A.Specification DontCare (simpleName "c")
(tag4 A.Is DontCare A.Abbrev A.Byte
--ValAbbrev because we are abbreviating an expression:
(tag4 A.Is DontCare A.ValAbbrev A.Byte
(tag3 A.SubscriptedVariable DontCare
(tag2 A.Subscript DontCare (tag2 A.ExprVariable DontCare (tag2 A.Variable DontCare indexVar)))
listVar

View File

@ -135,11 +135,11 @@ transformEach = everywhereM (mkM transformEach')
where
transformEach' :: A.Structured -> PassM A.Structured
transformEach' (A.Rep m (A.ForEach m' loopVar loopExp) s)
= do (spec,var) <- case loopExp of
(A.ExprVariable _ v) -> return (id,v)
= do (spec,var,am) <- case loopExp of
(A.ExprVariable _ v) -> return (id,v,A.Abbrev)
_ -> do t <- typeOfExpression loopExp
spec@(A.Specification _ n' _) <- makeNonceIsExpr "loopVar" m t loopExp
return (A.Spec m spec,A.Variable m n')
return (A.Spec m spec,A.Variable m n',A.ValAbbrev)
--spec is a function A.Structured -> A.Structured, var is an A.Variable
loopVarType <- typeOfName loopVar
@ -148,7 +148,7 @@ transformEach = everywhereM (mkM transformEach')
let newRep = A.For m' loopIndexName (intLiteral 0) (A.SizeVariable m' var)
let s' = A.Spec m'
(A.Specification m' loopVar
(A.Is m' A.Abbrev loopVarType
(A.Is m' am loopVarType
(A.SubscriptedVariable m' (A.Subscript m' (A.ExprVariable m' (A.Variable m' loopIndexName))) var)
)
)