diff options
author | vimboss <devnull@localhost> | 2008-08-08 10:36:31 +0000 |
---|---|---|
committer | vimboss <devnull@localhost> | 2008-08-08 10:36:31 +0000 |
commit | 3d2a8ea9aedd94323d1264b2317822dc2fbf3feb (patch) | |
tree | bc7ca5b53d6f86d9281ebf8f415e7d8148d5f223 | |
parent | faa890d5fcb170172b0438d0f9bf3b2f12eff01d (diff) | |
download | vim-3d2a8ea9aedd94323d1264b2317822dc2fbf3feb.tar.gz |
-rw-r--r-- | runtime/doc/eval.txt | 6 | ||||
-rw-r--r-- | src/eval.c | 5 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 11 insertions, 2 deletions
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index ffe5ea9e..8bb990a0 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -2681,7 +2681,11 @@ extend({expr1}, {expr2} [, {expr3}]) *extend()* Examples: > :echo sort(extend(mylist, [7, 5])) :call extend(mylist, [2, 3], 1) -< Use |add()| to concatenate one item to a list. To concatenate +< When {expr1} is the same List as {expr2} then the number of + items copied is equal to the original length of the List. + E.g., when {expr3} is 1 you get N new copies of the first item + (where N is the original length of the List). + Use |add()| to concatenate one item to a list. To concatenate two lists into a new list use the + operator: > :let newlist = [1, 2, 3] + [4, 5] < @@ -6231,8 +6231,11 @@ list_extend(l1, l2, bef) listitem_T *bef; { listitem_T *item; + int todo = l2->lv_len; - for (item = l2->lv_first; item != NULL; item = item->li_next) + /* We also quit the loop when we have inserted the original item count of + * the list, avoid a hang when we extend a list with itself. */ + for (item = l2->lv_first; item != NULL && --todo >= 0; item = item->li_next) if (list_insert_tv(l1, &item->li_tv, bef) == FAIL) return FAIL; return OK; diff --git a/src/version.c b/src/version.c index 21d7b143..c8565c44 100644 --- a/src/version.c +++ b/src/version.c @@ -677,6 +677,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1, +/**/ 0 }; |