From 88721e0ed06b9bd9ae4cafe6d26a530b668553cb Mon Sep 17 00:00:00 2001 From: "Alexey.Berezhnykh" Date: Thu, 4 Jul 2024 03:04:02 +0300 Subject: [PATCH] wip --- src/Compiler/AbstractIL/ilread.fs | 37 ++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/src/Compiler/AbstractIL/ilread.fs b/src/Compiler/AbstractIL/ilread.fs index 1535078bfe03..909392bda600 100644 --- a/src/Compiler/AbstractIL/ilread.fs +++ b/src/Compiler/AbstractIL/ilread.fs @@ -878,10 +878,10 @@ let hfmCompare (TaggedIndex(t1: HasFieldMarshalTag, idx1)) (TaggedIndex(t2: HasF elif idx1 > idx2 then 1 else compare t1.Tag t2.Tag -let tomdCompare (TaggedIndex(t1: TypeOrMethodDefTag, idx1)) (TaggedIndex(t2: TypeOrMethodDefTag, idx2)) = - if idx1 < idx2 then -1 - elif idx1 > idx2 then 1 - else compare t1.Tag t2.Tag +let inline tomdCompare (t1: TaggedIndex) (t2: TaggedIndex) = + if t1.index < t2.index then -1 + elif t1.index > t2.index then 1 + else compare t1.tag t2.tag let simpleIndexCompare (idx1: int) (idx2: int) = compare idx1 idx2 @@ -2239,11 +2239,16 @@ and seekReadNestedTypeDefs (ctxt: ILMetadataReader) tidx = and seekReadInterfaceImpls (ctxt: ILMetadataReader) mdv numTypars tidx = seekReadIndexedRows ( ctxt.getNumRows TableNames.InterfaceImpl, - seekReadInterfaceImplRow ctxt mdv, - fst, - simpleIndexCompare tidx, + id, + id, + (fun i -> + let mutable addr = ctxt.rowAddr TableNames.InterfaceImpl i + let _tidx = seekReadUntaggedIdx TableNames.TypeDef ctxt mdv &addr + simpleIndexCompare tidx _tidx), isSorted ctxt TableNames.InterfaceImpl, - (snd >> seekReadTypeDefOrRef ctxt numTypars AsObject []) + (fun i -> + let _, intfIdx = seekReadInterfaceImplRow ctxt mdv i + seekReadTypeDefOrRef ctxt numTypars AsObject [] intfIdx) ) and seekReadGenericParams ctxt numTypars (a, b) : ILGenericParameterDefs = @@ -2253,12 +2258,13 @@ and seekReadGenericParamsUncached ctxtH (GenericParamsIdx(numTypars, a, b)) = let (ctxt: ILMetadataReader) = getHole ctxtH let mdv = ctxt.mdfile.GetView() + let key = TaggedIndex(a, b) let pars = seekReadIndexedRows ( ctxt.getNumRows TableNames.GenericParam, seekReadGenericParamRow ctxt mdv, (fun (_, _, _, tomd, _) -> tomd), - tomdCompare (TaggedIndex(a, b)), + tomdCompare key, isSorted ctxt TableNames.GenericParam, (fun (gpidx, seq, flags, _, nameIdx) -> let flags = int32 flags @@ -2290,11 +2296,16 @@ and seekReadGenericParamsUncached ctxtH (GenericParamsIdx(numTypars, a, b)) = and seekReadGenericParamConstraints (ctxt: ILMetadataReader) mdv numTypars gpidx = seekReadIndexedRows ( ctxt.getNumRows TableNames.GenericParamConstraint, - seekReadGenericParamConstraintRow ctxt mdv, - fst, - simpleIndexCompare gpidx, + id, + id, + (fun i -> + let mutable addr = ctxt.rowAddr TableNames.GenericParamConstraint i + let pidx = seekReadUntaggedIdx TableNames.GenericParam ctxt mdv &addr + simpleIndexCompare gpidx pidx), isSorted ctxt TableNames.GenericParamConstraint, - (snd >> seekReadTypeDefOrRef ctxt numTypars AsObject []) + (fun i -> + let _, constraintIdx = seekReadGenericParamConstraintRow ctxt mdv i + seekReadTypeDefOrRef ctxt numTypars AsObject [] constraintIdx) ) and seekReadTypeDefAsType (ctxt: ILMetadataReader) boxity (ginst: ILTypes) idx =