diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-05-01 23:05:53 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-05-01 23:05:53 +0200 |
commit | d8585eded6359f1d7e1981e96ae775efd077c638 (patch) | |
tree | 38d8334bedc5b982160b8a4d55e35805a2b64010 /src | |
parent | 9a3b3311d26c990208150255ad65472bb4eefaa4 (diff) | |
download | vim-git-d8585eded6359f1d7e1981e96ae775efd077c638.tar.gz |
patch 7.4.1816v7.4.1816
Problem: Looping over a null list throws an error.
Solution: Skip over the for loop.
Diffstat (limited to 'src')
-rw-r--r-- | src/eval.c | 7 | ||||
-rw-r--r-- | src/testdir/test_expr.vim | 7 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 15 insertions, 1 deletions
diff --git a/src/eval.c b/src/eval.c index fa2f839e3..83bac7243 100644 --- a/src/eval.c +++ b/src/eval.c @@ -3292,11 +3292,16 @@ eval_for_line( if (!skip) { l = tv.vval.v_list; - if (tv.v_type != VAR_LIST || l == NULL) + if (tv.v_type != VAR_LIST) { EMSG(_(e_listreq)); clear_tv(&tv); } + else if (l == NULL) + { + /* a null list is like an empty list: do nothing */ + clear_tv(&tv); + } else { /* No need to increment the refcount, it's already set for the diff --git a/src/testdir/test_expr.vim b/src/testdir/test_expr.vim index a72693374..2cd9625ad 100644 --- a/src/testdir/test_expr.vim +++ b/src/testdir/test_expr.vim @@ -83,3 +83,10 @@ func Test_getreg_empty_list() call add(x, 'foo') call assert_equal(['foo'], y) endfunc + +func Test_loop_over_null_list() + let null_list = submatch(1, 1) + for i in null_list + call assert_true(0, 'should not get here') + endfor +endfunc diff --git a/src/version.c b/src/version.c index 3ecf61139..cf4e2947f 100644 --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1816, +/**/ 1815, /**/ 1814, |