Skip to content

Commit 93ac774

Browse files
committed
fixed C# output for the switch with void case bodies
1 parent e2d0124 commit 93ac774

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

src/FastExpressionCompiler/FastExpressionCompiler.cs

+14-6
Original file line numberDiff line numberDiff line change
@@ -7969,35 +7969,43 @@ void PrintPart(Expression part, ref SmallList4<NamedWithIndex> named)
79697969
}
79707970

79717971
sb.NewLineIndent(caseBodyIndent);
7972+
var caseBody = cs.Body;
79727973
if (enclosedIn == EnclosedIn.LambdaBody)
79737974
{
7974-
if (cs.Body is BlockExpression bl)
7975+
if (caseBody is BlockExpression bl)
79757976
bl.BlockToCSharpString(sb, ref named,
79767977
caseBodyIndent, stripNamespace, printType, indentSpaces, notRecognizedToCode, inTheLastBlock: true);
79777978
else
7978-
cs.Body.ToCSharpString(sb.Append("return "), EnclosedIn.Return, ref named,
7979+
{
7980+
var bodyIn = caseBody.Type != typeof(void) ? EnclosedIn.Return : EnclosedIn.AvoidParens;
7981+
caseBody.ToCSharpString(bodyIn == EnclosedIn.Return ? sb.Append("return ") : sb, bodyIn, ref named,
79797982
caseBodyIndent, stripNamespace, printType, indentSpaces, notRecognizedToCode).AppendSemicolonOnce();
7983+
}
79807984
}
79817985
else
7982-
cs.Body.ToCSharpString(sb, enclosedIn, ref named,
7986+
caseBody.ToCSharpString(sb, enclosedIn, ref named,
79837987
caseBodyIndent, stripNamespace, printType, indentSpaces, notRecognizedToCode).AppendSemicolonOnce();
79847988
}
79857989

79867990
if (x.DefaultBody != null)
79877991
{
7992+
var defaultBody = x.DefaultBody;
79887993
sb.NewLineIndent(caseValueIndent).Append("default:");
79897994
sb.NewLineIndent(caseBodyIndent);
79907995
if (enclosedIn == EnclosedIn.LambdaBody)
79917996
{
7992-
if (x.DefaultBody is BlockExpression bl)
7997+
if (defaultBody is BlockExpression bl)
79937998
bl.BlockToCSharpString(sb, ref named,
79947999
caseBodyIndent, stripNamespace, printType, indentSpaces, notRecognizedToCode, inTheLastBlock: true);
79958000
else
7996-
x.DefaultBody.ToCSharpString(sb.Append("return "), EnclosedIn.Return, ref named,
8001+
{
8002+
var bodyIn = defaultBody.Type != typeof(void) ? EnclosedIn.Return : EnclosedIn.AvoidParens;
8003+
defaultBody.ToCSharpString(bodyIn == EnclosedIn.Return ? sb.Append("return ") : sb, bodyIn, ref named,
79978004
caseBodyIndent, stripNamespace, printType, indentSpaces, notRecognizedToCode).AppendSemicolonOnce();
8005+
}
79988006
}
79998007
else
8000-
x.DefaultBody.ToCSharpString(sb, enclosedIn, ref named,
8008+
defaultBody.ToCSharpString(sb, enclosedIn, ref named,
80018009
caseBodyIndent, stripNamespace, printType, indentSpaces, notRecognizedToCode).AppendSemicolonOnce();
80028010
}
80038011

test/FastExpressionCompiler.TestsRunner/Program.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ public class Program
99
{
1010
public static void Main()
1111
{
12-
new LightExpression.IssueTests.Issue261_Loop_wih_conditions_fails().Run();
12+
// new LightExpression.IssueTests.Issue428_Expression_Switch_without_a_default_case_incorrectly_calls_first_case_for_unmatched_values().Run();
13+
// new LightExpression.IssueTests.Issue261_Loop_wih_conditions_fails().Run();
1314
// new LightExpression.UnitTests.AssignTests().Run();
1415
// new LightExpression.IssueTests.Issue430_TryCatch_Bad_label_content_in_ILGenerator().Run();
1516

0 commit comments

Comments
 (0)