Browse Source

Rename StackExpression to ByteCodeExpression

pull/1/head^2
David Srbecký 18 years ago
parent
commit
9f4dc8611d
  1. 4
      Decompiler.csproj
  2. 12
      src/AstMetodBodyBuilder.cs
  3. 4
      src/ByteCode.cs
  4. 22
      src/ByteCodeExpression.cs
  5. 10
      src/ByteCodeExpressionCollection.cs
  6. 6
      src/ControlFlow/Nodes.cs

4
Decompiler.csproj

@ -64,8 +64,8 @@
<Compile Include="src\Options.cs" /> <Compile Include="src\Options.cs" />
<Compile Include="src\Program.cs" /> <Compile Include="src\Program.cs" />
<Compile Include="src\ByteCode.StackAnalysis.cs" /> <Compile Include="src\ByteCode.StackAnalysis.cs" />
<Compile Include="src\StackExpression.cs" /> <Compile Include="src\ByteCodeExpression.cs" />
<Compile Include="src\StackExpressionCollection.cs" /> <Compile Include="src\ByteCodeExpressionCollection.cs" />
<Compile Include="src\Transforms\Ast\PushNegation.cs" /> <Compile Include="src\Transforms\Ast\PushNegation.cs" />
<Compile Include="src\Transforms\Ast\Idioms.cs" /> <Compile Include="src\Transforms\Ast\Idioms.cs" />
<Compile Include="src\Transforms\Ast\RemoveDeadLabels.cs" /> <Compile Include="src\Transforms\Ast\RemoveDeadLabels.cs" />

12
src/AstMetodBodyBuilder.cs

@ -32,7 +32,7 @@ namespace Decompiler
methodDef.Body.Simplify(); methodDef.Body.Simplify();
ByteCodeCollection body = new ByteCodeCollection(methodDef); ByteCodeCollection body = new ByteCodeCollection(methodDef);
StackExpressionCollection exprCollection = new StackExpressionCollection(body); ByteCodeExpressionCollection exprCollection = new ByteCodeExpressionCollection(body);
try { try {
exprCollection.Optimize(); exprCollection.Optimize();
} catch (StopOptimizations) { } catch (StopOptimizations) {
@ -94,7 +94,7 @@ namespace Decompiler
yield return new Ast.LabelStatement(node.Label); yield return new Ast.LabelStatement(node.Label);
if (node is BasicBlock) { if (node is BasicBlock) {
foreach(StackExpression expr in ((BasicBlock)node).Body) { foreach(ByteCodeExpression expr in ((BasicBlock)node).Body) {
yield return TransformExpressionToStatement(expr); yield return TransformExpressionToStatement(expr);
} }
Node fallThroughNode = ((BasicBlock)node).FallThroughBasicBlock; Node fallThroughNode = ((BasicBlock)node).FallThroughBasicBlock;
@ -177,7 +177,7 @@ namespace Decompiler
} }
} }
List<Ast.Expression> TransformExpressionArguments(StackExpression expr) List<Ast.Expression> TransformExpressionArguments(ByteCodeExpression expr)
{ {
List<Ast.Expression> args = new List<Ast.Expression>(); List<Ast.Expression> args = new List<Ast.Expression>();
foreach(CilStackSlot stackSlot in expr.StackBefore.PeekCount(expr.PopCount)) { foreach(CilStackSlot stackSlot in expr.StackBefore.PeekCount(expr.PopCount)) {
@ -185,19 +185,19 @@ namespace Decompiler
args.Add(new Ast.IdentifierExpression(name)); args.Add(new Ast.IdentifierExpression(name));
} }
// Args generated by nested expressions (which must be closed) // Args generated by nested expressions (which must be closed)
foreach(StackExpression nestedExpr in expr.LastArguments) { foreach(ByteCodeExpression nestedExpr in expr.LastArguments) {
args.Add((Ast.Expression)TransformExpression(nestedExpr)); args.Add((Ast.Expression)TransformExpression(nestedExpr));
} }
return args; return args;
} }
object TransformExpression(StackExpression expr) object TransformExpression(ByteCodeExpression expr)
{ {
List<Ast.Expression> args = TransformExpressionArguments(expr); List<Ast.Expression> args = TransformExpressionArguments(expr);
return TransformByteCode(methodDef, expr.LastByteCode, args); return TransformByteCode(methodDef, expr.LastByteCode, args);
} }
Ast.Statement TransformExpressionToStatement(StackExpression expr) Ast.Statement TransformExpressionToStatement(ByteCodeExpression expr)
{ {
object codeExpr = TransformExpression(expr); object codeExpr = TransformExpression(expr);
if (codeExpr is Ast.Expression) { if (codeExpr is Ast.Expression) {

4
src/ByteCode.cs

@ -9,7 +9,7 @@ namespace Decompiler
{ {
public partial class ByteCode public partial class ByteCode
{ {
StackExpression expression; ByteCodeExpression expression;
ByteCode previous; ByteCode previous;
ByteCode next; ByteCode next;
@ -18,7 +18,7 @@ namespace Decompiler
OpCode opCode; OpCode opCode;
object operand; object operand;
public StackExpression Expression { public ByteCodeExpression Expression {
get { return expression; } get { return expression; }
set { expression = value; } set { expression = value; }
} }

22
src/StackExpression.cs → src/ByteCodeExpression.cs

@ -7,24 +7,24 @@ using Mono.Cecil.Cil;
namespace Decompiler namespace Decompiler
{ {
public class StackExpression public class ByteCodeExpression
{ {
ControlFlow.BasicBlock basicBlock; ControlFlow.BasicBlock basicBlock;
StackExpressionCollection owner; ByteCodeExpressionCollection owner;
ByteCode lastByteCode; ByteCode lastByteCode;
List<StackExpression> lastArguments = new List<StackExpression>(); List<ByteCodeExpression> lastArguments = new List<ByteCodeExpression>();
public Decompiler.ControlFlow.BasicBlock BasicBlock { public Decompiler.ControlFlow.BasicBlock BasicBlock {
get { return basicBlock; } get { return basicBlock; }
set { set {
basicBlock = value; basicBlock = value;
foreach (StackExpression lastArgument in lastArguments) { foreach (ByteCodeExpression lastArgument in lastArguments) {
lastArgument.BasicBlock = value; lastArgument.BasicBlock = value;
} }
} }
} }
public StackExpressionCollection Owner { public ByteCodeExpressionCollection Owner {
get { return owner; } get { return owner; }
} }
@ -33,7 +33,7 @@ namespace Decompiler
} }
// A list of closed expression for last arguments // A list of closed expression for last arguments
public List<StackExpression> LastArguments { public List<ByteCodeExpression> LastArguments {
get { return lastArguments; } get { return lastArguments; }
} }
@ -59,9 +59,9 @@ namespace Decompiler
} }
} }
public List<StackExpression> BranchesHere { public List<ByteCodeExpression> BranchesHere {
get { get {
List<StackExpression> branchesHere = new List<StackExpression>(); List<ByteCodeExpression> branchesHere = new List<ByteCodeExpression>();
foreach(ByteCode byteCode in this.FirstByteCode.BranchesHere) { foreach(ByteCode byteCode in this.FirstByteCode.BranchesHere) {
branchesHere.Add(byteCode.Expression); branchesHere.Add(byteCode.Expression);
} }
@ -69,7 +69,7 @@ namespace Decompiler
} }
} }
public StackExpression BranchTarget { public ByteCodeExpression BranchTarget {
get { get {
if (this.lastByteCode.BranchTarget == null) { if (this.lastByteCode.BranchTarget == null) {
return null; return null;
@ -107,7 +107,7 @@ namespace Decompiler
{ {
int stackSize = 0; int stackSize = 0;
int minStackSize = 0; int minStackSize = 0;
foreach(StackExpression expr in lastArguments) { foreach(ByteCodeExpression expr in lastArguments) {
stackSize -= expr.PopCount; stackSize -= expr.PopCount;
minStackSize = Math.Min(minStackSize, stackSize); minStackSize = Math.Min(minStackSize, stackSize);
stackSize += expr.PushCount; stackSize += expr.PushCount;
@ -131,7 +131,7 @@ namespace Decompiler
} }
} }
public StackExpression(StackExpressionCollection owner, ByteCode lastByteCode) public ByteCodeExpression(ByteCodeExpressionCollection owner, ByteCode lastByteCode)
{ {
this.owner = owner; this.owner = owner;
this.lastByteCode = lastByteCode; this.lastByteCode = lastByteCode;

10
src/StackExpressionCollection.cs → src/ByteCodeExpressionCollection.cs

@ -7,12 +7,12 @@ using Mono.Cecil.Cil;
namespace Decompiler namespace Decompiler
{ {
public class StackExpressionCollection: List<StackExpression> public class ByteCodeExpressionCollection: List<ByteCodeExpression>
{ {
public StackExpressionCollection(ByteCodeCollection byteCodeCol) public ByteCodeExpressionCollection(ByteCodeCollection byteCodeCol)
{ {
foreach(ByteCode bc in byteCodeCol) { foreach(ByteCode bc in byteCodeCol) {
this.Add(new StackExpression(this, bc)); this.Add(new ByteCodeExpression(this, bc));
} }
} }
@ -20,8 +20,8 @@ namespace Decompiler
{ {
for(int i = 1; i < this.Count; i++) { for(int i = 1; i < this.Count; i++) {
if (i == 0) continue; if (i == 0) continue;
StackExpression prevExpr = this[i - 1]; ByteCodeExpression prevExpr = this[i - 1];
StackExpression expr = this[i]; ByteCodeExpression expr = this[i];
if (expr.PopCount > 0 && // This expr needs some more arguments if (expr.PopCount > 0 && // This expr needs some more arguments
!expr.IsBranchTarget && !expr.IsBranchTarget &&

6
src/ControlFlow/Nodes.cs

@ -7,12 +7,12 @@ namespace Decompiler.ControlFlow
{ {
public class BasicBlock: Node public class BasicBlock: Node
{ {
List<StackExpression> body = new List<StackExpression>(); List<ByteCodeExpression> body = new List<ByteCodeExpression>();
List<BasicBlock> basicBlockPredecessors = new List<BasicBlock>(); List<BasicBlock> basicBlockPredecessors = new List<BasicBlock>();
BasicBlock fallThroughBasicBlock; BasicBlock fallThroughBasicBlock;
BasicBlock branchBasicBlock; BasicBlock branchBasicBlock;
public List<StackExpression> Body { public List<ByteCodeExpression> Body {
get { return body; } get { return body; }
} }
@ -117,7 +117,7 @@ namespace Decompiler.ControlFlow
get { return methodEntry; } get { return methodEntry; }
} }
public MethodBodyGraph(StackExpressionCollection exprs) public MethodBodyGraph(ByteCodeExpressionCollection exprs)
{ {
if (exprs.Count == 0) throw new ArgumentException("Count == 0", "exprs"); if (exprs.Count == 0) throw new ArgumentException("Count == 0", "exprs");

Loading…
Cancel
Save