diff --git a/WoofWare.PawPrint.Domain/ConcreteType.fs b/WoofWare.PawPrint.Domain/ConcreteType.fs index a1b2651..0b66da3 100644 --- a/WoofWare.PawPrint.Domain/ConcreteType.fs +++ b/WoofWare.PawPrint.Domain/ConcreteType.fs @@ -23,6 +23,7 @@ type ConcreteType<'typeGeneric when 'typeGeneric : comparison and 'typeGeneric : _AssemblyName : AssemblyName _Definition : ComparableTypeDefinitionHandle _Name : string + _Namespace : string _Generics : 'typeGeneric list } @@ -30,6 +31,7 @@ type ConcreteType<'typeGeneric when 'typeGeneric : comparison and 'typeGeneric : member this.Definition : ComparableTypeDefinitionHandle = this._Definition member this.Generics : 'typeGeneric list = this._Generics member this.Name = this._Name + member this.Namespace = this._Namespace override this.Equals (other : obj) : bool = match other with @@ -71,6 +73,7 @@ type RuntimeConcreteType = ConcreteType module ConcreteType = let make (assemblyName : AssemblyName) + (ns : string) (name : string) (defn : TypeDefinitionHandle) (generics : TypeDefn list) @@ -80,12 +83,14 @@ module ConcreteType = _AssemblyName = assemblyName _Definition = ComparableTypeDefinitionHandle.Make defn _Name = name + _Namespace = ns _Generics = generics } let make' (assemblyName : AssemblyName) (defn : TypeDefinitionHandle) + (ns : string) (name : string) (genericParamCount : int) : ConcreteType @@ -94,6 +99,7 @@ module ConcreteType = _AssemblyName = assemblyName _Definition = ComparableTypeDefinitionHandle.Make defn _Name = name + _Namespace = ns _Generics = List.replicate genericParamCount FakeUnit.FakeUnit } @@ -110,4 +116,5 @@ module ConcreteType = _Definition = x._Definition _Generics = generics _Name = x._Name + _Namespace = x._Namespace } diff --git a/WoofWare.PawPrint.Domain/FieldInfo.fs b/WoofWare.PawPrint.Domain/FieldInfo.fs index d0873d4..c4402a6 100644 --- a/WoofWare.PawPrint.Domain/FieldInfo.fs +++ b/WoofWare.PawPrint.Domain/FieldInfo.fs @@ -51,10 +51,12 @@ module FieldInfo = let fieldSig = def.DecodeSignature (TypeDefn.typeProvider assembly, ()) let declaringType = def.GetDeclaringType () let typeGenerics = mr.GetTypeDefinition(declaringType).GetGenericParameters().Count - let declaringTypeName = mr.GetString (mr.GetTypeDefinition(declaringType).Name) + let decType = mr.GetTypeDefinition (declaringType) + let declaringTypeNamespace = mr.GetString decType.Namespace + let declaringTypeName = mr.GetString decType.Name let declaringType = - ConcreteType.make' assembly declaringType declaringTypeName typeGenerics + ConcreteType.make' assembly declaringType declaringTypeNamespace declaringTypeName typeGenerics { Name = name diff --git a/WoofWare.PawPrint.Domain/MethodInfo.fs b/WoofWare.PawPrint.Domain/MethodInfo.fs index bbcef9d..c68debc 100644 --- a/WoofWare.PawPrint.Domain/MethodInfo.fs +++ b/WoofWare.PawPrint.Domain/MethodInfo.fs @@ -671,8 +671,11 @@ module MethodInfo = let declaringType = methodDef.GetDeclaringType () - let declaringTypeName = - metadataReader.GetString (metadataReader.GetTypeDefinition(declaringType).Name) + let declaringDefn = metadataReader.GetTypeDefinition (declaringType) + + let declaringTypeNamespace = metadataReader.GetString declaringDefn.Namespace + + let declaringTypeName = metadataReader.GetString declaringDefn.Name let declaringTypeGenericParams = metadataReader.GetTypeDefinition(declaringType).GetGenericParameters().Count @@ -696,7 +699,12 @@ module MethodInfo = GenericParameter.readAll metadataReader (methodDef.GetGenericParameters ()) let declaringType = - ConcreteType.make' assemblyName declaringType declaringTypeName declaringTypeGenericParams + ConcreteType.make' + assemblyName + declaringType + declaringTypeNamespace + declaringTypeName + declaringTypeGenericParams { DeclaringType = declaringType diff --git a/WoofWare.PawPrint/IlMachineState.fs b/WoofWare.PawPrint/IlMachineState.fs index 9a99a14..841232f 100644 --- a/WoofWare.PawPrint/IlMachineState.fs +++ b/WoofWare.PawPrint/IlMachineState.fs @@ -969,7 +969,7 @@ module IlMachineState = ) // TypeDef won't have any generics; it would be a TypeSpec if it did - let ty = ConcreteType.make ty.Assembly ty.Name typeDefinitionHandle [] + let ty = ConcreteType.make ty.Assembly ty.Namespace ty.Name typeDefinitionHandle [] match loadClass loggerFactory corelib ty currentThread state with | FirstLoadThis state -> Error state @@ -993,7 +993,8 @@ module IlMachineState = targetType.Name ) - let ty = ConcreteType.make assy.Name targetType.Name targetType.TypeDefHandle [] + let ty = + ConcreteType.make assy.Name targetType.Namespace targetType.Name targetType.TypeDefHandle [] match loadClass loggerFactory corelib ty currentThread state with | FirstLoadThis state -> Error state