@@ -2133,26 +2133,33 @@ and [<Sealed>] ILTypeDefs(f : unit -> ILPreTypeDef[]) =
21332133 let ns , n = splitILTypeName nm
21342134 dict.Value.[( ns, n)]. GetTypeDef()
21352135
2136+
2137+ and [<NoEquality; NoComparison>] ILPreTypeDef =
2138+ abstract Namespace: string list
2139+ abstract Name: string
2140+ abstract GetTypeDef: unit -> ILTypeDef
2141+
2142+
21362143/// This is a memory-critical class. Very many of these objects get allocated and held to represent the contents of .NET assemblies.
2137- and [<Sealed>] ILPreTypeDef ( nameSpace : string list , name : string , metadataIndex : int32 , storage : ILTypeDefStored ) =
2144+ and [<Sealed>] ILPreTypeDefImpl ( nameSpace : string list , name : string , metadataIndex : int32 , storage : ILTypeDefStored ) =
21382145 let mutable store : ILTypeDef = Unchecked.defaultof<_>
21392146
2140- member __.Namespace = nameSpace
2141- member __.Name = name
2142- member __.MetadataIndex = metadataIndex
2147+ interface ILPreTypeDef with
2148+ member __.Namespace = nameSpace
2149+ member __.Name = name
21432150
2144- member x.GetTypeDef () =
2145- match box store with
2146- | null ->
2147- match storage with
2148- | ILTypeDefStored.Given td ->
2149- store <- td
2150- td
2151- | ILTypeDefStored.Computed f ->
2152- LazyInitializer.EnsureInitialized< ILTypeDef>(& store, Func<_>( fun () -> f()))
2153- | ILTypeDefStored.Reader f ->
2154- LazyInitializer.EnsureInitialized< ILTypeDef>(& store, Func<_>( fun () -> f x.MetadataIndex ))
2155- | _ -> store
2151+ member x.GetTypeDef () =
2152+ match box store with
2153+ | null ->
2154+ match storage with
2155+ | ILTypeDefStored.Given td ->
2156+ store <- td
2157+ td
2158+ | ILTypeDefStored.Computed f ->
2159+ LazyInitializer.EnsureInitialized< ILTypeDef>(& store, Func<_>( fun () -> f()))
2160+ | ILTypeDefStored.Reader f ->
2161+ LazyInitializer.EnsureInitialized< ILTypeDef>(& store, Func<_>( fun () -> f metadataIndex ))
2162+ | _ -> store
21562163
21572164and ILTypeDefStored =
21582165 | Given of ILTypeDef
@@ -2491,11 +2498,11 @@ let mkRefForNestedILTypeDef scope (enc: ILTypeDef list, td: ILTypeDef) =
24912498
24922499let mkILPreTypeDef ( td : ILTypeDef ) =
24932500 let ns , n = splitILTypeName td.Name
2494- ILPreTypeDef ( ns, n, NoMetadataIdx, ILTypeDefStored.Given td)
2501+ ILPreTypeDefImpl ( ns, n, NoMetadataIdx, ILTypeDefStored.Given td) :> ILPreTypeDef
24952502let mkILPreTypeDefComputed ( ns , n , f ) =
2496- ILPreTypeDef ( ns, n, NoMetadataIdx, ILTypeDefStored.Computed f)
2503+ ILPreTypeDefImpl ( ns, n, NoMetadataIdx, ILTypeDefStored.Computed f) :> ILPreTypeDef
24972504let mkILPreTypeDefRead ( ns , n , idx , f ) =
2498- ILPreTypeDef ( ns, n, idx, f)
2505+ ILPreTypeDefImpl ( ns, n, idx, f) :> ILPreTypeDef
24992506
25002507
25012508let addILTypeDef td ( tdefs : ILTypeDefs ) = ILTypeDefs ( fun () -> [| yield mkILPreTypeDef td; yield ! tdefs.AsArrayOfPreTypeDefs |])
0 commit comments