diff options
Diffstat (limited to 'c2haskell.hs')
-rw-r--r-- | c2haskell.hs | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/c2haskell.hs b/c2haskell.hs index c55458a..df97487 100644 --- a/c2haskell.hs +++ b/c2haskell.hs | |||
@@ -497,6 +497,7 @@ changeName f d = d | |||
497 | 497 | ||
498 | makeAcceptableDecl (HS.TypeDecl a (DHead b (HS.Ident c signame)) ftyp) | 498 | makeAcceptableDecl (HS.TypeDecl a (DHead b (HS.Ident c signame)) ftyp) |
499 | = (HS.TypeDecl a (DHead b (HS.Ident c signame)) (makeFunctionUseIO $ makeAcceptableImport ftyp)) | 499 | = (HS.TypeDecl a (DHead b (HS.Ident c signame)) (makeFunctionUseIO $ makeAcceptableImport ftyp)) |
500 | makeAcceptableDecl (HS.TypeSig a b ftyp) = HS.TypeSig a b (makeFunctionUseIO $ makeAcceptableImport ftyp) | ||
500 | 501 | ||
501 | makeSetter d = -- @(CDeclExt (CDecl xs ys pos)) = | 502 | makeSetter d = -- @(CDeclExt (CDecl xs ys pos)) = |
502 | let name = concatMap identToString $ take 1 $ catMaybes $ sym d | 503 | let name = concatMap identToString $ take 1 $ catMaybes $ sym d |
@@ -537,7 +538,8 @@ makeStub d = -- @(CDeclExt (CDecl xs ys pos)) = | |||
537 | (args,vs) = makeParameterNames oargs | 538 | (args,vs) = makeParameterNames oargs |
538 | name = concatMap identToString $ take 1 $ catMaybes $ sym d | 539 | name = concatMap identToString $ take 1 $ catMaybes $ sym d |
539 | rval = True -- todo: Set False for void function. | 540 | rval = True -- todo: Set False for void function. |
540 | in setBody (stubBody ("f_"++name) vs rval) $ changeArgList (const $ args:xs) d | 541 | msg = "undefined: " ++ HS.prettyPrint (makeAcceptableDecl $ head $ sig d) ++ "\n" |
542 | in setBody (stubBody ("f_"++name) vs rval msg) $ changeArgList (const $ args:xs) d | ||
541 | 543 | ||
542 | 544 | ||
543 | parameterIdent :: CDeclaration a -> Maybe Ident | 545 | parameterIdent :: CDeclaration a -> Maybe Ident |
@@ -585,7 +587,7 @@ voidp = [ CFunDeclr | |||
585 | where n = undefNode | 587 | where n = undefNode |
586 | 588 | ||
587 | 589 | ||
588 | stubBody name vs rval = | 590 | stubBody name vs rval msg = |
589 | CCompound [] | 591 | CCompound [] |
590 | [ CBlockStmt | 592 | [ CBlockStmt |
591 | (CIf | 593 | (CIf |
@@ -614,10 +616,7 @@ stubBody name vs rval = | |||
614 | undefNode | 616 | undefNode |
615 | where | 617 | where |
616 | printmsg = (CExpr (Just (C.CCall (CVar (C.Ident "fputs" 0 undefNode) undefNode) | 618 | printmsg = (CExpr (Just (C.CCall (CVar (C.Ident "fputs" 0 undefNode) undefNode) |
617 | [ CConst | 619 | [ CConst (CStrConst (cString msg) undefNode) |
618 | (CStrConst | ||
619 | (cString $ "missing symbol: " ++ name ++ ".\n") | ||
620 | undefNode) | ||
621 | , CVar (C.Ident "stderr" 0 undefNode) undefNode | 620 | , CVar (C.Ident "stderr" 0 undefNode) undefNode |
622 | ] | 621 | ] |
623 | undefNode)) undefNode) | 622 | undefNode)) undefNode) |