summaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-07-03 21:09:52 +0200
committerBram Moolenaar <Bram@vim.org>2020-07-03 21:09:52 +0200
commit442af2f89e29fb60790bffde2def9cd74a081780 (patch)
tree6d9291f650a047156a561b33cfd0bcdb93397699 /src/eval.c
parent743d0620203388bf87dc611cea544b485e4b9f85 (diff)
patch 8.2.1122: Vim9: line continuation in dict member not recognizedv8.2.1122
Problem: Vim9: line continuation in dict member not recognized. Solution: Check for line continuation.
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/eval.c b/src/eval.c
index 9a2fdf6540..c569710ab5 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3362,7 +3362,7 @@ eval_index(
*
* Get the (first) variable from inside the [].
*/
- *arg = skipwhite(*arg + 1);
+ *arg = skipwhite_and_linebreak(*arg + 1, evalarg);
if (**arg == ':')
empty1 = TRUE;
else if (eval1(arg, &var1, evalarg) == FAIL) // recursive!
@@ -3377,10 +3377,11 @@ eval_index(
/*
* Get the second variable from inside the [:].
*/
+ *arg = skipwhite_and_linebreak(*arg, evalarg);
if (**arg == ':')
{
range = TRUE;
- *arg = skipwhite(*arg + 1);
+ *arg = skipwhite_and_linebreak(*arg + 1, evalarg);
if (**arg == ']')
empty2 = TRUE;
else if (eval1(arg, &var2, evalarg) == FAIL) // recursive!
@@ -3400,6 +3401,7 @@ eval_index(
}
// Check for the ']'.
+ *arg = skipwhite_and_linebreak(*arg, evalarg);
if (**arg != ']')
{
if (verbose)
@@ -5043,6 +5045,21 @@ handle_subscript(
&& (evalarg->eval_flags & EVAL_EVALUATE);
int ret = OK;
dict_T *selfdict = NULL;
+ int check_white = TRUE;
+
+ // When at the end of the line and ".name" follows in the next line then
+ // consume the line break. Only when rettv is a dict.
+ if (rettv->v_type == VAR_DICT)
+ {
+ int getnext;
+ char_u *p = eval_next_non_blank(*arg, evalarg, &getnext);
+
+ if (getnext && *p == '.' && ASCII_ISALPHA(p[1]))
+ {
+ *arg = eval_next_line(evalarg);
+ check_white = FALSE;
+ }
+ }
// "." is ".name" lookup when we found a dict or when evaluating and
// scriptversion is at least 2, where string concatenation is "..".
@@ -5054,7 +5071,7 @@ handle_subscript(
&& current_sctx.sc_version >= 2)))
|| (**arg == '(' && (!evaluate || rettv->v_type == VAR_FUNC
|| rettv->v_type == VAR_PARTIAL)))
- && !VIM_ISWHITE(*(*arg - 1)))
+ && (!check_white || !VIM_ISWHITE(*(*arg - 1))))
|| (**arg == '-' && (*arg)[1] == '>')))
{
if (**arg == '(')