comparison src/vim9instr.c @ 27924:e6e3abc28c7a v8.2.4487

patch 8.2.4487: Vim9: cannot compare with v:null Commit: https://github.com/vim/vim/commit/7a2222487507eb13cccdb9a66397092775d62b8c Author: Bram Moolenaar <Bram@vim.org> Date: Tue Mar 1 19:23:24 2022 +0000 patch 8.2.4487: Vim9: cannot compare with v:null Problem: Vim9: cannot compare with v:null. Solution: Allow comparing anything with v:null. (closes https://github.com/vim/vim/issues/9866)
author Bram Moolenaar <Bram@vim.org>
date Tue, 01 Mar 2022 20:30:04 +0100
parents f40647a2b36a
children 1012048eed26
comparison
equal deleted inserted replaced
27923:442d920bdf6f 27924:e6e3abc28c7a
370 } 370 }
371 else if (type1 == VAR_ANY || type2 == VAR_ANY 371 else if (type1 == VAR_ANY || type2 == VAR_ANY
372 || ((type1 == VAR_NUMBER || type1 == VAR_FLOAT) 372 || ((type1 == VAR_NUMBER || type1 == VAR_FLOAT)
373 && (type2 == VAR_NUMBER || type2 == VAR_FLOAT))) 373 && (type2 == VAR_NUMBER || type2 == VAR_FLOAT)))
374 isntype = ISN_COMPAREANY; 374 isntype = ISN_COMPAREANY;
375 else if (type1 == VAR_SPECIAL || type2 == VAR_SPECIAL)
376 {
377 switch (type1 == VAR_SPECIAL ? type2 : type1)
378 {
379 case VAR_BLOB: break;
380 case VAR_CHANNEL: break;
381 case VAR_DICT: break;
382 case VAR_FUNC: break;
383 case VAR_JOB: break;
384 case VAR_LIST: break;
385 case VAR_PARTIAL: break;
386 case VAR_STRING: break;
387 default: semsg(_(e_cannot_compare_str_with_str),
388 vartype_name(type1), vartype_name(type2));
389 return ISN_DROP;
390 }
391 isntype = ISN_COMPARENULL;
392 }
375 393
376 if ((exprtype == EXPR_IS || exprtype == EXPR_ISNOT) 394 if ((exprtype == EXPR_IS || exprtype == EXPR_ISNOT)
377 && (isntype == ISN_COMPAREBOOL 395 && (isntype == ISN_COMPAREBOOL
378 || isntype == ISN_COMPARESPECIAL 396 || isntype == ISN_COMPARESPECIAL
379 || isntype == ISN_COMPARENR 397 || isntype == ISN_COMPARENR
386 if (isntype == ISN_DROP 404 if (isntype == ISN_DROP
387 || ((exprtype != EXPR_EQUAL && exprtype != EXPR_NEQUAL 405 || ((exprtype != EXPR_EQUAL && exprtype != EXPR_NEQUAL
388 && (type1 == VAR_BOOL || type1 == VAR_SPECIAL 406 && (type1 == VAR_BOOL || type1 == VAR_SPECIAL
389 || type2 == VAR_BOOL || type2 == VAR_SPECIAL))) 407 || type2 == VAR_BOOL || type2 == VAR_SPECIAL)))
390 || ((exprtype != EXPR_EQUAL && exprtype != EXPR_NEQUAL 408 || ((exprtype != EXPR_EQUAL && exprtype != EXPR_NEQUAL
391 && exprtype != EXPR_IS && exprtype != EXPR_ISNOT 409 && exprtype != EXPR_IS && exprtype != EXPR_ISNOT
392 && (type1 == VAR_BLOB || type2 == VAR_BLOB 410 && (type1 == VAR_BLOB || type2 == VAR_BLOB
393 || type1 == VAR_LIST || type2 == VAR_LIST)))) 411 || type1 == VAR_LIST || type2 == VAR_LIST))))
394 { 412 {
395 semsg(_(e_cannot_compare_str_with_str), 413 semsg(_(e_cannot_compare_str_with_str),
396 vartype_name(type1), vartype_name(type2)); 414 vartype_name(type1), vartype_name(type2));
2129 case ISN_COMPAREDICT: 2147 case ISN_COMPAREDICT:
2130 case ISN_COMPAREFLOAT: 2148 case ISN_COMPAREFLOAT:
2131 case ISN_COMPAREFUNC: 2149 case ISN_COMPAREFUNC:
2132 case ISN_COMPARELIST: 2150 case ISN_COMPARELIST:
2133 case ISN_COMPARENR: 2151 case ISN_COMPARENR:
2152 case ISN_COMPARENULL:
2134 case ISN_COMPARESPECIAL: 2153 case ISN_COMPARESPECIAL:
2135 case ISN_COMPARESTRING: 2154 case ISN_COMPARESTRING:
2136 case ISN_CONCAT: 2155 case ISN_CONCAT:
2137 case ISN_COND2BOOL: 2156 case ISN_COND2BOOL:
2138 case ISN_DEBUG: 2157 case ISN_DEBUG: