Imported Upstream version 5.2.0.175

Former-commit-id: bb0468d0f257ff100aa895eb5fe583fb5dfbf900
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2017-06-07 13:16:24 +00:00
parent 4bdbaf4a88
commit 966bba02bb
8776 changed files with 346420 additions and 149650 deletions

View File

@ -33,9 +33,7 @@ namespace Mono.Cecil {
internal IMetadataResolver metadata_resolver;
#if !READ_ONLY
internal IMetadataImporterProvider metadata_importer_provider;
#if !PCL && !NET_CORE
internal IReflectionImporterProvider reflection_importer_provider;
#endif
#endif
Stream symbol_stream;
ISymbolReaderProvider symbol_reader_provider;
@ -70,12 +68,10 @@ namespace Mono.Cecil {
set { metadata_importer_provider = value; }
}
#if !PCL && !NET_CORE
public IReflectionImporterProvider ReflectionImporterProvider {
get { return reflection_importer_provider; }
set { reflection_importer_provider = value; }
}
#endif
#endif
public Stream SymbolStream {
@ -120,14 +116,13 @@ namespace Mono.Cecil {
ModuleKind kind;
TargetRuntime runtime;
uint? timestamp;
TargetArchitecture architecture;
IAssemblyResolver assembly_resolver;
IMetadataResolver metadata_resolver;
#if !READ_ONLY
IMetadataImporterProvider metadata_importer_provider;
#if !PCL && !NET_CORE
IReflectionImporterProvider reflection_importer_provider;
#endif
#endif
public ModuleKind Kind {
@ -140,6 +135,11 @@ namespace Mono.Cecil {
set { runtime = value; }
}
public uint? Timestamp {
get { return timestamp; }
set { timestamp = value; }
}
public TargetArchitecture Architecture {
get { return architecture; }
set { architecture = value; }
@ -161,12 +161,10 @@ namespace Mono.Cecil {
set { metadata_importer_provider = value; }
}
#if !PCL && !NET_CORE
public IReflectionImporterProvider ReflectionImporterProvider {
get { return reflection_importer_provider; }
set { reflection_importer_provider = value; }
}
#endif
#endif
public ModuleParameters ()
@ -178,10 +176,10 @@ namespace Mono.Cecil {
static TargetRuntime GetCurrentRuntime ()
{
#if !PCL && !NET_CORE
#if !NET_CORE
return typeof (object).Assembly.ImageRuntimeVersion.ParseRuntime ();
#else
var corlib_name = AssemblyNameReference.Parse (typeof (object).GetAssembly ().FullName);
var corlib_name = AssemblyNameReference.Parse (typeof (object).Assembly ().FullName);
var corlib_version = corlib_name.Version;
switch (corlib_version.Major) {
@ -218,12 +216,19 @@ namespace Mono.Cecil {
public sealed class WriterParameters {
uint? timestamp;
Stream symbol_stream;
ISymbolWriterProvider symbol_writer_provider;
bool write_symbols;
#if !PCL && !NET_CORE
#if !NET_CORE
SR.StrongNameKeyPair key_pair;
#endif
public uint? Timestamp {
get { return timestamp; }
set { timestamp = value; }
}
public Stream SymbolStream {
get { return symbol_stream; }
set { symbol_stream = value; }
@ -238,7 +243,8 @@ namespace Mono.Cecil {
get { return write_symbols; }
set { write_symbols = value; }
}
#if !PCL && !NET_CORE
#if !NET_CORE
public SR.StrongNameKeyPair StrongNameKeyPair {
get { return key_pair; }
set { key_pair = value; }
@ -271,14 +277,13 @@ namespace Mono.Cecil {
ModuleAttributes attributes;
ModuleCharacteristics characteristics;
Guid mvid;
internal uint timestamp;
internal AssemblyDefinition assembly;
MethodDefinition entry_point;
#if !READ_ONLY
#if !PCL && !NET_CORE
internal IReflectionImporter reflection_importer;
#endif
internal IMetadataImporter metadata_importer;
ICustomMetadataWriter custom_writer;
#endif
@ -378,7 +383,6 @@ namespace Mono.Cecil {
}
#if !READ_ONLY
#if !PCL && !NET_CORE
internal IReflectionImporter ReflectionImporter {
get {
if (reflection_importer == null)
@ -387,7 +391,7 @@ namespace Mono.Cecil {
return reflection_importer;
}
}
#endif
internal IMetadataImporter MetadataImporter {
get {
if (metadata_importer == null)
@ -412,7 +416,7 @@ namespace Mono.Cecil {
public IAssemblyResolver AssemblyResolver {
get {
#if !PCL && !NET_CORE
#if !NET_CORE
if (assembly_resolver.value == null) {
lock (module_lock) {
assembly_resolver = Disposable.Owned (new DefaultAssemblyResolver () as IAssemblyResolver);
@ -592,6 +596,7 @@ namespace Mono.Cecil {
this.attributes = image.Attributes;
this.characteristics = image.Characteristics;
this.file_name = image.FileName;
this.timestamp = image.Timestamp;
this.reader = new MetadataReader (this);
}
@ -615,7 +620,7 @@ namespace Mono.Cecil {
public bool HasTypeReference (string scope, string fullName)
{
CheckFullName (fullName);
Mixin.CheckFullName (fullName);
if (!HasImage)
return false;
@ -630,7 +635,7 @@ namespace Mono.Cecil {
public bool TryGetTypeReference (string scope, string fullName, out TypeReference type)
{
CheckFullName (fullName);
Mixin.CheckFullName (fullName);
if (!HasImage) {
type = null;
@ -661,6 +666,14 @@ namespace Mono.Cecil {
return Read (this, (_, reader) => reader.GetMemberReferences ());
}
public IEnumerable<CustomAttribute> GetCustomAttributes ()
{
if (!HasImage)
return Empty<CustomAttribute>.Array;
return Read (this, (_, reader) => reader.GetCustomAttributes ());
}
public TypeReference GetType (string fullName, bool runtimeName)
{
return runtimeName
@ -670,7 +683,7 @@ namespace Mono.Cecil {
public TypeDefinition GetType (string fullName)
{
CheckFullName (fullName);
Mixin.CheckFullName (fullName);
var position = fullName.IndexOf ('/');
if (position > 0)
@ -706,14 +719,6 @@ namespace Mono.Cecil {
}
}
static void CheckFullName (string fullName)
{
if (fullName == null)
throw new ArgumentNullException ("fullName");
if (fullName.Length == 0)
throw new ArgumentException ();
}
TypeDefinition GetNestedType (string fullname)
{
var names = fullname.Split ('/');
@ -735,7 +740,7 @@ namespace Mono.Cecil {
internal FieldDefinition Resolve (FieldReference field)
{
#if PCL || NET_CORE
#if NET_CORE
if (MetadataResolver == null)
throw new NotSupportedException ();
#endif
@ -744,7 +749,7 @@ namespace Mono.Cecil {
internal MethodDefinition Resolve (MethodReference method)
{
#if PCL || NET_CORE
#if NET_CORE
if (MetadataResolver == null)
throw new NotSupportedException ();
#endif
@ -753,7 +758,7 @@ namespace Mono.Cecil {
internal TypeDefinition Resolve (TypeReference type)
{
#if PCL || NET_CORE
#if NET_CORE
if (MetadataResolver == null)
throw new NotSupportedException ();
#endif
@ -771,13 +776,6 @@ namespace Mono.Cecil {
throw new ArgumentException ();
}
static ImportGenericContext GenericContextFor (IGenericParameterProvider context)
{
return context != null ? new ImportGenericContext (context) : default (ImportGenericContext);
}
#if !PCL && !NET_CORE
[Obsolete ("Use ImportReference", error: false)]
public TypeReference Import (Type type)
{
@ -852,7 +850,6 @@ namespace Mono.Cecil {
return ReflectionImporter.ImportReference (method, context);
}
#endif
[Obsolete ("Use ImportReference", error: false)]
public TypeReference Import (TypeReference type)
@ -993,15 +990,15 @@ namespace Mono.Cecil {
}
public bool HasDebugHeader {
get { return Image != null && !Image.Debug.IsZero; }
get { return Image != null && Image.DebugHeader != null; }
}
public ImageDebugDirectory GetDebugHeader (out byte [] header)
public ImageDebugHeader GetDebugHeader ()
{
if (!HasDebugHeader)
throw new InvalidOperationException ();
return Image.GetDebugHeader (out header);
return Image.DebugHeader;
}
void ProcessDebugHeader ()
@ -1009,10 +1006,7 @@ namespace Mono.Cecil {
if (!HasDebugHeader)
return;
byte [] header;
var directory = GetDebugHeader (out header);
if (!symbol_reader.ProcessDebugHeader (directory, header))
if (!symbol_reader.ProcessDebugHeader (GetDebugHeader ()))
throw new InvalidOperationException ();
}
@ -1031,6 +1025,7 @@ namespace Mono.Cecil {
var module = new ModuleDefinition {
Name = name,
kind = parameters.Kind,
timestamp = parameters.Timestamp ?? Mixin.GetTimestamp (),
Runtime = parameters.Runtime,
architecture = parameters.Architecture,
mvid = Guid.NewGuid (),
@ -1047,10 +1042,8 @@ namespace Mono.Cecil {
#if !READ_ONLY
if (parameters.MetadataImporterProvider != null)
module.metadata_importer = parameters.MetadataImporterProvider.GetMetadataImporter (module);
#if !PCL && !NET_CORE
if (parameters.ReflectionImporterProvider != null)
module.reflection_importer = parameters.ReflectionImporterProvider.GetReflectionImporter (module);
#endif
#endif
if (parameters.Kind != ModuleKind.NetModule) {
@ -1075,19 +1068,14 @@ namespace Mono.Cecil {
#endif
#if !PCL && !NET_CORE
public void ReadSymbols ()
{
if (string.IsNullOrEmpty (file_name))
throw new InvalidOperationException ();
var provider = SymbolProvider.GetPlatformReaderProvider ();
if (provider == null)
throw new InvalidOperationException ();
var provider = new DefaultSymbolReaderProvider (throwIfNoSymbol: true);
ReadSymbols (provider.GetSymbolReader (this, file_name));
}
#endif
public void ReadSymbols (ISymbolReader reader)
{
@ -1104,7 +1092,6 @@ namespace Mono.Cecil {
}
}
#if !PCL
public static ModuleDefinition ReadModule (string fileName)
{
return ReadModule (fileName, new ReaderParameters (ReadingMode.Deferred));
@ -1137,7 +1124,6 @@ namespace Mono.Cecil {
return new FileStream (fileName, mode, access, share);
}
#endif
public static ModuleDefinition ReadModule (Stream stream)
{
@ -1163,7 +1149,6 @@ namespace Mono.Cecil {
#if !READ_ONLY
#if !PCL
public void Write (string fileName)
{
Write (fileName, new WriterParameters ());
@ -1172,10 +1157,9 @@ namespace Mono.Cecil {
public void Write (string fileName, WriterParameters parameters)
{
Mixin.CheckParameters (parameters);
var file = GetFileStream (fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.None);
var file = GetFileStream (fileName, FileMode.Create, FileAccess.ReadWrite, FileShare.Read);
ModuleWriter.WriteModuleTo (this, Disposable.Owned (file), parameters);
}
#endif
public void Write ()
{
@ -1187,9 +1171,7 @@ namespace Mono.Cecil {
if (!HasImage)
throw new InvalidOperationException ();
var image_stream = Image.Stream.value;
image_stream.Position = 0;
Write (image_stream, parameters);
Write (Image.Stream.value, parameters);
}
public void Write (Stream stream)
@ -1212,18 +1194,53 @@ namespace Mono.Cecil {
static partial class Mixin {
public enum Argument {
name,
fileName,
fullName,
stream,
type,
method,
field,
parameters,
module,
modifierType,
eventType,
fieldType,
declaringType,
returnType,
propertyType,
interfaceType,
}
public static void CheckName (object name)
{
if (name == null)
throw new ArgumentNullException (Argument.name.ToString ());
}
public static void CheckName (string name)
{
if (string.IsNullOrEmpty (name))
throw new ArgumentNullOrEmptyException (Argument.name.ToString ());
}
public static void CheckFileName (string fileName)
{
if (fileName == null)
throw new ArgumentNullException ("fileName");
if (fileName.Length == 0)
throw new ArgumentException ();
if (string.IsNullOrEmpty (fileName))
throw new ArgumentNullOrEmptyException (Argument.fileName.ToString ());
}
public static void CheckFullName (string fullName)
{
if (string.IsNullOrEmpty (fullName))
throw new ArgumentNullOrEmptyException (Argument.fullName.ToString ());
}
public static void CheckStream (object stream)
{
if (stream == null)
throw new ArgumentNullException ("stream");
throw new ArgumentNullException (Argument.stream.ToString ());
}
public static void CheckWriteSeek (Stream stream)
@ -1243,19 +1260,25 @@ namespace Mono.Cecil {
public static void CheckType (object type)
{
if (type == null)
throw new ArgumentNullException ("type");
throw new ArgumentNullException (Argument.type.ToString ());
}
public static void CheckType (object type, Argument argument)
{
if (type == null)
throw new ArgumentNullException (argument.ToString ());
}
public static void CheckField (object field)
{
if (field == null)
throw new ArgumentNullException ("field");
throw new ArgumentNullException (Argument.field.ToString ());
}
public static void CheckMethod (object method)
{
if (method == null)
throw new ArgumentNullException ("method");
throw new ArgumentNullException (Argument.method.ToString ());
}
#endif
@ -1263,7 +1286,12 @@ namespace Mono.Cecil {
public static void CheckParameters (object parameters)
{
if (parameters == null)
throw new ArgumentNullException ("parameters");
throw new ArgumentNullException (Argument.parameters.ToString ());
}
public static uint GetTimestamp ()
{
return (uint) DateTime.UtcNow.Subtract (new DateTime (1970, 1, 1)).TotalSeconds;
}
public static bool HasImage (this ModuleDefinition self)
@ -1271,33 +1299,13 @@ namespace Mono.Cecil {
return self != null && self.HasImage;
}
public static bool IsCoreLibrary (this ModuleDefinition module)
{
if (module.Assembly == null)
return false;
var assembly_name = module.Assembly.Name.Name;
if (assembly_name != "mscorlib" && assembly_name != "System.Runtime")
return false;
if (module.HasImage && module.Read (module, (m, reader) => reader.image.GetTableLength (Table.AssemblyRef) > 0))
return false;
return true;
}
public static string GetFileName (this Stream self)
{
#if !PCL
var file_stream = self as FileStream;
if (file_stream == null)
return string.Empty;
return Path.GetFullPath (file_stream.Name);
#else
return string.Empty;
#endif
}
#if !NET_4_0
@ -1345,7 +1353,6 @@ namespace Mono.Cecil {
return module.MetadataKind != MetadataKind.Ecma335;
}
#if !PCL
public static byte [] ReadAll (this Stream self)
{
int read;
@ -1357,7 +1364,6 @@ namespace Mono.Cecil {
return memory.ToArray ();
}
#endif
public static void Read (object o)
{