Changed the behaviour of genArraySizesLiteral to include the curly brackets

This commit is contained in:
Neil Brown 2007-10-06 11:55:50 +00:00
parent a583403372
commit 9a6f9186a9
2 changed files with 14 additions and 15 deletions

View File

@ -581,9 +581,7 @@ cgenUnfoldedExpression ops (A.Literal _ t lr)
case t of case t of
A.Array ds _ -> A.Array ds _ ->
do genComma do genComma
genLeftB
call genArraySizesLiteral ops ds call genArraySizesLiteral ops ds
genRightB
_ -> return () _ -> return ()
cgenUnfoldedExpression ops (A.ExprVariable m var) = call genUnfoldedVariable ops m var cgenUnfoldedExpression ops (A.ExprVariable m var) = call genUnfoldedVariable ops m var
cgenUnfoldedExpression ops e = call genExpression ops e cgenUnfoldedExpression ops e = call genExpression ops e
@ -598,9 +596,7 @@ cgenUnfoldedVariable ops m var
unfoldArray ds var unfoldArray ds var
genRightB genRightB
genComma genComma
genLeftB
call genArraySizesLiteral ops ds call genArraySizesLiteral ops ds
genRightB
A.Record _ -> A.Record _ ->
do genLeftB do genLeftB
fs <- recordFields m t fs <- recordFields m t
@ -1057,7 +1053,8 @@ cgenSlice ops v (A.Variable _ on) start count ds
-- element 0 of a 0-length array -- which is valid. -- element 0 of a 0-length array -- which is valid.
= (tell ["&"] >> call genVariableUnchecked ops v, = (tell ["&"] >> call genVariableUnchecked ops v,
call genArraySize ops False call genArraySize ops False
(do tell ["occam_check_slice ("] (do genLeftB
tell ["occam_check_slice ("]
call genExpression ops start call genExpression ops start
tell [", "] tell [", "]
call genExpression ops count call genExpression ops count
@ -1069,7 +1066,9 @@ cgenSlice ops v (A.Variable _ on) start count ds
sequence_ [do tell [", "] sequence_ [do tell [", "]
genName on genName on
tell ["_sizes[", show i, "]"] tell ["_sizes[", show i, "]"]
| i <- [1..(length ds - 1)]])) | i <- [1..(length ds - 1)]]
genRightB
))
cgenArraySize :: GenOps -> Bool -> CGen () -> A.Name -> CGen () cgenArraySize :: GenOps -> Bool -> CGen () -> A.Name -> CGen ()
cgenArraySize ops isPtr size n cgenArraySize ops isPtr size n
@ -1081,9 +1080,9 @@ cgenArraySize ops isPtr size n
tell [";"] tell [";"]
else do tell ["const int "] else do tell ["const int "]
genName n genName n
tell ["_sizes[]={"] tell ["_sizes[]="]
size size
tell ["};"] tell [";"]
noSize :: A.Name -> CGen () noSize :: A.Name -> CGen ()
noSize n = return () noSize n = return ()
@ -1154,7 +1153,7 @@ cgenRetypeSizes ops m am destT destN srcT srcV
die "genRetypeSizes expecting free dimension" die "genRetypeSizes expecting free dimension"
A.Dimension n -> tell [show n] A.Dimension n -> tell [show n]
| d <- destDS] | d <- destDS]
call genArraySize ops False (seqComma dims) destN call genArraySize ops False (genLeftB >> seqComma dims >> genRightB) destN
-- Not array; just check the size is 1. -- Not array; just check the size is 1.
_ -> _ ->
@ -1233,7 +1232,7 @@ cdeclareArraySizes ops ds name
-- dimensions are fixed. -- dimensions are fixed.
cgenArraySizesLiteral :: GenOps -> [A.Dimension] -> CGen () cgenArraySizesLiteral :: GenOps -> [A.Dimension] -> CGen ()
cgenArraySizesLiteral ops ds cgenArraySizesLiteral ops ds
= seqComma dims = genLeftB >> seqComma dims >> genRightB
where where
dims :: [CGen ()] dims :: [CGen ()]
dims = [case d of dims = [case d of

View File

@ -253,12 +253,12 @@ testStop =
testArraySizes :: Test testArraySizes :: Test
testArraySizes = TestList testArraySizes = TestList
[ [
testBothSame "genArraySizesLiteral 0" "3" (tcall genArraySizesLiteral [A.Dimension 3]) testBothSame "genArraySizesLiteral 0" "{3}" (tcall genArraySizesLiteral [A.Dimension 3])
,testBothSame "genArraySizesLiteral 1" "3,6,8" (tcall genArraySizesLiteral [A.Dimension 3, A.Dimension 6, A.Dimension 8]) ,testBothSame "genArraySizesLiteral 1" "{3,6,8}" (tcall genArraySizesLiteral [A.Dimension 3, A.Dimension 6, A.Dimension 8])
,testBothFail "genArraySizesLiteral 2" (tcall genArraySizesLiteral [A.Dimension 6, A.UnknownDimension]) ,testBothFail "genArraySizesLiteral 2" (tcall genArraySizesLiteral [A.Dimension 6, A.UnknownDimension])
,testBothSame "genArraySizesSize 0" "[1]" (tcall genArraySizesSize [A.Dimension 7]) ,testBothSame "genArraySizesSize 0" "[1]" (tcall genArraySizesSize [A.Dimension 7])
,testBothSame "genArraySize 0" "const int*foo_sizes=@;" (tcall3 genArraySize True at foo) ,testBothSame "genArraySize 0" "const int*foo_sizes=@;" (tcall3 genArraySize True at foo)
,testBothSame "genArraySize 1" "const int foo_sizes[]={@};" (tcall3 genArraySize False at foo) ,testBothSame "genArraySize 1" "const int foo_sizes[]=@;" (tcall3 genArraySize False at foo)
,testBothSame "genArrayLiteralElems 0" "$" $ (tcall genArrayLiteralElems [A.ArrayElemExpr undefined]) . unfolded ,testBothSame "genArrayLiteralElems 0" "$" $ (tcall genArrayLiteralElems [A.ArrayElemExpr undefined]) . unfolded
,testBothSame "genArrayLiteralElems 1" "$,$,$" $ (tcall genArrayLiteralElems [A.ArrayElemExpr undefined, A.ArrayElemExpr undefined, A.ArrayElemExpr undefined]) . unfolded ,testBothSame "genArrayLiteralElems 1" "$,$,$" $ (tcall genArrayLiteralElems [A.ArrayElemExpr undefined, A.ArrayElemExpr undefined, A.ArrayElemExpr undefined]) . unfolded
,testBothSame "genArrayLiteralElems 2" "$,$,$" $ (tcall genArrayLiteralElems [A.ArrayElemExpr undefined, A.ArrayElemArray [A.ArrayElemExpr undefined, A.ArrayElemExpr undefined]]) . unfolded ,testBothSame "genArrayLiteralElems 2" "$,$,$" $ (tcall genArrayLiteralElems [A.ArrayElemExpr undefined, A.ArrayElemArray [A.ArrayElemExpr undefined, A.ArrayElemExpr undefined]]) . unfolded