aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/checker.cpp3
-rw-r--r--src/llvm_backend_type.cpp16
-rw-r--r--src/types.cpp2
3 files changed, 17 insertions, 4 deletions
diff --git a/src/checker.cpp b/src/checker.cpp
index e9fa792f3..e72061f56 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -3101,6 +3101,9 @@ gb_internal void init_core_type_info(Checker *c) {
GB_ASSERT(tis->fields.count == 5);
+ Entity *type_info_string_encoding_kind = find_core_entity(c, str_lit("Type_Info_String_Encoding_Kind"));
+ t_type_info_string_encoding_kind = type_info_string_encoding_kind->type;
+
Entity *type_info_variant = tis->fields[4];
Type *tiv_type = type_info_variant->type;
GB_ASSERT(is_type_union(tiv_type));
diff --git a/src/llvm_backend_type.cpp b/src/llvm_backend_type.cpp
index a91d77fe5..d1e7c0559 100644
--- a/src/llvm_backend_type.cpp
+++ b/src/llvm_backend_type.cpp
@@ -525,7 +525,15 @@ gb_internal void lb_setup_type_info_data_giant_array(lbModule *m, i64 global_typ
break;
case Basic_string:
- tag_type = t_type_info_string;
+ {
+ tag_type = t_type_info_string;
+ LLVMValueRef vals[2] = {
+ lb_const_bool(m, t_bool, false).value,
+ lb_const_int(m, t_type_info_string_encoding_kind, 0).value,
+ };
+
+ variant_value = llvm_const_named_struct(m, tag_type, vals, gb_count_of(vals));
+ }
break;
case Basic_cstring:
@@ -533,7 +541,7 @@ gb_internal void lb_setup_type_info_data_giant_array(lbModule *m, i64 global_typ
tag_type = t_type_info_string;
LLVMValueRef vals[2] = {
lb_const_bool(m, t_bool, true).value,
- lb_const_bool(m, t_bool, false).value,
+ lb_const_int(m, t_type_info_string_encoding_kind, 0).value,
};
variant_value = llvm_const_named_struct(m, tag_type, vals, gb_count_of(vals));
@@ -545,7 +553,7 @@ gb_internal void lb_setup_type_info_data_giant_array(lbModule *m, i64 global_typ
tag_type = t_type_info_string;
LLVMValueRef vals[2] = {
lb_const_bool(m, t_bool, false).value,
- lb_const_bool(m, t_bool, true).value,
+ lb_const_int(m, t_type_info_string_encoding_kind, 1).value,
};
variant_value = llvm_const_named_struct(m, tag_type, vals, gb_count_of(vals));
@@ -558,7 +566,7 @@ gb_internal void lb_setup_type_info_data_giant_array(lbModule *m, i64 global_typ
tag_type = t_type_info_string;
LLVMValueRef vals[2] = {
lb_const_bool(m, t_bool, true).value,
- lb_const_bool(m, t_bool, true).value,
+ lb_const_int(m, t_type_info_string_encoding_kind, 1).value,
};
variant_value = llvm_const_named_struct(m, tag_type, vals, gb_count_of(vals));
diff --git a/src/types.cpp b/src/types.cpp
index 51d170f2b..c465714db 100644
--- a/src/types.cpp
+++ b/src/types.cpp
@@ -661,6 +661,8 @@ gb_global Type *t_type_info_enum_value = nullptr;
gb_global Type *t_type_info_ptr = nullptr;
gb_global Type *t_type_info_enum_value_ptr = nullptr;
+gb_global Type *t_type_info_string_encoding_kind = nullptr;
+
gb_global Type *t_type_info_named = nullptr;
gb_global Type *t_type_info_integer = nullptr;
gb_global Type *t_type_info_rune = nullptr;