Browse Source

Include casting in precedence list

pull/1/head^2
David Srbecký 18 years ago
parent
commit
8d22eb6b25
  1. 11
      src/Transforms/Ast/Idioms.cs
  2. 17
      src/Transforms/Ast/RemoveParenthesis.cs

11
src/Transforms/Ast/Idioms.cs

@ -61,5 +61,16 @@ namespace Decompiler.Transforms.Ast
} }
return null; return null;
} }
public override object VisitCastExpression(CastExpression castExpression, object data)
{
if (castExpression.CastTo.Type == "int" &&
castExpression.Expression is MemberReferenceExpression &&
(castExpression.Expression as MemberReferenceExpression).MemberName == "Length") {
ReplaceCurrentNode(castExpression.Expression);
return null;
}
return base.VisitCastExpression(castExpression, data);
}
} }
} }

17
src/Transforms/Ast/RemoveParenthesis.cs

@ -28,12 +28,28 @@ namespace Decompiler.Transforms.Ast
return base.VisitAssignmentExpression(assignmentExpression, data); return base.VisitAssignmentExpression(assignmentExpression, data);
} }
public override object VisitArrayCreateExpression(ArrayCreateExpression array, object data)
{
for(int i = 0; i < array.Arguments.Count; i++) {
array.Arguments[i] = Deparenthesize(array.Arguments[i]);
}
return base.VisitArrayCreateExpression(array, data);
}
public override object VisitReturnStatement(ReturnStatement returnStatement, object data) public override object VisitReturnStatement(ReturnStatement returnStatement, object data)
{ {
returnStatement.Expression = Deparenthesize(returnStatement.Expression); returnStatement.Expression = Deparenthesize(returnStatement.Expression);
return base.VisitReturnStatement(returnStatement, data); return base.VisitReturnStatement(returnStatement, data);
} }
public override object VisitCastExpression(CastExpression castExpression, object data)
{
if (GetPrecedence(castExpression.Expression) > GetPrecedence(castExpression)) {
castExpression.Expression = Deparenthesize(castExpression.Expression);
}
return base.VisitCastExpression(castExpression, data);
}
public override object VisitIndexerExpression(IndexerExpression indexer, object data) public override object VisitIndexerExpression(IndexerExpression indexer, object data)
{ {
if (GetPrecedence(indexer.TargetObject) >= GetPrecedence(indexer)) { if (GetPrecedence(indexer.TargetObject) >= GetPrecedence(indexer)) {
@ -166,6 +182,7 @@ namespace Decompiler.Transforms.Ast
// --x // --x
if (unary != null && unary.Op == UnaryOperatorType.Decrement) return 14; if (unary != null && unary.Op == UnaryOperatorType.Decrement) return 14;
// (T)x // (T)x
if (expr is CastExpression) return 14;
// Multiplicative // Multiplicative
// *, , // *, ,
if (binary != null && binary.Op == BinaryOperatorType.Multiply) return 13; if (binary != null && binary.Op == BinaryOperatorType.Multiply) return 13;

Loading…
Cancel
Save