| ... | ... | @@ -69,6 +69,7 @@ const String = extern struct { |
| 69 | 69 | pub const AvBlock = struct { |
| 70 | 70 | fwd_decl: String = .empty, |
| 71 | 71 | code: String = .empty, |
| 72 | code_header: String = .empty, |
| 72 | 73 | /// Each `Decl` stores a set of used `CType`s. In `flush()`, we iterate |
| 73 | 74 | /// over each `Decl` and generate the definition for each used `CType` once. |
| 74 | 75 | ctype_pool: codegen.CType.Pool = .empty, |
| ... | ... | @@ -91,14 +92,13 @@ pub fn getString(this: C, s: String) []const u8 { |
| 91 | 92 | return this.string_bytes.items[s.start..][0..s.len]; |
| 92 | 93 | } |
| 93 | 94 | |
| 94 | | pub fn addString(this: *C, writers: []const *std.io.Writer.Allocating) Allocator.Error!String { |
| 95 | pub fn addString(this: *C, s: []const u8) Allocator.Error!String { |
| 95 | 96 | const comp = this.base.comp; |
| 96 | 97 | const gpa = comp.gpa; |
| 97 | | const start = this.string_bytes.items.len; |
| 98 | | for (writers) |writer| try this.string_bytes.appendSlice(gpa, writer.getWritten()); |
| 98 | try this.string_bytes.appendSlice(gpa, s); |
| 99 | 99 | return .{ |
| 100 | | .start = @intCast(start), |
| 101 | | .len = @intCast(this.string_bytes.items.len - start), |
| 100 | .start = @intCast(this.string_bytes.items.len - s.len), |
| 101 | .len = @intCast(s.len), |
| 102 | 102 | }; |
| 103 | 103 | } |
| 104 | 104 | |
| ... | ... | @@ -233,8 +233,8 @@ fn updateUav(self: *C, pt: Zcu.PerThread, i: usize) link.File.FlushError!void { |
| 233 | 233 | .code = undefined, |
| 234 | 234 | .indent_counter = 0, |
| 235 | 235 | }; |
| 236 | | object.dg.fwd_decl.initOwnedSlice(gpa, self.fwd_decl_buf); |
| 237 | | object.code.initOwnedSlice(gpa, self.code_buf); |
| 236 | object.dg.fwd_decl = .initOwnedSlice(gpa, self.fwd_decl_buf); |
| 237 | object.code = .initOwnedSlice(gpa, self.code_buf); |
| 238 | 238 | defer { |
| 239 | 239 | object.dg.uavs.deinit(gpa); |
| 240 | 240 | object.dg.ctype_pool.deinit(object.dg.gpa); |
| ... | ... | @@ -260,8 +260,8 @@ fn updateUav(self: *C, pt: Zcu.PerThread, i: usize) link.File.FlushError!void { |
| 260 | 260 | |
| 261 | 261 | object.dg.ctype_pool.freeUnusedCapacity(gpa); |
| 262 | 262 | self.uavs.values()[i] = .{ |
| 263 | | .fwd_decl = try self.addString(&.{&object.dg.fwd_decl}), |
| 264 | | .code = try self.addString(&.{&object.code}), |
| 263 | .fwd_decl = try self.addString(object.dg.fwd_decl.getWritten()), |
| 264 | .code = try self.addString(object.code.getWritten()), |
| 265 | 265 | .ctype_pool = object.dg.ctype_pool.move(), |
| 266 | 266 | }; |
| 267 | 267 | } |
| ... | ... | @@ -308,8 +308,8 @@ pub fn updateNav(self: *C, pt: Zcu.PerThread, nav_index: InternPool.Nav.Index) l |
| 308 | 308 | .code = undefined, |
| 309 | 309 | .indent_counter = 0, |
| 310 | 310 | }; |
| 311 | | object.dg.fwd_decl.initOwnedSlice(gpa, self.fwd_decl_buf); |
| 312 | | object.code.initOwnedSlice(gpa, self.code_buf); |
| 311 | object.dg.fwd_decl = .initOwnedSlice(gpa, self.fwd_decl_buf); |
| 312 | object.code = .initOwnedSlice(gpa, self.code_buf); |
| 313 | 313 | defer { |
| 314 | 314 | object.dg.uavs.deinit(gpa); |
| 315 | 315 | ctype_pool.* = object.dg.ctype_pool.move(); |
| ... | ... | @@ -327,8 +327,8 @@ pub fn updateNav(self: *C, pt: Zcu.PerThread, nav_index: InternPool.Nav.Index) l |
| 327 | 327 | }, |
| 328 | 328 | error.WriteFailed, error.OutOfMemory => return error.OutOfMemory, |
| 329 | 329 | }; |
| 330 | | gop.value_ptr.fwd_decl = try self.addString(&.{&object.dg.fwd_decl}); |
| 331 | | gop.value_ptr.code = try self.addString(&.{&object.code}); |
| 330 | gop.value_ptr.fwd_decl = try self.addString(object.dg.fwd_decl.getWritten()); |
| 331 | gop.value_ptr.code = try self.addString(object.code.getWritten()); |
| 332 | 332 | try self.addUavsFromCodegen(&object.dg.uavs); |
| 333 | 333 | } |
| 334 | 334 | |
| ... | ... | @@ -340,7 +340,7 @@ pub fn updateLineNumber(self: *C, pt: Zcu.PerThread, ti_id: InternPool.TrackedIn |
| 340 | 340 | _ = ti_id; |
| 341 | 341 | } |
| 342 | 342 | |
| 343 | | fn abiDefines(w: *std.io.Writer, target: std.Target) !void { |
| 343 | fn abiDefines(w: *std.io.Writer, target: *const std.Target) !void { |
| 344 | 344 | switch (target.abi) { |
| 345 | 345 | .msvc, .itanium => try w.writeAll("#define ZIG_TARGET_ABI_MSVC\n"), |
| 346 | 346 | else => {}, |
| ... | ... | @@ -639,8 +639,8 @@ fn flushErrDecls(self: *C, pt: Zcu.PerThread, f: *Flush) FlushDeclError!void { |
| 639 | 639 | .code = undefined, |
| 640 | 640 | .indent_counter = 0, |
| 641 | 641 | }; |
| 642 | | _ = object.dg.fwd_decl.fromArrayList(gpa, &f.lazy_fwd_decl); |
| 643 | | _ = object.code.fromArrayList(gpa, &f.lazy_code); |
| 642 | object.dg.fwd_decl = .fromArrayList(gpa, &f.lazy_fwd_decl); |
| 643 | object.code = .fromArrayList(gpa, &f.lazy_code); |
| 644 | 644 | defer { |
| 645 | 645 | object.dg.uavs.deinit(gpa); |
| 646 | 646 | f.lazy_ctype_pool = object.dg.ctype_pool.move(); |
| ... | ... | @@ -687,8 +687,8 @@ fn flushLazyFn( |
| 687 | 687 | .code = undefined, |
| 688 | 688 | .indent_counter = 0, |
| 689 | 689 | }; |
| 690 | | _ = object.dg.fwd_decl.fromArrayList(gpa, &f.lazy_fwd_decl); |
| 691 | | _ = object.code.fromArrayList(gpa, &f.lazy_code); |
| 690 | object.dg.fwd_decl = .fromArrayList(gpa, &f.lazy_fwd_decl); |
| 691 | object.code = .fromArrayList(gpa, &f.lazy_code); |
| 692 | 692 | defer { |
| 693 | 693 | // If this assert trips just handle the anon_decl_deps the same as |
| 694 | 694 | // `updateFunc()` does. |
| ... | ... | @@ -829,7 +829,7 @@ pub fn updateExports( |
| 829 | 829 | .scratch = .initBuffer(self.scratch_buf), |
| 830 | 830 | .uavs = .empty, |
| 831 | 831 | }; |
| 832 | | dg.fwd_decl.initOwnedSlice(gpa, self.fwd_decl_buf); |
| 832 | dg.fwd_decl = .initOwnedSlice(gpa, self.fwd_decl_buf); |
| 833 | 833 | defer { |
| 834 | 834 | assert(dg.uavs.count() == 0); |
| 835 | 835 | ctype_pool.* = dg.ctype_pool.move(); |
| ... | ... | @@ -841,7 +841,7 @@ pub fn updateExports( |
| 841 | 841 | codegen.genExports(&dg, exported, export_indices) catch |err| switch (err) { |
| 842 | 842 | error.WriteFailed, error.OutOfMemory => return error.OutOfMemory, |
| 843 | 843 | }; |
| 844 | | exported_block.* = .{ .fwd_decl = try self.addString(&.{&dg.fwd_decl}) }; |
| 844 | exported_block.* = .{ .fwd_decl = try self.addString(dg.fwd_decl.getWritten()) }; |
| 845 | 845 | } |
| 846 | 846 | |
| 847 | 847 | pub fn deleteExport( |