hs-bindgen-1.0.0.0: src-internal/HsBindgen/Frontend/Pass/SimplifyAST/IsPass.hs
module HsBindgen.Frontend.Pass.SimplifyAST.IsPass (
SimplifyAST
-- * Trace messages
, SimplifyASTMsg(..)
) where
import Text.SimplePrettyPrint qualified as PP
import HsBindgen.Frontend.Pass.Parse.IsPass
import HsBindgen.Imports
import HsBindgen.IR.C qualified as C
import HsBindgen.IR.Pass
import HsBindgen.IR.Pass.Types (CoercePassAnonRef)
import HsBindgen.Macro.Interface qualified as Macro
import HsBindgen.Util.Tracer
{-------------------------------------------------------------------------------
Definition
-------------------------------------------------------------------------------}
type SimplifyAST :: Pass
data SimplifyAST a
-- Preserve annotations from @Parse@ pass
type family AnnSimplifyAST (ix :: Symbol) where
AnnSimplifyAST "Function" = ReparseInfo Tokens
AnnSimplifyAST "Global" = ReparseInfo Tokens
AnnSimplifyAST "ImplicitField" = FieldOrigin
AnnSimplifyAST "IndirectField" = ReparseInfo Tokens
AnnSimplifyAST "RegularField" = ReparseInfo Tokens
AnnSimplifyAST "Struct" = IsAnon
AnnSimplifyAST "Typedef" = ReparseInfo Tokens
AnnSimplifyAST "Union" = IsAnon
AnnSimplifyAST _ = NoAnn
instance IsPass SimplifyAST
instance PassId SimplifyAST where
type Id SimplifyAST = C.PrelimDeclId
idNameKind _ = C.prelimDeclIdNameKind
idSourceName _ = C.prelimDeclIdSourceName
idLocationInfo _ = C.prelimDeclIdLocationInfo
instance PassScopedName SimplifyAST
instance PassTypes SimplifyAST
instance PassMacro SimplifyAST where
type MacroBody SimplifyAST = Macro.Unresolved
instance PassExtBinding SimplifyAST
instance PassCommentDecl SimplifyAST
instance PassAnn SimplifyAST where
type Ann ix SimplifyAST = AnnSimplifyAST ix
instance PassMsg SimplifyAST where
type Msg SimplifyAST = SimplifyASTMsg
{-------------------------------------------------------------------------------
CoercePass: Parse
-------------------------------------------------------------------------------}
instance CoercePassAnonRef Parse SimplifyAST
instance CoercePassId Parse SimplifyAST
instance CoercePassMacroBody Parse SimplifyAST
instance CoercePassMacroId Parse SimplifyAST
instance CoercePassMacroUnderlying Parse SimplifyAST
instance CoercePassTypes Parse SimplifyAST
instance CoercePassAnn "Global" Parse SimplifyAST
instance CoercePassAnn "IndirectField" Parse SimplifyAST
instance CoercePassAnn "TypeFunArg" Parse SimplifyAST
instance CoercePassCommentDecl Parse SimplifyAST
{-------------------------------------------------------------------------------
Trace messages
-------------------------------------------------------------------------------}
data SimplifyASTMsg =
SimplifyASTUntaggedEnum C.UnnamedId
deriving stock (Show, Generic)
instance PrettyForTrace SimplifyASTMsg where
prettyForTrace = \case
SimplifyASTUntaggedEnum unnamedId -> PP.hsep [
"Transformed untagged enum: "
, prettyForTrace unnamedId
, "into constant patterns."
]
instance IsTrace Level SimplifyASTMsg where
getDefaultLogLevel = \case
SimplifyASTUntaggedEnum{} -> Info
getSource = const HsBindgen
getTraceId = const "simplify-ast"