Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/cecil.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJb Evain <jbevain@gmail.com>2015-07-22 18:17:10 +0300
committerJb Evain <jbevain@gmail.com>2015-07-22 18:17:10 +0300
commit569e764367245064a2d4a168eb7178918f34830c (patch)
tree135de7d742dd8b6f661bd370c61db483b6d1ad26
parent3723f62e1a68e27338490483dea387c02110049f (diff)
Do not depend on browsing the typedef table to create the type system; Fix #232
-rw-r--r--Mono.Cecil/AssemblyReader.cs3
-rw-r--r--Mono.Cecil/MetadataSystem.cs2
-rw-r--r--Mono.Cecil/ModuleDefinition.cs2
-rw-r--r--Test/Mono.Cecil.Tests/TypeTests.cs9
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<TypeDefinition> (object_type);
+ }
}
}