comparison src/eval.c @ 6166:0a42938f449c v7.4.419

updated for version 7.4.419 Problem: Whan part of a list is locked it's possible to make changes. Solution: Check if any of the list items is locked before make a change. (ZyX)
author Bram Moolenaar <bram@vim.org>
date Fri, 29 Aug 2014 09:46:10 +0200
parents d4e0c197e979
children fca35aa9380a
comparison
equal deleted inserted replaced
6165:ed87285c8ec1 6166:0a42938f449c
2943 ? lp->ll_tv->v_lock 2943 ? lp->ll_tv->v_lock
2944 : lp->ll_tv->vval.v_dict->dv_lock, lp->ll_name)) 2944 : lp->ll_tv->vval.v_dict->dv_lock, lp->ll_name))
2945 ; 2945 ;
2946 else if (lp->ll_range) 2946 else if (lp->ll_range)
2947 { 2947 {
2948 listitem_T *ll_li = lp->ll_li;
2949 int ll_n1 = lp->ll_n1;
2950
2951 /*
2952 * Check whether any of the list items is locked
2953 */
2954 for (ri = rettv->vval.v_list->lv_first; ri != NULL; )
2955 {
2956 if (tv_check_lock(ll_li->li_tv.v_lock, lp->ll_name))
2957 return;
2958 ri = ri->li_next;
2959 if (ri == NULL || (!lp->ll_empty2 && lp->ll_n2 == ll_n1))
2960 break;
2961 ll_li = ll_li->li_next;
2962 ++ll_n1;
2963 }
2964
2948 /* 2965 /*
2949 * Assign the List values to the list items. 2966 * Assign the List values to the list items.
2950 */ 2967 */
2951 for (ri = rettv->vval.v_list->lv_first; ri != NULL; ) 2968 for (ri = rettv->vval.v_list->lv_first; ri != NULL; )
2952 { 2969 {
3644 else if (tv_check_lock(lp->ll_tv->v_lock, lp->ll_name)) 3661 else if (tv_check_lock(lp->ll_tv->v_lock, lp->ll_name))
3645 return FAIL; 3662 return FAIL;
3646 else if (lp->ll_range) 3663 else if (lp->ll_range)
3647 { 3664 {
3648 listitem_T *li; 3665 listitem_T *li;
3666 listitem_T *ll_li = lp->ll_li;
3667 int ll_n1 = lp->ll_n1;
3668
3669 while (ll_li != NULL && (lp->ll_empty2 || lp->ll_n2 >= ll_n1))
3670 {
3671 li = ll_li->li_next;
3672 if (tv_check_lock(ll_li->li_tv.v_lock, lp->ll_name))
3673 return FAIL;
3674 ll_li = li;
3675 ++ll_n1;
3676 }
3649 3677
3650 /* Delete a range of List items. */ 3678 /* Delete a range of List items. */
3651 while (lp->ll_li != NULL && (lp->ll_empty2 || lp->ll_n2 >= lp->ll_n1)) 3679 while (lp->ll_li != NULL && (lp->ll_empty2 || lp->ll_n2 >= lp->ll_n1))
3652 { 3680 {
3653 li = lp->ll_li->li_next; 3681 li = lp->ll_li->li_next;