patch 8.2.1149: Vim9: :eval command not handled properly
Problem: Vim9: :eval command not handled properly.
Solution: Compile the :eval command. (closes #6408)
diff --git a/src/vim9compile.c b/src/vim9compile.c
index c876da0..ff6668f 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -3852,7 +3852,6 @@
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 @@
}
// 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 @@
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: