Imported Upstream version 6.4.0.137

Former-commit-id: 943baa9f16a098c33e129777827f3a9d20da00d6
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2019-07-26 19:53:28 +00:00
parent e9207cf623
commit ef583813eb
2712 changed files with 74169 additions and 40587 deletions

View File

@@ -100,8 +100,6 @@ namespace Mono.Cecil {
for (int i = 0; i < modules.Count; i++)
modules [i].Dispose ();
}
#if !READ_ONLY
public static AssemblyDefinition CreateAssembly (AssemblyNameDefinition assemblyName, string moduleName, ModuleKind kind)
{
return CreateAssembly (assemblyName, moduleName, new ModuleParameters { Kind = kind });
@@ -122,7 +120,6 @@ namespace Mono.Cecil {
return assembly;
}
#endif
public static AssemblyDefinition ReadAssembly (string fileName)
{
@@ -153,8 +150,6 @@ namespace Mono.Cecil {
return assembly;
}
#if !READ_ONLY
public void Write (string fileName)
{
Write (fileName, new WriterParameters ());
@@ -184,7 +179,6 @@ namespace Mono.Cecil {
{
main_module.Write (stream, parameters);
}
#endif
public override string ToString ()
{

View File

@@ -14,11 +14,9 @@ using System.Runtime.InteropServices;
[assembly: AssemblyTitle (Consts.AssemblyName)]
#if !NET_CORE
[assembly: Guid ("fd225bb4-fa53-44b2-a6db-85f5e48dcb54")]
#endif
[assembly: InternalsVisibleTo ("Mono.Cecil.Tests, PublicKey=" + Consts.PublicKey)]
[assembly: InternalsVisibleTo ("Mono.Cecil.Pdb, PublicKey=" + Consts.PublicKey)]
[assembly: InternalsVisibleTo ("Mono.Cecil.Mdb, PublicKey=" + Consts.PublicKey)]
[assembly: InternalsVisibleTo ("Mono.Cecil.Rocks, PublicKey=" + Consts.PublicKey)]
[assembly: InternalsVisibleTo ("Mono.Cecil.Tests, PublicKey=" + Consts.PublicKey)]

View File

@@ -69,12 +69,11 @@ namespace Mono.Cecil {
if (parameters.metadata_resolver != null)
module.metadata_resolver = parameters.metadata_resolver;
#if !READ_ONLY
if (parameters.metadata_importer_provider != null)
module.metadata_importer = parameters.metadata_importer_provider.GetMetadataImporter (module);
if (parameters.reflection_importer_provider != null)
module.reflection_importer = parameters.reflection_importer_provider.GetReflectionImporter (module);
#endif
GetMetadataKind (module, parameters);

View File

@@ -13,6 +13,7 @@ using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Text;
using System.Security.Cryptography;
using Mono;
using Mono.Collections.Generic;
@@ -29,8 +30,6 @@ using GuidIndex = System.UInt32;
namespace Mono.Cecil {
#if !READ_ONLY
using ModuleRow = Row<StringIndex, GuidIndex>;
using TypeRefRow = Row<CodedRID, StringIndex, StringIndex>;
using TypeDefRow = Row<TypeAttributes, StringIndex, StringIndex, CodedRID, RID, RID>;
@@ -103,13 +102,13 @@ namespace Mono.Cecil {
if (symbol_writer_provider == null && parameters.WriteSymbols)
symbol_writer_provider = new DefaultSymbolWriterProvider ();
#if !NET_CORE
if (parameters.StrongNameKeyPair != null && name != null) {
name.PublicKey = parameters.StrongNameKeyPair.PublicKey;
module.Attributes |= ModuleAttributes.StrongNameSigned;
}
#endif
if (parameters.DeterministicMvid)
module.Mvid = Guid.Empty;
var metadata = new MetadataBuilder (module, fq_name, timestamp, symbol_writer_provider);
try {
module.metadata_builder = metadata;
@@ -122,16 +121,58 @@ namespace Mono.Cecil {
stream.value.SetLength (0);
writer.WriteImage ();
#if !NET_CORE
if (parameters.StrongNameKeyPair != null)
CryptoService.StrongName (stream.value, writer, parameters.StrongNameKeyPair);
#endif
if (parameters.DeterministicMvid) {
module.Mvid = ComputeGuid (stream.value);
writer.PatchMvid (module.Mvid);
}
}
} finally {
module.metadata_builder = null;
}
}
static void CopyStreamChunk (Stream stream, Stream dest_stream, byte [] buffer, int length)
{
while (length > 0) {
int read = stream.Read (buffer, 0, System.Math.Min (buffer.Length, length));
dest_stream.Write (buffer, 0, read);
length -= read;
}
}
static byte [] ComputeHash (Stream stream)
{
const int buffer_size = 8192;
var sha1 = new SHA1Managed ();
stream.Seek (0, SeekOrigin.Begin);
var buffer = new byte [buffer_size];
using (var crypto_stream = new CryptoStream (Stream.Null, sha1, CryptoStreamMode.Write))
CopyStreamChunk (stream, crypto_stream, buffer, (int) stream.Length);
return sha1.Hash;
}
static unsafe Guid ComputeGuid (Stream stream)
{
byte[] hashCode = ComputeHash (stream);
// From corefx/src/System.Reflection.Metadata/src/System/Reflection/Metadata/BlobContentId.cs
Guid guid = default(Guid);
byte* guidPtr = (byte*)&guid;
for (var i = 0; i < 16; i++) {
guidPtr[i] = hashCode[i];
}
// modify the guid data so it decodes to the form of a "random" guid ala rfc4122
guidPtr[7] = (byte)((guidPtr[7] & 0x0f) | (4 << 4));
guidPtr[8] = (byte)((guidPtr[8] & 0x3f) | (2 << 6));
return guid;
}
static void BuildMetadata (ModuleDefinition module, MetadataBuilder metadata)
{
if (!module.HasImage) {
@@ -1202,10 +1243,8 @@ namespace Mono.Cecil {
var table = GetTable<FileTable> (Table.File);
var hash = resource.Hash;
#if !NET_CORE
if (hash.IsNullOrEmpty ())
hash = CryptoService.ComputeHash (resource.File);
#endif
return (uint) table.AddRow (new FileRow (
FileAttributes.ContainsNoMetaData,
@@ -1923,7 +1962,7 @@ namespace Mono.Cecil {
static ElementType GetConstantType (Type type)
{
switch (type.GetTypeCode ()) {
switch (Type.GetTypeCode (type)) {
case TypeCode.Boolean:
return ElementType.Boolean;
case TypeCode.Byte:
@@ -2983,7 +3022,7 @@ namespace Mono.Cecil {
if (value == null)
throw new ArgumentNullException ();
switch (value.GetType ().GetTypeCode ()) {
switch (Type.GetTypeCode (value.GetType ())) {
case TypeCode.Boolean:
WriteByte ((byte) (((bool) value) ? 1 : 0));
break;
@@ -3296,8 +3335,6 @@ namespace Mono.Cecil {
}
}
#endif
static partial class Mixin {
public static bool TryGetUniqueDocument (this MethodDebugInformation info, out Document document)

View File

@@ -191,10 +191,7 @@ namespace Mono.Cecil {
string paths;
try {
// AppContext is only available on platforms that implement .NET Standard 1.6
var appContextType = Type.GetType ("System.AppContext, System.AppContext, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", throwOnError: false);
var getData = appContextType?.GetTypeInfo ().GetDeclaredMethod ("GetData");
paths = (string) getData?.Invoke (null, new [] { "TRUSTED_PLATFORM_ASSEMBLIES" });
paths = (string) AppDomain.CurrentDomain.GetData ("TRUSTED_PLATFORM_ASSEMBLIES");
} catch {
paths = null;
}
@@ -380,7 +377,7 @@ namespace Mono.Cecil {
return null;
}
#endif
static string GetAssemblyFile (AssemblyNameReference reference, string prefix, string gac)
{
var gac_folder = new StringBuilder ()
@@ -396,7 +393,7 @@ namespace Mono.Cecil {
Path.Combine (gac, reference.Name), gac_folder.ToString ()),
reference.Name + ".dll");
}
#endif
public void Dispose ()
{
Dispose (true);

View File

@@ -17,8 +17,6 @@ using Mono.Cecil.Metadata;
namespace Mono.Cecil {
#if !READ_ONLY
public interface IMetadataImporterProvider {
IMetadataImporter GetMetadataImporter (ModuleDefinition module);
}
@@ -155,9 +153,7 @@ namespace Mono.Cecil {
{ typeof (float), ElementType.R4 },
{ typeof (double), ElementType.R8 },
{ typeof (string), ElementType.String },
#if !NET_CORE
{ typeof (TypedReference), ElementType.TypedByRef },
#endif
{ typeof (IntPtr), ElementType.I },
{ typeof (UIntPtr), ElementType.U },
{ typeof (object), ElementType.Object },
@@ -178,7 +174,7 @@ namespace Mono.Cecil {
type.Name,
module,
ImportScope (type),
type.IsValueType ());
type.IsValueType);
reference.etype = ImportElementType (type);
@@ -187,7 +183,7 @@ namespace Mono.Cecil {
else
reference.Namespace = type.Namespace ?? string.Empty;
if (type.IsGenericType ())
if (type.IsGenericType)
ImportGenericParameters (reference, type.GetGenericArguments ());
return reference;
@@ -195,12 +191,12 @@ namespace Mono.Cecil {
protected virtual IMetadataScope ImportScope (Type type)
{
return ImportScope (type.Assembly ());
return ImportScope (type.Assembly);
}
static bool ImportOpenGenericType (Type type, ImportGenericKind import_kind)
{
return type.IsGenericType () && type.IsGenericTypeDefinition () && import_kind == ImportGenericKind.Open;
return type.IsGenericType && type.IsGenericTypeDefinition && import_kind == ImportGenericKind.Open;
}
static bool ImportOpenGenericMethod (SR.MethodBase method, ImportGenericKind import_kind)
@@ -224,7 +220,7 @@ namespace Mono.Cecil {
if (type.IsArray)
return new ArrayType (ImportType (type.GetElementType (), context), type.GetArrayRank ());
if (type.IsGenericType ())
if (type.IsGenericType)
return ImportGenericInstance (type, context);
if (type.IsGenericParameter)
@@ -238,8 +234,8 @@ namespace Mono.Cecil {
if (context.IsEmpty)
throw new InvalidOperationException ();
if (type.DeclaringMethod () != null)
return context.MethodParameter (NormalizeMethodName (type.DeclaringMethod ()), type.GenericParameterPosition);
if (type.DeclaringMethod != null)
return context.MethodParameter (NormalizeMethodName (type.DeclaringMethod), type.GenericParameterPosition);
if (type.DeclaringType != null)
return context.TypeParameter (NormalizeTypeFullName (type.DeclaringType), type.GenericParameterPosition);
@@ -287,7 +283,7 @@ namespace Mono.Cecil {
static bool IsGenericInstance (Type type)
{
return type.IsGenericType () && !type.IsGenericTypeDefinition ();
return type.IsGenericType && !type.IsGenericTypeDefinition;
}
static ElementType ImportElementType (Type type)
@@ -315,10 +311,8 @@ namespace Mono.Cecil {
reference = new AssemblyNameReference (name.Name, name.Version)
{
PublicKeyToken = name.GetPublicKeyToken (),
#if !NET_CORE
Culture = name.CultureInfo.Name,
HashAlgorithm = (AssemblyHashAlgorithm) name.HashAlgorithm,
#endif
};
module.AssemblyReferences.Add (reference);
@@ -364,20 +358,12 @@ namespace Mono.Cecil {
static SR.FieldInfo ResolveFieldDefinition (SR.FieldInfo field)
{
#if NET_CORE
throw new NotImplementedException ();
#else
return field.Module.ResolveField (field.MetadataToken);
#endif
}
static SR.MethodBase ResolveMethodDefinition (SR.MethodBase method)
{
#if NET_CORE
throw new NotImplementedException ();
#else
return method.Module.ResolveMethod (method.MetadataToken);
#endif
}
MethodReference ImportMethod (SR.MethodBase method, ImportGenericContext context, ImportGenericKind import_kind)
@@ -761,8 +747,6 @@ namespace Mono.Cecil {
}
}
#endif
static partial class Mixin {
public static void CheckModule (ModuleDefinition module)

View File

@@ -31,10 +31,8 @@ namespace Mono.Cecil {
ReadingMode reading_mode;
internal IAssemblyResolver assembly_resolver;
internal IMetadataResolver metadata_resolver;
#if !READ_ONLY
internal IMetadataImporterProvider metadata_importer_provider;
internal IReflectionImporterProvider reflection_importer_provider;
#endif
Stream symbol_stream;
ISymbolReaderProvider symbol_reader_provider;
bool read_symbols;
@@ -63,7 +61,6 @@ namespace Mono.Cecil {
set { metadata_resolver = value; }
}
#if !READ_ONLY
public IMetadataImporterProvider MetadataImporterProvider {
get { return metadata_importer_provider; }
set { metadata_importer_provider = value; }
@@ -73,7 +70,6 @@ namespace Mono.Cecil {
get { return reflection_importer_provider; }
set { reflection_importer_provider = value; }
}
#endif
public Stream SymbolStream {
get { return symbol_stream; }
@@ -117,8 +113,6 @@ namespace Mono.Cecil {
}
}
#if !READ_ONLY
public sealed class ModuleParameters {
ModuleKind kind;
@@ -127,10 +121,8 @@ namespace Mono.Cecil {
TargetArchitecture architecture;
IAssemblyResolver assembly_resolver;
IMetadataResolver metadata_resolver;
#if !READ_ONLY
IMetadataImporterProvider metadata_importer_provider;
IReflectionImporterProvider reflection_importer_provider;
#endif
public ModuleKind Kind {
get { return kind; }
@@ -162,7 +154,6 @@ namespace Mono.Cecil {
set { metadata_resolver = value; }
}
#if !READ_ONLY
public IMetadataImporterProvider MetadataImporterProvider {
get { return metadata_importer_provider; }
set { metadata_importer_provider = value; }
@@ -172,7 +163,6 @@ namespace Mono.Cecil {
get { return reflection_importer_provider; }
set { reflection_importer_provider = value; }
}
#endif
public ModuleParameters ()
{
@@ -183,25 +173,7 @@ namespace Mono.Cecil {
static TargetRuntime GetCurrentRuntime ()
{
#if !NET_CORE
return typeof (object).Assembly.ImageRuntimeVersion.ParseRuntime ();
#else
var corlib_name = AssemblyNameReference.Parse (typeof (object).Assembly ().FullName);
var corlib_version = corlib_name.Version;
switch (corlib_version.Major) {
case 1:
return corlib_version.Minor == 0
? TargetRuntime.Net_1_0
: TargetRuntime.Net_1_1;
case 2:
return TargetRuntime.Net_2_0;
case 4:
return TargetRuntime.Net_4_0;
default:
throw new NotSupportedException ();
}
#endif
}
}
@@ -227,9 +199,7 @@ namespace Mono.Cecil {
Stream symbol_stream;
ISymbolWriterProvider symbol_writer_provider;
bool write_symbols;
#if !NET_CORE
SR.StrongNameKeyPair key_pair;
#endif
public uint? Timestamp {
get { return timestamp; }
@@ -251,15 +221,13 @@ namespace Mono.Cecil {
set { write_symbols = value; }
}
#if !NET_CORE
public SR.StrongNameKeyPair StrongNameKeyPair {
get { return key_pair; }
set { key_pair = value; }
}
#endif
}
#endif
public bool DeterministicMvid { get; set; }
}
public sealed class ModuleDefinition : ModuleReference, ICustomAttributeProvider, ICustomDebugInformationProvider, IDisposable {
@@ -293,11 +261,10 @@ namespace Mono.Cecil {
internal AssemblyDefinition assembly;
MethodDefinition entry_point;
#if !READ_ONLY
internal IReflectionImporter reflection_importer;
internal IMetadataImporter metadata_importer;
ICustomMetadataWriter custom_writer;
#endif
Collection<CustomAttribute> custom_attributes;
Collection<AssemblyNameReference> references;
Collection<ModuleReference> modules;
@@ -307,9 +274,7 @@ namespace Mono.Cecil {
internal Collection<CustomDebugInformation> custom_infos;
#if !READ_ONLY
internal MetadataBuilder metadata_builder;
#endif
public bool IsMain {
get { return kind != ModuleKind.NetModule; }
@@ -399,7 +364,6 @@ namespace Mono.Cecil {
get { return assembly; }
}
#if !READ_ONLY
internal IReflectionImporter ReflectionImporter {
get {
if (reflection_importer == null)
@@ -429,7 +393,6 @@ namespace Mono.Cecil {
get { return custom_writer; }
set { custom_writer = value; }
}
#endif
public IAssemblyResolver AssemblyResolver {
get {
@@ -783,8 +746,6 @@ namespace Mono.Cecil {
return MetadataResolver.Resolve (type);
}
#if !READ_ONLY
static void CheckContext (IGenericParameterProvider context, ModuleDefinition module)
{
if (context == null)
@@ -956,8 +917,6 @@ namespace Mono.Cecil {
return MetadataImporter.ImportReference (method, context);
}
#endif
public IMetadataTokenProvider LookupToken (int token)
{
return LookupToken (new MetadataToken ((uint) token));
@@ -1029,8 +988,6 @@ namespace Mono.Cecil {
return Image.DebugHeader ?? new ImageDebugHeader ();
}
#if !READ_ONLY
public static ModuleDefinition CreateModule (string name, ModuleKind kind)
{
return CreateModule (name, new ModuleParameters { Kind = kind });
@@ -1058,12 +1015,11 @@ namespace Mono.Cecil {
if (parameters.MetadataResolver != null)
module.metadata_resolver = parameters.MetadataResolver;
#if !READ_ONLY
if (parameters.MetadataImporterProvider != null)
module.metadata_importer = parameters.MetadataImporterProvider.GetMetadataImporter (module);
if (parameters.ReflectionImporterProvider != null)
module.reflection_importer = parameters.ReflectionImporterProvider.GetReflectionImporter (module);
#endif
if (parameters.Kind != ModuleKind.NetModule) {
var assembly = new AssemblyDefinition ();
@@ -1085,8 +1041,6 @@ namespace Mono.Cecil {
return new AssemblyNameDefinition (name, Mixin.ZeroVersion);
}
#endif
public void ReadSymbols ()
{
if (string.IsNullOrEmpty (file_name))
@@ -1178,8 +1132,6 @@ namespace Mono.Cecil {
parameters);
}
#if !READ_ONLY
public void Write (string fileName)
{
Write (fileName, new WriterParameters ());
@@ -1218,9 +1170,6 @@ namespace Mono.Cecil {
ModuleWriter.WriteModule (this, Disposable.NotOwned (stream), parameters);
}
#endif
}
static partial class Mixin {
@@ -1335,16 +1284,6 @@ namespace Mono.Cecil {
return Path.GetFullPath (file_stream.Name);
}
#if !NET_4_0
public static void CopyTo (this Stream self, Stream target)
{
var buffer = new byte [1024 * 8];
int read;
while ((read = self.Read (buffer, 0, buffer.Length)) > 0)
target.Write (buffer, 0, read);
}
#endif
public static TargetRuntime ParseRuntime (this string self)
{
if (string.IsNullOrEmpty (self))