| ... | ... | @@ -615,9 +615,9 @@ static AstNode *ast_parse_goto_expr(ParseContext *pc, size_t *token_index, bool |
| 615 | 615 | } |
| 616 | 616 | |
| 617 | 617 | /* |
| 618 | | CompTimeExpression = "comptime" Expression |
| 618 | CompTimeExpression(body) = "comptime" body |
| 619 | 619 | */ |
| 620 | | static AstNode *ast_parse_comptime_expr(ParseContext *pc, size_t *token_index, bool mandatory) { |
| 620 | static AstNode *ast_parse_comptime_expr(ParseContext *pc, size_t *token_index, bool require_block_body, bool mandatory) { |
| 621 | 621 | Token *comptime_token = &pc->tokens->at(*token_index); |
| 622 | 622 | if (comptime_token->id == TokenIdKeywordCompTime) { |
| 623 | 623 | *token_index += 1; |
| ... | ... | @@ -629,7 +629,10 @@ static AstNode *ast_parse_comptime_expr(ParseContext *pc, size_t *token_index, b |
| 629 | 629 | } |
| 630 | 630 | |
| 631 | 631 | AstNode *node = ast_create_node(pc, NodeTypeCompTime, comptime_token); |
| 632 | | node->data.comptime_expr.expr = ast_parse_expression(pc, token_index, true); |
| 632 | if (require_block_body) |
| 633 | node->data.comptime_expr.expr = ast_parse_block(pc, token_index, true); |
| 634 | else |
| 635 | node->data.comptime_expr.expr = ast_parse_expression(pc, token_index, true); |
| 633 | 636 | return node; |
| 634 | 637 | } |
| 635 | 638 | |
| ... | ... | @@ -1884,7 +1887,7 @@ static AstNode *ast_parse_block_expr(ParseContext *pc, size_t *token_index, bool |
| 1884 | 1887 | if (block) |
| 1885 | 1888 | return block; |
| 1886 | 1889 | |
| 1887 | | AstNode *comptime_node = ast_parse_comptime_expr(pc, token_index, false); |
| 1890 | AstNode *comptime_node = ast_parse_comptime_expr(pc, token_index, false, false); |
| 1888 | 1891 | if (comptime_node) |
| 1889 | 1892 | return comptime_node; |
| 1890 | 1893 | |
| ... | ... | @@ -2459,12 +2462,12 @@ static AstNode *ast_parse_type_decl(ParseContext *pc, size_t *token_index, Visib |
| 2459 | 2462 | } |
| 2460 | 2463 | |
| 2461 | 2464 | /* |
| 2462 | | TopLevelItem = ErrorValueDecl | CompTimeExpression | TopLevelDecl | TestDecl |
| 2465 | TopLevelItem = ErrorValueDecl | CompTimeExpression(Block) | TopLevelDecl | TestDecl |
| 2463 | 2466 | TopLevelDecl = option(VisibleMod) (FnDef | ExternDecl | GlobalVarDecl | TypeDecl | UseDecl) |
| 2464 | 2467 | */ |
| 2465 | 2468 | static void ast_parse_top_level_decls(ParseContext *pc, size_t *token_index, ZigList<AstNode *> *top_level_decls) { |
| 2466 | 2469 | for (;;) { |
| 2467 | | AstNode *comptime_expr_node = ast_parse_comptime_expr(pc, token_index, false); |
| 2470 | AstNode *comptime_expr_node = ast_parse_comptime_expr(pc, token_index, true, false); |
| 2468 | 2471 | if (comptime_expr_node) { |
| 2469 | 2472 | top_level_decls->append(comptime_expr_node); |
| 2470 | 2473 | continue; |