fficxx-0.7.0.0: src/FFICXX/Generate/Code/HsProxy.hs
{-# LANGUAGE OverloadedStrings #-}
module FFICXX.Generate.Code.HsProxy where
import qualified Data.List as L (foldr1)
--
import FFICXX.Generate.Util.HaskellSrcExts
( con,
inapp,
mkFun,
mkVar,
op,
qualifier,
tyapp,
tycon,
tylist,
)
import qualified FFICXX.Runtime.CodeGen.Cxx as R
import Language.Haskell.Exts.Build (app, doE, listE, qualStmt, strE)
import Language.Haskell.Exts.Syntax (Decl (..))
genProxyInstance :: [Decl ()]
genProxyInstance =
mkFun fname sig [] rhs Nothing
where
fname = "genImplProxy"
v = mkVar
sig = tycon "Q" `tyapp` tylist (tycon "Dec")
rhs = doE [foreignSrcStmt, qualStmt retstmt]
foreignSrcStmt =
qualifier $
(v "addModFinalizer")
`app` ( v "addForeignSource"
`app` con "LangCxx"
`app` ( L.foldr1
(\x y -> inapp x (op "++") y)
[includeStatic]
)
)
where
includeStatic =
strE $
concatMap
(<> "\n")
[R.renderCMacro (R.Include "MacroPatternMatch.h")]
retstmt = v "pure" `app` listE []