From e17367edfa55efe35cd372cd1671efb8933f7a00 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Wed, 3 Oct 2007 15:23:32 +0000 Subject: [PATCH] Simplified the GenOps by removing a function (genArrayAbbrev) that did not need to be in there --- backends/GenerateC.hs | 28 ++++++++++++---------------- backends/GenerateCPPCSP.hs | 8 +------- 2 files changed, 13 insertions(+), 23 deletions(-) diff --git a/backends/GenerateC.hs b/backends/GenerateC.hs index f01758e..8a53b18 100644 --- a/backends/GenerateC.hs +++ b/backends/GenerateC.hs @@ -69,7 +69,7 @@ data GenOps = GenOps { genActual :: GenOps -> A.Actual -> CGen (), genActuals :: GenOps -> [A.Actual] -> 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 (), -- | Declares a constant array for the sizes (dimensions) of a C array. genArraySize :: GenOps -> Bool -> CGen () -> A.Name -> CGen (), @@ -164,7 +164,6 @@ cgenOps = GenOps { genActual = cgenActual, genActuals = cgenActuals, genAlt = cgenAlt, - genArrayAbbrev = cgenArrayAbbrev, genArrayLiteralElems = cgenArrayLiteralElems, genArraySize = cgenArraySize, genArraySizesLiteral = cgenArraySizesLiteral, @@ -1044,19 +1043,6 @@ cgenSlice ops v (A.Variable _ on) start count ds tell ["_sizes[", show i, "]"] | 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 ops isPtr size n = if isPtr @@ -1082,7 +1068,17 @@ cgenVariableAM ops v am -- | Generate the right-hand side of an abbreviation of a variable. abbrevVariable :: GenOps -> A.AbbrevMode -> A.Type -> A.Variable -> (CGen (), A.Name -> CGen ()) 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') = call genSlice ops v v' start count ds abbrevVariable ops am (A.Array ds _) v@(A.SubscriptedVariable m (A.SubscriptFrom _ start) v') diff --git a/backends/GenerateCPPCSP.hs b/backends/GenerateCPPCSP.hs index 6200940..dddd2cd 100644 --- a/backends/GenerateCPPCSP.hs +++ b/backends/GenerateCPPCSP.hs @@ -1107,7 +1107,7 @@ prefixUnderscore n = n { A.nameName = "_" ++ A.nameName n } --I also pass the type of the array through to cppgenSlice cppabbrevVariable :: GenOps -> A.AbbrevMode -> A.Type -> A.Variable -> CGen () 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') = cppgenSlice ops v v' ty start count ds 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 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 cppgenArraySubscript :: GenOps -> Bool -> A.Variable -> [A.Expression] -> CGen () cppgenArraySubscript ops checkValid v es