You've already forked linux-packaging-mono
Imported Upstream version 5.2.0.175
Former-commit-id: bb0468d0f257ff100aa895eb5fe583fb5dfbf900
This commit is contained in:
parent
4bdbaf4a88
commit
966bba02bb
192
external/linker/cecil/Mono.Cecil/ModuleDefinition.cs
vendored
192
external/linker/cecil/Mono.Cecil/ModuleDefinition.cs
vendored
@ -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)
|
||||
{
|
||||
|
Reference in New Issue
Block a user