From: Dale Weiler Date: Thu, 8 Jul 2021 03:11:17 +0000 (-0400) Subject: allow comparing explicitly against nil X-Git-Tag: xonotic-v0.8.5~3 X-Git-Url: http://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=commitdiff_plain;h=6cf25c0ec6196fbae7c713108a1c45764a080861 allow comparing explicitly against nil --- diff --git a/parser.cpp b/parser.cpp index 0ca7843..8aa49f7 100644 --- a/parser.cpp +++ b/parser.cpp @@ -897,7 +897,11 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy) out = fold::binary(ctx, generated_op, exprs[0], exprs[1]); break; case opid2('!', '='): - if (exprs[0]->m_vtype != exprs[1]->m_vtype) { + #define NotComparable \ + exprs[0]->m_vtype != TYPE_NIL && \ + exprs[1]->m_vtype != TYPE_NIL && \ + exprs[0]->m_vtype != exprs[1]->m_vtype + if (NotComparable) { compile_error(ctx, "invalid types used in expression: cannot perform comparison between types %s and %s", type_name[exprs[0]->m_vtype], type_name[exprs[1]->m_vtype]); @@ -907,7 +911,7 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy) out = fold::binary(ctx, type_ne_instr[exprs[0]->m_vtype], exprs[0], exprs[1]); break; case opid2('=', '='): - if (exprs[0]->m_vtype != exprs[1]->m_vtype) { + if (NotComparable) { compile_error(ctx, "invalid types used in expression: cannot perform comparison between types %s and %s", type_name[exprs[0]->m_vtype], type_name[exprs[1]->m_vtype]);