]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.1149: Vim9: :eval command not handled properly v8.2.1149
authorBram Moolenaar <Bram@vim.org>
Mon, 6 Jul 2020 21:04:49 +0000 (23:04 +0200)
committerBram Moolenaar <Bram@vim.org>
Mon, 6 Jul 2020 21:04:49 +0000 (23:04 +0200)
Problem:    Vim9: :eval command not handled properly.
Solution:   Compile the :eval command. (closes #6408)

src/testdir/test_vim9_cmd.vim
src/version.c
src/vim9compile.c

index d7c01aae97ca5f261a3ee801951a0de9daf42036..14af261713242800dd97715a85377a49ddf15a30 100644 (file)
@@ -248,5 +248,20 @@ def Test_bar_after_command()
   endif
 enddef
 
+def Test_eval_command()
+  let from = 3
+  let to = 5
+  g:val = 111
+  def Increment(nrs: list<number>)
+    for nr in nrs
+      g:val += nr
+    endfor
+  enddef
+  eval range(from, to)
+        ->Increment()
+  assert_equal(111 + 3 + 4 + 5, g:val)
+  unlet g:val
+enddef
+
 
 " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker
index 867eaf55f21e1f3de6c9b1d897c155489fcd5075..3c8b1431c51fc405e261a92cae7c1701ad12e306 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1149,
 /**/
     1148,
 /**/
index c876da0751c6f1ae86e64807e6cb29d60fefc0f8..ff6668fe46ceca5ecf1031cc05c88c4a977b7bfe 100644 (file)
@@ -3852,7 +3852,6 @@ compile_expr7(
                        char_u *start = skipwhite(*arg + 1);
 
                        // Find out what comes after the arguments.
-                       // TODO: pass getline function
                        ret = get_function_args(&start, '-', NULL,
                                           NULL, NULL, NULL, TRUE, NULL, NULL);
                        if (ret != FAIL && *start == '>')
@@ -6990,21 +6989,12 @@ compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx)
            }
 
            // Expression or function call.
-           if (ea.cmdidx == CMD_eval)
+           if (ea.cmdidx != CMD_eval)
            {
-               p = ea.cmd;
-               if (compile_expr0(&p, &cctx) == FAIL)
-                   goto erret;
-
-               // drop the return value
-               generate_instr_drop(&cctx, ISN_DROP, 1);
-
-               line = skipwhite(p);
-               continue;
+               // CMD_let cannot happen, compile_assignment() above is used
+               iemsg("Command from find_ex_command() not handled");
+               goto erret;
            }
-           // CMD_let cannot happen, compile_assignment() above is used
-           iemsg("Command from find_ex_command() not handled");
-           goto erret;
        }
 
        p = skipwhite(p);
@@ -7124,6 +7114,16 @@ compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx)
                    line = compile_throw(p, &cctx);
                    break;
 
+           case CMD_eval:
+                   if (compile_expr0(&p, &cctx) == FAIL)
+                       goto erret;
+
+                   // drop the return value
+                   generate_instr_drop(&cctx, ISN_DROP, 1);
+
+                   line = skipwhite(p);
+                   break;
+
            case CMD_echo:
            case CMD_echon:
            case CMD_execute: