Mercurial > vim
changeset 9062:0aa90b84118c v7.4.1816
commit https://github.com/vim/vim/commit/d8585eded6359f1d7e1981e96ae775efd077c638
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun May 1 23:05:53 2016 +0200
patch 7.4.1816
Problem: Looping over a null list throws an error.
Solution: Skip over the for loop.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 01 May 2016 23:15:05 +0200 |
parents | 37378cd98b84 |
children | 030b239e7b25 |
files | src/eval.c src/testdir/test_expr.vim src/version.c |
diffstat | 3 files changed, 15 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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