Do away with SubscriptedExprs during pullUp

This commit is contained in:
Adam Sampson 2007-04-30 03:22:06 +00:00
parent db1c16c2cb
commit e701088469
2 changed files with 14 additions and 9 deletions

View File

@ -125,7 +125,7 @@ pullUp = doGeneric `extM` doStructured `extM` doProcess `extM` doSpecification `
-- | Pull array expressions that aren't already non-subscripted variables. -- | Pull array expressions that aren't already non-subscripted variables.
doExpression :: A.Expression -> PassM A.Expression doExpression :: A.Expression -> PassM A.Expression
doExpression e doExpression e
= do e' <- doExpressionFunc e = do e' <- doExpression' e
t <- typeOfExpression e' t <- typeOfExpression e'
case t of case t of
A.Array _ _ -> A.Array _ _ ->
@ -174,13 +174,23 @@ pullUp = doGeneric `extM` doStructured `extM` doProcess `extM` doSpecification `
return vars return vars
doExpressionFunc :: A.Expression -> PassM A.Expression doExpression' :: A.Expression -> PassM A.Expression
doExpressionFunc (A.FunctionCall m n es) -- Convert single-valued function calls.
doExpression' (A.FunctionCall m n es)
= do [v] <- convertFuncCall m n es = do [v] <- convertFuncCall m n es
return $ A.ExprVariable m v return $ A.ExprVariable m v
doExpressionFunc e = doGeneric e -- Convert SubscriptedExprs into SubscriptedVariables.
doExpression' (A.SubscriptedExpr m s e)
= do e' <- pullUp e
s' <- pullUp s
t <- typeOfExpression e'
spec@(A.Specification _ n _) <- makeNonceIsExpr "subscripted_expr" m t e'
addPulled $ A.Spec m spec
return $ A.ExprVariable m (A.SubscriptedVariable m s' (A.Variable m n))
doExpression' e = doGeneric e
doExpressionList :: A.ExpressionList -> PassM A.ExpressionList doExpressionList :: A.ExpressionList -> PassM A.ExpressionList
-- Convert multi-valued function calls.
doExpressionList (A.FunctionCallList m n es) doExpressionList (A.FunctionCallList m n es)
= do vs <- convertFuncCall m n es = do vs <- convertFuncCall m n es
return $ A.ExpressionList m [A.ExprVariable m v | v <- vs] return $ A.ExpressionList m [A.ExprVariable m v | v <- vs]

View File

@ -42,14 +42,9 @@ default behaviour that simplifies expressions inside another one.
Output item expressions should be pulled up to variables. Output item expressions should be pulled up to variables.
RETYPES of expressions should be converted to RETYPES of variables.
Before code generation, have a pass that resolves all the DATA TYPE .. IS Before code generation, have a pass that resolves all the DATA TYPE .. IS
directives to their real types. directives to their real types.
Pass to turn subscripted expressions into subscripted variables. (Need to write
a test for this -- use a function that returns an array?)
Pass to turn complicated conversions into simpler ones (currently done in Pass to turn complicated conversions into simpler ones (currently done in
GenerateC). GenerateC).