diff src/userfunc.c @ 26980:8796f1384750 v8.2.4019

patch 8.2.4019: Vim9: import mechanism is too complicated Commit: https://github.com/vim/vim/commit/d5f400c607182db6d4fbe2964471d796277f67e8 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jan 6 21:10:28 2022 +0000 patch 8.2.4019: Vim9: import mechanism is too complicated Problem: Vim9: import mechanism is too complicated. Solution: Do not use the Javascript mechanism but a much simpler one.
author Bram Moolenaar <Bram@vim.org>
date Thu, 06 Jan 2022 22:15:04 +0100
parents ac75c145f0a9
children 4b8d836db103
line wrap: on
line diff
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -1608,34 +1608,14 @@ deref_func_name(
 	}
 	import = find_imported(p, len, NULL);
 
-	// imported variable from another script
+	// imported function from another script
 	if (import != NULL)
 	{
-	    if (import->imp_funcname != NULL)
-	    {
-		s = import->imp_funcname;
-		*lenp = (int)STRLEN(s);
-		return s;
-	    }
-	    if (import->imp_flags & IMP_FLAGS_STAR)
-	    {
-		name[len] = NUL;
-		semsg(_(e_cannot_use_str_itself_it_is_imported_with_star),
-									 name);
-		name[len] = cc;
-		*lenp = 0;
-		return (char_u *)"";	// just in case
-	    }
-	    else
-	    {
-		scriptitem_T    *si = SCRIPT_ITEM(import->imp_sid);
-		svar_T		*sv = ((svar_T *)si->sn_var_vals.ga_data)
-						    + import->imp_var_vals_idx;
-		tv = sv->sv_tv;
-		if (type != NULL)
-		    *type = sv->sv_type;
-		did_type = TRUE;
-	    }
+	    name[len] = NUL;
+	    semsg(_(e_cannot_use_str_itself_it_is_imported), name);
+	    name[len] = cc;
+	    *lenp = 0;
+	    return (char_u *)"";	// just in case
 	}
     }
 
@@ -1673,7 +1653,7 @@ deref_func_name(
 	{
 	    if (!did_type && type != NULL && ht == get_script_local_ht())
 	    {
-		svar_T  *sv = find_typval_in_script(tv);
+		svar_T  *sv = find_typval_in_script(tv, 0);
 
 		if (sv != NULL)
 		    *type = sv->sv_type;
@@ -1905,16 +1885,13 @@ find_func_with_sid(char_u *name, int sid
  * Return NULL for unknown function.
  */
     ufunc_T *
-find_func_even_dead(char_u *name, int is_global, cctx_T *cctx)
+find_func_even_dead(char_u *name, int is_global, cctx_T *cctx UNUSED)
 {
     hashitem_T	*hi;
     ufunc_T	*func;
-    imported_T	*imported;
 
     if (!is_global)
     {
-	char_u	*after_script = NULL;
-	long	sid = 0;
 	int	find_script_local = in_vim9script() && eval_isnamec1(*name)
 					   && (name[1] != ':' || *name == 's');
 
@@ -1926,35 +1903,6 @@ find_func_even_dead(char_u *name, int is
 	    if (func != NULL)
 		return func;
 	}
-
-	if (name[0] == K_SPECIAL
-		&& name[1] == KS_EXTRA
-		&& name[2] == KE_SNR)
-	{
-	    // Caller changes s: to <SNR>99_name.
-
-	    after_script = name + 3;
-	    sid = getdigits(&after_script);
-	    if (*after_script == '_')
-		++after_script;
-	    else
-		after_script = NULL;
-	}
-	if (find_script_local || after_script != NULL)
-	{
-	    // Find imported function before global one.
-	    if (after_script != NULL && sid != current_sctx.sc_sid)
-		imported = find_imported_in_script(after_script, 0, sid);
-	    else
-		imported = find_imported(after_script == NULL
-					       ? name : after_script, 0, cctx);
-	    if (imported != NULL && imported->imp_funcname != NULL)
-	    {
-		hi = hash_find(&func_hashtab, imported->imp_funcname);
-		if (!HASHITEM_EMPTY(hi))
-		    return HI2UF(hi);
-	    }
-	}
     }
 
     hi = hash_find(&func_hashtab,
@@ -4257,8 +4205,8 @@ define_function(exarg_T *eap, char_u *na
 	    // In Vim9 script a function cannot have the same name as a
 	    // variable.
 	    if (vim9script && *arg == K_SPECIAL
-		&& eval_variable(name_base, (int)STRLEN(name_base), NULL, NULL,
-			 EVAL_VAR_NOAUTOLOAD + EVAL_VAR_IMPORT
+		&& eval_variable(name_base, (int)STRLEN(name_base), 0, NULL,
+		    NULL, EVAL_VAR_NOAUTOLOAD + EVAL_VAR_IMPORT
 						     + EVAL_VAR_NO_FUNC) == OK)
 	    {
 		semsg(_(e_redefining_script_item_str), name_base);