hs-bindgen-1.0.0.0: src-internal/HsBindgen/Frontend/Pass/ConstructTranslationUnit.hs
module HsBindgen.Frontend.Pass.ConstructTranslationUnit (
constructTranslationUnit
) where
import HsBindgen.Frontend.Analysis.DeclIndex (DeclIndex)
import HsBindgen.Frontend.Analysis.DeclIndex qualified as DeclIndex
import HsBindgen.Frontend.Analysis.DeclUseGraph (DeclUseGraph)
import HsBindgen.Frontend.Analysis.DeclUseGraph qualified as DeclUseGraph
import HsBindgen.Frontend.Analysis.IncludeGraph (IncludeGraph)
import HsBindgen.Frontend.Analysis.UseDeclGraph (UseDeclGraph)
import HsBindgen.Frontend.Analysis.UseDeclGraph qualified as UseDeclGraph
import HsBindgen.Frontend.DeclMeta
import HsBindgen.Frontend.Pass.ConstructTranslationUnit.IsPass
import HsBindgen.Frontend.Pass.EnrichComments.IsPass
import HsBindgen.Frontend.Pass.Parse.Result
import HsBindgen.Frontend.Predicate (IsMainHeader)
import HsBindgen.Frontend.TranslationUnit qualified as C
import HsBindgen.Macro.Interface qualified as Macro
import HsBindgen.Macro.Type qualified as Macro
import HsBindgen.Macro.UniqueExpansion qualified as UniqueExpansion
{-------------------------------------------------------------------------------
Construction
-------------------------------------------------------------------------------}
type PreviousPass = EnrichComments
constructTranslationUnit ::
forall l. Macro.HasTypes l
=> Macro.Lang l
-> UniqueExpansion.Analysis
-> IsMainHeader
-> [ParseResult l PreviousPass]
-> IncludeGraph
-> C.TranslationUnit l ConstructTranslationUnit
constructTranslationUnit macroLang macroAnalysis isMainHeader parseResults includeGraph = C.TranslationUnit{
decls = DeclUseGraph.toDecls
declMeta.declIndex
declMeta.declUseGraph
, includeGraph = includeGraph
, meta = declMeta
}
where
declMeta :: DeclMeta l
declMeta =
mkDeclMeta macroLang macroAnalysis isMainHeader parseResults includeGraph
mkDeclMeta ::
forall l. Macro.HasTypes l
=> Macro.Lang l
-> UniqueExpansion.Analysis
-> IsMainHeader
-> [ParseResult l PreviousPass]
-> IncludeGraph
-> DeclMeta l
mkDeclMeta macroLang macroAnalysis isMainHeader parseResults includeGraph = declMeta
where
declIndex :: DeclIndex l
declIndex =
DeclIndex.fromParseResults macroLang macroAnalysis isMainHeader parseResults
declUseGraph :: DeclUseGraph
declUseGraph = DeclUseGraph.construct includeGraph declIndex
useDeclGraph :: UseDeclGraph
useDeclGraph = UseDeclGraph.fromDeclUseGraph declUseGraph
declMeta :: DeclMeta l
declMeta = DeclMeta{
declIndex = declIndex
, declUseGraph = declUseGraph
, useDeclGraph = useDeclGraph
}