From 277ef1a68f932988cd59b40e496b2b1532907654 Mon Sep 17 00:00:00 2001 From: Ginger Bill Date: Tue, 18 Jul 2017 15:09:24 +0100 Subject: Allow undefined --- as a struct field default value. --- src/ir_print.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'src/ir_print.cpp') diff --git a/src/ir_print.cpp b/src/ir_print.cpp index d6fa61a10..3a3eaaced 100644 --- a/src/ir_print.cpp +++ b/src/ir_print.cpp @@ -648,9 +648,14 @@ void ir_print_exact_value(irFileBuffer *f, irModule *m, ExactValue value, Type * for (isize i = 0; i < value_count; i++) { if (i > 0) ir_fprintf(f, ", "); - Type *elem_type = type->Record.fields[i]->type; + Entity *e = type->Record.fields[i]; - ir_print_compound_element(f, m, values[i], elem_type); + if (!visited[i] && e->Variable.default_is_undef) { + ir_print_type(f, m, e->type); + ir_fprintf(f, " undef"); + } else { + ir_print_compound_element(f, m, values[i], e->type); + } } @@ -682,12 +687,17 @@ void ir_print_exact_value(irFileBuffer *f, irModule *m, ExactValue value, Type * for (isize i = 0; i < value_count; i++) { if (i > 0) ir_fprintf(f, ", "); - Entity *field = type->Record.fields[i]; - ExactValue value = {}; - if (!field->Variable.default_is_nil) { - value = field->Variable.default_value; + Entity *e = type->Record.fields[i]; + if (e->Variable.default_is_undef) { + ir_print_type(f, m, e->type); + ir_fprintf(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_print_compound_element(f, m, value, field->type); } ir_fprintf(f, "}"); -- cgit v1.2.3