patch 9.0.0390: cannot use a partial with :defer

Problem:    Cannot use a partial with :defer.
Solution:   Add the partial arguments before the other arguments.  Disallow
            using a dictionary.
diff --git a/src/userfunc.c b/src/userfunc.c
index 9ac681f..0ee276b 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -5567,17 +5567,42 @@
  * Returns FAIL or OK.
  */
     static int
-ex_defer_inner(char_u *name, char_u **arg, evalarg_T *evalarg)
+ex_defer_inner(
+	char_u	    *name,
+	char_u	    **arg,
+	partial_T   *partial,
+	evalarg_T   *evalarg)
 {
     typval_T	argvars[MAX_FUNC_ARGS + 1];	// vars for arguments
+    int		partial_argc = 0;		// number of partial arguments
     int		argcount = 0;			// number of arguments found
+    int		r;
 
     if (current_funccal == NULL)
     {
 	semsg(_(e_str_not_inside_function), "defer");
 	return FAIL;
     }
-    if (get_func_arguments(arg, evalarg, FALSE, argvars, &argcount) == FAIL)
+    if (partial != NULL)
+    {
+	if (partial->pt_dict != NULL)
+	{
+	    emsg(_(e_cannot_use_partial_with_dictionary_for_defer));
+	    return FAIL;
+	}
+	if (partial->pt_argc > 0)
+	{
+	    int i;
+
+	    partial_argc = partial->pt_argc;
+	    for (i = 0; i < partial_argc; ++i)
+		copy_tv(&partial->pt_argv[i], &argvars[i]);
+	}
+    }
+    r = get_func_arguments(arg, evalarg, FALSE,
+					    argvars + partial_argc, &argcount);
+    argcount += partial_argc;
+    if (r == FAIL)
     {
 	while (--argcount >= 0)
 	    clear_tv(&argvars[argcount]);
@@ -5738,7 +5763,7 @@
     if (eap->cmdidx == CMD_defer)
     {
 	arg = startarg;
-	failed = ex_defer_inner(name, &arg, &evalarg) == FAIL;
+	failed = ex_defer_inner(name, &arg, partial, &evalarg) == FAIL;
     }
     else
     {