X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=parser.cpp;h=8aa49f77bc76f1d96219c2b77d59641775eb6008;hb=6cf25c0ec6196fbae7c713108a1c45764a080861;hp=0ca7843a37c214a3e3189ff1f39474694678c28f;hpb=663723f00aaa92a15f77bfd7f357ef78b052517d;p=xonotic%2Fgmqcc.git 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]);