Skip to content

Commit

Permalink
Explode HsFrontEnd module (#216)
Browse files Browse the repository at this point in the history
to HsCommon, HsInterface, HsImplementation, HsTopLevel

* separate out HsInterface
* separate out HsImplementation
* remove warnings in separated modules
* remove warnings in HsCast
* rename remaining HsFrontEnd to HsTopLevel
* HsCommon module separation
* remove warnings
  • Loading branch information
wavewave committed Aug 10, 2023
1 parent 086e022 commit cf55d30
Show file tree
Hide file tree
Showing 9 changed files with 571 additions and 424 deletions.
5 changes: 4 additions & 1 deletion fficxx/fficxx.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,14 @@ Library
FFICXX.Generate.Config
FFICXX.Generate.Code.Cpp
FFICXX.Generate.Code.HsCast
FFICXX.Generate.Code.HsCommon
FFICXX.Generate.Code.HsFFI
FFICXX.Generate.Code.HsFrontEnd
FFICXX.Generate.Code.HsImplementation
FFICXX.Generate.Code.HsInterface
FFICXX.Generate.Code.HsProxy
FFICXX.Generate.Code.HsRawType
FFICXX.Generate.Code.HsTemplate
FFICXX.Generate.Code.HsTopLevel
FFICXX.Generate.Code.Cabal
FFICXX.Generate.Code.Primitive
FFICXX.Generate.ContentMaker
Expand Down
3 changes: 1 addition & 2 deletions fficxx/src/FFICXX/Generate/Builder.hs
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,7 @@ simpleBuilder cfg sbc = do
for_ (cabal_additional_c_srcs cabal) (\(AddCSrc hdr txt) -> gen hdr txt)
--
putStrLn "Generating RawType.hs"
for_ mods $ \m -> do
debugExactPrint (C.buildRawTypeHs m)
for_ mods $ \m ->
gen
(cmModule m <.> "RawType" <.> "hs")
(exactPrint (C.buildRawTypeHs m))
Expand Down
43 changes: 31 additions & 12 deletions fficxx/src/FFICXX/Generate/Code/HsCast.hs
Original file line number Diff line number Diff line change
@@ -1,14 +1,30 @@
module FFICXX.Generate.Code.HsCast where
module FFICXX.Generate.Code.HsCast
( -- * imports
genImportInCast,

import FFICXX.Generate.Name (hsClassName, typeclassName)
-- * code
castBody,
castBody_,
genHsFrontInstCastable,
genHsFrontInstCastableSelf,
)
where

import FFICXX.Generate.Name
( hsClassName,
subModuleName,
typeclassName,
)
import FFICXX.Generate.Type.Class (Class (..), isAbstractClass)
import FFICXX.Generate.Type.Module (ClassModule (..))
import FFICXX.Generate.Util.GHCExactPrint
( app,
classA,
cxEmpty,
cxTuple,
instD,
mkBind1,
mkImport,
mkInstance,
mkPVar,
mkTVar,
Expand All @@ -20,27 +36,30 @@ import FFICXX.Generate.Util.GHCExactPrint
)
import qualified FFICXX.Generate.Util.HaskellSrcExts as O
( app,
classA,
cxEmpty,
cxTuple,
insDecl,
mkBind1,
mkInstance,
mkPVar,
mkTVar,
mkVar,
tyPtr,
tyapp,
tycon,
unqual,
)
import GHC.Hs (GhcPs)
import qualified Language.Haskell.Exts.Syntax as O (Decl, InstDecl)
import qualified Language.Haskell.Exts.Syntax as O (InstDecl)
import Language.Haskell.Syntax
( HsBind,
HsDecl,
ImportDecl,
)

--
-- imports
--

genImportInCast :: ClassModule -> [ImportDecl GhcPs]
genImportInCast m =
fmap (mkImport . subModuleName) $ cmImportedSubmodulesForCast m

--
-- code
--
castBody_ :: [O.InstDecl ()]
castBody_ =
[ O.insDecl (O.mkBind1 "cast" [O.mkPVar "x", O.mkPVar "f"] (O.app (O.mkVar "f") (O.app (O.mkVar "castPtr") (O.app (O.mkVar "get_fptr") (O.mkVar "x")))) Nothing),
Expand Down
32 changes: 32 additions & 0 deletions fficxx/src/FFICXX/Generate/Code/HsCommon.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}

module FFICXX.Generate.Code.HsCommon
( genExtraImport_,
genExtraImport,
genImportInCast_,
)
where

import FFICXX.Generate.Name (subModuleName)
import FFICXX.Generate.Type.Module (ClassModule (..))
import qualified FFICXX.Generate.Util.GHCExactPrint as Ex
import FFICXX.Generate.Util.HaskellSrcExts (mkImport)
import qualified GHC.Hs as Ex
import Language.Haskell.Exts.Syntax (ImportDecl)

-- TODO: Remove
genExtraImport_ :: ClassModule -> [ImportDecl ()]
genExtraImport_ cm = map mkImport (cmExtraImport cm)

-- This is the new version.
genExtraImport :: ClassModule -> [Ex.ImportDecl Ex.GhcPs]
genExtraImport cm = fmap Ex.mkImport (cmExtraImport cm)

-- OLD
-- TODO: Remove
genImportInCast_ :: ClassModule -> [ImportDecl ()]
genImportInCast_ m =
fmap (mkImport . subModuleName) $ cmImportedSubmodulesForCast m

0 comments on commit cf55d30

Please sign in to comment.