Rearranged declareSizesArray to easily support IsExpr

This commit is contained in:
Neil Brown 2008-03-06 18:03:49 +00:00
parent a9692f884a
commit c3e1a32909

View File

@ -29,6 +29,7 @@ import CompState
import Errors import Errors
import Metadata import Metadata
import Pass import Pass
import PrettyShow
import qualified Properties as Prop import qualified Properties as Prop
import Types import Types
import Utils import Utils
@ -125,9 +126,12 @@ declareSizesArray = doGeneric `ext1M` doStructured
= do t <- typeOfSpec spec = do t <- typeOfSpec spec
case (spec,t) of case (spec,t) of
(_,Just (A.Array ds _)) -> if elem A.UnknownDimension ds (_,Just (A.Array ds _)) -> if elem A.UnknownDimension ds
then case spec of then do outerV <- case spec of
A.Is _ _ _ outerV -> A.Is _ _ _ v -> return v
do let innerV = findInnerVar outerV A.IsExpr _ _ _ (A.ExprVariable _ v) -> return v
-- TODO reshapes
_ -> dieP m $ "Could not handle unknown array spec: " ++ pshow spec
let innerV = findInnerVar outerV
varSrcSizes <- case innerV of varSrcSizes <- case innerV of
A.Variable _ srcN -> return (A.Variable m' $ append_sizes srcN) A.Variable _ srcN -> return (A.Variable m' $ append_sizes srcN)
A.SubscriptedVariable _ (A.SubscriptField _ fieldName) recordV -> A.SubscriptedVariable _ (A.SubscriptField _ fieldName) recordV ->
@ -141,7 +145,6 @@ declareSizesArray = doGeneric `ext1M` doStructured
s' <- doStructured s s' <- doStructured s
defineSizesName m' (append_sizes n) sizeSpecType defineSizesName m' (append_sizes n) sizeSpecType
return (A.Spec m sp $ A.Spec m sizeSpec $ s') return (A.Spec m sp $ A.Spec m sizeSpec $ s')
_ -> doGeneric str --TODO IsExpr and Reshapes
else do let n_sizes = append_sizes n else do let n_sizes = append_sizes n
sizeSpecType = makeStaticSizeSpec m' n_sizes ds sizeSpecType = makeStaticSizeSpec m' n_sizes ds
sizeSpec = A.Specification m' n_sizes sizeSpecType sizeSpec = A.Specification m' n_sizes sizeSpecType