packages feed

scrod-0.2026.2.21: source/library/Scrod/Ghc/DynFlags.hs

{-# LANGUAGE TemplateHaskellQuotes #-}

-- | A minimal 'DynFlags.DynFlags' stub sufficient for parsing.
--
-- GHC's parser requires a 'DynFlags' value, but most fields are irrelevant
-- for parsing alone. This module constructs one where only the fields
-- actually accessed during parsing (e.g., 'DynFlags.extensions',
-- 'DynFlags.language') have real values; everything else throws
-- 'Uninitialized.Uninitialized' if accessed, which makes it obvious when
-- a new GHC version starts touching an unexpected field.
module Scrod.Ghc.DynFlags where

import qualified Data.Set as Set
import qualified GHC.Core.Unfold as Unfold
import qualified GHC.Data.EnumSet as EnumSet
import qualified GHC.Driver.Backend as Backend
import qualified GHC.Driver.DynFlags as DynFlags
import qualified GHC.Stack as Stack
import qualified GHC.Types.SafeHaskell as SafeHaskell
import qualified Scrod.Ghc.FileSettings as FileSettings
import qualified Scrod.Ghc.GhcNameVersion as GhcNameVersion
import qualified Scrod.Ghc.Platform as Platform
import qualified Scrod.Ghc.PlatformMisc as PlatformMisc
import qualified Scrod.Ghc.ToolSettings as ToolSettings
import qualified Scrod.Ghc.Uninitialized as Uninitialized
import qualified Scrod.Ghc.UnitSettings as UnitSettings

empty :: (Stack.HasCallStack) => DynFlags.DynFlags
empty =
  DynFlags.DynFlags
    { DynFlags.avx = Uninitialized.throw 'DynFlags.avx,
      DynFlags.avx2 = Uninitialized.throw 'DynFlags.avx2,
      DynFlags.avx512cd = Uninitialized.throw 'DynFlags.avx512cd,
      DynFlags.avx512er = Uninitialized.throw 'DynFlags.avx512er,
      DynFlags.avx512f = Uninitialized.throw 'DynFlags.avx512f,
      DynFlags.avx512pf = Uninitialized.throw 'DynFlags.avx512pf,
      DynFlags.backend = Backend.noBackend,
      DynFlags.binBlobThreshold = Uninitialized.throw 'DynFlags.binBlobThreshold,
      DynFlags.bmiVersion = Uninitialized.throw 'DynFlags.bmiVersion,
      DynFlags.callerCcFilters = Uninitialized.throw 'DynFlags.callerCcFilters,
      DynFlags.canUseColor = Uninitialized.throw 'DynFlags.canUseColor,
      DynFlags.canUseErrorLinks = Uninitialized.throw 'DynFlags.canUseErrorLinks,
      DynFlags.cfgWeights = Uninitialized.throw 'DynFlags.cfgWeights,
      DynFlags.cmdlineFrameworks = Uninitialized.throw 'DynFlags.cmdlineFrameworks,
      DynFlags.cmmProcAlignment = Uninitialized.throw 'DynFlags.cmmProcAlignment,
      DynFlags.colScheme = Uninitialized.throw 'DynFlags.colScheme,
      DynFlags.customWarningCategories = Uninitialized.throw 'DynFlags.customWarningCategories,
      DynFlags.debugLevel = Uninitialized.throw 'DynFlags.debugLevel,
      DynFlags.depExcludeMods = Uninitialized.throw 'DynFlags.depExcludeMods,
      DynFlags.depIncludeCppDeps = Uninitialized.throw 'DynFlags.depIncludeCppDeps,
      DynFlags.depIncludePkgDeps = Uninitialized.throw 'DynFlags.depIncludePkgDeps,
      DynFlags.depMakefile = Uninitialized.throw 'DynFlags.depMakefile,
      DynFlags.depSuffixes = Uninitialized.throw 'DynFlags.depSuffixes,
      DynFlags.deriveViaOnLoc = Uninitialized.throw 'DynFlags.deriveViaOnLoc,
      DynFlags.dmdUnboxWidth = 0,
      DynFlags.dumpDir = Uninitialized.throw 'DynFlags.dumpDir,
      DynFlags.dumpFlags = Uninitialized.throw 'DynFlags.dumpFlags,
      DynFlags.dumpPrefix = Uninitialized.throw 'DynFlags.dumpPrefix,
      DynFlags.dumpPrefixForce = Uninitialized.throw 'DynFlags.dumpPrefixForce,
      DynFlags.dylibInstallName = Uninitialized.throw 'DynFlags.dylibInstallName,
      DynFlags.dynamicNow = False,
      DynFlags.dynHiSuf_ = Uninitialized.throw 'DynFlags.dynHiSuf_,
      DynFlags.dynLibLoader = Uninitialized.throw 'DynFlags.dynLibLoader,
      DynFlags.dynObjectSuf_ = Uninitialized.throw 'DynFlags.dynObjectSuf_,
      DynFlags.dynOutputFile_ = Uninitialized.throw 'DynFlags.dynOutputFile_,
      DynFlags.dynOutputHi = Uninitialized.throw 'DynFlags.dynOutputHi,
      DynFlags.enableTimeStats = False,
      DynFlags.extensionFlags = EnumSet.empty,
      DynFlags.extensions = [],
      DynFlags.externalPluginSpecs = Uninitialized.throw 'DynFlags.externalPluginSpecs,
      DynFlags.fatalCustomWarningCategories = Uninitialized.throw 'DynFlags.fatalCustomWarningCategories,
      DynFlags.fatalWarningFlags = Uninitialized.throw 'DynFlags.fatalWarningFlags,
      DynFlags.fileSettings = FileSettings.empty,
      DynFlags.floatLamArgs = Uninitialized.throw 'DynFlags.floatLamArgs,
      DynFlags.flushOut = Uninitialized.throw 'DynFlags.flushOut,
      DynFlags.fma = Uninitialized.throw 'DynFlags.fma,
      DynFlags.frameworkPaths = Uninitialized.throw 'DynFlags.frameworkPaths,
      DynFlags.frontendPluginOpts = Uninitialized.throw 'DynFlags.frontendPluginOpts,
      DynFlags.generalFlags = EnumSet.empty,
      DynFlags.ghcHeapSize = Nothing,
      DynFlags.ghciBrowserHost = "",
      DynFlags.ghciBrowserPlaywrightBrowserType = Nothing,
      DynFlags.ghciBrowserPlaywrightLaunchOpts = Nothing,
      DynFlags.ghciBrowserPort = 0,
      DynFlags.ghciBrowserPuppeteerLaunchOpts = Nothing,
      DynFlags.ghciHistSize = Uninitialized.throw 'DynFlags.ghciHistSize,
      DynFlags.ghciScripts = Uninitialized.throw 'DynFlags.ghciScripts,
      DynFlags.ghcLink = DynFlags.NoLink,
      DynFlags.ghcMode = Uninitialized.throw 'DynFlags.ghcMode,
      DynFlags.ghcNameVersion = GhcNameVersion.empty,
      DynFlags.ghcVersionFile = Uninitialized.throw 'DynFlags.ghcVersionFile,
      DynFlags.givensFuel = Uninitialized.throw 'DynFlags.givensFuel,
      DynFlags.haddockOptions = Uninitialized.throw 'DynFlags.haddockOptions,
      DynFlags.hcSuf = Uninitialized.throw 'DynFlags.hcSuf,
      DynFlags.hiddenModules = mempty,
      DynFlags.hiDir = Uninitialized.throw 'DynFlags.hiDir,
      DynFlags.hieDir = Uninitialized.throw 'DynFlags.hieDir,
      DynFlags.hieSuf = Uninitialized.throw 'DynFlags.hieSuf,
      DynFlags.historySize = Uninitialized.throw 'DynFlags.historySize,
      DynFlags.hiSuf_ = Uninitialized.throw 'DynFlags.hiSuf_,
      DynFlags.homeUnitId_ = Uninitialized.throw 'DynFlags.homeUnitId_,
      DynFlags.homeUnitInstanceOf_ = Uninitialized.throw 'DynFlags.homeUnitInstanceOf_,
      DynFlags.homeUnitInstantiations_ = Uninitialized.throw 'DynFlags.homeUnitInstantiations_,
      DynFlags.hpcDir = Uninitialized.throw 'DynFlags.hpcDir,
      DynFlags.ifCompression = Uninitialized.throw 'DynFlags.ifCompression,
      DynFlags.ignorePackageFlags = Uninitialized.throw 'DynFlags.ignorePackageFlags,
      DynFlags.importPaths = Uninitialized.throw 'DynFlags.importPaths,
      DynFlags.includePaths = Uninitialized.throw 'DynFlags.includePaths,
      DynFlags.incoherentOnLoc = Uninitialized.throw 'DynFlags.incoherentOnLoc,
      DynFlags.initialUnique = Uninitialized.throw 'DynFlags.initialUnique,
      DynFlags.interactivePrint = Uninitialized.throw 'DynFlags.interactivePrint,
      DynFlags.language = Nothing,
      DynFlags.ldInputs = Uninitialized.throw 'DynFlags.ldInputs,
      DynFlags.liberateCaseThreshold = Uninitialized.throw 'DynFlags.liberateCaseThreshold,
      DynFlags.libraryPaths = Uninitialized.throw 'DynFlags.libraryPaths,
      DynFlags.liftLamsKnown = Uninitialized.throw 'DynFlags.liftLamsKnown,
      DynFlags.liftLamsNonRecArgs = Uninitialized.throw 'DynFlags.liftLamsNonRecArgs,
      DynFlags.liftLamsRecArgs = Uninitialized.throw 'DynFlags.liftLamsRecArgs,
      DynFlags.llvmOptLevel = 0,
      DynFlags.mainFunIs = Uninitialized.throw 'DynFlags.mainFunIs,
      DynFlags.mainModuleNameIs = Uninitialized.throw 'DynFlags.mainModuleNameIs,
      DynFlags.maxErrors = Uninitialized.throw 'DynFlags.maxErrors,
      DynFlags.maxForcedSpecArgs = Uninitialized.throw 'DynFlags.maxForcedSpecArgs,
      DynFlags.maxInlineAllocSize = Uninitialized.throw 'DynFlags.maxInlineAllocSize,
      DynFlags.maxInlineMemcpyInsns = Uninitialized.throw 'DynFlags.maxInlineMemcpyInsns,
      DynFlags.maxInlineMemsetInsns = Uninitialized.throw 'DynFlags.maxInlineMemsetInsns,
      DynFlags.maxPmCheckModels = Uninitialized.throw 'DynFlags.maxPmCheckModels,
      DynFlags.maxRefHoleFits = Uninitialized.throw 'DynFlags.maxRefHoleFits,
      DynFlags.maxRelevantBinds = Uninitialized.throw 'DynFlags.maxRelevantBinds,
      DynFlags.maxSimplIterations = Uninitialized.throw 'DynFlags.maxSimplIterations,
      DynFlags.maxUncoveredPatterns = Uninitialized.throw 'DynFlags.maxUncoveredPatterns,
      DynFlags.maxValidHoleFits = Uninitialized.throw 'DynFlags.maxValidHoleFits,
      DynFlags.maxWorkerArgs = Uninitialized.throw 'DynFlags.maxWorkerArgs,
      DynFlags.newDerivOnLoc = Uninitialized.throw 'DynFlags.newDerivOnLoc,
      DynFlags.objectDir = Uninitialized.throw 'DynFlags.objectDir,
      DynFlags.objectSuf_ = Uninitialized.throw 'DynFlags.objectSuf_,
      DynFlags.outputFile_ = Uninitialized.throw 'DynFlags.outputFile_,
      DynFlags.outputHi = Uninitialized.throw 'DynFlags.outputHi,
      DynFlags.overlapInstLoc = Uninitialized.throw 'DynFlags.overlapInstLoc,
      DynFlags.packageDBFlags = Uninitialized.throw 'DynFlags.packageDBFlags,
      DynFlags.packageEnv = Uninitialized.throw 'DynFlags.packageEnv,
      DynFlags.packageFlags = Uninitialized.throw 'DynFlags.packageFlags,
      DynFlags.parMakeCount = Uninitialized.throw 'DynFlags.parMakeCount,
      DynFlags.pkgTrustOnLoc = Uninitialized.throw 'DynFlags.pkgTrustOnLoc,
      DynFlags.platformMisc = PlatformMisc.empty,
      DynFlags.pluginModNameOpts = Uninitialized.throw 'DynFlags.pluginModNameOpts,
      DynFlags.pluginModNames = Uninitialized.throw 'DynFlags.pluginModNames,
      DynFlags.pluginPackageFlags = Uninitialized.throw 'DynFlags.pluginPackageFlags,
      DynFlags.pprCols = Uninitialized.throw 'DynFlags.pprCols,
      DynFlags.pprUserLength = Uninitialized.throw 'DynFlags.pprUserLength,
      DynFlags.profAuto = Uninitialized.throw 'DynFlags.profAuto,
      DynFlags.qcsFuel = Uninitialized.throw 'DynFlags.qcsFuel,
      DynFlags.rawSettings = Uninitialized.throw 'DynFlags.rawSettings,
      DynFlags.reductionDepth = Uninitialized.throw 'DynFlags.reductionDepth,
      DynFlags.reexportedModules = [],
      DynFlags.refLevelHoleFits = Uninitialized.throw 'DynFlags.refLevelHoleFits,
      DynFlags.reverseErrors = Uninitialized.throw 'DynFlags.reverseErrors,
      DynFlags.rtsOpts = Uninitialized.throw 'DynFlags.rtsOpts,
      DynFlags.rtsOptsEnabled = Uninitialized.throw 'DynFlags.rtsOptsEnabled,
      DynFlags.rtsOptsSuggestions = Uninitialized.throw 'DynFlags.rtsOptsSuggestions,
      DynFlags.ruleCheck = Uninitialized.throw 'DynFlags.ruleCheck,
      DynFlags.safeHaskell = SafeHaskell.Sf_Ignore,
      DynFlags.safeInfer = False,
      DynFlags.safeInferred = Uninitialized.throw 'DynFlags.safeInferred,
      DynFlags.simplPhases = Uninitialized.throw 'DynFlags.simplPhases,
      DynFlags.simplTickFactor = Uninitialized.throw 'DynFlags.simplTickFactor,
      DynFlags.solverIterations = Uninitialized.throw 'DynFlags.solverIterations,
      DynFlags.specConstrCount = Uninitialized.throw 'DynFlags.specConstrCount,
      DynFlags.specConstrRecursive = Uninitialized.throw 'DynFlags.specConstrRecursive,
      DynFlags.specConstrThreshold = Uninitialized.throw 'DynFlags.specConstrThreshold,
      DynFlags.splitInfo = Uninitialized.throw 'DynFlags.splitInfo,
      DynFlags.sseVersion = Uninitialized.throw 'DynFlags.sseVersion,
      DynFlags.strictnessBefore = Uninitialized.throw 'DynFlags.strictnessBefore,
      DynFlags.stubDir = Uninitialized.throw 'DynFlags.stubDir,
      DynFlags.targetPlatform = Platform.empty,
      DynFlags.targetWays_ = Set.empty,
      DynFlags.thisPackageName = Uninitialized.throw 'DynFlags.thisPackageName,
      DynFlags.thOnLoc = Uninitialized.throw 'DynFlags.thOnLoc,
      DynFlags.tmpDir = Uninitialized.throw 'DynFlags.tmpDir,
      DynFlags.toolSettings = ToolSettings.empty,
      DynFlags.trustFlags = Uninitialized.throw 'DynFlags.trustFlags,
      DynFlags.trustworthyOnLoc = Uninitialized.throw 'DynFlags.trustworthyOnLoc,
      DynFlags.unfoldingOpts = Unfold.defaultUnfoldingOpts,
      DynFlags.uniqueIncrement = Uninitialized.throw 'DynFlags.uniqueIncrement,
      DynFlags.unitSettings = UnitSettings.empty,
      DynFlags.useColor = Uninitialized.throw 'DynFlags.useColor,
      DynFlags.useErrorLinks = Uninitialized.throw 'DynFlags.useErrorLinks,
      DynFlags.useUnicode = Uninitialized.throw 'DynFlags.useUnicode,
      DynFlags.verbosity = Uninitialized.throw 'DynFlags.verbosity,
      DynFlags.wantedsFuel = Uninitialized.throw 'DynFlags.wantedsFuel,
      DynFlags.warningFlags = Uninitialized.throw 'DynFlags.warningFlags,
      DynFlags.warnSafeOnLoc = Uninitialized.throw 'DynFlags.warnSafeOnLoc,
      DynFlags.warnUnsafeOnLoc = Uninitialized.throw 'DynFlags.warnUnsafeOnLoc,
      DynFlags.workingDirectory = Uninitialized.throw 'DynFlags.workingDirectory
    }