88 lines
3.1 KiB
Diff
88 lines
3.1 KiB
Diff
|
Description: Don't include BufPos in interface files
|
||
|
Author: Matthew Pickering
|
||
|
Origin: https://gitlab.haskell.org/ghc/ghc/-/merge_requests/8972
|
||
|
Bug: https://gitlab.haskell.org/ghc/ghc/-/issues/22162
|
||
|
Index: b/compiler/GHC/Iface/Ext/Types.hs
|
||
|
===================================================================
|
||
|
--- a/compiler/GHC/Iface/Ext/Types.hs
|
||
|
+++ b/compiler/GHC/Iface/Ext/Types.hs
|
||
|
@@ -746,5 +746,5 @@ toHieName name
|
||
|
| isKnownKeyName name = KnownKeyName (nameUnique name)
|
||
|
| isExternalName name = ExternalName (nameModule name)
|
||
|
(nameOccName name)
|
||
|
- (nameSrcSpan name)
|
||
|
- | otherwise = LocalName (nameOccName name) (nameSrcSpan name)
|
||
|
+ (removeBufSpan $ nameSrcSpan name)
|
||
|
+ | otherwise = LocalName (nameOccName name) (removeBufSpan $ nameSrcSpan name)
|
||
|
Index: b/compiler/GHC/Types/SrcLoc.hs
|
||
|
===================================================================
|
||
|
--- a/compiler/GHC/Types/SrcLoc.hs
|
||
|
+++ b/compiler/GHC/Types/SrcLoc.hs
|
||
|
@@ -72,6 +72,7 @@ module GHC.Types.SrcLoc (
|
||
|
getBufPos,
|
||
|
BufSpan(..),
|
||
|
getBufSpan,
|
||
|
+ removeBufSpan,
|
||
|
|
||
|
-- * Located
|
||
|
Located,
|
||
|
@@ -397,6 +398,10 @@ data UnhelpfulSpanReason
|
||
|
| UnhelpfulOther !FastString
|
||
|
deriving (Eq, Show)
|
||
|
|
||
|
+removeBufSpan :: SrcSpan -> SrcSpan
|
||
|
+removeBufSpan (RealSrcSpan s _) = RealSrcSpan s Nothing
|
||
|
+removeBufSpan s = s
|
||
|
+
|
||
|
{- Note [Why Maybe BufPos]
|
||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
In SrcLoc we store (Maybe BufPos); in SrcSpan we store (Maybe BufSpan).
|
||
|
Index: b/compiler/GHC/Utils/Binary.hs
|
||
|
===================================================================
|
||
|
--- a/compiler/GHC/Utils/Binary.hs
|
||
|
+++ b/compiler/GHC/Utils/Binary.hs
|
||
|
@@ -1444,19 +1444,6 @@ instance Binary RealSrcSpan where
|
||
|
return (mkRealSrcSpan (mkRealSrcLoc f sl sc)
|
||
|
(mkRealSrcLoc f el ec))
|
||
|
|
||
|
-instance Binary BufPos where
|
||
|
- put_ bh (BufPos i) = put_ bh i
|
||
|
- get bh = BufPos <$> get bh
|
||
|
-
|
||
|
-instance Binary BufSpan where
|
||
|
- put_ bh (BufSpan start end) = do
|
||
|
- put_ bh start
|
||
|
- put_ bh end
|
||
|
- get bh = do
|
||
|
- start <- get bh
|
||
|
- end <- get bh
|
||
|
- return (BufSpan start end)
|
||
|
-
|
||
|
instance Binary UnhelpfulSpanReason where
|
||
|
put_ bh r = case r of
|
||
|
UnhelpfulNoLocationInfo -> putByte bh 0
|
||
|
@@ -1475,10 +1462,11 @@ instance Binary UnhelpfulSpanReason wher
|
||
|
_ -> UnhelpfulOther <$> get bh
|
||
|
|
||
|
instance Binary SrcSpan where
|
||
|
- put_ bh (RealSrcSpan ss sb) = do
|
||
|
+ put_ bh (RealSrcSpan ss _sb) = do
|
||
|
putByte bh 0
|
||
|
+ -- BufSpan doesn't ever get serialised because the positions depend
|
||
|
+ -- on build location.
|
||
|
put_ bh ss
|
||
|
- put_ bh sb
|
||
|
|
||
|
put_ bh (UnhelpfulSpan s) = do
|
||
|
putByte bh 1
|
||
|
@@ -1488,8 +1476,7 @@ instance Binary SrcSpan where
|
||
|
h <- getByte bh
|
||
|
case h of
|
||
|
0 -> do ss <- get bh
|
||
|
- sb <- get bh
|
||
|
- return (RealSrcSpan ss sb)
|
||
|
+ return (RealSrcSpan ss Nothing)
|
||
|
_ -> do s <- get bh
|
||
|
return (UnhelpfulSpan s)
|
||
|
|