aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-02-24 18:49:07 -0800
committerGitHub <noreply@github.com>2021-02-24 18:49:07 -0800
commitd7049fc8e0709619b8aa6766b37abeae946703b2 (patch)
treefd575717d5ca9e585b7d94e2028f80614dbf6c2d /src/codegen.zig
parent8b9434871ea437840d25f073b945466359f402f9 (diff)
parent9ada7638a5dbb535ba37223a14478691dd60cf6a (diff)
downloadzig-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.zig15
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,