Added a genArrayStoreName function to GenOps and implemented it for both C and C++

This commit is contained in:
Neil Brown 2007-10-06 11:30:03 +00:00
parent 24b3975cf8
commit c521187cd2
2 changed files with 12 additions and 4 deletions

View File

@ -81,6 +81,8 @@ data GenOps = GenOps {
genArraySizesLiteral :: GenOps -> [A.Dimension] -> CGen (),
-- | Writes out the size of the _sizes array, in square brackets.
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
genArraySubscript :: GenOps -> Bool -> A.Variable -> [A.Expression] -> CGen (),
genAssert :: GenOps -> Meta -> A.Expression -> CGen (),
@ -184,6 +186,7 @@ cgenOps = GenOps {
genArraySize = cgenArraySize,
genArraySizesLiteral = cgenArraySizesLiteral,
genArraySizesSize = cgenArraySizesSize,
genArrayStoreName = const genName,
genArraySubscript = cgenArraySubscript,
genAssert = cgenAssert,
genAssign = cgenAssign,
@ -1327,10 +1330,11 @@ cintroduceSpec ops (A.Specification _ n (A.IsExpr _ am t e))
rhs
tell [";\n"]
rhsSizes n
cintroduceSpec ops (A.Specification _ n (A.IsChannelArray _ t cs))
= do tell ["Channel *"]
genName n
tell ["[] = {"]
cintroduceSpec ops (A.Specification _ n (A.IsChannelArray _ (A.Array _ c) cs))
= do call genType ops c
tell ["*"]
call genArrayStoreName ops n
tell ["[]={"]
seqComma (map (call genVariable ops) cs)
tell ["};\n"]
call declareArraySizes ops [A.Dimension $ length cs] n

View File

@ -97,6 +97,7 @@ cppgenOps = cgenOps {
genActual = cppgenActual,
genActuals = cppgenActuals,
genAlt = cppgenAlt,
genArrayStoreName = cppgenArrayStoreName,
genArraySubscript = cppgenArraySubscript,
genDeclType = cppgenDeclType,
genDeclaration = cppgenDeclaration,
@ -719,6 +720,9 @@ cppremoveSpec ops (A.Specification m n (A.Declaration _ t))
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)
-- | A helper function that maps a function and calls sequence on the resulting [CGen()]
cgmap :: (t -> CGen()) -> [t] -> CGen()