diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-02-24 18:49:07 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-24 18:49:07 -0800 |
| commit | d7049fc8e0709619b8aa6766b37abeae946703b2 (patch) | |
| tree | fd575717d5ca9e585b7d94e2028f80614dbf6c2d /src/codegen.zig | |
| parent | 8b9434871ea437840d25f073b945466359f402f9 (diff) | |
| parent | 9ada7638a5dbb535ba37223a14478691dd60cf6a (diff) | |
| download | zig-d7049fc8e0709619b8aa6766b37abeae946703b2.tar.gz zig-d7049fc8e0709619b8aa6766b37abeae946703b2.zip | |
Merge pull request #7920 from ziglang/ast-memory-layout
Rework AST memory layout for better memory usage and performance
Diffstat (limited to 'src/codegen.zig')
| -rw-r--r-- | src/codegen.zig | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/codegen.zig b/src/codegen.zig index ea08b80092..779366cc23 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -451,11 +451,16 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { const src_data: struct { lbrace_src: usize, rbrace_src: usize, source: []const u8 } = blk: { const container_scope = module_fn.owner_decl.container; - const tree = container_scope.file_scope.contents.tree; - const fn_proto = tree.root_node.decls()[module_fn.owner_decl.src_index].castTag(.FnProto).?; - const block = fn_proto.getBodyNode().?.castTag(.Block).?; - const lbrace_src = tree.token_locs[block.lbrace].start; - const rbrace_src = tree.token_locs[block.rbrace].start; + const tree = container_scope.file_scope.tree; + const node_tags = tree.nodes.items(.tag); + const node_datas = tree.nodes.items(.data); + const token_starts = tree.tokens.items(.start); + + const fn_decl = tree.rootDecls()[module_fn.owner_decl.src_index]; + assert(node_tags[fn_decl] == .fn_decl); + const block = node_datas[fn_decl].rhs; + const lbrace_src = token_starts[tree.firstToken(block)]; + const rbrace_src = token_starts[tree.lastToken(block)]; break :blk .{ .lbrace_src = lbrace_src, .rbrace_src = rbrace_src, |
