]> granicus.if.org Git - vim/commitdiff
patch 8.2.3879: getreg() and getregtype() contain dead code v8.2.3879
authorBram Moolenaar <Bram@vim.org>
Fri, 24 Dec 2021 10:48:30 +0000 (10:48 +0000)
committerBram Moolenaar <Bram@vim.org>
Fri, 24 Dec 2021 10:48:30 +0000 (10:48 +0000)
Problem:    getreg() and getregtype() contain dead code.
Solution:   Remove the needless check. (closes #9392)  Also refactor to put
            common code in a shared function.

src/evalfunc.c
src/version.c

index f42650ebb23c12b7ae767eae4554d8b0efd84d10..2f7e4e7e5aa072509345bd598a6cbeb068e18c90 100644 (file)
@@ -4674,17 +4674,43 @@ f_getpos(typval_T *argvars, typval_T *rettv)
     getpos_both(argvars, rettv, FALSE, FALSE);
 }
 
+/*
+ * 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;
index e9d77a92408495ae6d5b5b37146a05977537696f..20c78d71bef2e513ee714cb35fba8ef371cd08eb 100644 (file)
@@ -749,6 +749,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3879,
 /**/
     3878,
 /**/