| author | |
| committer | |
| log | b66fb607bf00c8ac120f22080bcf48eb05cbc71f |
| tree | 480fd5993a44c7cdb5a33181039e9fae1471c2d1 |
| parent | f6eecfe5f486b250de33a8129b1c85198be43280 |
6 files changed, 43 insertions(+), 7 deletions(-)
README.md+1| ... | ... | @@ -55,6 +55,7 @@ compromises backward compatibility. |
| 55 | 55 | |
| 56 | 56 | ### Roadmap |
| 57 | 57 | |
| 58 | * debugging for variables | |
| 58 | 59 | * structs |
| 59 | 60 | * loops |
| 60 | 61 | * enums |
src/analyze.cpp+9-3| ... | ... | @@ -65,8 +65,10 @@ TypeTableEntry *get_pointer_to_type(CodeGen *g, TypeTableEntry *child_type, bool |
| 65 | 65 | entry->type_ref = LLVMPointerType(child_type->type_ref, 0); |
| 66 | 66 | buf_resize(&entry->name, 0); |
| 67 | 67 | buf_appendf(&entry->name, "*%s %s", is_const ? "const" : "mut", buf_ptr(&child_type->name)); |
| 68 | entry->size_in_bits = g->pointer_size_bytes * 8; | |
| 69 | entry->align_in_bits = g->pointer_size_bytes * 8; | |
| 68 | 70 | entry->di_type = LLVMZigCreateDebugPointerType(g->dbuilder, child_type->di_type, |
| 69 | g->pointer_size_bytes * 8, g->pointer_size_bytes * 8, buf_ptr(&entry->name)); | |
| 71 | entry->size_in_bits, entry->align_in_bits, buf_ptr(&entry->name)); | |
| 70 | 72 | g->type_table.put(&entry->name, entry); |
| 71 | 73 | *parent_pointer = entry; |
| 72 | 74 | return entry; |
| ... | ... | @@ -81,8 +83,12 @@ static TypeTableEntry *get_array_type(CodeGen *g, TypeTableEntry *child_type, in |
| 81 | 83 | TypeTableEntry *entry = new_type_table_entry(); |
| 82 | 84 | entry->type_ref = LLVMArrayType(child_type->type_ref, array_size); |
| 83 | 85 | buf_resize(&entry->name, 0); |
| 84 | buf_appendf(&entry->name, "[%s; %ud]", buf_ptr(&child_type->name), array_size); | |
| 85 | //entry->di_type = LLVMZigCreateDebugArrayType(g->dbuilder, ..., buf_ptr(&entry->name)); // TODO | |
| 86 | buf_appendf(&entry->name, "[%s; %d]", buf_ptr(&child_type->name), array_size); | |
| 87 | ||
| 88 | entry->size_in_bits = child_type->size_in_bits * array_size; | |
| 89 | entry->align_in_bits = child_type->align_in_bits; | |
| 90 | entry->di_type = LLVMZigCreateDebugArrayType(g->dbuilder, entry->size_in_bits, | |
| 91 | entry->align_in_bits, child_type->di_type, array_size); | |
| 86 | 92 | |
| 87 | 93 | g->type_table.put(&entry->name, entry); |
| 88 | 94 | child_type->arrays_by_size.put(array_size, entry); |
src/codegen.cpp+14-4| ... | ... | @@ -789,7 +789,10 @@ static void define_primitive_types(CodeGen *g) { |
| 789 | 789 | TypeTableEntry *entry = new_type_table_entry(); |
| 790 | 790 | entry->type_ref = LLVMInt1Type(); |
| 791 | 791 | buf_init_from_str(&entry->name, "bool"); |
| 792 | entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), 1, 8, | |
| 792 | entry->size_in_bits = 1; | |
| 793 | entry->align_in_bits = 8; | |
| 794 | entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), | |
| 795 | entry->size_in_bits, entry->align_in_bits, | |
| 793 | 796 | LLVMZigEncoding_DW_ATE_unsigned()); |
| 794 | 797 | g->type_table.put(&entry->name, entry); |
| 795 | 798 | g->builtin_types.entry_bool = entry; |
| ... | ... | @@ -798,7 +801,10 @@ static void define_primitive_types(CodeGen *g) { |
| 798 | 801 | TypeTableEntry *entry = new_type_table_entry(); |
| 799 | 802 | entry->type_ref = LLVMInt8Type(); |
| 800 | 803 | buf_init_from_str(&entry->name, "u8"); |
| 801 | entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), 8, 8, | |
| 804 | entry->size_in_bits = 8; | |
| 805 | entry->align_in_bits = 8; | |
| 806 | entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), | |
| 807 | entry->size_in_bits, entry->align_in_bits, | |
| 802 | 808 | LLVMZigEncoding_DW_ATE_unsigned()); |
| 803 | 809 | g->type_table.put(&entry->name, entry); |
| 804 | 810 | g->builtin_types.entry_u8 = entry; |
| ... | ... | @@ -808,7 +814,10 @@ static void define_primitive_types(CodeGen *g) { |
| 808 | 814 | TypeTableEntry *entry = new_type_table_entry(); |
| 809 | 815 | entry->type_ref = LLVMInt32Type(); |
| 810 | 816 | buf_init_from_str(&entry->name, "i32"); |
| 811 | entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), 32, 32, | |
| 817 | entry->size_in_bits = 32; | |
| 818 | entry->align_in_bits = 32; | |
| 819 | entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), | |
| 820 | entry->size_in_bits, entry->align_in_bits, | |
| 812 | 821 | LLVMZigEncoding_DW_ATE_signed()); |
| 813 | 822 | g->type_table.put(&entry->name, entry); |
| 814 | 823 | g->builtin_types.entry_i32 = entry; |
| ... | ... | @@ -817,7 +826,8 @@ static void define_primitive_types(CodeGen *g) { |
| 817 | 826 | TypeTableEntry *entry = new_type_table_entry(); |
| 818 | 827 | entry->type_ref = LLVMVoidType(); |
| 819 | 828 | buf_init_from_str(&entry->name, "void"); |
| 820 | entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), 0, 0, | |
| 829 | entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), | |
| 830 | entry->size_in_bits, entry->align_in_bits, | |
| 821 | 831 | LLVMZigEncoding_DW_ATE_unsigned()); |
| 822 | 832 | g->type_table.put(&entry->name, entry); |
| 823 | 833 | g->builtin_types.entry_void = entry; |
src/semantic_info.hpp+2| ... | ... | @@ -18,6 +18,8 @@ struct FnTableEntry; |
| 18 | 18 | struct TypeTableEntry { |
| 19 | 19 | LLVMTypeRef type_ref; |
| 20 | 20 | LLVMZigDIType *di_type; |
| 21 | uint64_t size_in_bits; | |
| 22 | uint64_t align_in_bits; | |
| 21 | 23 | |
| 22 | 24 | TypeTableEntry *pointer_child; |
| 23 | 25 | bool pointer_is_const; |
src/zig_llvm.cpp+12| ... | ... | @@ -149,6 +149,18 @@ LLVMZigDIType *LLVMZigCreateDebugBasicType(LLVMZigDIBuilder *dibuilder, const ch |
| 149 | 149 | return reinterpret_cast<LLVMZigDIType*>(di_type); |
| 150 | 150 | } |
| 151 | 151 | |
| 152 | LLVMZigDIType *LLVMZigCreateDebugArrayType(LLVMZigDIBuilder *dibuilder, uint64_t size_in_bits, | |
| 153 | uint64_t align_in_bits, LLVMZigDIType *elem_type, int elem_count) | |
| 154 | { | |
| 155 | SmallVector<Metadata *, 1> subrange; | |
| 156 | subrange.push_back(reinterpret_cast<DIBuilder*>(dibuilder)->getOrCreateSubrange(0, elem_count - 1)); | |
| 157 | DIType *di_type = reinterpret_cast<DIBuilder*>(dibuilder)->createArrayType( | |
| 158 | size_in_bits, align_in_bits, | |
| 159 | reinterpret_cast<DIType*>(elem_type), | |
| 160 | reinterpret_cast<DIBuilder*>(dibuilder)->getOrCreateArray(subrange)); | |
| 161 | return reinterpret_cast<LLVMZigDIType*>(di_type); | |
| 162 | } | |
| 163 | ||
| 152 | 164 | LLVMZigDISubroutineType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped, |
| 153 | 165 | LLVMZigDIFile *file, LLVMZigDIType **types_array, int types_array_len, unsigned flags) |
| 154 | 166 | { |
src/zig_llvm.hpp+5| ... | ... | @@ -43,6 +43,11 @@ LLVMZigDIType *LLVMZigCreateDebugPointerType(LLVMZigDIBuilder *dibuilder, LLVMZi |
| 43 | 43 | LLVMZigDIType *LLVMZigCreateDebugBasicType(LLVMZigDIBuilder *dibuilder, const char *name, |
| 44 | 44 | uint64_t size_in_bits, uint64_t align_in_bits, unsigned encoding); |
| 45 | 45 | |
| 46 | LLVMZigDIType *LLVMZigCreateDebugArrayType(LLVMZigDIBuilder *dibuilder, | |
| 47 | uint64_t size_in_bits, uint64_t align_in_bits, LLVMZigDIType *elem_type, | |
| 48 | int elem_count); | |
| 49 | ||
| 50 | ||
| 46 | 51 | LLVMZigDISubroutineType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped, |
| 47 | 52 | LLVMZigDIFile *file, LLVMZigDIType **types_array, int types_array_len, unsigned flags); |
| 48 | 53 |