Author: jbevain
Date: 2007-12-10 07:00:42 -0500 (Mon, 10 Dec 2007)
New Revision: 91041
Added:
trunk/cecil/flowanalysis/testcases/FlowAnalysis/InPlaceAdd-afg.txt
trunk/cecil/flowanalysis/testcases/FlowAnalysis/InPlaceAdd-cfg.txt
trunk/cecil/flowanalysis/testcases/FlowAnalysis/InPlaceAdd.il
Modified:
trunk/cecil/flowanalysis/Cecil.FlowAnalysis.Tests/ActionFlowTestFixture.cs
trunk/cecil/flowanalysis/Cecil.FlowAnalysis.Tests/ControlFlowTestFixture.cs
trunk/cecil/flowanalysis/Cecil.FlowAnalysis/ActionFlow/ActionFlowGraphBuilder.cs
trunk/cecil/flowanalysis/Cecil.FlowAnalysis/ActionFlow/ExpressionDecompiler.cs
trunk/cecil/flowanalysis/Cecil.FlowAnalysis/CodeStructure/BinaryOperator.cs
trunk/cecil/flowanalysis/Cecil.FlowAnalysis/CodeStructure/ExpressionPrinter.cs
trunk/cecil/flowanalysis/ChangeLog
Log:
Support for dup, add and stfld
Modified:
trunk/cecil/flowanalysis/Cecil.FlowAnalysis/ActionFlow/ActionFlowGraphBuilder.cs
===================================================================
---
trunk/cecil/flowanalysis/Cecil.FlowAnalysis/ActionFlow/ActionFlowGraphBuilder.cs
2007-12-10 11:24:21 UTC (rev 91040)
+++
trunk/cecil/flowanalysis/Cecil.FlowAnalysis/ActionFlow/ActionFlowGraphBuilder.cs
2007-12-10 12:00:42 UTC (rev 91041)
@@ -447,6 +447,11 @@
Add (new AssignActionBlock (instruction,
(AssignExpression) Pop ()));
}
+ public override void OnStfld (Instruction instruction)
+ {
+ Add (new AssignActionBlock (instruction,
(AssignExpression) Pop ()));
+ }
+
int GetStackBefore (Instruction instruction)
{
return GetInstructionData (instruction).StackBefore;
Modified:
trunk/cecil/flowanalysis/Cecil.FlowAnalysis/ActionFlow/ExpressionDecompiler.cs
===================================================================
---
trunk/cecil/flowanalysis/Cecil.FlowAnalysis/ActionFlow/ExpressionDecompiler.cs
2007-12-10 11:24:21 UTC (rev 91040)
+++
trunk/cecil/flowanalysis/Cecil.FlowAnalysis/ActionFlow/ExpressionDecompiler.cs
2007-12-10 12:00:42 UTC (rev 91041)
@@ -67,6 +67,17 @@
Push (new AssignExpression (Pop (), Pop ()));
}
+ public override void OnStfld (Instruction instruction)
+ {
+ FieldReference field = (FieldReference)
instruction.Operand;
+ Expression expression = Pop ();
+ Expression target = Pop ();
+ Push (
+ new AssignExpression (
+ new FieldReferenceExpression (target,
field),
+ expression));
+ }
+
public override void OnCallvirt (Instruction instruction)
{
OnCall (instruction);
@@ -100,12 +111,25 @@
new MethodReferenceExpression (target,
method), args));
}
+ public override void OnDup (Instruction instruction)
+ {
+ Expression expression = Pop ();
+ Push (expression);
+ Push (expression);
+ }
+
public override void OnPop (Instruction instruction)
{
}
- public override void OnMul (Mono.Cecil.Cil.Instruction
instruction)
+ public override void OnAdd (Instruction instruction)
{
+ BinaryOperator op = BinaryOperator.Add;
+ PushBinaryExpression (op);
+ }
+
+ public override void OnMul (Instruction instruction)
+ {
BinaryOperator op = BinaryOperator.Multiply;
PushBinaryExpression (op);
}
Modified:
trunk/cecil/flowanalysis/Cecil.FlowAnalysis/CodeStructure/BinaryOperator.cs
===================================================================
--- trunk/cecil/flowanalysis/Cecil.FlowAnalysis/CodeStructure/BinaryOperator.cs
2007-12-10 11:24:21 UTC (rev 91040)
+++ trunk/cecil/flowanalysis/Cecil.FlowAnalysis/CodeStructure/BinaryOperator.cs
2007-12-10 12:00:42 UTC (rev 91041)
@@ -26,6 +26,7 @@
namespace Cecil.FlowAnalysis.CodeStructure {
public enum BinaryOperator {
None,
+ Add,
Multiply,
ValueEquality,
ValueInequality,
Modified:
trunk/cecil/flowanalysis/Cecil.FlowAnalysis/CodeStructure/ExpressionPrinter.cs
===================================================================
---
trunk/cecil/flowanalysis/Cecil.FlowAnalysis/CodeStructure/ExpressionPrinter.cs
2007-12-10 11:24:21 UTC (rev 91040)
+++
trunk/cecil/flowanalysis/Cecil.FlowAnalysis/CodeStructure/ExpressionPrinter.cs
2007-12-10 12:00:42 UTC (rev 91041)
@@ -168,6 +168,7 @@
switch (op) {
case BinaryOperator.LogicalAnd: return "&&";
case BinaryOperator.LogicalOr: return "||";
+ case BinaryOperator.Add: return "+";
case BinaryOperator.Multiply: return "*";
case BinaryOperator.ValueEquality: return "==";
case BinaryOperator.ValueInequality: return "!=";
Modified:
trunk/cecil/flowanalysis/Cecil.FlowAnalysis.Tests/ActionFlowTestFixture.cs
===================================================================
--- trunk/cecil/flowanalysis/Cecil.FlowAnalysis.Tests/ActionFlowTestFixture.cs
2007-12-10 11:24:21 UTC (rev 91040)
+++ trunk/cecil/flowanalysis/Cecil.FlowAnalysis.Tests/ActionFlowTestFixture.cs
2007-12-10 12:00:42 UTC (rev 91041)
@@ -237,6 +237,12 @@
RunTestCase ("StringPredicate");
}
+ [Test]
+ public void InPlaceAdd ()
+ {
+ RunTestCase ("InPlaceAdd");
+ }
+
protected void RunTestCase (string name)
{
ActionFlowGraph afg = GetActionFlowGraph (name);
Modified:
trunk/cecil/flowanalysis/Cecil.FlowAnalysis.Tests/ControlFlowTestFixture.cs
===================================================================
--- trunk/cecil/flowanalysis/Cecil.FlowAnalysis.Tests/ControlFlowTestFixture.cs
2007-12-10 11:24:21 UTC (rev 91040)
+++ trunk/cecil/flowanalysis/Cecil.FlowAnalysis.Tests/ControlFlowTestFixture.cs
2007-12-10 12:00:42 UTC (rev 91041)
@@ -26,6 +26,7 @@
using NUnit.Framework;
namespace Cecil.FlowAnalysis.Tests {
+
[TestFixture]
public class ControlFlowTestFixture : AbstractControlFlowTestFixture {
@@ -250,5 +251,11 @@
{
RunTestCase ("StringPredicate");
}
+
+ [Test]
+ public void InPlaceAdd ()
+ {
+ RunTestCase ("InPlaceAdd");
+ }
}
}
Modified: trunk/cecil/flowanalysis/ChangeLog
===================================================================
--- trunk/cecil/flowanalysis/ChangeLog 2007-12-10 11:24:21 UTC (rev 91040)
+++ trunk/cecil/flowanalysis/ChangeLog 2007-12-10 12:00:42 UTC (rev 91041)
@@ -1,5 +1,10 @@
2007-09-30 Jb Evain <[EMAIL PROTECTED]>
+ * Support for dup, add and stfld.
+ Patch by Sanghyeon Seo <[EMAIL PROTECTED]>
+
+2007-09-30 Jb Evain <[EMAIL PROTECTED]>
+
* Support for isinst.
2007-11-26 Rodrigo B. de Oliveira <[EMAIL PROTECTED]>
@@ -17,7 +22,7 @@
Cecil.FlowAnalysis.Tests/ControlFlowTestFixture.cs
testcases/FlowAnalysis/StringCast.il
testcases/FlowAnalysis/StringCast-afg.txt
- testcases/FlowAnalysis/StringCast-cfg.txt:
+ testcases/FlowAnalysis/StringCast-cfg.txt:
Support for converting castclass to CastExpression and callvirt
to
MethodInvocationExpression.
Added: trunk/cecil/flowanalysis/testcases/FlowAnalysis/InPlaceAdd-afg.txt
===================================================================
--- trunk/cecil/flowanalysis/testcases/FlowAnalysis/InPlaceAdd-afg.txt
2007-12-10 11:24:21 UTC (rev 91040)
+++ trunk/cecil/flowanalysis/testcases/FlowAnalysis/InPlaceAdd-afg.txt
2007-12-10 12:00:42 UTC (rev 91041)
@@ -0,0 +1,2 @@
+this.v = (this.v + n)
+return
Property changes on:
trunk/cecil/flowanalysis/testcases/FlowAnalysis/InPlaceAdd-afg.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/cecil/flowanalysis/testcases/FlowAnalysis/InPlaceAdd-cfg.txt
===================================================================
--- trunk/cecil/flowanalysis/testcases/FlowAnalysis/InPlaceAdd-cfg.txt
2007-12-10 11:24:21 UTC (rev 91040)
+++ trunk/cecil/flowanalysis/testcases/FlowAnalysis/InPlaceAdd-cfg.txt
2007-12-10 12:00:42 UTC (rev 91041)
@@ -0,0 +1,9 @@
+block 1:
+ body:
+ IL_0000: ldarg.0
+ IL_0001: dup
+ IL_0002: ldfld System.Int32 TestCase::v
+ IL_0007: ldarg.1
+ IL_0008: add
+ IL_0009: stfld System.Int32 TestCase::v
+ IL_000e: ret
Property changes on:
trunk/cecil/flowanalysis/testcases/FlowAnalysis/InPlaceAdd-cfg.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: trunk/cecil/flowanalysis/testcases/FlowAnalysis/InPlaceAdd.il
===================================================================
--- trunk/cecil/flowanalysis/testcases/FlowAnalysis/InPlaceAdd.il
2007-12-10 11:24:21 UTC (rev 91040)
+++ trunk/cecil/flowanalysis/testcases/FlowAnalysis/InPlaceAdd.il
2007-12-10 12:00:42 UTC (rev 91041)
@@ -0,0 +1,18 @@
+.assembly TestCase {}
+
+.class public auto ansi beforefieldinit TestCase
+ extends [mscorlib]System.Object
+{
+ .field int32 v
+
+ .method public hidebysig void Main(int32 n) cil managed
+ {
+ IL_0000: ldarg.0
+ IL_0001: dup
+ IL_0002: ldfld int32 TestCase::v
+ IL_0007: ldarg.1
+ IL_0008: add
+ IL_0009: stfld int32 TestCase::v
+ IL_000e: ret
+ }
+}
Property changes on:
trunk/cecil/flowanalysis/testcases/FlowAnalysis/InPlaceAdd.il
___________________________________________________________________
Name: svn:eol-style
+ native
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches