mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 8.2.4193: cannot use an import in 'charconvert'
Problem: Cannot use an import in 'charconvert'. Solution: Set the script context when evaluating 'charconvert'. Also expand script-local functions in 'charconvert'.
This commit is contained in:
@@ -369,17 +369,25 @@ eval_charconvert(
|
||||
char_u *fname_to)
|
||||
{
|
||||
int err = FALSE;
|
||||
sctx_T saved_sctx = current_sctx;
|
||||
sctx_T *ctx;
|
||||
|
||||
set_vim_var_string(VV_CC_FROM, enc_from, -1);
|
||||
set_vim_var_string(VV_CC_TO, enc_to, -1);
|
||||
set_vim_var_string(VV_FNAME_IN, fname_from, -1);
|
||||
set_vim_var_string(VV_FNAME_OUT, fname_to, -1);
|
||||
ctx = get_option_sctx("charconvert");
|
||||
if (ctx != NULL)
|
||||
current_sctx = *ctx;
|
||||
|
||||
if (eval_to_bool(p_ccv, &err, NULL, FALSE))
|
||||
err = TRUE;
|
||||
|
||||
set_vim_var_string(VV_CC_FROM, NULL, -1);
|
||||
set_vim_var_string(VV_CC_TO, NULL, -1);
|
||||
set_vim_var_string(VV_FNAME_IN, NULL, -1);
|
||||
set_vim_var_string(VV_FNAME_OUT, NULL, -1);
|
||||
current_sctx = saved_sctx;
|
||||
|
||||
if (err)
|
||||
return FAIL;
|
||||
|
@@ -2329,8 +2329,7 @@ ambw_end:
|
||||
# ifdef FEAT_POSTSCRIPT
|
||||
varp == &p_pexpr ||
|
||||
# endif
|
||||
FALSE
|
||||
)
|
||||
varp == &p_ccv)
|
||||
{
|
||||
char_u **p_opt = NULL;
|
||||
char_u *name;
|
||||
@@ -2369,6 +2368,8 @@ ambw_end:
|
||||
if (varp == &p_pexpr) // 'printexpr'
|
||||
p_opt = &p_pexpr;
|
||||
# endif
|
||||
if (varp == &p_ccv) // 'charconvert'
|
||||
p_opt = &p_ccv;
|
||||
|
||||
if (p_opt != NULL)
|
||||
{
|
||||
|
@@ -905,6 +905,37 @@ def Run_Test_import_in_printexpr()
|
||||
set printexpr=
|
||||
enddef
|
||||
|
||||
def Test_import_in_charconvert()
|
||||
var lines =<< trim END
|
||||
vim9script
|
||||
export def MakeUpper(): bool
|
||||
var data = readfile(v:fname_in)
|
||||
map(data, 'toupper(v:val)')
|
||||
writefile(data, v:fname_out)
|
||||
return false # success
|
||||
enddef
|
||||
END
|
||||
writefile(lines, 'Xconvert.vim')
|
||||
|
||||
lines =<< trim END
|
||||
vim9script
|
||||
import './Xconvert.vim' as conv
|
||||
set charconvert=conv.MakeUpper()
|
||||
END
|
||||
CheckScriptSuccess(lines)
|
||||
|
||||
writefile(['one', 'two'], 'Xfile')
|
||||
new Xfile
|
||||
write ++enc=ucase Xfile1
|
||||
assert_equal(['ONE', 'TWO'], readfile('Xfile1'))
|
||||
|
||||
delete('Xfile')
|
||||
delete('Xfile1')
|
||||
delete('Xconvert.vim')
|
||||
bwipe!
|
||||
set charconvert&
|
||||
enddef
|
||||
|
||||
def Test_export_fails()
|
||||
CheckScriptFailure(['export var some = 123'], 'E1042:')
|
||||
CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:')
|
||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
4193,
|
||||
/**/
|
||||
4192,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user