Browse Source

Fixed conditional loops

pull/1/head^2
David Srbecký 15 years ago
parent
commit
9387dadfc8
  1. 4
      ICSharpCode.Decompiler/Ast/AstMetodBodyBuilder.cs
  2. 8
      ICSharpCode.Decompiler/ILAst/ControlFlow/Node-Optimize.cs
  3. 3
      ICSharpCode.Decompiler/ILAst/ControlFlow/Nodes.cs
  4. 2
      ICSharpCode.Decompiler/Options.cs

4
ICSharpCode.Decompiler/Ast/AstMetodBodyBuilder.cs

@ -704,7 +704,9 @@ namespace Decompiler @@ -704,7 +704,9 @@ namespace Decompiler
case Code.Starg: throw new NotImplementedException();
case Code.Stloc: {
if (operand is ILStackVariable) {
return new Ast.AssignmentExpression(new Ast.IdentifierExpression(((ILStackVariable)operand).Name), AssignmentOperatorType.Assign, arg1);
Ast.LocalVariableDeclaration astLocalVar = new Ast.LocalVariableDeclaration(new Ast.VariableDeclaration(((ILStackVariable)operand).Name, arg1));
astLocalVar.TypeReference = new Ast.TypeReference("var");
return astLocalVar;
}
VariableDefinition locVar = (VariableDefinition)operand;
string name = locVar.Name;

8
ICSharpCode.Decompiler/ILAst/ControlFlow/Node-Optimize.cs

@ -60,9 +60,7 @@ namespace Decompiler.ControlFlow @@ -60,9 +60,7 @@ namespace Decompiler.ControlFlow
public void OptimizeShortCircuits()
{
foreach(Node child in this.Childs) {
if (child is Loop) {
child.OptimizeShortCircuits();
}
child.OptimizeShortCircuits();
}
Reset:
@ -130,9 +128,7 @@ namespace Decompiler.ControlFlow @@ -130,9 +128,7 @@ namespace Decompiler.ControlFlow
public void OptimizeConditions()
{
foreach(Node child in this.Childs) {
if (child is Loop) {
child.OptimizeConditions();
}
child.OptimizeConditions();
}
Node conditionNode = this.HeadChild;

3
ICSharpCode.Decompiler/ILAst/ControlFlow/Nodes.cs

@ -124,8 +124,6 @@ namespace Decompiler.ControlFlow @@ -124,8 +124,6 @@ namespace Decompiler.ControlFlow
public MethodBodyGraph(List<ILNode> ast)
{
if (ast.Count == 0) throw new ArgumentException("Count == 0", "ast");
this.methodEntry = new BasicBlock();
this.Childs.Add(this.methodEntry);
this.Childs.AddRange(SplitToBasicBlocks(ast));
// Add branch links to BasicBlocks
@ -162,6 +160,7 @@ namespace Decompiler.ControlFlow @@ -162,6 +160,7 @@ namespace Decompiler.ControlFlow
{
BasicBlock oldBB = basicBlock;
basicBlock = new BasicBlock();
if (methodEntry == null) methodEntry = basicBlock;
nodes.Add(basicBlock);
// Links
if (oldBB != null && ast[i - 1] is ILExpression && ((ILExpression)ast[i - 1]).OpCode.CanFallThough()) {

2
ICSharpCode.Decompiler/Options.cs

@ -4,8 +4,6 @@ namespace Decompiler @@ -4,8 +4,6 @@ namespace Decompiler
{
public static class Options
{
public static readonly int CollapseExpression = 1000;
public static readonly int ReduceGraph = 1000;
public static readonly bool NodeComments = false;
public static readonly bool ReduceLoops = true;
public static readonly bool ReduceConditonals = true;

Loading…
Cancel
Save