To: vim_dev@googlegroups.com Subject: Patch 8.2.0288 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.0288 Problem: Vim9: some float and blob operators not tested. Solution: Add float and blob tests. Fix addition. Files: src/testdir/test_vim9_expr.vim, src/vim9compile.c *** ../vim-8.2.0287/src/testdir/test_vim9_expr.vim 2020-02-19 20:23:07.948950048 +0100 --- src/testdir/test_vim9_expr.vim 2020-02-20 22:11:38.985865603 +0100 *************** *** 286,317 **** " test > comperator def Test_expr4_greater() ! assert_equal(true, 2 > 0) ! assert_equal(true, 2 > 1) ! assert_equal(false, 2 > 2) ! assert_equal(false, 2 > 3) enddef " test >= comperator def Test_expr4_greaterequal() ! assert_equal(true, 2 >= 0) ! assert_equal(true, 2 >= 2) ! assert_equal(false, 2 >= 3) enddef " test < comperator def Test_expr4_smaller() ! assert_equal(false, 2 < 0) ! assert_equal(false, 2 < 2) ! assert_equal(true, 2 < 3) enddef " test <= comperator def Test_expr4_smallerequal() ! assert_equal(false, 2 <= 0) ! assert_equal(false, 2 <= 1) ! assert_equal(true, 2 <= 2) ! assert_equal(true, 2 <= 3) enddef " test =~ comperator --- 286,339 ---- " test > comperator def Test_expr4_greater() ! assert_true(2 > 0) ! assert_true(2 > 1) ! assert_false(2 > 2) ! assert_false(2 > 3) ! if has('float') ! assert_true(2.0 > 0.0) ! assert_true(2.0 > 1.0) ! assert_false(2.0 > 2.0) ! assert_false(2.0 > 3.0) ! endif enddef " test >= comperator def Test_expr4_greaterequal() ! assert_true(2 >= 0) ! assert_true(2 >= 2) ! assert_false(2 >= 3) ! if has('float') ! assert_true(2.0 >= 0.0) ! assert_true(2.0 >= 2.0) ! assert_false(2.0 >= 3.0) ! endif enddef " test < comperator def Test_expr4_smaller() ! assert_false(2 < 0) ! assert_false(2 < 2) ! assert_true(2 < 3) ! if has('float') ! assert_false(2.0 < 0.0) ! assert_false(2.0 < 2.0) ! assert_true(2.0 < 3.0) ! endif enddef " test <= comperator def Test_expr4_smallerequal() ! assert_false(2 <= 0) ! assert_false(2 <= 1) ! assert_true(2 <= 2) ! assert_true(2 <= 3) ! if has('float') ! assert_false(2.0 <= 0.0) ! assert_false(2.0 <= 1.0) ! assert_true(2.0 <= 2.0) ! assert_true(2.0 <= 3.0) ! endif enddef " test =~ comperator *************** *** 329,346 **** " test is comperator def Test_expr4_is() let mylist = [2] ! assert_equal(false, mylist is [2]) let other = mylist ! assert_equal(true, mylist is other) enddef " test isnot comperator def Test_expr4_isnot() let mylist = [2] ! assert_equal(true, '2' isnot '0') ! assert_equal(true, mylist isnot [2]) let other = mylist ! assert_equal(false, mylist isnot other) enddef def RetVoid() --- 351,378 ---- " test is comperator def Test_expr4_is() let mylist = [2] ! assert_false(mylist is [2]) let other = mylist ! assert_true(mylist is other) ! ! let myblob = 0z1234 ! assert_false(myblob is 0z1234) ! let otherblob = myblob ! assert_true(myblob is otherblob) enddef " test isnot comperator def Test_expr4_isnot() let mylist = [2] ! assert_true('2' isnot '0') ! assert_true(mylist isnot [2]) let other = mylist ! assert_false(mylist isnot other) ! ! let myblob = 0z1234 ! assert_true(myblob isnot 0z1234) ! let otherblob = myblob ! assert_false(myblob isnot otherblob) enddef def RetVoid() *************** *** 427,432 **** --- 459,470 ---- assert_equal('hello 123', 'hello ' .. 123) assert_equal('123 hello', 123 .. ' hello') assert_equal('123456', 123 .. 456) + + assert_equal([1, 2, 3, 4], [1, 2] + [3, 4]) + assert_equal(0z11223344, 0z1122 + 0z3344) + assert_equal(0z112201ab, 0z1122 + g:ablob) + assert_equal(0z01ab3344, g:ablob + 0z3344) + assert_equal(0z01ab01ab, g:ablob + g:ablob) enddef def Test_expr5_float() *************** *** 466,471 **** --- 504,516 ---- call CheckDefFailure("let x = '1'..'2'", msg) call CheckDefFailure("let x = '1' ..'2'", msg) call CheckDefFailure("let x = '1'.. '2'", msg) + + call CheckDefFailure("let x = 0z1122 + 33", 'E1035') + call CheckDefFailure("let x = 0z1122 + [3]", 'E1035') + call CheckDefFailure("let x = 0z1122 + 'asd'", 'E1035') + call CheckDefFailure("let x = 33 + 0z1122", 'E1035') + call CheckDefFailure("let x = [3] + 0z1122", 'E1035') + call CheckDefFailure("let x = 'asdf' + 0z1122", 'E1035') endfunc " test multiply, divide, modulo *************** *** 650,655 **** --- 695,704 ---- assert_equal(g:list_empty, []) assert_equal(g:list_empty, [ ]) assert_equal(g:list_mixed, [1, 'b', false]) + + call CheckDefExecFailure("let x = g:anint[3]", 'E714:') + call CheckDefExecFailure("let x = g:list_mixed['xx']", 'E39:') + call CheckDefExecFailure("let x = g:list_empty[3]", 'E684:') enddef def Test_expr7_lambda() *************** *** 667,672 **** --- 716,724 ---- let key = 'one' let val = 1 assert_equal(g:dict_one, {key: val}) + + call CheckDefExecFailure("let x = g:anint.member", 'E715:') + call CheckDefExecFailure("let x = g:dict_empty.member", 'E716:') enddef def Test_expr7_option() *** ../vim-8.2.0287/src/vim9compile.c 2020-02-19 22:31:44.886288858 +0100 --- src/vim9compile.c 2020-02-20 22:09:35.194385883 +0100 *************** *** 374,379 **** --- 374,381 ---- switch (*op) { case '+': if (vartype != VAR_LIST && vartype != VAR_BLOB + && type1->tt_type != VAR_UNKNOWN + && type2->tt_type != VAR_UNKNOWN && check_number_or_float( type1->tt_type, type2->tt_type, op) == FAIL) return FAIL; *************** *** 1074,1082 **** return FAIL; isn->isn_arg.string = vim_strnsave(name, (int)len); ! // change dict type to dict member type type = ((type_T **)stack->ga_data)[stack->ga_len - 1]; ! ((type_T **)stack->ga_data)[stack->ga_len - 1] = type->tt_member; return OK; } --- 1076,1091 ---- return FAIL; isn->isn_arg.string = vim_strnsave(name, (int)len); ! // check for dict type type = ((type_T **)stack->ga_data)[stack->ga_len - 1]; ! if (type->tt_type != VAR_DICT && type != &t_any) ! { ! emsg(_(e_dictreq)); ! return FAIL; ! } ! // change dict type to dict member type ! if (type->tt_type == VAR_DICT) ! ((type_T **)stack->ga_data)[stack->ga_len - 1] = type->tt_member; return OK; } *************** *** 2370,2376 **** emsg(_(e_listreq)); return FAIL; } ! *typep = (*typep)->tt_member; } else if (**arg == '.' && (*arg)[1] != '.') { --- 2379,2386 ---- emsg(_(e_listreq)); return FAIL; } ! if ((*typep)->tt_type == VAR_LIST) ! *typep = (*typep)->tt_member; } else if (**arg == '.' && (*arg)[1] != '.') { *************** *** 2387,2393 **** semsg(_(e_syntax_at), *arg); return FAIL; } - // TODO: check type is dict if (generate_MEMBER(cctx, *arg, p - *arg) == FAIL) return FAIL; *arg = p; --- 2397,2402 ---- *************** *** 4964,4969 **** --- 4973,4982 ---- default: // Not recognized, execute with do_cmdline_cmd(). + // TODO: + // CMD_echomsg + // CMD_execute + // etc. generate_EXEC(&cctx, line); line = (char_u *)""; break; *** ../vim-8.2.0287/src/version.c 2020-02-20 20:41:02.987044162 +0100 --- src/version.c 2020-02-20 21:25:11.159028083 +0100 *************** *** 740,741 **** --- 740,743 ---- { /* Add new patch number below this line */ + /**/ + 288, /**/ -- I AM THANKFUL... ...for the mess to clean after a party because it means I have been surrounded by friends. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///