authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-04-20 22:16:45-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-04-20 22:16:45-07:00
logd10ec6e70dbcf49ba14be549069271e564fec76b
treeaaf536d93d9e7db99c7c507ae571730fa7331f01
parenta1ac2b95bb9d6b98c6ae862bda31c84721b92bf3

AstGen: slightly better eager-allocating heuristic

Some early ensureCapacity calls to avoid needless reallocations.

1 files changed, 7 insertions(+), 1 deletions(-)

src/AstGen.zig+7-1
...@@ -81,8 +81,14 @@ pub fn generate(gpa: *Allocator, file: *Scope.File) InnerError!Zir {...@@ -81,8 +81,14 @@ pub fn generate(gpa: *Allocator, file: *Scope.File) InnerError!Zir {
81 };81 };
82 defer astgen.deinit(gpa);82 defer astgen.deinit(gpa);
8383
84 // We expect at least as many ZIR instructions and extra data items
85 // as AST nodes.
86 try astgen.instructions.ensureTotalCapacity(gpa, file.tree.nodes.len);
87
84 // First few indexes of extra are reserved and set at the end.88 // First few indexes of extra are reserved and set at the end.
85 try astgen.extra.resize(gpa, @typeInfo(Zir.ExtraIndex).Enum.fields.len);89 const reserved_count = @typeInfo(Zir.ExtraIndex).Enum.fields.len;
90 try astgen.extra.ensureTotalCapacity(gpa, file.tree.nodes.len + reserved_count);
91 astgen.extra.items.len += reserved_count;
8692
87 var gen_scope: GenZir = .{93 var gen_scope: GenZir = .{
88 .force_comptime = true,94 .force_comptime = true,