Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/cecil.pc.in2
-rw-r--r--mcs/class/Mono.Cecil.Mdb/Mono.Cecil.Mdb/AssemblyInfo.cs6
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil.Cil/CodeWriter.cs3
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil.PE/ByteBuffer.cs29
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil.PE/ImageReader.cs3
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil/AssemblyInfo.cs6
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil/AssemblyReader.cs20
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil/AssemblyWriter.cs14
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil/BaseAssemblyResolver.cs12
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil/GenericParameter.cs100
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil/ICustomAttributeProvider.cs4
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil/IGenericParameterProvider.cs6
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil/IMarshalInfoProvider.cs4
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil/MetadataResolver.cs84
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil/MethodReference.cs2
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil/MethodReturnType.cs5
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil/ModuleDefinition.cs49
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil/SecurityDeclaration.cs17
-rw-r--r--mcs/class/Mono.Cecil/Mono.Cecil/TypeReference.cs2
-rw-r--r--mcs/class/Mono.Cecil/revision2
20 files changed, 285 insertions, 85 deletions
diff --git a/data/cecil.pc.in b/data/cecil.pc.in
index 067872a5274..59450b40006 100644
--- a/data/cecil.pc.in
+++ b/data/cecil.pc.in
@@ -1,5 +1,5 @@
assemblies_dir=@prefix@/lib/mono
-Libraries=${assemblies_dir}/gac/Mono.Cecil/0.9.4.0__0738eb9f132ed756/Mono.Cecil.dll
+Libraries=${assemblies_dir}/gac/Mono.Cecil/0.9.5.0__0738eb9f132ed756/Mono.Cecil.dll
Name: Mono Internal -- Do not use.
Description: Mono Internal Libraries -- Do not use
diff --git a/mcs/class/Mono.Cecil.Mdb/Mono.Cecil.Mdb/AssemblyInfo.cs b/mcs/class/Mono.Cecil.Mdb/Mono.Cecil.Mdb/AssemblyInfo.cs
index 277272a5f8e..8186b506bc6 100644
--- a/mcs/class/Mono.Cecil.Mdb/Mono.Cecil.Mdb/AssemblyInfo.cs
+++ b/mcs/class/Mono.Cecil.Mdb/Mono.Cecil.Mdb/AssemblyInfo.cs
@@ -32,10 +32,10 @@ using System.Runtime.InteropServices;
[assembly: AssemblyTitle ("Mono.Cecil.Mdb")]
[assembly: AssemblyProduct ("Mono.Cecil")]
-[assembly: AssemblyCopyright ("Copyright © 2008 - 2010 Jb Evain")]
+[assembly: AssemblyCopyright ("Copyright © 2008 - 2011 Jb Evain")]
[assembly: CLSCompliant (false)]
[assembly: ComVisible (false)]
-[assembly: AssemblyVersion ("0.9.4.0")]
-[assembly: AssemblyFileVersion ("0.9.4.0")]
+[assembly: AssemblyVersion ("0.9.5.0")]
+[assembly: AssemblyFileVersion ("0.9.5.0")]
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil.Cil/CodeWriter.cs b/mcs/class/Mono.Cecil/Mono.Cecil.Cil/CodeWriter.cs
index 2412034386c..02876aad5af 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil.Cil/CodeWriter.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil.Cil/CodeWriter.cs
@@ -519,6 +519,9 @@ namespace Mono.Cecil.Cil {
static bool IsFatRange (Instruction start, Instruction end)
{
+ if (start == null)
+ throw new ArgumentException ();
+
if (end == null)
return true;
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil.PE/ByteBuffer.cs b/mcs/class/Mono.Cecil/Mono.Cecil.PE/ByteBuffer.cs
index 1f94cde0083..c7ae7aee132 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil.PE/ByteBuffer.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil.PE/ByteBuffer.cs
@@ -140,11 +140,16 @@ namespace Mono.Cecil.PE {
public int ReadCompressedInt32 ()
{
- var value = (int) ReadCompressedUInt32 ();
-
- return (value & 1) != 0
- ? -(value >> 1)
- : value >> 1;
+ var value = (int) (ReadCompressedUInt32 () >> 1);
+ if ((value & 1) == 0)
+ return value;
+ if (value < 0x40)
+ return value - 0x40;
+ if (value < 0x2000)
+ return value - 0x2000;
+ if (value < 0x10000000)
+ return value - 0x10000000;
+ return value - 0x20000000;
}
public float ReadSingle ()
@@ -267,7 +272,19 @@ namespace Mono.Cecil.PE {
public void WriteCompressedInt32 (int value)
{
- WriteCompressedUInt32 ((uint) ((value < 0) ? ((-value) << 1) | 1 : value << 1));
+ if (value >= 0) {
+ WriteCompressedUInt32 ((uint) (value << 1));
+ return;
+ }
+
+ if (value > -0x40)
+ value = 0x40 + value;
+ else if (value >= -0x2000)
+ value = 0x2000 + value;
+ else if (value >= -0x20000000)
+ value = 0x20000000 + value;
+
+ WriteCompressedUInt32 ((uint) ((value << 1) | 1));
}
public void WriteBytes (byte [] bytes)
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil.PE/ImageReader.cs b/mcs/class/Mono.Cecil/Mono.Cecil.PE/ImageReader.cs
index ebd4c6b85fa..734b00a5345 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil.PE/ImageReader.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil.PE/ImageReader.cs
@@ -276,9 +276,6 @@ namespace Mono.Cecil.PE {
sections [i] = section;
- if (section.Name == ".reloc")
- continue;
-
ReadSectionData (section);
}
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil/AssemblyInfo.cs b/mcs/class/Mono.Cecil/Mono.Cecil/AssemblyInfo.cs
index ffac8eab690..8a9f8097e10 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil/AssemblyInfo.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil/AssemblyInfo.cs
@@ -32,15 +32,15 @@ using System.Runtime.InteropServices;
[assembly: AssemblyTitle ("Mono.Cecil")]
[assembly: AssemblyProduct ("Mono.Cecil")]
-[assembly: AssemblyCopyright ("Copyright © 2008 - 2010 Jb Evain")]
+[assembly: AssemblyCopyright ("Copyright © 2008 - 2011 Jb Evain")]
[assembly: ComVisible (false)]
[assembly: Guid ("fd225bb4-fa53-44b2-a6db-85f5e48dcb54")]
-[assembly: AssemblyVersion ("0.9.4.0")]
+[assembly: AssemblyVersion ("0.9.5.0")]
#if !CF
-[assembly: AssemblyFileVersion ("0.9.4.0")]
+[assembly: AssemblyFileVersion ("0.9.5.0")]
#endif
[assembly: InternalsVisibleTo ("Mono.Cecil.Pdb, PublicKey=002400000480000094000000060200000024000052534131000400000100010079159977d2d03a8e6bea7a2e74e8d1afcc93e8851974952bb480a12c9134474d04062447c37e0e68c080536fcf3c3fbe2ff9c979ce998475e506e8ce82dd5b0f350dc10e93bf2eeecf874b24770c5081dbea7447fddafa277b22de47d6ffea449674a4f9fccf84d15069089380284dbdd35f46cdff12a1bd78e4ef0065d016df")]
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil/AssemblyReader.cs b/mcs/class/Mono.Cecil/Mono.Cecil/AssemblyReader.cs
index 96d0e5ad601..f412d74621d 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil/AssemblyReader.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil/AssemblyReader.cs
@@ -85,6 +85,9 @@ namespace Mono.Cecil {
if (parameters.AssemblyResolver != null)
module.assembly_resolver = parameters.AssemblyResolver;
+ if (parameters.MetadataResolver != null)
+ module.metadata_resolver = parameters.MetadataResolver;
+
return module;
}
@@ -1795,11 +1798,11 @@ namespace Mono.Cecil {
Range range;
if (!metadata.TryGetGenericParameterRange (provider, out range)
|| !MoveTo (Table.GenericParam, range.Start))
- return new Collection<GenericParameter> ();
+ return new GenericParameterCollection (provider);
metadata.RemoveGenericParameterRange (provider);
- var generic_parameters = new Collection<GenericParameter> ((int) range.Length);
+ var generic_parameters = new GenericParameterCollection (provider, (int) range.Length);
for (uint i = 0; i < range.Length; i++) {
ReadUInt16 (); // index
@@ -2644,9 +2647,10 @@ namespace Mono.Cecil {
GenericParameter GetGenericParameter (GenericParameterType type, uint var)
{
var context = reader.context;
+ int index = (int) var;
if (context == null)
- throw new NotSupportedException ();
+ return GetUnboundGenericParameter (type, index);
IGenericParameterProvider provider;
@@ -2661,14 +2665,20 @@ namespace Mono.Cecil {
throw new NotSupportedException ();
}
- int index = (int) var;
-
if (!context.IsDefinition)
CheckGenericContext (provider, index);
+ if (index >= provider.GenericParameters.Count)
+ return GetUnboundGenericParameter (type, index);
+
return provider.GenericParameters [index];
}
+ static GenericParameter GetUnboundGenericParameter (GenericParameterType type, int index)
+ {
+ return new GenericParameter (index, type);
+ }
+
static void CheckGenericContext (IGenericParameterProvider owner, int index)
{
var owner_parameters = owner.GenericParameters;
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil/AssemblyWriter.cs b/mcs/class/Mono.Cecil/Mono.Cecil/AssemblyWriter.cs
index f05bf821cef..bf41d5b720c 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil/AssemblyWriter.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil/AssemblyWriter.cs
@@ -935,11 +935,13 @@ namespace Mono.Cecil {
? reference.PublicKeyToken
: reference.PublicKey;
+ var version = reference.Version;
+
var rid = table.AddRow (new AssemblyRefRow (
- (ushort) reference.Version.Major,
- (ushort) reference.Version.Minor,
- (ushort) reference.Version.Build,
- (ushort) reference.Version.Revision,
+ (ushort) version.Major,
+ (ushort) version.Minor,
+ (ushort) version.Build,
+ (ushort) version.Revision,
reference.Attributes,
GetBlobIndex (key_or_token),
GetStringIndex (reference.Name),
@@ -2448,12 +2450,12 @@ namespace Mono.Cecil {
var count = GetNamedArgumentCount (attribute);
if (count == 0) {
- WriteCompressedUInt32 (0); // length
+ WriteCompressedUInt32 (1); // length
WriteCompressedUInt32 (0); // count
return;
}
- var buffer = new SignatureWriter (metadata);
+ var buffer = new SignatureWriter (metadata);
buffer.WriteCompressedUInt32 ((uint) count);
buffer.WriteICustomAttributeNamedArguments (attribute);
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil/BaseAssemblyResolver.cs b/mcs/class/Mono.Cecil/Mono.Cecil/BaseAssemblyResolver.cs
index 140cc96c0b7..10ab2c34a86 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil/BaseAssemblyResolver.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil/BaseAssemblyResolver.cs
@@ -51,6 +51,9 @@ namespace Mono.Cecil {
}
}
+#if !SILVERLIGHT && !CF
+ [Serializable]
+#endif
public class AssemblyResolutionException : FileNotFoundException {
readonly AssemblyNameReference reference;
@@ -64,6 +67,15 @@ namespace Mono.Cecil {
{
this.reference = reference;
}
+
+#if !SILVERLIGHT && !CF
+ protected AssemblyResolutionException (
+ System.Runtime.Serialization.SerializationInfo info,
+ System.Runtime.Serialization.StreamingContext context)
+ : base (info, context)
+ {
+ }
+#endif
}
public abstract class BaseAssemblyResolver : IAssemblyResolver {
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil/GenericParameter.cs b/mcs/class/Mono.Cecil/Mono.Cecil/GenericParameter.cs
index 2d0c19031d4..664f00aae2a 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil/GenericParameter.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil/GenericParameter.cs
@@ -36,7 +36,9 @@ namespace Mono.Cecil {
public sealed class GenericParameter : TypeReference, ICustomAttributeProvider {
- readonly IGenericParameterProvider owner;
+ internal int position;
+ internal GenericParameterType type;
+ internal IGenericParameterProvider owner;
ushort attributes;
Collection<TypeReference> constraints;
@@ -48,12 +50,11 @@ namespace Mono.Cecil {
}
public int Position {
- get {
- if (owner == null)
- return -1;
+ get { return position; }
+ }
- return owner.GenericParameters.IndexOf (this);
- }
+ public GenericParameterType Type {
+ get { return type; }
}
public IGenericParameterProvider Owner {
@@ -99,15 +100,17 @@ namespace Mono.Cecil {
public override IMetadataScope Scope {
get {
- if (owner.GenericParameterType == GenericParameterType.Method)
- return ((MethodReference) owner).DeclaringType.Scope;
+ if (owner == null)
+ return null;
- return ((TypeReference) owner).Scope;
+ return owner.GenericParameterType == GenericParameterType.Method
+ ? ((MethodReference) owner).DeclaringType.Scope
+ : ((TypeReference) owner).Scope;
}
}
public override ModuleDefinition Module {
- get { return ((MemberReference) owner).Module; }
+ get { return owner != null ? owner.Module : null; }
}
public override string Name {
@@ -115,7 +118,7 @@ namespace Mono.Cecil {
if (!string.IsNullOrEmpty (base.Name))
return base.Name;
- return base.Name = (owner.GenericParameterType == GenericParameterType.Type ? "!" : "!!") + Position;
+ return base.Name = (type == GenericParameterType.Method ? "!!" : "!") + position;
}
}
@@ -185,8 +188,30 @@ namespace Mono.Cecil {
if (owner == null)
throw new ArgumentNullException ();
+ this.position = -1;
this.owner = owner;
- this.etype = owner.GenericParameterType == GenericParameterType.Type ? ElementType.Var : ElementType.MVar;
+ this.type = owner.GenericParameterType;
+ this.etype = ConvertGenericParameterType (this.type);
+ }
+
+ public GenericParameter (int position, GenericParameterType type)
+ : base (string.Empty, string.Empty)
+ {
+ this.position = position;
+ this.type = type;
+ this.etype = ConvertGenericParameterType (type);
+ }
+
+ static ElementType ConvertGenericParameterType (GenericParameterType type)
+ {
+ switch (type) {
+ case GenericParameterType.Type:
+ return ElementType.Var;
+ case GenericParameterType.Method:
+ return ElementType.MVar;
+ }
+
+ throw new ArgumentOutOfRangeException ();
}
public override TypeDefinition Resolve ()
@@ -194,4 +219,55 @@ namespace Mono.Cecil {
return null;
}
}
+
+ sealed class GenericParameterCollection : Collection<GenericParameter> {
+
+ readonly IGenericParameterProvider owner;
+
+ internal GenericParameterCollection (IGenericParameterProvider owner)
+ {
+ this.owner = owner;
+ }
+
+ internal GenericParameterCollection (IGenericParameterProvider owner, int capacity)
+ : base (capacity)
+ {
+ this.owner = owner;
+ }
+
+ protected override void OnAdd (GenericParameter item, int index)
+ {
+ UpdateGenericParameter (item, index);
+ }
+
+ protected override void OnInsert (GenericParameter item, int index)
+ {
+ UpdateGenericParameter (item, index);
+
+ for (int i = index; i < size; i++)
+ items[i].position = i + 1;
+ }
+
+ protected override void OnSet (GenericParameter item, int index)
+ {
+ UpdateGenericParameter (item, index);
+ }
+
+ void UpdateGenericParameter (GenericParameter item, int index)
+ {
+ item.owner = owner;
+ item.position = index;
+ item.type = owner.GenericParameterType;
+ }
+
+ protected override void OnRemove (GenericParameter item, int index)
+ {
+ item.owner = null;
+ item.position = -1;
+ item.type = GenericParameterType.Type;
+
+ for (int i = index + 1; i < size; i++)
+ items[i].position = i - 1;
+ }
+ }
}
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil/ICustomAttributeProvider.cs b/mcs/class/Mono.Cecil/Mono.Cecil/ICustomAttributeProvider.cs
index 2e3e8e5e75f..916ba0f5415 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil/ICustomAttributeProvider.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil/ICustomAttributeProvider.cs
@@ -45,9 +45,7 @@ namespace Mono.Cecil {
this ICustomAttributeProvider self,
ModuleDefinition module)
{
- return module.HasImage ()
- ? module.Read (self, (provider, reader) => reader.HasCustomAttributes (provider))
- : false;
+ return module.HasImage () && module.Read (self, (provider, reader) => reader.HasCustomAttributes (provider));
}
public static Collection<CustomAttribute> GetCustomAttributes (
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil/IGenericParameterProvider.cs b/mcs/class/Mono.Cecil/Mono.Cecil/IGenericParameterProvider.cs
index 4fc4ce1b9b0..d41b7f6d08e 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil/IGenericParameterProvider.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil/IGenericParameterProvider.cs
@@ -58,9 +58,7 @@ namespace Mono.Cecil {
this IGenericParameterProvider self,
ModuleDefinition module)
{
- return module.HasImage ()
- ? module.Read (self, (provider, reader) => reader.HasGenericParameters (provider))
- : false;
+ return module.HasImage () && module.Read (self, (provider, reader) => reader.HasGenericParameters (provider));
}
public static Collection<GenericParameter> GetGenericParameters (
@@ -69,7 +67,7 @@ namespace Mono.Cecil {
{
return module.HasImage ()
? module.Read (self, (provider, reader) => reader.ReadGenericParameters (provider))
- : new Collection<GenericParameter> ();
+ : new GenericParameterCollection (self);
}
}
}
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil/IMarshalInfoProvider.cs b/mcs/class/Mono.Cecil/Mono.Cecil/IMarshalInfoProvider.cs
index de83cf632e5..67a53a389f2 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil/IMarshalInfoProvider.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil/IMarshalInfoProvider.cs
@@ -40,9 +40,7 @@ namespace Mono.Cecil {
this IMarshalInfoProvider self,
ModuleDefinition module)
{
- return module.HasImage ()
- ? module.Read (self, (provider, reader) => reader.HasMarshalInfo (provider))
- : false;
+ return module.HasImage () && module.Read (self, (provider, reader) => reader.HasMarshalInfo (provider));
}
public static MarshalInfo GetMarshalInfo (
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil/MetadataResolver.cs b/mcs/class/Mono.Cecil/Mono.Cecil/MetadataResolver.cs
index 0b912e362c2..e69fcd71507 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil/MetadataResolver.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil/MetadataResolver.cs
@@ -27,7 +27,6 @@
//
using System;
-using System.Collections.Generic;
using Mono.Collections.Generic;
@@ -41,6 +40,15 @@ namespace Mono.Cecil {
AssemblyDefinition Resolve (string fullName, ReaderParameters parameters);
}
+ public interface IMetadataResolver {
+ TypeDefinition Resolve (TypeReference type);
+ FieldDefinition Resolve (FieldReference field);
+ MethodDefinition Resolve (MethodReference method);
+ }
+
+#if !SILVERLIGHT && !CF
+ [Serializable]
+#endif
public class ResolutionException : Exception {
readonly MemberReference member;
@@ -54,31 +62,57 @@ namespace Mono.Cecil {
{
this.member = member;
}
+
+#if !SILVERLIGHT && !CF
+ protected ResolutionException (
+ System.Runtime.Serialization.SerializationInfo info,
+ System.Runtime.Serialization.StreamingContext context)
+ : base (info, context)
+ {
+ }
+#endif
}
- static class MetadataResolver {
+ public class MetadataResolver : IMetadataResolver {
+
+ readonly IAssemblyResolver assembly_resolver;
+
+ public IAssemblyResolver AssemblyResolver {
+ get { return assembly_resolver; }
+ }
+
+ public MetadataResolver (IAssemblyResolver assemblyResolver)
+ {
+ if (assemblyResolver == null)
+ throw new ArgumentNullException ("assemblyResolver");
+
+ assembly_resolver = assemblyResolver;
+ }
- public static TypeDefinition Resolve (IAssemblyResolver resolver, TypeReference type)
+ public virtual TypeDefinition Resolve (TypeReference type)
{
+ if (type == null)
+ throw new ArgumentNullException ("type");
+
type = type.GetElementType ();
var scope = type.Scope;
switch (scope.MetadataScopeType) {
case MetadataScopeType.AssemblyNameReference:
- var assembly = resolver.Resolve ((AssemblyNameReference) scope);
+ var assembly = assembly_resolver.Resolve ((AssemblyNameReference) scope);
if (assembly == null)
return null;
- return GetType (resolver, assembly.MainModule, type);
+ return GetType (assembly.MainModule, type);
case MetadataScopeType.ModuleDefinition:
- return GetType (resolver, (ModuleDefinition) scope, type);
+ return GetType ((ModuleDefinition) scope, type);
case MetadataScopeType.ModuleReference:
var modules = type.Module.Assembly.Modules;
var module_ref = (ModuleReference) scope;
for (int i = 0; i < modules.Count; i++) {
var netmodule = modules [i];
if (netmodule.Name == module_ref.Name)
- return GetType (resolver, netmodule, type);
+ return GetType (netmodule, type);
}
break;
}
@@ -86,9 +120,9 @@ namespace Mono.Cecil {
throw new NotSupportedException ();
}
- static TypeDefinition GetType (IAssemblyResolver resolver, ModuleDefinition module, TypeReference reference)
+ static TypeDefinition GetType (ModuleDefinition module, TypeReference reference)
{
- var type = GetType (module, reference);
+ var type = GetTypeDefinition (module, reference);
if (type != null)
return type;
@@ -111,7 +145,7 @@ namespace Mono.Cecil {
return null;
}
- static TypeDefinition GetType (ModuleDefinition module, TypeReference type)
+ static TypeDefinition GetTypeDefinition (ModuleDefinition module, TypeReference type)
{
if (!type.IsNested)
return module.GetType (type.Namespace, type.Name);
@@ -123,19 +157,22 @@ namespace Mono.Cecil {
return declaring_type.GetNestedType (type.Name);
}
- public static FieldDefinition Resolve (IAssemblyResolver resolver, FieldReference field)
+ public virtual FieldDefinition Resolve (FieldReference field)
{
- var type = Resolve (resolver, field.DeclaringType);
+ if (field == null)
+ throw new ArgumentNullException ("field");
+
+ var type = Resolve (field.DeclaringType);
if (type == null)
return null;
if (!type.HasFields)
return null;
- return GetField (resolver, type, field);
+ return GetField (type, field);
}
- static FieldDefinition GetField (IAssemblyResolver resolver, TypeDefinition type, FieldReference reference)
+ FieldDefinition GetField (TypeDefinition type, FieldReference reference)
{
while (type != null) {
var field = GetField (type.Fields, reference);
@@ -145,13 +182,13 @@ namespace Mono.Cecil {
if (type.BaseType == null)
return null;
- type = Resolve (resolver, type.BaseType);
+ type = Resolve (type.BaseType);
}
return null;
}
- static FieldDefinition GetField (IList<FieldDefinition> fields, FieldReference reference)
+ static FieldDefinition GetField (Collection<FieldDefinition> fields, FieldReference reference)
{
for (int i = 0; i < fields.Count; i++) {
var field = fields [i];
@@ -168,9 +205,12 @@ namespace Mono.Cecil {
return null;
}
- public static MethodDefinition Resolve (IAssemblyResolver resolver, MethodReference method)
+ public virtual MethodDefinition Resolve (MethodReference method)
{
- var type = Resolve (resolver, method.DeclaringType);
+ if (method == null)
+ throw new ArgumentNullException ("method");
+
+ var type = Resolve (method.DeclaringType);
if (type == null)
return null;
@@ -179,10 +219,10 @@ namespace Mono.Cecil {
if (!type.HasMethods)
return null;
- return GetMethod (resolver, type, method);
+ return GetMethod (type, method);
}
- static MethodDefinition GetMethod (IAssemblyResolver resolver, TypeDefinition type, MethodReference reference)
+ MethodDefinition GetMethod (TypeDefinition type, MethodReference reference)
{
while (type != null) {
var method = GetMethod (type.Methods, reference);
@@ -192,13 +232,13 @@ namespace Mono.Cecil {
if (type.BaseType == null)
return null;
- type = Resolve (resolver, type.BaseType);
+ type = Resolve (type.BaseType);
}
return null;
}
- public static MethodDefinition GetMethod (IList<MethodDefinition> methods, MethodReference reference)
+ public static MethodDefinition GetMethod (Collection<MethodDefinition> methods, MethodReference reference)
{
for (int i = 0; i < methods.Count; i++) {
var method = methods [i];
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil/MethodReference.cs b/mcs/class/Mono.Cecil/Mono.Cecil/MethodReference.cs
index 21de336735c..0adab452ef7 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil/MethodReference.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil/MethodReference.cs
@@ -99,7 +99,7 @@ namespace Mono.Cecil {
if (generic_parameters != null)
return generic_parameters;
- return generic_parameters = new Collection<GenericParameter> ();
+ return generic_parameters = new GenericParameterCollection (this);
}
}
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil/MethodReturnType.cs b/mcs/class/Mono.Cecil/Mono.Cecil/MethodReturnType.cs
index f2d3c00f89e..f2e2eaa3201 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil/MethodReturnType.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil/MethodReturnType.cs
@@ -55,6 +55,11 @@ namespace Mono.Cecil {
set { Parameter.MetadataToken = value; }
}
+ public ParameterAttributes Attributes {
+ get { return Parameter.Attributes; }
+ set { Parameter.Attributes = value; }
+ }
+
public bool HasCustomAttributes {
get { return parameter != null && parameter.HasCustomAttributes; }
}
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil/ModuleDefinition.cs b/mcs/class/Mono.Cecil/Mono.Cecil/ModuleDefinition.cs
index ecfbf82b80d..0d137e065cb 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil/ModuleDefinition.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil/ModuleDefinition.cs
@@ -47,6 +47,7 @@ namespace Mono.Cecil {
ReadingMode reading_mode;
IAssemblyResolver assembly_resolver;
+ IMetadataResolver metadata_resolver;
Stream symbol_stream;
ISymbolReaderProvider symbol_reader_provider;
bool read_symbols;
@@ -61,6 +62,11 @@ namespace Mono.Cecil {
set { assembly_resolver = value; }
}
+ public IMetadataResolver MetadataResolver {
+ get { return metadata_resolver; }
+ set { metadata_resolver = value; }
+ }
+
public Stream SymbolStream {
get { return symbol_stream; }
set { symbol_stream = value; }
@@ -95,6 +101,7 @@ namespace Mono.Cecil {
TargetRuntime runtime;
TargetArchitecture architecture;
IAssemblyResolver assembly_resolver;
+ IMetadataResolver metadata_resolver;
public ModuleKind Kind {
get { return kind; }
@@ -116,6 +123,11 @@ namespace Mono.Cecil {
set { assembly_resolver = value; }
}
+ public IMetadataResolver MetadataResolver {
+ get { return metadata_resolver; }
+ set { metadata_resolver = value; }
+ }
+
public ModuleParameters ()
{
this.kind = ModuleKind.Dll;
@@ -186,6 +198,7 @@ namespace Mono.Cecil {
internal ISymbolReader SymbolReader;
internal IAssemblyResolver assembly_resolver;
+ internal IMetadataResolver metadata_resolver;
internal TypeSystem type_system;
readonly MetadataReader reader;
@@ -269,6 +282,10 @@ namespace Mono.Cecil {
get { return assembly_resolver; }
}
+ public IMetadataResolver MetadataResolver {
+ get { return metadata_resolver ?? (metadata_resolver = new MetadataResolver (assembly_resolver)); }
+ }
+
public TypeSystem TypeSystem {
get { return type_system ?? (type_system = TypeSystem.CreateTypeSystem (this)); }
}
@@ -480,6 +497,13 @@ namespace Mono.Cecil {
return Read (this, (_, reader) => reader.GetMemberReferences ());
}
+ public TypeReference GetType (string fullName, bool runtimeName)
+ {
+ return runtimeName
+ ? TypeParser.ParseType (this, fullName)
+ : GetType (fullName);
+ }
+
public TypeDefinition GetType (string fullName)
{
CheckFullName (fullName);
@@ -547,17 +571,17 @@ namespace Mono.Cecil {
internal FieldDefinition Resolve (FieldReference field)
{
- return MetadataResolver.Resolve (AssemblyResolver, field);
+ return MetadataResolver.Resolve (field);
}
internal MethodDefinition Resolve (MethodReference method)
{
- return MetadataResolver.Resolve (AssemblyResolver, method);
+ return MetadataResolver.Resolve (method);
}
internal TypeDefinition Resolve (TypeReference type)
{
- return MetadataResolver.Resolve (AssemblyResolver, type);
+ return MetadataResolver.Resolve (type);
}
#if !READ_ONLY
@@ -832,10 +856,13 @@ namespace Mono.Cecil {
if (parameters.AssemblyResolver != null)
module.assembly_resolver = parameters.AssemblyResolver;
+ if (parameters.MetadataResolver != null)
+ module.metadata_resolver = parameters.MetadataResolver;
+
if (parameters.Kind != ModuleKind.NetModule) {
var assembly = new AssemblyDefinition ();
module.assembly = assembly;
- module.assembly.Name = new AssemblyNameDefinition (name, new Version (0, 0));
+ module.assembly.Name = CreateAssemblyName (name);
assembly.main_module = module;
}
@@ -844,6 +871,14 @@ namespace Mono.Cecil {
return module;
}
+ static AssemblyNameDefinition CreateAssemblyName (string name)
+ {
+ if (name.EndsWith (".dll") || name.EndsWith (".exe"))
+ name = name.Substring (0, name.Length - 4);
+
+ return new AssemblyNameDefinition (name, new Version (0, 0, 0, 0));
+ }
+
#endif
public void ReadSymbols ()
@@ -852,10 +887,10 @@ namespace Mono.Cecil {
throw new InvalidOperationException ();
var provider = SymbolProvider.GetPlatformReaderProvider ();
+ if (provider == null)
+ throw new InvalidOperationException ();
- SymbolReader = provider.GetSymbolReader (this, fq_name);
-
- ProcessDebugHeader ();
+ ReadSymbols (provider.GetSymbolReader (this, fq_name));
}
public void ReadSymbols (ISymbolReader reader)
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil/SecurityDeclaration.cs b/mcs/class/Mono.Cecil/Mono.Cecil/SecurityDeclaration.cs
index ecafbc24a6b..837472a1199 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil/SecurityDeclaration.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil/SecurityDeclaration.cs
@@ -93,6 +93,7 @@ namespace Mono.Cecil {
public sealed class SecurityDeclaration {
readonly internal uint signature;
+ byte [] blob;
readonly ModuleDefinition module;
internal bool resolved;
@@ -137,12 +138,22 @@ namespace Mono.Cecil {
this.resolved = true;
}
+ public SecurityDeclaration (SecurityAction action, byte [] blob)
+ {
+ this.action = action;
+ this.resolved = false;
+ this.blob = blob;
+ }
+
public byte [] GetBlob ()
{
+ if (blob != null)
+ return blob;
+
if (!HasImage || signature == 0)
throw new NotSupportedException ();
- return module.Read (this, (declaration, reader) => reader.ReadSecurityDeclarationBlob (declaration.signature));
+ return blob = module.Read (this, (declaration, reader) => reader.ReadSecurityDeclarationBlob (declaration.signature));
}
void Resolve ()
@@ -165,9 +176,7 @@ namespace Mono.Cecil {
this ISecurityDeclarationProvider self,
ModuleDefinition module)
{
- return module.HasImage ()
- ? module.Read (self, (provider, reader) => reader.HasSecurityDeclarations (provider))
- : false;
+ return module.HasImage () && module.Read (self, (provider, reader) => reader.HasSecurityDeclarations (provider));
}
public static Collection<SecurityDeclaration> GetSecurityDeclarations (
diff --git a/mcs/class/Mono.Cecil/Mono.Cecil/TypeReference.cs b/mcs/class/Mono.Cecil/Mono.Cecil/TypeReference.cs
index f4861245f42..757c83aa60a 100644
--- a/mcs/class/Mono.Cecil/Mono.Cecil/TypeReference.cs
+++ b/mcs/class/Mono.Cecil/Mono.Cecil/TypeReference.cs
@@ -135,7 +135,7 @@ namespace Mono.Cecil {
if (generic_parameters != null)
return generic_parameters;
- return generic_parameters = new Collection<GenericParameter> ();
+ return generic_parameters = new GenericParameterCollection (this);
}
}
diff --git a/mcs/class/Mono.Cecil/revision b/mcs/class/Mono.Cecil/revision
index 0de762b4137..9246580813b 100644
--- a/mcs/class/Mono.Cecil/revision
+++ b/mcs/class/Mono.Cecil/revision
@@ -1 +1 @@
-90e481c594502333d400226b3d4198dfd26964b2
+53e6ba7207aa843fac13b80a295380c517f2af8d