# HG changeset patch # User Bram Moolenaar # Date 1644347703 -3600 # Node ID db1831f585a46cc93f39045e29a835667a695241 # Parent a03441c13f68e86f29c666835cbdf54333ce32d9 patch 8.2.4330: Vim9: no error if script imports itself Commit: https://github.com/vim/vim/commit/779aeff5c32c26161f42cdccbaa2376e78ee77d6 Author: Bram Moolenaar Date: Tue Feb 8 19:12:19 2022 +0000 patch 8.2.4330: Vim9: no error if script imports itself Problem: Vim9: no error if script imports itself. Solution: Give an error when a script imports itself. diff --git a/src/errors.h b/src/errors.h --- a/src/errors.h +++ b/src/errors.h @@ -2802,7 +2802,8 @@ EXTERN char e_function_reference_invalid INIT(= N_("E1086: Function reference invalid")); EXTERN char e_cannot_use_index_when_declaring_variable[] INIT(= N_("E1087: Cannot use an index when declaring a variable")); -// E1088 unused +EXTERN char e_script_cannot_import_itself[] + INIT(= N_("E1088: Script cannot import itself")); EXTERN char e_unknown_variable_str[] INIT(= N_("E1089: Unknown variable: %s")); EXTERN char e_cannot_assign_to_argument[] diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim --- a/src/testdir/test_vim9_import.vim +++ b/src/testdir/test_vim9_import.vim @@ -500,7 +500,16 @@ def Test_import_fails() v9.CheckScriptFailure(lines, 'E1262:') delete('Xthat.vim') - + + lines =<< trim END + vim9script + export var item = 'hello' + import './Xyourself.vim' + END + writefile(lines, 'Xyourself.vim') + assert_fails('source Xyourself.vim', 'E1088:') + delete('Xyourself.vim') + mkdir('Ximport') writefile(['vim9script'], 'Ximport/.vim') diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4330, +/**/ 4329, /**/ 4328, diff --git a/src/vim9script.c b/src/vim9script.c --- a/src/vim9script.c +++ b/src/vim9script.c @@ -516,6 +516,12 @@ handle_import( goto erret; } + if (sid == current_sctx.sc_sid) + { + emsg(_(e_script_cannot_import_itself)); + goto erret; + } + import_gap = gap != NULL ? gap : &SCRIPT_ITEM(import_sid)->sn_imports; for (i = 0; i < import_gap->ga_len; ++i) {