aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval/typval.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/eval/typval.c')
-rw-r--r--src/nvim/eval/typval.c84
1 files changed, 48 insertions, 36 deletions
diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c
index 6300ce6150..3e37e8cbb6 100644
--- a/src/nvim/eval/typval.c
+++ b/src/nvim/eval/typval.c
@@ -63,7 +63,7 @@ void list_write_log(const char *const fname)
FileDescriptor fp;
const int fo_ret = file_open(&fp, fname, kFileCreate|kFileAppend, 0600);
if (fo_ret != 0) {
- emsgf(_("E5142: Failed to open file %s: %s"), fname, os_strerror(fo_ret));
+ semsg(_("E5142: Failed to open file %s: %s"), fname, os_strerror(fo_ret));
return;
}
for (ListLog *chunk = list_log_first; chunk != NULL;) {
@@ -85,7 +85,7 @@ void list_write_log(const char *const fname)
sizeof(chunk->entries[0]) * (chunk->size - i));
chunk->size -= i;
}
- emsgf(_("E5143: Failed to write to file %s: %s"),
+ semsg(_("E5143: Failed to write to file %s: %s"),
fname, os_strerror((int)fw_ret));
return;
}
@@ -96,7 +96,7 @@ void list_write_log(const char *const fname)
}
const int fc_ret = file_close(&fp, true);
if (fc_ret != 0) {
- emsgf(_("E5144: Failed to close file %s: %s"), fname, os_strerror(fc_ret));
+ semsg(_("E5144: Failed to close file %s: %s"), fname, os_strerror(fc_ret));
}
}
@@ -1041,7 +1041,7 @@ const char *tv_list_find_str(list_T *const l, const int n)
{
const listitem_T *const li = tv_list_find(l, n);
if (li == NULL) {
- EMSG2(_(e_listidx), (int64_t)n);
+ semsg(_(e_listidx), (int64_t)n);
return NULL;
}
return tv_get_string(TV_LIST_ITEM_TV(li));
@@ -1399,7 +1399,7 @@ void tv_dict_item_remove(dict_T *const dict, dictitem_T *const item)
{
hashitem_T *const hi = hash_find(&dict->dv_hashtab, item->di_key);
if (HASHITEM_EMPTY(hi)) {
- emsgf(_(e_intern2), "tv_dict_item_remove()");
+ semsg(_(e_intern2), "tv_dict_item_remove()");
} else {
hash_remove(&dict->dv_hashtab, hi);
}
@@ -1687,7 +1687,7 @@ bool tv_dict_get_callback(dict_T *const d, const char *const key, const ptrdiff_
}
if (!tv_is_func(di->di_tv) && di->di_tv.v_type != VAR_STRING) {
- EMSG(_("E6000: Argument is not a function or function name"));
+ emsg(_("E6000: Argument is not a function or function name"));
return false;
}
@@ -1961,7 +1961,7 @@ void tv_dict_extend(dict_T *const d1, dict_T *const d2, const char *const action
NULL);
}
} else if (*action == 'e') {
- emsgf(_("E737: Key already exists: %s"), di2->di_key);
+ semsg(_("E737: Key already exists: %s"), di2->di_key);
break;
} else if (*action == 'f' && di2 != di1) {
typval_T oldtv;
@@ -2599,7 +2599,7 @@ void tv_copy(const typval_T *const from, typval_T *const to)
}
break;
case VAR_UNKNOWN:
- emsgf(_(e_intern2), "tv_copy(UNKNOWN)");
+ semsg(_(e_intern2), "tv_copy(UNKNOWN)");
break;
}
}
@@ -2620,7 +2620,7 @@ void tv_item_lock(typval_T *const tv, const int deep, const bool lock, const boo
static int recurse = 0;
if (recurse >= DICT_MAXNEST) {
- EMSG(_("E743: variable nested too deep for (un)lock"));
+ emsg(_("E743: variable nested too deep for (un)lock"));
return;
}
if (deep == 0) {
@@ -2778,7 +2778,7 @@ bool var_check_lock(VarLockStatus lock, const char *name, size_t name_len)
name_len = strlen(name);
}
- emsgf(_(error_message), (int)name_len, name);
+ semsg(_(error_message), (int)name_len, name);
return true;
}
@@ -2896,29 +2896,29 @@ bool tv_check_str_or_nr(const typval_T *const tv)
case VAR_STRING:
return true;
case VAR_FLOAT:
- EMSG(_("E805: Expected a Number or a String, Float found"));
+ emsg(_("E805: Expected a Number or a String, Float found"));
return false;
case VAR_PARTIAL:
case VAR_FUNC:
- EMSG(_("E703: Expected a Number or a String, Funcref found"));
+ emsg(_("E703: Expected a Number or a String, Funcref found"));
return false;
case VAR_LIST:
- EMSG(_("E745: Expected a Number or a String, List found"));
+ emsg(_("E745: Expected a Number or a String, List found"));
return false;
case VAR_DICT:
- EMSG(_("E728: Expected a Number or a String, Dictionary found"));
+ emsg(_("E728: Expected a Number or a String, Dictionary found"));
return false;
case VAR_BLOB:
- EMSG(_("E974: Expected a Number or a String, Blob found"));
+ emsg(_("E974: Expected a Number or a String, Blob found"));
return false;
case VAR_BOOL:
- EMSG(_("E5299: Expected a Number or a String, Boolean found"));
+ emsg(_("E5299: Expected a Number or a String, Boolean found"));
return false;
case VAR_SPECIAL:
- EMSG(_("E5300: Expected a Number or a String"));
+ emsg(_("E5300: Expected a Number or a String"));
return false;
case VAR_UNKNOWN:
- EMSG2(_(e_intern2), "tv_check_str_or_nr(UNKNOWN)");
+ semsg(_(e_intern2), "tv_check_str_or_nr(UNKNOWN)");
return false;
}
abort();
@@ -2963,7 +2963,7 @@ bool tv_check_num(const typval_T *const tv)
case VAR_FLOAT:
case VAR_BLOB:
case VAR_UNKNOWN:
- EMSG(_(num_errors[tv->v_type]));
+ emsg(_(num_errors[tv->v_type]));
return false;
}
abort();
@@ -3008,7 +3008,7 @@ bool tv_check_str(const typval_T *const tv)
case VAR_FLOAT:
case VAR_BLOB:
case VAR_UNKNOWN:
- EMSG(_(str_errors[tv->v_type]));
+ emsg(_(str_errors[tv->v_type]));
return false;
}
abort();
@@ -3055,7 +3055,7 @@ varnumber_T tv_get_number_chk(const typval_T *const tv, bool *const ret_error)
case VAR_DICT:
case VAR_BLOB:
case VAR_FLOAT:
- EMSG(_(num_errors[tv->v_type]));
+ emsg(_(num_errors[tv->v_type]));
break;
case VAR_NUMBER:
return tv->vval.v_number;
@@ -3072,7 +3072,7 @@ varnumber_T tv_get_number_chk(const typval_T *const tv, bool *const ret_error)
case VAR_SPECIAL:
return 0;
case VAR_UNKNOWN:
- emsgf(_(e_intern2), "tv_get_number(UNKNOWN)");
+ semsg(_(e_intern2), "tv_get_number(UNKNOWN)");
break;
}
if (ret_error != NULL) {
@@ -3119,41 +3119,53 @@ float_T tv_get_float(const typval_T *const tv)
return tv->vval.v_float;
case VAR_PARTIAL:
case VAR_FUNC:
- EMSG(_("E891: Using a Funcref as a Float"));
+ emsg(_("E891: Using a Funcref as a Float"));
break;
case VAR_STRING:
- EMSG(_("E892: Using a String as a Float"));
+ emsg(_("E892: Using a String as a Float"));
break;
case VAR_LIST:
- EMSG(_("E893: Using a List as a Float"));
+ emsg(_("E893: Using a List as a Float"));
break;
case VAR_DICT:
- EMSG(_("E894: Using a Dictionary as a Float"));
+ emsg(_("E894: Using a Dictionary as a Float"));
break;
case VAR_BOOL:
- EMSG(_("E362: Using a boolean value as a Float"));
+ emsg(_("E362: Using a boolean value as a Float"));
break;
case VAR_SPECIAL:
- EMSG(_("E907: Using a special value as a Float"));
+ emsg(_("E907: Using a special value as a Float"));
break;
case VAR_BLOB:
- EMSG(_("E975: Using a Blob as a Float"));
+ emsg(_("E975: Using a Blob as a Float"));
break;
case VAR_UNKNOWN:
- emsgf(_(e_intern2), "tv_get_float(UNKNOWN)");
+ semsg(_(e_intern2), "tv_get_float(UNKNOWN)");
break;
}
return 0;
}
-// Give an error and return FAIL unless "tv" is a non-empty string.
+// Give an error and return FAIL unless "tv" is a string.
int tv_check_for_string(const typval_T *const tv)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_PURE
{
- if (tv->v_type != VAR_STRING
- || tv->vval.v_string == NULL
- || *tv->vval.v_string == NUL) {
- EMSG(_(e_stringreq));
+ if (tv->v_type != VAR_STRING) {
+ emsg(_(e_stringreq));
+ return FAIL;
+ }
+ return OK;
+}
+
+// Give an error and return FAIL unless "tv" is a non-empty string.
+int tv_check_for_nonempty_string(const typval_T *const tv)
+ FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_PURE
+{
+ if (tv_check_for_string(tv) == FAIL) {
+ return FAIL;
+ }
+ if (tv->vval.v_string == NULL || *tv->vval.v_string == NUL) {
+ emsg(_(e_non_empty_string_required));
return FAIL;
}
return OK;
@@ -3195,7 +3207,7 @@ const char *tv_get_string_buf_chk(const typval_T *const tv, char *const buf)
case VAR_FLOAT:
case VAR_BLOB:
case VAR_UNKNOWN:
- EMSG(_(str_errors[tv->v_type]));
+ emsg(_(str_errors[tv->v_type]));
return false;
}
return NULL;