aboutsummaryrefslogtreecommitdiff
path: root/src/ir_print.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2018-05-12 18:40:49 +0100
committergingerBill <bill@gingerbill.org>2018-05-12 18:40:49 +0100
commit2ef22e86e0742d6dcf0e8c4796f126134e808086 (patch)
tree04e93cb32d73adaa3826bb46a33231219902b59f /src/ir_print.cpp
parent830f4f540fdbe30b22e93540249e61c1d1521f9b (diff)
Make `any` use `typeid` rather than `^Type_Info`
Diffstat (limited to 'src/ir_print.cpp')
-rw-r--r--src/ir_print.cpp19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/ir_print.cpp b/src/ir_print.cpp
index 435924f06..862281a55 100644
--- a/src/ir_print.cpp
+++ b/src/ir_print.cpp
@@ -319,6 +319,8 @@ void ir_print_type(irFileBuffer *f, irModule *m, Type *t, bool in_struct) {
case Basic_rune: ir_write_str_lit(f, "i32"); return;
+ case Basic_typeid:
+ /* fallthrough */
case Basic_int:
case Basic_uint:
case Basic_uintptr:
@@ -341,8 +343,6 @@ void ir_print_type(irFileBuffer *f, irModule *m, Type *t, bool in_struct) {
case Basic_rawptr: ir_write_str_lit(f, "%..rawptr"); return;
case Basic_string: ir_write_str_lit(f, "%..string"); return;
case Basic_cstring: ir_write_str_lit(f, "i8*"); return;
-
- case Basic_typeid: ir_write_str_lit(f, "%..typeid"); return;
}
break;
@@ -538,7 +538,6 @@ void ir_print_exact_value(irFileBuffer *f, irModule *m, ExactValue value, Type *
return;
}
-
switch (value.kind) {
case ExactValue_Bool:
if (value.value_bool) {
@@ -653,7 +652,11 @@ void ir_print_exact_value(irFileBuffer *f, irModule *m, ExactValue value, Type *
}
case ExactValue_Pointer:
if (value.value_pointer == 0) {
- ir_write_str_lit(f, "null");
+ if (is_type_typeid(type)) {
+ ir_write_str_lit(f, "0");
+ } else {
+ ir_write_str_lit(f, "null");
+ }
} else {
ir_write_str_lit(f, "inttoptr (");
ir_print_type(f, m, t_int);
@@ -1748,15 +1751,9 @@ void print_llvm_ir(irGen *ir) {
ir_write_str_lit(f, " = type {");
ir_print_type(f, m, t_rawptr);
ir_write_str_lit(f, ", ");
- ir_print_type(f, m, t_type_info_ptr);
+ ir_print_type(f, m, t_typeid);
ir_write_str_lit(f, "} ; Basic_any\n");
- ir_print_encoded_local(f, str_lit("..typeid"));
- ir_write_str_lit(f, " = type ");
- ir_print_type(f, m, t_uintptr);
- ir_write_str_lit(f, "; Basic_typeid\n");
-
-
ir_write_str_lit(f, "declare void @llvm.dbg.declare(metadata, metadata, metadata) nounwind readnone \n");
ir_write_byte(f, '\n');