To: vim_dev@googlegroups.com Subject: Patch 8.2.4530 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.4530 Problem: Making comparison with null work changes legacy behavior. Solution: Only use the better comparison in Vim9 script. (closes #9910) Files: src/typval.c, src/testdir/test_expr.vim *** ../vim-8.2.4529/src/typval.c 2022-03-02 13:13:26.475857972 +0000 --- src/typval.c 2022-03-09 11:50:05.358375030 +0000 *************** *** 1381,1387 **** } /* ! * Compare v:null/v:none with another type. Return TRUE if the value is NULL. */ int typval_compare_null(typval_T *tv1, typval_T *tv2) --- 1381,1387 ---- } /* ! * Compare v:null with another type. Return TRUE if the value is NULL. */ int typval_compare_null(typval_T *tv1, typval_T *tv2) *************** *** 1417,1422 **** --- 1417,1425 ---- default: break; } } + if (!in_vim9script()) + return FALSE; // backwards compatible + semsg(_(e_cannot_compare_str_with_str), vartype_name(tv1->v_type), vartype_name(tv2->v_type)); return MAYBE; *** ../vim-8.2.4529/src/testdir/test_expr.vim 2022-03-08 13:18:10.813020777 +0000 --- src/testdir/test_expr.vim 2022-03-09 11:52:51.305921959 +0000 *************** *** 181,186 **** --- 181,218 ---- call v9.CheckScriptFailure(lines, 'E121: Undefined variable: null_list') endfunc + func Test_compare_with_null() + let s:value = v:null + call assert_true(s:value == v:null) + let s:value = v:true + call assert_false(s:value == v:null) + let s:value = v:none + call assert_false(s:value == v:null) + let s:value = 0 + call assert_true(s:value == v:null) + if has('float') + let s:value = 0.0 + call assert_true(s:value == v:null) + endif + let s:value = '' + call assert_false(s:value == v:null) + let s:value = 0z + call assert_false(s:value == v:null) + let s:value = [] + call assert_false(s:value == v:null) + let s:value = {} + call assert_false(s:value == v:null) + let s:value = function('len') + call assert_false(s:value == v:null) + if has('job') + let s:value = test_null_job() + call assert_true(s:value == v:null) + let s:value = test_null_channel() + call assert_true(s:value == v:null) + endif + unlet s:value + endfunc + func Test_setreg_null_list() let lines =<< trim END call setreg('x', test_null_list()) *** ../vim-8.2.4529/src/version.c 2022-03-08 19:43:51.692198946 +0000 --- src/version.c 2022-03-09 11:36:08.368674934 +0000 *************** *** 752,753 **** --- 752,755 ---- { /* Add new patch number below this line */ + /**/ + 4530, /**/ -- hundred-and-one symptoms of being an internet addict: 213. Your kids start referring to you as "that guy in front of the monitor." /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///