diff --git a/src/blob.c b/src/blob.c
index cfc3d37..a6ab395 100644
--- a/src/blob.c
+++ b/src/blob.c
@@ -638,15 +638,14 @@
 }
 
 /*
- * reduce() Blob argvars[0] using the function 'funcname' with arguments in
- * 'funcexe' starting with the initial value argvars[2] and return the result
- * in 'rettv'.
+ * Implementaion of reduce() for Blob "argvars[0]" using the function "expr"
+ * starting with the optional initial value "argvars[2]" and return the result
+ * in "rettv".
  */
     void
 blob_reduce(
 	typval_T	*argvars,
-	char_u		*func_name,
-	funcexe_T	*funcexe,
+	typval_T	*expr,
 	typval_T	*rettv)
 {
     blob_T	*b = argvars[0].vval.v_blob;
@@ -684,7 +683,9 @@
 	argv[0] = *rettv;
 	argv[1].v_type = VAR_NUMBER;
 	argv[1].vval.v_number = blob_get(b, i);
-	r = call_func(func_name, -1, rettv, 2, argv, funcexe);
+
+	r = eval_expr_typval(expr, argv, 2, rettv);
+
 	clear_tv(&argv[0]);
 	if (r == FAIL || called_emsg != called_emsg_start)
 	    return;
diff --git a/src/list.c b/src/list.c
index a0af509..a7b2189 100644
--- a/src/list.c
+++ b/src/list.c
@@ -2999,15 +2999,14 @@
 }
 
 /*
- * reduce() List argvars[0] using the function 'funcname' with arguments in
- * 'funcexe' starting with the initial value argvars[2] and return the result
- * in 'rettv'.
+ * Implementation of reduce() for list "argvars[0]", using the function "expr"
+ * starting with the optional initial value argvars[2] and return the result in
+ * "rettv".
  */
     static void
 list_reduce(
 	typval_T	*argvars,
-	char_u		*func_name,
-	funcexe_T	*funcexe,
+	typval_T	*expr,
 	typval_T	*rettv)
 {
     list_T	*l = argvars[0].vval.v_list;
@@ -3049,7 +3048,9 @@
 	argv[0] = *rettv;
 	argv[1] = li->li_tv;
 	rettv->v_type = VAR_UNKNOWN;
-	r = call_func(func_name, -1, rettv, 2, argv, funcexe);
+
+	r = eval_expr_typval(expr, argv, 2, rettv);
+
 	clear_tv(&argv[0]);
 	if (r == FAIL || called_emsg != called_emsg_start)
 	    break;
@@ -3066,8 +3067,6 @@
 f_reduce(typval_T *argvars, typval_T *rettv)
 {
     char_u	*func_name;
-    partial_T   *partial = NULL;
-    funcexe_T	funcexe;
 
     if (in_vim9script()
 		   && check_for_string_or_list_or_blob_arg(argvars, 0) == FAIL)
@@ -3084,10 +3083,7 @@
     if (argvars[1].v_type == VAR_FUNC)
 	func_name = argvars[1].vval.v_string;
     else if (argvars[1].v_type == VAR_PARTIAL)
-    {
-	partial = argvars[1].vval.v_partial;
-	func_name = partial_name(partial);
-    }
+	func_name = partial_name(argvars[1].vval.v_partial);
     else
 	func_name = tv_get_string(&argvars[1]);
     if (func_name == NULL || *func_name == NUL)
@@ -3096,16 +3092,12 @@
 	return;
     }
 
-    CLEAR_FIELD(funcexe);
-    funcexe.fe_evaluate = TRUE;
-    funcexe.fe_partial = partial;
-
     if (argvars[0].v_type == VAR_LIST)
-	list_reduce(argvars, func_name, &funcexe, rettv);
+	list_reduce(argvars, &argvars[1], rettv);
     else if (argvars[0].v_type == VAR_STRING)
-	string_reduce(argvars, func_name, &funcexe, rettv);
+	string_reduce(argvars, &argvars[1], rettv);
     else
-	blob_reduce(argvars, func_name, &funcexe, rettv);
+	blob_reduce(argvars, &argvars[1], rettv);
 }
 
 #endif // defined(FEAT_EVAL)
diff --git a/src/proto/blob.pro b/src/proto/blob.pro
index 0b1c814..54e4a37 100644
--- a/src/proto/blob.pro
+++ b/src/proto/blob.pro
@@ -22,7 +22,7 @@
 void blob_remove(typval_T *argvars, typval_T *rettv, char_u *arg_errmsg);
 void blob_filter_map(blob_T *blob_arg, filtermap_T filtermap, typval_T *expr, typval_T *rettv);
 void blob_insert_func(typval_T *argvars, typval_T *rettv);
-void blob_reduce(typval_T *argvars, char_u *func_name, funcexe_T *funcexe, typval_T *rettv);
+void blob_reduce(typval_T *argvars, typval_T *expr, typval_T *rettv);
 void blob_reverse(blob_T *b, typval_T *rettv);
 void f_blob2list(typval_T *argvars, typval_T *rettv);
 void f_list2blob(typval_T *argvars, typval_T *rettv);
diff --git a/src/proto/strings.pro b/src/proto/strings.pro
index 778ec90..50bbf29 100644
--- a/src/proto/strings.pro
+++ b/src/proto/strings.pro
@@ -23,7 +23,7 @@
 char_u *string_quote(char_u *str, int function);
 long string_count(char_u *haystack, char_u *needle, int ic);
 void string_filter_map(char_u *str, filtermap_T filtermap, typval_T *expr, typval_T *rettv);
-void string_reduce(typval_T *argvars, char_u *func_name, funcexe_T *funcexe, typval_T *rettv);
+void string_reduce(typval_T *argvars, typval_T *expr, typval_T *rettv);
 void f_byteidx(typval_T *argvars, typval_T *rettv);
 void f_byteidxcomp(typval_T *argvars, typval_T *rettv);
 void f_charidx(typval_T *argvars, typval_T *rettv);
diff --git a/src/strings.c b/src/strings.c
index 3befb86..15ead2b 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -932,15 +932,14 @@
 }
 
 /*
- * reduce() String argvars[0] using the function 'funcname' with arguments in
- * 'funcexe' starting with the initial value argvars[2] and return the result
- * in 'rettv'.
+ * Implementation of reduce() for String "argvars[0]" using the function "expr"
+ * starting with the optional initial value "argvars[2]" and return the result
+ * in "rettv".
  */
     void
 string_reduce(
 	typval_T	*argvars,
-	char_u		*func_name,
-	funcexe_T	*funcexe,
+	typval_T	*expr,
 	typval_T	*rettv)
 {
     char_u	*p = tv_get_string(&argvars[0]);
@@ -971,7 +970,9 @@
 	if (copy_first_char_to_tv(p, &argv[1]) == FAIL)
 	    break;
 	len = (int)STRLEN(argv[1].vval.v_string);
-	r = call_func(func_name, -1, rettv, 2, argv, funcexe);
+
+	r = eval_expr_typval(expr, argv, 2, rettv);
+
 	clear_tv(&argv[0]);
 	clear_tv(&argv[1]);
 	if (r == FAIL || called_emsg != called_emsg_start)
diff --git a/src/testdir/test_listdict.vim b/src/testdir/test_listdict.vim
index 4476e2b..7c707d4 100644
--- a/src/testdir/test_listdict.vim
+++ b/src/testdir/test_listdict.vim
@@ -1045,7 +1045,7 @@
 
   call assert_fails("call reduce({}, { acc, val -> acc + val }, 1)", 'E1098:')
   call assert_fails("call reduce(0, { acc, val -> acc + val }, 1)", 'E1098:')
-  call assert_fails("call reduce([1, 2], 'Xdoes_not_exist')", 'E117:')
+  call assert_fails("call reduce([1, 2], 'Xdoes_not_exist')", 'E121:')
   call assert_fails("echo reduce(0z01, { acc, val -> 2 * acc + val }, '')", 'E1210:')
 
   call assert_fails("vim9 reduce(0, (acc, val) => (acc .. val), '')", 'E1252:')
diff --git a/src/version.c b/src/version.c
index 2f36c39..2ad2658 100644
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    548,
+/**/
     547,
 /**/
     546,
