diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-10-14 19:39:19 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-10-14 19:39:19 +0200 |
commit | 8d739de43b84ef7817b3b5b826d1cbfe7572a62a (patch) | |
tree | b7aca1586e2b679eec84ef76e4ba451ca8c15669 /src/scriptfile.c | |
parent | 3d30af8783bf43fbfece641ec81ad8d2f01b3735 (diff) | |
download | vim-git-8d739de43b84ef7817b3b5b826d1cbfe7572a62a.tar.gz |
patch 8.2.1845: Vim9: function defined in a block can't use block variablesv8.2.1845
Problem: Vim9: function defined in a block can't use variables defined in
that block.
Solution: First step: Make a second hashtab that holds all script variables,
also block-local ones, with more information.
Diffstat (limited to 'src/scriptfile.c')
-rw-r--r-- | src/scriptfile.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/scriptfile.c b/src/scriptfile.c index a8e67b98a..4f3e94ec4 100644 --- a/src/scriptfile.c +++ b/src/scriptfile.c @@ -1348,8 +1348,8 @@ do_source( } } - // old imports are no longer valid - free_imports(sid); + // old imports and script variables are no longer valid + free_imports_and_script_vars(sid); // in Vim9 script functions are marked deleted if (is_vim9) @@ -1375,6 +1375,7 @@ do_source( // Allocate the local script variables to use for this script. new_script_vars(script_items.ga_len); ga_init2(&si->sn_var_vals, sizeof(svar_T), 10); + hash_init(&si->sn_all_vars.dv_hashtab); ga_init2(&si->sn_imports, sizeof(imported_T), 10); ga_init2(&si->sn_type_list, sizeof(type_T), 10); # ifdef FEAT_PROFILE @@ -1592,7 +1593,7 @@ free_scriptnames(void) vim_free(si->sn_vars); vim_free(si->sn_name); - free_imports(i); + free_imports_and_script_vars(i); free_string_option(si->sn_save_cpo); # ifdef FEAT_PROFILE ga_clear(&si->sn_prl_ga); |