From 36c2add7f82bc5dbbfc45db31953ef9633c635b3 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 22 Jan 2022 20:55:30 +0000 Subject: [PATCH] patch 8.2.4186: cannot use an import in 'patchexpr' Problem: Cannot use an import in 'patchexpr'. Solution: Set the script context when evaluating 'patchexpr'. Do not require 'patchexpr' to return a bool, it was ignored anyway. --- src/evalvars.c | 15 +++++++++++++-- src/testdir/test_vim9_import.vim | 30 ++++++++++++++++++++++++++++++ src/version.c | 2 ++ 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/evalvars.c b/src/evalvars.c index 9dbdc75c0..7578378b3 100644 --- a/src/evalvars.c +++ b/src/evalvars.c @@ -443,15 +443,26 @@ eval_patch( char_u *difffile, char_u *outfile) { - int err; + sctx_T saved_sctx = current_sctx; + sctx_T *ctx; + typval_T *tv; set_vim_var_string(VV_FNAME_IN, origfile, -1); set_vim_var_string(VV_FNAME_DIFF, difffile, -1); set_vim_var_string(VV_FNAME_OUT, outfile, -1); - (void)eval_to_bool(p_pex, &err, NULL, FALSE); + + ctx = get_option_sctx("patchexpr"); + if (ctx != NULL) + current_sctx = *ctx; + + // errors are ignored + tv = eval_expr(p_pex, NULL); + free_tv(tv); + set_vim_var_string(VV_FNAME_IN, NULL, -1); set_vim_var_string(VV_FNAME_DIFF, NULL, -1); set_vim_var_string(VV_FNAME_OUT, NULL, -1); + current_sctx = saved_sctx; } # endif diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim index 52a0c821d..19379a01a 100644 --- a/src/testdir/test_vim9_import.vim +++ b/src/testdir/test_vim9_import.vim @@ -759,6 +759,36 @@ def Run_Test_import_in_diffexpr() bwipe! enddef +def Test_import_in_patchexpr() + var lines =<< trim END + vim9script + export def TPatch() + call writefile(['output file'], v:fname_out) + enddef + END + writefile(lines, 'Xpatchexpr') + + lines =<< trim END + vim9script + import './Xpatchexpr' as patch + set patchexpr=patch.TPatch() + END + CheckScriptSuccess(lines) + + call writefile(['input file'], 'Xinput') + call writefile(['diff file'], 'Xdiff') + :%bwipe! + edit Xinput + diffpatch Xdiff + call assert_equal('output file', getline(1)) + + call delete('Xinput') + call delete('Xdiff') + call delete('Xpatchexpr') + set patchexpr& + :%bwipe! +enddef + def Test_import_in_formatexpr() var lines =<< trim END vim9script diff --git a/src/version.c b/src/version.c index 9571473c9..8e659e028 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 */ +/**/ + 4186, /**/ 4185, /**/ -- 2.40.0