changeset 23806:c0f2c6c56147 v8.2.2444

patch 8.2.2444: Vim9: compile error with combination of operator and list Commit: https://github.com/vim/vim/commit/e507ff15d52653dad3054ddc0073708977621c0c Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jan 31 21:47:42 2021 +0100 patch 8.2.2444: Vim9: compile error with combination of operator and list Problem: Vim9: compile error with combination of operator and list. Solution: Generate constants before parsing a list or dict. (closes https://github.com/vim/vim/issues/7757)
author Bram Moolenaar <Bram@vim.org>
date Sun, 31 Jan 2021 22:00:03 +0100
parents c17b61789da3
children 6e9cb7d9ff96
files src/testdir/test_vim9_expr.vim src/version.c src/vim9compile.c
diffstat 3 files changed, 11 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -1083,6 +1083,9 @@ def Test_expr5()
         assert_equal('a0.123', 'a' .. 0.123)
       endif
 
+      assert_equal(3, 1 + [2, 3, 4][0])
+      assert_equal(5, 2 + {key: 3}['key'])
+
       set digraph
       assert_equal('val: true', 'val: ' .. &digraph)
       set nodigraph
--- 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 */
 /**/
+    2444,
+/**/
     2443,
 /**/
     2442,
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -4121,13 +4121,17 @@ compile_expr7(
 	/*
 	 * List: [expr, expr]
 	 */
-	case '[':   ret = compile_list(arg, cctx, ppconst);
+	case '[':   if (generate_ppconst(cctx, ppconst) == FAIL)
+			return FAIL;
+		    ret = compile_list(arg, cctx, ppconst);
 		    break;
 
 	/*
 	 * Dictionary: {'key': val, 'key': val}
 	 */
-	case '{':   ret = compile_dict(arg, cctx, ppconst);
+	case '{':   if (generate_ppconst(cctx, ppconst) == FAIL)
+			return FAIL;
+		    ret = compile_dict(arg, cctx, ppconst);
 		    break;
 
 	/*