packages feed

hs-bindgen-1.0.0.0: src/HsBindgen/Internal/Macro/CExpr.hs

{-# OPTIONS_HADDOCK hide #-}

-- | The macro instance of @hs-bindgen@ is based on @c-expr-dsl@.
--
-- Intended for unqualified import.
module HsBindgen.Internal.Macro.CExpr (
    -- * Type
    CExpr -- opaque
    -- * Macro language
  , cExpr -- opaque
  ) where

import Clang.CStandard

import HsBindgen.Internal.Macro.CExpr.Parse
import HsBindgen.Internal.Macro.CExpr.Resolution
import HsBindgen.Internal.Macro.CExpr.Translation.Type
import HsBindgen.Internal.Macro.CExpr.Translation.Value
import HsBindgen.Internal.Macro.CExpr.Type
import HsBindgen.Internal.Macro.CExpr.Typecheck
import HsBindgen.Macro.Interface qualified as Macro

-- | Default macro language implementation backed by @c-expr-dsl@.
--
-- The C standard is fixed at construction time; the resulting macro
-- 'Macro.Lang' is configuration-free.
cExpr :: ClangCStandard -> Macro.Lang CExpr
cExpr cStd = Macro.Lang
  { parse               = parseMacro cStd
  , resolve             = resolveMacro
  , typecheck           = typecheckMacros
  , translateType       = translateMacroType
  , translateValue      = translateMacroValue
  }