From 1885518b8d802cc0b8a561de52d2bb8d2030b01c Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Sat, 13 Oct 2007 17:54:46 +0000 Subject: [PATCH] Changed the C genRetypeSizes function to pass the tests --- backends/GenerateC.hs | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/backends/GenerateC.hs b/backends/GenerateC.hs index 957d16e..eb131c1 100644 --- a/backends/GenerateC.hs +++ b/backends/GenerateC.hs @@ -17,7 +17,7 @@ with this program. If not, see . -} -- | Generate C code from the mangled AST. -module GenerateC (call, CGen, cgenOps, cintroduceSpec, genComma, genCPasses, generate, generateC, genLeftB, genMeta, genName, genRightB, GenOps(..), seqComma, SubscripterFunction, withIf ) where +module GenerateC (call, CGen, cgenOps, cintroduceSpec, genComma, genCPasses, generate, generateC, genLeftB, genMeta, genName, genRightB, GenOps(..), indexOfFreeDimensions, seqComma, SubscripterFunction, withIf ) where import Data.Char import Data.Generics @@ -1131,15 +1131,13 @@ abbrevVariable ops am t v cgenRetypeSizes :: GenOps -> Meta -> A.Type -> A.Name -> A.Type -> A.Variable -> CGen () cgenRetypeSizes _ _ (A.Chan {}) _ (A.Chan {}) _ = return () cgenRetypeSizes ops m destT destN srcT srcV - = do size <- makeNonce "retype_size" - tell ["int ", size, " = occam_check_retype ("] - call genBytesIn ops srcT (Right srcV) - tell [", "] - call genBytesIn ops destT (Left True) - tell [", "] - genMeta m - tell [");\n"] - + = let size = do tell ["occam_check_retype("] + call genBytesIn ops srcT (Right srcV) + tell [","] + call genBytesIn ops destT (Left True) + tell [","] + genMeta m + tell [")"] in case destT of -- An array -- figure out the genMissing dimension, if there is one. A.Array destDS _ -> @@ -1147,16 +1145,18 @@ cgenRetypeSizes ops m destT destN srcT srcV case free of -- No free dimensions; check the complete array matches in size. Nothing -> - do tell ["if (", size, " != 1) {\n"] + do tell ["if("] + size + tell ["!=1){"] call genStop ops m "array size mismatch in RETYPES" - tell ["}\n"] + tell ["}"] _ -> return () let dims = [case d of A.UnknownDimension -> -- Unknown dimension -- insert it. case free of - Just _ -> tell [size] + Just _ -> size Nothing -> die "genRetypeSizes expecting free dimension" A.Dimension n -> tell [show n] @@ -1165,9 +1165,11 @@ cgenRetypeSizes ops m destT destN srcT srcV -- Not array; just check the size is 1. _ -> - do tell ["if (", size, " != 1) {\n"] + do tell ["if("] + size + tell ["!=1){"] call genStop ops m "size mismatch in RETYPES" - tell ["}\n"] + tell ["}"] -- | Generate the right-hand side of an abbreviation of an expression. abbrevExpression :: GenOps -> A.AbbrevMode -> A.Type -> A.Expression -> (CGen (), A.Name -> CGen ())