From 8d22eb6b259c62db9a3486f7a737056a40247bbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Srbeck=C3=BD?= Date: Sun, 10 Feb 2008 21:09:48 +0000 Subject: [PATCH] Include casting in precedence list --- src/Transforms/Ast/Idioms.cs | 11 +++++++++++ src/Transforms/Ast/RemoveParenthesis.cs | 17 +++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/Transforms/Ast/Idioms.cs b/src/Transforms/Ast/Idioms.cs index 5ec0719f6..7e00a3c43 100644 --- a/src/Transforms/Ast/Idioms.cs +++ b/src/Transforms/Ast/Idioms.cs @@ -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); + } } } diff --git a/src/Transforms/Ast/RemoveParenthesis.cs b/src/Transforms/Ast/RemoveParenthesis.cs index 398b01b8a..26cc3fc0e 100644 --- a/src/Transforms/Ast/RemoveParenthesis.cs +++ b/src/Transforms/Ast/RemoveParenthesis.cs @@ -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 // --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;