vim/7.4.086
2013-12-17 11:34:38 +01:00

146 lines
4.7 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

To: vim_dev@googlegroups.com
Subject: Patch 7.4.086
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------
Patch 7.4.086
Problem: Skipping over an expression when not evaluating it does not work
properly for dict members.
Solution: Skip over unrecognized expression. (ZyX)
Files: src/eval.c, src/testdir/test34.in, src/testdir/test34.ok
*** ../vim-7.4.085/src/eval.c 2013-11-08 04:30:06.000000000 +0100
--- src/eval.c 2013-11-11 04:11:38.000000000 +0100
***************
*** 19845,19868 ****
while (ret == OK
&& (**arg == '['
|| (**arg == '.' && rettv->v_type == VAR_DICT)
! || (**arg == '(' && rettv->v_type == VAR_FUNC))
&& !vim_iswhite(*(*arg - 1)))
{
if (**arg == '(')
{
/* need to copy the funcref so that we can clear rettv */
! functv = *rettv;
! rettv->v_type = VAR_UNKNOWN;
! /* Invoke the function. Recursive! */
! s = functv.vval.v_string;
ret = get_func_tv(s, (int)STRLEN(s), rettv, arg,
curwin->w_cursor.lnum, curwin->w_cursor.lnum,
&len, evaluate, selfdict);
/* Clear the funcref afterwards, so that deleting it while
* evaluating the arguments is possible (see test55). */
! clear_tv(&functv);
/* Stop the expression evaluation when immediately aborting on
* error, or when an interrupt occurred or an exception was thrown
--- 19845,19874 ----
while (ret == OK
&& (**arg == '['
|| (**arg == '.' && rettv->v_type == VAR_DICT)
! || (**arg == '(' && (!evaluate || rettv->v_type == VAR_FUNC)))
&& !vim_iswhite(*(*arg - 1)))
{
if (**arg == '(')
{
/* need to copy the funcref so that we can clear rettv */
! if (evaluate)
! {
! functv = *rettv;
! rettv->v_type = VAR_UNKNOWN;
! /* Invoke the function. Recursive! */
! s = functv.vval.v_string;
! }
! else
! s = (char_u *)"";
ret = get_func_tv(s, (int)STRLEN(s), rettv, arg,
curwin->w_cursor.lnum, curwin->w_cursor.lnum,
&len, evaluate, selfdict);
/* Clear the funcref afterwards, so that deleting it while
* evaluating the arguments is possible (see test55). */
! if (evaluate)
! clear_tv(&functv);
/* Stop the expression evaluation when immediately aborting on
* error, or when an interrupt occurred or an exception was thrown
*** ../vim-7.4.085/src/testdir/test34.in 2012-07-16 16:51:29.000000000 +0200
--- src/testdir/test34.in 2013-11-11 04:10:13.000000000 +0100
***************
*** 1,6 ****
--- 1,7 ----
Test for user functions.
Also test an <expr> mapping calling a function.
Also test that a builtin function cannot be replaced.
+ Also test for regression when calling arbitrary expression.
STARTTEST
:so small.vim
***************
*** 62,68 ****
[(one again:call append(line('$'), max([1, 2, 3]))
:call extend(g:, {'max': function('min')})
:call append(line('$'), max([1, 2, 3]))
! :$-7,$w! test.out
:delfunc Table
:delfunc Compute
:delfunc Expr1
--- 63,79 ----
[(one again:call append(line('$'), max([1, 2, 3]))
:call extend(g:, {'max': function('min')})
:call append(line('$'), max([1, 2, 3]))
! :try
! : " Regression: the first line below used to throw ?E110: Missing ')'?
! : " Second is here just to prove that this line is correct when not skipping
! : " rhs of &&.
! : $put =(0&&(function('tr'))(1, 2, 3))
! : $put =(1&&(function('tr'))(1, 2, 3))
! :catch
! : $put ='!!! Unexpected exception:'
! : $put =v:exception
! :endtry
! :$-9,$w! test.out
:delfunc Table
:delfunc Compute
:delfunc Expr1
*** ../vim-7.4.085/src/testdir/test34.ok 2012-07-16 16:43:15.000000000 +0200
--- src/testdir/test34.ok 2013-11-11 04:10:13.000000000 +0100
***************
*** 6,8 ****
--- 6,10 ----
1. one again
3
3
+ 0
+ 1
*** ../vim-7.4.085/src/version.c 2013-11-11 01:29:16.000000000 +0100
--- src/version.c 2013-11-11 04:15:59.000000000 +0100
***************
*** 740,741 ****
--- 740,743 ----
{ /* Add new patch number below this line */
+ /**/
+ 86,
/**/
--
ARTHUR: The swallow may fly south with the sun, or the house martin or the
plover seek warmer hot lands in winter, yet these are not strangers to
our land.
SOLDIER: Are you suggesting coconuts migrate?
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
/// 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 ///