Browse Source

#1499: Add missing required parentheses around ref expressions.

pull/1505/head
Siegfried Pammer 6 years ago
parent
commit
906f69fd45
  1. 12
      ICSharpCode.Decompiler/CSharp/OutputVisitor/InsertParenthesesVisitor.cs

12
ICSharpCode.Decompiler/CSharp/OutputVisitor/InsertParenthesesVisitor.cs

@ -125,7 +125,7 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
} }
if (expr is IsExpression || expr is AsExpression) if (expr is IsExpression || expr is AsExpression)
return RelationalAndTypeTesting; return RelationalAndTypeTesting;
if (expr is ConditionalExpression) if (expr is ConditionalExpression || expr is DirectionExpression)
return Conditional; return Conditional;
if (expr is AssignmentExpression || expr is LambdaExpression) if (expr is AssignmentExpression || expr is LambdaExpression)
return Assignment; return Assignment;
@ -339,7 +339,7 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
// (a ? b : c ? d : e) == (a ? b : (c ? d : e)) // (a ? b : c ? d : e) == (a ? b : (c ? d : e))
// (a ? b ? c : d : e) == (a ? (b ? c : d) : e) // (a ? b ? c : d : e) == (a ? (b ? c : d) : e)
// Only ((a ? b : c) ? d : e) strictly needs the additional parentheses // Only ((a ? b : c) ? d : e) strictly needs the additional parentheses
if (InsertParenthesesForReadability) { if (InsertParenthesesForReadability && !IsConditionalRefExpression(conditionalExpression)) {
// Precedence of ?: can be confusing; so always put parentheses in nice-looking mode. // Precedence of ?: can be confusing; so always put parentheses in nice-looking mode.
ParenthesizeIfRequired(conditionalExpression.Condition, NullableRewrap); ParenthesizeIfRequired(conditionalExpression.Condition, NullableRewrap);
ParenthesizeIfRequired(conditionalExpression.TrueExpression, NullableRewrap); ParenthesizeIfRequired(conditionalExpression.TrueExpression, NullableRewrap);
@ -351,7 +351,13 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
} }
base.VisitConditionalExpression(conditionalExpression); base.VisitConditionalExpression(conditionalExpression);
} }
private bool IsConditionalRefExpression(ConditionalExpression conditionalExpression)
{
return conditionalExpression.TrueExpression is DirectionExpression
|| conditionalExpression.FalseExpression is DirectionExpression;
}
public override void VisitAssignmentExpression(AssignmentExpression assignmentExpression) public override void VisitAssignmentExpression(AssignmentExpression assignmentExpression)
{ {
// assignment is right-associative // assignment is right-associative

Loading…
Cancel
Save