diff options
author | Peter Wortmann <scpmw@leeds.ac.uk> | 2013-06-26 15:44:36 +0100 |
---|---|---|
committer | David Terei <davidterei@gmail.com> | 2013-06-27 13:39:11 -0700 |
commit | 8f0ecc0343b0a1c9fcbdf3224b2d9067dd549659 (patch) | |
tree | 7831695b0b8f8ded5aad787e8c9b71cb7b876616 | |
parent | 720a87c7ec967ff878f081bd3cc810cae3fe4a50 (diff) | |
download | haskell-8f0ecc0343b0a1c9fcbdf3224b2d9067dd549659.tar.gz |
Rewrite ppLlvmBlock to use standard library "break"
-rw-r--r-- | compiler/llvmGen/Llvm/PpLlvm.hs | 21 |
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 |