Skip to content

Commit 66c0110

Browse files
committed
sema: instead of saving the init bodies ranges in the InternPool, rebuild them at analysis time
1 parent 5382d5b commit 66c0110

File tree

4 files changed

+188
-174
lines changed

4 files changed

+188
-174
lines changed

src/InternPool.zig

Lines changed: 3 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,6 @@ pub const Key = union(enum) {
370370
layout: std.builtin.Type.ContainerLayout,
371371
field_names: NullTerminatedString.Slice,
372372
field_types: Index.Slice,
373-
field_inits_bodies: InitBody.Slice,
374373
field_inits: Index.Slice,
375374
field_aligns: Alignment.Slice,
376375
runtime_order: RuntimeOrder.Slice,
@@ -401,23 +400,6 @@ pub const Key = union(enum) {
401400
}
402401
};
403402

404-
pub const InitBody = struct {
405-
start: Zir.Inst.Index,
406-
len: u32,
407-
408-
pub const Slice = struct {
409-
start: u32,
410-
len: u32,
411-
412-
pub fn get(this: @This(), ip: *const InternPool) []InitBody {
413-
// Workaround for not being able to cast between slices of different lengths
414-
assert(ip.extra.items.len >= this.start + this.len * 2);
415-
const bodies_ptr: [*]InitBody = @ptrCast(ip.extra.items[this.start..].ptr);
416-
return bodies_ptr[0..this.len];
417-
}
418-
};
419-
};
420-
421403
pub const Offsets = struct {
422404
start: u32,
423405
len: u32,
@@ -3050,10 +3032,7 @@ pub const Tag = enum(u8) {
30503032
/// Trailing:
30513033
/// 0. type: Index for each fields_len
30523034
/// 1. name: NullTerminatedString for each fields_len
3053-
///
3054-
/// if tag is type_struct_packed_inits:
3055-
/// 2. body_indices: Zir.Inst.Index // for each field in declared order, a pair of start index and length.
3056-
/// 3. init: Index for each fields_len
3035+
/// 2. init: Index for each fields_len // if tag is type_struct_packed_inits
30573036
pub const TypeStructPacked = struct {
30583037
decl: Module.Decl.Index,
30593038
zir_index: Zir.Inst.Index,
@@ -3091,7 +3070,6 @@ pub const Tag = enum(u8) {
30913070
/// names_map: MapIndex,
30923071
/// name: NullTerminatedString // for each field in declared order
30933072
/// 2. if any_default_inits:
3094-
/// body_indices: Zir.Inst.Index // for each field in declared order, a pair of start index and length.
30953073
/// init: Index // for each field in declared order
30963074
/// 3. if has_namespace:
30973075
/// namespace: Module.Namespace.Index
@@ -3772,7 +3750,6 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key {
37723750
.layout = .Auto,
37733751
.field_names = .{ .start = 0, .len = 0 },
37743752
.field_types = .{ .start = 0, .len = 0 },
3775-
.field_inits_bodies = .{ .start = 0, .len = 0 },
37763753
.field_inits = .{ .start = 0, .len = 0 },
37773754
.field_aligns = .{ .start = 0, .len = 0 },
37783755
.runtime_order = .{ .start = 0, .len = 0 },
@@ -3789,7 +3766,6 @@ pub fn indexToKey(ip: *const InternPool, index: Index) Key {
37893766
.layout = .Auto,
37903767
.field_names = .{ .start = 0, .len = 0 },
37913768
.field_types = .{ .start = 0, .len = 0 },
3792-
.field_inits_bodies = .{ .start = 0, .len = 0 },
37933769
.field_inits = .{ .start = 0, .len = 0 },
37943770
.field_aligns = .{ .start = 0, .len = 0 },
37953771
.runtime_order = .{ .start = 0, .len = 0 },
@@ -4302,12 +4278,6 @@ fn extraStructType(ip: *const InternPool, extra_index: u32) Key.StructType {
43024278
index += fields_len;
43034279
break :t .{ names_map.toOptional(), names };
43044280
};
4305-
const field_inits_bodies: Key.StructType.InitBody.Slice = t: {
4306-
if (!s.data.flags.any_default_inits) break :t .{ .start = 0, .len = 0 };
4307-
const offsets: Key.StructType.InitBody.Slice = .{ .start = index, .len = fields_len };
4308-
index += fields_len * 2;
4309-
break :t offsets;
4310-
};
43114281
const field_inits: Index.Slice = t: {
43124282
if (!s.data.flags.any_default_inits) break :t .{ .start = 0, .len = 0 };
43134283
const inits: Index.Slice = .{ .start = index, .len = fields_len };
@@ -4351,7 +4321,6 @@ fn extraStructType(ip: *const InternPool, extra_index: u32) Key.StructType {
43514321
.field_types = field_types,
43524322
.names_map = names_map,
43534323
.field_names = field_names,
4354-
.field_inits_bodies = field_inits_bodies,
43554324
.field_inits = field_inits,
43564325
.namespace = namespace,
43574326
.field_aligns = field_aligns,
@@ -4378,15 +4347,8 @@ fn extraPackedStructType(ip: *const InternPool, extra_index: u32, inits: bool) K
43784347
.start = type_struct_packed.end + fields_len,
43794348
.len = fields_len,
43804349
},
4381-
.field_inits_bodies = if (inits) .{
4382-
.start = type_struct_packed.end + fields_len * 2,
4383-
.len = fields_len,
4384-
} else .{
4385-
.start = 0,
4386-
.len = 0,
4387-
},
43884350
.field_inits = if (inits) .{
4389-
.start = type_struct_packed.end + fields_len * 4,
4351+
.start = type_struct_packed.end + fields_len * 2,
43904352
.len = fields_len,
43914353
} else .{
43924354
.start = 0,
@@ -5459,7 +5421,6 @@ pub fn getStructType(
54595421
.layout = undefined,
54605422
.field_names = undefined,
54615423
.field_types = undefined,
5462-
.field_inits_bodies = undefined,
54635424
.field_inits = undefined,
54645425
.field_aligns = undefined,
54655426
.runtime_order = undefined,
@@ -5482,7 +5443,6 @@ pub fn getStructType(
54825443
try ip.extra.ensureUnusedCapacity(gpa, @typeInfo(Tag.TypeStructPacked).Struct.fields.len +
54835444
ini.fields_len + // types
54845445
ini.fields_len + // names
5485-
ini.fields_len * 2 + // init bodies
54865446
ini.fields_len); // inits
54875447
try ip.items.append(gpa, .{
54885448
.tag = if (ini.any_default_inits) .type_struct_packed_inits else .type_struct_packed,
@@ -5502,7 +5462,6 @@ pub fn getStructType(
55025462
ip.extra.appendNTimesAssumeCapacity(@intFromEnum(Index.none), ini.fields_len);
55035463
ip.extra.appendNTimesAssumeCapacity(@intFromEnum(OptionalNullTerminatedString.none), ini.fields_len);
55045464
if (ini.any_default_inits) {
5505-
ip.extra.appendNTimesAssumeCapacity(0, ini.fields_len * 2);
55065465
ip.extra.appendNTimesAssumeCapacity(@intFromEnum(Index.none), ini.fields_len);
55075466
}
55085467
return @enumFromInt(ip.items.len - 1);
@@ -5514,7 +5473,7 @@ pub fn getStructType(
55145473
const comptime_elements_len = if (ini.any_comptime_fields) (ini.fields_len + 31) / 32 else 0;
55155474

55165475
try ip.extra.ensureUnusedCapacity(gpa, @typeInfo(Tag.TypeStruct).Struct.fields.len +
5517-
(ini.fields_len * 7) + // types, names, init bodies, inits, runtime order, offsets
5476+
(ini.fields_len * 5) + // types, names, inits, runtime order, offsets
55185477
align_elements_len + comptime_elements_len +
55195478
2); // names_map + namespace
55205479
try ip.items.append(gpa, .{
@@ -5552,7 +5511,6 @@ pub fn getStructType(
55525511
ip.extra.appendNTimesAssumeCapacity(@intFromEnum(OptionalNullTerminatedString.none), ini.fields_len);
55535512
}
55545513
if (ini.any_default_inits) {
5555-
ip.extra.appendNTimesAssumeCapacity(0, ini.fields_len * 2);
55565514
ip.extra.appendNTimesAssumeCapacity(@intFromEnum(Index.none), ini.fields_len);
55575515
}
55585516
if (ini.namespace.unwrap()) |namespace| {

0 commit comments

Comments
 (0)