Mercurial > vim
comparison src/viminfo.c @ 19102:ba9f50bfda83 v8.2.0111
patch 8.2.0111: VAR_SPECIAL is also used for booleans
Commit: https://github.com/vim/vim/commit/9b4a15d5dba354d2e1e02871470bad103f34769a
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Jan 11 16:05:23 2020 +0100
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.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 11 Jan 2020 16:15:04 +0100 |
parents | de2d1820215a |
children | 94eda51ba9ba |
comparison
equal
deleted
inserted
replaced
19101:7c682fab000b | 19102:ba9f50bfda83 |
---|---|
1231 #ifdef FEAT_FLOAT | 1231 #ifdef FEAT_FLOAT |
1232 else if (type == VAR_FLOAT) | 1232 else if (type == VAR_FLOAT) |
1233 (void)string2float(tab + 1, &tv.vval.v_float); | 1233 (void)string2float(tab + 1, &tv.vval.v_float); |
1234 #endif | 1234 #endif |
1235 else | 1235 else |
1236 { | |
1236 tv.vval.v_number = atol((char *)tab + 1); | 1237 tv.vval.v_number = atol((char *)tab + 1); |
1238 if (type == VAR_SPECIAL && (tv.vval.v_number == VVAL_FALSE | |
1239 || tv.vval.v_number == VVAL_TRUE)) | |
1240 tv.v_type = VAR_BOOL; | |
1241 } | |
1237 if (type == VAR_DICT || type == VAR_LIST) | 1242 if (type == VAR_DICT || type == VAR_LIST) |
1238 { | 1243 { |
1239 typval_T *etv = eval_expr(tv.vval.v_string, NULL); | 1244 typval_T *etv = eval_expr(tv.vval.v_string, NULL); |
1240 | 1245 |
1241 if (etv == NULL) | 1246 if (etv == NULL) |
1310 this_var = HI2DI(hi); | 1315 this_var = HI2DI(hi); |
1311 if (var_flavour(this_var->di_key) == VAR_FLAVOUR_VIMINFO) | 1316 if (var_flavour(this_var->di_key) == VAR_FLAVOUR_VIMINFO) |
1312 { | 1317 { |
1313 switch (this_var->di_tv.v_type) | 1318 switch (this_var->di_tv.v_type) |
1314 { | 1319 { |
1315 case VAR_STRING: s = "STR"; break; | 1320 case VAR_STRING: s = "STR"; break; |
1316 case VAR_NUMBER: s = "NUM"; break; | 1321 case VAR_NUMBER: s = "NUM"; break; |
1317 case VAR_FLOAT: s = "FLO"; break; | 1322 case VAR_FLOAT: s = "FLO"; break; |
1318 case VAR_DICT: s = "DIC"; break; | 1323 case VAR_DICT: s = "DIC"; break; |
1319 case VAR_LIST: s = "LIS"; break; | 1324 case VAR_LIST: s = "LIS"; break; |
1320 case VAR_BLOB: s = "BLO"; break; | 1325 case VAR_BLOB: s = "BLO"; break; |
1326 case VAR_BOOL: s = "XPL"; break; // backwards compat. | |
1321 case VAR_SPECIAL: s = "XPL"; break; | 1327 case VAR_SPECIAL: s = "XPL"; break; |
1322 | 1328 |
1323 case VAR_UNKNOWN: | 1329 case VAR_UNKNOWN: |
1324 case VAR_FUNC: | 1330 case VAR_FUNC: |
1325 case VAR_PARTIAL: | 1331 case VAR_PARTIAL: |
1326 case VAR_JOB: | 1332 case VAR_JOB: |
1327 case VAR_CHANNEL: | 1333 case VAR_CHANNEL: |
1328 continue; | 1334 continue; |
1329 } | 1335 } |
1330 fprintf(fp, "!%s\t%s\t", this_var->di_key, s); | 1336 fprintf(fp, "!%s\t%s\t", this_var->di_key, s); |
1331 if (this_var->di_tv.v_type == VAR_SPECIAL) | 1337 if (this_var->di_tv.v_type == VAR_BOOL |
1338 || this_var->di_tv.v_type == VAR_SPECIAL) | |
1332 { | 1339 { |
1340 // do not use "v:true" but "1" | |
1333 sprintf((char *)numbuf, "%ld", | 1341 sprintf((char *)numbuf, "%ld", |
1334 (long)this_var->di_tv.vval.v_number); | 1342 (long)this_var->di_tv.vval.v_number); |
1335 p = numbuf; | 1343 p = numbuf; |
1336 tofree = NULL; | 1344 tofree = NULL; |
1337 } | 1345 } |