Skip to content

Commit 33f64cb

Browse files
author
Maksim Volkau
committed
fix forgot to close parens for the fast return
1 parent 704c2a8 commit 33f64cb

1 file changed

Lines changed: 10 additions & 7 deletions

File tree

src/FastExpressionCompiler/FastExpressionCompiler.cs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9938,11 +9938,11 @@ internal static StringBuilder CreateExpressionString(this Expression e, StringBu
99389938
[RequiresUnreferencedCode(Trimming.Message)]
99399939
public static class ToCSharpPrinter
99409940
{
9941-
/// <summary>Tries hard to convert the expression into the valid C# code</summary>
9942-
public static string ToCSharpString(this Expression expr) =>
9943-
expr.ToCSharpString(new StringBuilder(1024), stripNamespace: true).Append(';').ToString();
9941+
/// <summary>Tries hard to convert the expression into the valid C# code. Avoids parens by default for the root expr.</summary>
9942+
public static string ToCSharpString(this Expression expr, EnclosedIn enclosedIn = EnclosedIn.AvoidParens) =>
9943+
expr.ToCSharpString(new StringBuilder(1024), enclosedIn, stripNamespace: true).Append(';').ToString();
99449944

9945-
/// <summary>Tries hard to convert the expression into the valid C# code</summary>
9945+
/// <summary>Tries hard to convert the expression into the valid C# code. Avoids parens by default for the root expr.</summary>
99469946
public static string ToCSharpString(this Expression expr, ObjectToCode notRecognizedToCode, EnclosedIn enclosedIn = EnclosedIn.AvoidParens) =>
99479947
expr.ToCSharpString(new StringBuilder(1024), stripNamespace: true, notRecognizedToCode: notRecognizedToCode).Append(';').ToString();
99489948

@@ -10780,20 +10780,20 @@ void PrintPart(Expression part, ref TNamed named)
1078010780
false, lineIndent, stripNamespace, printType, indentSpaces, notRecognizedToCode);
1078110781
}
1078210782

10783-
sb = !avoidParens ? sb.Append('(') : sb;
10783+
sb = sb.AddParenIfNeeded('(', avoidParens);
1078410784
b.Left.ToCSharpExpression(sb, EnclosedIn.ParensByDefault, ref named,
1078510785
false, lineIndent, stripNamespace, printType, indentSpaces, notRecognizedToCode);
1078610786

1078710787
if (nodeType == ExpressionType.Equal)
1078810788
{
1078910789
if (b.Right is ConstantExpression r && r.Value is bool rb && rb)
10790-
return sb;
10790+
return sb.AddParenIfNeeded(')', avoidParens);
1079110791
sb.Append(" == ");
1079210792
}
1079310793
else if (nodeType == ExpressionType.NotEqual)
1079410794
{
1079510795
if (b.Right is ConstantExpression r && r.Value is bool rb)
10796-
return rb ? sb.Append(" == false") : sb;
10796+
return (rb ? sb.Append(" == false") : sb).AddParenIfNeeded(')', avoidParens);
1079710797
sb.Append(" != ");
1079810798
}
1079910799
else
@@ -10815,6 +10815,9 @@ private static bool AvoidParens(EnclosedIn enclosedIn) =>
1081510815
enclosedIn == EnclosedIn.Block | // statement in a block don't need the parens as well
1081610816
enclosedIn == EnclosedIn.Return;
1081710817

10818+
private static StringBuilder AddParenIfNeeded(this StringBuilder sb, char paren, bool avoidParen = false) =>
10819+
avoidParen ? sb : sb.Append(paren);
10820+
1081810821
private static StringBuilder ToCSharpBlock<TNamed>(this Expression expr, StringBuilder sb, ref TNamed named,
1081910822
int lineIndent, bool stripNamespace, Func<Type, string, string> printType, int indentSpaces, ObjectToCode notRecognizedToCode)
1082010823
where TNamed : struct, ISmallList<NamedWithIndex>

0 commit comments

Comments
 (0)