summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wortmann <scpmw@leeds.ac.uk>2013-06-26 15:44:36 +0100
committerDavid Terei <davidterei@gmail.com>2013-06-27 13:39:11 -0700
commit8f0ecc0343b0a1c9fcbdf3224b2d9067dd549659 (patch)
tree7831695b0b8f8ded5aad787e8c9b71cb7b876616
parent720a87c7ec967ff878f081bd3cc810cae3fe4a50 (diff)
downloadhaskell-8f0ecc0343b0a1c9fcbdf3224b2d9067dd549659.tar.gz
Rewrite ppLlvmBlock to use standard library "break"
-rw-r--r--compiler/llvmGen/Llvm/PpLlvm.hs21
1 files changed, 8 insertions, 13 deletions
diff --git a/compiler/llvmGen/Llvm/PpLlvm.hs b/compiler/llvmGen/Llvm/PpLlvm.hs
index d1cb0553bf..87be8f6dc0 100644
--- a/compiler/llvmGen/Llvm/PpLlvm.hs
+++ b/compiler/llvmGen/Llvm/PpLlvm.hs
@@ -186,19 +186,14 @@ ppLlvmBlocks blocks = vcat $ map ppLlvmBlock blocks
-- | Print out an LLVM block.
-- It must be part of a function definition.
ppLlvmBlock :: LlvmBlock -> SDoc
-ppLlvmBlock (LlvmBlock blockId stmts)
- = go blockId stmts
- where
- lbreak acc [] = (Nothing, reverse acc, [])
- lbreak acc (MkLabel id:xs) = (Just id, reverse acc, xs)
- lbreak acc (x:xs) = lbreak (x:acc) xs
-
- go id code =
- let (id2, block, rest) = lbreak [] code
- ppRest = case id2 of
- Just id2' -> go id2' rest
- Nothing -> empty
- in ppLlvmBlockLabel id
+ppLlvmBlock (LlvmBlock blockId stmts) =
+ let isLabel (MkLabel _) = True
+ isLabel _ = False
+ (block, rest) = break isLabel stmts
+ ppRest = case rest of
+ MkLabel id:xs -> ppLlvmBlock (LlvmBlock id xs)
+ _ -> empty
+ in ppLlvmBlockLabel blockId
$+$ (vcat $ map ppLlvmStatement block)
$+$ newLine
$+$ ppRest