mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -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)
|
char_u *fname_to)
|
||||||
{
|
{
|
||||||
int err = FALSE;
|
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_FROM, enc_from, -1);
|
||||||
set_vim_var_string(VV_CC_TO, enc_to, -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_IN, fname_from, -1);
|
||||||
set_vim_var_string(VV_FNAME_OUT, fname_to, -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))
|
if (eval_to_bool(p_ccv, &err, NULL, FALSE))
|
||||||
err = TRUE;
|
err = TRUE;
|
||||||
|
|
||||||
set_vim_var_string(VV_CC_FROM, NULL, -1);
|
set_vim_var_string(VV_CC_FROM, NULL, -1);
|
||||||
set_vim_var_string(VV_CC_TO, 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_IN, NULL, -1);
|
||||||
set_vim_var_string(VV_FNAME_OUT, NULL, -1);
|
set_vim_var_string(VV_FNAME_OUT, NULL, -1);
|
||||||
|
current_sctx = saved_sctx;
|
||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
@@ -2329,8 +2329,7 @@ ambw_end:
|
|||||||
# ifdef FEAT_POSTSCRIPT
|
# ifdef FEAT_POSTSCRIPT
|
||||||
varp == &p_pexpr ||
|
varp == &p_pexpr ||
|
||||||
# endif
|
# endif
|
||||||
FALSE
|
varp == &p_ccv)
|
||||||
)
|
|
||||||
{
|
{
|
||||||
char_u **p_opt = NULL;
|
char_u **p_opt = NULL;
|
||||||
char_u *name;
|
char_u *name;
|
||||||
@@ -2369,6 +2368,8 @@ ambw_end:
|
|||||||
if (varp == &p_pexpr) // 'printexpr'
|
if (varp == &p_pexpr) // 'printexpr'
|
||||||
p_opt = &p_pexpr;
|
p_opt = &p_pexpr;
|
||||||
# endif
|
# endif
|
||||||
|
if (varp == &p_ccv) // 'charconvert'
|
||||||
|
p_opt = &p_ccv;
|
||||||
|
|
||||||
if (p_opt != NULL)
|
if (p_opt != NULL)
|
||||||
{
|
{
|
||||||
|
@@ -905,6 +905,37 @@ def Run_Test_import_in_printexpr()
|
|||||||
set printexpr=
|
set printexpr=
|
||||||
enddef
|
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()
|
def Test_export_fails()
|
||||||
CheckScriptFailure(['export var some = 123'], 'E1042:')
|
CheckScriptFailure(['export var some = 123'], 'E1042:')
|
||||||
CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:')
|
CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:')
|
||||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
4193,
|
||||||
/**/
|
/**/
|
||||||
4192,
|
4192,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user