summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/errors.h4
-rw-r--r--src/testdir/test_vim9_script.vim17
-rw-r--r--src/version.c2
-rw-r--r--src/vim9script.c13
4 files changed, 31 insertions, 5 deletions
diff --git a/src/errors.h b/src/errors.h
index dd72a74a9..2a76504b4 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -270,8 +270,8 @@ EXTERN char e_missing_as_after_star[]
INIT(= N_("E1045: Missing \"as\" after *"));
EXTERN char e_missing_comma_in_import[]
INIT(= N_("E1046: Missing comma in import"));
-EXTERN char e_syntax_error_in_import[]
- INIT(= N_("E1047: Syntax error in import"));
+EXTERN char e_syntax_error_in_import_str[]
+ INIT(= N_("E1047: Syntax error in import: %s"));
EXTERN char e_item_not_found_in_script_str[]
INIT(= N_("E1048: Item not found in script: %s"));
EXTERN char e_item_not_exported_in_script_str[]
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 2600bbdb4..313bfbcf0 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -1490,6 +1490,23 @@ def Test_import_star_fails()
var that = foo
END
CheckScriptFailure(lines, 'E1029: Expected ''.''')
+
+ lines =<< trim END
+ vim9script
+ import * as 9foo from './Xfoo.vim'
+ END
+ CheckScriptFailure(lines, 'E1047:')
+ lines =<< trim END
+ vim9script
+ import * as the#foo from './Xfoo.vim'
+ END
+ CheckScriptFailure(lines, 'E1047:')
+ lines =<< trim END
+ vim9script
+ import * as g:foo from './Xfoo.vim'
+ END
+ CheckScriptFailure(lines, 'E1047:')
+
delete('Xfoo.vim')
enddef
diff --git a/src/version.c b/src/version.c
index 81845b7d2..7d810aacc 100644
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3413,
+/**/
3412,
/**/
3411,
diff --git a/src/vim9script.c b/src/vim9script.c
index 9ddc48930..ca245b255 100644
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -396,12 +396,19 @@ handle_import(
arg = skipwhite_and_linebreak(arg, evalarg);
if (STRNCMP("as", arg, 2) == 0 && IS_WHITE_OR_NUL(arg[2]))
{
- // skip over "as Name "; no line break allowed after "as"
+ // Skip over "as Name "; no line break allowed after "as".
+ // Do not allow for ':' and '#'.
arg = skipwhite(arg + 2);
p = arg;
if (eval_isnamec1(*arg))
- while (eval_isnamec(*arg))
+ while (ASCII_ISALNUM(*arg) || *arg == '_')
++arg;
+ if (p == arg || !(IS_WHITE_OR_NUL(*arg)
+ || (mult && (*arg == ',' || *arg == '}'))))
+ {
+ semsg(_(e_syntax_error_in_import_str), p);
+ goto erret;
+ }
if (check_defined(p, arg - p, cctx, FALSE) == FAIL)
goto erret;
as_name = vim_strnsave(p, arg - p);
@@ -439,7 +446,7 @@ handle_import(
if (names.ga_len == 0)
{
- emsg(_(e_syntax_error_in_import));
+ semsg(_(e_syntax_error_in_import_str), arg_start);
goto erret;
}