Simplified the GenOps by removing a function (genArrayAbbrev) that did not need to be in there
This commit is contained in:
parent
8a2894893c
commit
e17367edfa
|
@ -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')
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user