mirror of
https://github.com/neovim/neovim.git
synced 2025-09-17 08:48:16 +00:00
vim-patch:9.0.0409: #{g:x} was seen as a curly-braces expression
Problem: #{g:x} was seen as a curly-braces expression.
Solution: Do never see #{} as a curly-braces expression. (closes vim/vim#11075)
7c7e1e9b98
This commit is contained in:
@@ -4587,12 +4587,14 @@ static int dict_get_tv(char **arg, typval_T *rettv, int evaluate, bool literal)
|
|||||||
char *curly_expr = skipwhite(*arg + 1);
|
char *curly_expr = skipwhite(*arg + 1);
|
||||||
char buf[NUMBUFLEN];
|
char buf[NUMBUFLEN];
|
||||||
|
|
||||||
// First check if it's not a curly-braces thing: {expr}.
|
// First check if it's not a curly-braces expression: {expr}.
|
||||||
// Must do this without evaluating, otherwise a function may be called
|
// Must do this without evaluating, otherwise a function may be called
|
||||||
// twice. Unfortunately this means we need to call eval1() twice for the
|
// twice. Unfortunately this means we need to call eval1() twice for the
|
||||||
// first item.
|
// first item.
|
||||||
// But {} is an empty Dictionary.
|
// "{}" is an empty Dictionary.
|
||||||
|
// "#{abc}" is never a curly-braces expression.
|
||||||
if (*curly_expr != '}'
|
if (*curly_expr != '}'
|
||||||
|
&& !literal
|
||||||
&& eval1(&curly_expr, &tv, false) == OK
|
&& eval1(&curly_expr, &tv, false) == OK
|
||||||
&& *skipwhite(curly_expr) == '}') {
|
&& *skipwhite(curly_expr) == '}') {
|
||||||
return NOTDONE;
|
return NOTDONE;
|
||||||
|
@@ -168,6 +168,10 @@ func Test_dict()
|
|||||||
|
|
||||||
" allow key starting with number at the start, not a curly expression
|
" allow key starting with number at the start, not a curly expression
|
||||||
call assert_equal({'1foo': 77}, #{1foo: 77})
|
call assert_equal({'1foo': 77}, #{1foo: 77})
|
||||||
|
|
||||||
|
" #{expr} is not a curly expression
|
||||||
|
let x = 'x'
|
||||||
|
call assert_equal(#{g: x}, #{g:x})
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" Dictionary identity
|
" Dictionary identity
|
||||||
|
@@ -104,7 +104,7 @@ describe(':source', function()
|
|||||||
eq("0zBEEFCAFE", meths.exec('echo d', true))
|
eq("0zBEEFCAFE", meths.exec('echo d', true))
|
||||||
|
|
||||||
exec('set cpoptions+=C')
|
exec('set cpoptions+=C')
|
||||||
eq('Vim(let):E15: Invalid expression: #{', exc_exec('source'))
|
eq('Vim(let):E723: Missing end of Dictionary \'}\': ', exc_exec('source'))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('selection in current buffer', function()
|
it('selection in current buffer', function()
|
||||||
@@ -138,7 +138,7 @@ describe(':source', function()
|
|||||||
eq('Vim(echo):E117: Unknown function: s:C', exc_exec('echo D()'))
|
eq('Vim(echo):E117: Unknown function: s:C', exc_exec('echo D()'))
|
||||||
|
|
||||||
exec('set cpoptions+=C')
|
exec('set cpoptions+=C')
|
||||||
eq('Vim(let):E15: Invalid expression: #{', exc_exec("'<,'>source"))
|
eq('Vim(let):E723: Missing end of Dictionary \'}\': ', exc_exec("'<,'>source"))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('does not break if current buffer is modified while sourced', function()
|
it('does not break if current buffer is modified while sourced', function()
|
||||||
|
Reference in New Issue
Block a user