mirror of
https://github.com/Smaug123/WoofWare.PawPrint
synced 2025-10-05 14:18:40 +00:00
Add name to concrete type (#43)
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user