summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0747
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0747')
-rw-r--r--data/vim/patches/8.1.0747139
1 files changed, 139 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0747 b/data/vim/patches/8.1.0747
new file mode 100644
index 000000000..44c07dd60
--- /dev/null
+++ b/data/vim/patches/8.1.0747
@@ -0,0 +1,139 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0747
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0747
+Problem: map() with a bad expression doesn't give an error. (Ingo Karkat)
+Solution: Check for giving an error message. (closes #3800)
+Files: src/eval.c, src/testdir/test_filter_map.vim
+
+
+*** ../vim-8.1.0746/src/eval.c 2019-01-13 23:38:33.383773361 +0100
+--- src/eval.c 2019-01-14 22:17:17.022853149 +0100
+***************
+*** 696,701 ****
+--- 696,725 ----
+ return (int)retval;
+ }
+
++ /*
++ * Call eval1() and give an error message if not done at a lower level.
++ */
++ static int
++ eval1_emsg(char_u **arg, typval_T *rettv, int evaluate)
++ {
++ int ret;
++ int did_emsg_before = did_emsg;
++ int called_emsg_before = called_emsg;
++
++ ret = eval1(arg, rettv, evaluate);
++ if (ret == FAIL)
++ {
++ // Report the invalid expression unless the expression evaluation has
++ // been cancelled due to an aborting error, an interrupt, or an
++ // exception, or we already gave a more specific error.
++ // Also check called_emsg for when using assert_fails().
++ if (!aborting() && did_emsg == did_emsg_before
++ && called_emsg == called_emsg_before)
++ semsg(_(e_invexpr2), arg);
++ }
++ return ret;
++ }
++
+ static int
+ eval_expr_typval(typval_T *expr, typval_T *argv, int argc, typval_T *rettv)
+ {
+***************
+*** 729,735 ****
+ if (s == NULL)
+ return FAIL;
+ s = skipwhite(s);
+! if (eval1(&s, rettv, TRUE) == FAIL)
+ return FAIL;
+ if (*s != NUL) /* check for trailing chars after expr */
+ {
+--- 753,759 ----
+ if (s == NULL)
+ return FAIL;
+ s = skipwhite(s);
+! if (eval1_emsg(&s, rettv, TRUE) == FAIL)
+ return FAIL;
+ if (*s != NUL) /* check for trailing chars after expr */
+ {
+***************
+*** 8464,8481 ****
+ while (*arg != NUL && *arg != '|' && *arg != '\n')
+ {
+ p = arg;
+! if (eval1(&arg, &rettv, !eap->skip) == FAIL)
+! {
+! /*
+! * Report the invalid expression unless the expression evaluation
+! * has been cancelled due to an aborting error, an interrupt, or an
+! * exception.
+! */
+! if (!aborting() && did_emsg == save_did_emsg)
+! semsg(_(e_invexpr2), p);
+! ret = FAIL;
+ break;
+- }
+
+ if (!eap->skip)
+ {
+--- 8488,8496 ----
+ while (*arg != NUL && *arg != '|' && *arg != '\n')
+ {
+ p = arg;
+! ret = eval1_emsg(&arg, &rettv, !eap->skip);
+! if (ret == FAIL)
+ break;
+
+ if (!eap->skip)
+ {
+***************
+*** 10758,10763 ****
+--- 10773,10779 ----
+ }
+ else
+ {
++ // argvars[0].v_type == VAR_LIST
+ vimvars[VV_KEY].vv_type = VAR_NUMBER;
+
+ for (li = l->lv_first; li != NULL; li = nli)
+*** ../vim-8.1.0746/src/testdir/test_filter_map.vim 2016-07-08 20:01:07.000000000 +0200
+--- src/testdir/test_filter_map.vim 2019-01-14 22:17:58.102558935 +0100
+***************
+*** 79,81 ****
+--- 79,86 ----
+ endfunc
+ call assert_equal({"foo": "f", "bar": "b", "baz": "b"}, map(copy(dict), function('s:filter4')))
+ endfunc
++
++ func Test_map_fails()
++ call assert_fails('call map([1], "42 +")', 'E15:')
++ call assert_fails('call filter([1], "42 +")', 'E15:')
++ endfunc
+*** ../vim-8.1.0746/src/version.c 2019-01-14 21:51:17.987461933 +0100
+--- src/version.c 2019-01-14 22:18:16.678425599 +0100
+***************
+*** 797,798 ****
+--- 797,800 ----
+ { /* Add new patch number below this line */
++ /**/
++ 747,
+ /**/
+
+--
+Spam seems to be something useful to novices. Later you realize that
+it's a bunch of indigestable junk that only clogs your system.
+Applies to both the food and the e-mail!
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///