summaryrefslogtreecommitdiffstats
path: root/src/evalfunc.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-12-24 10:48:30 +0000
committerBram Moolenaar <Bram@vim.org>2021-12-24 10:48:30 +0000
commit51e64b2789eb7e60f7c5892a43426ab4ec1a54aa (patch)
treed5c244007c00956beeea7618d7aebc19f0593085 /src/evalfunc.c
parent310091d20f26f6472fefc31e19004684f3d640bf (diff)
patch 8.2.3879: getreg() and getregtype() contain dead codev8.2.3879
Problem: getreg() and getregtype() contain dead code. Solution: Remove the needless check. (closes #9392) Also refactor to put common code in a shared function.
Diffstat (limited to 'src/evalfunc.c')
-rw-r--r--src/evalfunc.c93
1 files changed, 46 insertions, 47 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c
index f42650ebb2..2f7e4e7e5a 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -4675,16 +4675,42 @@ f_getpos(typval_T *argvars, typval_T *rettv)
}
/*
+ * Common between getreg() and getregtype(): get the register name from the
+ * first argument.
+ * Returns zero on error.
+ */
+ static int
+getreg_get_regname(typval_T *argvars)
+{
+ char_u *strregname;
+
+ if (argvars[0].v_type != VAR_UNKNOWN)
+ {
+ strregname = tv_get_string_chk(&argvars[0]);
+ if (strregname != NULL && in_vim9script() && STRLEN(strregname) > 1)
+ {
+ semsg(_(e_register_name_must_be_one_char_str), strregname);
+ strregname = NULL;
+ }
+ if (strregname == NULL) // type error; errmsg already given
+ return 0;
+ }
+ else
+ // Default to v:register
+ strregname = get_vim_var_str(VV_REG);
+
+ return *strregname == 0 ? '"' : *strregname;
+}
+
+/*
* "getreg()" function
*/
static void
f_getreg(typval_T *argvars, typval_T *rettv)
{
- char_u *strregname;
int regname;
int arg2 = FALSE;
int return_list = FALSE;
- int error = FALSE;
if (in_vim9script()
&& (check_for_opt_string_arg(argvars, 0) == FAIL
@@ -4694,32 +4720,21 @@ f_getreg(typval_T *argvars, typval_T *rettv)
&& check_for_opt_bool_arg(argvars, 2) == FAIL)))))
return;
- if (argvars[0].v_type != VAR_UNKNOWN)
+ regname = getreg_get_regname(argvars);
+ if (regname == 0)
+ return;
+
+ if (argvars[0].v_type != VAR_UNKNOWN && argvars[1].v_type != VAR_UNKNOWN)
{
- strregname = tv_get_string_chk(&argvars[0]);
- if (strregname == NULL)
- error = TRUE;
- else if (in_vim9script() && STRLEN(strregname) > 1)
- {
- semsg(_(e_register_name_must_be_one_char_str), strregname);
- error = TRUE;
- }
- if (argvars[1].v_type != VAR_UNKNOWN)
- {
- arg2 = (int)tv_get_bool_chk(&argvars[1], &error);
- if (!error && argvars[2].v_type != VAR_UNKNOWN)
- return_list = (int)tv_get_bool_chk(&argvars[2], &error);
- }
- }
- else
- strregname = get_vim_var_str(VV_REG);
+ int error = FALSE;
- if (error)
- return;
+ arg2 = (int)tv_get_bool_chk(&argvars[1], &error);
- regname = (strregname == NULL ? '"' : *strregname);
- if (regname == 0)
- regname = '"';
+ if (!error && argvars[2].v_type != VAR_UNKNOWN)
+ return_list = (int)tv_get_bool_chk(&argvars[2], &error);
+ if (error)
+ return;
+ }
if (return_list)
{
@@ -4745,36 +4760,20 @@ f_getreg(typval_T *argvars, typval_T *rettv)
static void
f_getregtype(typval_T *argvars, typval_T *rettv)
{
- char_u *strregname;
int regname;
char_u buf[NUMBUFLEN + 2];
long reglen = 0;
+ // on error return an empty string
+ rettv->v_type = VAR_STRING;
+ rettv->vval.v_string = NULL;
+
if (in_vim9script() && check_for_opt_string_arg(argvars, 0) == FAIL)
return;
- if (argvars[0].v_type != VAR_UNKNOWN)
- {
- strregname = tv_get_string_chk(&argvars[0]);
- if (strregname != NULL && in_vim9script() && STRLEN(strregname) > 1)
- {
- semsg(_(e_register_name_must_be_one_char_str), strregname);
- strregname = NULL;
- }
- if (strregname == NULL) // type error; errmsg already given
- {
- rettv->v_type = VAR_STRING;
- rettv->vval.v_string = NULL;
- return;
- }
- }
- else
- // Default to v:register
- strregname = get_vim_var_str(VV_REG);
-
- regname = (strregname == NULL ? '"' : *strregname);
+ regname = getreg_get_regname(argvars);
if (regname == 0)
- regname = '"';
+ return;
buf[0] = NUL;
buf[1] = NUL;