Added a genArrayStoreName function to GenOps and implemented it for both C and C++
This commit is contained in:
parent
24b3975cf8
commit
c521187cd2
|
@ -81,6 +81,8 @@ data GenOps = GenOps {
|
||||||
genArraySizesLiteral :: GenOps -> [A.Dimension] -> CGen (),
|
genArraySizesLiteral :: GenOps -> [A.Dimension] -> CGen (),
|
||||||
-- | Writes out the size of the _sizes array, in square brackets.
|
-- | Writes out the size of the _sizes array, in square brackets.
|
||||||
genArraySizesSize :: GenOps -> [A.Dimension] -> CGen (),
|
genArraySizesSize :: GenOps -> [A.Dimension] -> CGen (),
|
||||||
|
-- | Writes out the actual data storage array name.
|
||||||
|
genArrayStoreName :: GenOps -> A.Name -> CGen(),
|
||||||
-- | Generates an array subscript for the given variable (with error checking if the Bool is True), using the given expression list as subscripts
|
-- | Generates an array subscript for the given variable (with error checking if the Bool is True), using the given expression list as subscripts
|
||||||
genArraySubscript :: GenOps -> Bool -> A.Variable -> [A.Expression] -> CGen (),
|
genArraySubscript :: GenOps -> Bool -> A.Variable -> [A.Expression] -> CGen (),
|
||||||
genAssert :: GenOps -> Meta -> A.Expression -> CGen (),
|
genAssert :: GenOps -> Meta -> A.Expression -> CGen (),
|
||||||
|
@ -184,6 +186,7 @@ cgenOps = GenOps {
|
||||||
genArraySize = cgenArraySize,
|
genArraySize = cgenArraySize,
|
||||||
genArraySizesLiteral = cgenArraySizesLiteral,
|
genArraySizesLiteral = cgenArraySizesLiteral,
|
||||||
genArraySizesSize = cgenArraySizesSize,
|
genArraySizesSize = cgenArraySizesSize,
|
||||||
|
genArrayStoreName = const genName,
|
||||||
genArraySubscript = cgenArraySubscript,
|
genArraySubscript = cgenArraySubscript,
|
||||||
genAssert = cgenAssert,
|
genAssert = cgenAssert,
|
||||||
genAssign = cgenAssign,
|
genAssign = cgenAssign,
|
||||||
|
@ -1327,10 +1330,11 @@ cintroduceSpec ops (A.Specification _ n (A.IsExpr _ am t e))
|
||||||
rhs
|
rhs
|
||||||
tell [";\n"]
|
tell [";\n"]
|
||||||
rhsSizes n
|
rhsSizes n
|
||||||
cintroduceSpec ops (A.Specification _ n (A.IsChannelArray _ t cs))
|
cintroduceSpec ops (A.Specification _ n (A.IsChannelArray _ (A.Array _ c) cs))
|
||||||
= do tell ["Channel *"]
|
= do call genType ops c
|
||||||
genName n
|
tell ["*"]
|
||||||
tell ["[] = {"]
|
call genArrayStoreName ops n
|
||||||
|
tell ["[]={"]
|
||||||
seqComma (map (call genVariable ops) cs)
|
seqComma (map (call genVariable ops) cs)
|
||||||
tell ["};\n"]
|
tell ["};\n"]
|
||||||
call declareArraySizes ops [A.Dimension $ length cs] n
|
call declareArraySizes ops [A.Dimension $ length cs] n
|
||||||
|
|
|
@ -97,6 +97,7 @@ cppgenOps = cgenOps {
|
||||||
genActual = cppgenActual,
|
genActual = cppgenActual,
|
||||||
genActuals = cppgenActuals,
|
genActuals = cppgenActuals,
|
||||||
genAlt = cppgenAlt,
|
genAlt = cppgenAlt,
|
||||||
|
genArrayStoreName = cppgenArrayStoreName,
|
||||||
genArraySubscript = cppgenArraySubscript,
|
genArraySubscript = cppgenArraySubscript,
|
||||||
genDeclType = cppgenDeclType,
|
genDeclType = cppgenDeclType,
|
||||||
genDeclaration = cppgenDeclaration,
|
genDeclaration = cppgenDeclaration,
|
||||||
|
@ -719,6 +720,9 @@ cppremoveSpec ops (A.Specification m n (A.Declaration _ t))
|
||||||
cppremoveSpec _ _ = return ()
|
cppremoveSpec _ _ = return ()
|
||||||
|
|
||||||
|
|
||||||
|
cppgenArrayStoreName :: GenOps -> A.Name -> CGen()
|
||||||
|
cppgenArrayStoreName ops n = genName n >> tell ["_actual"]
|
||||||
|
|
||||||
-- FIXME: This could be used elsewhere (and work in any monad)
|
-- FIXME: This could be used elsewhere (and work in any monad)
|
||||||
-- | A helper function that maps a function and calls sequence on the resulting [CGen()]
|
-- | A helper function that maps a function and calls sequence on the resulting [CGen()]
|
||||||
cgmap :: (t -> CGen()) -> [t] -> CGen()
|
cgmap :: (t -> CGen()) -> [t] -> CGen()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user