mirror of
https://github.com/ziglang/zig.git
synced 2026-02-04 21:53:38 +00:00
spirv: optional types
Implements lowering optional types in the SPIR-V backend.
This commit is contained in:
parent
3c7f93aa69
commit
27833004db
@ -776,6 +776,28 @@ pub const DeclGen = struct {
|
||||
};
|
||||
return try self.spv.resolveType(SpvType.initPayload(&payload.base));
|
||||
},
|
||||
.Optional => {
|
||||
var buf: Type.Payload.ElemType = undefined;
|
||||
const payload_ty = ty.optionalChild(&buf);
|
||||
if (!payload_ty.hasRuntimeBitsIgnoreComptime()) {
|
||||
// Just use a bool.
|
||||
return try self.resolveType(Type.initTag(.bool), repr);
|
||||
}
|
||||
|
||||
const payload_ty_ref = try self.resolveType(payload_ty, .indirect);
|
||||
if (ty.optionalReprIsPayload()) {
|
||||
// Optional is actually a pointer.
|
||||
return payload_ty_ref;
|
||||
}
|
||||
|
||||
const bool_ty_ref = try self.resolveType(Type.initTag(.bool), .indirect);
|
||||
|
||||
// its an actual optional
|
||||
return try self.simpleStructType(&.{
|
||||
.{ .ty = payload_ty_ref, .name = "payload" },
|
||||
.{ .ty = bool_ty_ref, .name = "valid" },
|
||||
});
|
||||
},
|
||||
.Null,
|
||||
.Undefined,
|
||||
.EnumLiteral,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user