From 0f1227f7d5a3e368f61d396c1640088c079fef91 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sun, 11 Jul 2021 16:01:58 +0200 Subject: patch 8.2.3144: Vim9: no error when using an invalid value for a line number Problem: Vim9: no error when using an invalid value for a line number. Solution: Give an error if the string value is not recognized. (closes #8536) --- src/errors.h | 2 ++ src/eval.c | 2 ++ src/testdir/test_vim9_builtin.vim | 23 +++++++++++++++++++++-- src/version.c | 2 ++ 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/errors.h b/src/errors.h index 7e823bfbf2..bfbe0296ed 100644 --- a/src/errors.h +++ b/src/errors.h @@ -498,3 +498,5 @@ EXTERN char e_expression_without_effect_str[] INIT(= N_("E1207: Expression without an effect: %s")); EXTERN char e_complete_used_without_nargs[] INIT(= N_("E1208: -complete used without -nargs")); +EXTERN char e_invalid_value_for_line_number_str[] + INIT(= N_("E1209: Invalid value for a line number: \"%s\"")); diff --git a/src/eval.c b/src/eval.c index 4d94d67ee6..6537ffea41 100644 --- a/src/eval.c +++ b/src/eval.c @@ -5376,6 +5376,8 @@ var2fpos( } return &pos; } + if (in_vim9script()) + semsg(_(e_invalid_value_for_line_number_str), name); return NULL; } diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim index 5bc51b11ca..e26c2c0dd1 100644 --- a/src/testdir/test_vim9_builtin.vim +++ b/src/testdir/test_vim9_builtin.vim @@ -474,7 +474,7 @@ def Test_cursor() var lines =<< trim END cursor('2', 1) END - CheckDefExecAndScriptFailure(lines, 'E475:') + CheckDefExecAndScriptFailure(lines, 'E1209:') enddef def Test_debugbreak() @@ -1036,6 +1036,25 @@ def Test_getjumplist() CheckDefFailure(['getjumplist(1, "x")'], 'E1013: Argument 2: type mismatch, expected number but got string') enddef +def Test_getline() + var lines =<< trim END + new + setline(1, ['hello', 'there', 'again']) + assert_equal('hello', getline(1)) + assert_equal('hello', getline('.')) + + normal 2Gvjv + assert_equal('there', getline("'<")) + assert_equal('again', getline("'>")) + END + CheckDefAndScriptSuccess(lines) + + lines =<< trim END + echo getline('1') + END + CheckDefExecAndScriptFailure(lines, 'E1209:') +enddef + def Test_getmarklist() CheckDefFailure(['getmarklist([])'], 'E1013: Argument 1: type mismatch, expected string but got list') assert_equal([], getmarklist(10000)) @@ -1049,7 +1068,7 @@ enddef def Test_getpos() CheckDefFailure(['getpos(10)'], 'E1013: Argument 1: type mismatch, expected string but got number') assert_equal([0, 1, 1, 0], getpos('.')) - assert_equal([0, 0, 0, 0], getpos('a')) + CheckDefExecFailure(['getpos("a")'], 'E1209:') enddef def Test_getqflist() diff --git a/src/version.c b/src/version.c index 76dbacda3a..91a3677d56 100644 --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3144, /**/ 3143, /**/ -- cgit v1.2.3