mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.4083: Vim9: no test for "vim9script autoload' using script variable
Problem: Vim9: no test for "vim9script autoload' and using script variable in the same script. Solution: Add a simple test. Fix uncovered problem.
This commit is contained in:
parent
3049fcf0a1
commit
0e3e7ba05f
@ -2874,6 +2874,32 @@ find_var(char_u *name, hashtab_T **htp, int no_autoload)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// When using "vim9script autoload" script-local items are prefixed but can
|
||||||
|
// be used with s:name.
|
||||||
|
if (SCRIPT_ID_VALID(current_sctx.sc_sid)
|
||||||
|
&& name[0] == 's' && name[1] == ':')
|
||||||
|
{
|
||||||
|
scriptitem_T *si = SCRIPT_ITEM(current_sctx.sc_sid);
|
||||||
|
|
||||||
|
if (si->sn_autoload_prefix != NULL)
|
||||||
|
{
|
||||||
|
char_u *auto_name = concat_str(si->sn_autoload_prefix, name + 2);
|
||||||
|
|
||||||
|
if (auto_name != NULL)
|
||||||
|
{
|
||||||
|
ht = &globvarht;
|
||||||
|
ret = find_var_in_ht(ht, *name, auto_name, TRUE);
|
||||||
|
if (ret != NULL)
|
||||||
|
{
|
||||||
|
if (htp != NULL)
|
||||||
|
*htp = ht;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
vim_free(auto_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3318,7 +3344,7 @@ set_var(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set variable "name" to value in "tv".
|
* Set variable "name" to value in "tv_arg".
|
||||||
* When "sid" is non-zero "name" is in the script with this ID.
|
* When "sid" is non-zero "name" is in the script with this ID.
|
||||||
* If the variable already exists and "is_const" is FALSE the value is updated.
|
* If the variable already exists and "is_const" is FALSE the value is updated.
|
||||||
* Otherwise the variable is created.
|
* Otherwise the variable is created.
|
||||||
|
@ -1091,7 +1091,7 @@ def Test_import_gone_when_sourced_twice()
|
|||||||
enddef
|
enddef
|
||||||
|
|
||||||
" test using an auto-loaded function and variable
|
" test using an auto-loaded function and variable
|
||||||
def Test_vim9_autoload()
|
def Test_vim9_autoload_full_name()
|
||||||
var lines =<< trim END
|
var lines =<< trim END
|
||||||
vim9script
|
vim9script
|
||||||
def some#gettest(): string
|
def some#gettest(): string
|
||||||
@ -1146,11 +1146,16 @@ def Test_vim9script_autoload()
|
|||||||
return 'test'
|
return 'test'
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
export func GetMore()
|
export var name = 'name'
|
||||||
return Gettest() .. 'more'
|
|
||||||
|
export func GetFunc()
|
||||||
|
return Gettest() .. 'more' .. s:name
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
export var name = 'name'
|
export def GetDef(): string
|
||||||
|
return Gettest() .. 'more' .. name
|
||||||
|
enddef
|
||||||
|
|
||||||
export final fname = 'final'
|
export final fname = 'final'
|
||||||
export const cname = 'const'
|
export const cname = 'const'
|
||||||
END
|
END
|
||||||
@ -1165,7 +1170,8 @@ def Test_vim9script_autoload()
|
|||||||
assert_equal('test', prefixed.Gettest())
|
assert_equal('test', prefixed.Gettest())
|
||||||
assert_equal(1, g:prefixed_loaded)
|
assert_equal(1, g:prefixed_loaded)
|
||||||
|
|
||||||
assert_equal('testmore', prefixed.GetMore())
|
assert_equal('testmorename', prefixed.GetFunc())
|
||||||
|
assert_equal('testmorename', prefixed.GetDef())
|
||||||
assert_equal('name', prefixed.name)
|
assert_equal('name', prefixed.name)
|
||||||
assert_equal('final', prefixed.fname)
|
assert_equal('final', prefixed.fname)
|
||||||
assert_equal('const', prefixed.cname)
|
assert_equal('const', prefixed.cname)
|
||||||
@ -1178,7 +1184,7 @@ def Test_vim9script_autoload()
|
|||||||
# can also get the items by autoload name
|
# can also get the items by autoload name
|
||||||
lines =<< trim END
|
lines =<< trim END
|
||||||
call assert_equal('test', prefixed#Gettest())
|
call assert_equal('test', prefixed#Gettest())
|
||||||
call assert_equal('testmore', prefixed#GetMore())
|
call assert_equal('testmorename', prefixed#GetFunc())
|
||||||
call assert_equal('name', prefixed#name)
|
call assert_equal('name', prefixed#name)
|
||||||
call assert_equal('final', prefixed#fname)
|
call assert_equal('final', prefixed#fname)
|
||||||
call assert_equal('const', prefixed#cname)
|
call assert_equal('const', prefixed#cname)
|
||||||
|
@ -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 */
|
||||||
|
/**/
|
||||||
|
4083,
|
||||||
/**/
|
/**/
|
||||||
4082,
|
4082,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user