mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
add debugging info for array type
This commit is contained in:
parent
f6eecfe5f4
commit
b66fb607bf
@ -55,6 +55,7 @@ compromises backward compatibility.
|
|||||||
|
|
||||||
### Roadmap
|
### Roadmap
|
||||||
|
|
||||||
|
* debugging for variables
|
||||||
* structs
|
* structs
|
||||||
* loops
|
* loops
|
||||||
* enums
|
* enums
|
||||||
|
|||||||
@ -65,8 +65,10 @@ TypeTableEntry *get_pointer_to_type(CodeGen *g, TypeTableEntry *child_type, bool
|
|||||||
entry->type_ref = LLVMPointerType(child_type->type_ref, 0);
|
entry->type_ref = LLVMPointerType(child_type->type_ref, 0);
|
||||||
buf_resize(&entry->name, 0);
|
buf_resize(&entry->name, 0);
|
||||||
buf_appendf(&entry->name, "*%s %s", is_const ? "const" : "mut", buf_ptr(&child_type->name));
|
buf_appendf(&entry->name, "*%s %s", is_const ? "const" : "mut", buf_ptr(&child_type->name));
|
||||||
|
entry->size_in_bits = g->pointer_size_bytes * 8;
|
||||||
|
entry->align_in_bits = g->pointer_size_bytes * 8;
|
||||||
entry->di_type = LLVMZigCreateDebugPointerType(g->dbuilder, child_type->di_type,
|
entry->di_type = LLVMZigCreateDebugPointerType(g->dbuilder, child_type->di_type,
|
||||||
g->pointer_size_bytes * 8, g->pointer_size_bytes * 8, buf_ptr(&entry->name));
|
entry->size_in_bits, entry->align_in_bits, buf_ptr(&entry->name));
|
||||||
g->type_table.put(&entry->name, entry);
|
g->type_table.put(&entry->name, entry);
|
||||||
*parent_pointer = entry;
|
*parent_pointer = entry;
|
||||||
return entry;
|
return entry;
|
||||||
@ -81,8 +83,12 @@ static TypeTableEntry *get_array_type(CodeGen *g, TypeTableEntry *child_type, in
|
|||||||
TypeTableEntry *entry = new_type_table_entry();
|
TypeTableEntry *entry = new_type_table_entry();
|
||||||
entry->type_ref = LLVMArrayType(child_type->type_ref, array_size);
|
entry->type_ref = LLVMArrayType(child_type->type_ref, array_size);
|
||||||
buf_resize(&entry->name, 0);
|
buf_resize(&entry->name, 0);
|
||||||
buf_appendf(&entry->name, "[%s; %ud]", buf_ptr(&child_type->name), array_size);
|
buf_appendf(&entry->name, "[%s; %d]", buf_ptr(&child_type->name), array_size);
|
||||||
//entry->di_type = LLVMZigCreateDebugArrayType(g->dbuilder, ..., buf_ptr(&entry->name)); // TODO
|
|
||||||
|
entry->size_in_bits = child_type->size_in_bits * array_size;
|
||||||
|
entry->align_in_bits = child_type->align_in_bits;
|
||||||
|
entry->di_type = LLVMZigCreateDebugArrayType(g->dbuilder, entry->size_in_bits,
|
||||||
|
entry->align_in_bits, child_type->di_type, array_size);
|
||||||
|
|
||||||
g->type_table.put(&entry->name, entry);
|
g->type_table.put(&entry->name, entry);
|
||||||
child_type->arrays_by_size.put(array_size, entry);
|
child_type->arrays_by_size.put(array_size, entry);
|
||||||
|
|||||||
@ -789,7 +789,10 @@ static void define_primitive_types(CodeGen *g) {
|
|||||||
TypeTableEntry *entry = new_type_table_entry();
|
TypeTableEntry *entry = new_type_table_entry();
|
||||||
entry->type_ref = LLVMInt1Type();
|
entry->type_ref = LLVMInt1Type();
|
||||||
buf_init_from_str(&entry->name, "bool");
|
buf_init_from_str(&entry->name, "bool");
|
||||||
entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), 1, 8,
|
entry->size_in_bits = 1;
|
||||||
|
entry->align_in_bits = 8;
|
||||||
|
entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
|
||||||
|
entry->size_in_bits, entry->align_in_bits,
|
||||||
LLVMZigEncoding_DW_ATE_unsigned());
|
LLVMZigEncoding_DW_ATE_unsigned());
|
||||||
g->type_table.put(&entry->name, entry);
|
g->type_table.put(&entry->name, entry);
|
||||||
g->builtin_types.entry_bool = entry;
|
g->builtin_types.entry_bool = entry;
|
||||||
@ -798,7 +801,10 @@ static void define_primitive_types(CodeGen *g) {
|
|||||||
TypeTableEntry *entry = new_type_table_entry();
|
TypeTableEntry *entry = new_type_table_entry();
|
||||||
entry->type_ref = LLVMInt8Type();
|
entry->type_ref = LLVMInt8Type();
|
||||||
buf_init_from_str(&entry->name, "u8");
|
buf_init_from_str(&entry->name, "u8");
|
||||||
entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), 8, 8,
|
entry->size_in_bits = 8;
|
||||||
|
entry->align_in_bits = 8;
|
||||||
|
entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
|
||||||
|
entry->size_in_bits, entry->align_in_bits,
|
||||||
LLVMZigEncoding_DW_ATE_unsigned());
|
LLVMZigEncoding_DW_ATE_unsigned());
|
||||||
g->type_table.put(&entry->name, entry);
|
g->type_table.put(&entry->name, entry);
|
||||||
g->builtin_types.entry_u8 = entry;
|
g->builtin_types.entry_u8 = entry;
|
||||||
@ -808,7 +814,10 @@ static void define_primitive_types(CodeGen *g) {
|
|||||||
TypeTableEntry *entry = new_type_table_entry();
|
TypeTableEntry *entry = new_type_table_entry();
|
||||||
entry->type_ref = LLVMInt32Type();
|
entry->type_ref = LLVMInt32Type();
|
||||||
buf_init_from_str(&entry->name, "i32");
|
buf_init_from_str(&entry->name, "i32");
|
||||||
entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), 32, 32,
|
entry->size_in_bits = 32;
|
||||||
|
entry->align_in_bits = 32;
|
||||||
|
entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
|
||||||
|
entry->size_in_bits, entry->align_in_bits,
|
||||||
LLVMZigEncoding_DW_ATE_signed());
|
LLVMZigEncoding_DW_ATE_signed());
|
||||||
g->type_table.put(&entry->name, entry);
|
g->type_table.put(&entry->name, entry);
|
||||||
g->builtin_types.entry_i32 = entry;
|
g->builtin_types.entry_i32 = entry;
|
||||||
@ -817,7 +826,8 @@ static void define_primitive_types(CodeGen *g) {
|
|||||||
TypeTableEntry *entry = new_type_table_entry();
|
TypeTableEntry *entry = new_type_table_entry();
|
||||||
entry->type_ref = LLVMVoidType();
|
entry->type_ref = LLVMVoidType();
|
||||||
buf_init_from_str(&entry->name, "void");
|
buf_init_from_str(&entry->name, "void");
|
||||||
entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name), 0, 0,
|
entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
|
||||||
|
entry->size_in_bits, entry->align_in_bits,
|
||||||
LLVMZigEncoding_DW_ATE_unsigned());
|
LLVMZigEncoding_DW_ATE_unsigned());
|
||||||
g->type_table.put(&entry->name, entry);
|
g->type_table.put(&entry->name, entry);
|
||||||
g->builtin_types.entry_void = entry;
|
g->builtin_types.entry_void = entry;
|
||||||
|
|||||||
@ -18,6 +18,8 @@ struct FnTableEntry;
|
|||||||
struct TypeTableEntry {
|
struct TypeTableEntry {
|
||||||
LLVMTypeRef type_ref;
|
LLVMTypeRef type_ref;
|
||||||
LLVMZigDIType *di_type;
|
LLVMZigDIType *di_type;
|
||||||
|
uint64_t size_in_bits;
|
||||||
|
uint64_t align_in_bits;
|
||||||
|
|
||||||
TypeTableEntry *pointer_child;
|
TypeTableEntry *pointer_child;
|
||||||
bool pointer_is_const;
|
bool pointer_is_const;
|
||||||
|
|||||||
@ -149,6 +149,18 @@ LLVMZigDIType *LLVMZigCreateDebugBasicType(LLVMZigDIBuilder *dibuilder, const ch
|
|||||||
return reinterpret_cast<LLVMZigDIType*>(di_type);
|
return reinterpret_cast<LLVMZigDIType*>(di_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LLVMZigDIType *LLVMZigCreateDebugArrayType(LLVMZigDIBuilder *dibuilder, uint64_t size_in_bits,
|
||||||
|
uint64_t align_in_bits, LLVMZigDIType *elem_type, int elem_count)
|
||||||
|
{
|
||||||
|
SmallVector<Metadata *, 1> subrange;
|
||||||
|
subrange.push_back(reinterpret_cast<DIBuilder*>(dibuilder)->getOrCreateSubrange(0, elem_count - 1));
|
||||||
|
DIType *di_type = reinterpret_cast<DIBuilder*>(dibuilder)->createArrayType(
|
||||||
|
size_in_bits, align_in_bits,
|
||||||
|
reinterpret_cast<DIType*>(elem_type),
|
||||||
|
reinterpret_cast<DIBuilder*>(dibuilder)->getOrCreateArray(subrange));
|
||||||
|
return reinterpret_cast<LLVMZigDIType*>(di_type);
|
||||||
|
}
|
||||||
|
|
||||||
LLVMZigDISubroutineType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,
|
LLVMZigDISubroutineType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,
|
||||||
LLVMZigDIFile *file, LLVMZigDIType **types_array, int types_array_len, unsigned flags)
|
LLVMZigDIFile *file, LLVMZigDIType **types_array, int types_array_len, unsigned flags)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -43,6 +43,11 @@ LLVMZigDIType *LLVMZigCreateDebugPointerType(LLVMZigDIBuilder *dibuilder, LLVMZi
|
|||||||
LLVMZigDIType *LLVMZigCreateDebugBasicType(LLVMZigDIBuilder *dibuilder, const char *name,
|
LLVMZigDIType *LLVMZigCreateDebugBasicType(LLVMZigDIBuilder *dibuilder, const char *name,
|
||||||
uint64_t size_in_bits, uint64_t align_in_bits, unsigned encoding);
|
uint64_t size_in_bits, uint64_t align_in_bits, unsigned encoding);
|
||||||
|
|
||||||
|
LLVMZigDIType *LLVMZigCreateDebugArrayType(LLVMZigDIBuilder *dibuilder,
|
||||||
|
uint64_t size_in_bits, uint64_t align_in_bits, LLVMZigDIType *elem_type,
|
||||||
|
int elem_count);
|
||||||
|
|
||||||
|
|
||||||
LLVMZigDISubroutineType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,
|
LLVMZigDISubroutineType *LLVMZigCreateSubroutineType(LLVMZigDIBuilder *dibuilder_wrapped,
|
||||||
LLVMZigDIFile *file, LLVMZigDIType **types_array, int types_array_len, unsigned flags);
|
LLVMZigDIFile *file, LLVMZigDIType **types_array, int types_array_len, unsigned flags);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user