mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 8.2.0111: VAR_SPECIAL is also used for booleans
Problem: VAR_SPECIAL is also used for booleans. Solution: Add VAR_BOOL for better type checking.
This commit is contained in:
@@ -1233,7 +1233,12 @@ read_viminfo_varlist(vir_T *virp, int writing)
|
||||
(void)string2float(tab + 1, &tv.vval.v_float);
|
||||
#endif
|
||||
else
|
||||
{
|
||||
tv.vval.v_number = atol((char *)tab + 1);
|
||||
if (type == VAR_SPECIAL && (tv.vval.v_number == VVAL_FALSE
|
||||
|| tv.vval.v_number == VVAL_TRUE))
|
||||
tv.v_type = VAR_BOOL;
|
||||
}
|
||||
if (type == VAR_DICT || type == VAR_LIST)
|
||||
{
|
||||
typval_T *etv = eval_expr(tv.vval.v_string, NULL);
|
||||
@@ -1312,12 +1317,13 @@ write_viminfo_varlist(FILE *fp)
|
||||
{
|
||||
switch (this_var->di_tv.v_type)
|
||||
{
|
||||
case VAR_STRING: s = "STR"; break;
|
||||
case VAR_NUMBER: s = "NUM"; break;
|
||||
case VAR_FLOAT: s = "FLO"; break;
|
||||
case VAR_DICT: s = "DIC"; break;
|
||||
case VAR_LIST: s = "LIS"; break;
|
||||
case VAR_BLOB: s = "BLO"; break;
|
||||
case VAR_STRING: s = "STR"; break;
|
||||
case VAR_NUMBER: s = "NUM"; break;
|
||||
case VAR_FLOAT: s = "FLO"; break;
|
||||
case VAR_DICT: s = "DIC"; break;
|
||||
case VAR_LIST: s = "LIS"; break;
|
||||
case VAR_BLOB: s = "BLO"; break;
|
||||
case VAR_BOOL: s = "XPL"; break; // backwards compat.
|
||||
case VAR_SPECIAL: s = "XPL"; break;
|
||||
|
||||
case VAR_UNKNOWN:
|
||||
@@ -1328,8 +1334,10 @@ write_viminfo_varlist(FILE *fp)
|
||||
continue;
|
||||
}
|
||||
fprintf(fp, "!%s\t%s\t", this_var->di_key, s);
|
||||
if (this_var->di_tv.v_type == VAR_SPECIAL)
|
||||
if (this_var->di_tv.v_type == VAR_BOOL
|
||||
|| this_var->di_tv.v_type == VAR_SPECIAL)
|
||||
{
|
||||
// do not use "v:true" but "1"
|
||||
sprintf((char *)numbuf, "%ld",
|
||||
(long)this_var->di_tv.vval.v_number);
|
||||
p = numbuf;
|
||||
|
Reference in New Issue
Block a user