patch 8.2.1562: Vim9: error when using "%" where a buffer is expected

Problem:    Vim9: error when using "%" where a buffer is expected.
Solution:   Add tv_get_buf_from_arg(). (closes #6814)
diff --git a/src/evalbuffer.c b/src/evalbuffer.c
index 5cf884a..3004415 100644
--- a/src/evalbuffer.c
+++ b/src/evalbuffer.c
@@ -364,16 +364,7 @@
     if (tv->v_type == VAR_UNKNOWN)
 	buf = curbuf;
     else
-    {
-	++emsg_off;
-	buf = tv_get_buf(tv, FALSE);
-	--emsg_off;
-	if (buf == NULL
-		&& tv->v_type != VAR_NUMBER
-		&& tv->v_type != VAR_STRING)
-	    // issue errmsg for type error
-	    (void)tv_get_number(tv);
-    }
+	buf = tv_get_buf_from_arg(tv);
     rettv->v_type = VAR_STRING;
     if (buf != NULL && buf->b_fname != NULL)
 	rettv->vval.v_string = vim_strsave(buf->b_fname);
@@ -394,13 +385,7 @@
     if (argvars[0].v_type == VAR_UNKNOWN)
 	buf = curbuf;
     else
-    {
-	if (argvars[0].v_type != VAR_STRING)
-	    (void)tv_get_number(&argvars[0]);    // issue errmsg if type error
-	++emsg_off;
-	buf = tv_get_buf(&argvars[0], FALSE);
-	--emsg_off;
-    }
+	buf = tv_get_buf_from_arg(&argvars[0]);
 
     // If the buffer isn't found and the second argument is not zero create a
     // new buffer.
@@ -425,9 +410,7 @@
     int		winnr = 0;
     buf_T	*buf;
 
-    (void)tv_get_number(&argvars[0]);	    // issue errmsg if type error
-    ++emsg_off;
-    buf = tv_get_buf(&argvars[0], TRUE);
+    buf = tv_get_buf_from_arg(&argvars[0]);
     FOR_ALL_WINDOWS(wp)
     {
 	++winnr;
@@ -435,7 +418,6 @@
 	    break;
     }
     rettv->vval.v_number = (wp != NULL ? (get_nr ? winnr : wp->w_id) : -1);
-    --emsg_off;
 }
 
 /*
@@ -662,10 +644,7 @@
     else if (argvars[0].v_type != VAR_UNKNOWN)
     {
 	// Information about one buffer.  Argument specifies the buffer
-	(void)tv_get_number(&argvars[0]);   // issue errmsg if type error
-	++emsg_off;
-	argbuf = tv_get_buf(&argvars[0], FALSE);
-	--emsg_off;
+	argbuf = tv_get_buf_from_arg(&argvars[0]);
 	if (argbuf == NULL)
 	    return;
     }
@@ -752,10 +731,7 @@
     linenr_T	end;
     buf_T	*buf;
 
-    (void)tv_get_number(&argvars[0]);	    // issue errmsg if type error
-    ++emsg_off;
-    buf = tv_get_buf(&argvars[0], FALSE);
-    --emsg_off;
+    buf = tv_get_buf_from_arg(&argvars[0]);
 
     lnum = tv_get_lnum_buf(&argvars[1], buf);
     if (argvars[2].v_type == VAR_UNKNOWN)