Skip to content

Commit d358cff

Browse files
committed
compiler: eliminate TypedValue
The only logic which remained in this file was the Value printing logic. This has been moved into a new `print_value.zig`.
1 parent 4cdb4bb commit d358cff

File tree

9 files changed

+86
-138
lines changed

9 files changed

+86
-138
lines changed

CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,6 @@ set(ZIG_STAGE2_SOURCES
526526
"${CMAKE_SOURCE_DIR}/src/Package/Fetch.zig"
527527
"${CMAKE_SOURCE_DIR}/src/RangeSet.zig"
528528
"${CMAKE_SOURCE_DIR}/src/Sema.zig"
529-
"${CMAKE_SOURCE_DIR}/src/TypedValue.zig"
530529
"${CMAKE_SOURCE_DIR}/src/Value.zig"
531530
"${CMAKE_SOURCE_DIR}/src/arch/aarch64/CodeGen.zig"
532531
"${CMAKE_SOURCE_DIR}/src/arch/aarch64/Emit.zig"
@@ -634,9 +633,11 @@ set(ZIG_STAGE2_SOURCES
634633
"${CMAKE_SOURCE_DIR}/src/main.zig"
635634
"${CMAKE_SOURCE_DIR}/src/mingw.zig"
636635
"${CMAKE_SOURCE_DIR}/src/musl.zig"
636+
"${CMAKE_SOURCE_DIR}/src/mutable_value.zig"
637637
"${CMAKE_SOURCE_DIR}/src/print_air.zig"
638638
"${CMAKE_SOURCE_DIR}/src/print_env.zig"
639639
"${CMAKE_SOURCE_DIR}/src/print_targets.zig"
640+
"${CMAKE_SOURCE_DIR}/src/print_value.zig"
640641
"${CMAKE_SOURCE_DIR}/src/print_zir.zig"
641642
"${CMAKE_SOURCE_DIR}/src/register_manager.zig"
642643
"${CMAKE_SOURCE_DIR}/src/target.zig"

src/Sema.zig

Lines changed: 52 additions & 54 deletions
Large diffs are not rendered by default.

src/Value.zig

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ const Target = std.Target;
88
const Allocator = std.mem.Allocator;
99
const Zcu = @import("Module.zig");
1010
const Module = Zcu;
11-
const TypedValue = @import("TypedValue.zig");
1211
const Sema = @import("Sema.zig");
1312
const InternPool = @import("InternPool.zig");
13+
const print_value = @import("print_value.zig");
1414
const Value = @This();
1515

1616
ip_index: InternPool.Index,
@@ -39,9 +39,9 @@ pub fn fmtDebug(val: Value) std.fmt.Formatter(dump) {
3939
return .{ .data = val };
4040
}
4141

42-
pub fn fmtValue(val: Value, ty: Type, mod: *Module) std.fmt.Formatter(TypedValue.format) {
42+
pub fn fmtValue(val: Value, mod: *Module) std.fmt.Formatter(print_value.format) {
4343
return .{ .data = .{
44-
.tv = .{ .ty = ty, .val = val },
44+
.val = val,
4545
.mod = mod,
4646
} };
4747
}

src/arch/x86_64/CodeGen.zig

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17876,11 +17876,8 @@ fn airShuffle(self: *Self, inst: Air.Inst.Index) !void {
1787617876

1787717877
break :result null;
1787817878
}) orelse return self.fail("TODO implement airShuffle from {} and {} to {} with {}", .{
17879-
lhs_ty.fmt(mod), rhs_ty.fmt(mod), dst_ty.fmt(mod),
17880-
Value.fromInterned(extra.mask).fmtValue(
17881-
Type.fromInterned(mod.intern_pool.typeOf(extra.mask)),
17882-
mod,
17883-
),
17879+
lhs_ty.fmt(mod), rhs_ty.fmt(mod), dst_ty.fmt(mod),
17880+
Value.fromInterned(extra.mask).fmtValue(mod),
1788417881
});
1788517882
return self.finishAir(inst, result, .{ extra.a, extra.b, .none });
1788617883
}

src/codegen.zig

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,7 @@ pub fn generateSymbol(
185185
const target = mod.getTarget();
186186
const endian = target.cpu.arch.endian();
187187

188-
log.debug("generateSymbol: val = {}", .{
189-
val.fmtValue(ty, mod),
190-
});
188+
log.debug("generateSymbol: val = {}", .{val.fmtValue(mod)});
191189

192190
if (val.isUndefDeep(mod)) {
193191
const abi_size = math.cast(usize, ty.abiSize(mod)) orelse return error.Overflow;
@@ -862,7 +860,7 @@ fn genDeclRef(
862860
) CodeGenError!GenResult {
863861
const zcu = lf.comp.module.?;
864862
const ty = val.typeOf(zcu);
865-
log.debug("genDeclRef: val = {}", .{val.fmtValue(ty, zcu)});
863+
log.debug("genDeclRef: val = {}", .{val.fmtValue(zcu)});
866864

867865
const ptr_decl = zcu.declPtr(ptr_decl_index);
868866
const namespace = zcu.namespacePtr(ptr_decl.src_namespace);
@@ -976,7 +974,7 @@ fn genUnnamedConst(
976974
) CodeGenError!GenResult {
977975
const zcu = lf.comp.module.?;
978976
const gpa = lf.comp.gpa;
979-
log.debug("genUnnamedConst: val = {}", .{val.fmtValue(val.typeOf(zcu), zcu)});
977+
log.debug("genUnnamedConst: val = {}", .{val.fmtValue(zcu)});
980978

981979
const local_sym_index = lf.lowerUnnamedConst(val, owner_decl_index) catch |err| {
982980
return GenResult.fail(gpa, src_loc, "lowering unnamed constant failed: {s}", .{@errorName(err)});
@@ -1016,7 +1014,7 @@ pub fn genTypedValue(
10161014
const zcu = lf.comp.module.?;
10171015
const ty = val.typeOf(zcu);
10181016

1019-
log.debug("genTypedValue: val = {}", .{val.fmtValue(ty, zcu)});
1017+
log.debug("genTypedValue: val = {}", .{val.fmtValue(zcu)});
10201018

10211019
if (val.isUndef(zcu))
10221020
return GenResult.mcv(.undef);

src/codegen/spirv.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -860,7 +860,7 @@ const DeclGen = struct {
860860

861861
const val = arg_val;
862862

863-
log.debug("constant: ty = {}, val = {}", .{ ty.fmt(mod), val.fmtValue(ty, mod) });
863+
log.debug("constant: ty = {}, val = {}", .{ ty.fmt(mod), val.fmtValue(mod) });
864864
if (val.isUndefDeep(mod)) {
865865
return self.spv.constUndef(result_ty_ref);
866866
}

src/print_air.zig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -951,7 +951,7 @@ const Writer = struct {
951951
const ty = Type.fromInterned(mod.intern_pool.indexToKey(ip_index).typeOf());
952952
try s.print("<{}, {}>", .{
953953
ty.fmt(mod),
954-
Value.fromInterned(ip_index).fmtValue(ty, mod),
954+
Value.fromInterned(ip_index).fmtValue(mod),
955955
});
956956
} else {
957957
return w.writeInstIndex(s, operand.toIndex().?, dies);

src/TypedValue.zig renamed to src/print_value.zig

Lines changed: 17 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,13 @@ const Module = Zcu;
99
const Sema = @import("Sema.zig");
1010
const InternPool = @import("InternPool.zig");
1111
const Allocator = std.mem.Allocator;
12-
const TypedValue = @This();
1312
const Target = std.Target;
1413

15-
ty: Type,
16-
val: Value,
17-
1814
const max_aggregate_items = 100;
1915
const max_string_len = 256;
2016

2117
const FormatContext = struct {
22-
tv: TypedValue,
18+
val: Value,
2319
mod: *Module,
2420
};
2521

@@ -31,7 +27,7 @@ pub fn format(
3127
) !void {
3228
_ = options;
3329
comptime std.debug.assert(fmt.len == 0);
34-
return ctx.tv.print(writer, 3, ctx.mod, null) catch |err| switch (err) {
30+
return print(ctx.val, writer, 3, ctx.mod, null) catch |err| switch (err) {
3531
error.OutOfMemory => @panic("OOM"), // We're not allowed to return this from a format function
3632
error.ComptimeBreak, error.ComptimeReturn => unreachable,
3733
error.AnalysisFail, error.NeededSourceLocation => unreachable, // TODO: re-evaluate when we actually pass `opt_sema`
@@ -40,15 +36,14 @@ pub fn format(
4036
}
4137

4238
pub fn print(
43-
tv: TypedValue,
39+
val: Value,
4440
writer: anytype,
4541
level: u8,
4642
mod: *Module,
4743
/// If this `Sema` is provided, we will recurse through pointers where possible to provide friendly output.
4844
opt_sema: ?*Sema,
4945
) (@TypeOf(writer).Error || Module.CompileError)!void {
5046
const ip = &mod.intern_pool;
51-
const val = tv.val;
5247
switch (ip.indexToKey(val.toIntern())) {
5348
.int_type,
5449
.ptr_type,
@@ -99,10 +94,7 @@ pub fn print(
9994
.err_name => |err_name| try writer.print("error.{}", .{
10095
err_name.fmt(ip),
10196
}),
102-
.payload => |payload| try print(.{
103-
.ty = tv.ty.errorUnionPayload(mod),
104-
.val = Value.fromInterned(payload),
105-
}, writer, level, mod, opt_sema),
97+
.payload => |payload| try print(Value.fromInterned(payload), writer, level, mod, opt_sema),
10698
},
10799
.enum_literal => |enum_literal| try writer.print(".{}", .{
108100
enum_literal.fmt(ip),
@@ -117,10 +109,7 @@ pub fn print(
117109
try writer.writeAll("@enumFromInt(...)");
118110
}
119111
try writer.writeAll("@enumFromInt(");
120-
try print(.{
121-
.ty = Type.fromInterned(ip.typeOf(enum_tag.int)),
122-
.val = Value.fromInterned(enum_tag.int),
123-
}, writer, level - 1, mod, opt_sema);
112+
try print(Value.fromInterned(enum_tag.int), writer, level - 1, mod, opt_sema);
124113
try writer.writeAll(")");
125114
},
126115
.empty_enum_value => try writer.writeAll("(empty enum value)"),
@@ -139,10 +128,7 @@ pub fn print(
139128
}
140129
try printPtr(slice.ptr, writer, false, false, 0, level, mod, opt_sema);
141130
try writer.writeAll("[0..");
142-
try print(.{
143-
.ty = Type.usize,
144-
.val = Value.fromInterned(slice.len),
145-
}, writer, level - 1, mod, opt_sema);
131+
try print(Value.fromInterned(slice.len), writer, level - 1, mod, opt_sema);
146132
try writer.writeAll("]");
147133
},
148134
.ptr => {
@@ -159,10 +145,7 @@ pub fn print(
159145
},
160146
.opt => |opt| switch (opt.val) {
161147
.none => try writer.writeAll("null"),
162-
else => |payload| try print(.{
163-
.ty = tv.ty.childType(mod),
164-
.val = Value.fromInterned(payload),
165-
}, writer, level, mod, opt_sema),
148+
else => |payload| try print(Value.fromInterned(payload), writer, level, mod, opt_sema),
166149
},
167150
.aggregate => |aggregate| try printAggregate(val, aggregate, writer, level, mod, opt_sema),
168151
.un => |un| {
@@ -171,25 +154,15 @@ pub fn print(
171154
return;
172155
}
173156
if (un.tag == .none) {
174-
const backing_ty = try tv.ty.unionBackingType(mod);
157+
const backing_ty = try val.typeOf(mod).unionBackingType(mod);
175158
try writer.print("@bitCast(@as({}, ", .{backing_ty.fmt(mod)});
176-
try print(.{
177-
.ty = backing_ty,
178-
.val = Value.fromInterned(un.val),
179-
}, writer, level - 1, mod, opt_sema);
159+
try print(Value.fromInterned(un.val), writer, level - 1, mod, opt_sema);
180160
try writer.writeAll("))");
181161
} else {
182162
try writer.writeAll(".{ ");
183-
try print(.{
184-
.ty = tv.ty.unionTagTypeHypothetical(mod),
185-
.val = Value.fromInterned(un.tag),
186-
}, writer, level - 1, mod, opt_sema);
163+
try print(Value.fromInterned(un.tag), writer, level - 1, mod, opt_sema);
187164
try writer.writeAll(" = ");
188-
const field_ty = tv.ty.unionFieldType(Value.fromInterned(un.tag), mod).?;
189-
try print(.{
190-
.ty = field_ty,
191-
.val = Value.fromInterned(un.val),
192-
}, writer, level - 1, mod, opt_sema);
165+
try print(Value.fromInterned(un.val), writer, level - 1, mod, opt_sema);
193166
try writer.writeAll(" }");
194167
}
195168
},
@@ -221,10 +194,7 @@ fn printAggregate(
221194
if (i != 0) try writer.writeAll(", ");
222195
const field_name = ty.structFieldName(@intCast(i), zcu).unwrap().?;
223196
try writer.print(".{i} = ", .{field_name.fmt(ip)});
224-
try print(.{
225-
.ty = ty.structFieldType(i, zcu),
226-
.val = try val.fieldValue(zcu, i),
227-
}, writer, level - 1, zcu, opt_sema);
197+
try print(try val.fieldValue(zcu, i), writer, level - 1, zcu, opt_sema);
228198
}
229199
try writer.writeAll(" }");
230200
return;
@@ -240,18 +210,14 @@ fn printAggregate(
240210
else => unreachable,
241211
}
242212

243-
const elem_ty = ty.childType(zcu);
244213
const len = ty.arrayLen(zcu);
245214

246215
try writer.writeAll(".{ ");
247216

248217
const max_len = @min(len, max_aggregate_items);
249218
for (0..max_len) |i| {
250219
if (i != 0) try writer.writeAll(", ");
251-
try print(.{
252-
.ty = elem_ty,
253-
.val = try val.fieldValue(zcu, i),
254-
}, writer, level - 1, zcu, opt_sema);
220+
try print(try val.fieldValue(zcu, i), writer, level - 1, zcu, opt_sema);
255221
}
256222
if (len > max_aggregate_items) {
257223
try writer.writeAll(", ...");
@@ -286,17 +252,11 @@ fn printPtr(
286252
try writer.writeByteNTimes('(', leading_parens);
287253
if (force_type) {
288254
try writer.print("@as({}, @ptrFromInt(", .{Type.fromInterned(ptr.ty).fmt(zcu)});
289-
try print(.{
290-
.ty = Type.usize,
291-
.val = Value.fromInterned(int),
292-
}, writer, level - 1, zcu, opt_sema);
255+
try print(Value.fromInterned(int), writer, level - 1, zcu, opt_sema);
293256
try writer.writeAll("))");
294257
} else {
295258
try writer.writeAll("@ptrFromInt(");
296-
try print(.{
297-
.ty = Type.usize,
298-
.val = Value.fromInterned(int),
299-
}, writer, level - 1, zcu, opt_sema);
259+
try print(Value.fromInterned(int), writer, level - 1, zcu, opt_sema);
300260
try writer.writeAll(")");
301261
}
302262
},
@@ -308,19 +268,13 @@ fn printPtr(
308268
.anon_decl => |anon| {
309269
const ty = Type.fromInterned(ip.typeOf(anon.val));
310270
try writer.print("&@as({}, ", .{ty.fmt(zcu)});
311-
try print(.{
312-
.ty = ty,
313-
.val = Value.fromInterned(anon.val),
314-
}, writer, level - 1, zcu, opt_sema);
271+
try print(Value.fromInterned(anon.val), writer, level - 1, zcu, opt_sema);
315272
try writer.writeAll(")");
316273
},
317274
.comptime_field => |val| {
318275
const ty = Type.fromInterned(ip.typeOf(val));
319276
try writer.print("&@as({}, ", .{ty.fmt(zcu)});
320-
try print(.{
321-
.ty = ty,
322-
.val = Value.fromInterned(val),
323-
}, writer, level - 1, zcu, opt_sema);
277+
try print(Value.fromInterned(val), writer, level - 1, zcu, opt_sema);
324278
try writer.writeAll(")");
325279
},
326280
.eu_payload => |base| {

src/type.zig

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,8 @@ pub const Type = struct {
187187

188188
if (info.sentinel != .none) switch (info.flags.size) {
189189
.One, .C => unreachable,
190-
.Many => try writer.print("[*:{}]", .{Value.fromInterned(info.sentinel).fmtValue(Type.fromInterned(info.child), mod)}),
191-
.Slice => try writer.print("[:{}]", .{Value.fromInterned(info.sentinel).fmtValue(Type.fromInterned(info.child), mod)}),
190+
.Many => try writer.print("[*:{}]", .{Value.fromInterned(info.sentinel).fmtValue(mod)}),
191+
.Slice => try writer.print("[:{}]", .{Value.fromInterned(info.sentinel).fmtValue(mod)}),
192192
} else switch (info.flags.size) {
193193
.One => try writer.writeAll("*"),
194194
.Many => try writer.writeAll("[*]"),
@@ -234,7 +234,7 @@ pub const Type = struct {
234234
} else {
235235
try writer.print("[{d}:{}]", .{
236236
array_type.len,
237-
Value.fromInterned(array_type.sentinel).fmtValue(Type.fromInterned(array_type.child), mod),
237+
Value.fromInterned(array_type.sentinel).fmtValue(mod),
238238
});
239239
try print(Type.fromInterned(array_type.child), writer, mod);
240240
}
@@ -352,7 +352,7 @@ pub const Type = struct {
352352
try print(Type.fromInterned(field_ty), writer, mod);
353353

354354
if (val != .none) {
355-
try writer.print(" = {}", .{Value.fromInterned(val).fmtValue(Type.fromInterned(field_ty), mod)});
355+
try writer.print(" = {}", .{Value.fromInterned(val).fmtValue(mod)});
356356
}
357357
}
358358
try writer.writeAll("}");

0 commit comments

Comments
 (0)