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 @@ -61,5 +61,16 @@ namespace Decompiler.Transforms.Ast
}
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 @@ -28,12 +28,28 @@ namespace Decompiler.Transforms.Ast
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)
{
returnStatement.Expression = Deparenthesize(returnStatement.Expression);
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)
{
if (GetPrecedence(indexer.TargetObject) >= GetPrecedence(indexer)) {
@ -166,6 +182,7 @@ namespace Decompiler.Transforms.Ast @@ -166,6 +182,7 @@ namespace Decompiler.Transforms.Ast
// --x
if (unary != null && unary.Op == UnaryOperatorType.Decrement) return 14;
// (T)x
if (expr is CastExpression) return 14;
// Multiplicative
// *, ,
if (binary != null && binary.Op == BinaryOperatorType.Multiply) return 13;

Loading…
Cancel
Save