From 3d823fb1b56e43e7dc87fbd9da65d4a4495f4d2c Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Thu, 6 Mar 2008 17:34:54 +0000 Subject: [PATCH] Fixed the handling of actual array parameters to include array variables inside ActualExpression --- backends/BackendPasses.hs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/backends/BackendPasses.hs b/backends/BackendPasses.hs index 67bddb0..5cc7b3a 100644 --- a/backends/BackendPasses.hs +++ b/backends/BackendPasses.hs @@ -26,6 +26,7 @@ import qualified Data.Set as Set import qualified AST as A import CompState +import Errors import Metadata import Pass import qualified Properties as Prop @@ -211,7 +212,15 @@ addSizesActualParameters = doGeneric `extM` doProcess transformActual a@(A.ActualVariable am (A.Array ds _) (A.Variable m n)) = do let a_sizes = A.Variable m (append_sizes n) return [a, A.ActualVariable A.ValAbbrev (A.Array [A.Dimension $ length ds] A.Int) a_sizes] - transformActual a = return [a] + transformActual a@(A.ActualExpression (A.Array ds _) (A.ExprVariable _ (A.Variable m n))) + = do let a_sizes = A.Variable m (append_sizes n) + return [a, A.ActualVariable A.ValAbbrev (A.Array [A.Dimension $ length ds] A.Int) a_sizes] + transformActual a = let t = case a of + A.ActualVariable _ t _ -> t + A.ActualExpression t _ -> t + in case t of + A.Array {} -> dieP (findMeta a) "Untransformed actual parameter of type array: " + _ -> return [a] -- | Flattens all multi-dimensional arrays into one-dimensional arrays, transforming all indexes -- as appropriate.