patch 8.2.1534: Vim9: type error for argument type is not at call position

Problem:    Vim9: type error for argument type is not at call position.
Solution:   Set the context and stack after checking the arguments.
            (issue #6785)
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 2c23a0e..39382f3 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -223,6 +223,15 @@
   call CheckDefFailure(['TakesOneArg(11, 22)'], 'E118:')
   call CheckDefFailure(['bufnr(xxx)'], 'E1001:')
   call CheckScriptFailure(['def Func(Ref: func(s: string))'], 'E475:')
+
+  let lines =<< trim END
+    vim9script
+    def Func(s: string)
+      echo s
+    enddef
+    Func([])
+  END
+  call CheckScriptFailure(lines, 'E1012: type mismatch, expected string but got list<unknown>', 5)
 enddef
 
 " Default arg and varargs
diff --git a/src/userfunc.c b/src/userfunc.c
index f3c04b2..be706bd 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -1314,17 +1314,10 @@
 
     if (fp->uf_def_status != UF_NOT_COMPILED)
     {
-	estack_push_ufunc(fp, 1);
-	save_current_sctx = current_sctx;
-	current_sctx = fp->uf_script_ctx;
-
 	// Execute the function, possibly compiling it first.
 	call_def_function(fp, argcount, argvars, funcexe->partial, rettv);
 	--depth;
 	current_funccal = fc->caller;
-
-	estack_pop();
-	current_sctx = save_current_sctx;
 	free_funccal(fc);
 	return;
     }
diff --git a/src/version.c b/src/version.c
index e6299f4..21c6a18 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1534,
+/**/
     1533,
 /**/
     1532,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 53a748e..05cf5da 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -726,7 +726,7 @@
     int		idx;
     int		ret = FAIL;
     int		defcount = ufunc->uf_args.ga_len - argc;
-    int		save_sc_version = current_sctx.sc_version;
+    sctx_T	save_current_sctx = current_sctx;
     int		breakcheck_count = 0;
     int		called_emsg_before = called_emsg;
 
@@ -867,7 +867,10 @@
 	ectx.ec_instr = dfunc->df_instr;
     }
 
+    // Following errors are in the function, not the caller.
     // Commands behave like vim9script.
+    estack_push_ufunc(ufunc, 1);
+    current_sctx = ufunc->uf_script_ctx;
     current_sctx.sc_version = SCRIPT_VERSION_VIM9;
 
     // Decide where to start execution, handles optional arguments.
@@ -2614,9 +2617,11 @@
     // When failed need to unwind the call stack.
     while (ectx.ec_frame_idx != initial_frame_idx)
 	func_return(&ectx);
-failed_early:
-    current_sctx.sc_version = save_sc_version;
 
+    estack_pop();
+    current_sctx = save_current_sctx;
+
+failed_early:
     // Free all local variables, but not arguments.
     for (idx = 0; idx < ectx.ec_stack.ga_len; ++idx)
 	clear_tv(STACK_TV(idx));