Imported Upstream version 5.20.0.208

Former-commit-id: 8fbf7dae6cd486bffb1fa6a52020e8eb23c570b1
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2019-02-13 08:25:33 +00:00
parent 5d930a31c6
commit 219eec173f
74 changed files with 391 additions and 163 deletions

View File

@@ -1119,11 +1119,14 @@ namespace Mono.Cecil {
metadata.AddTypeReference (type);
if (scope_token.TokenType == TokenType.TypeRef) {
declaring_type = GetTypeDefOrRef (scope_token);
if (scope_token.RID != rid) {
declaring_type = GetTypeDefOrRef (scope_token);
scope = declaring_type != null
? declaring_type.Scope
: module;
scope = declaring_type != null
? declaring_type.Scope
: module;
} else // obfuscated typeref row pointing to self
scope = module;
} else
scope = GetTypeReferenceScope (scope_token);
@@ -3766,7 +3769,7 @@ namespace Mono.Cecil {
if (length == 0)
return string.Empty;
if (position + length >= buffer.Length)
if (position + length > buffer.Length)
return string.Empty;
var @string = Encoding.UTF8.GetString (buffer, position, length);

View File

@@ -110,18 +110,25 @@ namespace Mono.Cecil {
}
#endif
using (var symbol_writer = GetSymbolWriter (module, fq_name, symbol_writer_provider, parameters)) {
var metadata = new MetadataBuilder (module, fq_name, timestamp, symbol_writer_provider, symbol_writer);
BuildMetadata (module, metadata);
var metadata = new MetadataBuilder (module, fq_name, timestamp, symbol_writer_provider);
try {
module.metadata_builder = metadata;
var writer = ImageWriter.CreateWriter (module, metadata, stream);
stream.value.SetLength (0);
writer.WriteImage ();
using (var symbol_writer = GetSymbolWriter (module, fq_name, symbol_writer_provider, parameters)) {
metadata.SetSymbolWriter (symbol_writer);
BuildMetadata (module, metadata);
var writer = ImageWriter.CreateWriter (module, metadata, stream);
stream.value.SetLength (0);
writer.WriteImage ();
#if !NET_CORE
if (parameters.StrongNameKeyPair != null)
CryptoService.StrongName (stream.value, writer, parameters.StrongNameKeyPair);
if (parameters.StrongNameKeyPair != null)
CryptoService.StrongName (stream.value, writer, parameters.StrongNameKeyPair);
#endif
}
} finally {
module.metadata_builder = null;
}
}
@@ -209,10 +216,10 @@ namespace Mono.Cecil {
public sealed override void Sort ()
{
Array.Sort (rows, 0, length, this);
MergeSort<TRow>.Sort (rows, 0, this.length, this);
}
protected int Compare (uint x, uint y)
protected static int Compare (uint x, uint y)
{
return x == y ? 0 : x > y ? 1 : -1;
}
@@ -796,7 +803,7 @@ namespace Mono.Cecil {
readonly internal ModuleDefinition module;
readonly internal ISymbolWriterProvider symbol_writer_provider;
readonly internal ISymbolWriter symbol_writer;
internal ISymbolWriter symbol_writer;
readonly internal TextMap text_map;
readonly internal string fq_name;
readonly internal uint timestamp;
@@ -846,8 +853,6 @@ namespace Mono.Cecil {
readonly TypeSpecTable typespec_table;
readonly MethodSpecTable method_spec_table;
readonly bool portable_pdb;
internal MetadataBuilder metadata_builder;
readonly DocumentTable document_table;
@@ -862,7 +867,7 @@ namespace Mono.Cecil {
readonly Dictionary<ImportScopeRow, MetadataToken> import_scope_map;
readonly Dictionary<string, MetadataToken> document_map;
public MetadataBuilder (ModuleDefinition module, string fq_name, uint timestamp, ISymbolWriterProvider symbol_writer_provider, ISymbolWriter symbol_writer)
public MetadataBuilder (ModuleDefinition module, string fq_name, uint timestamp, ISymbolWriterProvider symbol_writer_provider)
{
this.module = module;
this.text_map = CreateTextMap ();
@@ -870,18 +875,6 @@ namespace Mono.Cecil {
this.timestamp = timestamp;
this.symbol_writer_provider = symbol_writer_provider;
if (symbol_writer == null && module.HasImage && module.Image.HasDebugTables ()) {
symbol_writer = new PortablePdbWriter (this, module);
}
this.symbol_writer = symbol_writer;
var pdb_writer = symbol_writer as IMetadataSymbolWriter;
if (pdb_writer != null) {
portable_pdb = true;
pdb_writer.SetMetadata (this);
}
this.code = new CodeWriter (this);
this.data = new DataBuffer ();
this.resources = new ResourceBuffer ();
@@ -916,9 +909,6 @@ namespace Mono.Cecil {
method_spec_map = new Dictionary<MethodSpecRow, MetadataToken> (row_equality_comparer);
generic_parameters = new Collection<GenericParameter> ();
if (!portable_pdb)
return;
this.document_table = GetTable<DocumentTable> (Table.Document);
this.method_debug_information_table = GetTable<MethodDebugInformationTable> (Table.MethodDebugInformation);
this.local_scope_table = GetTable<LocalScopeTable> (Table.LocalScope);
@@ -937,7 +927,6 @@ namespace Mono.Cecil {
this.module = module;
this.text_map = new TextMap ();
this.symbol_writer_provider = writer_provider;
this.portable_pdb = true;
this.string_heap = new StringHeapBuffer ();
this.guid_heap = new GuidHeapBuffer ();
@@ -961,6 +950,14 @@ namespace Mono.Cecil {
this.import_scope_map = new Dictionary<ImportScopeRow, MetadataToken> (row_equality_comparer);
}
public void SetSymbolWriter (ISymbolWriter writer)
{
symbol_writer = writer;
if (symbol_writer == null && module.HasImage && module.Image.HasDebugTables ())
symbol_writer = new PortablePdbWriter (this, module);
}
TextMap CreateTextMap ()
{
var map = new TextMap ();
@@ -1050,10 +1047,6 @@ namespace Mono.Cecil {
if (module.EntryPoint != null)
entry_point = LookupToken (module.EntryPoint);
var pdb_writer = symbol_writer as IMetadataSymbolWriter;
if (pdb_writer != null)
pdb_writer.WriteModule ();
}
void BuildAssembly ()

View File

@@ -265,7 +265,7 @@ namespace Mono.Cecil {
if (version.MajorRevision == 3300)
path = Path.Combine (path, "v1.0.3705");
else
path = Path.Combine (path, "v1.0.5000.0");
path = Path.Combine (path, "v1.1.4322");
break;
case 2:
path = Path.Combine (path, "v2.0.50727");

View File

@@ -180,6 +180,9 @@ namespace Mono.Cecil {
return debug_info ?? (debug_info = new MethodDebugInformation (this));
}
set {
debug_info = value;
}
}
public bool HasPInvokeInfo {

View File

@@ -183,7 +183,7 @@ namespace Mono.Cecil {
public static bool IsVarArg (this IMethodSignature self)
{
return (self.CallingConvention & MethodCallingConvention.VarArg) != 0;
return self.CallingConvention == MethodCallingConvention.VarArg;
}
public static int GetSentinelPosition (this IMethodSignature self)

View File

@@ -283,8 +283,11 @@ namespace Mono.Cecil {
TargetArchitecture architecture;
ModuleAttributes attributes;
ModuleCharacteristics characteristics;
internal ushort linker_version = 8;
Guid mvid;
internal ushort linker_version = 8;
internal ushort subsystem_major = 4;
internal ushort subsystem_minor = 0;
internal uint timestamp;
internal AssemblyDefinition assembly;
@@ -304,6 +307,10 @@ namespace Mono.Cecil {
internal Collection<CustomDebugInformation> custom_infos;
#if !READ_ONLY
internal MetadataBuilder metadata_builder;
#endif
public bool IsMain {
get { return kind != ModuleKind.NetModule; }
}
@@ -616,6 +623,8 @@ namespace Mono.Cecil {
this.attributes = image.Attributes;
this.characteristics = image.Characteristics;
this.linker_version = image.LinkerVersion;
this.subsystem_major = image.SubSystemMajor;
this.subsystem_minor = image.SubSystemMinor;
this.file_name = image.FileName;
this.timestamp = image.Timestamp;