| author | |
| committer | |
| log | 3e93796e246f22bad43634682966390c15d7f936 |
| tree | 322908f080d1a6a48453824919f9274ec49a727f |
| parent | 5fdefe58e43730b3ce28306b8fe28d7bd70c736d |
closes #292.5 files changed, 18 insertions(+), 2 deletions(-)
src/all_types.hpp+2| ... | ... | @@ -320,6 +320,7 @@ enum NodeType { |
| 320 | 320 | NodeTypeFnDecl, |
| 321 | 321 | NodeTypeParamDecl, |
| 322 | 322 | NodeTypeBlock, |
| 323 | NodeTypeGroupedExpr, | |
| 323 | 324 | NodeTypeReturnExpr, |
| 324 | 325 | NodeTypeDefer, |
| 325 | 326 | NodeTypeVariableDeclaration, |
| ... | ... | @@ -793,6 +794,7 @@ struct AstNode { |
| 793 | 794 | AstNodeFnProto fn_proto; |
| 794 | 795 | AstNodeParamDecl param_decl; |
| 795 | 796 | AstNodeBlock block; |
| 797 | AstNode * grouped_expr; | |
| 796 | 798 | AstNodeReturnExpr return_expr; |
| 797 | 799 | AstNodeDefer defer; |
| 798 | 800 | AstNodeVariableDeclaration variable_declaration; |
src/analyze.cpp+1| ... | ... | @@ -2076,6 +2076,7 @@ void scan_decls(CodeGen *g, ScopeDecls *decls_scope, AstNode *node) { |
| 2076 | 2076 | case NodeTypeReturnExpr: |
| 2077 | 2077 | case NodeTypeDefer: |
| 2078 | 2078 | case NodeTypeBlock: |
| 2079 | case NodeTypeGroupedExpr: | |
| 2079 | 2080 | case NodeTypeBinOpExpr: |
| 2080 | 2081 | case NodeTypeUnwrapErrorExpr: |
| 2081 | 2082 | case NodeTypeFnCallExpr: |
src/ast_render.cpp+7| ... | ... | @@ -150,6 +150,8 @@ static const char *node_type_str(NodeType node_type) { |
| 150 | 150 | return "ParamDecl"; |
| 151 | 151 | case NodeTypeBlock: |
| 152 | 152 | return "Block"; |
| 153 | case NodeTypeGroupedExpr: | |
| 154 | return "Parens"; | |
| 153 | 155 | case NodeTypeBinOpExpr: |
| 154 | 156 | return "BinOpExpr"; |
| 155 | 157 | case NodeTypeUnwrapErrorExpr: |
| ... | ... | @@ -469,6 +471,11 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) { |
| 469 | 471 | print_indent(ar); |
| 470 | 472 | fprintf(ar->f, "}"); |
| 471 | 473 | break; |
| 474 | case NodeTypeGroupedExpr: | |
| 475 | fprintf(ar->f, "("); | |
| 476 | render_node_ungrouped(ar, node->data.grouped_expr); | |
| 477 | fprintf(ar->f, ")"); | |
| 478 | break; | |
| 472 | 479 | case NodeTypeReturnExpr: |
| 473 | 480 | { |
| 474 | 481 | const char *return_str = return_string(node->data.return_expr.kind); |
src/ir.cpp+2| ... | ... | @@ -5574,6 +5574,8 @@ static IrInstruction *ir_gen_node_raw(IrBuilder *irb, AstNode *node, Scope *scop |
| 5574 | 5574 | zig_unreachable(); |
| 5575 | 5575 | case NodeTypeBlock: |
| 5576 | 5576 | return ir_lval_wrap(irb, scope, ir_gen_block(irb, scope, node), lval); |
| 5577 | case NodeTypeGroupedExpr: | |
| 5578 | return ir_gen_node_raw(irb, node->data.grouped_expr, scope, lval); | |
| 5577 | 5579 | case NodeTypeBinOpExpr: |
| 5578 | 5580 | return ir_lval_wrap(irb, scope, ir_gen_bin_op(irb, scope, node), lval); |
| 5579 | 5581 | case NodeTypeNumberLiteral: |
src/parser.cpp+6-2| ... | ... | @@ -363,10 +363,11 @@ static AstNode *ast_parse_grouped_expr(ParseContext *pc, size_t *token_index, bo |
| 363 | 363 | return nullptr; |
| 364 | 364 | } |
| 365 | 365 | } |
| 366 | ||
| 367 | 366 | *token_index += 1; |
| 368 | 367 | |
| 369 | AstNode *node = ast_parse_expression(pc, token_index, true); | |
| 368 | AstNode *node = ast_create_node(pc, NodeTypeGroupedExpr, l_paren); | |
| 369 | ||
| 370 | node->data.grouped_expr = ast_parse_expression(pc, token_index, true); | |
| 370 | 371 | |
| 371 | 372 | Token *r_paren = &pc->tokens->at(*token_index); |
| 372 | 373 | *token_index += 1; |
| ... | ... | @@ -2605,6 +2606,9 @@ void ast_visit_node_children(AstNode *node, void (*visit)(AstNode **, void *cont |
| 2605 | 2606 | case NodeTypeBlock: |
| 2606 | 2607 | visit_node_list(&node->data.block.statements, visit, context); |
| 2607 | 2608 | break; |
| 2609 | case NodeTypeGroupedExpr: | |
| 2610 | visit_field(&node->data.grouped_expr, visit, context); | |
| 2611 | break; | |
| 2608 | 2612 | case NodeTypeReturnExpr: |
| 2609 | 2613 | visit_field(&node->data.return_expr.expr, visit, context); |
| 2610 | 2614 | break; |