diff --git a/bin/Debug/output.cs b/bin/Debug/output.cs index 38169375e..49edf06dc 100644 --- a/bin/Debug/output.cs +++ b/bin/Debug/output.cs @@ -31,8 +31,8 @@ namespace Reversi } public void SetForNewGame() { - for (int i = 0; i < 8; i = (i + 1)) { - for (int j = 0; j < 8; j = (j + 1)) { + for (int i = 0; i < 8; i = i + 1) { + for (int j = 0; j < 8; j = j + 1) { (@this.squares).Set(i, j, IL__ldsfld(Empty)); (@this.safeDiscs).Set(i, j, 0); } @@ -50,13 +50,13 @@ namespace Reversi public void MakeMove(int color, int row, int col) { (@this.squares).Set(row, col, color); - for (int i = -1; i <= 1; i = (i + 1)) { - for (int j = -1; j <= 1; j = (j + 1)) { - if (((i || j) && (@this.IsOutflanking(color, row, col, i, j)))) { - int k = (row + i); - for (int l = (col + j); ((@this.squares).Get(k, l)) == -color; l = (l + j)) { + for (int i = -1; i <= 1; i = i + 1) { + for (int j = -1; j <= 1; j = j + 1) { + if ((i || j) && (@this.IsOutflanking(color, row, col, i, j))) { + int k = row + i; + for (int l = col + j; ((@this.squares).Get(k, l)) == -color; l = l + j) { (@this.squares).Set(k, l, color); - k = (k + i); + k = k + i; } } } @@ -65,9 +65,9 @@ namespace Reversi } public bool HasAnyValidMove(int color) { - for (int i = 0; i < 8; i = (i + 1)) { - for (int j = 0; j < 8; j = (j + 1)) { - if ((@this.IsValidMove(color, i, j))) { + for (int i = 0; i < 8; i = i + 1) { + for (int j = 0; j < 8; j = j + 1) { + if (@this.IsValidMove(color, i, j)) { return 1; } } @@ -76,12 +76,12 @@ namespace Reversi } public bool IsValidMove(int color, int row, int col) { - if ((!(((@this.squares).Get(row, col)) == IL__ldsfld(Empty)))) { + if (!(((@this.squares).Get(row, col)) == IL__ldsfld(Empty))) { return 0; } - for (int i = -1; i <= 1; i = (i + 1)) { - for (int j = -1; j <= 1; j = (j + 1)) { - if (((i || j) && (@this.IsOutflanking(color, row, col, i, j)))) { + for (int i = -1; i <= 1; i = i + 1) { + for (int j = -1; j <= 1; j = j + 1) { + if ((i || j) && (@this.IsOutflanking(color, row, col, i, j))) { return 1; } } @@ -91,10 +91,10 @@ namespace Reversi public int GetValidMoveCount(int color) { int i = 0; - for (int j = 0; j < 8; j = (j + 1)) { - for (int k = 0; k < 8; k = (k + 1)) { - if ((@this.IsValidMove(color, j, k))) { - i = (i + 1); + for (int j = 0; j < 8; j = j + 1) { + for (int k = 0; k < 8; k = k + 1) { + if (@this.IsValidMove(color, j, k)) { + i = i + 1; } } } @@ -102,11 +102,11 @@ namespace Reversi } private bool IsOutflanking(int color, int row, int col, int dr, int dc) { - int i = (row + dr); - for (int j = (col + dc); i >= 0 && i < 8 && j >= 0 && j < 8 && ((@this.squares).Get(i, j)) == -color; j = (j + dc)) { - i = (i + dr); + int i = row + dr; + for (int j = col + dc; i >= 0 && i < 8 && j >= 0 && j < 8 && ((@this.squares).Get(i, j)) == -color; j = j + dc) { + i = i + dr; } - if ((i < 0 || i > 7 || j < 0 || j > 7 || i - dr == row && j - dc == col || ((@this.squares).Get(i, j)) != color)) { + if (i < 0 || i > 7 || j < 0 || j > 7 || i - dr == row && j - dc == col || ((@this.squares).Get(i, j)) != color) { return 0; } return 1; @@ -122,9 +122,9 @@ namespace Reversi @this.blackSafeCount = 0; for (bool V_2 = 1; V_2;) { V_2 = 0; - for (int i = 0; i < 8; i = (i + 1)) { - for (int j = 0; j < 8; j = (j + 1)) { - if ((!(((@this.squares).Get(i, j)) == IL__ldsfld(Empty)) && !((@this.safeDiscs).Get(i, j)) && !(@this.IsOutflankable(i, j)))) { + for (int i = 0; i < 8; i = i + 1) { + for (int j = 0; j < 8; j = j + 1) { + if (!(((@this.squares).Get(i, j)) == IL__ldsfld(Empty)) && !((@this.safeDiscs).Get(i, j)) && !(@this.IsOutflankable(i, j))) { (@this.safeDiscs).Set(i, j, 1); V_2 = 1; } @@ -132,191 +132,192 @@ namespace Reversi } } i = 0; - for (; i < 8; i = (i + 1)) { + for (; i < 8; i = i + 1) { j = 0; - for (; j < 8; j = (j + 1)) { + for (; j < 8; j = j + 1) { bool V_5 = 0; - if ((!(((@this.squares).Get(i, j)) == IL__ldsfld(Empty)))) { - for (int k = -1; k <= 1; k = (k + 1)) { - for (int l = -1; l <= 1; l = (l + 1)) { - if (((k || l) && i + k >= 0 && i + k < 8 && j + l >= 0 && j + l < 8 && !(((@this.squares).Get((i + k), (j + l))) != IL__ldsfld(Empty)))) { + if (!(((@this.squares).Get(i, j)) == IL__ldsfld(Empty))) { + for (int k = -1; k <= 1; k = k + 1) { + for (int l = -1; l <= 1; l = l + 1) { + if ((k || l) && i + k >= 0 && i + k < 8 && j + l >= 0 && j + l < 8 && !(((@this.squares).Get((i + k), (j + l))) != IL__ldsfld(Empty))) { V_5 = 1; } } } } - if ((!(((@this.squares).Get(i, j)) != IL__ldsfld(Black)))) { + if (!(((@this.squares).Get(i, j)) != IL__ldsfld(Black))) { IL__dup(@this); - object expr123 = (expr122.blackCount); - int expr129 = (expr123 + 1); + object expr123 = expr122.blackCount; + int expr129 = expr123 + 1; expr122.blackCount = expr129; if (V_5) { IL__dup(@this); - object expr135 = (expr134.blackFrontierCount); - int expr13B = (expr135 + 1); + object expr135 = expr134.blackFrontierCount; + int expr13B = expr135 + 1; expr134.blackFrontierCount = expr13B; } - if (((@this.safeDiscs).Get(i, j))) { + if ((@this.safeDiscs).Get(i, j)) { IL__dup(@this); - object expr152 = (expr151.blackSafeCount); - int expr158 = (expr152 + 1); + object expr152 = expr151.blackSafeCount; + int expr158 = expr152 + 1; expr151.blackSafeCount = expr158; } } else { - if ((!(((@this.squares).Get(i, j)) != IL__ldsfld(White)))) { + if (!(((@this.squares).Get(i, j)) != IL__ldsfld(White))) { IL__dup(@this); - object expr176 = (expr175.whiteCount); - int expr17C = (expr176 + 1); + object expr176 = expr175.whiteCount; + int expr17C = expr176 + 1; expr175.whiteCount = expr17C; if (V_5) { IL__dup(@this); - object expr188 = (expr187.whiteFrontierCount); - int expr18E = (expr188 + 1); + object expr188 = expr187.whiteFrontierCount; + int expr18E = expr188 + 1; expr187.whiteFrontierCount = expr18E; } - if (((@this.safeDiscs).Get(i, j))) { + if ((@this.safeDiscs).Get(i, j)) { IL__dup(@this); - object expr1A5 = (expr1A4.whiteSafeCount); - int expr1AB = (expr1A5 + 1); + object expr1A5 = expr1A4.whiteSafeCount; + int expr1AB = expr1A5 + 1; expr1A4.whiteSafeCount = expr1AB; - continue; + goto BasicBlock_313; } else { - continue; + goto BasicBlock_313; } } IL__dup(@this); - object expr1B5 = (expr1B4.emptyCount); - int expr1BB = (expr1B5 + 1); + object expr1B5 = expr1B4.emptyCount; + int expr1BB = expr1B5 + 1; expr1B4.emptyCount = expr1BB; } + BasicBlock_313: } } } private bool IsOutflankable(int row, int col) { - int i = ((@this.squares).Get(row, col)); + int i = (@this.squares).Get(row, col); bool V_3 = 0; bool V_5 = 0; bool V_4 = 0; bool V_6 = 0; - for (int k = 0; k < col && !V_3; k = (k + 1)) { - if ((!(((@this.squares).Get(row, k)) != IL__ldsfld(Empty)))) { + for (int k = 0; k < col && !V_3; k = k + 1) { + if (!(((@this.squares).Get(row, k)) != IL__ldsfld(Empty))) { V_3 = 1; } else { - if ((((@this.squares).Get(row, k)) != i || !((@this.safeDiscs).Get(row, k)))) { + if (((@this.squares).Get(row, k)) != i || !((@this.safeDiscs).Get(row, k))) { V_5 = 1; } } } - k = (col + 1); - for (; k < 8 && !V_4; k = (k + 1)) { - if ((!(((@this.squares).Get(row, k)) != IL__ldsfld(Empty)))) { + k = col + 1; + for (; k < 8 && !V_4; k = k + 1) { + if (!(((@this.squares).Get(row, k)) != IL__ldsfld(Empty))) { V_4 = 1; } else { - if ((((@this.squares).Get(row, k)) != i || !((@this.safeDiscs).Get(row, k)))) { + if (((@this.squares).Get(row, k)) != i || !((@this.safeDiscs).Get(row, k))) { V_6 = 1; } } } - if ((V_3 && V_4 || V_3 && V_6 || V_5 && V_4)) { + if (V_3 && V_4 || V_3 && V_6 || V_5 && V_4) { return 1; } V_3 = 0; V_4 = 0; V_5 = 0; V_6 = 0; - for (int j = 0; j < row && !V_3; j = (j + 1)) { - if ((!(((@this.squares).Get(j, col)) != IL__ldsfld(Empty)))) { + for (int j = 0; j < row && !V_3; j = j + 1) { + if (!(((@this.squares).Get(j, col)) != IL__ldsfld(Empty))) { V_3 = 1; } else { - if ((((@this.squares).Get(j, col)) != i || !((@this.safeDiscs).Get(j, col)))) { + if (((@this.squares).Get(j, col)) != i || !((@this.safeDiscs).Get(j, col))) { V_5 = 1; } } } - j = (row + 1); - for (; j < 8 && !V_4; j = (j + 1)) { - if ((!(((@this.squares).Get(j, col)) != IL__ldsfld(Empty)))) { + j = row + 1; + for (; j < 8 && !V_4; j = j + 1) { + if (!(((@this.squares).Get(j, col)) != IL__ldsfld(Empty))) { V_4 = 1; } else { - if ((((@this.squares).Get(j, col)) != i || !((@this.safeDiscs).Get(j, col)))) { + if (((@this.squares).Get(j, col)) != i || !((@this.safeDiscs).Get(j, col))) { V_6 = 1; } } } - if ((V_3 && V_4 || V_3 && V_6 || V_5 && V_4)) { + if (V_3 && V_4 || V_3 && V_6 || V_5 && V_4) { return 1; } V_3 = 0; V_4 = 0; V_5 = 0; V_6 = 0; - j = (row - 1); - k = (col - 1); - for (; j >= 0 && k >= 0 && !V_3; k = (k - 1)) { - if ((!(((@this.squares).Get(j, k)) != IL__ldsfld(Empty)))) { + j = row - 1; + k = col - 1; + for (; j >= 0 && k >= 0 && !V_3; k = k - 1) { + if (!(((@this.squares).Get(j, k)) != IL__ldsfld(Empty))) { V_3 = 1; } else { - if ((((@this.squares).Get(j, k)) != i || !((@this.safeDiscs).Get(j, k)))) { + if (((@this.squares).Get(j, k)) != i || !((@this.safeDiscs).Get(j, k))) { V_5 = 1; } } - j = (j - 1); + j = j - 1; } - j = (row + 1); - k = (col + 1); - for (; j < 8 && k < 8 && !V_4; k = (k + 1)) { - if ((!(((@this.squares).Get(j, k)) != IL__ldsfld(Empty)))) { + j = row + 1; + k = col + 1; + for (; j < 8 && k < 8 && !V_4; k = k + 1) { + if (!(((@this.squares).Get(j, k)) != IL__ldsfld(Empty))) { V_4 = 1; } else { - if ((((@this.squares).Get(j, k)) != i || !((@this.safeDiscs).Get(j, k)))) { + if (((@this.squares).Get(j, k)) != i || !((@this.safeDiscs).Get(j, k))) { V_6 = 1; } } - j = (j + 1); + j = j + 1; } - if ((V_3 && V_4 || V_3 && V_6 || V_5 && V_4)) { + if (V_3 && V_4 || V_3 && V_6 || V_5 && V_4) { return 1; } V_3 = 0; V_4 = 0; V_5 = 0; V_6 = 0; - j = (row - 1); - k = (col + 1); - for (; j >= 0 && k < 8 && !V_3; k = (k + 1)) { - if ((!(((@this.squares).Get(j, k)) != IL__ldsfld(Empty)))) { + j = row - 1; + k = col + 1; + for (; j >= 0 && k < 8 && !V_3; k = k + 1) { + if (!(((@this.squares).Get(j, k)) != IL__ldsfld(Empty))) { V_3 = 1; } else { - if ((((@this.squares).Get(j, k)) != i || !((@this.safeDiscs).Get(j, k)))) { + if (((@this.squares).Get(j, k)) != i || !((@this.safeDiscs).Get(j, k))) { V_5 = 1; } } - j = (j - 1); + j = j - 1; } - j = (row + 1); - k = (col - 1); - for (; j < 8 && k >= 0 && !V_4; k = (k - 1)) { - if ((!(((@this.squares).Get(j, k)) != IL__ldsfld(Empty)))) { + j = row + 1; + k = col - 1; + for (; j < 8 && k >= 0 && !V_4; k = k - 1) { + if (!(((@this.squares).Get(j, k)) != IL__ldsfld(Empty))) { V_4 = 1; } else { - if ((((@this.squares).Get(j, k)) != i || !((@this.safeDiscs).Get(j, k)))) { + if (((@this.squares).Get(j, k)) != i || !((@this.safeDiscs).Get(j, k))) { V_6 = 1; } } - j = (j + 1); + j = j + 1; } - if ((V_3 && V_4 || V_3 && V_6 || V_5 && V_4)) { + if (V_3 && V_4 || V_3 && V_6 || V_5 && V_4) { return 1; } return 0; diff --git a/src/AstBuilder.cs b/src/AstBuilder.cs index 5e6856c28..aed11cb85 100644 --- a/src/AstBuilder.cs +++ b/src/AstBuilder.cs @@ -36,9 +36,16 @@ namespace Decompiler astCompileUnit.AcceptVisitor(new Transforms.Ast.RemoveEmptyElseBody(), null); astCompileUnit.AcceptVisitor(new Transforms.Ast.PushNegation(), null); astCompileUnit.AcceptVisitor(new Transforms.Ast.PushNegation(), null); - astCompileUnit.AcceptVisitor(new Transforms.Ast.RemoveParenthesis(), null); + astCompileUnit.AcceptVisitor(new Transforms.Ast.PushNegation(), null); } } + if (Options.ReduceAstOther) { + astCompileUnit.AcceptVisitor(new Transforms.Ast.RemoveParenthesis(), null); + astCompileUnit.AcceptVisitor(new Transforms.Ast.RemoveParenthesis(), null); + } + if (Options.ReduceAstLoops) { + astCompileUnit.AcceptVisitor(new Transforms.Ast.RestoreLoop(), null); + } astCompileUnit.AcceptVisitor(csOutVisitor, null); diff --git a/src/Transforms/Ast/RemoveParenthesis.cs b/src/Transforms/Ast/RemoveParenthesis.cs index 0731470c7..ddfd3fa14 100644 --- a/src/Transforms/Ast/RemoveParenthesis.cs +++ b/src/Transforms/Ast/RemoveParenthesis.cs @@ -20,6 +20,25 @@ namespace Decompiler.Transforms.Ast return base.VisitParenthesizedExpression(parenthesizedExpression, data); } + public override object VisitAssignmentExpression(AssignmentExpression assignmentExpression, object data) + { + assignmentExpression.Left = Deparenthesize(assignmentExpression.Left); + assignmentExpression.Right = Deparenthesize(assignmentExpression.Right); + return base.VisitAssignmentExpression(assignmentExpression, data); + } + + public override object VisitIfElseStatement(IfElseStatement ifElseStatement, object data) + { + ifElseStatement.Condition = Deparenthesize(ifElseStatement.Condition); + return base.VisitIfElseStatement(ifElseStatement, data); + } + + public override object VisitVariableDeclaration(VariableDeclaration variableDeclaration, object data) + { + variableDeclaration.Initializer = Deparenthesize(variableDeclaration.Initializer); + return base.VisitVariableDeclaration(variableDeclaration, data); + } + public override object VisitUnaryOperatorExpression(UnaryOperatorExpression unary, object data) { if (GetPrecedence(unary.Expression) > GetPrecedence(unary)) {