@@ -16,7 +16,8 @@ import Control.Monad
17data DbgLevel = NONE | DEBUG | TRACE
17data DbgLevel = NONE | DEBUG | TRACE
19+codegenC :: Maybe FilePath -> -- dump output
19−codegenC :: [(Name, SDecl)] ->
20+ [(Name, SDecl)] ->
20 String -> -- output file name
21 String -> -- output file name
21 Bool -> -- generate executable if True, only .o if False
22 Bool -> -- generate executable if True, only .o if False
22 [FilePath] -> -- include files
23 [FilePath] -> -- include files
@@ -24,7 +25,7 @@ codegenC :: [(Name, SDecl)] ->
24 String -> -- extra compiler flags
25 String -> -- extra compiler flags
25 DbgLevel ->
26 DbgLevel ->
27−codegenC defs out exec incs objs libs dbg
28+codegenC dump defs out exec incs objs libs dbg
28 = do -- print defs
29 = do -- print defs
29 let bc = map toBC defs
30 let bc = map toBC defs
30 let h = concatMap toDecl (map fst bc)
31 let h = concatMap toDecl (map fst bc)
@@ -45,12 +46,14 @@ codegenC defs out exec incs objs libs dbg
45 " " ++ tmpn ++
46 " " ++ tmpn ++
46 " `idris --link` `idris --include` " ++ libs ++
47 " `idris --link` `idris --include` " ++ libs ++
47 " -o " ++ out
48 " -o " ++ out
48− -- putStrLn cout
49+ case dump of
50+ Just co -> do writeFile co cout
49 exit <- system gcc
52 exit <- system gcc
50 when (exit /= ExitSuccess) $
53 when (exit /= ExitSuccess) $
51 putStrLn ("FAILURE: " ++ gcc)
54 putStrLn ("FAILURE: " ++ gcc)
53−headers [] = "#include <idris_rts.h>\n#include <idris_stdfgn.h>\n#include<assert.h>\n"
56+headers [] = "#include <idris_rts.h>\n#include <idris_stdfgn.h>\n#include <assert.h>\n"
54headers (x : xs) = "#include <" ++ x ++ ">\n" ++ headers xs
57headers (x : xs) = "#include <" ++ x ++ ">\n" ++ headers xs
56debug TRACE = "#define IDRIS_TRACE\n\n"
59debug TRACE = "#define IDRIS_TRACE\n\n"