diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/AstGen.zig | 44 | ||||
| -rw-r--r-- | src/Autodoc.zig | 57 | ||||
| -rw-r--r-- | src/Sema.zig | 37 | ||||
| -rw-r--r-- | src/Zir.zig | 100 | ||||
| -rw-r--r-- | src/print_zir.zig | 51 |
5 files changed, 111 insertions, 178 deletions
diff --git a/src/AstGen.zig b/src/AstGen.zig index 4b9efa0408..bb2cab5c70 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -12918,20 +12918,20 @@ const GenZir = struct { const astgen = gz.astgen; const gpa = astgen.gpa; + // Node 0 is valid for the root `struct_decl` of a file! + assert(args.src_node != 0 or gz.parent.tag == .top); + const fields_hash_arr: [4]u32 = @bitCast(args.fields_hash); - try astgen.extra.ensureUnusedCapacity(gpa, @typeInfo(Zir.Inst.StructDecl).Struct.fields.len + 6); + try astgen.extra.ensureUnusedCapacity(gpa, @typeInfo(Zir.Inst.StructDecl).Struct.fields.len + 4); const payload_index = astgen.addExtraAssumeCapacity(Zir.Inst.StructDecl{ .fields_hash_0 = fields_hash_arr[0], .fields_hash_1 = fields_hash_arr[1], .fields_hash_2 = fields_hash_arr[2], .fields_hash_3 = fields_hash_arr[3], + .src_node = gz.nodeIndexToRelative(args.src_node), }); - if (args.src_node != 0) { - const node_offset = gz.nodeIndexToRelative(args.src_node); - astgen.extra.appendAssumeCapacity(@bitCast(node_offset)); - } if (args.fields_len != 0) { astgen.extra.appendAssumeCapacity(args.fields_len); } @@ -12949,7 +12949,6 @@ const GenZir = struct { .data = .{ .extended = .{ .opcode = .struct_decl, .small = @bitCast(Zir.Inst.StructDecl.Small{ - .has_src_node = args.src_node != 0, .has_fields_len = args.fields_len != 0, .has_decls_len = args.decls_len != 0, .has_backing_int = args.backing_int_ref != .none, @@ -12981,20 +12980,19 @@ const GenZir = struct { const astgen = gz.astgen; const gpa = astgen.gpa; + assert(args.src_node != 0); + const fields_hash_arr: [4]u32 = @bitCast(args.fields_hash); - try astgen.extra.ensureUnusedCapacity(gpa, @typeInfo(Zir.Inst.UnionDecl).Struct.fields.len + 5); + try astgen.extra.ensureUnusedCapacity(gpa, @typeInfo(Zir.Inst.UnionDecl).Struct.fields.len + 4); const payload_index = astgen.addExtraAssumeCapacity(Zir.Inst.UnionDecl{ .fields_hash_0 = fields_hash_arr[0], .fields_hash_1 = fields_hash_arr[1], .fields_hash_2 = fields_hash_arr[2], .fields_hash_3 = fields_hash_arr[3], + .src_node = gz.nodeIndexToRelative(args.src_node), }); - if (args.src_node != 0) { - const node_offset = gz.nodeIndexToRelative(args.src_node); - astgen.extra.appendAssumeCapacity(@bitCast(node_offset)); - } if (args.tag_type != .none) { astgen.extra.appendAssumeCapacity(@intFromEnum(args.tag_type)); } @@ -13012,7 +13010,6 @@ const GenZir = struct { .data = .{ .extended = .{ .opcode = .union_decl, .small = @bitCast(Zir.Inst.UnionDecl.Small{ - .has_src_node = args.src_node != 0, .has_tag_type = args.tag_type != .none, .has_body_len = args.body_len != 0, .has_fields_len = args.fields_len != 0, @@ -13039,20 +13036,19 @@ const GenZir = struct { const astgen = gz.astgen; const gpa = astgen.gpa; + assert(args.src_node != 0); + const fields_hash_arr: [4]u32 = @bitCast(args.fields_hash); - try astgen.extra.ensureUnusedCapacity(gpa, @typeInfo(Zir.Inst.EnumDecl).Struct.fields.len + 5); + try astgen.extra.ensureUnusedCapacity(gpa, @typeInfo(Zir.Inst.EnumDecl).Struct.fields.len + 4); const payload_index = astgen.addExtraAssumeCapacity(Zir.Inst.EnumDecl{ .fields_hash_0 = fields_hash_arr[0], .fields_hash_1 = fields_hash_arr[1], .fields_hash_2 = fields_hash_arr[2], .fields_hash_3 = fields_hash_arr[3], + .src_node = gz.nodeIndexToRelative(args.src_node), }); - if (args.src_node != 0) { - const node_offset = gz.nodeIndexToRelative(args.src_node); - astgen.extra.appendAssumeCapacity(@bitCast(node_offset)); - } if (args.tag_type != .none) { astgen.extra.appendAssumeCapacity(@intFromEnum(args.tag_type)); } @@ -13070,7 +13066,6 @@ const GenZir = struct { .data = .{ .extended = .{ .opcode = .enum_decl, .small = @bitCast(Zir.Inst.EnumDecl.Small{ - .has_src_node = args.src_node != 0, .has_tag_type = args.tag_type != .none, .has_body_len = args.body_len != 0, .has_fields_len = args.fields_len != 0, @@ -13090,13 +13085,13 @@ const GenZir = struct { const astgen = gz.astgen; const gpa = astgen.gpa; - try astgen.extra.ensureUnusedCapacity(gpa, 2); - const payload_index: u32 = @intCast(astgen.extra.items.len); + assert(args.src_node != 0); + + try astgen.extra.ensureUnusedCapacity(gpa, @typeInfo(Zir.Inst.OpaqueDecl).Struct.fields.len + 1); + const payload_index = astgen.addExtraAssumeCapacity(Zir.Inst.OpaqueDecl{ + .src_node = gz.nodeIndexToRelative(args.src_node), + }); - if (args.src_node != 0) { - const node_offset = gz.nodeIndexToRelative(args.src_node); - astgen.extra.appendAssumeCapacity(@bitCast(node_offset)); - } if (args.decls_len != 0) { astgen.extra.appendAssumeCapacity(args.decls_len); } @@ -13105,7 +13100,6 @@ const GenZir = struct { .data = .{ .extended = .{ .opcode = .opaque_decl, .small = @bitCast(Zir.Inst.OpaqueDecl.Small{ - .has_src_node = args.src_node != 0, .has_decls_len = args.decls_len != 0, .name_strategy = gz.anon_name_strategy, }), diff --git a/src/Autodoc.zig b/src/Autodoc.zig index 6822d3a048..6ede3637f8 100644 --- a/src/Autodoc.zig +++ b/src/Autodoc.zig @@ -3395,19 +3395,10 @@ fn walkInstruction( .enclosing_type = type_slot_index, }; - const small = @as(Zir.Inst.OpaqueDecl.Small, @bitCast(extended.small)); - var extra_index: usize = extended.operand; - - const src_node: ?i32 = if (small.has_src_node) blk: { - const src_node = @as(i32, @bitCast(file.zir.extra[extra_index])); - extra_index += 1; - break :blk src_node; - } else null; + const extra = file.zir.extraData(Zir.Inst.OpaqueDecl, extended.operand); + var extra_index: usize = extra.end; - const src_info = if (src_node) |sn| - try self.srcLocInfo(file, sn, parent_src) - else - parent_src; + const src_info = try self.srcLocInfo(file, extra.data.src_node, parent_src); var decl_indexes: std.ArrayListUnmanaged(usize) = .{}; var priv_decl_indexes: std.ArrayListUnmanaged(usize) = .{}; @@ -3498,18 +3489,10 @@ fn walkInstruction( }; const small = @as(Zir.Inst.UnionDecl.Small, @bitCast(extended.small)); - var extra_index: usize = extended.operand + @typeInfo(Zir.Inst.UnionDecl).Struct.fields.len; - - const src_node: ?i32 = if (small.has_src_node) blk: { - const src_node = @as(i32, @bitCast(file.zir.extra[extra_index])); - extra_index += 1; - break :blk src_node; - } else null; + const extra = file.zir.extraData(Zir.Inst.UnionDecl, extended.operand); + var extra_index: usize = extra.end; - const src_info = if (src_node) |sn| - try self.srcLocInfo(file, sn, parent_src) - else - parent_src; + const src_info = try self.srcLocInfo(file, extra.data.src_node, parent_src); // We delay analysis because union tags can refer to // decls defined inside the union itself. @@ -3628,18 +3611,10 @@ fn walkInstruction( }; const small = @as(Zir.Inst.EnumDecl.Small, @bitCast(extended.small)); - var extra_index: usize = extended.operand + @typeInfo(Zir.Inst.EnumDecl).Struct.fields.len; - - const src_node: ?i32 = if (small.has_src_node) blk: { - const src_node = @as(i32, @bitCast(file.zir.extra[extra_index])); - extra_index += 1; - break :blk src_node; - } else null; + const extra = file.zir.extraData(Zir.Inst.EnumDecl, extended.operand); + var extra_index: usize = extra.end; - const src_info = if (src_node) |sn| - try self.srcLocInfo(file, sn, parent_src) - else - parent_src; + const src_info = try self.srcLocInfo(file, extra.data.src_node, parent_src); const tag_type: ?DocData.Expr = if (small.has_tag_type) blk: { const tag_type = file.zir.extra[extra_index]; @@ -3779,18 +3754,10 @@ fn walkInstruction( }; const small = @as(Zir.Inst.StructDecl.Small, @bitCast(extended.small)); - var extra_index: usize = extended.operand + @typeInfo(Zir.Inst.StructDecl).Struct.fields.len; - - const src_node: ?i32 = if (small.has_src_node) blk: { - const src_node = @as(i32, @bitCast(file.zir.extra[extra_index])); - extra_index += 1; - break :blk src_node; - } else null; + const extra = file.zir.extraData(Zir.Inst.StructDecl, extended.operand); + var extra_index: usize = extra.end; - const src_info = if (src_node) |sn| - try self.srcLocInfo(file, sn, parent_src) - else - parent_src; + const src_info = try self.srcLocInfo(file, extra.data.src_node, parent_src); const fields_len = if (small.has_fields_len) blk: { const fields_len = file.zir.extra[extra_index]; diff --git a/src/Sema.zig b/src/Sema.zig index 3465f923a8..45f0edcb56 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -2725,7 +2725,6 @@ pub fn getStructType( const small: Zir.Inst.StructDecl.Small = @bitCast(extended.small); var extra_index: usize = extended.operand + @typeInfo(Zir.Inst.StructDecl).Struct.fields.len; - extra_index += @intFromBool(small.has_src_node); const fields_len = if (small.has_fields_len) blk: { const fields_len = sema.code.extra[extra_index]; extra_index += 1; @@ -2778,10 +2777,7 @@ fn zirStructDecl( const mod = sema.mod; const ip = &mod.intern_pool; const small: Zir.Inst.StructDecl.Small = @bitCast(extended.small); - const src: LazySrcLoc = if (small.has_src_node) blk: { - const node_offset: i32 = @bitCast(sema.code.extra[extended.operand + @typeInfo(Zir.Inst.StructDecl).Struct.fields.len]); - break :blk LazySrcLoc.nodeOffset(node_offset); - } else unreachable; // MLUGG TODO + const src = sema.code.extraData(Zir.Inst.StructDecl, extended.operand).data.src(); // Because these three things each reference each other, `undefined` // placeholders are used before being set after the struct type gains an @@ -2941,13 +2937,10 @@ fn zirEnumDecl( const mod = sema.mod; const gpa = sema.gpa; const small: Zir.Inst.EnumDecl.Small = @bitCast(extended.small); - var extra_index: usize = extended.operand + @typeInfo(Zir.Inst.EnumDecl).Struct.fields.len; + const extra = sema.code.extraData(Zir.Inst.EnumDecl, extended.operand); + var extra_index: usize = extra.end; - const src: LazySrcLoc = if (small.has_src_node) blk: { - const node_offset: i32 = @bitCast(sema.code.extra[extra_index]); - extra_index += 1; - break :blk LazySrcLoc.nodeOffset(node_offset); - } else unreachable; // MLUGG TODO + const src = extra.data.src(); const tag_ty_src: LazySrcLoc = .{ .node_offset_container_tag = src.node_offset.x }; const tag_type_ref = if (small.has_tag_type) blk: { @@ -3214,13 +3207,10 @@ fn zirUnionDecl( const mod = sema.mod; const gpa = sema.gpa; const small: Zir.Inst.UnionDecl.Small = @bitCast(extended.small); - var extra_index: usize = extended.operand + @typeInfo(Zir.Inst.UnionDecl).Struct.fields.len; + const extra = sema.code.extraData(Zir.Inst.UnionDecl, extended.operand); + var extra_index: usize = extra.end; - const src: LazySrcLoc = if (small.has_src_node) blk: { - const node_offset: i32 = @bitCast(sema.code.extra[extra_index]); - extra_index += 1; - break :blk LazySrcLoc.nodeOffset(node_offset); - } else unreachable; // MLUGG TODO + const src = extra.data.src(); extra_index += @intFromBool(small.has_tag_type); extra_index += @intFromBool(small.has_body_len); @@ -3323,13 +3313,10 @@ fn zirOpaqueDecl( const mod = sema.mod; const small: Zir.Inst.OpaqueDecl.Small = @bitCast(extended.small); - var extra_index: usize = extended.operand; + const extra = sema.code.extraData(Zir.Inst.OpaqueDecl, extended.operand); + var extra_index: usize = extra.end; - const src: LazySrcLoc = if (small.has_src_node) blk: { - const node_offset: i32 = @bitCast(sema.code.extra[extra_index]); - extra_index += 1; - break :blk LazySrcLoc.nodeOffset(node_offset); - } else unreachable; // MLUGG TODO + const src = extra.data.src(); const decls_len = if (small.has_decls_len) blk: { const decls_len = sema.code.extra[extra_index]; @@ -35662,7 +35649,6 @@ fn semaBackingIntType(mod: *Module, struct_type: InternPool.Key.StructType) Comp if (small.has_backing_int) { var extra_index: usize = extended.operand + @typeInfo(Zir.Inst.StructDecl).Struct.fields.len; - extra_index += @intFromBool(small.has_src_node); extra_index += @intFromBool(small.has_fields_len); extra_index += @intFromBool(small.has_decls_len); @@ -36374,8 +36360,6 @@ fn structZirInfo(zir: Zir, zir_index: Zir.Inst.Index) struct { const small: Zir.Inst.StructDecl.Small = @bitCast(extended.small); var extra_index: usize = extended.operand + @typeInfo(Zir.Inst.StructDecl).Struct.fields.len; - extra_index += @intFromBool(small.has_src_node); - const fields_len = if (small.has_fields_len) blk: { const fields_len = zir.extra[extra_index]; extra_index += 1; @@ -36843,7 +36827,6 @@ fn semaUnionFields(mod: *Module, arena: Allocator, union_type: InternPool.Key.Un var extra_index: usize = extended.operand + @typeInfo(Zir.Inst.UnionDecl).Struct.fields.len; const src = LazySrcLoc.nodeOffset(0); - extra_index += @intFromBool(small.has_src_node); const tag_type_ref: Zir.Inst.Ref = if (small.has_tag_type) blk: { const ty_ref: Zir.Inst.Ref = @enumFromInt(zir.extra[extra_index]); diff --git a/src/Zir.zig b/src/Zir.zig index c76c1f2f62..61d1301167 100644 --- a/src/Zir.zig +++ b/src/Zir.zig @@ -3022,20 +3022,19 @@ pub const Inst = struct { }; /// Trailing: - /// 0. src_node: i32, // if has_src_node - /// 1. fields_len: u32, // if has_fields_len - /// 2. decls_len: u32, // if has_decls_len - /// 3. backing_int_body_len: u32, // if has_backing_int - /// 4. backing_int_ref: Ref, // if has_backing_int and backing_int_body_len is 0 - /// 5. backing_int_body_inst: Inst, // if has_backing_int and backing_int_body_len is > 0 - /// 6. decl: Index, // for every decls_len; points to a `declaration` instruction - /// 7. flags: u32 // for every 8 fields + /// 0. fields_len: u32, // if has_fields_len + /// 1. decls_len: u32, // if has_decls_len + /// 2. backing_int_body_len: u32, // if has_backing_int + /// 3. backing_int_ref: Ref, // if has_backing_int and backing_int_body_len is 0 + /// 4. backing_int_body_inst: Inst, // if has_backing_int and backing_int_body_len is > 0 + /// 5. decl: Index, // for every decls_len; points to a `declaration` instruction + /// 6. flags: u32 // for every 8 fields /// - sets of 4 bits: /// 0b000X: whether corresponding field has an align expression /// 0b00X0: whether corresponding field has a default expression /// 0b0X00: whether corresponding field is comptime /// 0bX000: whether corresponding field has a type expression - /// 8. fields: { // for every fields_len + /// 7. fields: { // for every fields_len /// field_name: u32, // if !is_tuple /// doc_comment: NullTerminatedString, // .empty if no doc comment /// field_type: Ref, // if corresponding bit is not set. none means anytype. @@ -3043,7 +3042,7 @@ pub const Inst = struct { /// align_body_len: u32, // if corresponding bit is set /// init_body_len: u32, // if corresponding bit is set /// } - /// 10. bodies: { // for every fields_len + /// 8. bodies: { // for every fields_len /// field_type_body_inst: Inst, // for each field_type_body_len /// align_body_inst: Inst, // for each align_body_len /// init_body_inst: Inst, // for each init_body_len @@ -3055,8 +3054,13 @@ pub const Inst = struct { fields_hash_1: u32, fields_hash_2: u32, fields_hash_3: u32, + src_node: i32, + + pub fn src(self: StructDecl) LazySrcLoc { + return LazySrcLoc.nodeOffset(self.src_node); + } + pub const Small = packed struct { - has_src_node: bool, has_fields_len: bool, has_decls_len: bool, has_backing_int: bool, @@ -3068,7 +3072,7 @@ pub const Inst = struct { any_default_inits: bool, any_comptime_fields: bool, any_aligned_fields: bool, - _: u2 = undefined, + _: u3 = undefined, }; }; @@ -3102,16 +3106,15 @@ pub const Inst = struct { }; /// Trailing: - /// 0. src_node: i32, // if has_src_node - /// 1. tag_type: Ref, // if has_tag_type - /// 2. body_len: u32, // if has_body_len - /// 3. fields_len: u32, // if has_fields_len - /// 4. decls_len: u32, // if has_decls_len - /// 5. decl: Index, // for every decls_len; points to a `declaration` instruction - /// 6. inst: Index // for every body_len - /// 7. has_bits: u32 // for every 32 fields + /// 0. tag_type: Ref, // if has_tag_type + /// 1. body_len: u32, // if has_body_len + /// 2. fields_len: u32, // if has_fields_len + /// 3. decls_len: u32, // if has_decls_len + /// 4. decl: Index, // for every decls_len; points to a `declaration` instruction + /// 5. inst: Index // for every body_len + /// 6. has_bits: u32 // for every 32 fields /// - the bit is whether corresponding field has an value expression - /// 8. fields: { // for every fields_len + /// 7. fields: { // for every fields_len /// field_name: u32, /// doc_comment: u32, // .empty if no doc_comment /// value: Ref, // if corresponding bit is set @@ -3123,33 +3126,37 @@ pub const Inst = struct { fields_hash_1: u32, fields_hash_2: u32, fields_hash_3: u32, + src_node: i32, + + pub fn src(self: EnumDecl) LazySrcLoc { + return LazySrcLoc.nodeOffset(self.src_node); + } + pub const Small = packed struct { - has_src_node: bool, has_tag_type: bool, has_body_len: bool, has_fields_len: bool, has_decls_len: bool, name_strategy: NameStrategy, nonexhaustive: bool, - _: u8 = undefined, + _: u9 = undefined, }; }; /// Trailing: - /// 0. src_node: i32, // if has_src_node - /// 1. tag_type: Ref, // if has_tag_type - /// 2. body_len: u32, // if has_body_len - /// 3. fields_len: u32, // if has_fields_len - /// 4. decls_len: u32, // if has_decls_len - /// 5. decl: Index, // for every decls_len; points to a `declaration` instruction - /// 6. inst: Index // for every body_len - /// 7. has_bits: u32 // for every 8 fields + /// 0. tag_type: Ref, // if has_tag_type + /// 1. body_len: u32, // if has_body_len + /// 2. fields_len: u32, // if has_fields_len + /// 3. decls_len: u32, // if has_decls_len + /// 4. decl: Index, // for every decls_len; points to a `declaration` instruction + /// 5. inst: Index // for every body_len + /// 6. has_bits: u32 // for every 8 fields /// - sets of 4 bits: /// 0b000X: whether corresponding field has a type expression /// 0b00X0: whether corresponding field has a align expression /// 0b0X00: whether corresponding field has a tag value expression /// 0bX000: unused - /// 8. fields: { // for every fields_len + /// 7. fields: { // for every fields_len /// field_name: NullTerminatedString, // null terminated string index /// doc_comment: NullTerminatedString, // .empty if no doc comment /// field_type: Ref, // if corresponding bit is set @@ -3164,8 +3171,13 @@ pub const Inst = struct { fields_hash_1: u32, fields_hash_2: u32, fields_hash_3: u32, + src_node: i32, + + pub fn src(self: UnionDecl) LazySrcLoc { + return LazySrcLoc.nodeOffset(self.src_node); + } + pub const Small = packed struct { - has_src_node: bool, has_tag_type: bool, has_body_len: bool, has_fields_len: bool, @@ -3180,20 +3192,24 @@ pub const Inst = struct { /// true | false | union(T) { } auto_enum_tag: bool, any_aligned_fields: bool, - _: u5 = undefined, + _: u6 = undefined, }; }; /// Trailing: - /// 0. src_node: i32, // if has_src_node - /// 1. decls_len: u32, // if has_decls_len - /// 2. decl: Index, // for every decls_len; points to a `declaration` instruction + /// 0. decls_len: u32, // if has_decls_len + /// 1. decl: Index, // for every decls_len; points to a `declaration` instruction pub const OpaqueDecl = struct { + src_node: i32, + + pub fn src(self: OpaqueDecl) LazySrcLoc { + return LazySrcLoc.nodeOffset(self.src_node); + } + pub const Small = packed struct { - has_src_node: bool, has_decls_len: bool, name_strategy: NameStrategy, - _: u12 = undefined, + _: u13 = undefined, }; }; @@ -3495,7 +3511,6 @@ pub fn declIterator(zir: Zir, decl_inst: Zir.Inst.Index) DeclIterator { .struct_decl => { const small: Inst.StructDecl.Small = @bitCast(extended.small); var extra_index: u32 = @intCast(extended.operand + @typeInfo(Inst.StructDecl).Struct.fields.len); - extra_index += @intFromBool(small.has_src_node); extra_index += @intFromBool(small.has_fields_len); const decls_len = if (small.has_decls_len) decls_len: { const decls_len = zir.extra[extra_index]; @@ -3522,7 +3537,6 @@ pub fn declIterator(zir: Zir, decl_inst: Zir.Inst.Index) DeclIterator { .enum_decl => { const small: Inst.EnumDecl.Small = @bitCast(extended.small); var extra_index: u32 = @intCast(extended.operand + @typeInfo(Inst.EnumDecl).Struct.fields.len); - extra_index += @intFromBool(small.has_src_node); extra_index += @intFromBool(small.has_tag_type); extra_index += @intFromBool(small.has_body_len); extra_index += @intFromBool(small.has_fields_len); @@ -3541,7 +3555,6 @@ pub fn declIterator(zir: Zir, decl_inst: Zir.Inst.Index) DeclIterator { .union_decl => { const small: Inst.UnionDecl.Small = @bitCast(extended.small); var extra_index: u32 = @intCast(extended.operand + @typeInfo(Inst.UnionDecl).Struct.fields.len); - extra_index += @intFromBool(small.has_src_node); extra_index += @intFromBool(small.has_tag_type); extra_index += @intFromBool(small.has_body_len); extra_index += @intFromBool(small.has_fields_len); @@ -3559,8 +3572,7 @@ pub fn declIterator(zir: Zir, decl_inst: Zir.Inst.Index) DeclIterator { }, .opaque_decl => { const small: Inst.OpaqueDecl.Small = @bitCast(extended.small); - var extra_index: u32 = extended.operand; - extra_index += @intFromBool(small.has_src_node); + var extra_index: u32 = @intCast(extended.operand + @typeInfo(Inst.OpaqueDecl).Struct.fields.len); const decls_len = if (small.has_decls_len) decls_len: { const decls_len = zir.extra[extra_index]; extra_index += 1; diff --git a/src/print_zir.zig b/src/print_zir.zig index 8e5fbc1788..226b09a5c4 100644 --- a/src/print_zir.zig +++ b/src/print_zir.zig @@ -1405,12 +1405,6 @@ const Writer = struct { var extra_index: usize = extra.end; - const src_node: ?i32 = if (small.has_src_node) blk: { - const src_node = @as(i32, @bitCast(self.code.extra[extra_index])); - extra_index += 1; - break :blk src_node; - } else null; - const fields_len = if (small.has_fields_len) blk: { const fields_len = self.code.extra[extra_index]; extra_index += 1; @@ -1453,7 +1447,7 @@ const Writer = struct { try stream.writeAll("{}, "); } else { const prev_parent_decl_node = self.parent_decl_node; - if (src_node) |off| self.parent_decl_node = self.relativeToNodeIndex(off); + self.parent_decl_node = self.relativeToNodeIndex(extra.data.src_node); defer self.parent_decl_node = prev_parent_decl_node; try stream.writeAll("{\n"); @@ -1534,7 +1528,7 @@ const Writer = struct { } const prev_parent_decl_node = self.parent_decl_node; - if (src_node) |off| self.parent_decl_node = self.relativeToNodeIndex(off); + self.parent_decl_node = self.relativeToNodeIndex(extra.data.src_node); try stream.writeAll("{\n"); self.indent += 2; @@ -1587,7 +1581,7 @@ const Writer = struct { try stream.writeByteNTimes(' ', self.indent); try stream.writeAll("})"); } - try self.writeSrcNode(stream, src_node); + try self.writeSrcNode(stream, extra.data.src_node); } fn writeUnionDecl(self: *Writer, stream: anytype, extended: Zir.Inst.Extended.InstData) !void { @@ -1605,12 +1599,6 @@ const Writer = struct { var extra_index: usize = extra.end; - const src_node: ?i32 = if (small.has_src_node) blk: { - const src_node = @as(i32, @bitCast(self.code.extra[extra_index])); - extra_index += 1; - break :blk src_node; - } else null; - const tag_type_ref = if (small.has_tag_type) blk: { const tag_type_ref = @as(Zir.Inst.Ref, @enumFromInt(self.code.extra[extra_index])); extra_index += 1; @@ -1644,7 +1632,7 @@ const Writer = struct { try stream.writeAll("{}"); } else { const prev_parent_decl_node = self.parent_decl_node; - if (src_node) |off| self.parent_decl_node = self.relativeToNodeIndex(off); + self.parent_decl_node = self.relativeToNodeIndex(extra.data.src_node); defer self.parent_decl_node = prev_parent_decl_node; try stream.writeAll("{\n"); @@ -1663,7 +1651,7 @@ const Writer = struct { if (fields_len == 0) { try stream.writeAll("})"); - try self.writeSrcNode(stream, src_node); + try self.writeSrcNode(stream, extra.data.src_node); return; } try stream.writeAll(", "); @@ -1672,7 +1660,7 @@ const Writer = struct { extra_index += body.len; const prev_parent_decl_node = self.parent_decl_node; - if (src_node) |off| self.parent_decl_node = self.relativeToNodeIndex(off); + self.parent_decl_node = self.relativeToNodeIndex(extra.data.src_node); try self.writeBracedDecl(stream, body); try stream.writeAll(", {\n"); @@ -1740,7 +1728,7 @@ const Writer = struct { self.indent -= 2; try stream.writeByteNTimes(' ', self.indent); try stream.writeAll("})"); - try self.writeSrcNode(stream, src_node); + try self.writeSrcNode(stream, extra.data.src_node); } fn writeEnumDecl(self: *Writer, stream: anytype, extended: Zir.Inst.Extended.InstData) !void { @@ -1758,12 +1746,6 @@ const Writer = struct { var extra_index: usize = extra.end; - const src_node: ?i32 = if (small.has_src_node) blk: { - const src_node = @as(i32, @bitCast(self.code.extra[extra_index])); - extra_index += 1; - break :blk src_node; - } else null; - const tag_type_ref = if (small.has_tag_type) blk: { const tag_type_ref = @as(Zir.Inst.Ref, @enumFromInt(self.code.extra[extra_index])); extra_index += 1; @@ -1795,7 +1777,7 @@ const Writer = struct { try stream.writeAll("{}, "); } else { const prev_parent_decl_node = self.parent_decl_node; - if (src_node) |off| self.parent_decl_node = self.relativeToNodeIndex(off); + self.parent_decl_node = self.relativeToNodeIndex(extra.data.src_node); defer self.parent_decl_node = prev_parent_decl_node; try stream.writeAll("{\n"); @@ -1816,7 +1798,7 @@ const Writer = struct { extra_index += body.len; const prev_parent_decl_node = self.parent_decl_node; - if (src_node) |off| self.parent_decl_node = self.relativeToNodeIndex(off); + self.parent_decl_node = self.relativeToNodeIndex(extra.data.src_node); try self.writeBracedDecl(stream, body); if (fields_len == 0) { try stream.writeAll(", {})"); @@ -1864,7 +1846,7 @@ const Writer = struct { try stream.writeByteNTimes(' ', self.indent); try stream.writeAll("})"); } - try self.writeSrcNode(stream, src_node); + try self.writeSrcNode(stream, extra.data.src_node); } fn writeOpaqueDecl( @@ -1873,13 +1855,8 @@ const Writer = struct { extended: Zir.Inst.Extended.InstData, ) !void { const small = @as(Zir.Inst.OpaqueDecl.Small, @bitCast(extended.small)); - var extra_index: usize = extended.operand; - - const src_node: ?i32 = if (small.has_src_node) blk: { - const src_node = @as(i32, @bitCast(self.code.extra[extra_index])); - extra_index += 1; - break :blk src_node; - } else null; + const extra = self.code.extraData(Zir.Inst.OpaqueDecl, extended.operand); + var extra_index: usize = extra.end; const decls_len = if (small.has_decls_len) blk: { const decls_len = self.code.extra[extra_index]; @@ -1893,7 +1870,7 @@ const Writer = struct { try stream.writeAll("{})"); } else { const prev_parent_decl_node = self.parent_decl_node; - if (src_node) |off| self.parent_decl_node = self.relativeToNodeIndex(off); + self.parent_decl_node = self.relativeToNodeIndex(extra.data.src_node); defer self.parent_decl_node = prev_parent_decl_node; try stream.writeAll("{\n"); @@ -1903,7 +1880,7 @@ const Writer = struct { try stream.writeByteNTimes(' ', self.indent); try stream.writeAll("})"); } - try self.writeSrcNode(stream, src_node); + try self.writeSrcNode(stream, extra.data.src_node); } fn writeErrorSetDecl( |
