Simplified the GenOps by removing a function (genArrayAbbrev) that did not need to be in there

This commit is contained in:
Neil Brown 2007-10-03 15:23:32 +00:00
parent 8a2894893c
commit e17367edfa
2 changed files with 13 additions and 23 deletions

View File

@ -69,7 +69,7 @@ data GenOps = GenOps {
genActual :: GenOps -> A.Actual -> CGen (), genActual :: GenOps -> A.Actual -> CGen (),
genActuals :: GenOps -> [A.Actual] -> CGen (), genActuals :: GenOps -> [A.Actual] -> CGen (),
genAlt :: GenOps -> Bool -> A.Structured -> CGen (), genAlt :: GenOps -> Bool -> A.Structured -> CGen (),
genArrayAbbrev :: GenOps -> A.Variable -> (CGen (), A.Name -> CGen ()), -- | Generates the given array element expressions as a flattened (one-dimensional) list of literals
genArrayLiteralElems :: GenOps -> [A.ArrayElem] -> CGen (), genArrayLiteralElems :: GenOps -> [A.ArrayElem] -> CGen (),
-- | Declares a constant array for the sizes (dimensions) of a C array. -- | Declares a constant array for the sizes (dimensions) of a C array.
genArraySize :: GenOps -> Bool -> CGen () -> A.Name -> CGen (), genArraySize :: GenOps -> Bool -> CGen () -> A.Name -> CGen (),
@ -164,7 +164,6 @@ cgenOps = GenOps {
genActual = cgenActual, genActual = cgenActual,
genActuals = cgenActuals, genActuals = cgenActuals,
genAlt = cgenAlt, genAlt = cgenAlt,
genArrayAbbrev = cgenArrayAbbrev,
genArrayLiteralElems = cgenArrayLiteralElems, genArrayLiteralElems = cgenArrayLiteralElems,
genArraySize = cgenArraySize, genArraySize = cgenArraySize,
genArraySizesLiteral = cgenArraySizesLiteral, genArraySizesLiteral = cgenArraySizesLiteral,
@ -1044,19 +1043,6 @@ cgenSlice ops v (A.Variable _ on) start count ds
tell ["_sizes[", show i, "]"] tell ["_sizes[", show i, "]"]
| i <- [1..(length ds - 1)]])) | i <- [1..(length ds - 1)]]))
cgenArrayAbbrev :: GenOps -> A.Variable -> (CGen (), A.Name -> CGen ())
cgenArrayAbbrev ops v
= (tell ["&"] >> call genVariable ops v, genAASize v 0)
where
genAASize :: A.Variable -> Integer -> A.Name -> CGen ()
genAASize (A.SubscriptedVariable _ (A.Subscript _ _) v) arg
= genAASize v (arg + 1)
genAASize (A.Variable _ on) arg
= call genArraySize ops True
(tell ["&"] >> genName on >> tell ["_sizes[", show arg, "]"])
genAASize (A.DirectedVariable _ _ v) arg
= genAASize v arg
cgenArraySize :: GenOps -> Bool -> CGen () -> A.Name -> CGen () cgenArraySize :: GenOps -> Bool -> CGen () -> A.Name -> CGen ()
cgenArraySize ops isPtr size n cgenArraySize ops isPtr size n
= if isPtr = if isPtr
@ -1082,7 +1068,17 @@ cgenVariableAM ops v am
-- | Generate the right-hand side of an abbreviation of a variable. -- | Generate the right-hand side of an abbreviation of a variable.
abbrevVariable :: GenOps -> A.AbbrevMode -> A.Type -> A.Variable -> (CGen (), A.Name -> CGen ()) abbrevVariable :: GenOps -> A.AbbrevMode -> A.Type -> A.Variable -> (CGen (), A.Name -> CGen ())
abbrevVariable ops am (A.Array _ _) v@(A.SubscriptedVariable _ (A.Subscript _ _) _) abbrevVariable ops am (A.Array _ _) v@(A.SubscriptedVariable _ (A.Subscript _ _) _)
= call genArrayAbbrev ops v = (tell ["&"] >> call genVariable ops v, genAASize v 0)
where
genAASize :: A.Variable -> Integer -> A.Name -> CGen ()
genAASize (A.SubscriptedVariable _ (A.Subscript _ _) v) arg
= genAASize v (arg + 1)
genAASize (A.Variable _ on) arg
= call genArraySize ops True
(tell ["&"] >> genName on >> tell ["_sizes[", show arg, "]"])
genAASize (A.DirectedVariable _ _ v) arg
= const $ call genMissing ops "Cannot abbreviate a directed variable as an array"
abbrevVariable ops am (A.Array ds _) v@(A.SubscriptedVariable _ (A.SubscriptFromFor _ start count) v') abbrevVariable ops am (A.Array ds _) v@(A.SubscriptedVariable _ (A.SubscriptFromFor _ start count) v')
= call genSlice ops v v' start count ds = call genSlice ops v v' start count ds
abbrevVariable ops am (A.Array ds _) v@(A.SubscriptedVariable m (A.SubscriptFrom _ start) v') abbrevVariable ops am (A.Array ds _) v@(A.SubscriptedVariable m (A.SubscriptFrom _ start) v')

View File

@ -1107,7 +1107,7 @@ prefixUnderscore n = n { A.nameName = "_" ++ A.nameName n }
--I also pass the type of the array through to cppgenSlice --I also pass the type of the array through to cppgenSlice
cppabbrevVariable :: GenOps -> A.AbbrevMode -> A.Type -> A.Variable -> CGen () cppabbrevVariable :: GenOps -> A.AbbrevMode -> A.Type -> A.Variable -> CGen ()
cppabbrevVariable ops am (A.Array _ _) v@(A.SubscriptedVariable _ (A.Subscript _ _) _) cppabbrevVariable ops am (A.Array _ _) v@(A.SubscriptedVariable _ (A.Subscript _ _) _)
= cppgenArrayAbbrev ops v = call genVariable ops v
cppabbrevVariable ops am ty@(A.Array ds _) v@(A.SubscriptedVariable _ (A.SubscriptFromFor _ start count) v') cppabbrevVariable ops am ty@(A.Array ds _) v@(A.SubscriptedVariable _ (A.SubscriptFromFor _ start count) v')
= cppgenSlice ops v v' ty start count ds = cppgenSlice ops v v' ty start count ds
cppabbrevVariable ops am ty@(A.Array ds _) v@(A.SubscriptedVariable m (A.SubscriptFrom _ start) v') cppabbrevVariable ops am ty@(A.Array ds _) v@(A.SubscriptedVariable m (A.SubscriptFrom _ start) v')
@ -1137,12 +1137,6 @@ cppgenSlice ops _ v ty start count ds
call genExpression ops count call genExpression ops count
tell [")"] tell [")"]
-- | Removed the sizing and the & from GenerateC:
cppgenArrayAbbrev :: GenOps -> A.Variable -> CGen ()
cppgenArrayAbbrev = call genVariable
-- | Changed from GenerateC to use Blitz++ subscripting (round brackets with commas) rather than traditional C indexing -- | Changed from GenerateC to use Blitz++ subscripting (round brackets with commas) rather than traditional C indexing
cppgenArraySubscript :: GenOps -> Bool -> A.Variable -> [A.Expression] -> CGen () cppgenArraySubscript :: GenOps -> Bool -> A.Variable -> [A.Expression] -> CGen ()
cppgenArraySubscript ops checkValid v es cppgenArraySubscript ops checkValid v es