From: Bram Moolenaar Date: Sun, 23 Jan 2022 13:44:35 +0000 (+0000) Subject: patch 8.2.4192: cannot use an import in 'printexpr' X-Git-Tag: v8.2.4192 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7ef4a2fe3736bbeb5bad182782a74576aa06b0db;p=vim patch 8.2.4192: cannot use an import in 'printexpr' Problem: Cannot use an import in 'printexpr'. Solution: Set the script context when evaluating 'printexpr'. --- diff --git a/src/evalvars.c b/src/evalvars.c index 7578378b3..196d4d422 100644 --- a/src/evalvars.c +++ b/src/evalvars.c @@ -391,13 +391,21 @@ eval_charconvert( eval_printexpr(char_u *fname, char_u *args) { int err = FALSE; + sctx_T saved_sctx = current_sctx; + sctx_T *ctx; set_vim_var_string(VV_FNAME_IN, fname, -1); set_vim_var_string(VV_CMDARG, args, -1); + ctx = get_option_sctx("printexpr"); + if (ctx != NULL) + current_sctx = *ctx; + if (eval_to_bool(p_pexpr, &err, NULL, FALSE)) err = TRUE; + set_vim_var_string(VV_FNAME_IN, NULL, -1); set_vim_var_string(VV_CMDARG, NULL, -1); + current_sctx = saved_sctx; if (err) { diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim index 19379a01a..482e759d1 100644 --- a/src/testdir/test_vim9_import.vim +++ b/src/testdir/test_vim9_import.vim @@ -874,6 +874,37 @@ def Test_import_in_indentexpr() delete('Xindenter') enddef +func Test_import_in_printexpr() + CheckFeature postscript + call Run_Test_import_in_printexpr() +endfunc + +def Run_Test_import_in_printexpr() + var lines =<< trim END + vim9script + export def PrintFile(): bool + g:printed = 'yes' + delete('v:fname_in') + return false + enddef + END + writefile(lines, 'Xprint.vim') + + lines =<< trim END + vim9script + import './Xprint.vim' + set printexpr=Xprint.PrintFile() + END + CheckScriptSuccess(lines) + + help + hardcopy dummy args + assert_equal('yes', g:printed) + + delete('Xprint.vim') + set printexpr= +enddef + def Test_export_fails() CheckScriptFailure(['export var some = 123'], 'E1042:') CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:') diff --git a/src/version.c b/src/version.c index f385750da..824522f46 100644 --- 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 */ +/**/ + 4192, /**/ 4191, /**/