aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2020-12-05 20:47:50 +0000
committergingerBill <bill@gingerbill.org>2020-12-05 20:47:50 +0000
commit069c6cac3f42ec7a2428062b0e8c481b755534ad (patch)
treeb2093c40b8731b4ecc0fa0038c42d4f9843aa48f /src/llvm_backend.cpp
parent1a8ea6113a16e1a762106ba97442c1e991041841 (diff)
Add package name and source code location to `Type_Info_Named`
Diffstat (limited to 'src/llvm_backend.cpp')
-rw-r--r--src/llvm_backend.cpp23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp
index 213c05a52..d92108044 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -11973,9 +11973,30 @@ void lb_setup_type_info_data(lbProcedure *p) { // NOTE(bill): Setup type_info da
switch (t->kind) {
case Type_Named: {
tag = lb_const_ptr_cast(m, variant_ptr, t_type_info_named_ptr);
- LLVMValueRef vals[2] = {
+
+ LLVMValueRef pkg_name = nullptr;
+ if (t->Named.type_name->pkg) {
+ pkg_name = lb_const_string(m, t->Named.type_name->pkg->name).value;
+ } else {
+ pkg_name = LLVMConstNull(lb_type(m, t_string));
+ }
+
+ String proc_name = {};
+ if (t->Named.type_name->parent_proc_decl) {
+ DeclInfo *decl = t->Named.type_name->parent_proc_decl;
+ if (decl->entity && decl->entity->kind == Entity_Procedure) {
+ proc_name = decl->entity->token.string;
+ }
+ }
+ TokenPos pos = t->Named.type_name->token.pos;
+
+ lbValue loc = lb_emit_source_code_location(p, proc_name, pos);
+
+ LLVMValueRef vals[4] = {
lb_const_string(p->module, t->Named.type_name->token.string).value,
lb_get_type_info_ptr(m, t->Named.base).value,
+ pkg_name,
+ loc.value
};
lbValue res = {};