@@ -32,10 +32,14 @@ module Development.IDE.GHC.Compat(
3232 myCoreToStgExpr ,
3333#endif
3434
35+ FastStringCompat ,
3536 nodeInfo' ,
3637 getNodeIds ,
37- nodeInfoFromSource ,
38+ sourceNodeInfo ,
39+ generatedNodeInfo ,
40+ simpleNodeInfoCompat ,
3841 isAnnotationInNodeInfo ,
42+ nodeAnnotations ,
3943 mkAstNode ,
4044 combineRealSrcSpans ,
4145
@@ -94,7 +98,6 @@ module Development.IDE.GHC.Compat(
9498 module UniqSet ,
9599 module UniqDFM ,
96100 getDependentMods ,
97- diffBinds ,
98101 flattenBinds ,
99102 mkRnEnv2 ,
100103 emptyInScopeSet ,
@@ -113,6 +116,7 @@ module Development.IDE.GHC.Compat(
113116#endif
114117 ) where
115118
119+ import Data.Bifunctor
116120import Development.IDE.GHC.Compat.Core
117121import Development.IDE.GHC.Compat.Env
118122import Development.IDE.GHC.Compat.ExactPrint
@@ -125,58 +129,74 @@ import Development.IDE.GHC.Compat.Units
125129import Development.IDE.GHC.Compat.Util
126130import GHC hiding (HasSrcSpan ,
127131 ModLocation ,
128- RealSrcSpan , getLoc ,
129- lookupName , exprType )
132+ RealSrcSpan , exprType ,
133+ getLoc , lookupName )
134+
135+ import Data.Coerce (coerce )
136+ import Data.String (IsString (fromString ))
137+
138+
130139#if MIN_VERSION_ghc(9,0,0)
131- import GHC.Driver.Hooks (hscCompileCoreExprHook )
132- import GHC.Core (CoreExpr , CoreProgram , Unfolding (.. ), noUnfolding , flattenBinds )
133- import qualified GHC.Core.Opt.Pipeline as GHC
134- import GHC.Core.Tidy (tidyExpr )
135- import GHC.Types.Var.Env (emptyTidyEnv , mkRnEnv2 , emptyInScopeSet )
136- import qualified GHC.CoreToStg.Prep as GHC
137- import GHC.CoreToStg.Prep (corePrepPgm )
138- import GHC.Core.Lint (lintInteractiveExpr )
140+ import GHC.Core.Lint (lintInteractiveExpr )
141+ import qualified GHC.Core.Opt.Pipeline as GHC
142+ import GHC.Core.Tidy (tidyExpr )
143+ import GHC.CoreToStg.Prep (corePrepPgm )
144+ import qualified GHC.CoreToStg.Prep as GHC
145+ import GHC.Driver.Hooks (hscCompileCoreExprHook )
139146#if MIN_VERSION_ghc(9,2,0)
140- import GHC.Unit.Home.ModInfo (lookupHpt , HomePackageTable )
141- import GHC.Runtime.Context (icInteractiveModule )
142- import GHC.Unit.Module.Deps (Dependencies (dep_mods ))
143- import GHC.Linker.Types (isObjectLinkable )
144- import GHC.Linker.Loader (loadExpr )
147+ import GHC.Linker.Loader (loadExpr )
148+ import GHC.Linker.Types (isObjectLinkable )
149+ import GHC.Runtime.Context (icInteractiveModule )
150+ import GHC.Unit.Home.ModInfo (HomePackageTable ,
151+ lookupHpt )
152+ import GHC.Unit.Module.Deps (Dependencies (dep_mods ))
145153#else
146- import GHC.CoreToByteCode (coreExprToBCOs )
147- import GHC.Driver.Types (Dependencies (dep_mods ), icInteractiveModule , lookupHpt , HomePackageTable )
148- import GHC.Runtime.Linker (linkExpr )
149- #endif
150- import GHC.ByteCode.Asm (bcoFreeNames )
151- import GHC.Types.Annotations (Annotation (.. ), AnnTarget (ModuleTarget ), extendAnnEnvList )
152- import GHC.Types.Unique.DSet as UniqDSet
153- import GHC.Types.Unique.Set as UniqSet
154- import GHC.Types.Unique.DFM as UniqDFM
154+ import GHC.CoreToByteCode (coreExprToBCOs )
155+ import GHC.Driver.Types (Dependencies (dep_mods ),
156+ HomePackageTable ,
157+ icInteractiveModule ,
158+ lookupHpt )
159+ import GHC.Runtime.Linker (linkExpr )
160+ #endif
161+ import GHC.ByteCode.Asm (bcoFreeNames )
162+ import GHC.Types.Annotations (AnnTarget (ModuleTarget ),
163+ Annotation (.. ),
164+ extendAnnEnvList )
165+ import GHC.Types.Unique.DFM as UniqDFM
166+ import GHC.Types.Unique.DSet as UniqDSet
167+ import GHC.Types.Unique.Set as UniqSet
155168#else
156- import Hooks (hscCompileCoreExprHook )
157- import CoreSyn (CoreExpr , flattenBinds , Unfolding (.. ), noUnfolding )
158- import qualified SimplCore as GHC
159- import CoreTidy (tidyExpr )
160- import VarEnv (emptyTidyEnv , mkRnEnv2 , emptyInScopeSet )
161- import CorePrep (corePrepExpr , corePrepPgm )
162- import CoreLint (lintInteractiveExpr )
163- import ByteCodeGen (coreExprToBCOs )
164- import HscTypes (icInteractiveModule , HomePackageTable , lookupHpt , Dependencies (dep_mods ))
165- import Linker (linkExpr )
166- import ByteCodeAsm (bcoFreeNames )
167- import Annotations (Annotation (.. ), AnnTarget (ModuleTarget ), extendAnnEnvList )
168- import UniqDSet
169- import UniqSet
170- import UniqDFM
169+ import Annotations (AnnTarget (ModuleTarget ),
170+ Annotation (.. ),
171+ extendAnnEnvList )
172+ import ByteCodeAsm (bcoFreeNames )
173+ import ByteCodeGen (coreExprToBCOs )
174+ import CoreLint (lintInteractiveExpr )
175+ import CorePrep (corePrepExpr ,
176+ corePrepPgm )
177+ import CoreSyn (CoreExpr ,
178+ Unfolding (.. ),
179+ flattenBinds ,
180+ noUnfolding )
181+ import CoreTidy (tidyExpr )
182+ import Hooks (hscCompileCoreExprHook )
183+ import Linker (linkExpr )
184+ import qualified SimplCore as GHC
185+ import UniqDFM
186+ import UniqDSet
187+ import UniqSet
188+ import VarEnv (emptyInScopeSet ,
189+ emptyTidyEnv , mkRnEnv2 )
171190#endif
172191
173192#if MIN_VERSION_ghc(9,0,0)
193+ import GHC.Core
174194import GHC.Data.StringBuffer
175195import GHC.Driver.Session hiding (ExposePackage )
176196import qualified GHC.Types.SrcLoc as SrcLoc
197+ import GHC.Types.Var.Env
177198import GHC.Utils.Error
178199#if MIN_VERSION_ghc(9,2,0)
179- import Data.Bifunctor
180200import GHC.Driver.Env as Env
181201import GHC.Unit.Module.ModIface
182202import GHC.Unit.Module.ModSummary
@@ -209,41 +229,32 @@ import System.IO
209229
210230import Compat.HieAst (enrichHie )
211231import Compat.HieBin
212- import Compat.HieTypes
232+ import Compat.HieTypes hiding (nodeAnnotations )
233+ import qualified Compat.HieTypes as GHC (nodeAnnotations )
213234import Compat.HieUtils
214235import qualified Data.ByteString as BS
215236import Data.IORef
216237
217238import Data.List (foldl' )
218239import qualified Data.Map as Map
219- import qualified Data.Set as Set
220-
221- #if MIN_VERSION_ghc(9,0,0)
222240import qualified Data.Set as S
223- #endif
224241
225242#if !MIN_VERSION_ghc(8,10,0)
226243import Bag (unitBag )
227244#endif
228245
229246#if MIN_VERSION_ghc(9,2,0)
230- import GHC.Types.CostCentre
231- import GHC.Stg.Syntax
232- import GHC.Types.IPE
233- import GHC.Stg.Syntax
234- import GHC.Types.IPE
235- import GHC.Types.CostCentre
236- import GHC.Core
237- import GHC.Builtin.Uniques
238- import GHC.Runtime.Interpreter
239- import GHC.StgToByteCode
240- import GHC.Stg.Pipeline
241- import GHC.ByteCode.Types
242- import GHC.Linker.Loader (loadDecls )
243- import GHC.Data.Maybe
244- import GHC.CoreToStg
245- import GHC.Core.Utils
246- import GHC.Types.Var.Env
247+ import GHC.Builtin.Uniques
248+ import GHC.ByteCode.Types
249+ import GHC.CoreToStg
250+ import GHC.Data.Maybe
251+ import GHC.Linker.Loader (loadDecls )
252+ import GHC.Runtime.Interpreter
253+ import GHC.Stg.Pipeline
254+ import GHC.Stg.Syntax
255+ import GHC.StgToByteCode
256+ import GHC.Types.CostCentre
257+ import GHC.Types.IPE
247258#endif
248259
249260type ModIfaceAnnotation = Annotation
@@ -506,11 +517,18 @@ nodeInfo' = nodeInfo
506517-- unhelpfulSpanFS = id
507518#endif
508519
509- nodeInfoFromSource :: HieAST a -> Maybe (NodeInfo a )
520+ sourceNodeInfo :: HieAST a -> Maybe (NodeInfo a )
521+ #if MIN_VERSION_ghc(9,0,0)
522+ sourceNodeInfo = Map. lookup SourceInfo . getSourcedNodeInfo . sourcedNodeInfo
523+ #else
524+ sourceNodeInfo = Just . nodeInfo
525+ #endif
526+
527+ generatedNodeInfo :: HieAST a -> Maybe (NodeInfo a )
510528#if MIN_VERSION_ghc(9,0,0)
511- nodeInfoFromSource = Map. lookup SourceInfo . getSourcedNodeInfo . sourcedNodeInfo
529+ generatedNodeInfo = Map. lookup GeneratedInfo . getSourcedNodeInfo . sourcedNodeInfo
512530#else
513- nodeInfoFromSource = Just . nodeInfo
531+ generatedNodeInfo = sourceNodeInfo -- before ghc 9.0, we don't distinguish the source
514532#endif
515533
516534data GhcVersion
@@ -553,11 +571,31 @@ runPp =
553571 const SysTools. runPp
554572#endif
555573
556- isAnnotationInNodeInfo :: (FastString , FastString ) -> NodeInfo a -> Bool
574+ simpleNodeInfoCompat :: FastStringCompat -> FastStringCompat -> NodeInfo a
575+ simpleNodeInfoCompat ctor typ = simpleNodeInfo (coerce ctor) (coerce typ)
576+
577+ isAnnotationInNodeInfo :: (FastStringCompat , FastStringCompat ) -> NodeInfo a -> Bool
578+ isAnnotationInNodeInfo p = S. member p . nodeAnnotations
579+
580+ nodeAnnotations :: NodeInfo a -> S. Set (FastStringCompat , FastStringCompat )
581+ #if MIN_VERSION_ghc(9,2,0)
582+ nodeAnnotations = S. map (\ (NodeAnnotation ctor typ) -> (coerce ctor, coerce typ)) . GHC. nodeAnnotations
583+ #else
584+ nodeAnnotations = S. map (bimap coerce coerce) . GHC. nodeAnnotations
585+ #endif
586+
587+ #if MIN_VERSION_ghc(9,2,0)
588+ newtype FastStringCompat = FastStringCompat LexicalFastString
589+ #else
590+ newtype FastStringCompat = FastStringCompat FastString
591+ #endif
592+ deriving (Show , Eq , Ord )
593+
594+ instance IsString FastStringCompat where
557595#if MIN_VERSION_ghc(9,2,0)
558- isAnnotationInNodeInfo (ctor, typ) = Set. member ( NodeAnnotation ctor typ) . nodeAnnotations
596+ fromString = FastStringCompat . LexicalFastString . fromString
559597#else
560- isAnnotationInNodeInfo p = Set. member p . nodeAnnotations
598+ fromString = FastStringCompat . fromString
561599#endif
562600
563601mkAstNode :: NodeInfo a -> Span -> [HieAST a ] -> HieAST a
0 commit comments