diff options
author | Sebastien Pouliot <sebastien@xamarin.com> | 2013-10-11 17:26:24 +0400 |
---|---|---|
committer | Sebastien Pouliot <sebastien@xamarin.com> | 2013-10-11 17:26:24 +0400 |
commit | f4a15b8cee24cfeaa0f304589839243be51f5b44 (patch) | |
tree | 8f7fb6c734cf8d0ee6c1a24f5ba129d58aff3697 | |
parent | a868b2c94e39c958e01eb5f55323cfeda031f946 (diff) | |
parent | 2a69ce2bd60b557359e3e79e808fdc9113394b23 (diff) |
Merge remote-tracking branch 'upstream/master'
-rw-r--r-- | Mono.Cecil/AssemblyReader.cs | 22 | ||||
-rw-r--r-- | Mono.Cecil/Import.cs | 1 |
2 files changed, 22 insertions, 1 deletions
diff --git a/Mono.Cecil/AssemblyReader.cs b/Mono.Cecil/AssemblyReader.cs index a9f0b6a..3e1cc30 100644 --- a/Mono.Cecil/AssemblyReader.cs +++ b/Mono.Cecil/AssemblyReader.cs @@ -3099,9 +3099,29 @@ namespace Mono.Cecil { } } + string UnescapeTypeName (string name) + { + StringBuilder sb = new StringBuilder (name.Length); + for (int i = 0; i < name.Length; i++) { + char c = name [i]; + if (name [i] == '\\') { + if ((i < name.Length - 1) && (name [i + 1] == '\\')) { + sb.Append (c); + i++; + } + } else { + sb.Append (c); + } + } + return sb.ToString (); + } + public TypeReference ReadTypeReference () { - return TypeParser.ParseType (reader.module, ReadUTF8String ()); + string s = ReadUTF8String (); + if (s.IndexOf ('\\') != -1) + s = UnescapeTypeName (s); + return TypeParser.ParseType (reader.module, s); } object ReadCustomAttributeEnum (TypeReference enum_type) diff --git a/Mono.Cecil/Import.cs b/Mono.Cecil/Import.cs index dc9312b..9304010 100644 --- a/Mono.Cecil/Import.cs +++ b/Mono.Cecil/Import.cs @@ -466,6 +466,7 @@ namespace Mono.Cecil { case MetadataScopeType.AssemblyNameReference: return ImportAssemblyName ((AssemblyNameReference) scope); case MetadataScopeType.ModuleDefinition: + if (scope == module) return scope; return ImportAssemblyName (((ModuleDefinition) scope).Assembly.Name); case MetadataScopeType.ModuleReference: throw new NotImplementedException (); |