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

Reply via email to