Mercurial > vim
changeset 23106:b0c88aa0175b v8.2.2099
patch 8.2.2099: Vim9: some checks are not tested
Commit: https://github.com/vim/vim/commit/918a4249176a8ccec3a34c9c7ef7bf4163676a63
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun Dec 6 14:37:08 2020 +0100
patch 8.2.2099: Vim9: some checks are not tested
Problem: Vim9: some checks are not tested.
Solution: Add a few more tests. Give better error messages.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 06 Dec 2020 14:45:04 +0100 |
parents | 65d66ab963c2 |
children | 6daa688e0e24 |
files | src/testdir/test_vim9_expr.vim src/testdir/test_vim9_script.vim src/version.c src/vim9compile.c |
diffstat | 4 files changed, 94 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -188,6 +188,12 @@ func Test_expr1_trinary_fails() call CheckDefExecFailure(["var x = [] ? 'one' : 'two'"], 'E745:', 1) call CheckDefExecFailure(["var x = {} ? 'one' : 'two'"], 'E728:', 1) + call CheckDefExecFailure(["var x = false ? "], 'E1097:', 2) + call CheckDefExecFailure(["var x = false ? 'one' : "], 'E1097:', 2) + + call CheckDefExecFailure(["var x = true ? xxx : 'foo'"], 'E1001:', 1) + call CheckDefExecFailure(["var x = false ? 'foo' : xxx"], 'E1001:', 1) + if has('float') call CheckDefFailure(["var x = 0.1 ? 'one' : 'two'"], 'E805:', 1) endif @@ -346,6 +352,8 @@ def Test_expr2_fails() call CheckDefFailure(["var x = 1 ||2"], msg, 1) call CheckDefFailure(["var x = 1|| 2"], msg, 1) + call CheckDefFailure(["var x = false || "], 'E1097:', 2) + call CheckDefFailure(["var x = 1 || xxx"], 'E1001:', 1) call CheckDefFailure(["var x = [] || false"], 'E1012:', 1) call CheckDefFailure(["if 'yes' || 0", 'echo 0', 'endif'], 'E1012: Type mismatch; expected bool but got string', 1) @@ -579,6 +587,8 @@ def Test_expr4_equal() CheckDefAndScriptSuccess(lines) CheckDefFailure(["var x = 'a' == xxx"], 'E1001:', 1) + CheckDefFailure(["var x = 'a' == "], 'E1097:', 2) + CheckDefExecFailure(['var items: any', 'eval 1', 'eval 2', 'if items == []', 'endif'], 'E691:', 4) enddef @@ -1349,6 +1359,7 @@ def Test_expr6() CheckDefAndScriptSuccess(lines) CheckDefFailure(["var x = 6 * xxx"], 'E1001:', 1) + CheckDefFailure(["var d = 6 * "], 'E1097:', 2) enddef def Test_expr6_vim9script() @@ -1520,6 +1531,7 @@ def Test_expr7t() assert_equal(234, nr) CheckDefFailure(["var x = <nr>123"], 'E1010:', 1) + CheckDefFailure(["var x = <number>"], 'E1097:', 2) CheckDefFailure(["var x = <number >123"], 'E1068:', 1) CheckDefFailure(["var x = <number 123"], 'E1104:', 1) enddef @@ -2053,6 +2065,33 @@ def Test_expr7_dict_vim9script() CheckScriptFailure(lines, 'E1012:', 2) lines =<< trim END + vim9script + var d = {['a']: 234, ['b': 'x'} + END + CheckScriptFailure(lines, 'E1139:', 2) + lines =<< trim END + vim9script + def Func() + var d = {['a']: 234, ['b': 'x'} + enddef + defcompile + END + CheckScriptFailure(lines, 'E1139:', 1) + lines =<< trim END + vim9script + var d = {'a': + END + CheckScriptFailure(lines, 'E15:', 2) + lines =<< trim END + vim9script + def Func() + var d = {'a': + enddef + defcompile + END + CheckScriptFailure(lines, 'E723:', 1) + + lines =<< trim END vim9script def Failing() job_stop() @@ -2566,6 +2605,39 @@ def Test_expr7_string_subscript() END CheckDefSuccess(lines) CheckScriptSuccess(['vim9script'] + lines) + + lines =<< trim END + var d = 'asdf'[1: + END + CheckDefFailure(lines, 'E1097:', 2) + lines =<< trim END + var d = 'asdf'[1:xxx] + END + CheckDefFailure(lines, 'E1001:', 1) + lines =<< trim END + var d = 'asdf'[1:2 + END + CheckDefFailure(lines, 'E1097:', 2) + lines =<< trim END + var d = 'asdf'[1:2 + echo d + END + CheckDefFailure(lines, 'E111:', 2) + lines =<< trim END + var d = 'asdf'['1'] + echo d + END + CheckDefFailure(lines, 'E1012: Type mismatch; expected number but got string', 1) + lines =<< trim END + var d = 'asdf'['1':2] + echo d + END + CheckDefFailure(lines, 'E1012: Type mismatch; expected number but got string', 1) + lines =<< trim END + var d = 'asdf'[1:'2'] + echo d + END + CheckDefFailure(lines, 'E1012: Type mismatch; expected number but got string', 1) enddef def Test_expr7_list_subscript()
--- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -962,6 +962,18 @@ def Test_vim9_import_export() writefile(import_already_defined, 'Ximport.vim') assert_fails('source Ximport.vim', 'E1073:', '', 3, 'Ximport.vim') + # try changing an imported const + var import_assign_to_const =<< trim END + vim9script + import CONST from './Xexport.vim' + def Assign() + CONST = 987 + enddef + defcompile + END + writefile(import_assign_to_const, 'Ximport.vim') + assert_fails('source Ximport.vim', 'E46:', '', 1, '_Assign') + # import a very long name, requires making a copy var import_long_name_lines =<< trim END vim9script
--- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2099, +/**/ 2098, /**/ 2097,
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -2503,7 +2503,8 @@ compile_load( case 'w': isn_type = ISN_LOADW; break; case 't': isn_type = ISN_LOADT; break; case 'b': isn_type = ISN_LOADB; break; - default: semsg(_(e_namespace_not_supported_str), *arg); + default: // cannot happen, just in case + semsg(_(e_namespace_not_supported_str), *arg); goto theend; } if (isn_type != ISN_DROP) @@ -3581,7 +3582,7 @@ compile_subscript( else { if (compile_expr0(arg, cctx) == FAIL) - return FAIL; + return FAIL; if (may_get_next_line_error(p, arg, cctx) == FAIL) return FAIL; *arg = skipwhite(*arg); @@ -4084,7 +4085,7 @@ compile_expr6(char_u **arg, cctx_T *cctx return FAIL; } *arg = skipwhite(op + 1); - if (may_get_next_line(op + 1, arg, cctx) == FAIL) + if (may_get_next_line_error(op + 1, arg, cctx) == FAIL) return FAIL; // get the second expression @@ -4291,7 +4292,7 @@ compile_expr4(char_u **arg, cctx_T *cctx // get the second variable *arg = skipwhite(p + len); - if (may_get_next_line(p + len, arg, cctx) == FAIL) + if (may_get_next_line_error(p + len, arg, cctx) == FAIL) return FAIL; if (compile_expr5(arg, cctx, ppconst) == FAIL) @@ -4390,7 +4391,7 @@ compile_and_or( // eval the next expression *arg = skipwhite(p + 2); - if (may_get_next_line(p + 2, arg, cctx) == FAIL) + if (may_get_next_line_error(p + 2, arg, cctx) == FAIL) return FAIL; if ((opchar == '|' ? compile_expr3(arg, cctx, ppconst) @@ -4584,7 +4585,7 @@ compile_expr1(char_u **arg, cctx_T *cct // evaluate the second expression; any type is accepted *arg = skipwhite(p + 1 + op_falsy); - if (may_get_next_line(p + 1 + op_falsy, arg, cctx) == FAIL) + if (may_get_next_line_error(p + 1 + op_falsy, arg, cctx) == FAIL) return FAIL; if (compile_expr1(arg, cctx, ppconst) == FAIL) return FAIL; @@ -4634,7 +4635,7 @@ compile_expr1(char_u **arg, cctx_T *cct cctx->ctx_skip = save_skip == SKIP_YES || const_value ? SKIP_YES : SKIP_NOT; *arg = skipwhite(p + 1); - if (may_get_next_line(p + 1, arg, cctx) == FAIL) + if (may_get_next_line_error(p + 1, arg, cctx) == FAIL) return FAIL; if (compile_expr1(arg, cctx, ppconst) == FAIL) return FAIL;