diff options
| author | A1029384756 <hayden.gray104@gmail.com> | 2025-10-07 23:29:10 -0400 |
|---|---|---|
| committer | A1029384756 <hayden.gray104@gmail.com> | 2025-10-07 23:29:10 -0400 |
| commit | 067fbfb48c2673ba4cf9c4b163fc99082d195147 (patch) | |
| tree | 94e6d181e27100d08a4411aa6899c6eabe559355 /src/types.cpp | |
| parent | cfe651e8d23cb85097db32662acefd27b4350be9 (diff) | |
| parent | 5320feb6737c4d89ce54fda463ea8ff8b8200dba (diff) | |
Merge remote-tracking branch 'upstream/master' into llvm-14-fixes
Diffstat (limited to 'src/types.cpp')
| -rw-r--r-- | src/types.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/types.cpp b/src/types.cpp index effa8ef64..372c2e991 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -752,11 +752,14 @@ gb_global Type *t_objc_object = nullptr; gb_global Type *t_objc_selector = nullptr; gb_global Type *t_objc_class = nullptr; gb_global Type *t_objc_ivar = nullptr; +gb_global Type *t_objc_super = nullptr; // Struct used in lieu of the 'self' instance when calling objc_msgSendSuper. +gb_global Type *t_objc_super_ptr = nullptr; gb_global Type *t_objc_id = nullptr; gb_global Type *t_objc_SEL = nullptr; gb_global Type *t_objc_Class = nullptr; gb_global Type *t_objc_Ivar = nullptr; +gb_global Type *t_objc_instancetype = nullptr; // Special distinct variant of t_objc_id used mimic auto-typing of instancetype* in Objective-C enum OdinAtomicMemoryOrder : i32 { OdinAtomicMemoryOrder_relaxed = 0, // unordered @@ -4735,6 +4738,14 @@ gb_internal bool is_type_objc_object(Type *t) { return internal_check_is_assignable_to(t, t_objc_object); } +gb_internal bool is_type_objc_ptr_to_object(Type *t) { + // NOTE (harold): is_type_objc_object() returns true if it's a pointer to an object or the object itself. + // This returns true ONLY if Type is a shallow pointer to an Objective-C object. + + Type *elem = type_deref(t); + return elem != t && elem->kind == Type_Named && is_type_objc_object(elem); +} + gb_internal Type *get_struct_field_type(Type *t, isize index) { t = base_type(type_deref(t)); GB_ASSERT(t->kind == Type_Struct); |