aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authormlugg <mlugg@mlugg.co.uk>2024-07-04 10:31:59 +0100
committerJacob Young <jacobly0@users.noreply.github.com>2024-07-10 11:20:08 -0400
commitf93a10f664fbbb67aeda031583a790e2a842fb01 (patch)
tree04d3bdc234ecb3e58f2d8f31a504e2f8cefaa8fb /src/Sema.zig
parent3aa48bf859b3eba17c0431c15ae79ab303219eff (diff)
downloadzig-f93a10f664fbbb67aeda031583a790e2a842fb01.tar.gz
zig-f93a10f664fbbb67aeda031583a790e2a842fb01.zip
Air: store param names directly instead of referencing Zir
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig35
1 files changed, 21 insertions, 14 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 41087a6360..170b773d1f 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -6718,13 +6718,7 @@ fn addDbgVar(
if (block.need_debug_scope) |ptr| ptr.* = true;
// Add the name to the AIR.
- const name_extra_index: u32 = @intCast(sema.air_extra.items.len);
- const elements_used = name.len / 4 + 1;
- try sema.air_extra.ensureUnusedCapacity(sema.gpa, elements_used);
- const buffer = mem.sliceAsBytes(sema.air_extra.unusedCapacitySlice());
- @memcpy(buffer[0..name.len], name);
- buffer[name.len] = 0;
- sema.air_extra.items.len += elements_used;
+ const name_extra_index = try sema.appendAirString(name);
_ = try block.addInst(.{
.tag = air_tag,
@@ -6735,6 +6729,16 @@ fn addDbgVar(
});
}
+pub fn appendAirString(sema: *Sema, str: []const u8) Allocator.Error!u32 {
+ const str_extra_index: u32 = @intCast(sema.air_extra.items.len);
+ const elements_used = str.len / 4 + 1;
+ const elements = try sema.air_extra.addManyAsSlice(sema.gpa, elements_used);
+ const buffer = mem.sliceAsBytes(elements);
+ @memcpy(buffer[0..str.len], str);
+ buffer[str.len] = 0;
+ return str_extra_index;
+}
+
fn zirDeclRef(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
const pt = sema.pt;
const mod = pt.zcu;
@@ -8354,13 +8358,6 @@ fn instantiateGenericCall(
}
} else {
// The parameter is runtime-known.
- child_sema.inst_map.putAssumeCapacityNoClobber(param_inst, try child_block.addInst(.{
- .tag = .arg,
- .data = .{ .arg = .{
- .ty = Air.internedToRef(arg_ty.toIntern()),
- .src_index = @intCast(arg_index),
- } },
- }));
const param_name: Zir.NullTerminatedString = switch (param_tag) {
.param_anytype => fn_zir.instructions.items(.data)[@intFromEnum(param_inst)].str_tok.start,
.param => name: {
@@ -8370,6 +8367,16 @@ fn instantiateGenericCall(
},
else => unreachable,
};
+ child_sema.inst_map.putAssumeCapacityNoClobber(param_inst, try child_block.addInst(.{
+ .tag = .arg,
+ .data = .{ .arg = .{
+ .ty = Air.internedToRef(arg_ty.toIntern()),
+ .name = if (child_block.ownerModule().strip)
+ .none
+ else
+ @enumFromInt(try sema.appendAirString(fn_zir.nullTerminatedString(param_name))),
+ } },
+ }));
try child_block.params.append(sema.arena, .{
.ty = arg_ty.toIntern(), // This is the type after coercion
.is_comptime = false, // We're adding only runtime args to the instantiation