summaryrefslogtreecommitdiff
path: root/compiler/GHC/Iface/Ext
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/GHC/Iface/Ext')
-rw-r--r--compiler/GHC/Iface/Ext/Ast.hs2
-rw-r--r--compiler/GHC/Iface/Ext/Binary.hs5
-rw-r--r--compiler/GHC/Iface/Ext/Fields.hs24
-rw-r--r--compiler/GHC/Iface/Ext/Types.hs2
4 files changed, 18 insertions, 15 deletions
diff --git a/compiler/GHC/Iface/Ext/Ast.hs b/compiler/GHC/Iface/Ext/Ast.hs
index 24a68e63c4..5af938cbe7 100644
--- a/compiler/GHC/Iface/Ext/Ast.hs
+++ b/compiler/GHC/Iface/Ext/Ast.hs
@@ -303,7 +303,7 @@ mkHieFileWithSource src_file src ms ts rs =
tcs = tcg_tcs ts
(asts',arr) = getCompressedAsts tc_binds rs top_ev_binds insts tcs in
HieFile
- { hie_hs_file = src_file
+ { hie_hs_file = mkFastString src_file
, hie_module = ms_mod ms
, hie_types = arr
, hie_asts = asts'
diff --git a/compiler/GHC/Iface/Ext/Binary.hs b/compiler/GHC/Iface/Ext/Binary.hs
index 6474fbeb8e..e537d2ecd8 100644
--- a/compiler/GHC/Iface/Ext/Binary.hs
+++ b/compiler/GHC/Iface/Ext/Binary.hs
@@ -32,6 +32,7 @@ import GHC.Types.SrcLoc as SrcLoc
import GHC.Types.Unique
import GHC.Types.Unique.FM
+import Data.Bifunctor (first)
import qualified Data.Array as A
import qualified Data.Array.IO as A
import qualified Data.Array.Unsafe as A
@@ -344,7 +345,7 @@ putHieName bh (LocalName occName span) = do
put_ bh (occName, BinSrcSpan span)
putHieName bh (KnownKeyName uniq) = do
putByte bh 2
- put_ bh $ unpkUnique uniq
+ put_ bh $ (first SerialisableChar $ unpkUnique uniq)
getHieName :: BinHandle -> IO HieName
getHieName bh = do
@@ -358,5 +359,5 @@ getHieName bh = do
return $ LocalName occ $ unBinSrcSpan span
2 -> do
(c,i) <- get bh
- return $ KnownKeyName $ mkUnique c i
+ return $ KnownKeyName $ mkUnique (getSerialisedChar c) i
_ -> panic "GHC.Iface.Ext.Binary.getHieName: invalid tag"
diff --git a/compiler/GHC/Iface/Ext/Fields.hs b/compiler/GHC/Iface/Ext/Fields.hs
index 37322303d8..76cd936bdc 100644
--- a/compiler/GHC/Iface/Ext/Fields.hs
+++ b/compiler/GHC/Iface/Ext/Fields.hs
@@ -15,23 +15,25 @@ where
import GHC.Prelude
import GHC.Utils.Binary
+import GHC.Data.FastString
+import GHC.Types.Unique.Map
+import Data.Function (on)
+import Data.List (sortBy)
import Control.Monad
-import Data.Map ( Map )
-import qualified Data.Map as Map
import Control.DeepSeq
-type FieldName = String
+type FieldName = FastString
-newtype ExtensibleFields = ExtensibleFields { getExtensibleFields :: (Map FieldName BinData) }
+newtype ExtensibleFields = ExtensibleFields { getExtensibleFields :: (UniqMap FastString BinData) }
instance Binary ExtensibleFields where
put_ bh (ExtensibleFields fs) = do
- put_ bh (Map.size fs :: Int)
+ put_ bh (sizeUniqMap fs :: Int)
-- Put the names of each field, and reserve a space
-- for a payload pointer after each name:
- header_entries <- forM (Map.toList fs) $ \(name, dat) -> do
+ header_entries <- forM (sortBy (lexicalCompareFS `on` fst) $ nonDetUniqMapToList fs) $ \(name, dat) -> do
put_ bh name
field_p_p <- tellBin bh
put_ bh field_p_p
@@ -58,13 +60,13 @@ instance Binary ExtensibleFields where
dat <- get bh
return (name, dat)
- return . ExtensibleFields . Map.fromList $ fields
+ return . ExtensibleFields . listToUniqMap $ fields
instance NFData ExtensibleFields where
rnf (ExtensibleFields fs) = rnf fs
emptyExtensibleFields :: ExtensibleFields
-emptyExtensibleFields = ExtensibleFields Map.empty
+emptyExtensibleFields = ExtensibleFields emptyUniqMap
--------------------------------------------------------------------------------
-- | Reading
@@ -74,7 +76,7 @@ readField name = readFieldWith name get
readFieldWith :: FieldName -> (BinHandle -> IO a) -> ExtensibleFields -> IO (Maybe a)
readFieldWith name read fields = sequence $ ((read =<<) . dataHandle) <$>
- Map.lookup name (getExtensibleFields fields)
+ lookupUniqMap (getExtensibleFields fields) name
--------------------------------------------------------------------------------
-- | Writing
@@ -88,7 +90,7 @@ writeFieldWith name write fields = do
write bh
--
bd <- handleData bh
- return $ ExtensibleFields (Map.insert name bd $ getExtensibleFields fields)
+ return $ ExtensibleFields (addToUniqMap (getExtensibleFields fields) name bd)
deleteField :: FieldName -> ExtensibleFields -> ExtensibleFields
-deleteField name (ExtensibleFields fs) = ExtensibleFields $ Map.delete name fs
+deleteField name (ExtensibleFields fs) = ExtensibleFields $ delFromUniqMap fs name
diff --git a/compiler/GHC/Iface/Ext/Types.hs b/compiler/GHC/Iface/Ext/Types.hs
index b8a398465c..6fe5a9f7af 100644
--- a/compiler/GHC/Iface/Ext/Types.hs
+++ b/compiler/GHC/Iface/Ext/Types.hs
@@ -65,7 +65,7 @@ Besides saving compilation cycles, @.hie@ files also offer a more stable
interface than the GHC API.
-}
data HieFile = HieFile
- { hie_hs_file :: FilePath
+ { hie_hs_file :: FastString
-- ^ Initial Haskell source file path
, hie_module :: Module