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

github.com/mono/cecil.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJb Evain <jb@evain.net>2016-07-21 21:55:27 +0300
committerJb Evain <jb@evain.net>2016-07-21 21:55:27 +0300
commitcee7ad4f697bbdf3eecdafcef6e4e8056b808af2 (patch)
tree3a4eebf23e6b3728113628e0540cefef6203011f /Mono.Cecil.Cil/CodeReader.cs
parent64c70936bf0fa2a83ec0c2a85851e0d187fb451e (diff)
Only create one code reader
Diffstat (limited to 'Mono.Cecil.Cil/CodeReader.cs')
-rw-r--r--Mono.Cecil.Cil/CodeReader.cs24
1 files changed, 17 insertions, 7 deletions
diff --git a/Mono.Cecil.Cil/CodeReader.cs b/Mono.Cecil.Cil/CodeReader.cs
index f102d68..b65e98a 100644
--- a/Mono.Cecil.Cil/CodeReader.cs
+++ b/Mono.Cecil.Cil/CodeReader.cs
@@ -30,23 +30,29 @@ namespace Mono.Cecil.Cil {
get { return Position - start; }
}
- public CodeReader (MethodDefinition method, MetadataReader reader)
+ public CodeReader (MetadataReader reader)
: base (reader.image.Stream)
{
this.reader = reader;
+ }
+
+ public void MoveTo (MethodDefinition method)
+ {
+ this.method = method;
this.reader.context = method;
this.Position = (int) reader.image.ResolveVirtualAddress ((uint) method.RVA);
}
- public static MethodBody ReadMethodBody (MethodDefinition method, MetadataReader metadata)
+ public MethodBody ReadMethodBody (MethodDefinition method)
{
- var reader = new CodeReader (method, metadata);
- reader.method = method;
- reader.body = new MethodBody (method);
+ MoveTo (method);
+ this.body = new MethodBody (method);
- reader.ReadMethodBody ();
+ ReadMethodBody ();
- return reader.body;
+ this.reader.context = null;
+
+ return this.body;
}
void ReadMethodBody ()
@@ -435,6 +441,8 @@ namespace Mono.Cecil.Cil {
public ByteBuffer PatchRawMethodBody (MethodDefinition method, CodeWriter writer, out int code_size, out MetadataToken local_var_token)
{
+ MoveTo (method);
+
var buffer = new ByteBuffer ();
var flags = ReadByte ();
@@ -454,6 +462,8 @@ namespace Mono.Cecil.Cil {
throw new NotSupportedException ();
}
+ reader.context = null;
+
return buffer;
}