diff options
-rw-r--r-- | Mono.Cecil.Cil/PortablePdb.cs | 2 | ||||
-rw-r--r-- | Mono.Cecil/AssemblyReader.cs | 11 | ||||
-rw-r--r-- | Mono.Cecil/BaseAssemblyResolver.cs | 13 | ||||
-rw-r--r-- | Mono.Cecil/MetadataResolver.cs | 3 | ||||
-rw-r--r-- | Mono.Cecil/ModuleDefinition.cs | 8 | ||||
-rw-r--r-- | rocks/Mono.Cecil.Rocks/MethodBodyRocks.cs | 23 |
6 files changed, 43 insertions, 17 deletions
diff --git a/Mono.Cecil.Cil/PortablePdb.cs b/Mono.Cecil.Cil/PortablePdb.cs index b799fc8..a6859dc 100644 --- a/Mono.Cecil.Cil/PortablePdb.cs +++ b/Mono.Cecil.Cil/PortablePdb.cs @@ -204,7 +204,7 @@ namespace Mono.Cecil.Cil { directory = new ImageDebugDirectory () { MajorVersion = 256, - MinorVersion = 20577, + MinorVersion = 20557, Type = 2, }; diff --git a/Mono.Cecil/AssemblyReader.cs b/Mono.Cecil/AssemblyReader.cs index da9d5bc..5576ee0 100644 --- a/Mono.Cecil/AssemblyReader.cs +++ b/Mono.Cecil/AssemblyReader.cs @@ -2558,6 +2558,17 @@ namespace Mono.Cecil { return (int) size; } + public IEnumerable<CustomAttribute> GetCustomAttributes () + { + InitializeTypeDefinitions (); + + var length = image.TableHeap [Table.CustomAttribute].Length; + var custom_attributes = new Collection<CustomAttribute> ((int) length); + ReadCustomAttributeRange (new Range (1, length), custom_attributes); + + return custom_attributes; + } + public byte [] ReadCustomAttributeBlob (uint signature) { return ReadBlob (signature); diff --git a/Mono.Cecil/BaseAssemblyResolver.cs b/Mono.Cecil/BaseAssemblyResolver.cs index 1ddf201..03499b0 100644 --- a/Mono.Cecil/BaseAssemblyResolver.cs +++ b/Mono.Cecil/BaseAssemblyResolver.cs @@ -83,19 +83,6 @@ namespace Mono.Cecil { return directories; } - public virtual AssemblyDefinition Resolve (string fullName) - { - return Resolve (fullName, new ReaderParameters ()); - } - - public virtual AssemblyDefinition Resolve (string fullName, ReaderParameters parameters) - { - if (fullName == null) - throw new ArgumentNullException ("fullName"); - - return Resolve (AssemblyNameReference.Parse (fullName), parameters); - } - public event AssemblyResolveEventHandler ResolveFailure; protected BaseAssemblyResolver () diff --git a/Mono.Cecil/MetadataResolver.cs b/Mono.Cecil/MetadataResolver.cs index 826756d..95b0e30 100644 --- a/Mono.Cecil/MetadataResolver.cs +++ b/Mono.Cecil/MetadataResolver.cs @@ -17,9 +17,6 @@ namespace Mono.Cecil { public interface IAssemblyResolver : IDisposable { AssemblyDefinition Resolve (AssemblyNameReference name); AssemblyDefinition Resolve (AssemblyNameReference name, ReaderParameters parameters); - - AssemblyDefinition Resolve (string fullName); - AssemblyDefinition Resolve (string fullName, ReaderParameters parameters); } public interface IMetadataResolver { diff --git a/Mono.Cecil/ModuleDefinition.cs b/Mono.Cecil/ModuleDefinition.cs index c7afdc1..0d799c8 100644 --- a/Mono.Cecil/ModuleDefinition.cs +++ b/Mono.Cecil/ModuleDefinition.cs @@ -661,6 +661,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 diff --git a/rocks/Mono.Cecil.Rocks/MethodBodyRocks.cs b/rocks/Mono.Cecil.Rocks/MethodBodyRocks.cs index 2ff43c3..dfdaece 100644 --- a/rocks/Mono.Cecil.Rocks/MethodBodyRocks.cs +++ b/rocks/Mono.Cecil.Rocks/MethodBodyRocks.cs @@ -174,6 +174,29 @@ namespace Mono.Cecil.Rocks { instruction.Operand = null; } + public static void Optimize (this MethodBody self) + { + if (self == null) + throw new ArgumentNullException ("self"); + + OptimizeLongs (self); + OptimizeMacros (self); + } + + static void OptimizeLongs (this MethodBody self) + { + for (var i = 0; i < self.Instructions.Count; i++) { + var instruction = self.Instructions [i]; + if (instruction.OpCode.Code != Code.Ldc_I8) + continue; + var l = (long)instruction.Operand; + if (l >= uint.MaxValue) + continue; + ExpandMacro (instruction, OpCodes.Ldc_I4, (uint)l); + self.Instructions.Insert (++i, Instruction.Create (OpCodes.Conv_I8)); + } + } + public static void OptimizeMacros (this MethodBody self) { if (self == null) |