mirror of
https://github.com/Ed94/Odin.git
synced 2026-06-14 18:02:22 -07:00
Remove code relating to default struct values
This commit is contained in:
+16
-101
@@ -308,16 +308,16 @@ void ir_print_type(irFileBuffer *f, irModule *m, Type *t, bool in_struct) {
|
||||
case Basic_b32: ir_write_str_lit(f, "i32"); return;
|
||||
case Basic_b64: ir_write_str_lit(f, "i64"); return;
|
||||
|
||||
case Basic_i8: ir_write_str_lit(f, "i8"); return;
|
||||
case Basic_u8: ir_write_str_lit(f, "i8"); return;
|
||||
case Basic_i16: ir_write_str_lit(f, "i16"); return;
|
||||
case Basic_u16: ir_write_str_lit(f, "i16"); return;
|
||||
case Basic_i32: ir_write_str_lit(f, "i32"); return;
|
||||
case Basic_u32: ir_write_str_lit(f, "i32"); return;
|
||||
case Basic_i64: ir_write_str_lit(f, "i64"); return;
|
||||
case Basic_u64: ir_write_str_lit(f, "i64"); return;
|
||||
case Basic_i8: ir_write_str_lit(f, "i8"); return;
|
||||
case Basic_u8: ir_write_str_lit(f, "i8"); return;
|
||||
case Basic_i16: ir_write_str_lit(f, "i16"); return;
|
||||
case Basic_u16: ir_write_str_lit(f, "i16"); return;
|
||||
case Basic_i32: ir_write_str_lit(f, "i32"); return;
|
||||
case Basic_u32: ir_write_str_lit(f, "i32"); return;
|
||||
case Basic_i64: ir_write_str_lit(f, "i64"); return;
|
||||
case Basic_u64: ir_write_str_lit(f, "i64"); return;
|
||||
|
||||
case Basic_rune: ir_write_str_lit(f, "i32"); return;
|
||||
case Basic_rune: ir_write_str_lit(f, "i32"); return;
|
||||
|
||||
case Basic_int:
|
||||
case Basic_uint:
|
||||
@@ -503,11 +503,7 @@ void ir_print_compound_element(irFileBuffer *f, irModule *m, ExactValue v, Type
|
||||
ir_write_byte(f, ' ');
|
||||
|
||||
if (v.kind == ExactValue_Invalid || !elem_type_can_be_constant(elem_type)) {
|
||||
if (ir_type_has_default_values(elem_type)) {
|
||||
ir_print_exact_value(f, m, v, elem_type);
|
||||
} else {
|
||||
ir_fprintf(f, "zeroinitializer");
|
||||
}
|
||||
ir_fprintf(f, "zeroinitializer");
|
||||
} else {
|
||||
ir_print_exact_value(f, m, v, elem_type);
|
||||
}
|
||||
@@ -675,13 +671,8 @@ void ir_print_exact_value(irFileBuffer *f, irModule *m, ExactValue value, Type *
|
||||
|
||||
Type *elem_type = type->Array.elem;
|
||||
isize elem_count = cl->elems.count;
|
||||
bool has_defaults = ir_type_has_default_values(type);
|
||||
if (elem_count == 0) {
|
||||
if (!has_defaults) {
|
||||
ir_write_str_lit(f, "zeroinitializer");
|
||||
} else {
|
||||
ir_print_exact_value(f, m, empty_exact_value, type);
|
||||
}
|
||||
ir_write_str_lit(f, "zeroinitializer");
|
||||
break;
|
||||
}
|
||||
GB_ASSERT_MSG(elem_count == type->Array.count, "%td != %td", elem_count, type->Array.count);
|
||||
@@ -706,8 +697,7 @@ void ir_print_exact_value(irFileBuffer *f, irModule *m, ExactValue value, Type *
|
||||
|
||||
ast_node(cl, CompoundLit, value.value_compound);
|
||||
|
||||
bool has_defaults = ir_type_has_default_values(type);
|
||||
if (cl->elems.count == 0 && !has_defaults) {
|
||||
if (cl->elems.count == 0) {
|
||||
ir_write_str_lit(f, "zeroinitializer");
|
||||
break;
|
||||
}
|
||||
@@ -748,18 +738,6 @@ void ir_print_exact_value(irFileBuffer *f, irModule *m, ExactValue value, Type *
|
||||
}
|
||||
}
|
||||
|
||||
for (isize i = 0; i < value_count; i++) {
|
||||
if (visited[i]) continue;
|
||||
Entity *f = type->Struct.fields[i];
|
||||
ExactValue v = {};
|
||||
if (!f->Variable.default_is_nil) {
|
||||
v = f->Variable.default_value;
|
||||
}
|
||||
values[i] = v;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (type->Struct.is_packed) ir_write_byte(f, '<');
|
||||
ir_write_byte(f, '{');
|
||||
if (type->Struct.custom_align > 0) {
|
||||
@@ -773,13 +751,7 @@ void ir_print_exact_value(irFileBuffer *f, irModule *m, ExactValue value, Type *
|
||||
for (isize i = 0; i < value_count; i++) {
|
||||
if (i > 0) ir_write_string(f, str_lit(", "));
|
||||
Entity *e = type->Struct.fields[i];
|
||||
|
||||
if (!visited[i] && e->Variable.default_is_undef) {
|
||||
ir_print_type(f, m, e->type);
|
||||
ir_write_str_lit(f, " undef");
|
||||
} else {
|
||||
ir_print_compound_element(f, m, values[i], e->type);
|
||||
}
|
||||
ir_print_compound_element(f, m, values[i], e->type);
|
||||
}
|
||||
|
||||
|
||||
@@ -809,63 +781,10 @@ void ir_print_exact_value(irFileBuffer *f, irModule *m, ExactValue value, Type *
|
||||
ir_print_value(f, m, val, type);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
bool has_defaults = ir_type_has_default_values(type);
|
||||
if (!has_defaults) {
|
||||
ir_write_str_lit(f, "zeroinitializer");
|
||||
} else {
|
||||
if (is_type_struct(type)) {
|
||||
i32 value_count = cast(i32)type->Struct.fields.count;
|
||||
if (type->Struct.is_packed) ir_write_byte(f, '<');
|
||||
ir_write_byte(f, '{');
|
||||
if (type->Struct.custom_align > 0) {
|
||||
ir_fprintf(f, "[0 x <%lld x i8>] zeroinitializer", cast(i64)type->Struct.custom_align);
|
||||
if (value_count > 0) {
|
||||
ir_write_string(f, str_lit(", "));
|
||||
}
|
||||
}
|
||||
|
||||
for (isize i = 0; i < value_count; i++) {
|
||||
if (i > 0) ir_write_string(f, str_lit(", "));
|
||||
Entity *e = type->Struct.fields[i];
|
||||
if (e->Variable.default_is_undef) {
|
||||
ir_print_type(f, m, e->type);
|
||||
ir_write_str_lit(f, " undef");
|
||||
} else {
|
||||
ExactValue value = {};
|
||||
if (!e->Variable.default_is_nil) {
|
||||
value = e->Variable.default_value;
|
||||
}
|
||||
ir_print_compound_element(f, m, value, e->type);
|
||||
}
|
||||
}
|
||||
|
||||
ir_write_byte(f, '}');
|
||||
if (type->Struct.is_packed) ir_write_byte(f, '>');
|
||||
|
||||
} else if (is_type_array(type)) {
|
||||
i64 count = type->Array.count;
|
||||
if (count == 0) {
|
||||
ir_write_str_lit(f, "zeroinitializer");
|
||||
} else {
|
||||
Type *elem = type->Array.elem;
|
||||
ir_write_byte(f, '[');
|
||||
for (i64 i = 0; i < count; i++) {
|
||||
if (i > 0) ir_write_string(f, str_lit(", "));
|
||||
ir_print_type(f, m, elem);
|
||||
ir_write_byte(f, ' ');
|
||||
ir_print_exact_value(f, m, empty_exact_value, elem);
|
||||
}
|
||||
ir_write_byte(f, ']');
|
||||
}
|
||||
} else {
|
||||
GB_PANIC("Unknown type for default values");
|
||||
}
|
||||
}
|
||||
// GB_PANIC("Invalid ExactValue: %d", value.kind);
|
||||
default:
|
||||
ir_write_str_lit(f, "zeroinitializer");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ir_print_block_name(irFileBuffer *f, irBlock *b) {
|
||||
@@ -1873,11 +1792,7 @@ void print_llvm_ir(irGen *ir) {
|
||||
if (g->value != nullptr) {
|
||||
ir_print_value(f, m, g->value, g->entity->type);
|
||||
} else {
|
||||
if (ir_type_has_default_values(g->entity->type)) {
|
||||
ir_print_exact_value(f, m, empty_exact_value, g->entity->type);
|
||||
} else {
|
||||
ir_write_string(f, str_lit("zeroinitializer"));
|
||||
}
|
||||
ir_write_string(f, str_lit("zeroinitializer"));
|
||||
}
|
||||
}
|
||||
ir_write_byte(f, '\n');
|
||||
|
||||
Reference in New Issue
Block a user