summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2018-11-23 18:58:06 -0500
committerJoe Crayne <joe@jerkface.net>2018-11-23 18:58:06 -0500
commit49b428e18dfcf599600f77c9c2ba492dd3ede26f (patch)
tree479f0ead275352c456b86d94440d67d10e7a7a2e
parent5011839455292f2eadc0b172006544214d0a9ba9 (diff)
Handle special case (void) argument list.
-rw-r--r--c2haskell.hs11
1 files changed, 8 insertions, 3 deletions
diff --git a/c2haskell.hs b/c2haskell.hs
index ce33666..41d9ba0 100644
--- a/c2haskell.hs
+++ b/c2haskell.hs
@@ -621,9 +621,11 @@ parameterIdent (CDecl _ xs n) = listToMaybe $ do
621 (Just (CDeclr (Just x) _ _ _ _),_,_) <- xs 621 (Just (CDeclr (Just x) _ _ _ _),_,_) <- xs
622 return x 622 return x
623 623
624
624makeParameterNames :: CDerivedDeclarator NodeInfo -> (CDerivedDeclarator NodeInfo,[CExpression NodeInfo]) 625makeParameterNames :: CDerivedDeclarator NodeInfo -> (CDerivedDeclarator NodeInfo,[CExpression NodeInfo])
625makeParameterNames (CFunDeclr (Right (ps, flg)) z2 z3) 626makeParameterNames (CFunDeclr (Right (ps, flg)) z2 z3) = case ps of
626 = ( CFunDeclr (Right (qs, flg)) z2 z3 , map expr qs ) 627 [CDecl [CTypeSpec (CVoidType _)] [] _] -> ( CFunDeclr (Right (ps, flg)) z2 z3 , []) -- void argument list.
628 _ -> ( CFunDeclr (Right (qs, flg)) z2 z3 , map expr qs )
627 where 629 where
628 -- TODO: ensure uniqueness of generated parameter names 630 -- TODO: ensure uniqueness of generated parameter names
629 qs = zipWith mkp [0..] ps 631 qs = zipWith mkp [0..] ps
@@ -787,11 +789,14 @@ sanitizeArgs ("-o":args) = sanitizeArgs $ drop 1 args
787sanitizeArgs (arg:args) = arg : sanitizeArgs args 789sanitizeArgs (arg:args) = arg : sanitizeArgs args
788sanitizeArgs [] = [] 790sanitizeArgs [] = []
789 791
792isModule :: FilePath -> Bool
793isModule fname = (".c" `isSuffixOf` fname) || (".o" `isSuffixOf` fname)
794
790usage :: [String] -> Maybe (C2HaskellOptions, [String], [FilePath]) 795usage :: [String] -> Maybe (C2HaskellOptions, [String], [FilePath])
791usage args = 796usage args =
792 case break (=="--") args of 797 case break (=="--") args of
793 (targs,_:cargs0) -> do 798 (targs,_:cargs0) -> do
794 let (rfs,ropts) = span (".c" `isSuffixOf`) cargs0 799 let (rfs,ropts) = span isModule cargs0
795 opts = reverse ropts 800 opts = reverse ropts
796 cargs = (sanitizeArgs opts) 801 cargs = (sanitizeArgs opts)
797 hopts = parseOptions targs defopts 802 hopts = parseOptions targs defopts