@@ -2133,26 +2133,33 @@ and [<Sealed>] ILTypeDefs(f : unit -> ILPreTypeDef[]) =
2133
2133
let ns , n = splitILTypeName nm
2134
2134
dict.Value.[( ns, n)]. GetTypeDef()
2135
2135
2136
+
2137
+ and [<NoEquality; NoComparison>] ILPreTypeDef =
2138
+ abstract Namespace: string list
2139
+ abstract Name: string
2140
+ abstract GetTypeDef: unit -> ILTypeDef
2141
+
2142
+
2136
2143
/// 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 ) =
2138
2145
let mutable store : ILTypeDef = Unchecked.defaultof<_>
2139
2146
2140
- member __.Namespace = nameSpace
2141
- member __.Name = name
2142
- member __.MetadataIndex = metadataIndex
2147
+ interface ILPreTypeDef with
2148
+ member __.Namespace = nameSpace
2149
+ member __.Name = name
2143
2150
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
2156
2163
2157
2164
and ILTypeDefStored =
2158
2165
| Given of ILTypeDef
@@ -2491,11 +2498,11 @@ let mkRefForNestedILTypeDef scope (enc: ILTypeDef list, td: ILTypeDef) =
2491
2498
2492
2499
let mkILPreTypeDef ( td : ILTypeDef ) =
2493
2500
let ns , n = splitILTypeName td.Name
2494
- ILPreTypeDef ( ns, n, NoMetadataIdx, ILTypeDefStored.Given td)
2501
+ ILPreTypeDefImpl ( ns, n, NoMetadataIdx, ILTypeDefStored.Given td) :> ILPreTypeDef
2495
2502
let mkILPreTypeDefComputed ( ns , n , f ) =
2496
- ILPreTypeDef ( ns, n, NoMetadataIdx, ILTypeDefStored.Computed f)
2503
+ ILPreTypeDefImpl ( ns, n, NoMetadataIdx, ILTypeDefStored.Computed f) :> ILPreTypeDef
2497
2504
let mkILPreTypeDefRead ( ns , n , idx , f ) =
2498
- ILPreTypeDef ( ns, n, idx, f)
2505
+ ILPreTypeDefImpl ( ns, n, idx, f) :> ILPreTypeDef
2499
2506
2500
2507
2501
2508
let addILTypeDef td ( tdefs : ILTypeDefs ) = ILTypeDefs ( fun () -> [| yield mkILPreTypeDef td; yield ! tdefs.AsArrayOfPreTypeDefs |])
0 commit comments