Imported Upstream version 5.4.0.167

Former-commit-id: 5624ac747d633e885131e8349322922b6a59baaa
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2017-08-21 15:34:15 +00:00
parent e49d6f06c0
commit 536cd135cc
12856 changed files with 563812 additions and 223249 deletions

View File

@@ -34,7 +34,7 @@ namespace Mono.Cecil.Cil {
Mixin.CheckModule (module);
Mixin.CheckStream (symbolStream);
return GetSymbolReader (module, Disposable.NotOwned (symbolStream), "");
return GetSymbolReader (module, Disposable.NotOwned (symbolStream), symbolStream.GetFileName ());
}
ISymbolReader GetSymbolReader (ModuleDefinition module, Disposable<Stream> symbolStream, string fileName)
@@ -301,7 +301,11 @@ namespace Mono.Cecil.Cil {
// PDB Age
buffer.WriteUInt32 (1);
// PDB Path
buffer.WriteBytes (System.Text.Encoding.UTF8.GetBytes (writer.BaseStream.GetFileName ()));
var filename = writer.BaseStream.GetFileName ();
if (!string.IsNullOrEmpty (filename))
filename = Path.GetFileName (filename);
buffer.WriteBytes (System.Text.Encoding.UTF8.GetBytes (filename));
buffer.WriteByte (0);
var data = new byte [buffer.length];

View File

@@ -2986,13 +2986,13 @@ namespace Mono.Cecil {
value = Encoding.Unicode.GetString (bytes, 0, bytes.Length);
} else
value = null;
} else if (type.etype == ElementType.Object) {
value = null;
} else if (type.IsTypeOf ("System", "Decimal")) {
var b = signature.ReadByte ();
value = new decimal (signature.ReadInt32 (), signature.ReadInt32 (), signature.ReadInt32 (), (b & 0x80) != 0, (byte) (b & 0x7f));
} else if (type.IsTypeOf ("System", "DateTime")) {
value = new DateTime (signature.ReadInt64());
} else if (type.etype == ElementType.Object || type.etype == ElementType.None || type.etype == ElementType.Class) {
value = null;
} else
value = signature.ReadConstantSignature (type.etype);

View File

@@ -122,9 +122,8 @@ namespace Mono.Cecil {
#if !NET_CORE
if (parameters.StrongNameKeyPair != null)
CryptoService.StrongName (stream.value, writer, parameters.StrongNameKeyPair);
stream.Dispose ();
#endif
stream.Dispose ();
}
static void BuildMetadata (ModuleDefinition module, MetadataBuilder metadata)
@@ -2152,6 +2151,7 @@ namespace Mono.Cecil {
case ElementType.SzArray:
case ElementType.Class:
case ElementType.Object:
case ElementType.None:
case ElementType.Var:
case ElementType.MVar:
signature.WriteInt32 (0);

View File

@@ -995,19 +995,7 @@ namespace Mono.Cecil {
public ImageDebugHeader GetDebugHeader ()
{
if (!HasDebugHeader)
throw new InvalidOperationException ();
return Image.DebugHeader;
}
void ProcessDebugHeader ()
{
if (!HasDebugHeader)
return;
if (!symbol_reader.ProcessDebugHeader (GetDebugHeader ()))
throw new InvalidOperationException ();
return Image.DebugHeader ?? new ImageDebugHeader ();
}
#if !READ_ONLY
@@ -1084,7 +1072,10 @@ namespace Mono.Cecil {
symbol_reader = reader;
ProcessDebugHeader ();
if (!symbol_reader.ProcessDebugHeader (GetDebugHeader ())) {
symbol_reader = null;
throw new InvalidOperationException ();
}
if (HasImage && ReadingMode == ReadingMode.Immediate) {
var immediate_reader = new ImmediateModuleReader (Image);
@@ -1135,7 +1126,7 @@ namespace Mono.Cecil {
Mixin.CheckStream (stream);
Mixin.CheckReadSeek (stream);
return ReadModule (Disposable.NotOwned (stream), "", parameters);
return ReadModule (Disposable.NotOwned (stream), stream.GetFileName (), parameters);
}
static ModuleDefinition ReadModule (Disposable<Stream> stream, string fileName, ReaderParameters parameters)

View File

@@ -263,6 +263,20 @@ namespace Mono.Cecil.Tests {
}
}
[Test]
public void OwnedStreamModuleFileName ()
{
var path = GetAssemblyResourcePath ("hello.exe", GetType ().Assembly);
using (var file = File.Open (path, FileMode.Open))
{
using (var module = ModuleDefinition.ReadModule (file))
{
Assert.IsNotNullOrEmpty (module.FileName);
Assert.AreEqual (path, module.FileName);
}
}
}
[Test]
public void ReadAndWriteFile ()
{

View File

@@ -387,6 +387,22 @@ namespace Mono.Cecil.Tests {
}, symbolReaderProvider: typeof (PortablePdbReaderProvider), symbolWriterProvider: typeof (PortablePdbWriterProvider));
}
[Test]
public void NullClassConstant ()
{
TestModule ("xattr.dll", module => {
var type = module.GetType ("Library");
var method = type.GetMethod ("NullXAttributeConstant");
var symbol = method.DebugInformation;
Assert.IsNotNull (symbol);
Assert.AreEqual(1, symbol.Scope.Constants.Count);
var a = symbol.Scope.Constants [0];
Assert.AreEqual ("a", a.Name);
}, symbolReaderProvider: typeof (PortablePdbReaderProvider), symbolWriterProvider: typeof (PortablePdbWriterProvider));
}
[Test]
public void PortablePdbLineInfo ()
{

Binary file not shown.