authorgravatar for leecannon@leecannon.xyzLee Cannon <leecannon@leecannon.xyz> 2021-10-29 02:03:15+01:00
committergravatar for leecannon@leecannon.xyzLee Cannon <leecannon@leecannon.xyz> 2021-11-30 23:32:47+00:00
log75548b50ff23a3de48d166170425001c073d27c1
treede47b7ae071228835ce9108f12f0ed9612f729c7
parent47bc13bc597622fc8deffa1c1a45d47dac51eeb0
signaturelock-open Commit is signed but in an unrecognized format.

allocgate: stage 1 and 2 building


48 files changed, 227 insertions(+), 200 deletions(-)

ci/srht/update-download-page.zig+1-1
...@@ -6,7 +6,7 @@ pub fn main() !void {...@@ -6,7 +6,7 @@ pub fn main() !void {
6 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);6 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
7 defer arena.deinit();7 defer arena.deinit();
88
9 const allocator = &arena.allocator;9 const allocator = arena.getAllocator();
1010
11 const out_dir = "out";11 const out_dir = "out";
12 try std.fs.cwd().makePath(out_dir);12 try std.fs.cwd().makePath(out_dir);
doc/docgen.zig+1-1
...@@ -21,7 +21,7 @@ pub fn main() !void {...@@ -21,7 +21,7 @@ pub fn main() !void {
21 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);21 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
22 defer arena.deinit();22 defer arena.deinit();
2323
24 const allocator = &arena.allocator;24 const allocator = arena.getAllocator();
2525
26 var args_it = process.args();26 var args_it = process.args();
2727
doc/langref.html.in+13-13
...@@ -7362,7 +7362,7 @@ fn amain() !void {...@@ -7362,7 +7362,7 @@ fn amain() !void {
7362}7362}
73637363
7364var global_download_frame: anyframe = undefined;7364var global_download_frame: anyframe = undefined;
7365fn fetchUrl(allocator: *Allocator, url: []const u8) ![]u8 {7365fn fetchUrl(allocator: Allocator, url: []const u8) ![]u8 {
7366 _ = url; // this is just an example, we don't actually do it!7366 _ = url; // this is just an example, we don't actually do it!
7367 const result = try allocator.dupe(u8, "this is the downloaded url contents");7367 const result = try allocator.dupe(u8, "this is the downloaded url contents");
7368 errdefer allocator.free(result);7368 errdefer allocator.free(result);
...@@ -7374,7 +7374,7 @@ fn fetchUrl(allocator: *Allocator, url: []const u8) ![]u8 {...@@ -7374,7 +7374,7 @@ fn fetchUrl(allocator: *Allocator, url: []const u8) ![]u8 {
7374}7374}
73757375
7376var global_file_frame: anyframe = undefined;7376var global_file_frame: anyframe = undefined;
7377fn readFile(allocator: *Allocator, filename: []const u8) ![]u8 {7377fn readFile(allocator: Allocator, filename: []const u8) ![]u8 {
7378 _ = filename; // this is just an example, we don't actually do it!7378 _ = filename; // this is just an example, we don't actually do it!
7379 const result = try allocator.dupe(u8, "this is the file contents");7379 const result = try allocator.dupe(u8, "this is the file contents");
7380 errdefer allocator.free(result);7380 errdefer allocator.free(result);
...@@ -7433,7 +7433,7 @@ fn amain() !void {...@@ -7433,7 +7433,7 @@ fn amain() !void {
7433 std.debug.print("file_text: {s}\n", .{file_text});7433 std.debug.print("file_text: {s}\n", .{file_text});
7434}7434}
74357435
7436fn fetchUrl(allocator: *Allocator, url: []const u8) ![]u8 {7436fn fetchUrl(allocator: Allocator, url: []const u8) ![]u8 {
7437 _ = url; // this is just an example, we don't actually do it!7437 _ = url; // this is just an example, we don't actually do it!
7438 const result = try allocator.dupe(u8, "this is the downloaded url contents");7438 const result = try allocator.dupe(u8, "this is the downloaded url contents");
7439 errdefer allocator.free(result);7439 errdefer allocator.free(result);
...@@ -7441,7 +7441,7 @@ fn fetchUrl(allocator: *Allocator, url: []const u8) ![]u8 {...@@ -7441,7 +7441,7 @@ fn fetchUrl(allocator: *Allocator, url: []const u8) ![]u8 {
7441 return result;7441 return result;
7442}7442}
74437443
7444fn readFile(allocator: *Allocator, filename: []const u8) ![]u8 {7444fn readFile(allocator: Allocator, filename: []const u8) ![]u8 {
7445 _ = filename; // this is just an example, we don't actually do it!7445 _ = filename; // this is just an example, we don't actually do it!
7446 const result = try allocator.dupe(u8, "this is the file contents");7446 const result = try allocator.dupe(u8, "this is the file contents");
7447 errdefer allocator.free(result);7447 errdefer allocator.free(result);
...@@ -10050,8 +10050,8 @@ pub fn main() void {...@@ -10050,8 +10050,8 @@ pub fn main() void {
10050 C has a default allocator - <code>malloc</code>, <code>realloc</code>, and <code>free</code>.10050 C has a default allocator - <code>malloc</code>, <code>realloc</code>, and <code>free</code>.
10051 When linking against libc, Zig exposes this allocator with {#syntax#}std.heap.c_allocator{#endsyntax#}.10051 When linking against libc, Zig exposes this allocator with {#syntax#}std.heap.c_allocator{#endsyntax#}.
10052 However, by convention, there is no default allocator in Zig. Instead, functions which need to10052 However, by convention, there is no default allocator in Zig. Instead, functions which need to
10053 allocate accept an {#syntax#}*Allocator{#endsyntax#} parameter. Likewise, data structures such as10053 allocate accept an {#syntax#}Allocator{#endsyntax#} parameter. Likewise, data structures such as
10054 {#syntax#}std.ArrayList{#endsyntax#} accept an {#syntax#}*Allocator{#endsyntax#} parameter in10054 {#syntax#}std.ArrayList{#endsyntax#} accept an {#syntax#}Allocator{#endsyntax#} parameter in
10055 their initialization functions:10055 their initialization functions:
10056 </p>10056 </p>
10057 {#code_begin|test|allocator#}10057 {#code_begin|test|allocator#}
...@@ -10061,12 +10061,12 @@ const expect = std.testing.expect;...@@ -10061,12 +10061,12 @@ const expect = std.testing.expect;
1006110061
10062test "using an allocator" {10062test "using an allocator" {
10063 var buffer: [100]u8 = undefined;10063 var buffer: [100]u8 = undefined;
10064 const allocator = &std.heap.FixedBufferAllocator.init(&buffer).allocator;10064 const allocator = std.heap.FixedBufferAllocator.init(&buffer).getAllocator();
10065 const result = try concat(allocator, "foo", "bar");10065 const result = try concat(allocator, "foo", "bar");
10066 try expect(std.mem.eql(u8, "foobar", result));10066 try expect(std.mem.eql(u8, "foobar", result));
10067}10067}
1006810068
10069fn concat(allocator: *Allocator, a: []const u8, b: []const u8) ![]u8 {10069fn concat(allocator: Allocator, a: []const u8, b: []const u8) ![]u8 {
10070 const result = try allocator.alloc(u8, a.len + b.len);10070 const result = try allocator.alloc(u8, a.len + b.len);
10071 std.mem.copy(u8, result, a);10071 std.mem.copy(u8, result, a);
10072 std.mem.copy(u8, result[a.len..], b);10072 std.mem.copy(u8, result[a.len..], b);
...@@ -10091,7 +10091,7 @@ fn concat(allocator: *Allocator, a: []const u8, b: []const u8) ![]u8 {...@@ -10091,7 +10091,7 @@ fn concat(allocator: *Allocator, a: []const u8, b: []const u8) ![]u8 {
10091 </p>10091 </p>
10092 <ol>10092 <ol>
10093 <li>10093 <li>
10094 Are you making a library? In this case, best to accept an {#syntax#}*Allocator{#endsyntax#}10094 Are you making a library? In this case, best to accept an {#syntax#}Allocator{#endsyntax#}
10095 as a parameter and allow your library's users to decide what allocator to use.10095 as a parameter and allow your library's users to decide what allocator to use.
10096 </li>10096 </li>
10097 <li>Are you linking libc? In this case, {#syntax#}std.heap.c_allocator{#endsyntax#} is likely10097 <li>Are you linking libc? In this case, {#syntax#}std.heap.c_allocator{#endsyntax#} is likely
...@@ -10114,7 +10114,7 @@ pub fn main() !void {...@@ -10114,7 +10114,7 @@ pub fn main() !void {
10114 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);10114 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
10115 defer arena.deinit();10115 defer arena.deinit();
1011610116
10117 const allocator = &arena.allocator;10117 const allocator = arena.getAllocator();
1011810118
10119 const ptr = try allocator.create(i32);10119 const ptr = try allocator.create(i32);
10120 std.debug.print("ptr={*}\n", .{ptr});10120 std.debug.print("ptr={*}\n", .{ptr});
...@@ -10281,7 +10281,7 @@ test "string literal to constant slice" {...@@ -10281,7 +10281,7 @@ test "string literal to constant slice" {
10281 <p>10281 <p>
10282 For example, the function's documentation may say "caller owns the returned memory", in which case10282 For example, the function's documentation may say "caller owns the returned memory", in which case
10283 the code that calls the function must have a plan for when to free that memory. Probably in this situation,10283 the code that calls the function must have a plan for when to free that memory. Probably in this situation,
10284 the function will accept an {#syntax#}*Allocator{#endsyntax#} parameter.10284 the function will accept an {#syntax#}Allocator{#endsyntax#} parameter.
10285 </p>10285 </p>
10286 <p>10286 <p>
10287 Sometimes the lifetime of a pointer may be more complicated. For example, the10287 Sometimes the lifetime of a pointer may be more complicated. For example, the
...@@ -10820,7 +10820,7 @@ const std = @import("std");...@@ -10820,7 +10820,7 @@ const std = @import("std");
1082010820
10821pub fn main() !void {10821pub fn main() !void {
10822 var general_purpose_allocator = std.heap.GeneralPurposeAllocator(.{}){};10822 var general_purpose_allocator = std.heap.GeneralPurposeAllocator(.{}){};
10823 const gpa = &general_purpose_allocator.allocator;10823 const gpa = general_purpose_allocator.getAllocator();
10824 const args = try std.process.argsAlloc(gpa);10824 const args = try std.process.argsAlloc(gpa);
10825 defer std.process.argsFree(gpa, args);10825 defer std.process.argsFree(gpa, args);
1082610826
...@@ -10842,7 +10842,7 @@ const PreopenList = std.fs.wasi.PreopenList;...@@ -10842,7 +10842,7 @@ const PreopenList = std.fs.wasi.PreopenList;
1084210842
10843pub fn main() !void {10843pub fn main() !void {
10844 var general_purpose_allocator = std.heap.GeneralPurposeAllocator(.{}){};10844 var general_purpose_allocator = std.heap.GeneralPurposeAllocator(.{}){};
10845 const gpa = &general_purpose_allocator.allocator;10845 const gpa = general_purpose_allocator.getAllocator();
1084610846
10847 var preopens = PreopenList.init(gpa);10847 var preopens = PreopenList.init(gpa);
10848 defer preopens.deinit();10848 defer preopens.deinit();
lib/std/event/loop.zig+2-2
...@@ -173,12 +173,12 @@ pub const Loop = struct {...@@ -173,12 +173,12 @@ pub const Loop = struct {
173 // We need at least one of these in case the fs thread wants to use onNextTick173 // We need at least one of these in case the fs thread wants to use onNextTick
174 const extra_thread_count = thread_count - 1;174 const extra_thread_count = thread_count - 1;
175 const resume_node_count = std.math.max(extra_thread_count, 1);175 const resume_node_count = std.math.max(extra_thread_count, 1);
176 self.eventfd_resume_nodes = try self.arena.allocator.alloc(176 self.eventfd_resume_nodes = try self.arena.getAllocator().alloc(
177 std.atomic.Stack(ResumeNode.EventFd).Node,177 std.atomic.Stack(ResumeNode.EventFd).Node,
178 resume_node_count,178 resume_node_count,
179 );179 );
180180
181 self.extra_threads = try self.arena.allocator.alloc(Thread, extra_thread_count);181 self.extra_threads = try self.arena.getAllocator().alloc(Thread, extra_thread_count);
182182
183 try self.initOsData(extra_thread_count);183 try self.initOsData(extra_thread_count);
184 errdefer self.deinitOsData();184 errdefer self.deinitOsData();
src/AstGen.zig+8-7
...@@ -98,7 +98,7 @@ pub fn generate(gpa: Allocator, tree: Ast) Allocator.Error!Zir {...@@ -98,7 +98,7 @@ pub fn generate(gpa: Allocator, tree: Ast) Allocator.Error!Zir {
9898
99 var astgen: AstGen = .{99 var astgen: AstGen = .{
100 .gpa = gpa,100 .gpa = gpa,
101 .arena = &arena.allocator,101 .arena = arena.getAllocator(),
102 .tree = &tree,102 .tree = &tree,
103 };103 };
104 defer astgen.deinit(gpa);104 defer astgen.deinit(gpa);
...@@ -1939,6 +1939,7 @@ fn blockExprStmts(gz: *GenZir, parent_scope: *Scope, statements: []const Ast.Nod...@@ -1939,6 +1939,7 @@ fn blockExprStmts(gz: *GenZir, parent_scope: *Scope, statements: []const Ast.Nod
19391939
1940 var block_arena = std.heap.ArenaAllocator.init(gz.astgen.gpa);1940 var block_arena = std.heap.ArenaAllocator.init(gz.astgen.gpa);
1941 defer block_arena.deinit();1941 defer block_arena.deinit();
1942 const block_arena_allocator = block_arena.getAllocator();
19421943
1943 var noreturn_src_node: Ast.Node.Index = 0;1944 var noreturn_src_node: Ast.Node.Index = 0;
1944 var scope = parent_scope;1945 var scope = parent_scope;
...@@ -1959,13 +1960,13 @@ fn blockExprStmts(gz: *GenZir, parent_scope: *Scope, statements: []const Ast.Nod...@@ -1959,13 +1960,13 @@ fn blockExprStmts(gz: *GenZir, parent_scope: *Scope, statements: []const Ast.Nod
1959 }1960 }
1960 switch (node_tags[statement]) {1961 switch (node_tags[statement]) {
1961 // zig fmt: off1962 // zig fmt: off
1962 .global_var_decl => scope = try varDecl(gz, scope, statement, &block_arena.allocator, tree.globalVarDecl(statement)),1963 .global_var_decl => scope = try varDecl(gz, scope, statement, block_arena_allocator, tree.globalVarDecl(statement)),
1963 .local_var_decl => scope = try varDecl(gz, scope, statement, &block_arena.allocator, tree.localVarDecl(statement)),1964 .local_var_decl => scope = try varDecl(gz, scope, statement, block_arena_allocator, tree.localVarDecl(statement)),
1964 .simple_var_decl => scope = try varDecl(gz, scope, statement, &block_arena.allocator, tree.simpleVarDecl(statement)),1965 .simple_var_decl => scope = try varDecl(gz, scope, statement, block_arena_allocator, tree.simpleVarDecl(statement)),
1965 .aligned_var_decl => scope = try varDecl(gz, scope, statement, &block_arena.allocator, tree.alignedVarDecl(statement)),1966 .aligned_var_decl => scope = try varDecl(gz, scope, statement, block_arena_allocator, tree.alignedVarDecl(statement)),
19661967
1967 .@"defer" => scope = try makeDeferScope(gz.astgen, scope, statement, &block_arena.allocator, .defer_normal),1968 .@"defer" => scope = try makeDeferScope(gz.astgen, scope, statement, block_arena_allocator, .defer_normal),
1968 .@"errdefer" => scope = try makeDeferScope(gz.astgen, scope, statement, &block_arena.allocator, .defer_error),1969 .@"errdefer" => scope = try makeDeferScope(gz.astgen, scope, statement, block_arena_allocator, .defer_error),
19691970
1970 .assign => try assign(gz, scope, statement),1971 .assign => try assign(gz, scope, statement),
19711972
src/Compilation.zig+27-24
...@@ -412,28 +412,29 @@ pub const AllErrors = struct {...@@ -412,28 +412,29 @@ pub const AllErrors = struct {
412 errors: *std.ArrayList(Message),412 errors: *std.ArrayList(Message),
413 module_err_msg: Module.ErrorMsg,413 module_err_msg: Module.ErrorMsg,
414 ) !void {414 ) !void {
415 const notes = try arena.allocator.alloc(Message, module_err_msg.notes.len);415 const allocator = arena.getAllocator();
416 const notes = try allocator.alloc(Message, module_err_msg.notes.len);
416 for (notes) |*note, i| {417 for (notes) |*note, i| {
417 const module_note = module_err_msg.notes[i];418 const module_note = module_err_msg.notes[i];
418 const source = try module_note.src_loc.file_scope.getSource(module.gpa);419 const source = try module_note.src_loc.file_scope.getSource(module.gpa);
419 const byte_offset = try module_note.src_loc.byteOffset(module.gpa);420 const byte_offset = try module_note.src_loc.byteOffset(module.gpa);
420 const loc = std.zig.findLineColumn(source, byte_offset);421 const loc = std.zig.findLineColumn(source, byte_offset);
421 const file_path = try module_note.src_loc.file_scope.fullPath(&arena.allocator);422 const file_path = try module_note.src_loc.file_scope.fullPath(allocator);
422 note.* = .{423 note.* = .{
423 .src = .{424 .src = .{
424 .src_path = file_path,425 .src_path = file_path,
425 .msg = try arena.allocator.dupe(u8, module_note.msg),426 .msg = try allocator.dupe(u8, module_note.msg),
426 .byte_offset = byte_offset,427 .byte_offset = byte_offset,
427 .line = @intCast(u32, loc.line),428 .line = @intCast(u32, loc.line),
428 .column = @intCast(u32, loc.column),429 .column = @intCast(u32, loc.column),
429 .source_line = try arena.allocator.dupe(u8, loc.source_line),430 .source_line = try allocator.dupe(u8, loc.source_line),
430 },431 },
431 };432 };
432 }433 }
433 if (module_err_msg.src_loc.lazy == .entire_file) {434 if (module_err_msg.src_loc.lazy == .entire_file) {
434 try errors.append(.{435 try errors.append(.{
435 .plain = .{436 .plain = .{
436 .msg = try arena.allocator.dupe(u8, module_err_msg.msg),437 .msg = try allocator.dupe(u8, module_err_msg.msg),
437 },438 },
438 });439 });
439 return;440 return;
...@@ -441,16 +442,16 @@ pub const AllErrors = struct {...@@ -441,16 +442,16 @@ pub const AllErrors = struct {
441 const source = try module_err_msg.src_loc.file_scope.getSource(module.gpa);442 const source = try module_err_msg.src_loc.file_scope.getSource(module.gpa);
442 const byte_offset = try module_err_msg.src_loc.byteOffset(module.gpa);443 const byte_offset = try module_err_msg.src_loc.byteOffset(module.gpa);
443 const loc = std.zig.findLineColumn(source, byte_offset);444 const loc = std.zig.findLineColumn(source, byte_offset);
444 const file_path = try module_err_msg.src_loc.file_scope.fullPath(&arena.allocator);445 const file_path = try module_err_msg.src_loc.file_scope.fullPath(allocator);
445 try errors.append(.{446 try errors.append(.{
446 .src = .{447 .src = .{
447 .src_path = file_path,448 .src_path = file_path,
448 .msg = try arena.allocator.dupe(u8, module_err_msg.msg),449 .msg = try allocator.dupe(u8, module_err_msg.msg),
449 .byte_offset = byte_offset,450 .byte_offset = byte_offset,
450 .line = @intCast(u32, loc.line),451 .line = @intCast(u32, loc.line),
451 .column = @intCast(u32, loc.column),452 .column = @intCast(u32, loc.column),
452 .notes = notes,453 .notes = notes,
453 .source_line = try arena.allocator.dupe(u8, loc.source_line),454 .source_line = try allocator.dupe(u8, loc.source_line),
454 },455 },
455 });456 });
456 }457 }
...@@ -548,11 +549,12 @@ pub const AllErrors = struct {...@@ -548,11 +549,12 @@ pub const AllErrors = struct {
548 msg: []const u8,549 msg: []const u8,
549 optional_children: ?AllErrors,550 optional_children: ?AllErrors,
550 ) !void {551 ) !void {
551 const duped_msg = try arena.allocator.dupe(u8, msg);552 const allocator = arena.getAllocator();
553 const duped_msg = try allocator.dupe(u8, msg);
552 if (optional_children) |*children| {554 if (optional_children) |*children| {
553 try errors.append(.{ .plain = .{555 try errors.append(.{ .plain = .{
554 .msg = duped_msg,556 .msg = duped_msg,
555 .notes = try dupeList(children.list, &arena.allocator),557 .notes = try dupeList(children.list, allocator),
556 } });558 } });
557 } else {559 } else {
558 try errors.append(.{ .plain = .{ .msg = duped_msg } });560 try errors.append(.{ .plain = .{ .msg = duped_msg } });
...@@ -786,7 +788,7 @@ fn addPackageTableToCacheHash(...@@ -786,7 +788,7 @@ fn addPackageTableToCacheHash(
786 seen_table: *std.AutoHashMap(*Package, void),788 seen_table: *std.AutoHashMap(*Package, void),
787 hash_type: union(enum) { path_bytes, files: *Cache.Manifest },789 hash_type: union(enum) { path_bytes, files: *Cache.Manifest },
788) (error{OutOfMemory} || std.os.GetCwdError)!void {790) (error{OutOfMemory} || std.os.GetCwdError)!void {
789 const allocator = &arena.allocator;791 const allocator = arena.getAllocator();
790792
791 const packages = try allocator.alloc(Package.Table.KV, pkg_table.count());793 const packages = try allocator.alloc(Package.Table.KV, pkg_table.count());
792 {794 {
...@@ -850,7 +852,7 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation {...@@ -850,7 +852,7 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation {
850 // initialization and then is freed in deinit().852 // initialization and then is freed in deinit().
851 var arena_allocator = std.heap.ArenaAllocator.init(gpa);853 var arena_allocator = std.heap.ArenaAllocator.init(gpa);
852 errdefer arena_allocator.deinit();854 errdefer arena_allocator.deinit();
853 const arena = &arena_allocator.allocator;855 const arena = arena_allocator.getAllocator();
854856
855 // We put the `Compilation` itself in the arena. Freeing the arena will free the module.857 // We put the `Compilation` itself in the arena. Freeing the arena will free the module.
856 // It's initialized later after we prepare the initialization options.858 // It's initialized later after we prepare the initialization options.
...@@ -1208,7 +1210,7 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation {...@@ -1208,7 +1210,7 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation {
1208 {1210 {
1209 var local_arena = std.heap.ArenaAllocator.init(gpa);1211 var local_arena = std.heap.ArenaAllocator.init(gpa);
1210 defer local_arena.deinit();1212 defer local_arena.deinit();
1211 var seen_table = std.AutoHashMap(*Package, void).init(&local_arena.allocator);1213 var seen_table = std.AutoHashMap(*Package, void).init(local_arena.getAllocator());
1212 try addPackageTableToCacheHash(&hash, &local_arena, main_pkg.table, &seen_table, .path_bytes);1214 try addPackageTableToCacheHash(&hash, &local_arena, main_pkg.table, &seen_table, .path_bytes);
1213 }1215 }
1214 hash.add(valgrind);1216 hash.add(valgrind);
...@@ -2011,6 +2013,7 @@ pub fn totalErrorCount(self: *Compilation) usize {...@@ -2011,6 +2013,7 @@ pub fn totalErrorCount(self: *Compilation) usize {
2011pub fn getAllErrorsAlloc(self: *Compilation) !AllErrors {2013pub fn getAllErrorsAlloc(self: *Compilation) !AllErrors {
2012 var arena = std.heap.ArenaAllocator.init(self.gpa);2014 var arena = std.heap.ArenaAllocator.init(self.gpa);
2013 errdefer arena.deinit();2015 errdefer arena.deinit();
2016 const arena_allocator = arena.getAllocator();
20142017
2015 var errors = std.ArrayList(AllErrors.Message).init(self.gpa);2018 var errors = std.ArrayList(AllErrors.Message).init(self.gpa);
2016 defer errors.deinit();2019 defer errors.deinit();
...@@ -2024,8 +2027,8 @@ pub fn getAllErrorsAlloc(self: *Compilation) !AllErrors {...@@ -2024,8 +2027,8 @@ pub fn getAllErrorsAlloc(self: *Compilation) !AllErrors {
2024 // C error reporting bubbling up.2027 // C error reporting bubbling up.
2025 try errors.append(.{2028 try errors.append(.{
2026 .src = .{2029 .src = .{
2027 .src_path = try arena.allocator.dupe(u8, c_object.src.src_path),2030 .src_path = try arena_allocator.dupe(u8, c_object.src.src_path),
2028 .msg = try std.fmt.allocPrint(&arena.allocator, "unable to build C object: {s}", .{2031 .msg = try std.fmt.allocPrint(arena_allocator, "unable to build C object: {s}", .{
2029 err_msg.msg,2032 err_msg.msg,
2030 }),2033 }),
2031 .byte_offset = 0,2034 .byte_offset = 0,
...@@ -2050,7 +2053,7 @@ pub fn getAllErrorsAlloc(self: *Compilation) !AllErrors {...@@ -2050,7 +2053,7 @@ pub fn getAllErrorsAlloc(self: *Compilation) !AllErrors {
2050 // must have completed successfully.2053 // must have completed successfully.
2051 const tree = try entry.key_ptr.*.getTree(module.gpa);2054 const tree = try entry.key_ptr.*.getTree(module.gpa);
2052 assert(tree.errors.len == 0);2055 assert(tree.errors.len == 0);
2053 try AllErrors.addZir(&arena.allocator, &errors, entry.key_ptr.*);2056 try AllErrors.addZir(arena_allocator, &errors, entry.key_ptr.*);
2054 }2057 }
2055 }2058 }
2056 }2059 }
...@@ -2089,7 +2092,7 @@ pub fn getAllErrorsAlloc(self: *Compilation) !AllErrors {...@@ -2089,7 +2092,7 @@ pub fn getAllErrorsAlloc(self: *Compilation) !AllErrors {
2089 if (errors.items.len == 0 and self.link_error_flags.no_entry_point_found) {2092 if (errors.items.len == 0 and self.link_error_flags.no_entry_point_found) {
2090 try errors.append(.{2093 try errors.append(.{
2091 .plain = .{2094 .plain = .{
2092 .msg = try std.fmt.allocPrint(&arena.allocator, "no entry point found", .{}),2095 .msg = try std.fmt.allocPrint(arena_allocator, "no entry point found", .{}),
2093 },2096 },
2094 });2097 });
2095 }2098 }
...@@ -2121,7 +2124,7 @@ pub fn getAllErrorsAlloc(self: *Compilation) !AllErrors {...@@ -2121,7 +2124,7 @@ pub fn getAllErrorsAlloc(self: *Compilation) !AllErrors {
2121 assert(errors.items.len == self.totalErrorCount());2124 assert(errors.items.len == self.totalErrorCount());
21222125
2123 return AllErrors{2126 return AllErrors{
2124 .list = try arena.allocator.dupe(AllErrors.Message, errors.items),2127 .list = try arena_allocator.dupe(AllErrors.Message, errors.items),
2125 .arena = arena.state,2128 .arena = arena.state,
2126 };2129 };
2127}2130}
...@@ -2292,7 +2295,7 @@ fn processOneJob(comp: *Compilation, job: Job, main_progress_node: *std.Progress...@@ -2292,7 +2295,7 @@ fn processOneJob(comp: *Compilation, job: Job, main_progress_node: *std.Progress
22922295
2293 var tmp_arena = std.heap.ArenaAllocator.init(gpa);2296 var tmp_arena = std.heap.ArenaAllocator.init(gpa);
2294 defer tmp_arena.deinit();2297 defer tmp_arena.deinit();
2295 const sema_arena = &tmp_arena.allocator;2298 const sema_arena = tmp_arena.getAllocator();
22962299
2297 const sema_frame = tracy.namedFrame("sema");2300 const sema_frame = tracy.namedFrame("sema");
2298 var sema_frame_ended = false;2301 var sema_frame_ended = false;
...@@ -2387,7 +2390,7 @@ fn processOneJob(comp: *Compilation, job: Job, main_progress_node: *std.Progress...@@ -2387,7 +2390,7 @@ fn processOneJob(comp: *Compilation, job: Job, main_progress_node: *std.Progress
2387 .decl = decl,2390 .decl = decl,
2388 .fwd_decl = fwd_decl.toManaged(gpa),2391 .fwd_decl = fwd_decl.toManaged(gpa),
2389 .typedefs = c_codegen.TypedefMap.init(gpa),2392 .typedefs = c_codegen.TypedefMap.init(gpa),
2390 .typedefs_arena = &typedefs_arena.allocator,2393 .typedefs_arena = typedefs_arena.getAllocator(),
2391 };2394 };
2392 defer dg.fwd_decl.deinit();2395 defer dg.fwd_decl.deinit();
2393 defer dg.typedefs.deinit();2396 defer dg.typedefs.deinit();
...@@ -2841,7 +2844,7 @@ pub fn cImport(comp: *Compilation, c_src: []const u8) !CImportResult {...@@ -2841,7 +2844,7 @@ pub fn cImport(comp: *Compilation, c_src: []const u8) !CImportResult {
2841 const digest = if (!actual_hit) digest: {2844 const digest = if (!actual_hit) digest: {
2842 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);2845 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);
2843 defer arena_allocator.deinit();2846 defer arena_allocator.deinit();
2844 const arena = &arena_allocator.allocator;2847 const arena = arena_allocator.getAllocator();
28452848
2846 const tmp_digest = man.hash.peek();2849 const tmp_digest = man.hash.peek();
2847 const tmp_dir_sub_path = try std.fs.path.join(arena, &[_][]const u8{ "o", &tmp_digest });2850 const tmp_dir_sub_path = try std.fs.path.join(arena, &[_][]const u8{ "o", &tmp_digest });
...@@ -3096,7 +3099,7 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P...@@ -3096,7 +3099,7 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P
30963099
3097 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);3100 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);
3098 defer arena_allocator.deinit();3101 defer arena_allocator.deinit();
3099 const arena = &arena_allocator.allocator;3102 const arena = arena_allocator.getAllocator();
31003103
3101 const c_source_basename = std.fs.path.basename(c_object.src.src_path);3104 const c_source_basename = std.fs.path.basename(c_object.src.src_path);
31023105
...@@ -4417,7 +4420,7 @@ fn updateStage1Module(comp: *Compilation, main_progress_node: *std.Progress.Node...@@ -4417,7 +4420,7 @@ fn updateStage1Module(comp: *Compilation, main_progress_node: *std.Progress.Node
44174420
4418 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);4421 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);
4419 defer arena_allocator.deinit();4422 defer arena_allocator.deinit();
4420 const arena = &arena_allocator.allocator;4423 const arena = arena_allocator.getAllocator();
44214424
4422 // Here we use the legacy stage1 C++ compiler to compile Zig code.4425 // Here we use the legacy stage1 C++ compiler to compile Zig code.
4423 const mod = comp.bin_file.options.module.?;4426 const mod = comp.bin_file.options.module.?;
...@@ -4454,7 +4457,7 @@ fn updateStage1Module(comp: *Compilation, main_progress_node: *std.Progress.Node...@@ -4454,7 +4457,7 @@ fn updateStage1Module(comp: *Compilation, main_progress_node: *std.Progress.Node
44544457
4455 _ = try man.addFile(main_zig_file, null);4458 _ = try man.addFile(main_zig_file, null);
4456 {4459 {
4457 var seen_table = std.AutoHashMap(*Package, void).init(&arena_allocator.allocator);4460 var seen_table = std.AutoHashMap(*Package, void).init(arena_allocator.getAllocator());
4458 try addPackageTableToCacheHash(&man.hash, &arena_allocator, mod.main_pkg.table, &seen_table, .{ .files = &man });4461 try addPackageTableToCacheHash(&man.hash, &arena_allocator, mod.main_pkg.table, &seen_table, .{ .files = &man });
4459 }4462 }
4460 man.hash.add(comp.bin_file.options.valgrind);4463 man.hash.add(comp.bin_file.options.valgrind);
src/DepTokenizer.zig+1-1
...@@ -878,7 +878,7 @@ test "error prereq - continuation expecting end-of-line" {...@@ -878,7 +878,7 @@ test "error prereq - continuation expecting end-of-line" {
878// - tokenize input, emit textual representation, and compare to expect878// - tokenize input, emit textual representation, and compare to expect
879fn depTokenizer(input: []const u8, expect: []const u8) !void {879fn depTokenizer(input: []const u8, expect: []const u8) !void {
880 var arena_allocator = std.heap.ArenaAllocator.init(std.testing.allocator);880 var arena_allocator = std.heap.ArenaAllocator.init(std.testing.allocator);
881 const arena = &arena_allocator.allocator;881 const arena = arena_allocator.getAllocator();
882 defer arena_allocator.deinit();882 defer arena_allocator.deinit();
883883
884 var it: Tokenizer = .{ .bytes = input };884 var it: Tokenizer = .{ .bytes = input };
src/Module.zig+33-28
...@@ -517,7 +517,7 @@ pub const Decl = struct {...@@ -517,7 +517,7 @@ pub const Decl = struct {
517517
518 pub fn finalizeNewArena(decl: *Decl, arena: *std.heap.ArenaAllocator) !void {518 pub fn finalizeNewArena(decl: *Decl, arena: *std.heap.ArenaAllocator) !void {
519 assert(decl.value_arena == null);519 assert(decl.value_arena == null);
520 const arena_state = try arena.allocator.create(std.heap.ArenaAllocator.State);520 const arena_state = try arena.getAllocator().create(std.heap.ArenaAllocator.State);
521 arena_state.* = arena.state;521 arena_state.* = arena.state;
522 decl.value_arena = arena_state;522 decl.value_arena = arena_state;
523 }523 }
...@@ -3159,10 +3159,11 @@ pub fn semaFile(mod: *Module, file: *File) SemaError!void {...@@ -3159,10 +3159,11 @@ pub fn semaFile(mod: *Module, file: *File) SemaError!void {
3159 const gpa = mod.gpa;3159 const gpa = mod.gpa;
3160 var new_decl_arena = std.heap.ArenaAllocator.init(gpa);3160 var new_decl_arena = std.heap.ArenaAllocator.init(gpa);
3161 errdefer new_decl_arena.deinit();3161 errdefer new_decl_arena.deinit();
3162 const new_decl_arena_allocator = new_decl_arena.getAllocator();
31623163
3163 const struct_obj = try new_decl_arena.allocator.create(Module.Struct);3164 const struct_obj = try new_decl_arena_allocator.create(Module.Struct);
3164 const struct_ty = try Type.Tag.@"struct".create(&new_decl_arena.allocator, struct_obj);3165 const struct_ty = try Type.Tag.@"struct".create(new_decl_arena_allocator, struct_obj);
3165 const struct_val = try Value.Tag.ty.create(&new_decl_arena.allocator, struct_ty);3166 const struct_val = try Value.Tag.ty.create(new_decl_arena_allocator, struct_ty);
3166 const ty_ty = comptime Type.initTag(.type);3167 const ty_ty = comptime Type.initTag(.type);
3167 struct_obj.* = .{3168 struct_obj.* = .{
3168 .owner_decl = undefined, // set below3169 .owner_decl = undefined, // set below
...@@ -3202,12 +3203,13 @@ pub fn semaFile(mod: *Module, file: *File) SemaError!void {...@@ -3202,12 +3203,13 @@ pub fn semaFile(mod: *Module, file: *File) SemaError!void {
32023203
3203 var sema_arena = std.heap.ArenaAllocator.init(gpa);3204 var sema_arena = std.heap.ArenaAllocator.init(gpa);
3204 defer sema_arena.deinit();3205 defer sema_arena.deinit();
3206 const sema_arena_allocator = sema_arena.getAllocator();
32053207
3206 var sema: Sema = .{3208 var sema: Sema = .{
3207 .mod = mod,3209 .mod = mod,
3208 .gpa = gpa,3210 .gpa = gpa,
3209 .arena = &sema_arena.allocator,3211 .arena = sema_arena_allocator,
3210 .perm_arena = &new_decl_arena.allocator,3212 .perm_arena = new_decl_arena_allocator,
3211 .code = file.zir,3213 .code = file.zir,
3212 .owner_decl = new_decl,3214 .owner_decl = new_decl,
3213 .func = null,3215 .func = null,
...@@ -3216,7 +3218,7 @@ pub fn semaFile(mod: *Module, file: *File) SemaError!void {...@@ -3216,7 +3218,7 @@ pub fn semaFile(mod: *Module, file: *File) SemaError!void {
3216 };3218 };
3217 defer sema.deinit();3219 defer sema.deinit();
32183220
3219 var wip_captures = try WipCaptureScope.init(gpa, &new_decl_arena.allocator, null);3221 var wip_captures = try WipCaptureScope.init(gpa, new_decl_arena_allocator, null);
3220 defer wip_captures.deinit();3222 defer wip_captures.deinit();
32213223
3222 var block_scope: Sema.Block = .{3224 var block_scope: Sema.Block = .{
...@@ -3265,15 +3267,17 @@ fn semaDecl(mod: *Module, decl: *Decl) !bool {...@@ -3265,15 +3267,17 @@ fn semaDecl(mod: *Module, decl: *Decl) !bool {
3265 // We need the memory for the Type to go into the arena for the Decl3267 // We need the memory for the Type to go into the arena for the Decl
3266 var decl_arena = std.heap.ArenaAllocator.init(gpa);3268 var decl_arena = std.heap.ArenaAllocator.init(gpa);
3267 errdefer decl_arena.deinit();3269 errdefer decl_arena.deinit();
3270 const decl_arena_allocator = decl_arena.getAllocator();
32683271
3269 var analysis_arena = std.heap.ArenaAllocator.init(gpa);3272 var analysis_arena = std.heap.ArenaAllocator.init(gpa);
3270 defer analysis_arena.deinit();3273 defer analysis_arena.deinit();
3274 const analysis_arena_allocator = analysis_arena.getAllocator();
32713275
3272 var sema: Sema = .{3276 var sema: Sema = .{
3273 .mod = mod,3277 .mod = mod,
3274 .gpa = gpa,3278 .gpa = gpa,
3275 .arena = &analysis_arena.allocator,3279 .arena = analysis_arena_allocator,
3276 .perm_arena = &decl_arena.allocator,3280 .perm_arena = decl_arena_allocator,
3277 .code = zir,3281 .code = zir,
3278 .owner_decl = decl,3282 .owner_decl = decl,
3279 .func = null,3283 .func = null,
...@@ -3296,7 +3300,7 @@ fn semaDecl(mod: *Module, decl: *Decl) !bool {...@@ -3296,7 +3300,7 @@ fn semaDecl(mod: *Module, decl: *Decl) !bool {
3296 }3300 }
3297 log.debug("semaDecl {*} ({s})", .{ decl, decl.name });3301 log.debug("semaDecl {*} ({s})", .{ decl, decl.name });
32983302
3299 var wip_captures = try WipCaptureScope.init(gpa, &decl_arena.allocator, decl.src_scope);3303 var wip_captures = try WipCaptureScope.init(gpa, decl_arena_allocator, decl.src_scope);
3300 defer wip_captures.deinit();3304 defer wip_captures.deinit();
33013305
3302 var block_scope: Sema.Block = .{3306 var block_scope: Sema.Block = .{
...@@ -3356,7 +3360,7 @@ fn semaDecl(mod: *Module, decl: *Decl) !bool {...@@ -3356,7 +3360,7 @@ fn semaDecl(mod: *Module, decl: *Decl) !bool {
3356 // not the struct itself.3360 // not the struct itself.
3357 try sema.resolveTypeLayout(&block_scope, src, decl_tv.ty);3361 try sema.resolveTypeLayout(&block_scope, src, decl_tv.ty);
33583362
3359 const decl_arena_state = try decl_arena.allocator.create(std.heap.ArenaAllocator.State);3363 const decl_arena_state = try decl_arena_allocator.create(std.heap.ArenaAllocator.State);
33603364
3361 if (decl.is_usingnamespace) {3365 if (decl.is_usingnamespace) {
3362 const ty_ty = Type.initTag(.type);3366 const ty_ty = Type.initTag(.type);
...@@ -3370,7 +3374,7 @@ fn semaDecl(mod: *Module, decl: *Decl) !bool {...@@ -3370,7 +3374,7 @@ fn semaDecl(mod: *Module, decl: *Decl) !bool {
3370 }3374 }
33713375
3372 decl.ty = ty_ty;3376 decl.ty = ty_ty;
3373 decl.val = try Value.Tag.ty.create(&decl_arena.allocator, ty);3377 decl.val = try Value.Tag.ty.create(decl_arena_allocator, ty);
3374 decl.align_val = Value.initTag(.null_value);3378 decl.align_val = Value.initTag(.null_value);
3375 decl.linksection_val = Value.initTag(.null_value);3379 decl.linksection_val = Value.initTag(.null_value);
3376 decl.has_tv = true;3380 decl.has_tv = true;
...@@ -3400,10 +3404,10 @@ fn semaDecl(mod: *Module, decl: *Decl) !bool {...@@ -3400,10 +3404,10 @@ fn semaDecl(mod: *Module, decl: *Decl) !bool {
3400 decl.clearValues(gpa);3404 decl.clearValues(gpa);
3401 }3405 }
34023406
3403 decl.ty = try decl_tv.ty.copy(&decl_arena.allocator);3407 decl.ty = try decl_tv.ty.copy(decl_arena_allocator);
3404 decl.val = try decl_tv.val.copy(&decl_arena.allocator);3408 decl.val = try decl_tv.val.copy(decl_arena_allocator);
3405 decl.align_val = try align_val.copy(&decl_arena.allocator);3409 decl.align_val = try align_val.copy(decl_arena_allocator);
3406 decl.linksection_val = try linksection_val.copy(&decl_arena.allocator);3410 decl.linksection_val = try linksection_val.copy(decl_arena_allocator);
3407 decl.@"addrspace" = address_space;3411 decl.@"addrspace" = address_space;
3408 decl.has_tv = true;3412 decl.has_tv = true;
3409 decl.owns_tv = owns_tv;3413 decl.owns_tv = owns_tv;
...@@ -3453,7 +3457,7 @@ fn semaDecl(mod: *Module, decl: *Decl) !bool {...@@ -3453,7 +3457,7 @@ fn semaDecl(mod: *Module, decl: *Decl) !bool {
3453 decl.owns_tv = true;3457 decl.owns_tv = true;
3454 queue_linker_work = true;3458 queue_linker_work = true;
34553459
3456 const copied_init = try variable.init.copy(&decl_arena.allocator);3460 const copied_init = try variable.init.copy(decl_arena_allocator);
3457 variable.init = copied_init;3461 variable.init = copied_init;
3458 }3462 }
3459 },3463 },
...@@ -3476,10 +3480,10 @@ fn semaDecl(mod: *Module, decl: *Decl) !bool {...@@ -3476,10 +3480,10 @@ fn semaDecl(mod: *Module, decl: *Decl) !bool {
3476 },3480 },
3477 }3481 }
34783482
3479 decl.ty = try decl_tv.ty.copy(&decl_arena.allocator);3483 decl.ty = try decl_tv.ty.copy(decl_arena_allocator);
3480 decl.val = try decl_tv.val.copy(&decl_arena.allocator);3484 decl.val = try decl_tv.val.copy(decl_arena_allocator);
3481 decl.align_val = try align_val.copy(&decl_arena.allocator);3485 decl.align_val = try align_val.copy(decl_arena_allocator);
3482 decl.linksection_val = try linksection_val.copy(&decl_arena.allocator);3486 decl.linksection_val = try linksection_val.copy(decl_arena_allocator);
3483 decl.@"addrspace" = address_space;3487 decl.@"addrspace" = address_space;
3484 decl.has_tv = true;3488 decl.has_tv = true;
3485 decl_arena_state.* = decl_arena.state;3489 decl_arena_state.* = decl_arena.state;
...@@ -4128,12 +4132,13 @@ pub fn analyzeFnBody(mod: *Module, decl: *Decl, func: *Fn, arena: Allocator) Sem...@@ -4128,12 +4132,13 @@ pub fn analyzeFnBody(mod: *Module, decl: *Decl, func: *Fn, arena: Allocator) Sem
4128 // Use the Decl's arena for captured values.4132 // Use the Decl's arena for captured values.
4129 var decl_arena = decl.value_arena.?.promote(gpa);4133 var decl_arena = decl.value_arena.?.promote(gpa);
4130 defer decl.value_arena.?.* = decl_arena.state;4134 defer decl.value_arena.?.* = decl_arena.state;
4135 const decl_arena_allocator = decl_arena.getAllocator();
41314136
4132 var sema: Sema = .{4137 var sema: Sema = .{
4133 .mod = mod,4138 .mod = mod,
4134 .gpa = gpa,4139 .gpa = gpa,
4135 .arena = arena,4140 .arena = arena,
4136 .perm_arena = &decl_arena.allocator,4141 .perm_arena = decl_arena_allocator,
4137 .code = decl.getFileScope().zir,4142 .code = decl.getFileScope().zir,
4138 .owner_decl = decl,4143 .owner_decl = decl,
4139 .func = func,4144 .func = func,
...@@ -4147,7 +4152,7 @@ pub fn analyzeFnBody(mod: *Module, decl: *Decl, func: *Fn, arena: Allocator) Sem...@@ -4147,7 +4152,7 @@ pub fn analyzeFnBody(mod: *Module, decl: *Decl, func: *Fn, arena: Allocator) Sem
4147 try sema.air_extra.ensureTotalCapacity(gpa, reserved_count);4152 try sema.air_extra.ensureTotalCapacity(gpa, reserved_count);
4148 sema.air_extra.items.len += reserved_count;4153 sema.air_extra.items.len += reserved_count;
41494154
4150 var wip_captures = try WipCaptureScope.init(gpa, &decl_arena.allocator, decl.src_scope);4155 var wip_captures = try WipCaptureScope.init(gpa, decl_arena_allocator, decl.src_scope);
4151 defer wip_captures.deinit();4156 defer wip_captures.deinit();
41524157
4153 var inner_block: Sema.Block = .{4158 var inner_block: Sema.Block = .{
...@@ -4751,7 +4756,7 @@ pub fn populateTestFunctions(mod: *Module) !void {...@@ -4751,7 +4756,7 @@ pub fn populateTestFunctions(mod: *Module) !void {
4751 // decl reference it as a slice.4756 // decl reference it as a slice.
4752 var new_decl_arena = std.heap.ArenaAllocator.init(gpa);4757 var new_decl_arena = std.heap.ArenaAllocator.init(gpa);
4753 errdefer new_decl_arena.deinit();4758 errdefer new_decl_arena.deinit();
4754 const arena = &new_decl_arena.allocator;4759 const arena = new_decl_arena.getAllocator();
47554760
4756 const test_fn_vals = try arena.alloc(Value, mod.test_functions.count());4761 const test_fn_vals = try arena.alloc(Value, mod.test_functions.count());
4757 const array_decl = try mod.createAnonymousDeclFromDecl(decl, decl.src_namespace, null, .{4762 const array_decl = try mod.createAnonymousDeclFromDecl(decl, decl.src_namespace, null, .{
...@@ -4770,10 +4775,10 @@ pub fn populateTestFunctions(mod: *Module) !void {...@@ -4770,10 +4775,10 @@ pub fn populateTestFunctions(mod: *Module) !void {
4770 const test_name_decl = n: {4775 const test_name_decl = n: {
4771 var name_decl_arena = std.heap.ArenaAllocator.init(gpa);4776 var name_decl_arena = std.heap.ArenaAllocator.init(gpa);
4772 errdefer name_decl_arena.deinit();4777 errdefer name_decl_arena.deinit();
4773 const bytes = try name_decl_arena.allocator.dupe(u8, test_name_slice);4778 const bytes = try arena.dupe(u8, test_name_slice);
4774 const test_name_decl = try mod.createAnonymousDeclFromDecl(array_decl, array_decl.src_namespace, null, .{4779 const test_name_decl = try mod.createAnonymousDeclFromDecl(array_decl, array_decl.src_namespace, null, .{
4775 .ty = try Type.Tag.array_u8.create(&name_decl_arena.allocator, bytes.len),4780 .ty = try Type.Tag.array_u8.create(arena, bytes.len),
4776 .val = try Value.Tag.bytes.create(&name_decl_arena.allocator, bytes),4781 .val = try Value.Tag.bytes.create(arena, bytes),
4777 });4782 });
4778 try test_name_decl.finalizeNewArena(&name_decl_arena);4783 try test_name_decl.finalizeNewArena(&name_decl_arena);
4779 break :n test_name_decl;4784 break :n test_name_decl;
...@@ -4802,7 +4807,7 @@ pub fn populateTestFunctions(mod: *Module) !void {...@@ -4802,7 +4807,7 @@ pub fn populateTestFunctions(mod: *Module) !void {
4802 {4807 {
4803 var new_decl_arena = std.heap.ArenaAllocator.init(gpa);4808 var new_decl_arena = std.heap.ArenaAllocator.init(gpa);
4804 errdefer new_decl_arena.deinit();4809 errdefer new_decl_arena.deinit();
4805 const arena = &new_decl_arena.allocator;4810 const arena = new_decl_arena.getAllocator();
48064811
4807 // This copy accesses the old Decl Type/Value so it must be done before `clearValues`.4812 // This copy accesses the old Decl Type/Value so it must be done before `clearValues`.
4808 const new_ty = try Type.Tag.const_slice.create(arena, try tmp_test_fn_ty.copy(arena));4813 const new_ty = try Type.Tag.const_slice.create(arena, try tmp_test_fn_ty.copy(arena));
src/Sema.zig+68-58
...@@ -418,7 +418,7 @@ pub const Block = struct {...@@ -418,7 +418,7 @@ pub const Block = struct {
418 finished: bool,418 finished: bool,
419419
420 pub fn arena(wad: *WipAnonDecl) Allocator {420 pub fn arena(wad: *WipAnonDecl) Allocator {
421 return &wad.new_decl_arena.allocator;421 return wad.new_decl_arena.getAllocator();
422 }422 }
423423
424 pub fn deinit(wad: *WipAnonDecl) void {424 pub fn deinit(wad: *WipAnonDecl) void {
...@@ -1594,10 +1594,11 @@ fn zirStructDecl(...@@ -1594,10 +1594,11 @@ fn zirStructDecl(
15941594
1595 var new_decl_arena = std.heap.ArenaAllocator.init(sema.gpa);1595 var new_decl_arena = std.heap.ArenaAllocator.init(sema.gpa);
1596 errdefer new_decl_arena.deinit();1596 errdefer new_decl_arena.deinit();
1597 const new_decl_arena_allocator = new_decl_arena.getAllocator();
15971598
1598 const struct_obj = try new_decl_arena.allocator.create(Module.Struct);1599 const struct_obj = try new_decl_arena_allocator.create(Module.Struct);
1599 const struct_ty = try Type.Tag.@"struct".create(&new_decl_arena.allocator, struct_obj);1600 const struct_ty = try Type.Tag.@"struct".create(new_decl_arena_allocator, struct_obj);
1600 const struct_val = try Value.Tag.ty.create(&new_decl_arena.allocator, struct_ty);1601 const struct_val = try Value.Tag.ty.create(new_decl_arena_allocator, struct_ty);
1601 const type_name = try sema.createTypeName(block, small.name_strategy);1602 const type_name = try sema.createTypeName(block, small.name_strategy);
1602 const new_decl = try sema.mod.createAnonymousDeclNamed(block, .{1603 const new_decl = try sema.mod.createAnonymousDeclNamed(block, .{
1603 .ty = Type.type,1604 .ty = Type.type,
...@@ -1698,15 +1699,16 @@ fn zirEnumDecl(...@@ -1698,15 +1699,16 @@ fn zirEnumDecl(
16981699
1699 var new_decl_arena = std.heap.ArenaAllocator.init(gpa);1700 var new_decl_arena = std.heap.ArenaAllocator.init(gpa);
1700 errdefer new_decl_arena.deinit();1701 errdefer new_decl_arena.deinit();
1702 const new_decl_arena_allocator = new_decl_arena.getAllocator();
17011703
1702 const enum_obj = try new_decl_arena.allocator.create(Module.EnumFull);1704 const enum_obj = try new_decl_arena_allocator.create(Module.EnumFull);
1703 const enum_ty_payload = try new_decl_arena.allocator.create(Type.Payload.EnumFull);1705 const enum_ty_payload = try new_decl_arena_allocator.create(Type.Payload.EnumFull);
1704 enum_ty_payload.* = .{1706 enum_ty_payload.* = .{
1705 .base = .{ .tag = if (small.nonexhaustive) .enum_nonexhaustive else .enum_full },1707 .base = .{ .tag = if (small.nonexhaustive) .enum_nonexhaustive else .enum_full },
1706 .data = enum_obj,1708 .data = enum_obj,
1707 };1709 };
1708 const enum_ty = Type.initPayload(&enum_ty_payload.base);1710 const enum_ty = Type.initPayload(&enum_ty_payload.base);
1709 const enum_val = try Value.Tag.ty.create(&new_decl_arena.allocator, enum_ty);1711 const enum_val = try Value.Tag.ty.create(new_decl_arena_allocator, enum_ty);
1710 const type_name = try sema.createTypeName(block, small.name_strategy);1712 const type_name = try sema.createTypeName(block, small.name_strategy);
1711 const new_decl = try mod.createAnonymousDeclNamed(block, .{1713 const new_decl = try mod.createAnonymousDeclNamed(block, .{
1712 .ty = Type.type,1714 .ty = Type.type,
...@@ -1790,17 +1792,17 @@ fn zirEnumDecl(...@@ -1790,17 +1792,17 @@ fn zirEnumDecl(
1790 break :blk try sema.resolveType(block, src, tag_type_ref);1792 break :blk try sema.resolveType(block, src, tag_type_ref);
1791 }1793 }
1792 const bits = std.math.log2_int_ceil(usize, fields_len);1794 const bits = std.math.log2_int_ceil(usize, fields_len);
1793 break :blk try Type.Tag.int_unsigned.create(&new_decl_arena.allocator, bits);1795 break :blk try Type.Tag.int_unsigned.create(new_decl_arena_allocator, bits);
1794 };1796 };
1795 enum_obj.tag_ty = tag_ty;1797 enum_obj.tag_ty = tag_ty;
1796 }1798 }
17971799
1798 try enum_obj.fields.ensureTotalCapacity(&new_decl_arena.allocator, fields_len);1800 try enum_obj.fields.ensureTotalCapacity(new_decl_arena_allocator, fields_len);
1799 const any_values = for (sema.code.extra[body_end..][0..bit_bags_count]) |bag| {1801 const any_values = for (sema.code.extra[body_end..][0..bit_bags_count]) |bag| {
1800 if (bag != 0) break true;1802 if (bag != 0) break true;
1801 } else false;1803 } else false;
1802 if (any_values) {1804 if (any_values) {
1803 try enum_obj.values.ensureTotalCapacityContext(&new_decl_arena.allocator, fields_len, .{1805 try enum_obj.values.ensureTotalCapacityContext(new_decl_arena_allocator, fields_len, .{
1804 .ty = enum_obj.tag_ty,1806 .ty = enum_obj.tag_ty,
1805 });1807 });
1806 }1808 }
...@@ -1820,7 +1822,7 @@ fn zirEnumDecl(...@@ -1820,7 +1822,7 @@ fn zirEnumDecl(
1820 extra_index += 1;1822 extra_index += 1;
18211823
1822 // This string needs to outlive the ZIR code.1824 // This string needs to outlive the ZIR code.
1823 const field_name = try new_decl_arena.allocator.dupe(u8, field_name_zir);1825 const field_name = try new_decl_arena_allocator.dupe(u8, field_name_zir);
18241826
1825 const gop = enum_obj.fields.getOrPutAssumeCapacity(field_name);1827 const gop = enum_obj.fields.getOrPutAssumeCapacity(field_name);
1826 if (gop.found_existing) {1828 if (gop.found_existing) {
...@@ -1843,12 +1845,12 @@ fn zirEnumDecl(...@@ -1843,12 +1845,12 @@ fn zirEnumDecl(
1843 // that points to this default value expression rather than the struct.1845 // that points to this default value expression rather than the struct.
1844 // But only resolve the source location if we need to emit a compile error.1846 // But only resolve the source location if we need to emit a compile error.
1845 const tag_val = (try sema.resolveInstConst(block, src, tag_val_ref)).val;1847 const tag_val = (try sema.resolveInstConst(block, src, tag_val_ref)).val;
1846 const copied_tag_val = try tag_val.copy(&new_decl_arena.allocator);1848 const copied_tag_val = try tag_val.copy(new_decl_arena_allocator);
1847 enum_obj.values.putAssumeCapacityNoClobberContext(copied_tag_val, {}, .{1849 enum_obj.values.putAssumeCapacityNoClobberContext(copied_tag_val, {}, .{
1848 .ty = enum_obj.tag_ty,1850 .ty = enum_obj.tag_ty,
1849 });1851 });
1850 } else if (any_values) {1852 } else if (any_values) {
1851 const tag_val = try Value.Tag.int_u64.create(&new_decl_arena.allocator, field_i);1853 const tag_val = try Value.Tag.int_u64.create(new_decl_arena_allocator, field_i);
1852 enum_obj.values.putAssumeCapacityNoClobberContext(tag_val, {}, .{ .ty = enum_obj.tag_ty });1854 enum_obj.values.putAssumeCapacityNoClobberContext(tag_val, {}, .{ .ty = enum_obj.tag_ty });
1853 }1855 }
1854 }1856 }
...@@ -1887,16 +1889,17 @@ fn zirUnionDecl(...@@ -1887,16 +1889,17 @@ fn zirUnionDecl(
18871889
1888 var new_decl_arena = std.heap.ArenaAllocator.init(sema.gpa);1890 var new_decl_arena = std.heap.ArenaAllocator.init(sema.gpa);
1889 errdefer new_decl_arena.deinit();1891 errdefer new_decl_arena.deinit();
1892 const new_decl_arena_allocator = new_decl_arena.getAllocator();
18901893
1891 const union_obj = try new_decl_arena.allocator.create(Module.Union);1894 const union_obj = try new_decl_arena_allocator.create(Module.Union);
1892 const type_tag: Type.Tag = if (small.has_tag_type or small.auto_enum_tag) .union_tagged else .@"union";1895 const type_tag: Type.Tag = if (small.has_tag_type or small.auto_enum_tag) .union_tagged else .@"union";
1893 const union_payload = try new_decl_arena.allocator.create(Type.Payload.Union);1896 const union_payload = try new_decl_arena_allocator.create(Type.Payload.Union);
1894 union_payload.* = .{1897 union_payload.* = .{
1895 .base = .{ .tag = type_tag },1898 .base = .{ .tag = type_tag },
1896 .data = union_obj,1899 .data = union_obj,
1897 };1900 };
1898 const union_ty = Type.initPayload(&union_payload.base);1901 const union_ty = Type.initPayload(&union_payload.base);
1899 const union_val = try Value.Tag.ty.create(&new_decl_arena.allocator, union_ty);1902 const union_val = try Value.Tag.ty.create(new_decl_arena_allocator, union_ty);
1900 const type_name = try sema.createTypeName(block, small.name_strategy);1903 const type_name = try sema.createTypeName(block, small.name_strategy);
1901 const new_decl = try sema.mod.createAnonymousDeclNamed(block, .{1904 const new_decl = try sema.mod.createAnonymousDeclNamed(block, .{
1902 .ty = Type.type,1905 .ty = Type.type,
...@@ -1955,15 +1958,16 @@ fn zirOpaqueDecl(...@@ -1955,15 +1958,16 @@ fn zirOpaqueDecl(
19551958
1956 var new_decl_arena = std.heap.ArenaAllocator.init(gpa);1959 var new_decl_arena = std.heap.ArenaAllocator.init(gpa);
1957 errdefer new_decl_arena.deinit();1960 errdefer new_decl_arena.deinit();
1961 const new_decl_arena_allocator = new_decl_arena.getAllocator();
19581962
1959 const opaque_obj = try new_decl_arena.allocator.create(Module.Opaque);1963 const opaque_obj = try new_decl_arena_allocator.create(Module.Opaque);
1960 const opaque_ty_payload = try new_decl_arena.allocator.create(Type.Payload.Opaque);1964 const opaque_ty_payload = try new_decl_arena_allocator.create(Type.Payload.Opaque);
1961 opaque_ty_payload.* = .{1965 opaque_ty_payload.* = .{
1962 .base = .{ .tag = .@"opaque" },1966 .base = .{ .tag = .@"opaque" },
1963 .data = opaque_obj,1967 .data = opaque_obj,
1964 };1968 };
1965 const opaque_ty = Type.initPayload(&opaque_ty_payload.base);1969 const opaque_ty = Type.initPayload(&opaque_ty_payload.base);
1966 const opaque_val = try Value.Tag.ty.create(&new_decl_arena.allocator, opaque_ty);1970 const opaque_val = try Value.Tag.ty.create(new_decl_arena_allocator, opaque_ty);
1967 const type_name = try sema.createTypeName(block, small.name_strategy);1971 const type_name = try sema.createTypeName(block, small.name_strategy);
1968 const new_decl = try mod.createAnonymousDeclNamed(block, .{1972 const new_decl = try mod.createAnonymousDeclNamed(block, .{
1969 .ty = Type.type,1973 .ty = Type.type,
...@@ -2008,10 +2012,11 @@ fn zirErrorSetDecl(...@@ -2008,10 +2012,11 @@ fn zirErrorSetDecl(
20082012
2009 var new_decl_arena = std.heap.ArenaAllocator.init(gpa);2013 var new_decl_arena = std.heap.ArenaAllocator.init(gpa);
2010 errdefer new_decl_arena.deinit();2014 errdefer new_decl_arena.deinit();
2015 const new_decl_arena_allocator = new_decl_arena.getAllocator();
20112016
2012 const error_set = try new_decl_arena.allocator.create(Module.ErrorSet);2017 const error_set = try new_decl_arena_allocator.create(Module.ErrorSet);
2013 const error_set_ty = try Type.Tag.error_set.create(&new_decl_arena.allocator, error_set);2018 const error_set_ty = try Type.Tag.error_set.create(new_decl_arena_allocator, error_set);
2014 const error_set_val = try Value.Tag.ty.create(&new_decl_arena.allocator, error_set_ty);2019 const error_set_val = try Value.Tag.ty.create(new_decl_arena_allocator, error_set_ty);
2015 const type_name = try sema.createTypeName(block, name_strategy);2020 const type_name = try sema.createTypeName(block, name_strategy);
2016 const new_decl = try sema.mod.createAnonymousDeclNamed(block, .{2021 const new_decl = try sema.mod.createAnonymousDeclNamed(block, .{
2017 .ty = Type.type,2022 .ty = Type.type,
...@@ -2019,9 +2024,9 @@ fn zirErrorSetDecl(...@@ -2019,9 +2024,9 @@ fn zirErrorSetDecl(
2019 }, type_name);2024 }, type_name);
2020 new_decl.owns_tv = true;2025 new_decl.owns_tv = true;
2021 errdefer sema.mod.abortAnonDecl(new_decl);2026 errdefer sema.mod.abortAnonDecl(new_decl);
2022 const names = try new_decl_arena.allocator.alloc([]const u8, fields.len);2027 const names = try new_decl_arena_allocator.alloc([]const u8, fields.len);
2023 for (fields) |str_index, i| {2028 for (fields) |str_index, i| {
2024 names[i] = try new_decl_arena.allocator.dupe(u8, sema.code.nullTerminatedString(str_index));2029 names[i] = try new_decl_arena_allocator.dupe(u8, sema.code.nullTerminatedString(str_index));
2025 }2030 }
2026 error_set.* = .{2031 error_set.* = .{
2027 .owner_decl = new_decl,2032 .owner_decl = new_decl,
...@@ -3935,7 +3940,7 @@ fn analyzeCall(...@@ -3935,7 +3940,7 @@ fn analyzeCall(
3935 {3940 {
3936 var arena_allocator = std.heap.ArenaAllocator.init(gpa);3941 var arena_allocator = std.heap.ArenaAllocator.init(gpa);
3937 errdefer arena_allocator.deinit();3942 errdefer arena_allocator.deinit();
3938 const arena = &arena_allocator.allocator;3943 const arena = arena_allocator.getAllocator();
39393944
3940 for (memoized_call_key.args) |*arg| {3945 for (memoized_call_key.args) |*arg| {
3941 arg.* = try arg.*.copy(arena);3946 arg.* = try arg.*.copy(arena);
...@@ -4069,6 +4074,7 @@ fn analyzeCall(...@@ -4069,6 +4074,7 @@ fn analyzeCall(
40694074
4070 var new_decl_arena = std.heap.ArenaAllocator.init(sema.gpa);4075 var new_decl_arena = std.heap.ArenaAllocator.init(sema.gpa);
4071 errdefer new_decl_arena.deinit();4076 errdefer new_decl_arena.deinit();
4077 const new_decl_arena_allocator = new_decl_arena.getAllocator();
40724078
4073 // Re-run the block that creates the function, with the comptime parameters4079 // Re-run the block that creates the function, with the comptime parameters
4074 // pre-populated inside `inst_map`. This causes `param_comptime` and4080 // pre-populated inside `inst_map`. This causes `param_comptime` and
...@@ -4078,13 +4084,13 @@ fn analyzeCall(...@@ -4078,13 +4084,13 @@ fn analyzeCall(
4078 .mod = mod,4084 .mod = mod,
4079 .gpa = gpa,4085 .gpa = gpa,
4080 .arena = sema.arena,4086 .arena = sema.arena,
4081 .perm_arena = &new_decl_arena.allocator,4087 .perm_arena = new_decl_arena_allocator,
4082 .code = fn_zir,4088 .code = fn_zir,
4083 .owner_decl = new_decl,4089 .owner_decl = new_decl,
4084 .func = null,4090 .func = null,
4085 .fn_ret_ty = Type.void,4091 .fn_ret_ty = Type.void,
4086 .owner_func = null,4092 .owner_func = null,
4087 .comptime_args = try new_decl_arena.allocator.alloc(TypedValue, uncasted_args.len),4093 .comptime_args = try new_decl_arena_allocator.alloc(TypedValue, uncasted_args.len),
4088 .comptime_args_fn_inst = module_fn.zir_body_inst,4094 .comptime_args_fn_inst = module_fn.zir_body_inst,
4089 .preallocated_new_func = new_module_func,4095 .preallocated_new_func = new_module_func,
4090 };4096 };
...@@ -4168,7 +4174,7 @@ fn analyzeCall(...@@ -4168,7 +4174,7 @@ fn analyzeCall(
4168 else => continue,4174 else => continue,
4169 }4175 }
4170 const arg = child_sema.inst_map.get(inst).?;4176 const arg = child_sema.inst_map.get(inst).?;
4171 const copied_arg_ty = try child_sema.typeOf(arg).copy(&new_decl_arena.allocator);4177 const copied_arg_ty = try child_sema.typeOf(arg).copy(new_decl_arena_allocator);
4172 if (child_sema.resolveMaybeUndefValAllowVariables(4178 if (child_sema.resolveMaybeUndefValAllowVariables(
4173 &child_block,4179 &child_block,
4174 .unneeded,4180 .unneeded,
...@@ -4176,7 +4182,7 @@ fn analyzeCall(...@@ -4176,7 +4182,7 @@ fn analyzeCall(
4176 ) catch unreachable) |arg_val| {4182 ) catch unreachable) |arg_val| {
4177 child_sema.comptime_args[arg_i] = .{4183 child_sema.comptime_args[arg_i] = .{
4178 .ty = copied_arg_ty,4184 .ty = copied_arg_ty,
4179 .val = try arg_val.copy(&new_decl_arena.allocator),4185 .val = try arg_val.copy(new_decl_arena_allocator),
4180 };4186 };
4181 } else {4187 } else {
4182 child_sema.comptime_args[arg_i] = .{4188 child_sema.comptime_args[arg_i] = .{
...@@ -4191,8 +4197,8 @@ fn analyzeCall(...@@ -4191,8 +4197,8 @@ fn analyzeCall(
4191 try wip_captures.finalize();4197 try wip_captures.finalize();
41924198
4193 // Populate the Decl ty/val with the function and its type.4199 // Populate the Decl ty/val with the function and its type.
4194 new_decl.ty = try child_sema.typeOf(new_func_inst).copy(&new_decl_arena.allocator);4200 new_decl.ty = try child_sema.typeOf(new_func_inst).copy(new_decl_arena_allocator);
4195 new_decl.val = try Value.Tag.function.create(&new_decl_arena.allocator, new_func);4201 new_decl.val = try Value.Tag.function.create(new_decl_arena_allocator, new_func);
4196 new_decl.analysis = .complete;4202 new_decl.analysis = .complete;
41974203
4198 log.debug("generic function '{s}' instantiated with type {}", .{4204 log.debug("generic function '{s}' instantiated with type {}", .{
...@@ -6047,8 +6053,8 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError...@@ -6047,8 +6053,8 @@ fn zirSwitchBlock(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError
6047 defer arena.deinit();6053 defer arena.deinit();
60486054
6049 const target = sema.mod.getTarget();6055 const target = sema.mod.getTarget();
6050 const min_int = try operand_ty.minInt(&arena.allocator, target);6056 const min_int = try operand_ty.minInt(arena.getAllocator(), target);
6051 const max_int = try operand_ty.maxInt(&arena.allocator, target);6057 const max_int = try operand_ty.maxInt(arena.getAllocator(), target);
6052 if (try range_set.spans(min_int, max_int, operand_ty)) {6058 if (try range_set.spans(min_int, max_int, operand_ty)) {
6053 if (special_prong == .@"else") {6059 if (special_prong == .@"else") {
6054 return sema.fail(6060 return sema.fail(
...@@ -12795,7 +12801,7 @@ const ComptimePtrMutationKit = struct {...@@ -12795,7 +12801,7 @@ const ComptimePtrMutationKit = struct {
1279512801
12796 fn beginArena(self: *ComptimePtrMutationKit, gpa: Allocator) Allocator {12802 fn beginArena(self: *ComptimePtrMutationKit, gpa: Allocator) Allocator {
12797 self.decl_arena = self.decl_ref_mut.decl.value_arena.?.promote(gpa);12803 self.decl_arena = self.decl_ref_mut.decl.value_arena.?.promote(gpa);
12798 return &self.decl_arena.allocator;12804 return self.decl_arena.getAllocator();
12799 }12805 }
1280012806
12801 fn finishArena(self: *ComptimePtrMutationKit) void {12807 fn finishArena(self: *ComptimePtrMutationKit) void {
...@@ -14287,6 +14293,7 @@ fn semaStructFields(...@@ -14287,6 +14293,7 @@ fn semaStructFields(
1428714293
14288 var decl_arena = decl.value_arena.?.promote(gpa);14294 var decl_arena = decl.value_arena.?.promote(gpa);
14289 defer decl.value_arena.?.* = decl_arena.state;14295 defer decl.value_arena.?.* = decl_arena.state;
14296 const decl_arena_allocator = decl_arena.getAllocator();
1429014297
14291 var analysis_arena = std.heap.ArenaAllocator.init(gpa);14298 var analysis_arena = std.heap.ArenaAllocator.init(gpa);
14292 defer analysis_arena.deinit();14299 defer analysis_arena.deinit();
...@@ -14294,8 +14301,8 @@ fn semaStructFields(...@@ -14294,8 +14301,8 @@ fn semaStructFields(
14294 var sema: Sema = .{14301 var sema: Sema = .{
14295 .mod = mod,14302 .mod = mod,
14296 .gpa = gpa,14303 .gpa = gpa,
14297 .arena = &analysis_arena.allocator,14304 .arena = analysis_arena.getAllocator(),
14298 .perm_arena = &decl_arena.allocator,14305 .perm_arena = decl_arena_allocator,
14299 .code = zir,14306 .code = zir,
14300 .owner_decl = decl,14307 .owner_decl = decl,
14301 .func = null,14308 .func = null,
...@@ -14304,7 +14311,7 @@ fn semaStructFields(...@@ -14304,7 +14311,7 @@ fn semaStructFields(
14304 };14311 };
14305 defer sema.deinit();14312 defer sema.deinit();
1430614313
14307 var wip_captures = try WipCaptureScope.init(gpa, &decl_arena.allocator, decl.src_scope);14314 var wip_captures = try WipCaptureScope.init(gpa, decl_arena_allocator, decl.src_scope);
14308 defer wip_captures.deinit();14315 defer wip_captures.deinit();
1430914316
14310 var block_scope: Block = .{14317 var block_scope: Block = .{
...@@ -14328,7 +14335,7 @@ fn semaStructFields(...@@ -14328,7 +14335,7 @@ fn semaStructFields(
1432814335
14329 try wip_captures.finalize();14336 try wip_captures.finalize();
1433014337
14331 try struct_obj.fields.ensureTotalCapacity(&decl_arena.allocator, fields_len);14338 try struct_obj.fields.ensureTotalCapacity(decl_arena_allocator, fields_len);
1433214339
14333 const bits_per_field = 4;14340 const bits_per_field = 4;
14334 const fields_per_u32 = 32 / bits_per_field;14341 const fields_per_u32 = 32 / bits_per_field;
...@@ -14359,7 +14366,7 @@ fn semaStructFields(...@@ -14359,7 +14366,7 @@ fn semaStructFields(
14359 extra_index += 1;14366 extra_index += 1;
1436014367
14361 // This string needs to outlive the ZIR code.14368 // This string needs to outlive the ZIR code.
14362 const field_name = try decl_arena.allocator.dupe(u8, field_name_zir);14369 const field_name = try decl_arena_allocator.dupe(u8, field_name_zir);
14363 const field_ty: Type = if (field_type_ref == .none)14370 const field_ty: Type = if (field_type_ref == .none)
14364 Type.initTag(.noreturn)14371 Type.initTag(.noreturn)
14365 else14372 else
...@@ -14371,7 +14378,7 @@ fn semaStructFields(...@@ -14371,7 +14378,7 @@ fn semaStructFields(
14371 const gop = struct_obj.fields.getOrPutAssumeCapacity(field_name);14378 const gop = struct_obj.fields.getOrPutAssumeCapacity(field_name);
14372 assert(!gop.found_existing);14379 assert(!gop.found_existing);
14373 gop.value_ptr.* = .{14380 gop.value_ptr.* = .{
14374 .ty = try field_ty.copy(&decl_arena.allocator),14381 .ty = try field_ty.copy(decl_arena_allocator),
14375 .abi_align = Value.initTag(.abi_align_default),14382 .abi_align = Value.initTag(.abi_align_default),
14376 .default_val = Value.initTag(.unreachable_value),14383 .default_val = Value.initTag(.unreachable_value),
14377 .is_comptime = is_comptime,14384 .is_comptime = is_comptime,
...@@ -14385,7 +14392,7 @@ fn semaStructFields(...@@ -14385,7 +14392,7 @@ fn semaStructFields(
14385 // that points to this alignment expression rather than the struct.14392 // that points to this alignment expression rather than the struct.
14386 // But only resolve the source location if we need to emit a compile error.14393 // But only resolve the source location if we need to emit a compile error.
14387 const abi_align_val = (try sema.resolveInstConst(&block_scope, src, align_ref)).val;14394 const abi_align_val = (try sema.resolveInstConst(&block_scope, src, align_ref)).val;
14388 gop.value_ptr.abi_align = try abi_align_val.copy(&decl_arena.allocator);14395 gop.value_ptr.abi_align = try abi_align_val.copy(decl_arena_allocator);
14389 }14396 }
14390 if (has_default) {14397 if (has_default) {
14391 const default_ref = @intToEnum(Zir.Inst.Ref, zir.extra[extra_index]);14398 const default_ref = @intToEnum(Zir.Inst.Ref, zir.extra[extra_index]);
...@@ -14396,7 +14403,7 @@ fn semaStructFields(...@@ -14396,7 +14403,7 @@ fn semaStructFields(
14396 // But only resolve the source location if we need to emit a compile error.14403 // But only resolve the source location if we need to emit a compile error.
14397 const default_val = (try sema.resolveMaybeUndefVal(&block_scope, src, default_inst)) orelse14404 const default_val = (try sema.resolveMaybeUndefVal(&block_scope, src, default_inst)) orelse
14398 return sema.failWithNeededComptime(&block_scope, src);14405 return sema.failWithNeededComptime(&block_scope, src);
14399 gop.value_ptr.default_val = try default_val.copy(&decl_arena.allocator);14406 gop.value_ptr.default_val = try default_val.copy(decl_arena_allocator);
14400 }14407 }
14401 }14408 }
14402}14409}
...@@ -14454,6 +14461,7 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void {...@@ -14454,6 +14461,7 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void {
1445414461
14455 var decl_arena = union_obj.owner_decl.value_arena.?.promote(gpa);14462 var decl_arena = union_obj.owner_decl.value_arena.?.promote(gpa);
14456 defer union_obj.owner_decl.value_arena.?.* = decl_arena.state;14463 defer union_obj.owner_decl.value_arena.?.* = decl_arena.state;
14464 const decl_arena_allocator = decl_arena.getAllocator();
1445714465
14458 var analysis_arena = std.heap.ArenaAllocator.init(gpa);14466 var analysis_arena = std.heap.ArenaAllocator.init(gpa);
14459 defer analysis_arena.deinit();14467 defer analysis_arena.deinit();
...@@ -14461,8 +14469,8 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void {...@@ -14461,8 +14469,8 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void {
14461 var sema: Sema = .{14469 var sema: Sema = .{
14462 .mod = mod,14470 .mod = mod,
14463 .gpa = gpa,14471 .gpa = gpa,
14464 .arena = &analysis_arena.allocator,14472 .arena = analysis_arena.getAllocator(),
14465 .perm_arena = &decl_arena.allocator,14473 .perm_arena = decl_arena_allocator,
14466 .code = zir,14474 .code = zir,
14467 .owner_decl = decl,14475 .owner_decl = decl,
14468 .func = null,14476 .func = null,
...@@ -14471,7 +14479,7 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void {...@@ -14471,7 +14479,7 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void {
14471 };14479 };
14472 defer sema.deinit();14480 defer sema.deinit();
1447314481
14474 var wip_captures = try WipCaptureScope.init(gpa, &decl_arena.allocator, decl.src_scope);14482 var wip_captures = try WipCaptureScope.init(gpa, decl_arena_allocator, decl.src_scope);
14475 defer wip_captures.deinit();14483 defer wip_captures.deinit();
1447614484
14477 var block_scope: Block = .{14485 var block_scope: Block = .{
...@@ -14495,7 +14503,7 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void {...@@ -14495,7 +14503,7 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void {
1449514503
14496 try wip_captures.finalize();14504 try wip_captures.finalize();
1449714505
14498 try union_obj.fields.ensureTotalCapacity(&decl_arena.allocator, fields_len);14506 try union_obj.fields.ensureTotalCapacity(decl_arena_allocator, fields_len);
1449914507
14500 var int_tag_ty: Type = undefined;14508 var int_tag_ty: Type = undefined;
14501 var enum_field_names: ?*Module.EnumNumbered.NameMap = null;14509 var enum_field_names: ?*Module.EnumNumbered.NameMap = null;
...@@ -14571,7 +14579,7 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void {...@@ -14571,7 +14579,7 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void {
14571 }14579 }
1457214580
14573 // This string needs to outlive the ZIR code.14581 // This string needs to outlive the ZIR code.
14574 const field_name = try decl_arena.allocator.dupe(u8, field_name_zir);14582 const field_name = try decl_arena_allocator.dupe(u8, field_name_zir);
14575 if (enum_field_names) |set| {14583 if (enum_field_names) |set| {
14576 set.putAssumeCapacity(field_name, {});14584 set.putAssumeCapacity(field_name, {});
14577 }14585 }
...@@ -14589,7 +14597,7 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void {...@@ -14589,7 +14597,7 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void {
14589 const gop = union_obj.fields.getOrPutAssumeCapacity(field_name);14597 const gop = union_obj.fields.getOrPutAssumeCapacity(field_name);
14590 assert(!gop.found_existing);14598 assert(!gop.found_existing);
14591 gop.value_ptr.* = .{14599 gop.value_ptr.* = .{
14592 .ty = try field_ty.copy(&decl_arena.allocator),14600 .ty = try field_ty.copy(decl_arena_allocator),
14593 .abi_align = Value.initTag(.abi_align_default),14601 .abi_align = Value.initTag(.abi_align_default),
14594 };14602 };
1459514603
...@@ -14598,7 +14606,7 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void {...@@ -14598,7 +14606,7 @@ fn semaUnionFields(mod: *Module, union_obj: *Module.Union) CompileError!void {
14598 // that points to this alignment expression rather than the struct.14606 // that points to this alignment expression rather than the struct.
14599 // But only resolve the source location if we need to emit a compile error.14607 // But only resolve the source location if we need to emit a compile error.
14600 const abi_align_val = (try sema.resolveInstConst(&block_scope, src, align_ref)).val;14608 const abi_align_val = (try sema.resolveInstConst(&block_scope, src, align_ref)).val;
14601 gop.value_ptr.abi_align = try abi_align_val.copy(&decl_arena.allocator);14609 gop.value_ptr.abi_align = try abi_align_val.copy(decl_arena_allocator);
14602 } else {14610 } else {
14603 gop.value_ptr.abi_align = Value.initTag(.abi_align_default);14611 gop.value_ptr.abi_align = Value.initTag(.abi_align_default);
14604 }14612 }
...@@ -14615,15 +14623,16 @@ fn generateUnionTagTypeNumbered(...@@ -14615,15 +14623,16 @@ fn generateUnionTagTypeNumbered(
1461514623
14616 var new_decl_arena = std.heap.ArenaAllocator.init(sema.gpa);14624 var new_decl_arena = std.heap.ArenaAllocator.init(sema.gpa);
14617 errdefer new_decl_arena.deinit();14625 errdefer new_decl_arena.deinit();
14626 const new_decl_arena_allocator = new_decl_arena.getAllocator();
1461814627
14619 const enum_obj = try new_decl_arena.allocator.create(Module.EnumNumbered);14628 const enum_obj = try new_decl_arena_allocator.create(Module.EnumNumbered);
14620 const enum_ty_payload = try new_decl_arena.allocator.create(Type.Payload.EnumNumbered);14629 const enum_ty_payload = try new_decl_arena_allocator.create(Type.Payload.EnumNumbered);
14621 enum_ty_payload.* = .{14630 enum_ty_payload.* = .{
14622 .base = .{ .tag = .enum_numbered },14631 .base = .{ .tag = .enum_numbered },
14623 .data = enum_obj,14632 .data = enum_obj,
14624 };14633 };
14625 const enum_ty = Type.initPayload(&enum_ty_payload.base);14634 const enum_ty = Type.initPayload(&enum_ty_payload.base);
14626 const enum_val = try Value.Tag.ty.create(&new_decl_arena.allocator, enum_ty);14635 const enum_val = try Value.Tag.ty.create(new_decl_arena_allocator, enum_ty);
14627 // TODO better type name14636 // TODO better type name
14628 const new_decl = try mod.createAnonymousDecl(block, .{14637 const new_decl = try mod.createAnonymousDecl(block, .{
14629 .ty = Type.type,14638 .ty = Type.type,
...@@ -14640,8 +14649,8 @@ fn generateUnionTagTypeNumbered(...@@ -14640,8 +14649,8 @@ fn generateUnionTagTypeNumbered(
14640 .node_offset = 0,14649 .node_offset = 0,
14641 };14650 };
14642 // Here we pre-allocate the maps using the decl arena.14651 // Here we pre-allocate the maps using the decl arena.
14643 try enum_obj.fields.ensureTotalCapacity(&new_decl_arena.allocator, fields_len);14652 try enum_obj.fields.ensureTotalCapacity(new_decl_arena_allocator, fields_len);
14644 try enum_obj.values.ensureTotalCapacityContext(&new_decl_arena.allocator, fields_len, .{ .ty = int_ty });14653 try enum_obj.values.ensureTotalCapacityContext(new_decl_arena_allocator, fields_len, .{ .ty = int_ty });
14645 try new_decl.finalizeNewArena(&new_decl_arena);14654 try new_decl.finalizeNewArena(&new_decl_arena);
14646 return enum_ty;14655 return enum_ty;
14647}14656}
...@@ -14651,15 +14660,16 @@ fn generateUnionTagTypeSimple(sema: *Sema, block: *Block, fields_len: u32) !Type...@@ -14651,15 +14660,16 @@ fn generateUnionTagTypeSimple(sema: *Sema, block: *Block, fields_len: u32) !Type
1465114660
14652 var new_decl_arena = std.heap.ArenaAllocator.init(sema.gpa);14661 var new_decl_arena = std.heap.ArenaAllocator.init(sema.gpa);
14653 errdefer new_decl_arena.deinit();14662 errdefer new_decl_arena.deinit();
14663 const new_decl_arena_allocator = new_decl_arena.getAllocator();
1465414664
14655 const enum_obj = try new_decl_arena.allocator.create(Module.EnumSimple);14665 const enum_obj = try new_decl_arena_allocator.create(Module.EnumSimple);
14656 const enum_ty_payload = try new_decl_arena.allocator.create(Type.Payload.EnumSimple);14666 const enum_ty_payload = try new_decl_arena_allocator.create(Type.Payload.EnumSimple);
14657 enum_ty_payload.* = .{14667 enum_ty_payload.* = .{
14658 .base = .{ .tag = .enum_simple },14668 .base = .{ .tag = .enum_simple },
14659 .data = enum_obj,14669 .data = enum_obj,
14660 };14670 };
14661 const enum_ty = Type.initPayload(&enum_ty_payload.base);14671 const enum_ty = Type.initPayload(&enum_ty_payload.base);
14662 const enum_val = try Value.Tag.ty.create(&new_decl_arena.allocator, enum_ty);14672 const enum_val = try Value.Tag.ty.create(new_decl_arena_allocator, enum_ty);
14663 // TODO better type name14673 // TODO better type name
14664 const new_decl = try mod.createAnonymousDecl(block, .{14674 const new_decl = try mod.createAnonymousDecl(block, .{
14665 .ty = Type.type,14675 .ty = Type.type,
...@@ -14674,7 +14684,7 @@ fn generateUnionTagTypeSimple(sema: *Sema, block: *Block, fields_len: u32) !Type...@@ -14674,7 +14684,7 @@ fn generateUnionTagTypeSimple(sema: *Sema, block: *Block, fields_len: u32) !Type
14674 .node_offset = 0,14684 .node_offset = 0,
14675 };14685 };
14676 // Here we pre-allocate the maps using the decl arena.14686 // Here we pre-allocate the maps using the decl arena.
14677 try enum_obj.fields.ensureTotalCapacity(&new_decl_arena.allocator, fields_len);14687 try enum_obj.fields.ensureTotalCapacity(new_decl_arena_allocator, fields_len);
14678 try new_decl.finalizeNewArena(&new_decl_arena);14688 try new_decl.finalizeNewArena(&new_decl_arena);
14679 return enum_ty;14689 return enum_ty;
14680}14690}
src/codegen/c.zig+2-1
...@@ -390,6 +390,7 @@ pub const DeclGen = struct {...@@ -390,6 +390,7 @@ pub const DeclGen = struct {
390 // Fall back to generic implementation.390 // Fall back to generic implementation.
391 var arena = std.heap.ArenaAllocator.init(dg.module.gpa);391 var arena = std.heap.ArenaAllocator.init(dg.module.gpa);
392 defer arena.deinit();392 defer arena.deinit();
393 const arena_allocator = arena.getAllocator();
393394
394 try writer.writeAll("{");395 try writer.writeAll("{");
395 var index: usize = 0;396 var index: usize = 0;
...@@ -397,7 +398,7 @@ pub const DeclGen = struct {...@@ -397,7 +398,7 @@ pub const DeclGen = struct {
397 const elem_ty = ty.elemType();398 const elem_ty = ty.elemType();
398 while (index < len) : (index += 1) {399 while (index < len) : (index += 1) {
399 if (index != 0) try writer.writeAll(",");400 if (index != 0) try writer.writeAll(",");
400 const elem_val = try val.elemValue(&arena.allocator, index);401 const elem_val = try val.elemValue(arena_allocator, index);
401 try dg.renderValue(writer, elem_ty, elem_val);402 try dg.renderValue(writer, elem_ty, elem_val);
402 }403 }
403 if (ty.sentinel()) |sentinel_val| {404 if (ty.sentinel()) |sentinel_val| {
src/codegen/llvm.zig+5-5
...@@ -331,7 +331,7 @@ pub const Object = struct {...@@ -331,7 +331,7 @@ pub const Object = struct {
331331
332 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);332 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);
333 defer arena_allocator.deinit();333 defer arena_allocator.deinit();
334 const arena = &arena_allocator.allocator;334 const arena = arena_allocator.getAllocator();
335335
336 const mod = comp.bin_file.options.module.?;336 const mod = comp.bin_file.options.module.?;
337 const cache_dir = mod.zig_cache_artifact_directory;337 const cache_dir = mod.zig_cache_artifact_directory;
...@@ -779,7 +779,7 @@ pub const DeclGen = struct {...@@ -779,7 +779,7 @@ pub const DeclGen = struct {
779779
780 // The Type memory is ephemeral; since we want to store a longer-lived780 // The Type memory is ephemeral; since we want to store a longer-lived
781 // reference, we need to copy it here.781 // reference, we need to copy it here.
782 gop.key_ptr.* = try t.copy(&dg.object.type_map_arena.allocator);782 gop.key_ptr.* = try t.copy(dg.object.type_map_arena.getAllocator());
783783
784 const opaque_obj = t.castTag(.@"opaque").?.data;784 const opaque_obj = t.castTag(.@"opaque").?.data;
785 const name = try opaque_obj.getFullyQualifiedName(gpa);785 const name = try opaque_obj.getFullyQualifiedName(gpa);
...@@ -837,7 +837,7 @@ pub const DeclGen = struct {...@@ -837,7 +837,7 @@ pub const DeclGen = struct {
837837
838 // The Type memory is ephemeral; since we want to store a longer-lived838 // The Type memory is ephemeral; since we want to store a longer-lived
839 // reference, we need to copy it here.839 // reference, we need to copy it here.
840 gop.key_ptr.* = try t.copy(&dg.object.type_map_arena.allocator);840 gop.key_ptr.* = try t.copy(dg.object.type_map_arena.getAllocator());
841841
842 const struct_obj = t.castTag(.@"struct").?.data;842 const struct_obj = t.castTag(.@"struct").?.data;
843843
...@@ -871,7 +871,7 @@ pub const DeclGen = struct {...@@ -871,7 +871,7 @@ pub const DeclGen = struct {
871871
872 // The Type memory is ephemeral; since we want to store a longer-lived872 // The Type memory is ephemeral; since we want to store a longer-lived
873 // reference, we need to copy it here.873 // reference, we need to copy it here.
874 gop.key_ptr.* = try t.copy(&dg.object.type_map_arena.allocator);874 gop.key_ptr.* = try t.copy(dg.object.type_map_arena.getAllocator());
875875
876 const union_obj = t.cast(Type.Payload.Union).?.data;876 const union_obj = t.cast(Type.Payload.Union).?.data;
877 const target = dg.module.getTarget();877 const target = dg.module.getTarget();
...@@ -2485,7 +2485,7 @@ pub const FuncGen = struct {...@@ -2485,7 +2485,7 @@ pub const FuncGen = struct {
24852485
2486 var arena_allocator = std.heap.ArenaAllocator.init(self.gpa);2486 var arena_allocator = std.heap.ArenaAllocator.init(self.gpa);
2487 defer arena_allocator.deinit();2487 defer arena_allocator.deinit();
2488 const arena = &arena_allocator.allocator;2488 const arena = arena_allocator.getAllocator();
24892489
2490 const llvm_params_len = args.len;2490 const llvm_params_len = args.len;
2491 const llvm_param_types = try arena.alloc(*const llvm.Type, llvm_params_len);2491 const llvm_param_types = try arena.alloc(*const llvm.Type, llvm_params_len);
src/crash_report.zig+1-1
...@@ -85,7 +85,7 @@ fn dumpStatusReport() !void {...@@ -85,7 +85,7 @@ fn dumpStatusReport() !void {
85 const anal = zir_state orelse return;85 const anal = zir_state orelse return;
86 // Note: We have the panic mutex here, so we can safely use the global crash heap.86 // Note: We have the panic mutex here, so we can safely use the global crash heap.
87 var fba = std.heap.FixedBufferAllocator.init(&crash_heap);87 var fba = std.heap.FixedBufferAllocator.init(&crash_heap);
88 const allocator = &fba.allocator;88 const allocator = fba.getAllocator();
8989
90 const stderr = io.getStdErr().writer();90 const stderr = io.getStdErr().writer();
91 const block: *Sema.Block = anal.block;91 const block: *Sema.Block = anal.block;
src/glibc.zig+3-3
...@@ -65,7 +65,7 @@ pub fn loadMetaData(gpa: Allocator, zig_lib_dir: std.fs.Dir) LoadMetaDataError!*...@@ -65,7 +65,7 @@ pub fn loadMetaData(gpa: Allocator, zig_lib_dir: std.fs.Dir) LoadMetaDataError!*
6565
66 var arena_allocator = std.heap.ArenaAllocator.init(gpa);66 var arena_allocator = std.heap.ArenaAllocator.init(gpa);
67 errdefer arena_allocator.deinit();67 errdefer arena_allocator.deinit();
68 const arena = &arena_allocator.allocator;68 const arena = arena_allocator.getAllocator();
6969
70 var all_versions = std.ArrayListUnmanaged(std.builtin.Version){};70 var all_versions = std.ArrayListUnmanaged(std.builtin.Version){};
71 var all_functions = std.ArrayListUnmanaged(Fn){};71 var all_functions = std.ArrayListUnmanaged(Fn){};
...@@ -256,7 +256,7 @@ pub fn buildCRTFile(comp: *Compilation, crt_file: CRTFile) !void {...@@ -256,7 +256,7 @@ pub fn buildCRTFile(comp: *Compilation, crt_file: CRTFile) !void {
256 const gpa = comp.gpa;256 const gpa = comp.gpa;
257 var arena_allocator = std.heap.ArenaAllocator.init(gpa);257 var arena_allocator = std.heap.ArenaAllocator.init(gpa);
258 defer arena_allocator.deinit();258 defer arena_allocator.deinit();
259 const arena = &arena_allocator.allocator;259 const arena = arena_allocator.getAllocator();
260260
261 switch (crt_file) {261 switch (crt_file) {
262 .crti_o => {262 .crti_o => {
...@@ -711,7 +711,7 @@ pub fn buildSharedObjects(comp: *Compilation) !void {...@@ -711,7 +711,7 @@ pub fn buildSharedObjects(comp: *Compilation) !void {
711711
712 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);712 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);
713 defer arena_allocator.deinit();713 defer arena_allocator.deinit();
714 const arena = &arena_allocator.allocator;714 const arena = arena_allocator.getAllocator();
715715
716 const target = comp.getTarget();716 const target = comp.getTarget();
717 const target_version = target.os.version_range.linux.glibc;717 const target_version = target.os.version_range.linux.glibc;
src/libcxx.zig+2-2
...@@ -89,7 +89,7 @@ pub fn buildLibCXX(comp: *Compilation) !void {...@@ -89,7 +89,7 @@ pub fn buildLibCXX(comp: *Compilation) !void {
8989
90 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);90 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);
91 defer arena_allocator.deinit();91 defer arena_allocator.deinit();
92 const arena = &arena_allocator.allocator;92 const arena = arena_allocator.getAllocator();
9393
94 const root_name = "c++";94 const root_name = "c++";
95 const output_mode = .Lib;95 const output_mode = .Lib;
...@@ -236,7 +236,7 @@ pub fn buildLibCXXABI(comp: *Compilation) !void {...@@ -236,7 +236,7 @@ pub fn buildLibCXXABI(comp: *Compilation) !void {
236236
237 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);237 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);
238 defer arena_allocator.deinit();238 defer arena_allocator.deinit();
239 const arena = &arena_allocator.allocator;239 const arena = arena_allocator.getAllocator();
240240
241 const root_name = "c++abi";241 const root_name = "c++abi";
242 const output_mode = .Lib;242 const output_mode = .Lib;
src/libtsan.zig+1-1
...@@ -15,7 +15,7 @@ pub fn buildTsan(comp: *Compilation) !void {...@@ -15,7 +15,7 @@ pub fn buildTsan(comp: *Compilation) !void {
1515
16 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);16 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);
17 defer arena_allocator.deinit();17 defer arena_allocator.deinit();
18 const arena = &arena_allocator.allocator;18 const arena = arena_allocator.getAllocator();
1919
20 const root_name = "tsan";20 const root_name = "tsan";
21 const output_mode = .Lib;21 const output_mode = .Lib;
src/libunwind.zig+1-1
...@@ -17,7 +17,7 @@ pub fn buildStaticLib(comp: *Compilation) !void {...@@ -17,7 +17,7 @@ pub fn buildStaticLib(comp: *Compilation) !void {
1717
18 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);18 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);
19 defer arena_allocator.deinit();19 defer arena_allocator.deinit();
20 const arena = &arena_allocator.allocator;20 const arena = arena_allocator.getAllocator();
2121
22 const root_name = "unwind";22 const root_name = "unwind";
23 const output_mode = .Lib;23 const output_mode = .Lib;
src/link.zig+1-1
...@@ -628,7 +628,7 @@ pub const File = struct {...@@ -628,7 +628,7 @@ pub const File = struct {
628628
629 var arena_allocator = std.heap.ArenaAllocator.init(base.allocator);629 var arena_allocator = std.heap.ArenaAllocator.init(base.allocator);
630 defer arena_allocator.deinit();630 defer arena_allocator.deinit();
631 const arena = &arena_allocator.allocator;631 const arena = arena_allocator.getAllocator();
632632
633 const directory = base.options.emit.?.directory; // Just an alias to make it shorter to type.633 const directory = base.options.emit.?.directory; // Just an alias to make it shorter to type.
634634
src/link/C.zig+2-2
...@@ -128,7 +128,7 @@ pub fn updateFunc(self: *C, module: *Module, func: *Module.Fn, air: Air, livenes...@@ -128,7 +128,7 @@ pub fn updateFunc(self: *C, module: *Module, func: *Module.Fn, air: Air, livenes
128 .decl = decl,128 .decl = decl,
129 .fwd_decl = fwd_decl.toManaged(module.gpa),129 .fwd_decl = fwd_decl.toManaged(module.gpa),
130 .typedefs = typedefs.promote(module.gpa),130 .typedefs = typedefs.promote(module.gpa),
131 .typedefs_arena = &self.arena.allocator,131 .typedefs_arena = self.arena.getAllocator(),
132 },132 },
133 .code = code.toManaged(module.gpa),133 .code = code.toManaged(module.gpa),
134 .indent_writer = undefined, // set later so we can get a pointer to object.code134 .indent_writer = undefined, // set later so we can get a pointer to object.code
...@@ -193,7 +193,7 @@ pub fn updateDecl(self: *C, module: *Module, decl: *Module.Decl) !void {...@@ -193,7 +193,7 @@ pub fn updateDecl(self: *C, module: *Module, decl: *Module.Decl) !void {
193 .decl = decl,193 .decl = decl,
194 .fwd_decl = fwd_decl.toManaged(module.gpa),194 .fwd_decl = fwd_decl.toManaged(module.gpa),
195 .typedefs = typedefs.promote(module.gpa),195 .typedefs = typedefs.promote(module.gpa),
196 .typedefs_arena = &self.arena.allocator,196 .typedefs_arena = self.arena.getAllocator(),
197 },197 },
198 .code = code.toManaged(module.gpa),198 .code = code.toManaged(module.gpa),
199 .indent_writer = undefined, // set later so we can get a pointer to object.code199 .indent_writer = undefined, // set later so we can get a pointer to object.code
src/link/Coff.zig+1-1
...@@ -877,7 +877,7 @@ fn linkWithLLD(self: *Coff, comp: *Compilation) !void {...@@ -877,7 +877,7 @@ fn linkWithLLD(self: *Coff, comp: *Compilation) !void {
877877
878 var arena_allocator = std.heap.ArenaAllocator.init(self.base.allocator);878 var arena_allocator = std.heap.ArenaAllocator.init(self.base.allocator);
879 defer arena_allocator.deinit();879 defer arena_allocator.deinit();
880 const arena = &arena_allocator.allocator;880 const arena = arena_allocator.getAllocator();
881881
882 const directory = self.base.options.emit.?.directory; // Just an alias to make it shorter to type.882 const directory = self.base.options.emit.?.directory; // Just an alias to make it shorter to type.
883883
src/link/Elf.zig+1-1
...@@ -1243,7 +1243,7 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void {...@@ -1243,7 +1243,7 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void {
12431243
1244 var arena_allocator = std.heap.ArenaAllocator.init(self.base.allocator);1244 var arena_allocator = std.heap.ArenaAllocator.init(self.base.allocator);
1245 defer arena_allocator.deinit();1245 defer arena_allocator.deinit();
1246 const arena = &arena_allocator.allocator;1246 const arena = arena_allocator.getAllocator();
12471247
1248 const directory = self.base.options.emit.?.directory; // Just an alias to make it shorter to type.1248 const directory = self.base.options.emit.?.directory; // Just an alias to make it shorter to type.
12491249
src/link/MachO.zig+2-2
...@@ -412,7 +412,7 @@ pub fn flushModule(self: *MachO, comp: *Compilation) !void {...@@ -412,7 +412,7 @@ pub fn flushModule(self: *MachO, comp: *Compilation) !void {
412412
413 var arena_allocator = std.heap.ArenaAllocator.init(self.base.allocator);413 var arena_allocator = std.heap.ArenaAllocator.init(self.base.allocator);
414 defer arena_allocator.deinit();414 defer arena_allocator.deinit();
415 const arena = &arena_allocator.allocator;415 const arena = arena_allocator.getAllocator();
416416
417 const directory = self.base.options.emit.?.directory; // Just an alias to make it shorter to type.417 const directory = self.base.options.emit.?.directory; // Just an alias to make it shorter to type.
418418
...@@ -5379,7 +5379,7 @@ fn snapshotState(self: *MachO) !void {...@@ -5379,7 +5379,7 @@ fn snapshotState(self: *MachO) !void {
53795379
5380 var arena_allocator = std.heap.ArenaAllocator.init(self.base.allocator);5380 var arena_allocator = std.heap.ArenaAllocator.init(self.base.allocator);
5381 defer arena_allocator.deinit();5381 defer arena_allocator.deinit();
5382 const arena = &arena_allocator.allocator;5382 const arena = arena_allocator.getAllocator();
53835383
5384 const out_file = try emit.directory.handle.createFile("snapshots.json", .{5384 const out_file = try emit.directory.handle.createFile("snapshots.json", .{
5385 .truncate = self.cold_start,5385 .truncate = self.cold_start,
src/link/Plan9.zig+1-1
...@@ -168,7 +168,7 @@ fn putFn(self: *Plan9, decl: *Module.Decl, out: FnDeclOutput) !void {...@@ -168,7 +168,7 @@ fn putFn(self: *Plan9, decl: *Module.Decl, out: FnDeclOutput) !void {
168 try fn_map_res.value_ptr.functions.put(gpa, decl, out);168 try fn_map_res.value_ptr.functions.put(gpa, decl, out);
169 } else {169 } else {
170 const file = decl.getFileScope();170 const file = decl.getFileScope();
171 const arena = &self.path_arena.allocator;171 const arena = self.path_arena.getAllocator();
172 // each file gets a symbol172 // each file gets a symbol
173 fn_map_res.value_ptr.* = .{173 fn_map_res.value_ptr.* = .{
174 .sym_index = blk: {174 .sym_index = blk: {
src/link/Wasm.zig+1-1
...@@ -950,7 +950,7 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation) !void {...@@ -950,7 +950,7 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation) !void {
950950
951 var arena_allocator = std.heap.ArenaAllocator.init(self.base.allocator);951 var arena_allocator = std.heap.ArenaAllocator.init(self.base.allocator);
952 defer arena_allocator.deinit();952 defer arena_allocator.deinit();
953 const arena = &arena_allocator.allocator;953 const arena = arena_allocator.getAllocator();
954954
955 const directory = self.base.options.emit.?.directory; // Just an alias to make it shorter to type.955 const directory = self.base.options.emit.?.directory; // Just an alias to make it shorter to type.
956956
src/link/tapi.zig+3-3
...@@ -120,7 +120,7 @@ pub const LibStub = struct {...@@ -120,7 +120,7 @@ pub const LibStub = struct {
120 err: {120 err: {
121 log.debug("trying to parse as []TbdV4", .{});121 log.debug("trying to parse as []TbdV4", .{});
122 const inner = lib_stub.yaml.parse([]TbdV4) catch break :err;122 const inner = lib_stub.yaml.parse([]TbdV4) catch break :err;
123 var out = try lib_stub.yaml.arena.allocator.alloc(Tbd, inner.len);123 var out = try lib_stub.yaml.arena.getAllocator().alloc(Tbd, inner.len);
124 for (inner) |doc, i| {124 for (inner) |doc, i| {
125 out[i] = .{ .v4 = doc };125 out[i] = .{ .v4 = doc };
126 }126 }
...@@ -130,7 +130,7 @@ pub const LibStub = struct {...@@ -130,7 +130,7 @@ pub const LibStub = struct {
130 err: {130 err: {
131 log.debug("trying to parse as TbdV4", .{});131 log.debug("trying to parse as TbdV4", .{});
132 const inner = lib_stub.yaml.parse(TbdV4) catch break :err;132 const inner = lib_stub.yaml.parse(TbdV4) catch break :err;
133 var out = try lib_stub.yaml.arena.allocator.alloc(Tbd, 1);133 var out = try lib_stub.yaml.arena.getAllocator().alloc(Tbd, 1);
134 out[0] = .{ .v4 = inner };134 out[0] = .{ .v4 = inner };
135 break :blk out;135 break :blk out;
136 }136 }
...@@ -148,7 +148,7 @@ pub const LibStub = struct {...@@ -148,7 +148,7 @@ pub const LibStub = struct {
148 err: {148 err: {
149 log.debug("trying to parse as TbdV3", .{});149 log.debug("trying to parse as TbdV3", .{});
150 const inner = lib_stub.yaml.parse(TbdV3) catch break :err;150 const inner = lib_stub.yaml.parse(TbdV3) catch break :err;
151 var out = try lib_stub.yaml.arena.allocator.alloc(Tbd, 1);151 var out = try lib_stub.yaml.arena.getAllocator().alloc(Tbd, 1);
152 out[0] = .{ .v3 = inner };152 out[0] = .{ .v3 = inner };
153 break :blk out;153 break :blk out;
154 }154 }
src/link/tapi/yaml.zig+7-6
...@@ -248,15 +248,16 @@ pub const Yaml = struct {...@@ -248,15 +248,16 @@ pub const Yaml = struct {
248248
249 pub fn load(allocator: Allocator, source: []const u8) !Yaml {249 pub fn load(allocator: Allocator, source: []const u8) !Yaml {
250 var arena = ArenaAllocator.init(allocator);250 var arena = ArenaAllocator.init(allocator);
251 const arena_allocator = arena.getAllocator();
251252
252 var tree = Tree.init(&arena.allocator);253 var tree = Tree.init(arena_allocator);
253 try tree.parse(source);254 try tree.parse(source);
254255
255 var docs = std.ArrayList(Value).init(&arena.allocator);256 var docs = std.ArrayList(Value).init(arena_allocator);
256 try docs.ensureUnusedCapacity(tree.docs.items.len);257 try docs.ensureUnusedCapacity(tree.docs.items.len);
257258
258 for (tree.docs.items) |node| {259 for (tree.docs.items) |node| {
259 const value = try Value.fromNode(&arena.allocator, &tree, node, null);260 const value = try Value.fromNode(arena_allocator, &tree, node, null);
260 docs.appendAssumeCapacity(value);261 docs.appendAssumeCapacity(value);
261 }262 }
262263
...@@ -299,7 +300,7 @@ pub const Yaml = struct {...@@ -299,7 +300,7 @@ pub const Yaml = struct {
299 .Pointer => |info| {300 .Pointer => |info| {
300 switch (info.size) {301 switch (info.size) {
301 .Slice => {302 .Slice => {
302 var parsed = try self.arena.allocator.alloc(info.child, self.docs.items.len);303 var parsed = try self.arena.getAllocator().alloc(info.child, self.docs.items.len);
303 for (self.docs.items) |doc, i| {304 for (self.docs.items) |doc, i| {
304 parsed[i] = try self.parseValue(info.child, doc);305 parsed[i] = try self.parseValue(info.child, doc);
305 }306 }
...@@ -361,7 +362,7 @@ pub const Yaml = struct {...@@ -361,7 +362,7 @@ pub const Yaml = struct {
361362
362 inline for (struct_info.fields) |field| {363 inline for (struct_info.fields) |field| {
363 const value: ?Value = map.get(field.name) orelse blk: {364 const value: ?Value = map.get(field.name) orelse blk: {
364 const field_name = try mem.replaceOwned(u8, &self.arena.allocator, field.name, "_", "-");365 const field_name = try mem.replaceOwned(u8, self.arena.getAllocator(), field.name, "_", "-");
365 break :blk map.get(field_name);366 break :blk map.get(field_name);
366 };367 };
367368
...@@ -382,7 +383,7 @@ pub const Yaml = struct {...@@ -382,7 +383,7 @@ pub const Yaml = struct {
382383
383 fn parsePointer(self: *Yaml, comptime T: type, value: Value) Error!T {384 fn parsePointer(self: *Yaml, comptime T: type, value: Value) Error!T {
384 const ptr_info = @typeInfo(T).Pointer;385 const ptr_info = @typeInfo(T).Pointer;
385 const arena = &self.arena.allocator;386 const arena = self.arena.getAllocator();
386387
387 switch (ptr_info.size) {388 switch (ptr_info.size) {
388 .Slice => {389 .Slice => {
src/main.zig+4-4
...@@ -139,7 +139,7 @@ pub fn main() anyerror!void {...@@ -139,7 +139,7 @@ pub fn main() anyerror!void {
139 const gpa = gpa: {139 const gpa = gpa: {
140 if (!builtin.link_libc) {140 if (!builtin.link_libc) {
141 gpa_need_deinit = true;141 gpa_need_deinit = true;
142 break :gpa &general_purpose_allocator.allocator;142 break :gpa general_purpose_allocator.getAllocator();
143 }143 }
144 // We would prefer to use raw libc allocator here, but cannot144 // We would prefer to use raw libc allocator here, but cannot
145 // use it if it won't support the alignment we need.145 // use it if it won't support the alignment we need.
...@@ -153,7 +153,7 @@ pub fn main() anyerror!void {...@@ -153,7 +153,7 @@ pub fn main() anyerror!void {
153 };153 };
154 var arena_instance = std.heap.ArenaAllocator.init(gpa);154 var arena_instance = std.heap.ArenaAllocator.init(gpa);
155 defer arena_instance.deinit();155 defer arena_instance.deinit();
156 const arena = &arena_instance.allocator;156 const arena = arena_instance.getAllocator();
157157
158 const args = try process.argsAlloc(arena);158 const args = try process.argsAlloc(arena);
159159
...@@ -3619,7 +3619,7 @@ pub fn cmdFmt(gpa: Allocator, arena: Allocator, args: []const []const u8) !void...@@ -3619,7 +3619,7 @@ pub fn cmdFmt(gpa: Allocator, arena: Allocator, args: []const []const u8) !void
3619 var errors = std.ArrayList(Compilation.AllErrors.Message).init(gpa);3619 var errors = std.ArrayList(Compilation.AllErrors.Message).init(gpa);
3620 defer errors.deinit();3620 defer errors.deinit();
36213621
3622 try Compilation.AllErrors.addZir(&arena_instance.allocator, &errors, &file);3622 try Compilation.AllErrors.addZir(arena_instance.getAllocator(), &errors, &file);
3623 const ttyconf: std.debug.TTY.Config = switch (color) {3623 const ttyconf: std.debug.TTY.Config = switch (color) {
3624 .auto => std.debug.detectTTYConfig(),3624 .auto => std.debug.detectTTYConfig(),
3625 .on => .escape_codes,3625 .on => .escape_codes,
...@@ -3818,7 +3818,7 @@ fn fmtPathFile(...@@ -3818,7 +3818,7 @@ fn fmtPathFile(
3818 var errors = std.ArrayList(Compilation.AllErrors.Message).init(fmt.gpa);3818 var errors = std.ArrayList(Compilation.AllErrors.Message).init(fmt.gpa);
3819 defer errors.deinit();3819 defer errors.deinit();
38203820
3821 try Compilation.AllErrors.addZir(&arena_instance.allocator, &errors, &file);3821 try Compilation.AllErrors.addZir(arena_instance.getAllocator(), &errors, &file);
3822 const ttyconf: std.debug.TTY.Config = switch (fmt.color) {3822 const ttyconf: std.debug.TTY.Config = switch (fmt.color) {
3823 .auto => std.debug.detectTTYConfig(),3823 .auto => std.debug.detectTTYConfig(),
3824 .on => .escape_codes,3824 .on => .escape_codes,
src/mingw.zig+2-2
...@@ -25,7 +25,7 @@ pub fn buildCRTFile(comp: *Compilation, crt_file: CRTFile) !void {...@@ -25,7 +25,7 @@ pub fn buildCRTFile(comp: *Compilation, crt_file: CRTFile) !void {
25 }25 }
26 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);26 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);
27 defer arena_allocator.deinit();27 defer arena_allocator.deinit();
28 const arena = &arena_allocator.allocator;28 const arena = arena_allocator.getAllocator();
2929
30 switch (crt_file) {30 switch (crt_file) {
31 .crt2_o => {31 .crt2_o => {
...@@ -281,7 +281,7 @@ fn add_cc_args(...@@ -281,7 +281,7 @@ fn add_cc_args(
281pub fn buildImportLib(comp: *Compilation, lib_name: []const u8) !void {281pub fn buildImportLib(comp: *Compilation, lib_name: []const u8) !void {
282 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);282 var arena_allocator = std.heap.ArenaAllocator.init(comp.gpa);
283 defer arena_allocator.deinit();283 defer arena_allocator.deinit();
284 const arena = &arena_allocator.allocator;284 const arena = arena_allocator.getAllocator();
285285
286 const def_file_path = findDef(comp, arena, lib_name) catch |err| switch (err) {286 const def_file_path = findDef(comp, arena, lib_name) catch |err| switch (err) {
287 error.FileNotFound => {287 error.FileNotFound => {
src/musl.zig+1-1
...@@ -25,7 +25,7 @@ pub fn buildCRTFile(comp: *Compilation, crt_file: CRTFile) !void {...@@ -25,7 +25,7 @@ pub fn buildCRTFile(comp: *Compilation, crt_file: CRTFile) !void {
25 const gpa = comp.gpa;25 const gpa = comp.gpa;
26 var arena_allocator = std.heap.ArenaAllocator.init(gpa);26 var arena_allocator = std.heap.ArenaAllocator.init(gpa);
27 defer arena_allocator.deinit();27 defer arena_allocator.deinit();
28 const arena = &arena_allocator.allocator;28 const arena = arena_allocator.getAllocator();
2929
30 switch (crt_file) {30 switch (crt_file) {
31 .crti_o => {31 .crti_o => {
src/print_air.zig+1-1
...@@ -47,7 +47,7 @@ pub fn dump(gpa: Allocator, air: Air, zir: Zir, liveness: Liveness) void {...@@ -47,7 +47,7 @@ pub fn dump(gpa: Allocator, air: Air, zir: Zir, liveness: Liveness) void {
4747
48 var writer: Writer = .{48 var writer: Writer = .{
49 .gpa = gpa,49 .gpa = gpa,
50 .arena = &arena.allocator,50 .arena = arena.getAllocator(),
51 .air = air,51 .air = air,
52 .zir = zir,52 .zir = zir,
53 .liveness = liveness,53 .liveness = liveness,
src/print_zir.zig+3-3
...@@ -19,7 +19,7 @@ pub fn renderAsTextToFile(...@@ -19,7 +19,7 @@ pub fn renderAsTextToFile(
1919
20 var writer: Writer = .{20 var writer: Writer = .{
21 .gpa = gpa,21 .gpa = gpa,
22 .arena = &arena.allocator,22 .arena = arena.getAllocator(),
23 .file = scope_file,23 .file = scope_file,
24 .code = scope_file.zir,24 .code = scope_file.zir,
25 .indent = 0,25 .indent = 0,
...@@ -74,7 +74,7 @@ pub fn renderInstructionContext(...@@ -74,7 +74,7 @@ pub fn renderInstructionContext(
7474
75 var writer: Writer = .{75 var writer: Writer = .{
76 .gpa = gpa,76 .gpa = gpa,
77 .arena = &arena.allocator,77 .arena = arena.getAllocator(),
78 .file = scope_file,78 .file = scope_file,
79 .code = scope_file.zir,79 .code = scope_file.zir,
80 .indent = if (indent < 2) 2 else indent,80 .indent = if (indent < 2) 2 else indent,
...@@ -106,7 +106,7 @@ pub fn renderSingleInstruction(...@@ -106,7 +106,7 @@ pub fn renderSingleInstruction(
106106
107 var writer: Writer = .{107 var writer: Writer = .{
108 .gpa = gpa,108 .gpa = gpa,
109 .arena = &arena.allocator,109 .arena = arena.getAllocator(),
110 .file = scope_file,110 .file = scope_file,
111 .code = scope_file.zir,111 .code = scope_file.zir,
112 .indent = indent,112 .indent = indent,
src/stage1.zig+1-1
...@@ -38,7 +38,7 @@ pub fn main(argc: c_int, argv: [*][*:0]u8) callconv(.C) c_int {...@@ -38,7 +38,7 @@ pub fn main(argc: c_int, argv: [*][*:0]u8) callconv(.C) c_int {
38 const gpa = std.heap.c_allocator;38 const gpa = std.heap.c_allocator;
39 var arena_instance = std.heap.ArenaAllocator.init(gpa);39 var arena_instance = std.heap.ArenaAllocator.init(gpa);
40 defer arena_instance.deinit();40 defer arena_instance.deinit();
41 const arena = &arena_instance.allocator;41 const arena = arena_instance.getAllocator();
4242
43 const args = arena.alloc([]const u8, @intCast(usize, argc)) catch fatal("{s}", .{"OutOfMemory"});43 const args = arena.alloc([]const u8, @intCast(usize, argc)) catch fatal("{s}", .{"OutOfMemory"});
44 for (args) |*arg, i| {44 for (args) |*arg, i| {
src/test.zig+1-1
...@@ -692,7 +692,7 @@ pub const TestContext = struct {...@@ -692,7 +692,7 @@ pub const TestContext = struct {
692692
693 var arena_allocator = std.heap.ArenaAllocator.init(allocator);693 var arena_allocator = std.heap.ArenaAllocator.init(allocator);
694 defer arena_allocator.deinit();694 defer arena_allocator.deinit();
695 const arena = &arena_allocator.allocator;695 const arena = arena_allocator.getAllocator();
696696
697 var tmp = std.testing.tmpDir(.{});697 var tmp = std.testing.tmpDir(.{});
698 defer tmp.cleanup();698 defer tmp.cleanup();
src/translate_c.zig+3-2
...@@ -373,13 +373,14 @@ pub fn translate(...@@ -373,13 +373,14 @@ pub fn translate(
373 // from this function.373 // from this function.
374 var arena = std.heap.ArenaAllocator.init(gpa);374 var arena = std.heap.ArenaAllocator.init(gpa);
375 errdefer arena.deinit();375 errdefer arena.deinit();
376 const arena_allocator = arena.getAllocator();
376377
377 var context = Context{378 var context = Context{
378 .gpa = gpa,379 .gpa = gpa,
379 .arena = &arena.allocator,380 .arena = arena_allocator,
380 .source_manager = ast_unit.getSourceManager(),381 .source_manager = ast_unit.getSourceManager(),
381 .alias_list = AliasList.init(gpa),382 .alias_list = AliasList.init(gpa),
382 .global_scope = try arena.allocator.create(Scope.Root),383 .global_scope = try arena_allocator.create(Scope.Root),
383 .clang_context = ast_unit.getASTContext(),384 .clang_context = ast_unit.getASTContext(),
384 .pattern_list = try PatternList.init(gpa),385 .pattern_list = try PatternList.init(gpa),
385 };386 };
src/wasi_libc.zig+1-1
...@@ -67,7 +67,7 @@ pub fn buildCRTFile(comp: *Compilation, crt_file: CRTFile) !void {...@@ -67,7 +67,7 @@ pub fn buildCRTFile(comp: *Compilation, crt_file: CRTFile) !void {
67 const gpa = comp.gpa;67 const gpa = comp.gpa;
68 var arena_allocator = std.heap.ArenaAllocator.init(gpa);68 var arena_allocator = std.heap.ArenaAllocator.init(gpa);
69 defer arena_allocator.deinit();69 defer arena_allocator.deinit();
70 const arena = &arena_allocator.allocator;70 const arena = arena_allocator.getAllocator();
7171
72 switch (crt_file) {72 switch (crt_file) {
73 .crt1_reactor_o => {73 .crt1_reactor_o => {
test/cli.zig+1-1
...@@ -16,7 +16,7 @@ pub fn main() !void {...@@ -16,7 +16,7 @@ pub fn main() !void {
16 // skip my own exe name16 // skip my own exe name
17 _ = arg_it.skip();17 _ = arg_it.skip();
1818
19 a = &arena.allocator;19 a = arena.getAllocator();
2020
21 const zig_exe_rel = try (arg_it.next(a) orelse {21 const zig_exe_rel = try (arg_it.next(a) orelse {
22 std.debug.print("Expected first argument to be path to zig compiler\n", .{});22 std.debug.print("Expected first argument to be path to zig compiler\n", .{});
test/compare_output.zig+1-1
...@@ -491,7 +491,7 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {...@@ -491,7 +491,7 @@ pub fn addCases(cases: *tests.CompareOutputContext) void {
491 \\pub fn main() !void {491 \\pub fn main() !void {
492 \\ var allocator_buf: [10]u8 = undefined;492 \\ var allocator_buf: [10]u8 = undefined;
493 \\ var fixedBufferAllocator = std.mem.validationWrap(std.heap.FixedBufferAllocator.init(&allocator_buf));493 \\ var fixedBufferAllocator = std.mem.validationWrap(std.heap.FixedBufferAllocator.init(&allocator_buf));
494 \\ const allocator = &std.heap.loggingAllocator(&fixedBufferAllocator.allocator).allocator;494 \\ const allocator = std.heap.loggingAllocator(fixedBufferAllocator.getAllocator()).getAllocator();
495 \\495 \\
496 \\ var a = try allocator.alloc(u8, 10);496 \\ var a = try allocator.alloc(u8, 10);
497 \\ a = allocator.shrink(a, 5);497 \\ a = allocator.shrink(a, 5);
test/compile_errors.zig+4-4
...@@ -6550,9 +6550,9 @@ pub fn addCases(ctx: *TestContext) !void {...@@ -6550,9 +6550,9 @@ pub fn addCases(ctx: *TestContext) !void {
6550 ctx.objErrStage1("method call with first arg type wrong container",6550 ctx.objErrStage1("method call with first arg type wrong container",
6551 \\pub const List = struct {6551 \\pub const List = struct {
6552 \\ len: usize,6552 \\ len: usize,
6553 \\ allocator: *Allocator,6553 \\ allocator: Allocator,
6554 \\6554 \\
6555 \\ pub fn init(allocator: *Allocator) List {6555 \\ pub fn init(allocator: Allocator) List {
6556 \\ return List {6556 \\ return List {
6557 \\ .len = 0,6557 \\ .len = 0,
6558 \\ .allocator = allocator,6558 \\ .allocator = allocator,
...@@ -6573,7 +6573,7 @@ pub fn addCases(ctx: *TestContext) !void {...@@ -6573,7 +6573,7 @@ pub fn addCases(ctx: *TestContext) !void {
6573 \\ x.init();6573 \\ x.init();
6574 \\}6574 \\}
6575 , &[_][]const u8{6575 , &[_][]const u8{
6576 "tmp.zig:23:5: error: expected type '*Allocator', found '*List'",6576 "tmp.zig:23:5: error: expected type 'Allocator', found '*List'",
6577 });6577 });
65786578
6579 ctx.objErrStage1("binary not on number literal",6579 ctx.objErrStage1("binary not on number literal",
...@@ -7569,7 +7569,7 @@ pub fn addCases(ctx: *TestContext) !void {...@@ -7569,7 +7569,7 @@ pub fn addCases(ctx: *TestContext) !void {
7569 \\7569 \\
7570 \\export fn entry() void {7570 \\export fn entry() void {
7571 \\ const a = MdNode.Header {7571 \\ const a = MdNode.Header {
7572 \\ .text = MdText.init(&std.testing.allocator),7572 \\ .text = MdText.init(std.testing.allocator),
7573 \\ .weight = HeaderWeight.H1,7573 \\ .weight = HeaderWeight.H1,
7574 \\ };7574 \\ };
7575 \\ _ = a;7575 \\ _ = a;
test/standalone/brace_expansion/main.zig+1-1
...@@ -16,7 +16,7 @@ const Token = union(enum) {...@@ -16,7 +16,7 @@ const Token = union(enum) {
16};16};
1717
18var gpa = std.heap.GeneralPurposeAllocator(.{}){};18var gpa = std.heap.GeneralPurposeAllocator(.{}){};
19var global_allocator = &gpa.allocator;19const global_allocator = gpa.getAllocator();
2020
21fn tokenize(input: []const u8) !ArrayList(Token) {21fn tokenize(input: []const u8) !ArrayList(Token) {
22 const State = enum {22 const State = enum {
test/standalone/cat/main.zig+1-1
...@@ -8,7 +8,7 @@ const warn = std.log.warn;...@@ -8,7 +8,7 @@ const warn = std.log.warn;
8pub fn main() !void {8pub fn main() !void {
9 var arena_instance = std.heap.ArenaAllocator.init(std.heap.page_allocator);9 var arena_instance = std.heap.ArenaAllocator.init(std.heap.page_allocator);
10 defer arena_instance.deinit();10 defer arena_instance.deinit();
11 const arena = &arena_instance.allocator;11 const arena = arena_instance.getAllocator();
1212
13 const args = try process.argsAlloc(arena);13 const args = try process.argsAlloc(arena);
1414
tools/gen_spirv_spec.zig+1-1
...@@ -4,7 +4,7 @@ const g = @import("spirv/grammar.zig");...@@ -4,7 +4,7 @@ const g = @import("spirv/grammar.zig");
4pub fn main() !void {4pub fn main() !void {
5 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);5 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
6 defer arena.deinit();6 defer arena.deinit();
7 const allocator = &arena.allocator;7 const allocator = arena.getAllocator();
88
9 const args = try std.process.argsAlloc(allocator);9 const args = try std.process.argsAlloc(allocator);
10 if (args.len != 2) {10 if (args.len != 2) {
tools/gen_stubs.zig+1-1
...@@ -25,7 +25,7 @@ pub fn main() !void {...@@ -25,7 +25,7 @@ pub fn main() !void {
2525
26 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);26 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
27 defer arena.deinit();27 defer arena.deinit();
28 const ally = &arena.allocator;28 const ally = arena.getAllocator();
2929
30 var symbols = std.ArrayList(Symbol).init(ally);30 var symbols = std.ArrayList(Symbol).init(ally);
31 var sections = std.ArrayList([]const u8).init(ally);31 var sections = std.ArrayList([]const u8).init(ally);
tools/merge_anal_dumps.zig+1-1
...@@ -9,7 +9,7 @@ pub fn main() anyerror!void {...@@ -9,7 +9,7 @@ pub fn main() anyerror!void {
9 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);9 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
10 defer arena.deinit();10 defer arena.deinit();
1111
12 const allocator = &arena.allocator;12 const allocator = arena.getAllocator();
1313
14 const args = try std.process.argsAlloc(allocator);14 const args = try std.process.argsAlloc(allocator);
1515
tools/process_headers.zig+1-1
...@@ -284,7 +284,7 @@ const LibCVendor = enum {...@@ -284,7 +284,7 @@ const LibCVendor = enum {
284284
285pub fn main() !void {285pub fn main() !void {
286 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);286 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
287 const allocator = &arena.allocator;287 const allocator = arena.getAllocator();
288 const args = try std.process.argsAlloc(allocator);288 const args = try std.process.argsAlloc(allocator);
289 var search_paths = std.ArrayList([]const u8).init(allocator);289 var search_paths = std.ArrayList([]const u8).init(allocator);
290 var opt_out_dir: ?[]const u8 = null;290 var opt_out_dir: ?[]const u8 = null;
tools/update-license-headers.zig+1-1
...@@ -10,7 +10,7 @@ pub fn main() !void {...@@ -10,7 +10,7 @@ pub fn main() !void {
10 defer root_node.end();10 defer root_node.end();
1111
12 var arena_allocator = std.heap.ArenaAllocator.init(std.heap.page_allocator);12 var arena_allocator = std.heap.ArenaAllocator.init(std.heap.page_allocator);
13 const arena = &arena_allocator.allocator;13 const arena = arena_allocator.getAllocator();
1414
15 const args = try std.process.argsAlloc(arena);15 const args = try std.process.argsAlloc(arena);
16 const path_to_walk = args[1];16 const path_to_walk = args[1];
tools/update_clang_options.zig+5
...@@ -450,8 +450,13 @@ const cpu_targets = struct {...@@ -450,8 +450,13 @@ const cpu_targets = struct {
450pub fn main() anyerror!void {450pub fn main() anyerror!void {
451 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);451 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
452 defer arena.deinit();452 defer arena.deinit();
453<<<<<<< HEAD
453 const allocator = &arena.allocator;454 const allocator = &arena.allocator;
454455
456=======
457
458 const allocator = arena.getAllocator();
459>>>>>>> 11157e318 (allocgate: stage 1 and 2 building)
455 const args = try std.process.argsAlloc(allocator);460 const args = try std.process.argsAlloc(allocator);
456461
457 if (args.len <= 1) {462 if (args.len <= 1) {
tools/update_cpu_features.zig+2-2
...@@ -769,7 +769,7 @@ const llvm_targets = [_]LlvmTarget{...@@ -769,7 +769,7 @@ const llvm_targets = [_]LlvmTarget{
769pub fn main() anyerror!void {769pub fn main() anyerror!void {
770 var arena_state = std.heap.ArenaAllocator.init(std.heap.page_allocator);770 var arena_state = std.heap.ArenaAllocator.init(std.heap.page_allocator);
771 defer arena_state.deinit();771 defer arena_state.deinit();
772 const arena = &arena_state.allocator;772 const arena = arena_state.getAllocator();
773773
774 const args = try std.process.argsAlloc(arena);774 const args = try std.process.argsAlloc(arena);
775 if (args.len <= 1) {775 if (args.len <= 1) {
...@@ -845,7 +845,7 @@ fn processOneTarget(job: Job) anyerror!void {...@@ -845,7 +845,7 @@ fn processOneTarget(job: Job) anyerror!void {
845845
846 var arena_state = std.heap.ArenaAllocator.init(std.heap.page_allocator);846 var arena_state = std.heap.ArenaAllocator.init(std.heap.page_allocator);
847 defer arena_state.deinit();847 defer arena_state.deinit();
848 const arena = &arena_state.allocator;848 const arena = arena_state.getAllocator();
849849
850 var progress_node = job.root_progress.start(llvm_target.zig_name, 3);850 var progress_node = job.root_progress.start(llvm_target.zig_name, 3);
851 progress_node.activate();851 progress_node.activate();
tools/update_glibc.zig+1-1
...@@ -133,7 +133,7 @@ const Function = struct {...@@ -133,7 +133,7 @@ const Function = struct {
133133
134pub fn main() !void {134pub fn main() !void {
135 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);135 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
136 const allocator = &arena.allocator;136 const allocator = arena.getAllocator();
137 const args = try std.process.argsAlloc(allocator);137 const args = try std.process.argsAlloc(allocator);
138 const in_glibc_dir = args[1]; // path to the unzipped tarball of glibc, e.g. ~/downloads/glibc-2.25138 const in_glibc_dir = args[1]; // path to the unzipped tarball of glibc, e.g. ~/downloads/glibc-2.25
139 const zig_src_dir = args[2]; // path to the source checkout of zig, lib dir, e.g. ~/zig-src/lib139 const zig_src_dir = args[2]; // path to the source checkout of zig, lib dir, e.g. ~/zig-src/lib
tools/update_spirv_features.zig+1-1
...@@ -48,7 +48,7 @@ const Version = struct {...@@ -48,7 +48,7 @@ const Version = struct {
48pub fn main() !void {48pub fn main() !void {
49 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);49 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
50 defer arena.deinit();50 defer arena.deinit();
51 const allocator = &arena.allocator;51 const allocator = arena.getAllocator();
5252
53 const args = try std.process.argsAlloc(allocator);53 const args = try std.process.argsAlloc(allocator);
5454