changeset 26556:dff04b7fa6b2 v8.2.3807

patch 8.2.3807: Vim9: can call import with star directly Commit: https://github.com/vim/vim/commit/f8a79fc3468645019532331bf8b36d1f7b403ef4 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Dec 14 12:06:16 2021 +0000 patch 8.2.3807: Vim9: can call import with star directly Problem: Vim9: can call import with star directly. Solution: Check that the import used star.
author Bram Moolenaar <Bram@vim.org>
date Tue, 14 Dec 2021 13:15:03 +0100
parents 2ea8b67ac427
children 8f42f812c815
files src/eval.c src/testdir/test_vim9_script.vim src/userfunc.c src/version.c
diffstat 4 files changed, 28 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c
+++ b/src/eval.c
@@ -2001,7 +2001,7 @@ eval_func(
     // Need to make a copy, in case evaluating the arguments makes
     // the name invalid.
     s = vim_strsave(s);
-    if (s == NULL || (flags & EVAL_CONSTANT))
+    if (s == NULL || *s == NUL || (flags & EVAL_CONSTANT))
 	ret = FAIL;
     else
     {
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -1536,6 +1536,21 @@ def Test_import_star_fails()
   CheckScriptFailure(lines, 'E1047:')
 
   delete('Xfoo.vim')
+
+  lines =<< trim END
+      vim9script
+      def TheFunc()
+        echo 'the func'
+      enddef
+      export var Ref = TheFunc
+  END
+  writefile([], 'Xthat.vim')
+  lines =<< trim END
+      import * as That from './Xthat.vim'
+      That()
+  END
+  CheckDefAndScriptFailure2(lines, 'E1094:', 'E1236: Cannot use That itself')
+  delete('Xthat.vim')
 enddef
 
 def Test_import_as()
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -1596,7 +1596,16 @@ deref_func_name(
 		*lenp = (int)STRLEN(s);
 		return s;
 	    }
-	    // TODO: what if (import->imp_flags & IMP_FLAGS_STAR)
+	    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)
--- a/src/version.c
+++ b/src/version.c
@@ -750,6 +750,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3807,
+/**/
     3806,
 /**/
     3805,