diff options
author | Sean Dewar <seandewar@users.noreply.github.com> | 2021-12-06 20:50:29 +0000 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2022-01-31 17:38:45 +0800 |
commit | d746f5aa418f86828aef689a2c4f8d5b53c9f7de (patch) | |
tree | 7367709069bdea893e58ba979e5a2e68e00883e1 /runtime | |
parent | 2870311a37314135b73e0ee54b41da86c9540a39 (diff) | |
download | rneovim-d746f5aa418f86828aef689a2c4f8d5b53c9f7de.tar.gz rneovim-d746f5aa418f86828aef689a2c4f8d5b53c9f7de.tar.bz2 rneovim-d746f5aa418f86828aef689a2c4f8d5b53c9f7de.zip |
feat(eval): partially port v8.2.0878
Problem: No reduce() function.
Solution: Add a reduce() function. (closes vim/vim#5481)
https://github.com/vim/vim/commit/85629985b71035608a37ba3bde86968481490d46
Needs CHECK_LIST_MATERIALIZE from v8.2.0751 (and range_list_materialize from
8.2.0149).
Move e_reduceempty to funcs.c, as it's only used there. Make it static.
Use tv_blob_len, tv_list_len == 0 for empty checks.
Replace vim_memset(&funcexe, 0, ...) with FUNCEXE_INIT.
Leave li initially undefined (tv_list_first returns NULL if list is NULL).
This patch has a memory leak fixed by v8.2.0882.
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/doc/builtin.txt | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt index a421de078b..92f33bd933 100644 --- a/runtime/doc/builtin.txt +++ b/runtime/doc/builtin.txt @@ -330,6 +330,8 @@ range({expr} [, {max} [, {stride}]]) readdir({dir} [, {expr}]) List file names in {dir} selected by {expr} readfile({fname} [, {type} [, {max}]]) List get list of lines from file {fname} +reduce({object}, {func} [, {initial}]) + any reduce {object} using {func} reg_executing() String get the executing register name reg_recorded() String get the last recorded register name reg_recording() String get the recording register name @@ -5589,6 +5591,25 @@ readfile({fname} [, {type} [, {max}]]) Can also be used as a |method|: > GetFileName()->readfile() +reduce({object}, {func} [, {initial}]) *reduce()* *E998* + {func} is called for every item in {object}, which can be a + |List| or a |Blob|. {func} is called with two arguments: the + result so far and current item. After processing all items + the result is returned. + + {initial} is the initial result. When omitted, the first item + in {object} is used and {func} is first called for the second + item. If {initial} is not given and {object} is empty no + result can be computed, an E998 error is given. + + Examples: > + echo reduce([1, 3, 5], { acc, val -> acc + val }) + echo reduce(['x', 'y'], { acc, val -> acc .. val }, 'a') + echo reduce(0z1122, { acc, val -> 2 * acc + val }) +< + Can also be used as a |method|: > + echo mylist->reduce({ acc, val -> acc + val }, 0) + reg_executing() *reg_executing()* Returns the single letter name of the register being executed. Returns an empty string when no register is being executed. |