parent
5fdefe58e4
commit
3e93796e24
|
@ -320,6 +320,7 @@ enum NodeType {
|
||||||
NodeTypeFnDecl,
|
NodeTypeFnDecl,
|
||||||
NodeTypeParamDecl,
|
NodeTypeParamDecl,
|
||||||
NodeTypeBlock,
|
NodeTypeBlock,
|
||||||
|
NodeTypeGroupedExpr,
|
||||||
NodeTypeReturnExpr,
|
NodeTypeReturnExpr,
|
||||||
NodeTypeDefer,
|
NodeTypeDefer,
|
||||||
NodeTypeVariableDeclaration,
|
NodeTypeVariableDeclaration,
|
||||||
|
@ -793,6 +794,7 @@ struct AstNode {
|
||||||
AstNodeFnProto fn_proto;
|
AstNodeFnProto fn_proto;
|
||||||
AstNodeParamDecl param_decl;
|
AstNodeParamDecl param_decl;
|
||||||
AstNodeBlock block;
|
AstNodeBlock block;
|
||||||
|
AstNode * grouped_expr;
|
||||||
AstNodeReturnExpr return_expr;
|
AstNodeReturnExpr return_expr;
|
||||||
AstNodeDefer defer;
|
AstNodeDefer defer;
|
||||||
AstNodeVariableDeclaration variable_declaration;
|
AstNodeVariableDeclaration variable_declaration;
|
||||||
|
|
|
@ -2076,6 +2076,7 @@ void scan_decls(CodeGen *g, ScopeDecls *decls_scope, AstNode *node) {
|
||||||
case NodeTypeReturnExpr:
|
case NodeTypeReturnExpr:
|
||||||
case NodeTypeDefer:
|
case NodeTypeDefer:
|
||||||
case NodeTypeBlock:
|
case NodeTypeBlock:
|
||||||
|
case NodeTypeGroupedExpr:
|
||||||
case NodeTypeBinOpExpr:
|
case NodeTypeBinOpExpr:
|
||||||
case NodeTypeUnwrapErrorExpr:
|
case NodeTypeUnwrapErrorExpr:
|
||||||
case NodeTypeFnCallExpr:
|
case NodeTypeFnCallExpr:
|
||||||
|
|
|
@ -150,6 +150,8 @@ static const char *node_type_str(NodeType node_type) {
|
||||||
return "ParamDecl";
|
return "ParamDecl";
|
||||||
case NodeTypeBlock:
|
case NodeTypeBlock:
|
||||||
return "Block";
|
return "Block";
|
||||||
|
case NodeTypeGroupedExpr:
|
||||||
|
return "Parens";
|
||||||
case NodeTypeBinOpExpr:
|
case NodeTypeBinOpExpr:
|
||||||
return "BinOpExpr";
|
return "BinOpExpr";
|
||||||
case NodeTypeUnwrapErrorExpr:
|
case NodeTypeUnwrapErrorExpr:
|
||||||
|
@ -469,6 +471,11 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {
|
||||||
print_indent(ar);
|
print_indent(ar);
|
||||||
fprintf(ar->f, "}");
|
fprintf(ar->f, "}");
|
||||||
break;
|
break;
|
||||||
|
case NodeTypeGroupedExpr:
|
||||||
|
fprintf(ar->f, "(");
|
||||||
|
render_node_ungrouped(ar, node->data.grouped_expr);
|
||||||
|
fprintf(ar->f, ")");
|
||||||
|
break;
|
||||||
case NodeTypeReturnExpr:
|
case NodeTypeReturnExpr:
|
||||||
{
|
{
|
||||||
const char *return_str = return_string(node->data.return_expr.kind);
|
const char *return_str = return_string(node->data.return_expr.kind);
|
||||||
|
|
|
@ -5574,6 +5574,8 @@ static IrInstruction *ir_gen_node_raw(IrBuilder *irb, AstNode *node, Scope *scop
|
||||||
zig_unreachable();
|
zig_unreachable();
|
||||||
case NodeTypeBlock:
|
case NodeTypeBlock:
|
||||||
return ir_lval_wrap(irb, scope, ir_gen_block(irb, scope, node), lval);
|
return ir_lval_wrap(irb, scope, ir_gen_block(irb, scope, node), lval);
|
||||||
|
case NodeTypeGroupedExpr:
|
||||||
|
return ir_gen_node_raw(irb, node->data.grouped_expr, scope, lval);
|
||||||
case NodeTypeBinOpExpr:
|
case NodeTypeBinOpExpr:
|
||||||
return ir_lval_wrap(irb, scope, ir_gen_bin_op(irb, scope, node), lval);
|
return ir_lval_wrap(irb, scope, ir_gen_bin_op(irb, scope, node), lval);
|
||||||
case NodeTypeNumberLiteral:
|
case NodeTypeNumberLiteral:
|
||||||
|
|
|
@ -363,10 +363,11 @@ static AstNode *ast_parse_grouped_expr(ParseContext *pc, size_t *token_index, bo
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*token_index += 1;
|
*token_index += 1;
|
||||||
|
|
||||||
AstNode *node = ast_parse_expression(pc, token_index, true);
|
AstNode *node = ast_create_node(pc, NodeTypeGroupedExpr, l_paren);
|
||||||
|
|
||||||
|
node->data.grouped_expr = ast_parse_expression(pc, token_index, true);
|
||||||
|
|
||||||
Token *r_paren = &pc->tokens->at(*token_index);
|
Token *r_paren = &pc->tokens->at(*token_index);
|
||||||
*token_index += 1;
|
*token_index += 1;
|
||||||
|
@ -2605,6 +2606,9 @@ void ast_visit_node_children(AstNode *node, void (*visit)(AstNode **, void *cont
|
||||||
case NodeTypeBlock:
|
case NodeTypeBlock:
|
||||||
visit_node_list(&node->data.block.statements, visit, context);
|
visit_node_list(&node->data.block.statements, visit, context);
|
||||||
break;
|
break;
|
||||||
|
case NodeTypeGroupedExpr:
|
||||||
|
visit_field(&node->data.grouped_expr, visit, context);
|
||||||
|
break;
|
||||||
case NodeTypeReturnExpr:
|
case NodeTypeReturnExpr:
|
||||||
visit_field(&node->data.return_expr.expr, visit, context);
|
visit_field(&node->data.return_expr.expr, visit, context);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue