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/check_expr.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src/check_expr.cpp') diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 47944e772..1dad15c22 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -879,15 +879,20 @@ void check_record_field_decl(Checker *c, AstNode *decl, Array *fields, e->identifier = name; if (name_field_index < default_values.count) { - Operand op = default_values[name_field_index++]; - check_init_variable(c, e, &op, str_lit("struct field assignment")); - if (is_operand_nil(op)) { + Operand a = default_values[name_field_index]; + Operand b = default_values[name_field_index]; + check_init_variable(c, e, &b, str_lit("struct field assignment")); + if (is_operand_nil(a)) { e->Variable.default_is_nil = true; - } else if (op.mode != Addressing_Constant) { - error(op.expr, "Default field parameter must be a constant"); + } else if (is_operand_undef(a)) { + e->Variable.default_is_undef = true; + } else if (b.mode != Addressing_Constant) { + error(b.expr, "Default field parameter must be a constant"); } else { - e->Variable.default_value = op.value; + e->Variable.default_value = b.value; } + + name_field_index++; } else { GB_ASSERT(type != nullptr); } -- cgit v1.2.3