diff --git a/src/evalbuffer.c b/src/evalbuffer.c
index 3fb037c..77acf8f 100644
--- a/src/evalbuffer.c
+++ b/src/evalbuffer.c
@@ -287,10 +287,10 @@
 }
 
 /*
- * "appendbufline(buf, lnum, string/list)" function
+ * Set or append lines to a buffer.
  */
-    void
-f_appendbufline(typval_T *argvars, typval_T *rettv)
+    static void
+buf_set_append_line(typval_T *argvars, typval_T *rettv, int append)
 {
     linenr_T	lnum;
     buf_T	*buf;
@@ -307,11 +307,20 @@
     else
     {
 	lnum = tv_get_lnum_buf(&argvars[1], buf);
-	set_buffer_lines(buf, lnum, TRUE, &argvars[2], rettv);
+	set_buffer_lines(buf, lnum, append, &argvars[2], rettv);
     }
 }
 
 /*
+ * "appendbufline(buf, lnum, string/list)" function
+ */
+    void
+f_appendbufline(typval_T *argvars, typval_T *rettv)
+{
+    buf_set_append_line(argvars, rettv, TRUE);
+}
+
+/*
  * "bufadd(expr)" function
  */
     void
@@ -837,23 +846,7 @@
     void
 f_setbufline(typval_T *argvars, typval_T *rettv)
 {
-    linenr_T	lnum;
-    buf_T	*buf;
-
-    if (in_vim9script()
-	    && (check_for_buffer_arg(argvars, 0) == FAIL
-		|| check_for_lnum_arg(argvars, 1) == FAIL
-		|| check_for_string_or_number_or_list_arg(argvars, 2) == FAIL))
-	return;
-
-    buf = tv_get_buf(&argvars[0], FALSE);
-    if (buf == NULL)
-	rettv->vval.v_number = 1; // FAIL
-    else
-    {
-	lnum = tv_get_lnum_buf(&argvars[1], buf);
-	set_buffer_lines(buf, lnum, FALSE, &argvars[2], rettv);
-    }
+    buf_set_append_line(argvars, rettv, FALSE);
 }
 
 /*
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 7fc1821..87b498a 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -98,8 +98,6 @@
 #ifdef FEAT_LUA
 static void f_luaeval(typval_T *argvars, typval_T *rettv);
 #endif
-static void f_maparg(typval_T *argvars, typval_T *rettv);
-static void f_mapcheck(typval_T *argvars, typval_T *rettv);
 static void f_match(typval_T *argvars, typval_T *rettv);
 static void f_matchend(typval_T *argvars, typval_T *rettv);
 static void f_matchlist(typval_T *argvars, typval_T *rettv);
@@ -6734,40 +6732,6 @@
 }
 #endif
 
-/*
- * "maparg()" function
- */
-    static void
-f_maparg(typval_T *argvars, typval_T *rettv)
-{
-    if (in_vim9script()
-	    && (check_for_string_arg(argvars, 0) == FAIL
-		|| check_for_opt_string_arg(argvars, 1) == FAIL
-		|| (argvars[1].v_type != VAR_UNKNOWN
-		    && (check_for_opt_bool_arg(argvars, 2) == FAIL
-			|| (argvars[2].v_type != VAR_UNKNOWN
-			    && check_for_opt_bool_arg(argvars, 3) == FAIL)))))
-		return;
-
-    get_maparg(argvars, rettv, TRUE);
-}
-
-/*
- * "mapcheck()" function
- */
-    static void
-f_mapcheck(typval_T *argvars, typval_T *rettv)
-{
-    if (in_vim9script()
-	    && (check_for_string_arg(argvars, 0) == FAIL
-		|| check_for_opt_string_arg(argvars, 1) == FAIL
-		|| (argvars[1].v_type != VAR_UNKNOWN
-		    && check_for_opt_bool_arg(argvars, 2) == FAIL)))
-	return;
-
-    get_maparg(argvars, rettv, FALSE);
-}
-
 typedef enum
 {
     MATCH_END,	    // matchend()
diff --git a/src/map.c b/src/map.c
index 09339a2..4787400 100644
--- a/src/map.c
+++ b/src/map.c
@@ -2184,7 +2184,7 @@
     return NULL;
 }
 
-    void
+    static void
 get_maparg(typval_T *argvars, typval_T *rettv, int exact)
 {
     char_u	*keys;
@@ -2288,6 +2288,40 @@
 }
 
 /*
+ * "maparg()" function
+ */
+    void
+f_maparg(typval_T *argvars, typval_T *rettv)
+{
+    if (in_vim9script()
+	    && (check_for_string_arg(argvars, 0) == FAIL
+		|| check_for_opt_string_arg(argvars, 1) == FAIL
+		|| (argvars[1].v_type != VAR_UNKNOWN
+		    && (check_for_opt_bool_arg(argvars, 2) == FAIL
+			|| (argvars[2].v_type != VAR_UNKNOWN
+			    && check_for_opt_bool_arg(argvars, 3) == FAIL)))))
+		return;
+
+    get_maparg(argvars, rettv, TRUE);
+}
+
+/*
+ * "mapcheck()" function
+ */
+    void
+f_mapcheck(typval_T *argvars, typval_T *rettv)
+{
+    if (in_vim9script()
+	    && (check_for_string_arg(argvars, 0) == FAIL
+		|| check_for_opt_string_arg(argvars, 1) == FAIL
+		|| (argvars[1].v_type != VAR_UNKNOWN
+		    && check_for_opt_bool_arg(argvars, 2) == FAIL)))
+	return;
+
+    get_maparg(argvars, rettv, FALSE);
+}
+
+/*
  * "mapset()" function
  */
     void
diff --git a/src/proto/map.pro b/src/proto/map.pro
index 6da455a..3592623 100644
--- a/src/proto/map.pro
+++ b/src/proto/map.pro
@@ -17,7 +17,8 @@
 int put_escstr(FILE *fd, char_u *strstart, int what);
 void check_map_keycodes(void);
 char_u *check_map(char_u *keys, int mode, int exact, int ign_mod, int abbr, mapblock_T **mp_ptr, int *local_ptr);
-void get_maparg(typval_T *argvars, typval_T *rettv, int exact);
+void f_maparg(typval_T *argvars, typval_T *rettv);
+void f_mapcheck(typval_T *argvars, typval_T *rettv);
 void f_mapset(typval_T *argvars, typval_T *rettv);
 void init_mappings(void);
 void add_map(char_u *map, int mode);
diff --git a/src/version.c b/src/version.c
index 046d1e7..ebd2c56 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3252,
+/**/
     3251,
 /**/
     3250,
