Add name to concrete type (#43)

This commit is contained in:
Patrick Stevens
2025-06-15 13:34:18 +01:00
committed by GitHub
parent cd293bfa22
commit 89e6e1b4e8
4 changed files with 23 additions and 4 deletions

View File

@@ -22,12 +22,14 @@ type ConcreteType<'typeGeneric when 'typeGeneric : comparison and 'typeGeneric :
{
_AssemblyName : AssemblyName
_Definition : ComparableTypeDefinitionHandle
_Name : string
_Generics : 'typeGeneric list
}
member this.Assembly : AssemblyName = this._AssemblyName
member this.Definition : ComparableTypeDefinitionHandle = this._Definition
member this.Generics : 'typeGeneric list = this._Generics
member this.Name = this._Name
override this.Equals (other : obj) : bool =
match other with
@@ -69,6 +71,7 @@ type RuntimeConcreteType = ConcreteType<TypeDefn>
module ConcreteType =
let make
(assemblyName : AssemblyName)
(name : string)
(defn : TypeDefinitionHandle)
(generics : TypeDefn list)
: RuntimeConcreteType
@@ -76,18 +79,21 @@ module ConcreteType =
{
_AssemblyName = assemblyName
_Definition = ComparableTypeDefinitionHandle.Make defn
_Name = name
_Generics = generics
}
let make'
(assemblyName : AssemblyName)
(defn : TypeDefinitionHandle)
(name : string)
(genericParamCount : int)
: ConcreteType<FakeUnit>
=
{
_AssemblyName = assemblyName
_Definition = ComparableTypeDefinitionHandle.Make defn
_Name = name
_Generics = List.replicate genericParamCount FakeUnit.FakeUnit
}
@@ -103,4 +109,5 @@ module ConcreteType =
_AssemblyName = x._AssemblyName
_Definition = x._Definition
_Generics = generics
_Name = x._Name
}

View File

@@ -48,7 +48,10 @@ module FieldInfo =
let fieldSig = def.DecodeSignature (TypeDefn.typeProvider assembly, ())
let declaringType = def.GetDeclaringType ()
let typeGenerics = mr.GetTypeDefinition(declaringType).GetGenericParameters().Count
let declaringType = ConcreteType.make' assembly declaringType typeGenerics
let declaringTypeName = mr.GetString (mr.GetTypeDefinition(declaringType).Name)
let declaringType =
ConcreteType.make' assembly declaringType declaringTypeName typeGenerics
{
Name = name

View File

@@ -197,6 +197,9 @@ type MethodInfo<'typeGenerics when 'typeGenerics :> IComparable<'typeGenerics> a
IsStatic : bool
}
override this.ToString () =
$"{this.DeclaringType.Assembly.Name}.{this.DeclaringType.Name}.{this.Name}"
/// <summary>
/// Whether this method's implementation is directly supplied by the CLI, rather than being loaded
/// from an assembly as IL.
@@ -613,6 +616,9 @@ module MethodInfo =
let declaringType = methodDef.GetDeclaringType ()
let declaringTypeName =
metadataReader.GetString (metadataReader.GetTypeDefinition(declaringType).Name)
let declaringTypeGenericParams =
metadataReader.GetTypeDefinition(declaringType).GetGenericParameters().Count
@@ -634,8 +640,11 @@ module MethodInfo =
let methodGenericParams =
GenericParameter.readAll metadataReader (methodDef.GetGenericParameters ())
let declaringType =
ConcreteType.make' assemblyName declaringType declaringTypeName declaringTypeGenericParams
{
DeclaringType = ConcreteType.make' assemblyName declaringType declaringTypeGenericParams
DeclaringType = declaringType
Handle = methodHandle
Name = methodName
Instructions = methodBody

View File

@@ -620,7 +620,7 @@ module IlMachineState =
)
// TypeDef won't have any generics; it would be a TypeSpec if it did
let ty = ConcreteType.make ty.Assembly typeDefinitionHandle []
let ty = ConcreteType.make ty.Assembly ty.Name typeDefinitionHandle []
match loadClass loggerFactory corelib ty currentThread state with
| FirstLoadThis state -> Error state
@@ -644,7 +644,7 @@ module IlMachineState =
targetType.Name
)
let ty = ConcreteType.make assy.Name targetType.TypeDefHandle []
let ty = ConcreteType.make assy.Name targetType.Name targetType.TypeDefHandle []
match loadClass loggerFactory corelib ty currentThread state with
| FirstLoadThis state -> Error state