mirror of
https://github.com/neovim/neovim.git
synced 2025-10-08 10:56:31 +00:00
vim-patch:8.2.1794: no falsy Coalescing operator
Problem: No falsy Coalescing operator.
Solution: Add the "??" operator. Fix mistake with function argument count.
92f26c256e
Cherry-pick tv2bool() into eval/typval.c.
Cherry-pick *??* tag from Vim runtime.
Co-authored-by: Bram Moolenaar <Bram@vim.org>
This commit is contained in:
@@ -4201,3 +4201,34 @@ const char *tv_get_string_buf(const typval_T *const tv, char *const buf)
|
||||
|
||||
return res != NULL ? res : "";
|
||||
}
|
||||
|
||||
/// Return true when "tv" is not falsy: non-zero, non-empty string, non-empty
|
||||
/// list, etc. Mostly like what JavaScript does, except that empty list and
|
||||
/// empty dictionary are false.
|
||||
bool tv2bool(const typval_T *const tv)
|
||||
{
|
||||
switch (tv->v_type) {
|
||||
case VAR_NUMBER:
|
||||
return tv->vval.v_number != 0;
|
||||
case VAR_FLOAT:
|
||||
return tv->vval.v_float != 0.0;
|
||||
case VAR_PARTIAL:
|
||||
return tv->vval.v_partial != NULL;
|
||||
case VAR_FUNC:
|
||||
case VAR_STRING:
|
||||
return tv->vval.v_string != NULL && *tv->vval.v_string != NUL;
|
||||
case VAR_LIST:
|
||||
return tv->vval.v_list != NULL && tv->vval.v_list->lv_len > 0;
|
||||
case VAR_DICT:
|
||||
return tv->vval.v_dict != NULL && tv->vval.v_dict->dv_hashtab.ht_used > 0;
|
||||
case VAR_BOOL:
|
||||
return tv->vval.v_bool == kBoolVarTrue;
|
||||
case VAR_SPECIAL:
|
||||
return tv->vval.v_special == kSpecialVarNull;
|
||||
case VAR_BLOB:
|
||||
return tv->vval.v_blob != NULL && tv->vval.v_blob->bv_ga.ga_len > 0;
|
||||
case VAR_UNKNOWN:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
Reference in New Issue
Block a user