• R/O
  • SSH

vim: Commit

Mirror of the Vim source from https://github.com/vim/vim


Commit MetaInfo

Revisionaa45593ec2ca284e5adbe95e3b97a45ff1eebc74 (tree)
Time2022-12-20 05:30:03
AuthorBram Moolenaar <Bram@vim....>
CommiterBram Moolenaar

Log Message

patch 9.0.1081: using "->" with split lines does not always work

Commit: https://github.com/vim/vim/commit/34820944ed101e1fbad16d552308f1486e715d27
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Dec 19 20:28:38 2022 +0000

patch 9.0.1081: using "->" with split lines does not always work
Problem: Using "->" with split lines does not always work.
Solution: Avoid trying to get another line. (closes https://github.com/vim/vim/issues/11723)

Change Summary

Incremental Difference

diff -r d73b5046612f -r aa45593ec2ca src/eval.c
--- a/src/eval.c Mon Dec 19 20:00:03 2022 +0100
+++ b/src/eval.c Mon Dec 19 21:30:03 2022 +0100
@@ -4548,11 +4548,19 @@
45484548 if (**arg != '(' && alias == NULL
45494549 && (paren = vim_strchr(*arg, '(')) != NULL)
45504550 {
4551- char_u *deref;
4552-
45534551 *arg = name;
4552+
4553+ // Truncate the name a the "(". Avoid trying to get another line
4554+ // by making "getline" NULL.
45544555 *paren = NUL;
4555- deref = deref_function_name(arg, &tofree, evalarg, verbose);
4556+ char_u *(*getline)(int, void *, int, getline_opt_T) = NULL;
4557+ if (evalarg != NULL)
4558+ {
4559+ getline = evalarg->eval_getline;
4560+ evalarg->eval_getline = NULL;
4561+ }
4562+
4563+ char_u *deref = deref_function_name(arg, &tofree, evalarg, verbose);
45564564 if (deref == NULL)
45574565 {
45584566 *arg = name + len;
@@ -4563,7 +4571,10 @@
45634571 name = deref;
45644572 len = (long)STRLEN(name);
45654573 }
4574+
45664575 *paren = '(';
4576+ if (getline != NULL)
4577+ evalarg->eval_getline = getline;
45674578 }
45684579
45694580 if (ret == OK)
diff -r d73b5046612f -r aa45593ec2ca src/testdir/test_user_func.vim
--- a/src/testdir/test_user_func.vim Mon Dec 19 20:00:03 2022 +0100
+++ b/src/testdir/test_user_func.vim Mon Dec 19 21:30:03 2022 +0100
@@ -179,6 +179,60 @@
179179 eval 'bar'->s:addFoo()->assert_equal('barfoo')
180180 endfunc
181181
182+func Test_method_with_linebreaks()
183+ let lines =<< trim END
184+ vim9script
185+
186+ export def Scan(ll: list<number>): func(func(number))
187+ return (Emit: func(number)) => {
188+ for v in ll
189+ Emit(v)
190+ endfor
191+ }
192+ enddef
193+
194+ export def Build(Cont: func(func(number))): list<number>
195+ var result: list<number> = []
196+ Cont((v) => {
197+ add(result, v)
198+ })
199+ return result
200+ enddef
201+
202+ export def Noop(Cont: func(func(number))): func(func(number))
203+ return (Emit: func(number)) => {
204+ Cont(Emit)
205+ }
206+ enddef
207+ END
208+ call writefile(lines, 'Xlib.vim', 'D')
209+
210+ let lines =<< trim END
211+ vim9script
212+
213+ import "./Xlib.vim" as lib
214+
215+ const x = [1, 2, 3]
216+
217+ var result = lib.Scan(x)->lib.Noop()->lib.Build()
218+ assert_equal([1, 2, 3], result)
219+
220+ result = lib.Scan(x)->lib.Noop()
221+ ->lib.Build()
222+ assert_equal([1, 2, 3], result)
223+
224+ result = lib.Scan(x)
225+ ->lib.Noop()->lib.Build()
226+ assert_equal([1, 2, 3], result)
227+
228+ result = lib.Scan(x)
229+ ->lib.Noop()
230+ ->lib.Build()
231+ assert_equal([1, 2, 3], result)
232+ END
233+ call v9.CheckScriptSuccess(lines)
234+endfunc
235+
182236 func Test_failed_call_in_try()
183237 try | call UnknownFunc() | catch | endtry
184238 endfunc
diff -r d73b5046612f -r aa45593ec2ca src/version.c
--- a/src/version.c Mon Dec 19 20:00:03 2022 +0100
+++ b/src/version.c Mon Dec 19 21:30:03 2022 +0100
@@ -696,6 +696,8 @@
696696 static int included_patches[] =
697697 { /* Add new patch number below this line */
698698 /**/
699+ 1081,
700+/**/
699701 1080,
700702 /**/
701703 1079,
Show on old repository browser