From 569e764367245064a2d4a168eb7178918f34830c Mon Sep 17 00:00:00 2001 From: Jb Evain Date: Wed, 22 Jul 2015 17:17:10 +0200 Subject: Do not depend on browsing the typedef table to create the type system; Fix #232 --- Mono.Cecil/AssemblyReader.cs | 3 --- Mono.Cecil/MetadataSystem.cs | 2 -- Mono.Cecil/ModuleDefinition.cs | 2 +- Test/Mono.Cecil.Tests/TypeTests.cs | 9 +++++++++ 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Mono.Cecil/AssemblyReader.cs b/Mono.Cecil/AssemblyReader.cs index ee667cb..031e613 100644 --- a/Mono.Cecil/AssemblyReader.cs +++ b/Mono.Cecil/AssemblyReader.cs @@ -849,9 +849,6 @@ namespace Mono.Cecil { metadata.AddTypeDefinition (type); - if (type.IsTypeOf ("System", "Object")) - metadata.HasSystemObject = true; - this.context = type; type.BaseType = GetTypeDefOrRef (ReadMetadataToken (CodedIndex.TypeDefOrRef)); diff --git a/Mono.Cecil/MetadataSystem.cs b/Mono.Cecil/MetadataSystem.cs index b5c620b..15922b6 100644 --- a/Mono.Cecil/MetadataSystem.cs +++ b/Mono.Cecil/MetadataSystem.cs @@ -34,8 +34,6 @@ namespace Mono.Cecil { internal TypeDefinition [] Types; internal TypeReference [] TypeReferences; - internal bool HasSystemObject; - internal FieldDefinition [] Fields; internal MethodDefinition [] Methods; internal MemberReference [] MemberReferences; diff --git a/Mono.Cecil/ModuleDefinition.cs b/Mono.Cecil/ModuleDefinition.cs index bd1ef95..aaaf244 100644 --- a/Mono.Cecil/ModuleDefinition.cs +++ b/Mono.Cecil/ModuleDefinition.cs @@ -1117,7 +1117,7 @@ namespace Mono.Cecil { if (assembly_name != "mscorlib" && assembly_name != "System.Runtime") return false; - if (module.HasImage && !module.MetadataSystem.HasSystemObject) + if (module.HasImage && !module.Read (module, (m, reader) => reader.image.GetTableLength (Table.TypeDef) > 1)) return false; return true; diff --git a/Test/Mono.Cecil.Tests/TypeTests.cs b/Test/Mono.Cecil.Tests/TypeTests.cs index 19a92ab..87bf8b1 100644 --- a/Test/Mono.Cecil.Tests/TypeTests.cs +++ b/Test/Mono.Cecil.Tests/TypeTests.cs @@ -251,5 +251,14 @@ namespace Mono.Cecil.Tests { Assert.AreEqual (1, fptr.Parameters [1].Sequence); }, verify: false); } + + [Test] + public void DeferredCorlibTypeDef () + { + var module = ModuleDefinition.ReadModule (typeof (object).Assembly.Location, new ReaderParameters (ReadingMode.Deferred)); + var object_type = module.TypeSystem.Object; + + Assert.IsInstanceOf (object_type); + } } } -- cgit v1.2.3