| ... | ... | @@ -629,6 +629,35 @@ pub fn parse(allocator: *mem.Allocator, source: []const u8) !ast.Tree { |
| 629 | 629 | }); |
| 630 | 630 | continue; |
| 631 | 631 | }, |
| 632 | Token.Id.Keyword_comptime => { |
| 633 | const block = try arena.create(ast.Node.Block); |
| 634 | block.* = ast.Node.Block{ |
| 635 | .base = ast.Node{ .id = ast.Node.Id.Block }, |
| 636 | .label = null, |
| 637 | .lbrace = undefined, |
| 638 | .statements = ast.Node.Block.StatementList.init(arena), |
| 639 | .rbrace = undefined, |
| 640 | }; |
| 641 | |
| 642 | const node = try arena.create(ast.Node.Comptime); |
| 643 | node.* = ast.Node.Comptime{ |
| 644 | .base = ast.Node{ .id = ast.Node.Id.Comptime }, |
| 645 | .comptime_token = token_index, |
| 646 | .expr = &block.base, |
| 647 | .doc_comments = comments, |
| 648 | }; |
| 649 | try container_decl.fields_and_decls.push(&node.base); |
| 650 | |
| 651 | stack.append(State{ .ContainerDecl = container_decl }) catch unreachable; |
| 652 | try stack.append(State{ .Block = block }); |
| 653 | try stack.append(State{ |
| 654 | .ExpectTokenSave = ExpectTokenSave{ |
| 655 | .id = Token.Id.LBrace, |
| 656 | .ptr = &block.lbrace, |
| 657 | }, |
| 658 | }); |
| 659 | continue; |
| 660 | }, |
| 632 | 661 | Token.Id.RBrace => { |
| 633 | 662 | if (comments != null) { |
| 634 | 663 | ((try tree.errors.addOne())).* = Error{ .UnattachedDocComment = Error.UnattachedDocComment{ .token = token_index } }; |