diff --git a/src/userfunc.c b/src/userfunc.c
index 841a537..6007ab7 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -1328,8 +1328,9 @@
     int		equal_arrow = **arg == '(';
     int		white_error = FALSE;
     int		called_emsg_start = called_emsg;
+    int		vim9script = in_vim9script();
 
-    if (equal_arrow && !in_vim9script())
+    if (equal_arrow && !vim9script)
 	return NOTDONE;
 
     ga_init(&newargs);
@@ -1360,7 +1361,7 @@
 					    FALSE, NULL, NULL);
     if (ret == FAIL
 		  || (s = skip_arrow(*arg, equal_arrow, &ret_type,
-		equal_arrow || in_vim9script() ? &white_error : NULL)) == NULL)
+		equal_arrow || vim9script ? &white_error : NULL)) == NULL)
     {
 	if (types_optional)
 	    ga_clear_strings(&argtypes);
@@ -1485,7 +1486,7 @@
 	if (types_optional)
 	{
 	    if (parse_argument_types(fp, &argtypes,
-					   in_vim9script() && varargs) == FAIL)
+						vim9script && varargs) == FAIL)
 		goto errret;
 	    if (ret_type != NULL)
 	    {
@@ -1514,7 +1515,7 @@
 	    flags |= FC_SANDBOX;
 	// In legacy script a lambda can be called with more args than
 	// uf_args.ga_len.  In Vim9 script "...name" has to be used.
-	fp->uf_varargs = !in_vim9script() || varargs;
+	fp->uf_varargs = !vim9script || varargs;
 	fp->uf_flags = flags;
 	fp->uf_calls = 0;
 	fp->uf_script_ctx = current_sctx;
@@ -1779,7 +1780,7 @@
 	}
 
 	ret = call_func(name, len, rettv, argcount, argvars, funcexe);
-	if (in_vim9script() && did_emsg > did_emsg_before)
+	if (vim9script && did_emsg > did_emsg_before)
 	{
 	    // An error in a builtin function does not return FAIL, but we do
 	    // want to abort further processing if an error was given.
@@ -1800,7 +1801,7 @@
     while (--argcount >= 0)
 	clear_tv(&argvars[argcount]);
 
-    if (in_vim9script())
+    if (vim9script)
 	*arg = argp;
     else
 	*arg = skipwhite(argp);
@@ -3714,7 +3715,8 @@
     int		extra = 0;
     int		prefix_g = FALSE;
     lval_T	lv;
-    int		vim9script;
+    int		vim9script = in_vim9script();
+    int		vim9_local;
 
     if (fdp != NULL)
 	CLEAR_POINTER(fdp);
@@ -3739,7 +3741,7 @@
     // Note that TFN_ flags use the same values as GLV_ flags.
     end = get_lval(start, NULL, &lv, FALSE, skip, flags | GLV_READ_ONLY,
 					      lead > 2 ? 0 : FNE_CHECK_START);
-    if (end == start || (in_vim9script() && end != NULL
+    if (end == start || (vim9script && end != NULL
 				   && end[-1] == AUTOLOAD_CHAR && *end == '('))
     {
 	if (!skip)
@@ -3905,7 +3907,7 @@
 
     // In Vim9 script a user function is script-local by default, unless it
     // starts with a lower case character: dict.func().
-    vim9script = ASCII_ISUPPER(*start) && in_vim9script();
+    vim9_local = ASCII_ISUPPER(*start) && vim9script;
 
     /*
      * Copy the function name to allocated memory.
@@ -3914,13 +3916,13 @@
      */
     if (skip)
 	lead = 0;	// do nothing
-    else if (lead > 0 || vim9script)
+    else if (lead > 0 || vim9_local)
     {
-	if (!vim9script)
+	if (!vim9_local)
 	{
-	    if (in_vim9script() && lead == 2 && !ASCII_ISUPPER(*lv.ll_name))
+	    if (vim9script && lead == 2 && !ASCII_ISUPPER(*lv.ll_name))
 	    {
-		semsg(_(in_vim9script()
+		semsg(_(vim9script
 			   ? e_function_name_must_start_with_capital_str
 			   : e_function_name_must_start_with_capital_or_s_str),
 									start);
@@ -3928,7 +3930,7 @@
 	    }
 	    lead = 3;
 	}
-	if (vim9script || (lv.ll_exp_name != NULL
+	if (vim9_local || (lv.ll_exp_name != NULL
 					     && eval_fname_sid(lv.ll_exp_name))
 						       || eval_fname_sid(*pp))
 	{
@@ -3939,17 +3941,16 @@
 		goto theend;
 	    }
 	    sprintf((char *)sid_buf, "%ld_", (long)current_sctx.sc_sid);
-	    if (vim9script)
+	    if (vim9_local)
 		extra = 3 + (int)STRLEN(sid_buf);
 	    else
 		lead += (int)STRLEN(sid_buf);
 	}
     }
     else if (!(flags & TFN_INT) && (builtin_function(lv.ll_name, len)
-				   || (in_vim9script() && *lv.ll_name == '_')))
+				   || (vim9script && *lv.ll_name == '_')))
     {
-	semsg(_(in_vim9script()
-			   ? e_function_name_must_start_with_capital_str
+	semsg(_(vim9script ? e_function_name_must_start_with_capital_str
 			   : e_function_name_must_start_with_capital_or_s_str),
 									start);
 	goto theend;
@@ -3968,12 +3969,12 @@
     name = alloc(len + lead + extra + 1);
     if (name != NULL)
     {
-	if (!skip && (lead > 0 || vim9script))
+	if (!skip && (lead > 0 || vim9_local))
 	{
 	    name[0] = K_SPECIAL;
 	    name[1] = KS_EXTRA;
 	    name[2] = (int)KE_SNR;
-	    if (vim9script || lead > 3)	// If it's "<SID>"
+	    if (vim9_local || lead > 3)	// If it's "<SID>"
 		STRCPY(name + 3, sid_buf);
 	}
 	else if (prefix_g)
@@ -4546,7 +4547,7 @@
 	int		ffed_flags = is_global ? FFED_IS_GLOBAL : 0;
 
 	v = find_var(name, &ht, TRUE);
-	if (v != NULL && (in_vim9script() || v->di_tv.v_type == VAR_FUNC))
+	if (v != NULL && (vim9script || v->di_tv.v_type == VAR_FUNC))
 	    var_conflict = TRUE;
 
 	if (SCRIPT_ID_VALID(current_sctx.sc_sid))
@@ -5299,6 +5300,7 @@
     evalarg_T	evalarg;
     type_T	*type = NULL;
     int		found_var = FALSE;
+    int		vim9script = in_vim9script();
 
     fill_evalarg_from_eap(&evalarg, eap, eap->skip);
     if (eap->skip)
@@ -5315,7 +5317,7 @@
     }
 
     tofree = trans_function_name(&arg, NULL, eap->skip, TFN_INT,
-			      &fudi, &partial, in_vim9script() ? &type : NULL);
+			      &fudi, &partial, vim9script ? &type : NULL);
     if (fudi.fd_newkey != NULL)
     {
 	// Still need to give an error message for missing key.
@@ -5335,7 +5337,7 @@
     // from trans_function_name().
     len = (int)STRLEN(tofree);
     name = deref_func_name(tofree, &len, partial != NULL ? NULL : &partial,
-	    in_vim9script() && type == NULL ? &type : NULL,
+				vim9script && type == NULL ? &type : NULL,
 						     FALSE, FALSE, &found_var);
 
     // Skip white space to allow ":call func ()".  Not good, but required for
@@ -5346,7 +5348,7 @@
 	semsg(_(e_missing_parenthesis_str), eap->arg);
 	goto end;
     }
-    if (in_vim9script() && startarg > arg)
+    if (vim9script && startarg > arg)
     {
 	semsg(_(e_no_white_space_allowed_before_str_str), "(", eap->arg);
 	goto end;
