diff src/userfunc.c @ 27682:f60d0d823897 v8.2.4367

patch 8.2.4367: calling in_vim9script() multiple times Commit: https://github.com/vim/vim/commit/4525a57afbea3e0885642bbebbc24d5a25c97da9 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Feb 13 11:57:33 2022 +0000 patch 8.2.4367: calling in_vim9script() multiple times Problem: Calling in_vim9script() multiple times. Solution: Call it once and keep the result.
author Bram Moolenaar <Bram@vim.org>
date Sun, 13 Feb 2022 13:00:06 +0100
parents 1646525507aa
children 3813036f19cb
line wrap: on
line diff
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -1328,8 +1328,9 @@ get_lambda_tv(
     int		equal_arrow = **arg == '(';
     int		white_error = FALSE;
     int		called_emsg_start = called_emsg;
-
-    if (equal_arrow && !in_vim9script())
+    int		vim9script = in_vim9script();
+
+    if (equal_arrow && !vim9script)
 	return NOTDONE;
 
     ga_init(&newargs);
@@ -1360,7 +1361,7 @@ get_lambda_tv(
 					    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 @@ get_lambda_tv(
 	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 @@ get_lambda_tv(
 	    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 @@ get_func_tv(
 	}
 
 	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 @@ get_func_tv(
     while (--argcount >= 0)
 	clear_tv(&argvars[argcount]);
 
-    if (in_vim9script())
+    if (vim9script)
 	*arg = argp;
     else
 	*arg = skipwhite(argp);
@@ -3714,7 +3715,8 @@ trans_function_name(
     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 @@ trans_function_name(
     // 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 @@ trans_function_name(
 
     // 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 @@ trans_function_name(
      */
     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 @@ trans_function_name(
 	    }
 	    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 @@ trans_function_name(
 		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 @@ trans_function_name(
     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 @@ define_function(exarg_T *eap, char_u *na
 	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 @@ ex_call(exarg_T *eap)
     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 @@ ex_call(exarg_T *eap)
     }
 
     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 @@ ex_call(exarg_T *eap)
     // 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 @@ ex_call(exarg_T *eap)
 	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;