On Wed, 21 Jun 2006 at 7:29pm, Eric Arnold wrote:
> On 6/21/06, Hari Krishna Dara <[EMAIL PROTECTED]> wrote:
> >
> > Just wanted to add to the below that the problem is not just chaining
> > functions, but using the return value of the function itself. If the
> > function returns a dictionary (and probably a list), you can't use it to
> > access its members, so something like this will also fail:
> >
> > let t.T()['abc'] = 'xyz'
> >
> > However, using it in an expression works fine, e.g.,:
> >
> > return t.T()['abc']
> >
> > --
> > Thanks,
> > Hari
> >
> > On Wed, 21 Jun 2006 at 3:38pm, Hari Krishna Dara wrote:
> >
> > >
> > > I found a problem with chaining function calls through the new
> > > dictionary functions. Here is some code demonstrate the problem, if you
> > > execute this code, the last line generates an E488 error, where as the
> > > previous lines combines (they are equivalent) works fine.
> > >
> > > let tt = {}
> > > function! tt.TT()
> > > echomsg 'This is TT'
> > > endfunction
> > >
> > > let t = {'tt': tt}
> > > function t.T()
> > > return self.tt
> > > endfunction
> > >
> > > let tmptt = t.T()
> > > call tmptt.TT()
> > > call t.T().TT()
> > >
> > >
>
>
>
>
>
> From: Richard Emberson <[EMAIL PROTECTED]>
> To: [email protected]
> Date: May 18, 2006 4:42 PM
> Subject: vim patch: fixing resetting dictionary function
>
> Try this without the fix and you get:
> ADD
> n=9
> Error detected while processing /home/emberson/vim/foo.vim:
> line 14:
> E475: Invalid argument: 1
> ADD
> n=9
>
> Note that "1" is the index of the function in the dictionary.
>
> Try it with the fix you get:
> ADD
> n=9
> MULTIPLY
> n=20
>
> script:
>
> let x = {}
>
> function x.foo(a,b) dict
> echo "ADD"
> return a:a + a:b
> endfunction
>
> let n = x.foo(4,5)
> echo "n=" . n
>
> function! x.foo(a,b) dict
> echo "MULTIPLY"
> return a:a * a:b
> endfunction
>
> let n = x.foo(4,5)
> echo "n=" . n
Doesn't this seem like a different problem? Or did you already verify
that the same patch fixes this issue as well?
--
Thanks,
Hari
>
>
> *** eval.c 2006-06-15 11:05:16.000000000 -0700
> --- eval.c.original 2006-06-15 11:02:59.000000000 -0700
> ***************
> *** 18407,18435 ****
> j = 3;
> else
> j = 0;
> - /* The name can be an index into a dictionary. */
> - /* There maybe a better way, this demonstrates a fix. */
> - while (arg[j] != NUL && VIM_ISDIGIT(arg[j]))
> - ++j;
> - if (arg[j] != NUL)
> - {
> - if (*arg == K_SPECIAL)
> - j = 3;
> - else
> - j = 0;
> - while (arg[j] != NUL && (j == 0 ? eval_isnamec1(arg[j])
> - :
eval_isnamec(arg[j])))
> - ++j;
> - if (arg[j] != NUL)
> - emsg_funcname(_(e_invarg2), arg);
> - }
> - /*
> while (arg[j] != NUL && (j == 0 ? eval_isnamec1(arg[j])
> : eval_isnamec(arg[j])))
> ++j;
> if (arg[j] != NUL)
> emsg_funcname(_(e_invarg2), arg);
> - */
> }
> }
>
> --- 18407,18417 ----
>
>
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com