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 @@ -125,7 +125,7 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
}
if (expr is IsExpression || expr is AsExpression)
return RelationalAndTypeTesting;
if (expr is ConditionalExpression)
if (expr is ConditionalExpression || expr is DirectionExpression)
return Conditional;
if (expr is AssignmentExpression || expr is LambdaExpression)
return Assignment;
@ -339,7 +339,7 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor @@ -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)
// 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.
ParenthesizeIfRequired(conditionalExpression.Condition, NullableRewrap);
ParenthesizeIfRequired(conditionalExpression.TrueExpression, NullableRewrap);
@ -351,7 +351,13 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor @@ -351,7 +351,13 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
}
base.VisitConditionalExpression(conditionalExpression);
}
private bool IsConditionalRefExpression(ConditionalExpression conditionalExpression)
{
return conditionalExpression.TrueExpression is DirectionExpression
|| conditionalExpression.FalseExpression is DirectionExpression;
}
public override void VisitAssignmentExpression(AssignmentExpression assignmentExpression)
{
// assignment is right-associative

Loading…
Cancel
Save