1module IRTS.DumpBC where
10interMap :: [a] -> [b] -> (a -> [b]) -> [b]
11interMap xs y f = concat (intersperse y (map f xs))
13indent :: Int -> String
14indent n = replicate (n*4) ' '
16serializeReg :: Reg -> String
17serializeReg (L n) = "L" ++ show n
18serializeReg (T n) = "T" ++ show n
19serializeReg r = show r
21serializeCase :: Show a => Int -> (a, [BC]) -> String
22serializeCase n (x, bcs) =
23 indent n ++ show x ++ ":\n" ++ interMap bcs "\n" (serializeBC (n + 1))
25serializeDefault :: Int -> [BC] -> String
26serializeDefault n bcs =
27 indent n ++ "default:\n" ++ interMap bcs "\n" (serializeBC (n + 1))
29serializeBC :: Int -> BC -> String
30serializeBC n bc = indent n ++
33 "ASSIGN " ++ serializeReg a ++ " " ++ serializeReg b
35 "ASSIGNCONST " ++ serializeReg a ++ " " ++ show b
37 "UPDATE " ++ serializeReg a ++ " " ++ serializeReg b
38 MKCON a Nothing b xs ->
39 "MKCON " ++ serializeReg a ++ " " ++ show b ++ " [" ++ (interMap xs ", " serializeReg) ++ "]"
40 MKCON a (Just r) b xs ->
41 "MKCON@" ++ serializeReg r ++ " " ++ serializeReg a ++ " " ++ show b ++ " [" ++ (interMap xs ", " serializeReg) ++ "]"
42 CASE safe r cases def ->
43 "CASE " ++ serializeReg r ++ ":\n" ++ interMap cases "\n" (serializeCase (n + 1)) ++
44 maybe "" (\def' -> "\n" ++ serializeDefault (n + 1) def') def
46 "PROJECT " ++ serializeReg a ++ " " ++ show b ++ " " ++ show c
48 "PROJECTINTO " ++ serializeReg a ++ " " ++ serializeReg b ++ " " ++ show c
49 CONSTCASE r cases def ->
50 "CONSTCASE " ++ serializeReg r ++ ":\n" ++ interMap cases "\n" (serializeCase (n + 1)) ++
51 maybe "" (\def' -> "\n" ++ serializeDefault (n + 1) def') def
52 CALL x -> "CALL " ++ show x
53 TAILCALL x -> "TAILCALL " ++ show x
54 FOREIGNCALL r _ ret name args ->
55 "FOREIGNCALL " ++ serializeReg r ++ " \"" ++ name ++ "\" " ++ show ret ++
56 " [" ++ interMap args ", " (\(ty, r) -> serializeReg r ++ " : " ++ show ty) ++ "]"
57 SLIDE n -> "SLIDE " ++ show n
59 RESERVE n -> "RESERVE " ++ show n
60 ADDTOP n -> "ADDTOP " ++ show n
61 TOPBASE n -> "TOPBASE " ++ show n
62 BASETOP n -> "BASETOP " ++ show n
63 STOREOLD -> "STOREOLD"
65 "OP " ++ serializeReg a ++ " " ++ show b ++ " [" ++ interMap c ", " serializeReg ++ "]"
66 NULL r -> "NULL " ++ serializeReg r
67 ERROR s -> "ERROR \"" ++ s ++ "\"" -- FIXME: s may contain quotes
69serialize :: [(Name, [BC])] -> String
71 interMap decls "\n\n" serializeDecl
73 serializeDecl :: (Name, [BC]) -> String
74 serializeDecl (name, bcs) =
75 show name ++ ":\n" ++ interMap bcs "\n" (serializeBC 1)
77dumpBC :: [(Name, SDecl)] -> String -> IO ()
78dumpBC c output = writeFile output $ serialize $ map toBC c
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list