Skip to content

Commit 9d0affb

Browse files
committed
Support 9.12 interface files
1 parent 6e5c603 commit 9d0affb

File tree

4 files changed

+17
-1
lines changed

4 files changed

+17
-1
lines changed

src/HiFileParser.hs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ data IfaceVersion
6767
| V9041
6868
| V9045
6969
| V9081
70+
| V9120
7071
deriving (Show,Eq,Ord,Enum)
7172
-- careful, the Ord matters!
7273

@@ -645,6 +646,12 @@ getInterfaceRecent version d = do
645646
getInterface :: Get Interface
646647
getInterface = do
647648
let enableLEB128 = modify (\c -> c { useLEB128 = True})
649+
-- read a relative bin pointer
650+
let getRelPtr = do
651+
c <- bytesRead
652+
p <- getPtr
653+
pure (fromIntegral c + p)
654+
648655

649656
magic <- lookAhead getWord32be >>= \case
650657
-- normal magic
@@ -679,6 +686,7 @@ getInterface = do
679686
traceGet ("Version: " ++ version)
680687

681688
let !ifaceVersion
689+
| version >= "9120" = V9120
682690
| version >= "9081" = V9081
683691
| version >= "9045" = V9045
684692
| version >= "9041" = V9041
@@ -705,7 +713,9 @@ getInterface = do
705713
when (ifaceVersion >= V9001) $ void getPtr
706714

707715
-- dict_ptr
708-
dictPtr <- getPtr
716+
dictPtr <- if ifaceVersion >= V9120 -- 9.12 uses relative pointers
717+
then getRelPtr
718+
else getPtr
709719
traceGet ("Dict ptr: " ++ show dictPtr)
710720

711721
-- dict
@@ -714,7 +724,12 @@ getInterface = do
714724
-- symtable_ptr
715725
void getPtr
716726

727+
-- IfaceType table
728+
when (ifaceVersion >= V9120) $
729+
void getPtr
730+
717731
case ifaceVersion of
732+
V9120 -> getInterfaceRecent ifaceVersion dict
718733
V9081 -> getInterfaceRecent ifaceVersion dict
719734
V9045 -> getInterfaceRecent ifaceVersion dict
720735
V9041 -> getInterfaceRecent ifaceVersion dict

test-files/iface/x64/ghc9120/Main.hi

2.08 KB
Binary file not shown.

test-files/iface/x64/ghc9120/X.hi

736 Bytes
Binary file not shown.

test/HiFileParserSpec.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ versions64 =
3535
, "ghc9047" -- Last in GHC 9.4 series, using GHC 9.4.5 format
3636
, "ghc9063" -- Last in GHC 9.6 series, using GHC 9.4.5 format
3737
, "ghc9081" -- First in GHC 9.8 series, using GHC 9.8.1 format
38+
, "ghc9120" -- First in GHC 9.12 series, using GHC 9.12 format
3839
]
3940

4041
spec :: Spec

0 commit comments

Comments
 (0)