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
--- 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,