Mercurial > vim
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: |