@@ -9,17 +9,13 @@ const Module = Zcu;
9
9
const Sema = @import ("Sema.zig" );
10
10
const InternPool = @import ("InternPool.zig" );
11
11
const Allocator = std .mem .Allocator ;
12
- const TypedValue = @This ();
13
12
const Target = std .Target ;
14
13
15
- ty : Type ,
16
- val : Value ,
17
-
18
14
const max_aggregate_items = 100 ;
19
15
const max_string_len = 256 ;
20
16
21
17
const FormatContext = struct {
22
- tv : TypedValue ,
18
+ val : Value ,
23
19
mod : * Module ,
24
20
};
25
21
@@ -31,7 +27,7 @@ pub fn format(
31
27
) ! void {
32
28
_ = options ;
33
29
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 ) {
35
31
error .OutOfMemory = > @panic ("OOM" ), // We're not allowed to return this from a format function
36
32
error .ComptimeBreak , error .ComptimeReturn = > unreachable ,
37
33
error .AnalysisFail , error .NeededSourceLocation = > unreachable , // TODO: re-evaluate when we actually pass `opt_sema`
@@ -40,15 +36,14 @@ pub fn format(
40
36
}
41
37
42
38
pub fn print (
43
- tv : TypedValue ,
39
+ val : Value ,
44
40
writer : anytype ,
45
41
level : u8 ,
46
42
mod : * Module ,
47
43
/// If this `Sema` is provided, we will recurse through pointers where possible to provide friendly output.
48
44
opt_sema : ? * Sema ,
49
45
) (@TypeOf (writer ).Error || Module .CompileError )! void {
50
46
const ip = & mod .intern_pool ;
51
- const val = tv .val ;
52
47
switch (ip .indexToKey (val .toIntern ())) {
53
48
.int_type ,
54
49
.ptr_type ,
@@ -99,10 +94,7 @@ pub fn print(
99
94
.err_name = > | err_name | try writer .print ("error.{}" , .{
100
95
err_name .fmt (ip ),
101
96
}),
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 ),
106
98
},
107
99
.enum_literal = > | enum_literal | try writer .print (".{}" , .{
108
100
enum_literal .fmt (ip ),
@@ -117,10 +109,7 @@ pub fn print(
117
109
try writer .writeAll ("@enumFromInt(...)" );
118
110
}
119
111
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 );
124
113
try writer .writeAll (")" );
125
114
},
126
115
.empty_enum_value = > try writer .writeAll ("(empty enum value)" ),
@@ -139,10 +128,7 @@ pub fn print(
139
128
}
140
129
try printPtr (slice .ptr , writer , false , false , 0 , level , mod , opt_sema );
141
130
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 );
146
132
try writer .writeAll ("]" );
147
133
},
148
134
.ptr = > {
@@ -159,10 +145,7 @@ pub fn print(
159
145
},
160
146
.opt = > | opt | switch (opt .val ) {
161
147
.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 ),
166
149
},
167
150
.aggregate = > | aggregate | try printAggregate (val , aggregate , writer , level , mod , opt_sema ),
168
151
.un = > | un | {
@@ -171,25 +154,15 @@ pub fn print(
171
154
return ;
172
155
}
173
156
if (un .tag == .none ) {
174
- const backing_ty = try tv . ty .unionBackingType (mod );
157
+ const backing_ty = try val . typeOf ( mod ) .unionBackingType (mod );
175
158
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 );
180
160
try writer .writeAll ("))" );
181
161
} else {
182
162
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 );
187
164
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 );
193
166
try writer .writeAll (" }" );
194
167
}
195
168
},
@@ -221,10 +194,7 @@ fn printAggregate(
221
194
if (i != 0 ) try writer .writeAll (", " );
222
195
const field_name = ty .structFieldName (@intCast (i ), zcu ).unwrap ().? ;
223
196
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 );
228
198
}
229
199
try writer .writeAll (" }" );
230
200
return ;
@@ -240,18 +210,14 @@ fn printAggregate(
240
210
else = > unreachable ,
241
211
}
242
212
243
- const elem_ty = ty .childType (zcu );
244
213
const len = ty .arrayLen (zcu );
245
214
246
215
try writer .writeAll (".{ " );
247
216
248
217
const max_len = @min (len , max_aggregate_items );
249
218
for (0.. max_len ) | i | {
250
219
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 );
255
221
}
256
222
if (len > max_aggregate_items ) {
257
223
try writer .writeAll (", ..." );
@@ -286,17 +252,11 @@ fn printPtr(
286
252
try writer .writeByteNTimes ('(' , leading_parens );
287
253
if (force_type ) {
288
254
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 );
293
256
try writer .writeAll ("))" );
294
257
} else {
295
258
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 );
300
260
try writer .writeAll (")" );
301
261
}
302
262
},
@@ -308,19 +268,13 @@ fn printPtr(
308
268
.anon_decl = > | anon | {
309
269
const ty = Type .fromInterned (ip .typeOf (anon .val ));
310
270
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 );
315
272
try writer .writeAll (")" );
316
273
},
317
274
.comptime_field = > | val | {
318
275
const ty = Type .fromInterned (ip .typeOf (val ));
319
276
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 );
324
278
try writer .writeAll (")" );
325
279
},
326
280
.eu_payload = > | base | {
0 commit comments