| ... | ... | @@ -137,22 +137,32 @@ fn renderValue( |
| 137 | 137 | ), |
| 138 | 138 | }, |
| 139 | 139 | .Array => { |
| 140 | | // TODO first try specific tag representations for more efficiency |
| 141 | | // Fall back to inefficient generic implementation. |
| 142 | | try writer.writeAll("{"); |
| 143 | | var index: usize = 0; |
| 144 | | const len = t.arrayLen(); |
| 145 | | const elem_ty = t.elemType(); |
| 146 | | while (index < len) : (index += 1) { |
| 147 | | if (index != 0) try writer.writeAll(","); |
| 148 | | const elem_val = try val.elemValue(&ctx.arena.allocator, index); |
| 149 | | try renderValue(ctx, writer, elem_ty, elem_val); |
| 150 | | } |
| 151 | | if (t.sentinel()) |sentinel_val| { |
| 152 | | if (index != 0) try writer.writeAll(","); |
| 153 | | try renderValue(ctx, writer, elem_ty, sentinel_val); |
| 140 | // First try specific tag representations for more efficiency. |
| 141 | switch (val.tag()) { |
| 142 | .undef, .empty_struct_value, .empty_array => try writer.writeAll("{}"), |
| 143 | .bytes => { |
| 144 | const bytes = val.cast(Value.Payload.Bytes).?.data; |
| 145 | // TODO: make our own C string escape instead of using {Z} |
| 146 | try writer.print("\"{Z}\"", .{bytes}); |
| 147 | }, |
| 148 | else => { |
| 149 | // Fall back to generic implementation. |
| 150 | try writer.writeAll("{"); |
| 151 | var index: usize = 0; |
| 152 | const len = t.arrayLen(); |
| 153 | const elem_ty = t.elemType(); |
| 154 | while (index < len) : (index += 1) { |
| 155 | if (index != 0) try writer.writeAll(","); |
| 156 | const elem_val = try val.elemValue(&ctx.arena.allocator, index); |
| 157 | try renderValue(ctx, writer, elem_ty, elem_val); |
| 158 | } |
| 159 | if (t.sentinel()) |sentinel_val| { |
| 160 | if (index != 0) try writer.writeAll(","); |
| 161 | try renderValue(ctx, writer, elem_ty, sentinel_val); |
| 162 | } |
| 163 | try writer.writeAll("}"); |
| 164 | }, |
| 154 | 165 | } |
| 155 | | try writer.writeAll("}"); |
| 156 | 166 | }, |
| 157 | 167 | else => |e| return ctx.fail(ctx.decl.src(), "TODO: C backend: implement value {s}", .{ |
| 158 | 168 | @tagName(e), |