Hi Bram!

On Do, 22 Nov 2012, Bram Moolenaar wrote:

> 
> Andy Wokula wrote:
> 
> > " Vim Parsing Bug
> > 
> > func! Add2(x1, x2)
> >      return a:x1 + a:x2
> > endfunc
> > 
> > :echo function('Add2')(2,3)
> > " 5 (ok)
> > 
> > " Bug:
> > :echo 1 ? function('Add2')(1,2) : function('Add2')(2,3)
> > :echo 0 ? function('Add2')(1,2) : function('Add2')(2,3)
> > 
> > " Error detected while processing D1223.vim:
> > " line   17:
> > " E110: Missing ')'
> > " E15: Invalid expression: (2,3)
> > " line   18:
> > " E109: Missing ':' after '?'
> > " E15: Invalid expression: 0 ? function('Add2')(1,2) : function('Add2')(2,3)
> > 
> > 
> > Adding parentheses  1 ? (...) : (...)  doesn't help.
> 
> Strange.  I'll add it to the todo list.

Problem is, in expr1 ? expr2 : expr3
Vim explicitly resets evaluate in the false case which leads to being 
rettv.v_type being VAR_UNKNOWN and then handle_subscript doesn't handle 
the subscript anymore.

Here is a patch:

diff --git a/src/eval.c b/src/eval.c
--- a/src/eval.c
+++ b/src/eval.c
@@ -19574,7 +19574,7 @@
     while (ret == OK
            && (**arg == '['
                || (**arg == '.' && rettv->v_type == VAR_DICT)
-               || (**arg == '(' && rettv->v_type == VAR_FUNC))
+               || (**arg == '(' && (rettv->v_type == VAR_FUNC || rettv->v_type 
== VAR_UNKNOWN)))
            && !vim_iswhite(*(*arg - 1)))
     {
        if (**arg == '(')


regards,
Christian
-- 
Niemand ist so gut oder so schlecht, wie er während seiner Scheidung
gemacht wird.
                -- J.J. Disenberg

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Reply via email to