Helper function for "sequence_ $ intersperse genComma"
This commit is contained in:
parent
d5766c5fe5
commit
b6537890e0
|
@ -60,6 +60,9 @@ missing s = tell ["\n#error Unimplemented: ", s, "\n"]
|
||||||
genComma :: CGen ()
|
genComma :: CGen ()
|
||||||
genComma = tell [", "]
|
genComma = tell [", "]
|
||||||
|
|
||||||
|
seqComma :: [CGen ()] -> CGen ()
|
||||||
|
seqComma ps = sequence_ $ intersperse genComma ps
|
||||||
|
|
||||||
genLeftB :: CGen ()
|
genLeftB :: CGen ()
|
||||||
genLeftB = tell ["{ "]
|
genLeftB = tell ["{ "]
|
||||||
|
|
||||||
|
@ -323,7 +326,7 @@ genLiteralRepr (A.ArrayLiteral m aes)
|
||||||
genRightB
|
genRightB
|
||||||
genLiteralRepr (A.RecordLiteral _ es)
|
genLiteralRepr (A.RecordLiteral _ es)
|
||||||
= do genLeftB
|
= do genLeftB
|
||||||
sequence_ $ intersperse genComma $ map genUnfoldedExpression es
|
seqComma $ map genUnfoldedExpression es
|
||||||
genRightB
|
genRightB
|
||||||
|
|
||||||
-- | Generate an expression inside a record literal.
|
-- | Generate an expression inside a record literal.
|
||||||
|
@ -363,8 +366,8 @@ genUnfoldedVariable m var
|
||||||
A.Record _ ->
|
A.Record _ ->
|
||||||
do genLeftB
|
do genLeftB
|
||||||
fs <- recordFields m t
|
fs <- recordFields m t
|
||||||
sequence_ $ intersperse genComma [genUnfoldedVariable m (A.SubscriptedVariable m (A.SubscriptField m n) var)
|
seqComma [genUnfoldedVariable m (A.SubscriptedVariable m (A.SubscriptField m n) var)
|
||||||
| (n, t) <- fs]
|
| (n, t) <- fs]
|
||||||
genRightB
|
genRightB
|
||||||
-- We can defeat the usage check here because we know it's safe; *we're*
|
-- We can defeat the usage check here because we know it's safe; *we're*
|
||||||
-- generating the subscripts.
|
-- generating the subscripts.
|
||||||
|
@ -374,8 +377,8 @@ genUnfoldedVariable m var
|
||||||
unfoldArray :: [A.Dimension] -> A.Variable -> CGen ()
|
unfoldArray :: [A.Dimension] -> A.Variable -> CGen ()
|
||||||
unfoldArray [] v = genUnfoldedVariable m v
|
unfoldArray [] v = genUnfoldedVariable m v
|
||||||
unfoldArray (A.Dimension n:ds) v
|
unfoldArray (A.Dimension n:ds) v
|
||||||
= sequence_ $ intersperse genComma $ [unfoldArray ds (A.SubscriptedVariable m (A.Subscript m $ makeConstant m i) v)
|
= seqComma $ [unfoldArray ds (A.SubscriptedVariable m (A.Subscript m $ makeConstant m i) v)
|
||||||
| i <- [0..(n - 1)]]
|
| i <- [0..(n - 1)]]
|
||||||
unfoldArray _ _ = dieP m "trying to unfold array with unknown dimension"
|
unfoldArray _ _ = dieP m "trying to unfold array with unknown dimension"
|
||||||
|
|
||||||
-- | Generate a decimal literal -- removing leading zeroes to avoid producing
|
-- | Generate a decimal literal -- removing leading zeroes to avoid producing
|
||||||
|
@ -388,7 +391,7 @@ genDecimal s = tell [s]
|
||||||
|
|
||||||
genArrayLiteralElems :: [A.ArrayElem] -> CGen ()
|
genArrayLiteralElems :: [A.ArrayElem] -> CGen ()
|
||||||
genArrayLiteralElems aes
|
genArrayLiteralElems aes
|
||||||
= sequence_ $ intersperse genComma $ map genElem aes
|
= seqComma $ map genElem aes
|
||||||
where
|
where
|
||||||
genElem :: A.ArrayElem -> CGen ()
|
genElem :: A.ArrayElem -> CGen ()
|
||||||
genElem (A.ArrayElemArray aes) = genArrayLiteralElems aes
|
genElem (A.ArrayElemArray aes) = genArrayLiteralElems aes
|
||||||
|
@ -891,7 +894,7 @@ genRetypeSizes 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]
|
||||||
genArraySize False (sequence_ $ intersperse genComma dims) destN
|
genArraySize False (seqComma dims) destN
|
||||||
|
|
||||||
-- Not array; just check the size is 1.
|
-- Not array; just check the size is 1.
|
||||||
_ ->
|
_ ->
|
||||||
|
@ -969,7 +972,7 @@ declareArraySizes ds name
|
||||||
-- dimensions are fixed.
|
-- dimensions are fixed.
|
||||||
genArraySizesLiteral :: [A.Dimension] -> CGen ()
|
genArraySizesLiteral :: [A.Dimension] -> CGen ()
|
||||||
genArraySizesLiteral ds
|
genArraySizesLiteral ds
|
||||||
= sequence_ $ intersperse genComma dims
|
= seqComma dims
|
||||||
where
|
where
|
||||||
dims :: [CGen ()]
|
dims :: [CGen ()]
|
||||||
dims = [case d of
|
dims = [case d of
|
||||||
|
@ -1083,7 +1086,7 @@ introduceSpec (A.Specification _ n (A.IsChannelArray _ t cs))
|
||||||
= do tell ["Channel *"]
|
= do tell ["Channel *"]
|
||||||
genName n
|
genName n
|
||||||
tell ["[] = {"]
|
tell ["[] = {"]
|
||||||
sequence_ $ intersperse genComma (map genVariable cs)
|
seqComma (map genVariable cs)
|
||||||
tell ["};\n"]
|
tell ["};\n"]
|
||||||
declareArraySizes [A.Dimension $ length cs] n
|
declareArraySizes [A.Dimension $ length cs] n
|
||||||
introduceSpec (A.Specification _ _ (A.DataType _ _)) = return ()
|
introduceSpec (A.Specification _ _ (A.DataType _ _)) = return ()
|
||||||
|
@ -1111,8 +1114,7 @@ introduceSpec (A.Specification _ n (A.RecordType _ b fs))
|
||||||
introduceSpec (A.Specification _ n (A.Protocol _ _)) = return ()
|
introduceSpec (A.Specification _ n (A.Protocol _ _)) = return ()
|
||||||
introduceSpec (A.Specification _ n (A.ProtocolCase _ ts))
|
introduceSpec (A.Specification _ n (A.ProtocolCase _ ts))
|
||||||
= do tell ["typedef enum {\n"]
|
= do tell ["typedef enum {\n"]
|
||||||
sequence_ $ intersperse genComma [genName tag >> tell ["_"] >> genName n
|
seqComma [genName tag >> tell ["_"] >> genName n | (tag, _) <- ts]
|
||||||
| (tag, _) <- ts]
|
|
||||||
-- You aren't allowed to have an empty enum.
|
-- You aren't allowed to have an empty enum.
|
||||||
when (ts == []) $
|
when (ts == []) $
|
||||||
tell ["empty_protocol_"] >> genName n
|
tell ["empty_protocol_"] >> genName n
|
||||||
|
|
Loading…
Reference in New Issue
Block a user