patch 9.0.1436: cannot compare a typed variable with v:none
Problem: Cannot compare a typed variable with v:none.
Solution: Allow for "x is v:none" and "x isnot v:none". (issue #12194)
diff --git a/src/vim9instr.c b/src/vim9instr.c
index e2cdc3a..52402c1 100644
--- a/src/vim9instr.c
+++ b/src/vim9instr.c
@@ -413,7 +413,7 @@
*/
static isntype_T
get_compare_isn(
- exprtype_T exprtype,
+ exprtype_T exprtype,
typval_T *tv1,
typval_T *tv2,
type_T *type1,
@@ -485,13 +485,17 @@
return ISN_DROP;
}
if (isntype == ISN_DROP
- || ((exprtype != EXPR_EQUAL && exprtype != EXPR_NEQUAL
- && (vartype1 == VAR_BOOL || vartype1 == VAR_SPECIAL
- || vartype2 == VAR_BOOL || vartype2 == VAR_SPECIAL)))
- || ((exprtype != EXPR_EQUAL && exprtype != EXPR_NEQUAL
- && exprtype != EXPR_IS && exprtype != EXPR_ISNOT
- && (vartype1 == VAR_BLOB || vartype2 == VAR_BLOB
- || vartype1 == VAR_LIST || vartype2 == VAR_LIST))))
+ || (isntype != ISN_COMPARENULL
+ && (((exprtype != EXPR_EQUAL
+ && exprtype != EXPR_NEQUAL
+ && (vartype1 == VAR_BOOL || vartype1 == VAR_SPECIAL
+ || vartype2 == VAR_BOOL || vartype2 == VAR_SPECIAL)))
+ || ((exprtype != EXPR_EQUAL
+ && exprtype != EXPR_NEQUAL
+ && exprtype != EXPR_IS
+ && exprtype != EXPR_ISNOT
+ && (vartype1 == VAR_BLOB || vartype2 == VAR_BLOB
+ || vartype1 == VAR_LIST || vartype2 == VAR_LIST))))))
{
semsg(_(e_cannot_compare_str_with_str),
vartype_name(vartype1), vartype_name(vartype2));