Address Spaces: decl_ref, *?T => *T, and *(E!T) -> *T
This commit is contained in:
@@ -353,7 +353,7 @@ pub const Decl = struct {
|
||||
/// to require re-analysis.
|
||||
outdated,
|
||||
},
|
||||
/// Whether `typed_value`, `align_val`, `linksection_val` and `has_addrspace` are populated.
|
||||
/// Whether `typed_value`, `align_val`, `linksection_val` and `addrspace` are populated.
|
||||
has_tv: bool,
|
||||
/// If `true` it means the `Decl` is the resource owner of the type/value associated
|
||||
/// with it. That means when `Decl` is destroyed, the cleanup code should additionally
|
||||
@@ -4401,6 +4401,34 @@ pub fn ptrType(
|
||||
});
|
||||
}
|
||||
|
||||
/// Create a pointer type with an explicit address space. This function might return results
|
||||
/// of either simplePtrType or ptrType, depending on the address space.
|
||||
/// TODO(Snektron) unify ptrType functions.
|
||||
pub fn simplePtrTypeWithAddressSpace(
|
||||
arena: *Allocator,
|
||||
elem_ty: Type,
|
||||
mutable: bool,
|
||||
size: std.builtin.TypeInfo.Pointer.Size,
|
||||
address_space: std.builtin.AddressSpace,
|
||||
) Allocator.Error!Type {
|
||||
switch (address_space) {
|
||||
.generic => return simplePtrType(arena, elem_ty, mutable, size),
|
||||
else => return ptrType(
|
||||
arena,
|
||||
elem_ty,
|
||||
null,
|
||||
0,
|
||||
address_space,
|
||||
0,
|
||||
0,
|
||||
mutable,
|
||||
false,
|
||||
false,
|
||||
size,
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn optionalType(arena: *Allocator, child_type: Type) Allocator.Error!Type {
|
||||
switch (child_type.tag()) {
|
||||
.single_const_pointer => return Type.Tag.optional_single_const_pointer.create(
|
||||
|
||||
Reference in New Issue
Block a user