From d10ec6e70dbcf49ba14be549069271e564fec76b Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 20 Apr 2021 22:16:45 -0700 Subject: [PATCH] AstGen: slightly better eager-allocating heuristic Some early ensureCapacity calls to avoid needless reallocations. --- src/AstGen.zig | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/AstGen.zig b/src/AstGen.zig index 782ed7f749..49861cd145 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -81,8 +81,14 @@ pub fn generate(gpa: *Allocator, file: *Scope.File) InnerError!Zir { }; defer astgen.deinit(gpa); + // We expect at least as many ZIR instructions and extra data items + // as AST nodes. + try astgen.instructions.ensureTotalCapacity(gpa, file.tree.nodes.len); + // First few indexes of extra are reserved and set at the end. - try astgen.extra.resize(gpa, @typeInfo(Zir.ExtraIndex).Enum.fields.len); + const reserved_count = @typeInfo(Zir.ExtraIndex).Enum.fields.len; + try astgen.extra.ensureTotalCapacity(gpa, file.tree.nodes.len + reserved_count); + astgen.extra.items.len += reserved_count; var gen_scope: GenZir = .{ .force_comptime = true,