From 6cf25c0ec6196fbae7c713108a1c45764a080861 Mon Sep 17 00:00:00 2001 From: Dale Weiler Date: Wed, 7 Jul 2021 23:11:17 -0400 Subject: [PATCH] allow comparing explicitly against nil --- parser.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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]); -- 2.39.2