mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.1.1114: confusing overloaded operator "." for string concatenation
Problem: Confusing overloaded operator "." for string concatenation. Solution: Add ".." for string concatenation. Also "let a ..= b".
This commit is contained in:
12
src/eval.c
12
src/eval.c
@@ -1234,6 +1234,7 @@ eval_foldexpr(char_u *arg, int *cp)
|
||||
* ":let var /= expr" assignment command.
|
||||
* ":let var %= expr" assignment command.
|
||||
* ":let var .= expr" assignment command.
|
||||
* ":let var ..= expr" assignment command.
|
||||
* ":let [var1, var2] = expr" unpack list.
|
||||
*/
|
||||
void
|
||||
@@ -1255,8 +1256,8 @@ ex_let(exarg_T *eap)
|
||||
if (argend > arg && argend[-1] == '.') // for var.='str'
|
||||
--argend;
|
||||
expr = skipwhite(argend);
|
||||
if (*expr != '=' && !(vim_strchr((char_u *)"+-*/%.", *expr) != NULL
|
||||
&& expr[1] == '='))
|
||||
if (*expr != '=' && !((vim_strchr((char_u *)"+-*/%.", *expr) != NULL
|
||||
&& expr[1] == '=') || STRNCMP(expr, "..=", 3) == 0))
|
||||
{
|
||||
/*
|
||||
* ":let" without "=": list variables
|
||||
@@ -1286,7 +1287,11 @@ ex_let(exarg_T *eap)
|
||||
if (*expr != '=')
|
||||
{
|
||||
if (vim_strchr((char_u *)"+-*/%.", *expr) != NULL)
|
||||
{
|
||||
op[0] = *expr; // +=, -=, *=, /=, %= or .=
|
||||
if (expr[0] == '.' && expr[1] == '.') // ..=
|
||||
++expr;
|
||||
}
|
||||
expr = skipwhite(expr + 2);
|
||||
}
|
||||
else
|
||||
@@ -3813,6 +3818,7 @@ eval4(char_u **arg, typval_T *rettv, int evaluate)
|
||||
* + number addition
|
||||
* - number subtraction
|
||||
* . string concatenation
|
||||
* .. string concatenation
|
||||
*
|
||||
* "arg" must point to the first non-white of the expression.
|
||||
* "arg" is advanced to the next non-white after the recognized expression.
|
||||
@@ -3872,6 +3878,8 @@ eval5(char_u **arg, typval_T *rettv, int evaluate)
|
||||
/*
|
||||
* Get the second variable.
|
||||
*/
|
||||
if (op == '.' && *(*arg + 1) == '.') // .. string concatenation
|
||||
++*arg;
|
||||
*arg = skipwhite(*arg + 1);
|
||||
if (eval6(arg, &var2, evaluate, op == '.') == FAIL)
|
||||
{
|
||||
|
Reference in New Issue
Block a user