Imported Upstream version 5.8.0.22

Former-commit-id: df344e34b07851d296efb3e6604c8db42b6f7aa3
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2017-10-19 20:04:20 +00:00
parent 5f4a27cc8a
commit 7d05485754
5020 changed files with 114082 additions and 186061 deletions

View File

@@ -671,8 +671,10 @@ namespace Mono.Cecil.Cil {
var offset_mapping = new Dictionary<int, SequencePoint> (sequence_points.Count);
for (int i = 0; i < sequence_points.Count; i++)
offset_mapping.Add (sequence_points [i].Offset, sequence_points [i]);
for (int i = 0; i < sequence_points.Count; i++) {
if (!offset_mapping.ContainsKey (sequence_points [i].Offset))
offset_mapping.Add (sequence_points [i].Offset, sequence_points [i]);
}
var instructions = method.Body.Instructions;

View File

@@ -39,6 +39,7 @@ namespace Mono.Cecil.PE {
public uint Timestamp;
public ModuleAttributes Attributes;
public DataDirectory Win32Resources;
public DataDirectory Debug;
public DataDirectory Resources;
public DataDirectory StrongName;

View File

@@ -160,12 +160,18 @@ namespace Mono.Cecil.PE {
// ExportTable 8
// ImportTable 8
Advance (pe64 ? 56 : 40);
// ResourceTable 8
image.Win32Resources = ReadDataDirectory ();
// ExceptionTable 8
// CertificateTable 8
// BaseRelocationTable 8
Advance (pe64 ? 88 : 72);
Advance (24);
// Debug 8
image.Debug = ReadDataDirectory ();

View File

@@ -87,21 +87,15 @@ namespace Mono.Cecil.PE {
void GetWin32Resources ()
{
var rsrc = GetImageResourceSection ();
if (rsrc == null)
if (!module.HasImage)
return;
win32_resources = module.Image.GetReaderAt (rsrc.VirtualAddress, rsrc.SizeOfRawData, (s, reader) => new ByteBuffer (reader.ReadBytes ((int) s)));
}
DataDirectory win32_resources_directory = module.Image.Win32Resources;
var size = win32_resources_directory.Size;
Section GetImageResourceSection ()
{
if (!module.HasImage)
return null;
const string rsrc_section = ".rsrc";
return module.Image.GetSection (rsrc_section);
if (size > 0) {
win32_resources = module.Image.GetReaderAt (win32_resources_directory.VirtualAddress, size, (s, reader) => new ByteBuffer (reader.ReadBytes ((int) s)));
}
}
public static ImageWriter CreateWriter (ModuleDefinition module, MetadataBuilder metadata, Disposable<Stream> stream)
@@ -846,10 +840,10 @@ namespace Mono.Cecil.PE {
void PatchResourceDataEntry (ByteBuffer resources)
{
var old_rsrc = GetImageResourceSection ();
var rva = resources.ReadUInt32 ();
resources.position -= 4;
resources.WriteUInt32 (rva - old_rsrc.VirtualAddress + rsrc.VirtualAddress);
resources.WriteUInt32 (rva - module.Image.Win32Resources.VirtualAddress + rsrc.VirtualAddress);
}
}
}

View File

@@ -943,8 +943,8 @@ namespace Mono.Cecil {
type.BaseType = GetTypeDefOrRef (ReadMetadataToken (CodedIndex.TypeDefOrRef));
type.fields_range = ReadFieldsRange (rid);
type.methods_range = ReadMethodsRange (rid);
type.fields_range = ReadListRange (rid, Table.TypeDef, Table.Field);
type.methods_range = ReadListRange (rid, Table.TypeDef, Table.Method);
if (IsNested (attributes))
type.DeclaringType = GetNestedTypeDeclaringType (type);
@@ -965,21 +965,13 @@ namespace Mono.Cecil {
return GetTypeDefinition (declaring_rid);
}
Range ReadFieldsRange (uint type_index)
{
return ReadListRange (type_index, Table.TypeDef, Table.Field);
}
Range ReadMethodsRange (uint type_index)
{
return ReadListRange (type_index, Table.TypeDef, Table.Method);
}
Range ReadListRange (uint current_index, Table current, Table target)
{
var list = new Range ();
list.Start = ReadTableIndex (target);
var start = ReadTableIndex (target);
if (start == 0)
return list;
uint next_index;
var current_table = image.TableHeap [current];
@@ -993,7 +985,8 @@ namespace Mono.Cecil {
this.position = position;
}
list.Length = next_index - list.Start;
list.Start = start;
list.Length = next_index - start;
return list;
}
@@ -1496,16 +1489,11 @@ namespace Mono.Cecil {
for (uint i = 1; i <= length; i++) {
var type_rid = ReadTableIndex (Table.TypeDef);
Range events_range = ReadEventsRange (i);
Range events_range = ReadListRange (i, Table.EventMap, Table.Event);
metadata.AddEventsRange (type_rid, events_range);
}
}
Range ReadEventsRange (uint rid)
{
return ReadListRange (rid, Table.EventMap, Table.Event);
}
public bool HasProperties (TypeDefinition type)
{
InitializeProperties ();
@@ -1585,16 +1573,11 @@ namespace Mono.Cecil {
for (uint i = 1; i <= length; i++) {
var type_rid = ReadTableIndex (Table.TypeDef);
var properties_range = ReadPropertiesRange (i);
var properties_range = ReadListRange (i, Table.PropertyMap, Table.Property);
metadata.AddPropertiesRange (type_rid, properties_range);
}
}
Range ReadPropertiesRange (uint rid)
{
return ReadListRange (rid, Table.PropertyMap, Table.Property);
}
MethodSemanticsAttributes ReadMethodSemantics (MethodDefinition method)
{
InitializeMethodSemantics ();
@@ -1729,11 +1712,6 @@ namespace Mono.Cecil {
}
}
Range ReadParametersRange (uint method_rid)
{
return ReadListRange (method_rid, Table.Method, Table.Param);
}
public Collection<MethodDefinition> ReadMethods (TypeDefinition type)
{
var methods_range = type.methods_range;
@@ -1794,7 +1772,7 @@ namespace Mono.Cecil {
methods.Add (method); // attach method
var signature = ReadBlobIndex ();
var param_range = ReadParametersRange (method_rid);
var param_range = ReadListRange (method_rid, Table.Method, Table.Param);
this.context = method;

View File

@@ -189,10 +189,10 @@ namespace Mono.Cecil.Rocks {
var instruction = self.Instructions [i];
if (instruction.OpCode.Code != Code.Ldc_I8)
continue;
var l = (long)instruction.Operand;
if (l >= uint.MaxValue)
var l = (long) instruction.Operand;
if (l >= int.MaxValue || l <= int.MinValue)
continue;
ExpandMacro (instruction, OpCodes.Ldc_I4, (uint)l);
ExpandMacro (instruction, OpCodes.Ldc_I4, (int) l);
self.Instructions.Insert (++i, Instruction.Create (OpCodes.Conv_I8));
}
}

View File

@@ -234,7 +234,7 @@ namespace Mono.CompilerServices.SymbolWriter
public override string ToString ()
{
return String.Format ("[Line {0}:{1,2}-{3,4}:{5}]", File, Row, Column, EndRow, EndColumn, Offset);
return String.Format ("[Line {0}:{1},{2}-{3},{4}:{5}]", File, Row, Column, EndRow, EndColumn, Offset);
}
}

View File

@@ -280,7 +280,11 @@ namespace Mono.Cecil.Pdb {
break;
}
case 'A':
var index = used_namespace.IndexOf(' ');
var index = used_namespace.IndexOf (' ');
if (index < 0) {
target = new ImportTarget (ImportTargetKind.ImportNamespace) { @namespace = used_namespace };
break;
}
var alias_value = used_namespace.Substring (1, index - 1);
var alias_target_value = used_namespace.Substring (index + 2);
switch (used_namespace [index + 1]) {
@@ -294,6 +298,15 @@ namespace Mono.Cecil.Pdb {
break;
}
break;
case '*':
target = new ImportTarget (ImportTargetKind.ImportNamespace) { @namespace = value };
break;
case '@':
if (!value.StartsWith ("P:"))
continue;
target = new ImportTarget (ImportTargetKind.ImportNamespace) { @namespace = value.Substring (2) };
break;
}
if (target != null)

View File

@@ -143,7 +143,7 @@ namespace Mono.Cecil.Tests {
Assert.AreEqual (DocumentHashAlgorithm.None, document.HashAlgorithm);
Assert.AreEqual (DocumentLanguage.FSharp, document.Language);
Assert.AreEqual (DocumentLanguageVendor.Microsoft, document.LanguageVendor);
}, readOnly: Platform.OnMono, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider));
}, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider));
}
[Test]
@@ -157,7 +157,15 @@ namespace Mono.Cecil.Tests {
public void EmptyRootNamespace ()
{
TestModule ("EmptyRootNamespace.dll", module => {
}, readOnly: Platform.OnMono, symbolReaderProvider: typeof(PdbReaderProvider), symbolWriterProvider: typeof(PdbWriterProvider));
}, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider));
}
[Test]
public void VisualBasicNamespace ()
{
TestModule ("AVbTest.exe", module => {
}, readOnly: Platform.OnMono, symbolReaderProvider: typeof (PdbReaderProvider), symbolWriterProvider: typeof (PdbWriterProvider));
}
[Test]