[pull trailing labels out of blocks and place them after the block.
John Meacham <john@repetae.net>**20070522025523] hunk ./C/Generate.hs 379
+labelPull :: Statement -> (Statement,Statement)
+labelPull (St ss) = f ss mempty where
+    f ss rr | ss' Seq.:> l@SLabel {} <- Seq.viewr ss = f ss' (Seq.singleton l `mappend` rr)
+            | otherwise = (St ss,St rr)
+
hunk ./C/Generate.hs 387
-switch' e es = stmt $ SSwitch e es
+switch' e es = (stmt $ SSwitch e es') `mappend` ls where
+     (es',ls) = runWriter $ mapM f es
+     f (c,s) = tell l >> return (c,s') where (s',l) = labelPull s
hunk ./C/Generate.hs 393
-cif exp thn els = stmt $ SIf exp thn els
+cif exp thn els = (stmt $ SIf exp thn' els') `mappend` la `mappend` lb where
+    (thn',la) = labelPull thn
+    (els',lb) = labelPull els
hunk ./C/Generate.hs 397
-subBlock st = stmt (SBlock st)
+subBlock st = stmt (SBlock st') `mappend` la  where
+    (st',la) = labelPull st