| ... | ... | @@ -151,10 +151,21 @@ pub fn translate( |
| 151 | 151 | |
| 152 | 152 | var tree_arena = std.heap.ArenaAllocator.init(backing_allocator); |
| 153 | 153 | errdefer tree_arena.deinit(); |
| 154 | | var arena = &tree_arena.allocator; |
| 155 | 154 | |
| 156 | | const root_node = try arena.create(ast.Node.Root); |
| 157 | | root_node.* = ast.Node.Root{ |
| 155 | const tree = try tree_arena.allocator.create(ast.Tree); |
| 156 | tree.* = ast.Tree{ |
| 157 | .source = undefined, // need to use Buffer.toOwnedSlice later |
| 158 | .root_node = undefined, |
| 159 | .arena_allocator = tree_arena, |
| 160 | .tokens = undefined, // can't reference the allocator yet |
| 161 | .errors = undefined, // can't reference the allocator yet |
| 162 | }; |
| 163 | const arena = &tree.arena_allocator.allocator; // now we can reference the allocator |
| 164 | tree.tokens = ast.Tree.TokenList.init(arena); |
| 165 | tree.errors = ast.Tree.ErrorList.init(arena); |
| 166 | |
| 167 | tree.root_node = try arena.create(ast.Node.Root); |
| 168 | tree.root_node.* = ast.Node.Root{ |
| 158 | 169 | .base = ast.Node{ .id = ast.Node.Id.Root }, |
| 159 | 170 | .decls = ast.Node.Root.DeclList.init(arena), |
| 160 | 171 | .doc_comments = null, |
| ... | ... | @@ -162,17 +173,6 @@ pub fn translate( |
| 162 | 173 | .eof_token = undefined, |
| 163 | 174 | }; |
| 164 | 175 | |
| 165 | | const tree = try arena.create(ast.Tree); |
| 166 | | tree.* = ast.Tree{ |
| 167 | | .source = undefined, // need to use Buffer.toOwnedSlice later |
| 168 | | .root_node = root_node, |
| 169 | | .arena_allocator = undefined, |
| 170 | | .tokens = ast.Tree.TokenList.init(arena), |
| 171 | | .errors = ast.Tree.ErrorList.init(arena), |
| 172 | | }; |
| 173 | | tree.arena_allocator = tree_arena; |
| 174 | | arena = &tree.arena_allocator.allocator; |
| 175 | | |
| 176 | 176 | var source_buffer = try std.Buffer.initSize(arena, 0); |
| 177 | 177 | |
| 178 | 178 | var context = Context{ |