Browse Source

Remove parenthesis from: condition, assignment, variable definition

pull/1/head^2
David Srbecký 18 years ago
parent
commit
a284dd920d
  1. 191
      bin/Debug/output.cs
  2. 9
      src/AstBuilder.cs
  3. 19
      src/Transforms/Ast/RemoveParenthesis.cs

191
bin/Debug/output.cs

@ -31,8 +31,8 @@ namespace Reversi
} }
public void SetForNewGame() public void SetForNewGame()
{ {
for (int i = 0; i < 8; i = (i + 1)) { for (int i = 0; i < 8; i = i + 1) {
for (int j = 0; j < 8; j = (j + 1)) { for (int j = 0; j < 8; j = j + 1) {
(@this.squares).Set(i, j, IL__ldsfld(Empty)); (@this.squares).Set(i, j, IL__ldsfld(Empty));
(@this.safeDiscs).Set(i, j, 0); (@this.safeDiscs).Set(i, j, 0);
} }
@ -50,13 +50,13 @@ namespace Reversi
public void MakeMove(int color, int row, int col) public void MakeMove(int color, int row, int col)
{ {
(@this.squares).Set(row, col, color); (@this.squares).Set(row, col, color);
for (int i = -1; i <= 1; i = (i + 1)) { for (int i = -1; i <= 1; i = i + 1) {
for (int j = -1; j <= 1; j = (j + 1)) { for (int j = -1; j <= 1; j = j + 1) {
if (((i || j) && (@this.IsOutflanking(color, row, col, i, j)))) { if ((i || j) && (@this.IsOutflanking(color, row, col, i, j))) {
int k = (row + i); int k = row + i;
for (int l = (col + j); ((@this.squares).Get(k, l)) == -color; l = (l + j)) { for (int l = col + j; ((@this.squares).Get(k, l)) == -color; l = l + j) {
(@this.squares).Set(k, l, color); (@this.squares).Set(k, l, color);
k = (k + i); k = k + i;
} }
} }
} }
@ -65,9 +65,9 @@ namespace Reversi
} }
public bool HasAnyValidMove(int color) public bool HasAnyValidMove(int color)
{ {
for (int i = 0; i < 8; i = (i + 1)) { for (int i = 0; i < 8; i = i + 1) {
for (int j = 0; j < 8; j = (j + 1)) { for (int j = 0; j < 8; j = j + 1) {
if ((@this.IsValidMove(color, i, j))) { if (@this.IsValidMove(color, i, j)) {
return 1; return 1;
} }
} }
@ -76,12 +76,12 @@ namespace Reversi
} }
public bool IsValidMove(int color, int row, int col) 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; return 0;
} }
for (int i = -1; i <= 1; i = (i + 1)) { for (int i = -1; i <= 1; i = i + 1) {
for (int j = -1; j <= 1; j = (j + 1)) { for (int j = -1; j <= 1; j = j + 1) {
if (((i || j) && (@this.IsOutflanking(color, row, col, i, j)))) { if ((i || j) && (@this.IsOutflanking(color, row, col, i, j))) {
return 1; return 1;
} }
} }
@ -91,10 +91,10 @@ namespace Reversi
public int GetValidMoveCount(int color) public int GetValidMoveCount(int color)
{ {
int i = 0; int i = 0;
for (int j = 0; j < 8; j = (j + 1)) { for (int j = 0; j < 8; j = j + 1) {
for (int k = 0; k < 8; k = (k + 1)) { for (int k = 0; k < 8; k = k + 1) {
if ((@this.IsValidMove(color, j, k))) { if (@this.IsValidMove(color, j, k)) {
i = (i + 1); i = i + 1;
} }
} }
} }
@ -102,11 +102,11 @@ namespace Reversi
} }
private bool IsOutflanking(int color, int row, int col, int dr, int dc) private bool IsOutflanking(int color, int row, int col, int dr, int dc)
{ {
int i = (row + 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)) { 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); 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 0;
} }
return 1; return 1;
@ -122,9 +122,9 @@ namespace Reversi
@this.blackSafeCount = 0; @this.blackSafeCount = 0;
for (bool V_2 = 1; V_2;) { for (bool V_2 = 1; V_2;) {
V_2 = 0; V_2 = 0;
for (int i = 0; i < 8; i = (i + 1)) { for (int i = 0; i < 8; i = i + 1) {
for (int j = 0; j < 8; j = (j + 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)))) { if (!(((@this.squares).Get(i, j)) == IL__ldsfld(Empty)) && !((@this.safeDiscs).Get(i, j)) && !(@this.IsOutflankable(i, j))) {
(@this.safeDiscs).Set(i, j, 1); (@this.safeDiscs).Set(i, j, 1);
V_2 = 1; V_2 = 1;
} }
@ -132,191 +132,192 @@ namespace Reversi
} }
} }
i = 0; i = 0;
for (; i < 8; i = (i + 1)) { for (; i < 8; i = i + 1) {
j = 0; j = 0;
for (; j < 8; j = (j + 1)) { for (; j < 8; j = j + 1) {
bool V_5 = 0; bool V_5 = 0;
if ((!(((@this.squares).Get(i, j)) == IL__ldsfld(Empty)))) { if (!(((@this.squares).Get(i, j)) == IL__ldsfld(Empty))) {
for (int k = -1; k <= 1; k = (k + 1)) { for (int k = -1; k <= 1; k = k + 1) {
for (int l = -1; l <= 1; l = (l + 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 ((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; V_5 = 1;
} }
} }
} }
} }
if ((!(((@this.squares).Get(i, j)) != IL__ldsfld(Black)))) { if (!(((@this.squares).Get(i, j)) != IL__ldsfld(Black))) {
IL__dup(@this); IL__dup(@this);
object expr123 = (expr122.blackCount); object expr123 = expr122.blackCount;
int expr129 = (expr123 + 1); int expr129 = expr123 + 1;
expr122.blackCount = expr129; expr122.blackCount = expr129;
if (V_5) { if (V_5) {
IL__dup(@this); IL__dup(@this);
object expr135 = (expr134.blackFrontierCount); object expr135 = expr134.blackFrontierCount;
int expr13B = (expr135 + 1); int expr13B = expr135 + 1;
expr134.blackFrontierCount = expr13B; expr134.blackFrontierCount = expr13B;
} }
if (((@this.safeDiscs).Get(i, j))) { if ((@this.safeDiscs).Get(i, j)) {
IL__dup(@this); IL__dup(@this);
object expr152 = (expr151.blackSafeCount); object expr152 = expr151.blackSafeCount;
int expr158 = (expr152 + 1); int expr158 = expr152 + 1;
expr151.blackSafeCount = expr158; expr151.blackSafeCount = expr158;
} }
} }
else { else {
if ((!(((@this.squares).Get(i, j)) != IL__ldsfld(White)))) { if (!(((@this.squares).Get(i, j)) != IL__ldsfld(White))) {
IL__dup(@this); IL__dup(@this);
object expr176 = (expr175.whiteCount); object expr176 = expr175.whiteCount;
int expr17C = (expr176 + 1); int expr17C = expr176 + 1;
expr175.whiteCount = expr17C; expr175.whiteCount = expr17C;
if (V_5) { if (V_5) {
IL__dup(@this); IL__dup(@this);
object expr188 = (expr187.whiteFrontierCount); object expr188 = expr187.whiteFrontierCount;
int expr18E = (expr188 + 1); int expr18E = expr188 + 1;
expr187.whiteFrontierCount = expr18E; expr187.whiteFrontierCount = expr18E;
} }
if (((@this.safeDiscs).Get(i, j))) { if ((@this.safeDiscs).Get(i, j)) {
IL__dup(@this); IL__dup(@this);
object expr1A5 = (expr1A4.whiteSafeCount); object expr1A5 = expr1A4.whiteSafeCount;
int expr1AB = (expr1A5 + 1); int expr1AB = expr1A5 + 1;
expr1A4.whiteSafeCount = expr1AB; expr1A4.whiteSafeCount = expr1AB;
continue; goto BasicBlock_313;
} }
else { else {
continue; goto BasicBlock_313;
} }
} }
IL__dup(@this); IL__dup(@this);
object expr1B5 = (expr1B4.emptyCount); object expr1B5 = expr1B4.emptyCount;
int expr1BB = (expr1B5 + 1); int expr1BB = expr1B5 + 1;
expr1B4.emptyCount = expr1BB; expr1B4.emptyCount = expr1BB;
} }
BasicBlock_313:
} }
} }
} }
private bool IsOutflankable(int row, int col) 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_3 = 0;
bool V_5 = 0; bool V_5 = 0;
bool V_4 = 0; bool V_4 = 0;
bool V_6 = 0; bool V_6 = 0;
for (int k = 0; k < col && !V_3; k = (k + 1)) { for (int k = 0; k < col && !V_3; k = k + 1) {
if ((!(((@this.squares).Get(row, k)) != IL__ldsfld(Empty)))) { if (!(((@this.squares).Get(row, k)) != IL__ldsfld(Empty))) {
V_3 = 1; V_3 = 1;
} }
else { 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; V_5 = 1;
} }
} }
} }
k = (col + 1); k = col + 1;
for (; k < 8 && !V_4; k = (k + 1)) { for (; k < 8 && !V_4; k = k + 1) {
if ((!(((@this.squares).Get(row, k)) != IL__ldsfld(Empty)))) { if (!(((@this.squares).Get(row, k)) != IL__ldsfld(Empty))) {
V_4 = 1; V_4 = 1;
} }
else { 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; 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; return 1;
} }
V_3 = 0; V_3 = 0;
V_4 = 0; V_4 = 0;
V_5 = 0; V_5 = 0;
V_6 = 0; V_6 = 0;
for (int j = 0; j < row && !V_3; j = (j + 1)) { for (int j = 0; j < row && !V_3; j = j + 1) {
if ((!(((@this.squares).Get(j, col)) != IL__ldsfld(Empty)))) { if (!(((@this.squares).Get(j, col)) != IL__ldsfld(Empty))) {
V_3 = 1; V_3 = 1;
} }
else { 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; V_5 = 1;
} }
} }
} }
j = (row + 1); j = row + 1;
for (; j < 8 && !V_4; j = (j + 1)) { for (; j < 8 && !V_4; j = j + 1) {
if ((!(((@this.squares).Get(j, col)) != IL__ldsfld(Empty)))) { if (!(((@this.squares).Get(j, col)) != IL__ldsfld(Empty))) {
V_4 = 1; V_4 = 1;
} }
else { 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; 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; return 1;
} }
V_3 = 0; V_3 = 0;
V_4 = 0; V_4 = 0;
V_5 = 0; V_5 = 0;
V_6 = 0; V_6 = 0;
j = (row - 1); j = row - 1;
k = (col - 1); k = col - 1;
for (; j >= 0 && k >= 0 && !V_3; k = (k - 1)) { for (; j >= 0 && k >= 0 && !V_3; k = k - 1) {
if ((!(((@this.squares).Get(j, k)) != IL__ldsfld(Empty)))) { if (!(((@this.squares).Get(j, k)) != IL__ldsfld(Empty))) {
V_3 = 1; V_3 = 1;
} }
else { 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; V_5 = 1;
} }
} }
j = (j - 1); j = j - 1;
} }
j = (row + 1); j = row + 1;
k = (col + 1); k = col + 1;
for (; j < 8 && k < 8 && !V_4; k = (k + 1)) { for (; j < 8 && k < 8 && !V_4; k = k + 1) {
if ((!(((@this.squares).Get(j, k)) != IL__ldsfld(Empty)))) { if (!(((@this.squares).Get(j, k)) != IL__ldsfld(Empty))) {
V_4 = 1; V_4 = 1;
} }
else { 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; 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 1;
} }
V_3 = 0; V_3 = 0;
V_4 = 0; V_4 = 0;
V_5 = 0; V_5 = 0;
V_6 = 0; V_6 = 0;
j = (row - 1); j = row - 1;
k = (col + 1); k = col + 1;
for (; j >= 0 && k < 8 && !V_3; k = (k + 1)) { for (; j >= 0 && k < 8 && !V_3; k = k + 1) {
if ((!(((@this.squares).Get(j, k)) != IL__ldsfld(Empty)))) { if (!(((@this.squares).Get(j, k)) != IL__ldsfld(Empty))) {
V_3 = 1; V_3 = 1;
} }
else { 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; V_5 = 1;
} }
} }
j = (j - 1); j = j - 1;
} }
j = (row + 1); j = row + 1;
k = (col - 1); k = col - 1;
for (; j < 8 && k >= 0 && !V_4; k = (k - 1)) { for (; j < 8 && k >= 0 && !V_4; k = k - 1) {
if ((!(((@this.squares).Get(j, k)) != IL__ldsfld(Empty)))) { if (!(((@this.squares).Get(j, k)) != IL__ldsfld(Empty))) {
V_4 = 1; V_4 = 1;
} }
else { 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; 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 1;
} }
return 0; return 0;

9
src/AstBuilder.cs

@ -36,9 +36,16 @@ namespace Decompiler
astCompileUnit.AcceptVisitor(new Transforms.Ast.RemoveEmptyElseBody(), null); 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.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); astCompileUnit.AcceptVisitor(csOutVisitor, null);

19
src/Transforms/Ast/RemoveParenthesis.cs

@ -20,6 +20,25 @@ namespace Decompiler.Transforms.Ast
return base.VisitParenthesizedExpression(parenthesizedExpression, data); 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) public override object VisitUnaryOperatorExpression(UnaryOperatorExpression unary, object data)
{ {
if (GetPrecedence(unary.Expression) > GetPrecedence(unary)) { if (GetPrecedence(unary.Expression) > GetPrecedence(unary)) {

Loading…
Cancel
Save