diff options
| author | gingerBill <bill@gingerbill.org> | 2022-03-03 13:56:34 +0000 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2022-03-03 13:56:34 +0000 |
| commit | fcab5508be19ac071a19f392bcd1824e3806af95 (patch) | |
| tree | 770f7a3a85d94d56eae5f69cd4fb7e23d7d63c6d /src/entity.cpp | |
| parent | ad6ea3d6aa564ad228cf8883a8fd858135a16030 (diff) | |
| parent | 0b05650366258a56c8da17848e238a21a377afb3 (diff) | |
Merge branch 'master' into odin-ast-changes
Diffstat (limited to 'src/entity.cpp')
| -rw-r--r-- | src/entity.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/entity.cpp b/src/entity.cpp index 8327a517e..f5720293f 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -74,6 +74,7 @@ enum EntityFlag : u64 { EntityFlag_Test = 1ull<<30, EntityFlag_Init = 1ull<<31, + EntityFlag_Subtype = 1ull<<32, EntityFlag_CustomLinkName = 1ull<<40, EntityFlag_CustomLinkage_Internal = 1ull<<41, @@ -86,6 +87,10 @@ enum EntityFlag : u64 { EntityFlag_Overridden = 1ull<<63, }; +enum : u64 { + EntityFlags_IsSubtype = EntityFlag_Using|EntityFlag_Subtype, +}; + enum EntityState : u32 { EntityState_Unresolved = 0, EntityState_InProgress = 1, @@ -122,6 +127,28 @@ enum ProcedureOptimizationMode : u32 { ProcedureOptimizationMode_Speed, }; + +BlockingMutex global_type_name_objc_metadata_mutex; + +struct TypeNameObjCMetadataEntry { + String name; + Entity *entity; +}; +struct TypeNameObjCMetadata { + BlockingMutex *mutex; + Array<TypeNameObjCMetadataEntry> type_entries; + Array<TypeNameObjCMetadataEntry> value_entries; +}; + +TypeNameObjCMetadata *create_type_name_obj_c_metadata() { + TypeNameObjCMetadata *md = gb_alloc_item(permanent_allocator(), TypeNameObjCMetadata); + md->mutex = gb_alloc_item(permanent_allocator(), BlockingMutex); + mutex_init(md->mutex); + array_init(&md->type_entries, heap_allocator()); + array_init(&md->value_entries, heap_allocator()); + return md; +} + // An Entity is a named "thing" in the language struct Entity { EntityKind kind; @@ -186,6 +213,8 @@ struct Entity { Type * type_parameter_specialization; String ir_mangled_name; bool is_type_alias; + String objc_class_name; + TypeNameObjCMetadata *objc_metadata; } TypeName; struct { u64 tags; |