authorgravatar for thejoshwolfe@gmail.comJosh Wolfe <thejoshwolfe@gmail.com> 2017-04-14 16:09:01-07:00
committergravatar for thejoshwolfe@gmail.comJosh Wolfe <thejoshwolfe@gmail.com> 2017-04-14 16:09:01-07:00
log3e93796e246f22bad43634682966390c15d7f936
tree322908f080d1a6a48453824919f9274ec49a727f
parent5fdefe58e43730b3ce28306b8fe28d7bd70c736d

comptime ({}) should not get an implicit semicolon

closes #292.

5 files changed, 18 insertions(+), 2 deletions(-)

src/all_types.hpp+2
......@@ -320,6 +320,7 @@ enum NodeType {
320320 NodeTypeFnDecl,
321321 NodeTypeParamDecl,
322322 NodeTypeBlock,
323 NodeTypeGroupedExpr,
323324 NodeTypeReturnExpr,
324325 NodeTypeDefer,
325326 NodeTypeVariableDeclaration,
......@@ -793,6 +794,7 @@ struct AstNode {
793794 AstNodeFnProto fn_proto;
794795 AstNodeParamDecl param_decl;
795796 AstNodeBlock block;
797 AstNode * grouped_expr;
796798 AstNodeReturnExpr return_expr;
797799 AstNodeDefer defer;
798800 AstNodeVariableDeclaration variable_declaration;
src/analyze.cpp+1
......@@ -2076,6 +2076,7 @@ void scan_decls(CodeGen *g, ScopeDecls *decls_scope, AstNode *node) {
20762076 case NodeTypeReturnExpr:
20772077 case NodeTypeDefer:
20782078 case NodeTypeBlock:
2079 case NodeTypeGroupedExpr:
20792080 case NodeTypeBinOpExpr:
20802081 case NodeTypeUnwrapErrorExpr:
20812082 case NodeTypeFnCallExpr:
src/ast_render.cpp+7
......@@ -150,6 +150,8 @@ static const char *node_type_str(NodeType node_type) {
150150 return "ParamDecl";
151151 case NodeTypeBlock:
152152 return "Block";
153 case NodeTypeGroupedExpr:
154 return "Parens";
153155 case NodeTypeBinOpExpr:
154156 return "BinOpExpr";
155157 case NodeTypeUnwrapErrorExpr:
......@@ -469,6 +471,11 @@ static void render_node_extra(AstRender *ar, AstNode *node, bool grouped) {
469471 print_indent(ar);
470472 fprintf(ar->f, "}");
471473 break;
474 case NodeTypeGroupedExpr:
475 fprintf(ar->f, "(");
476 render_node_ungrouped(ar, node->data.grouped_expr);
477 fprintf(ar->f, ")");
478 break;
472479 case NodeTypeReturnExpr:
473480 {
474481 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
55745574 zig_unreachable();
55755575 case NodeTypeBlock:
55765576 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);
55775579 case NodeTypeBinOpExpr:
55785580 return ir_lval_wrap(irb, scope, ir_gen_bin_op(irb, scope, node), lval);
55795581 case NodeTypeNumberLiteral:
src/parser.cpp+6-2
......@@ -363,10 +363,11 @@ static AstNode *ast_parse_grouped_expr(ParseContext *pc, size_t *token_index, bo
363363 return nullptr;
364364 }
365365 }
366
367366 *token_index += 1;
368367
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);
370371
371372 Token *r_paren = &pc->tokens->at(*token_index);
372373 *token_index += 1;
......@@ -2605,6 +2606,9 @@ void ast_visit_node_children(AstNode *node, void (*visit)(AstNode **, void *cont
26052606 case NodeTypeBlock:
26062607 visit_node_list(&node->data.block.statements, visit, context);
26072608 break;
2609 case NodeTypeGroupedExpr:
2610 visit_field(&node->data.grouped_expr, visit, context);
2611 break;
26082612 case NodeTypeReturnExpr:
26092613 visit_field(&node->data.return_expr.expr, visit, context);
26102614 break;