Parsing support for if expressions. (#2883)

We model `if a then b else` as a prefix operator for parsing precedence purposes. The rule that a statement starting with `if` is never an `if` expression is handled implicitly because the statement parser never invokes the expression parser for a statement starting with `if`.

This exposed a bug in our diagnosis of the whitespace rule for prefix operators, which was incorrectly being applied to non-symbolic operators in some cases, and was producing a bogus second diagnostic in some cases, which is also fixed here.
This commit is contained in:
Richard Smith
2023-06-09 16:41:10 -07:00
committed by GitHub
parent 4e1adcf4c7
commit 2c45cb3be8
18 changed files with 400 additions and 22 deletions
+15
View File
@@ -178,6 +178,21 @@ auto SemanticsHandleIfConditionStart(SemanticsContext& context,
return context.TODO(parse_node, "HandleIfConditionStart");
}
auto SemanticsHandleIfExpression(SemanticsContext& context,
ParseTree::Node parse_node) -> bool {
return context.TODO(parse_node, "HandleIfExpression");
}
auto SemanticsHandleIfExpressionElse(SemanticsContext& context,
ParseTree::Node parse_node) -> bool {
return context.TODO(parse_node, "HandleIfExpressionElse");
}
auto SemanticsHandleIfExpressionThen(SemanticsContext& context,
ParseTree::Node parse_node) -> bool {
return context.TODO(parse_node, "HandleIfExpressionThen");
}
auto SemanticsHandleIfStatement(SemanticsContext& context,
ParseTree::Node parse_node) -> bool {
return context.TODO(parse_node, "HandleIfStatement");