Commit 0b54649cac
Changed files (1)
src
arch
sparc64
src/arch/sparc64/CodeGen.zig
@@ -1808,6 +1808,34 @@ fn genTypedValue(self: *Self, typed_value: TypedValue) InnerError!MCValue {
return self.fail("TODO implement int genTypedValue of > 64 bits", .{});
}
},
+ .ErrorSet => {
+ const err_name = typed_value.val.castTag(.@"error").?.data.name;
+ const module = self.bin_file.options.module.?;
+ const global_error_set = module.global_error_set;
+ const error_index = global_error_set.get(err_name).?;
+ return MCValue{ .immediate = error_index };
+ },
+ .ErrorUnion => {
+ const error_type = typed_value.ty.errorUnionSet();
+ const payload_type = typed_value.ty.errorUnionPayload();
+
+ if (typed_value.val.castTag(.eu_payload)) |pl| {
+ if (!payload_type.hasRuntimeBits()) {
+ // We use the error type directly as the type.
+ return MCValue{ .immediate = 0 };
+ }
+
+ _ = pl;
+ return self.fail("TODO implement error union const of type '{}' (non-error)", .{typed_value.ty.fmtDebug()});
+ } else {
+ if (!payload_type.hasRuntimeBits()) {
+ // We use the error type directly as the type.
+ return self.genTypedValue(.{ .ty = error_type, .val = typed_value.val });
+ }
+
+ return self.fail("TODO implement error union const of type '{}' (error)", .{typed_value.ty.fmtDebug()});
+ }
+ },
.ComptimeInt => unreachable, // semantic analysis prevents this
.ComptimeFloat => unreachable, // semantic analysis prevents this
else => return self.fail("TODO implement const of type '{}'", .{typed_value.ty.fmtDebug()}),