Tilde: Fix type info for enums

This commit is contained in:
gingerBill
2023-08-07 14:50:06 +01:00
parent 0636887931
commit 561a94cc50
+33 -35
View File
@@ -328,43 +328,41 @@ gb_internal void cg_setup_type_info_data(cgModule *m) {
} }
if (count > 0) { if (count > 0) {
{ char const *name = CG_TYPE_INFO_TYPES_NAME;
char const *name = CG_TYPE_INFO_TYPES_NAME; Type *t = alloc_type_array(t_type_info_ptr, count);
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 *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);
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};
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;
char const *name = CG_TYPE_INFO_NAMES_NAME; Type *t = alloc_type_array(t_string, (enum_count+count));
Type *t = alloc_type_array(t_string, count); TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE);
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);
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};
cg_global_type_info_member_names = GlobalTypeInfoData{g, t, t_string, 0}; }
} if (count > 0) {
{ char const *name = CG_TYPE_INFO_OFFSETS_NAME;
char const *name = CG_TYPE_INFO_OFFSETS_NAME; Type *t = alloc_type_array(t_uintptr, count);
Type *t = alloc_type_array(t_uintptr, count); TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE);
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);
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};
cg_global_type_info_member_offsets = GlobalTypeInfoData{g, t, t_uintptr, 0}; }
}
{ if (count > 0) {
char const *name = CG_TYPE_INFO_USINGS_NAME; char const *name = CG_TYPE_INFO_USINGS_NAME;
Type *t = alloc_type_array(t_bool, count); Type *t = alloc_type_array(t_bool, count);
TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); 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); 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}; cg_global_type_info_member_usings = GlobalTypeInfoData{g, t, t_bool, 0};
} }
{ if (count > 0) {
char const *name = CG_TYPE_INFO_TAGS_NAME; char const *name = CG_TYPE_INFO_TAGS_NAME;
Type *t = alloc_type_array(t_string, count); Type *t = alloc_type_array(t_string, count);
TB_Global *g = tb_global_create(m->mod, -1, name, nullptr, TB_LINKAGE_PRIVATE); 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); 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}; cg_global_type_info_member_tags = GlobalTypeInfoData{g, t, t_string, 0};
}
} }
if (enum_count > 0) { if (enum_count > 0) {