summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2018-11-24 00:12:14 -0500
committerJoe Crayne <joe@jerkface.net>2018-11-24 00:12:14 -0500
commite728b91d49807a327e66f1c56c25dd02626ce2ce (patch)
tree53f771e1ef2ef781b9a33789f320eeff433f6c33
parent49b428e18dfcf599600f77c9c2ba492dd3ede26f (diff)
It worked!
-rw-r--r--c2haskell.hs105
1 files changed, 79 insertions, 26 deletions
diff --git a/c2haskell.hs b/c2haskell.hs
index 41d9ba0..92fafe4 100644
--- a/c2haskell.hs
+++ b/c2haskell.hs
@@ -232,34 +232,43 @@ hsTypeSpec (CTypeSpec unhandled) = trace ("hsTypeSpec unhandled: "++ show (const
232hsTypeSpec _ = [] 232hsTypeSpec _ = []
233 233
234 234
235-- fieldInfo :: CDeclarator b -> (Maybe (CDeclarator b), Maybe (CInitializer b), Maybe (CExpression b))
236-- fieldInfo var = (Just var,Nothing,Nothing)
237fieldInfo :: (Maybe (CDeclarator b), Maybe (CInitializer b), Maybe (CExpression b)) -> [CDeclarator b]
238fieldInfo (Just var,_,_) = [var]
239fieldInfo _ = []
240
235-- hsTransField :: [CDeclarationSpecifier t3] -> [(Maybe (CDeclarator t2), Maybe t1, Maybe t)] -> [HS.Decl ()] 241-- hsTransField :: [CDeclarationSpecifier t3] -> [(Maybe (CDeclarator t2), Maybe t1, Maybe t)] -> [HS.Decl ()]
236-- recursive for function signatures. 242-- recursive for function signatures.
237hsTransField :: Show b => 243hsTransField :: Show b =>
238 [CDeclarationSpecifier b] -- c structure name 244 [CDeclarationSpecifier b] -- c structure name
239 -> [(Maybe (CDeclarator b), Maybe (CInitializer b), Maybe (CExpression b))] -- c variable declarations 245 -- -> [(Maybe (CDeclarator b), Maybe (CInitializer b), Maybe (CExpression b))] -- c variable declarations
246 -> [CDeclarator b] -- c variable declarations
240 -> [(String{-field name-}, HS.Type () {- haskell type -}) ] 247 -> [(String{-field name-}, HS.Type () {- haskell type -}) ]
241hsTransField ctyps vars 248hsTransField ctyps vars
242 = do 249 = do
243 typname <- hsMkName . either (capitalize . identToString) id <$> (hsTypeSpec =<< ctyps) 250 typname <- hsMkName . either (capitalize . identToString) id <$> (hsTypeSpec =<< ctyps)
244 trace ("typname="++show typname) $ return () 251 trace ("typname="++show typname) $ return ()
245 (var,Nothing,Nothing) <- vars 252 -- (var,Nothing,Nothing) <- vars
253 var <- vars
246 trace ("var="++show var) $ return () 254 trace ("var="++show var) $ return ()
247 CDeclr (Just fident) ptrdeclr Nothing [] _ <- maybeToList var 255 -- CDeclr (Just fident) ptrdeclr Nothing [] _ <- maybeToList var
248 trace ("fident="++show fident) $ return () 256 let CDeclr mfident ptrdeclr Nothing [] _ = var
257 trace ("fident="++show mfident) $ return ()
249 trace ("ptrdeclr="++show ptrdeclr) $ return () 258 trace ("ptrdeclr="++show ptrdeclr) $ return ()
250 let btyp = HS.TyCon () typname 259 let btyp = HS.TyCon () typname
251 grok bs b = case bs of 260 grok bs b = case bs of
252 [] -> b 261 [] -> b
253 (CPtrDeclr [] _:cs) -> HS.TyApp () (HS.TyCon () (hsMkName "Ptr")) (grok cs b) 262 (CPtrDeclr [] _:cs) -> HS.TyApp () (HS.TyCon () (hsMkName "Ptr")) (grok cs b)
254 CFunDeclr (Right (args,flg)) attrs _:p -> 263 CFunDeclr (Right (args,flg)) attrs _:p ->
255 let (as,ts) = unzip $ concatMap (\(CDecl rs as _) -> hsTransField rs as) args 264 let (as,ts) = unzip $ concatMap (\(CDecl rs as _) -> hsTransField rs $ concatMap fieldInfo as) args
256 b0 = case p of 265 b0 = case p of
257 CPtrDeclr [] _:cs -> HS.TyApp () (HS.TyCon () (hsMkName "Ptr")) (grok cs b) 266 CPtrDeclr [] _:cs -> HS.TyApp () (HS.TyCon () (hsMkName "Ptr")) (grok cs b)
258 [] -> b 267 [] -> b
259 in foldr (HS.TyFun ()) b0 ts 268 in foldr (HS.TyFun ()) b0 ts
260 _ -> HS.TyCon () (hsMkName $ show $ map (fmap (const ())) ptrdeclr) 269 _ -> HS.TyCon () (hsMkName $ show $ map (fmap (const ())) ptrdeclr)
261 ftyp = grok ptrdeclr btyp 270 ftyp = grok ptrdeclr btyp
262 fieldName = identToString fident 271 fieldName = maybe ("_") identToString mfident
263 [ ( fieldName, ftyp ) ] 272 [ ( fieldName, ftyp ) ]
264{- 273{-
265transField (CDecl [CTypeSpec (CSUType (CStruct CStructTag mctyp Nothing [] _) _)] vars _) 274transField (CDecl [CTypeSpec (CSUType (CStruct CStructTag mctyp Nothing [] _) _)] vars _)
@@ -279,11 +288,15 @@ extractType (HS.TypeDecl _ _ ftyp) = ftyp
279extractType (HS.TypeSig _ _ ftyp) = ftyp 288extractType (HS.TypeSig _ _ ftyp) = ftyp
280extractType _ = TyCon () (Special () (UnitCon ())) 289extractType _ = TyCon () (Special () (UnitCon ()))
281 290
291{-
282hsTransFieldExt :: Show b => 292hsTransFieldExt :: Show b =>
283 [CDeclarationSpecifier b] 293 [CDeclarationSpecifier b]
284 -> [(Maybe (CDeclarator b), Maybe (CInitializer b), 294 -> [(Maybe (CDeclarator b), Maybe (CInitializer b),
285 Maybe (CExpression b))] 295 Maybe (CExpression b))]
286 -> [Decl ()] 296 -> [Decl ()]
297-}
298hsTransFieldExt :: Show b =>
299 [CDeclarationSpecifier b] -> [CDeclarator b] -> [Decl ()]
287hsTransFieldExt rs as = concatMap (\(fieldName,ftyp)-> [ HS.TypeSig () [ HS.Ident () fieldName ] ftyp ]) 300hsTransFieldExt rs as = concatMap (\(fieldName,ftyp)-> [ HS.TypeSig () [ HS.Ident () fieldName ] ftyp ])
288 $ hsTransField rs as 301 $ hsTransField rs as
289 302
@@ -311,11 +324,31 @@ unpointer t = case getPtrType t of
311 Nothing -> t 324 Nothing -> t
312 Just t' -> t' 325 Just t' -> t'
313 326
314sig :: Show t => CExternalDeclaration t -> [HS.Decl ()] 327-- sig :: Show t => CExternalDeclaration t -> [HS.Decl ()]
328sig :: CExternalDeclaration NodeInfo -> [Decl ()]
315sig = sigf hsTransFieldExt 329sig = sigf hsTransFieldExt
316 330
317sigf f (CDeclExt (CDecl rs as _)) = f rs as 331-- • Couldn't match expected type ‘CDerivedDeclarator a -> (Maybe (CDeclarator a), Maybe (CInitializer a), Maybe (CExpression a))’
318sigf f (CFDefExt (CFunDef rs cdeclr [] bdy _)) = f rs [(Just cdeclr, Nothing, Nothing)] 332-- with actual type ‘(CDerivedDeclarator NodeInfo -> Maybe (CDeclarator NodeInfo), Maybe a0, Maybe a1)’
333
334
335-- CDeclr (Maybe Ident)
336-- [CDerivedDeclarator a]
337-- (Maybe (CStringLiteral a))
338-- [CAttribute a]
339-- a
340-- sigf f d@(CDeclExt (CDecl rs ((Just (CDeclr i x j k l),b,c):zs) n)) = f rs $ map (\v -> (Just (CDeclr Nothing [v] Nothing [] n),Nothing,Nothing)) x
341sigf :: ([CDeclarationSpecifier b] -> [CDeclarator b] -> p) -> CExternalDeclaration b -> p
342sigf f (CDeclExt (CDecl rs as _)) = f rs $ concatMap fieldInfo as
343sigf f (CFDefExt (CFunDef rs cdeclr [] bdy _)) = f rs [cdeclr]
344{-
345sigf f d = f (getReturnValue d) $ do
346 arg <- getArgList d
347 let node (CDeclExt (CDecl rs as n)) = n
348 node (CFDefExt (CFunDef rs cdeclr [] bdy n)) = n
349 s = listToMaybe $ catMaybes $ sym d
350 return $ CDeclr s [arg] Nothing [] (node d)
351-}
319 352
320body0 (CFDefExt (CFunDef rs cdeclr [] bdy _)) = Just bdy 353body0 (CFDefExt (CFunDef rs cdeclr [] bdy _)) = Just bdy
321body0 _ = Nothing 354body0 _ = Nothing
@@ -386,10 +419,14 @@ parseOptions ("-v":args) opts = parseOptions args opts
386parseOptions as x = error (show as) 419parseOptions as x = error (show as)
387 420
388getsig (k,si) = do 421getsig (k,si) = do
389 d <- take 1 $ symbolSource si 422 d0 <- take 1 $ symbolSource si
390 let ts = filter notKnown $ map tname $ map unpointer $ concatMap types $ sigf hsTransSig d 423 let d = case getArgList d0 of
424 oargs:xs -> let args = fst $ makeParameterNames oargs
425 in changeArgList (const $ args:xs) d0
426 _ -> d0
427 ts = filter notKnown $ map tname $ map unpointer $ concatMap types $ sigf hsTransSig d
391 s = sig d 428 s = sig d
392 [(ts,(k,s))] 429 [(ts,(k,s,d))]
393 430
394isAcceptableImport (HS.TyFun _ (TyCon _ (UnQual _ (HS.Ident _ x))) xs) | not (notKnown x) = isAcceptableImport xs 431isAcceptableImport (HS.TyFun _ (TyCon _ (UnQual _ (HS.Ident _ x))) xs) | not (notKnown x) = isAcceptableImport xs
395isAcceptableImport (HS.TyFun _ (TyApp _ (TyCon _ (UnQual _ (HS.Ident _ "Ptr"))) x) xs) = isAcceptableImport xs 432isAcceptableImport (HS.TyFun _ (TyApp _ (TyCon _ (UnQual _ (HS.Ident _ "Ptr"))) x) xs) = isAcceptableImport xs
@@ -413,15 +450,18 @@ makeAcceptableImport t = t
413 450
414-- c2haskell :: Foldable t => C2HaskellOptions -> p -> t String -> CTranslationUnit NodeInfo -> IO () 451-- c2haskell :: Foldable t => C2HaskellOptions -> p -> t String -> CTranslationUnit NodeInfo -> IO ()
415c2haskell :: C2HaskellOptions 452c2haskell :: C2HaskellOptions
416 -> p1 -> [String] -> IncludeStack -> CTranslationUnit NodeInfo -> IO () 453 -> p1 -> FilePath -> [String] -> IncludeStack -> CTranslationUnit NodeInfo -> IO ()
417c2haskell opts cs missings incs (CTranslUnit edecls _) = do 454c2haskell opts cs cmodname missings incs (CTranslUnit edecls _) = do
418 let db = foldr update initTranspile edecls 455 let db = foldr update initTranspile edecls
419 es = Map.filter (\d -> symbolLocal d && not (symbolStatic d)) (syms db) 456 es = Map.filter (\d -> symbolLocal d && not (symbolStatic d)) (syms db)
420 case selectFunction opts of 457 case selectFunction opts of
421 Nothing -> do 458 Nothing -> do
422 createDirectoryIfMissing False "MonkeyPatch" 459 createDirectoryIfMissing False "MonkeyPatch"
423 let fname = ("MonkeyPatch/" ++ modname ++ ".hs") 460 let fname = ("MonkeyPatch/" ++ modname ++ ".hs")
424 modname = "T" -- todo 461 basename f = case break (=='.') $ takeWhile (/='/') $ reverse f of
462 (ext,_:rname) -> reverse rname
463 (rname,_) -> reverse rname
464 modname = capitalize $ basename cmodname
425 stubsname = "MonkeyPatch/t_stubs.c" -- todo 465 stubsname = "MonkeyPatch/t_stubs.c" -- todo
426 putStrLn $ "writing " ++ fname 466 putStrLn $ "writing " ++ fname
427 withFile fname WriteMode $ \haskmod -> do 467 withFile fname WriteMode $ \haskmod -> do
@@ -443,11 +483,14 @@ c2haskell opts cs missings incs (CTranslUnit edecls _) = do
443 putStrLn $ "-- ip_is_lan `elem` sigs2 = " ++ show (elem "ip_is_lan" sigs2) 483 putStrLn $ "-- ip_is_lan `elem` sigs2 = " ++ show (elem "ip_is_lan" sigs2)
444 forM_ (uniq $ ts ++ sigs2) $ \t -> do 484 forM_ (uniq $ ts ++ sigs2) $ \t -> do
445 hPutStrLn haskmod $ "data " ++ t 485 hPutStrLn haskmod $ "data " ++ t
446 forM_ sigs $ \(_,(k,hs)) -> do 486 forM_ sigs $ \(_,(k,hs,d)) -> do
447 forM_ hs $ \hdecl -> do 487 forM_ hs $ \hdecl -> do
488 hPutStr haskmod (commented k)
489 hPutStr haskmod (commented $ show $ pretty d)
490 hPutStr haskmod (commented $ show $ getReturnValue d)
491 hPutStr haskmod (commented $ show hdecl)
492 -- hPutStr haskmod $ commented $ show $ length $ symbolSource si
448 {- 493 {-
449 putStr (commented k)
450 putStr $ commented $ show $ length $ symbolSource si
451 forM_ (take 1 $ symbolSource si) $ \d -> do 494 forM_ (take 1 $ symbolSource si) $ \d -> do
452 let ts = filter notKnown $ map tname $ pointers $ concatMap types $ sigf hsTransSig d 495 let ts = filter notKnown $ map tname $ pointers $ concatMap types $ sigf hsTransSig d
453 -- putStr $ commented (ppShow (fmap (const ()) d)) 496 -- putStr $ commented (ppShow (fmap (const ()) d))
@@ -517,6 +560,7 @@ c2haskell opts cs missings incs (CTranslUnit edecls _) = do
517 Just cfun -> do 560 Just cfun -> do
518 forM_ (Map.lookup cfun $ syms db) $ \si -> do 561 forM_ (Map.lookup cfun $ syms db) $ \si -> do
519 forM_ (take 1 $ symbolSource si) $ \d -> do 562 forM_ (take 1 $ symbolSource si) $ \d -> do
563 putStrLn $ concatMap HS.prettyPrint $ sig d
520 putStrLn $ show $ pretty d 564 putStrLn $ show $ pretty d
521 putStrLn $ show $ pretty $ makeFunctionPointer d 565 putStrLn $ show $ pretty $ makeFunctionPointer d
522 putStrLn $ show $ pretty $ makeSetter d 566 putStrLn $ show $ pretty $ makeSetter d
@@ -571,6 +615,8 @@ changeArgList2 f ((a,b,c):zs) = (changeArgList3 f a,b,c):zs
571 615
572changeArgList3 f (Just (CDeclr a x b c d)) = Just (CDeclr a (f x) b c d) 616changeArgList3 f (Just (CDeclr a x b c d)) = Just (CDeclr a (f x) b c d)
573 617
618changeArgList :: ([CDerivedDeclarator a] -> [CDerivedDeclarator a])
619 -> CExternalDeclaration a -> CExternalDeclaration a
574changeArgList f (CFDefExt (CFunDef xs ys zs c d)) = CFDefExt (CFunDef xs (changeArgList1 f ys) zs c d) 620changeArgList f (CFDefExt (CFunDef xs ys zs c d)) = CFDefExt (CFunDef xs (changeArgList1 f ys) zs c d)
575changeArgList f (CDeclExt (CDecl xs ys pos)) = (CDeclExt (CDecl xs (changeArgList2 f ys) pos)) 621changeArgList f (CDeclExt (CDecl xs ys pos)) = (CDeclExt (CDecl xs (changeArgList2 f ys) pos))
576 622
@@ -586,6 +632,7 @@ getArgList2 ((a,b,c):zs) = getArgList3 a
586 632
587getArgList3 (Just (CDeclr a x b c d)) = x 633getArgList3 (Just (CDeclr a x b c d)) = x
588 634
635getArgList :: CExternalDeclaration a -> [CDerivedDeclarator a]
589getArgList (CFDefExt (CFunDef xs ys zs c d)) = getArgList1 ys 636getArgList (CFDefExt (CFunDef xs ys zs c d)) = getArgList1 ys
590getArgList (CDeclExt (CDecl xs ys pos)) = getArgList2 ys 637getArgList (CDeclExt (CDecl xs ys pos)) = getArgList2 ys
591 638
@@ -598,7 +645,7 @@ getReturnValue (CDeclExt (CDecl xs ys pos)) = xs
598voidReturnType = [ CTypeSpec (CVoidType undefNode) ] 645voidReturnType = [ CTypeSpec (CVoidType undefNode) ]
599 646
600setBody bdy (CFDefExt (CFunDef xs ys zs c d)) = (CFDefExt (CFunDef xs ys zs bdy d)) 647setBody bdy (CFDefExt (CFunDef xs ys zs c d)) = (CFDefExt (CFunDef xs ys zs bdy d))
601setBody bdy (CDeclExt (CDecl xs ys pos)) = (CFDefExt (CFunDef xs v [] bdy pos)) 648setBody bdy (CDeclExt (CDecl xs ys pos)) = (CFDefExt (CFunDef xs v [] bdy pos))
602 where v = case ys of 649 where v = case ys of
603 (Just y,_,_):_ -> y 650 (Just y,_,_):_ -> y
604 _ -> CDeclr Nothing [] Nothing [] pos 651 _ -> CDeclr Nothing [] Nothing [] pos
@@ -608,7 +655,7 @@ makeStub d = -- @(CDeclExt (CDecl xs ys pos)) =
608 [ CTypeSpec (CVoidType _) ] -> False -- void function. 655 [ CTypeSpec (CVoidType _) ] -> False -- void function.
609 _ -> True 656 _ -> True
610 name = concatMap identToString $ take 1 $ catMaybes $ sym d 657 name = concatMap identToString $ take 1 $ catMaybes $ sym d
611 msg = "undefined: " ++ HS.prettyPrint (makeAcceptableDecl $ head $ sig d) ++ "\n" 658 msg = "undefined: " ++ concatMap (HS.prettyPrint . makeAcceptableDecl) (take 1 $ sig d) ++ "\n"
612 in case getArgList d of 659 in case getArgList d of
613 oargs:xs -> 660 oargs:xs ->
614 let (args,vs) = makeParameterNames oargs 661 let (args,vs) = makeParameterNames oargs
@@ -622,7 +669,8 @@ parameterIdent (CDecl _ xs n) = listToMaybe $ do
622 return x 669 return x
623 670
624 671
625makeParameterNames :: CDerivedDeclarator NodeInfo -> (CDerivedDeclarator NodeInfo,[CExpression NodeInfo]) 672-- makeParameterNames :: CDerivedDeclarator NodeInfo -> (CDerivedDeclarator NodeInfo,[CExpression NodeInfo])
673makeParameterNames :: CDerivedDeclarator n -> (CDerivedDeclarator n,[CExpression n])
626makeParameterNames (CFunDeclr (Right (ps, flg)) z2 z3) = case ps of 674makeParameterNames (CFunDeclr (Right (ps, flg)) z2 z3) = case ps of
627 [CDecl [CTypeSpec (CVoidType _)] [] _] -> ( CFunDeclr (Right (ps, flg)) z2 z3 , []) -- void argument list. 675 [CDecl [CTypeSpec (CVoidType _)] [] _] -> ( CFunDeclr (Right (ps, flg)) z2 z3 , []) -- void argument list.
628 _ -> ( CFunDeclr (Right (qs, flg)) z2 z3 , map expr qs ) 676 _ -> ( CFunDeclr (Right (qs, flg)) z2 z3 , map expr qs )
@@ -630,9 +678,9 @@ makeParameterNames (CFunDeclr (Right (ps, flg)) z2 z3) = case ps of
630 -- TODO: ensure uniqueness of generated parameter names 678 -- TODO: ensure uniqueness of generated parameter names
631 qs = zipWith mkp [0..] ps 679 qs = zipWith mkp [0..] ps
632 mkp num (CDecl rtyp ((Just (CDeclr Nothing typ x ys z),a,b):xs) n) 680 mkp num (CDecl rtyp ((Just (CDeclr Nothing typ x ys z),a,b):xs) n)
633 = (CDecl rtyp ((Just (CDeclr (Just $ mkidn num n) typ x ys z),a,b):xs) n) 681 = (CDecl rtyp ((Just (CDeclr (Just $ mkidn num undefNode) typ x ys z),a,b):xs) n)
634 mkp num (CDecl rtyp [] n) 682 mkp num (CDecl rtyp [] n)
635 = (CDecl rtyp ((Just (CDeclr (Just $ mkidn num n) [] Nothing [] n),Nothing,Nothing):[]) n) 683 = (CDecl rtyp ((Just (CDeclr (Just $ mkidn num undefNode) [] Nothing [] n),Nothing,Nothing):[]) n)
636 mkp num p = p 684 mkp num p = p
637 685
638expr :: CDeclaration a -> CExpression a 686expr :: CDeclaration a -> CExpression a
@@ -717,10 +765,14 @@ goMissing :: Show b =>
717 Handle -> Transpile [CExternalDeclaration b] -> String -> IO () 765 Handle -> Transpile [CExternalDeclaration b] -> String -> IO ()
718goMissing haskmod db cfun = do 766goMissing haskmod db cfun = do
719 forM_ (Map.lookup cfun $ syms db) $ \si -> do 767 forM_ (Map.lookup cfun $ syms db) $ \si -> do
720 forM_ (take 1 $ symbolSource si) $ \d -> do 768 forM_ (take 1 $ symbolSource si) $ \d0 -> do
721 -- putStr $ commented (ppShow (fmap (const ()) d)) 769 -- putStr $ commented (ppShow (fmap (const ()) d))
722 -- putStr $ commented (show $ pretty d) 770 -- putStr $ commented (show $ pretty d)
723 -- when (verbose opts) $ print (sig d) 771 -- when (verbose opts) $ print (sig d)
772 let d = case getArgList d0 of
773 oargs:xs -> let args = fst $ makeParameterNames oargs
774 in changeArgList (const $ args:xs) d0
775 _ -> d0
724 let ts = filter notKnown $ map tname $ pointers $ concatMap types $ sigf hsTransSig d 776 let ts = filter notKnown $ map tname $ pointers $ concatMap types $ sigf hsTransSig d
725 -- forM_ ts $ \t -> putStrLn $ "data " ++ t 777 -- forM_ ts $ \t -> putStrLn $ "data " ++ t
726 forM_ (sigf hsTransSig d) $ \hs -> do 778 forM_ (sigf hsTransSig d) $ \hs -> do
@@ -796,7 +848,7 @@ usage :: [String] -> Maybe (C2HaskellOptions, [String], [FilePath])
796usage args = 848usage args =
797 case break (=="--") args of 849 case break (=="--") args of
798 (targs,_:cargs0) -> do 850 (targs,_:cargs0) -> do
799 let (rfs,ropts) = span isModule cargs0 851 let (rfs,ropts) = span isModule $ reverse cargs0
800 opts = reverse ropts 852 opts = reverse ropts
801 cargs = (sanitizeArgs opts) 853 cargs = (sanitizeArgs opts)
802 hopts = parseOptions targs defopts 854 hopts = parseOptions targs defopts
@@ -875,6 +927,7 @@ main = do
875 let usageString = self ++ " [--cpp | -p | -t ] [-v] [-f <sym>] -- [gcc options] [modules] <cfile>" 927 let usageString = self ++ " [--cpp | -p | -t ] [-v] [-f <sym>] -- [gcc options] [modules] <cfile>"
876 let m = usage args 928 let m = usage args
877 fromMaybe (putStrLn usageString) $ m <&> \(hopts,cargs,fname:fs) -> do 929 fromMaybe (putStrLn usageString) $ m <&> \(hopts,cargs,fname:fs) -> do
930 putStrLn $ "fname = " ++ fname
878 prer <- runPreprocessor (newGCC "gcc") (rawCppArgs cargs fname) 931 prer <- runPreprocessor (newGCC "gcc") (rawCppArgs cargs fname)
879 let r = do 932 let r = do
880 pre <- left Left $ prer 933 pre <- left Left $ prer
@@ -895,4 +948,4 @@ main = do
895 putStrLn $ ppShow $ everywhere (mkT eraseNodeInfo) . snd <$> r 948 putStrLn $ ppShow $ everywhere (mkT eraseNodeInfo) . snd <$> r
896 _ -> do 949 _ -> do
897 syms <- linker (cargs ++ reverse fs) fname 950 syms <- linker (cargs ++ reverse fs) fname
898 either print (uncurry $ c2haskell hopts cs syms) r 951 either print (uncurry $ c2haskell hopts cs fname syms) r