| ... | @@ -629,6 +629,35 @@ pub fn parse(allocator: *mem.Allocator, source: []const u8) !ast.Tree { | ... | @@ -629,6 +629,35 @@ pub fn parse(allocator: *mem.Allocator, source: []const u8) !ast.Tree { |
| 629 | }); | 629 | }); |
| 630 | continue; | 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 | Token.Id.RBrace => { | 661 | Token.Id.RBrace => { |
| 633 | if (comments != null) { | 662 | if (comments != null) { |
| 634 | ((try tree.errors.addOne())).* = Error{ .UnattachedDocComment = Error.UnattachedDocComment{ .token = token_index } }; | 663 | ((try tree.errors.addOne())).* = Error{ .UnattachedDocComment = Error.UnattachedDocComment{ .token = token_index } }; |