module UHC.Light.Compiler.EHC.InitialSetup
( initialHSSem
, initialEHSem
, initialCore2GrSem
, initialHSSemMod )
where
import qualified Data.Map as Map
import UHC.Light.Compiler.EHC.Common
import qualified UHC.Light.Compiler.HS.MainAG as HSSem
import qualified UHC.Light.Compiler.EH.MainAG as EHSem
import qualified UHC.Light.Compiler.Core.ToGrin as Core2GrSem
import UHC.Light.Compiler.LamInfo
import qualified UHC.Light.Compiler.Gam.ClGam as Pr (initClGam)
import qualified UHC.Light.Compiler.HS.ModImpExp as HSSemMod
import UHC.Light.Compiler.CodeGen.ImportUsedModules
import UHC.Light.Compiler.CodeGen.ModuleImportExportImpl
import UHC.Light.Compiler.Pred.ToCHR (initScopedPredStore)








{-# LINE 51 "src/ehc/EHC/InitialSetup.chs" #-}
initialHSSem :: EHCOpts -> HSSem.Inh_AGItf
initialHSSem opts
  = HSSem.Inh_AGItf
      { HSSem.opts_Inh_AGItf            = opts
      , HSSem.idGam_Inh_AGItf           = HSSem.tyGam2IdDefOccGam initTyGam
                                            `gamUnion` HSSem.kiGam2IdDefOccGam initKiGam
                                            `gamUnion` HSSem.clGam2IdDefOccGam Pr.initClGam
      , HSSem.gUniq_Inh_AGItf           = uidStart
      , HSSem.isTopMod_Inh_AGItf        = False
      , HSSem.moduleNm_Inh_AGItf        = hsnUnknown
      , HSSem.modInScope_Inh_AGItf      = Map.empty
      , HSSem.modEntToOrig_Inh_AGItf    = Map.empty
      , HSSem.fixityGam_Inh_AGItf       = initFixityGam
      , HSSem.topInstanceNmL_Inh_AGItf  = []
      }

{-# LINE 73 "src/ehc/EHC/InitialSetup.chs" #-}
initialEHSem :: EHCOpts -> FPath -> EHSem.Inh_AGItf
initialEHSem opts fp
  = EHSem.Inh_AGItf
      { EHSem.moduleNm_Inh_AGItf        		= mkHNm (fpathBase fp)
      , EHSem.gUniq_Inh_AGItf           		= uidStart
      , EHSem.opts_Inh_AGItf            		= opts
      , EHSem.isMainMod_Inh_AGItf       		= False
      , EHSem.idQualGam_Inh_AGItf       		= emptyGam
      , EHSem.valGam_Inh_AGItf          		= emptyGam
      , EHSem.dataGam_Inh_AGItf         		= emptyGam
      , EHSem.tyGam_Inh_AGItf           		= initTyGam
      , EHSem.tyKiGam_Inh_AGItf         		= initTyKiGam
      , EHSem.polGam_Inh_AGItf          		= initPolGam
      , EHSem.kiGam_Inh_AGItf           		= initKiGam
      , EHSem.clGam_Inh_AGItf           		= Pr.initClGam
      , EHSem.clDfGam_Inh_AGItf         		= emptyGam
      , EHSem.chrStore_Inh_AGItf        		= initScopedPredStore
      , EHSem.importUsedModules_Inh_AGItf		= emptyImportUsedModules
      , EHSem.moduleImportExportImpl_Inh_AGItf	= emptyModuleImportExportImpl
      }

{-# LINE 102 "src/ehc/EHC/InitialSetup.chs" #-}
initialCore2GrSem :: EHCOpts -> Core2GrSem.Inh_CodeAGItf
initialCore2GrSem opts
  = Core2GrSem.Inh_CodeAGItf
      { Core2GrSem.gUniq_Inh_CodeAGItf           	= uidStart
      , Core2GrSem.dataGam_Inh_CodeAGItf         	= emptyGam
      , Core2GrSem.opts_Inh_CodeAGItf            	= opts
      , Core2GrSem.lamMp_Inh_CodeAGItf           	= initLamMp
      , Core2GrSem.importUsedModules_Inh_CodeAGItf	= emptyImportUsedModules
      }

{-# LINE 116 "src/ehc/EHC/InitialSetup.chs" #-}
initialHSSemMod :: EHCOpts -> HSSemMod.Inh_AGItf
initialHSSemMod opts
  = HSSemMod.Inh_AGItf
      { HSSemMod.gUniq_Inh_AGItf       = uidStart
      , HSSemMod.moduleNm_Inh_AGItf    = hsnUnknown
      , HSSemMod.opts_Inh_AGItf        = opts
      }