Patch 8.0.0352
Problem: The condition for when a typval needs to be cleared is too
complicated.
Solution: Init the type to VAR_UNKNOWN and clear it always.
Files: src/eval.c
*** ../vim-8.0.0351/src/eval.c 2017-02-21 20:47:09.962394772 +0100
--- src/eval.c 2017-02-23 14:15:47.190004892 +0100
***************
*** 1898,1903 ****
--- 1898,1905 ----
* Loop until no more [idx] or .key is following.
*/
lp->ll_tv = &v->di_tv;
+ var1.v_type = VAR_UNKNOWN;
+ var2.v_type = VAR_UNKNOWN;
while (*p == '[' || (*p == '.' && lp->ll_tv->v_type == VAR_DICT))
{
if (!(lp->ll_tv->v_type == VAR_LIST && lp->ll_tv->vval.v_list != NULL)
***************
*** 1955,1962 ****
{
if (!quiet)
EMSG(_(e_dictrange));
! if (!empty1)
! clear_tv(&var1);
return NULL;
}
if (rettv != NULL && (rettv->v_type != VAR_LIST
--- 1957,1963 ----
{
if (!quiet)
EMSG(_(e_dictrange));
! clear_tv(&var1);
return NULL;
}
if (rettv != NULL && (rettv->v_type != VAR_LIST
***************
*** 1964,1971 ****
{
if (!quiet)
EMSG(_("E709: [:] requires a List value"));
! if (!empty1)
! clear_tv(&var1);
return NULL;
}
p = skipwhite(p + 1);
--- 1965,1971 ----
{
if (!quiet)
EMSG(_("E709: [:] requires a List value"));
! clear_tv(&var1);
return NULL;
}
p = skipwhite(p + 1);
***************
*** 1976,1990 ****
lp->ll_empty2 = FALSE;
if (eval1(&p, &var2, TRUE) == FAIL) /* recursive! */
{
! if (!empty1)
! clear_tv(&var1);
return NULL;
}
if (get_tv_string_chk(&var2) == NULL)
{
/* not a number or string */
! if (!empty1)
! clear_tv(&var1);
clear_tv(&var2);
return NULL;
}
--- 1976,1988 ----
lp->ll_empty2 = FALSE;
if (eval1(&p, &var2, TRUE) == FAIL) /* recursive! */
{
! clear_tv(&var1);
return NULL;
}
if (get_tv_string_chk(&var2) == NULL)
{
/* not a number or string */
! clear_tv(&var1);
clear_tv(&var2);
return NULL;
}
***************
*** 1998,2007 ****
{
if (!quiet)
EMSG(_(e_missbrac));
! if (!empty1)
! clear_tv(&var1);
! if (lp->ll_range && !lp->ll_empty2)
! clear_tv(&var2);
return NULL;
}
--- 1996,2003 ----
{
if (!quiet)
EMSG(_(e_missbrac));
! clear_tv(&var1);
! clear_tv(&var2);
return NULL;
}
***************
*** 2064,2079 ****
{
if (!quiet)
EMSG2(_(e_dictkey), key);
! if (len == -1)
! clear_tv(&var1);
return NULL;
}
if (len == -1)
lp->ll_newkey = vim_strsave(key);
else
lp->ll_newkey = vim_strnsave(key, len);
! if (len == -1)
! clear_tv(&var1);
if (lp->ll_newkey == NULL)
p = NULL;
break;
--- 2060,2073 ----
{
if (!quiet)
EMSG2(_(e_dictkey), key);
! clear_tv(&var1);
return NULL;
}
if (len == -1)
lp->ll_newkey = vim_strsave(key);
else
lp->ll_newkey = vim_strnsave(key, len);
! clear_tv(&var1);
if (lp->ll_newkey == NULL)
p = NULL;
break;
***************
*** 2086,2093 ****
return NULL;
}
! if (len == -1)
! clear_tv(&var1);
lp->ll_tv = &lp->ll_di->di_tv;
}
else
--- 2080,2086 ----
return NULL;
}
! clear_tv(&var1);
lp->ll_tv = &lp->ll_di->di_tv;
}
else
***************
*** 2098,2108 ****
if (empty1)
lp->ll_n1 = 0;
else
! {
lp->ll_n1 = (long)get_tv_number(&var1);
! /* is number or string */
! clear_tv(&var1);
! }
lp->ll_dict = NULL;
lp->ll_list = lp->ll_tv->vval.v_list;
lp->ll_li = list_find(lp->ll_list, lp->ll_n1);
--- 2091,2100 ----
if (empty1)
lp->ll_n1 = 0;
else
! /* is number or string */
lp->ll_n1 = (long)get_tv_number(&var1);
! clear_tv(&var1);
!
lp->ll_dict = NULL;
lp->ll_list = lp->ll_tv->vval.v_list;
lp->ll_li = list_find(lp->ll_list, lp->ll_n1);
***************
*** 2116,2123 ****
}
if (lp->ll_li == NULL)
{
! if (lp->ll_range && !lp->ll_empty2)
! clear_tv(&var2);
if (!quiet)
EMSGN(_(e_listidx), lp->ll_n1);
return NULL;
--- 2108,2114 ----
}
if (lp->ll_li == NULL)
{
! clear_tv(&var2);
if (!quiet)
EMSGN(_(e_listidx), lp->ll_n1);
return NULL;
***************
*** 2161,2166 ****
--- 2152,2158 ----
}
}
+ clear_tv(&var1);
return p;
}
*** ../vim-8.0.0351/src/version.c 2017-02-23 13:50:34.935755831 +0100
--- src/version.c 2017-02-23 14:23:51.678888394 +0100
***************
*** 766,767 ****
--- 766,769 ----
{ /* Add new patch number below this line */
+ /**/
+ 352,
/**/
--
hundred-and-one symptoms of being an internet addict:
2. You kiss your girlfriend's home page.
/// Bram Moolenaar -- [email protected] -- 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 ///
--
--
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
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.