diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-04-14 18:24:44 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-14 18:24:44 +0800 |
commit | c15939c1f7479be6c1e0a73126b4d62aece28f74 (patch) | |
tree | dd54e88754d71073fb58224fc0ba2891ef0ca7ed /src/nvim/eval/typval.c | |
parent | 7caf0eafd83b5a92f2ff219b3a64ffae4174b9af (diff) | |
parent | 3be966f725bfefd7215acd0aad155c94b813d53f (diff) | |
download | rneovim-c15939c1f7479be6c1e0a73126b4d62aece28f74.tar.gz rneovim-c15939c1f7479be6c1e0a73126b4d62aece28f74.tar.bz2 rneovim-c15939c1f7479be6c1e0a73126b4d62aece28f74.zip |
Merge pull request #23084 from zeertzjq/vim-8.2.1794
vim-patch:8.2.{1794,1798},9.0.1452
Diffstat (limited to 'src/nvim/eval/typval.c')
-rw-r--r-- | src/nvim/eval/typval.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c index 3e67571053..91be41751e 100644 --- a/src/nvim/eval/typval.c +++ b/src/nvim/eval/typval.c @@ -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; +} |