@@ -32,10 +32,14 @@ module Development.IDE.GHC.Compat(
32
32
myCoreToStgExpr ,
33
33
#endif
34
34
35
+ FastStringCompat ,
35
36
nodeInfo' ,
36
37
getNodeIds ,
37
- nodeInfoFromSource ,
38
+ sourceNodeInfo ,
39
+ generatedNodeInfo ,
40
+ simpleNodeInfoCompat ,
38
41
isAnnotationInNodeInfo ,
42
+ nodeAnnotations ,
39
43
mkAstNode ,
40
44
combineRealSrcSpans ,
41
45
@@ -94,7 +98,6 @@ module Development.IDE.GHC.Compat(
94
98
module UniqSet ,
95
99
module UniqDFM ,
96
100
getDependentMods ,
97
- diffBinds ,
98
101
flattenBinds ,
99
102
mkRnEnv2 ,
100
103
emptyInScopeSet ,
@@ -113,6 +116,7 @@ module Development.IDE.GHC.Compat(
113
116
#endif
114
117
) where
115
118
119
+ import Data.Bifunctor
116
120
import Development.IDE.GHC.Compat.Core
117
121
import Development.IDE.GHC.Compat.Env
118
122
import Development.IDE.GHC.Compat.ExactPrint
@@ -125,58 +129,74 @@ import Development.IDE.GHC.Compat.Units
125
129
import Development.IDE.GHC.Compat.Util
126
130
import GHC hiding (HasSrcSpan ,
127
131
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
+
130
139
#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 )
139
146
#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 ))
145
153
#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
155
168
#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 )
171
190
#endif
172
191
173
192
#if MIN_VERSION_ghc(9,0,0)
193
+ import GHC.Core
174
194
import GHC.Data.StringBuffer
175
195
import GHC.Driver.Session hiding (ExposePackage )
176
196
import qualified GHC.Types.SrcLoc as SrcLoc
197
+ import GHC.Types.Var.Env
177
198
import GHC.Utils.Error
178
199
#if MIN_VERSION_ghc(9,2,0)
179
- import Data.Bifunctor
180
200
import GHC.Driver.Env as Env
181
201
import GHC.Unit.Module.ModIface
182
202
import GHC.Unit.Module.ModSummary
@@ -209,41 +229,32 @@ import System.IO
209
229
210
230
import Compat.HieAst (enrichHie )
211
231
import Compat.HieBin
212
- import Compat.HieTypes
232
+ import Compat.HieTypes hiding (nodeAnnotations )
233
+ import qualified Compat.HieTypes as GHC (nodeAnnotations )
213
234
import Compat.HieUtils
214
235
import qualified Data.ByteString as BS
215
236
import Data.IORef
216
237
217
238
import Data.List (foldl' )
218
239
import qualified Data.Map as Map
219
- import qualified Data.Set as Set
220
-
221
- #if MIN_VERSION_ghc(9,0,0)
222
240
import qualified Data.Set as S
223
- #endif
224
241
225
242
#if !MIN_VERSION_ghc(8,10,0)
226
243
import Bag (unitBag )
227
244
#endif
228
245
229
246
#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
247
258
#endif
248
259
249
260
type ModIfaceAnnotation = Annotation
@@ -506,11 +517,18 @@ nodeInfo' = nodeInfo
506
517
-- unhelpfulSpanFS = id
507
518
#endif
508
519
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 )
510
528
#if MIN_VERSION_ghc(9,0,0)
511
- nodeInfoFromSource = Map. lookup SourceInfo . getSourcedNodeInfo . sourcedNodeInfo
529
+ generatedNodeInfo = Map. lookup GeneratedInfo . getSourcedNodeInfo . sourcedNodeInfo
512
530
#else
513
- nodeInfoFromSource = Just . nodeInfo
531
+ generatedNodeInfo = sourceNodeInfo -- before ghc 9.0, we don't distinguish the source
514
532
#endif
515
533
516
534
data GhcVersion
@@ -553,11 +571,31 @@ runPp =
553
571
const SysTools. runPp
554
572
#endif
555
573
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
557
595
#if MIN_VERSION_ghc(9,2,0)
558
- isAnnotationInNodeInfo (ctor, typ) = Set. member ( NodeAnnotation ctor typ) . nodeAnnotations
596
+ fromString = FastStringCompat . LexicalFastString . fromString
559
597
#else
560
- isAnnotationInNodeInfo p = Set. member p . nodeAnnotations
598
+ fromString = FastStringCompat . fromString
561
599
#endif
562
600
563
601
mkAstNode :: NodeInfo a -> Span -> [HieAST a ] -> HieAST a
0 commit comments