diff options
| author | gingerBill <bill@gingerbill.org> | 2023-08-07 14:50:06 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2023-08-07 14:50:06 +0100 |
| commit | 561a94cc50d2957bc82cecbf4ccd1f6f1a99f1a3 (patch) | |
| tree | 7bab1c914f34428ff2c4c4501b7e9bf80d46dff9 /src | |
| parent | 06368879316c3face7b284fa4dfec8d1428d7c7c (diff) | |
Tilde: Fix type info for enums
Diffstat (limited to 'src')
| -rw-r--r-- | src/tilde_type_info.cpp | 68 |
1 files changed, 33 insertions, 35 deletions
diff --git a/src/tilde_type_info.cpp b/src/tilde_type_info.cpp index 54441c0d4..e1a26a26b 100644 --- a/src/tilde_type_info.cpp +++ b/src/tilde_type_info.cpp @@ -328,43 +328,41 @@ gb_internal void cg_setup_type_info_data(cgModule *m) { } if (count > 0) { - { - char const *name = CG_TYPE_INFO_TYPES_NAME; - Type *t = alloc_type_array(t_type_info_ptr, count); - TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, count*3); - cg_global_type_info_member_types = GlobalTypeInfoData{g, t, t_type_info_ptr, 0}; - } - { - char const *name = CG_TYPE_INFO_NAMES_NAME; - Type *t = alloc_type_array(t_string, count); - TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, count*3); - cg_global_type_info_member_names = GlobalTypeInfoData{g, t, t_string, 0}; - } - { - char const *name = CG_TYPE_INFO_OFFSETS_NAME; - Type *t = alloc_type_array(t_uintptr, count); - TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, count); - cg_global_type_info_member_offsets = GlobalTypeInfoData{g, t, t_uintptr, 0}; - } + char const *name = CG_TYPE_INFO_TYPES_NAME; + Type *t = alloc_type_array(t_type_info_ptr, count); + TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); + tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, count*3); + cg_global_type_info_member_types = GlobalTypeInfoData{g, t, t_type_info_ptr, 0}; + } + if (count > 0 || enum_count > 0) { + char const *name = CG_TYPE_INFO_NAMES_NAME; + Type *t = alloc_type_array(t_string, (enum_count+count)); + TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); + tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, (enum_count+count)*3); + cg_global_type_info_member_names = GlobalTypeInfoData{g, t, t_string, 0}; + } + if (count > 0) { + char const *name = CG_TYPE_INFO_OFFSETS_NAME; + Type *t = alloc_type_array(t_uintptr, count); + TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); + tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, count); + cg_global_type_info_member_offsets = GlobalTypeInfoData{g, t, t_uintptr, 0}; + } - { - char const *name = CG_TYPE_INFO_USINGS_NAME; - Type *t = alloc_type_array(t_bool, count); - TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, count); - cg_global_type_info_member_usings = GlobalTypeInfoData{g, t, t_bool, 0}; - } + if (count > 0) { + char const *name = CG_TYPE_INFO_USINGS_NAME; + Type *t = alloc_type_array(t_bool, count); + TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); + tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, count); + cg_global_type_info_member_usings = GlobalTypeInfoData{g, t, t_bool, 0}; + } - { - char const *name = CG_TYPE_INFO_TAGS_NAME; - Type *t = alloc_type_array(t_string, count); - TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); - tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, count*3); - cg_global_type_info_member_tags = GlobalTypeInfoData{g, t, t_string, 0}; - } + if (count > 0) { + char const *name = CG_TYPE_INFO_TAGS_NAME; + Type *t = alloc_type_array(t_string, count); + TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); + tb_global_set_storage(m->mod, tb_module_get_rdata(m->mod), g, type_size_of(t), 16, count*3); + cg_global_type_info_member_tags = GlobalTypeInfoData{g, t, t_string, 0}; } if (enum_count > 0) { |