Commit d10ec6e70d

Andrew Kelley <andrew@ziglang.org>
2021-04-21 07:16:45
AstGen: slightly better eager-allocating heuristic
Some early ensureCapacity calls to avoid needless reallocations.
1 parent a1ac2b9
Changed files (1)
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,