From: Jb Evain Date: Tue, 23 Nov 2010 10:11:20 +0000 (+0100) Subject: Fix corlib type lookup X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=25e87205980ce2bae7eedb6469ff9c6be9e2dd1f;p=mono.git Fix corlib type lookup --- diff --git a/mcs/class/Mono.Cecil/Mono.Cecil/AssemblyReader.cs b/mcs/class/Mono.Cecil/Mono.Cecil/AssemblyReader.cs index 18175fc5d1a..9e2e01fb17d 100644 --- a/mcs/class/Mono.Cecil/Mono.Cecil/AssemblyReader.cs +++ b/mcs/class/Mono.Cecil/Mono.Cecil/AssemblyReader.cs @@ -900,7 +900,7 @@ namespace Mono.Cecil { return (TypeReference) LookupToken (token); } - TypeDefinition GetTypeDefinition (uint rid) + public TypeDefinition GetTypeDefinition (uint rid) { InitializeTypeDefinitions (); diff --git a/mcs/class/Mono.Cecil/Mono.Cecil/TypeSystem.cs b/mcs/class/Mono.Cecil/Mono.Cecil/TypeSystem.cs index d818d57d0b8..0848dcbac8b 100644 --- a/mcs/class/Mono.Cecil/Mono.Cecil/TypeSystem.cs +++ b/mcs/class/Mono.Cecil/Mono.Cecil/TypeSystem.cs @@ -47,14 +47,32 @@ namespace Mono.Cecil { if (metadata.Types == null) Initialize (module.Types); - var types = metadata.Types; + return module.Read (this, (_, reader) => { + var types = reader.metadata.Types; + for (int i = 0; i < types.Length; i++) { + if (types [i] == null) + types [i] = reader.GetTypeDefinition ((uint) i + 1); + + var type = types [i]; + + if (type.Name == name && type.Namespace == @namespace) + return type; + } + + return null; + }); + } + + internal TypeReference GetType (string fullname) + { + var types = module.MetadataSystem.Types; for (int i = 0; i < types.Length; i++) { var type = types [i]; if (type == null) continue; - if (type.Name == name && type.Namespace == @namespace) + if (type.FullName == fullname) return type; }