diff options
author | Jb Evain <jb@evain.net> | 2015-03-19 23:47:24 +0300 |
---|---|---|
committer | Jb Evain <jbevain@gmail.com> | 2015-04-30 12:22:13 +0300 |
commit | 9fd92b50e1ed1f0e9e78231736dc117c34b50852 (patch) | |
tree | 9fe11fa7c0042ccb7034d61070bac7cf594dab6c | |
parent | 4ff484b061eb1a1b77284eb9f8c90ddcb6e05dae (diff) |
Add support for reading System.Runtime as corlib
-rw-r--r-- | Mono.Cecil/AssemblyReader.cs | 3 | ||||
-rw-r--r-- | Mono.Cecil/MetadataSystem.cs | 2 | ||||
-rw-r--r-- | Mono.Cecil/ModuleDefinition.cs | 10 | ||||
-rw-r--r-- | Mono.Cecil/TypeSystem.cs | 3 |
4 files changed, 16 insertions, 2 deletions
diff --git a/Mono.Cecil/AssemblyReader.cs b/Mono.Cecil/AssemblyReader.cs index ee440cf..853c593 100644 --- a/Mono.Cecil/AssemblyReader.cs +++ b/Mono.Cecil/AssemblyReader.cs @@ -849,6 +849,9 @@ 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 15922b6..b5c620b 100644 --- a/Mono.Cecil/MetadataSystem.cs +++ b/Mono.Cecil/MetadataSystem.cs @@ -34,6 +34,8 @@ 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 f887789..deb0098 100644 --- a/Mono.Cecil/ModuleDefinition.cs +++ b/Mono.Cecil/ModuleDefinition.cs @@ -1112,7 +1112,15 @@ namespace Mono.Cecil { if (module.Assembly == null) return false; - return module.Assembly.Name.Name == "mscorlib"; + var assembly_name = module.Assembly.Name.Name; + + if (assembly_name != "mscorlib" && assembly_name != "System.Runtime") + return false; + + if (module.HasImage && !module.MetadataSystem.HasSystemObject) + return false; + + return true; } public static string GetFullyQualifiedName (this Stream self) diff --git a/Mono.Cecil/TypeSystem.cs b/Mono.Cecil/TypeSystem.cs index 57b611e..da807e7 100644 --- a/Mono.Cecil/TypeSystem.cs +++ b/Mono.Cecil/TypeSystem.cs @@ -96,12 +96,13 @@ namespace Mono.Cecil { return corlib; const string mscorlib = "mscorlib"; + const string system_runtime = "System.Runtime"; var references = module.AssemblyReferences; for (int i = 0; i < references.Count; i++) { var reference = references [i]; - if (reference.Name == mscorlib) + if (reference.Name == mscorlib || reference.Name == system_runtime) return corlib = reference; } |