replace a %% b with a catch b
See #632 better fits the convention of using keywords for control flow
This commit is contained in:
@@ -1407,15 +1407,15 @@ static AstNode *ast_parse_if_try_test_expr(ParseContext *pc, size_t *token_index
|
||||
}
|
||||
|
||||
if (err_name_tok != nullptr) {
|
||||
AstNode *node = ast_create_node(pc, NodeTypeTryExpr, if_token);
|
||||
node->data.try_expr.target_node = condition;
|
||||
node->data.try_expr.var_is_ptr = var_is_ptr;
|
||||
AstNode *node = ast_create_node(pc, NodeTypeIfErrorExpr, if_token);
|
||||
node->data.if_err_expr.target_node = condition;
|
||||
node->data.if_err_expr.var_is_ptr = var_is_ptr;
|
||||
if (var_name_tok != nullptr) {
|
||||
node->data.try_expr.var_symbol = token_buf(var_name_tok);
|
||||
node->data.if_err_expr.var_symbol = token_buf(var_name_tok);
|
||||
}
|
||||
node->data.try_expr.then_node = body_node;
|
||||
node->data.try_expr.err_symbol = token_buf(err_name_tok);
|
||||
node->data.try_expr.else_node = else_node;
|
||||
node->data.if_err_expr.then_node = body_node;
|
||||
node->data.if_err_expr.err_symbol = token_buf(err_name_tok);
|
||||
node->data.if_err_expr.else_node = else_node;
|
||||
return node;
|
||||
} else if (var_name_tok != nullptr) {
|
||||
AstNode *node = ast_create_node(pc, NodeTypeTestExpr, if_token);
|
||||
@@ -2041,7 +2041,7 @@ static BinOpType ast_parse_ass_op(ParseContext *pc, size_t *token_index, bool ma
|
||||
/*
|
||||
UnwrapExpression : BoolOrExpression (UnwrapMaybe | UnwrapError) | BoolOrExpression
|
||||
UnwrapMaybe : "??" BoolOrExpression
|
||||
UnwrapError : "%%" option("|" "Symbol" "|") BoolOrExpression
|
||||
UnwrapError = "catch" option("|" Symbol "|") Expression
|
||||
*/
|
||||
static AstNode *ast_parse_unwrap_expr(ParseContext *pc, size_t *token_index, bool mandatory) {
|
||||
AstNode *lhs = ast_parse_bool_or_expr(pc, token_index, mandatory);
|
||||
@@ -2061,7 +2061,7 @@ static AstNode *ast_parse_unwrap_expr(ParseContext *pc, size_t *token_index, boo
|
||||
node->data.bin_op_expr.op2 = rhs;
|
||||
|
||||
return node;
|
||||
} else if (token->id == TokenIdPercentPercent) {
|
||||
} else if (token->id == TokenIdKeywordCatch) {
|
||||
*token_index += 1;
|
||||
|
||||
AstNode *node = ast_create_node(pc, NodeTypeUnwrapErrorExpr, token);
|
||||
@@ -2157,10 +2157,10 @@ static bool statement_terminates_without_semicolon(AstNode *node) {
|
||||
if (node->data.if_bool_expr.else_node)
|
||||
return statement_terminates_without_semicolon(node->data.if_bool_expr.else_node);
|
||||
return node->data.if_bool_expr.then_block->type == NodeTypeBlock;
|
||||
case NodeTypeTryExpr:
|
||||
if (node->data.try_expr.else_node)
|
||||
return statement_terminates_without_semicolon(node->data.try_expr.else_node);
|
||||
return node->data.try_expr.then_node->type == NodeTypeBlock;
|
||||
case NodeTypeIfErrorExpr:
|
||||
if (node->data.if_err_expr.else_node)
|
||||
return statement_terminates_without_semicolon(node->data.if_err_expr.else_node);
|
||||
return node->data.if_err_expr.then_node->type == NodeTypeBlock;
|
||||
case NodeTypeTestExpr:
|
||||
if (node->data.test_expr.else_node)
|
||||
return statement_terminates_without_semicolon(node->data.test_expr.else_node);
|
||||
@@ -2833,10 +2833,10 @@ void ast_visit_node_children(AstNode *node, void (*visit)(AstNode **, void *cont
|
||||
visit_field(&node->data.if_bool_expr.then_block, visit, context);
|
||||
visit_field(&node->data.if_bool_expr.else_node, visit, context);
|
||||
break;
|
||||
case NodeTypeTryExpr:
|
||||
visit_field(&node->data.try_expr.target_node, visit, context);
|
||||
visit_field(&node->data.try_expr.then_node, visit, context);
|
||||
visit_field(&node->data.try_expr.else_node, visit, context);
|
||||
case NodeTypeIfErrorExpr:
|
||||
visit_field(&node->data.if_err_expr.target_node, visit, context);
|
||||
visit_field(&node->data.if_err_expr.then_node, visit, context);
|
||||
visit_field(&node->data.if_err_expr.else_node, visit, context);
|
||||
break;
|
||||
case NodeTypeTestExpr:
|
||||
visit_field(&node->data.test_expr.target_node, visit, context);
|
||||
|
||||
Reference in New Issue
Block a user