module DDC.Driver.Config
( Config (..)
, ConfigPretty (..)
, defaultConfigPretty
, prettyModeOfConfig
, ViaBackend (..))
where
import DDC.Build.Builder
import DDC.Core.Simplifier (Simplifier)
import DDC.Core.Pretty
import DDC.Core.Module
import qualified DDC.Core.Salt.Runtime as Salt
import qualified DDC.Core.Salt as Salt
import qualified DDC.Core.Lite as Lite
data Config
= Config
{
configDump :: Bool
, configInferTypes :: Bool
, configSimplLite :: Simplifier Int () Lite.Name
, configSimplSalt :: Simplifier Int () Salt.Name
, configViaBackend :: ViaBackend
, configRuntime :: Salt.Config
, configBuilder :: Builder
, configPretty :: ConfigPretty
, configSuppressHashImports :: Bool
, configOutputFile :: Maybe FilePath
, configOutputDir :: Maybe FilePath
, configKeepLlvmFiles :: Bool
, configKeepSeaFiles :: Bool
, configKeepAsmFiles :: Bool
, configTaintAvoidTypeChecks :: Bool
}
data ConfigPretty
= ConfigPretty
{ configPrettyUseLetCase :: Bool
, configPrettyVarTypes :: Bool
, configPrettyConTypes :: Bool
, configPrettySuppressImports :: Bool
, configPrettySuppressExports :: Bool
, configPrettySuppressLetTypes :: Bool }
defaultConfigPretty :: ConfigPretty
defaultConfigPretty
= ConfigPretty
{ configPrettyUseLetCase = False
, configPrettyVarTypes = False
, configPrettyConTypes = False
, configPrettySuppressImports = False
, configPrettySuppressExports = False
, configPrettySuppressLetTypes = False }
prettyModeOfConfig
:: (Eq n, Pretty n)
=> ConfigPretty -> PrettyMode (Module a n)
prettyModeOfConfig config
= modeModule
where
modeModule
= PrettyModeModule
{ modeModuleLets = modeLets
, modeModuleSuppressImports = configPrettySuppressImports config
, modeModuleSuppressExports = configPrettySuppressExports config }
modeExp
= PrettyModeExp
{ modeExpLets = modeLets
, modeExpAlt = modeAlt
, modeExpConTypes = configPrettyConTypes config
, modeExpVarTypes = configPrettyVarTypes config
, modeExpUseLetCase = configPrettyUseLetCase config }
modeLets
= PrettyModeLets
{ modeLetsExp = modeExp
, modeLetsSuppressTypes = configPrettySuppressLetTypes config }
modeAlt
= PrettyModeAlt
{ modeAltExp = modeExp }
data ViaBackend
= ViaC
| ViaLLVM
deriving Show