aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2020-11-23 14:35:31 +0000
committergingerBill <bill@gingerbill.org>2020-11-23 14:35:31 +0000
commit0b30c3dc5ad3f3908719af19e9f7e61daae37706 (patch)
tree3f539cada71190a13ccea801a029acc323406325 /src/llvm_backend.cpp
parent9e42cb159543546ca549eeba6c943cf0f4c8410b (diff)
Add `flags: Type_Info_Flags,` to `runtime.Type_Info`
Diffstat (limited to 'src/llvm_backend.cpp')
-rw-r--r--src/llvm_backend.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp
index 665f9570a..a2727b012 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -11732,6 +11732,9 @@ void lb_setup_type_info_data(lbProcedure *p) { // NOTE(bill): Setup type_info da
// Useful types
Type *t_i64_slice_ptr = alloc_type_pointer(alloc_type_slice(t_i64));
Type *t_string_slice_ptr = alloc_type_pointer(alloc_type_slice(t_string));
+ Entity *type_info_flags_entity = find_core_entity(info->checker, str_lit("Type_Info_Flags"));
+ Type *t_type_info_flags = type_info_flags_entity->type;
+
i32 type_info_member_types_index = 0;
i32 type_info_member_names_index = 0;
@@ -11751,11 +11754,14 @@ void lb_setup_type_info_data(lbProcedure *p) { // NOTE(bill): Setup type_info da
lbValue tag = {};
lbValue ti_ptr = lb_emit_array_epi(p, lb_global_type_info_data.addr, cast(i32)entry_index);
- lbValue variant_ptr = lb_emit_struct_ep(p, ti_ptr, 3);
+ lbValue variant_ptr = lb_emit_struct_ep(p, ti_ptr, 4);
+
+ lbValue type_info_flags = lb_const_int(p->module, t_type_info_flags, type_info_flags_of_type(t));
lb_emit_store(p, lb_emit_struct_ep(p, ti_ptr, 0), lb_const_int(m, t_int, type_size_of(t)));
lb_emit_store(p, lb_emit_struct_ep(p, ti_ptr, 1), lb_const_int(m, t_int, type_align_of(t)));
- lb_emit_store(p, lb_emit_struct_ep(p, ti_ptr, 2), lb_typeid(m, t));
+ lb_emit_store(p, lb_emit_struct_ep(p, ti_ptr, 2), type_info_flags);
+ lb_emit_store(p, lb_emit_struct_ep(p, ti_ptr, 3), lb_typeid(m, t));
switch (t->kind) {