comparison src/eval.c @ 716:8ae24f338cab v7.0217

updated for version 7.0217
author vimboss
date Tue, 07 Mar 2006 22:38:47 +0000
parents 0f9f4761ad9c
children e180933b876a
comparison
equal deleted inserted replaced
715:b526e10493b1 716:8ae24f338cab
929 if (append) 929 if (append)
930 set_var_lval(redir_lval, redir_endp, &tv, TRUE, (char_u *)"."); 930 set_var_lval(redir_lval, redir_endp, &tv, TRUE, (char_u *)".");
931 else 931 else
932 set_var_lval(redir_lval, redir_endp, &tv, TRUE, (char_u *)"="); 932 set_var_lval(redir_lval, redir_endp, &tv, TRUE, (char_u *)"=");
933 err = did_emsg; 933 err = did_emsg;
934 did_emsg += save_emsg; 934 did_emsg |= save_emsg;
935 if (err) 935 if (err)
936 { 936 {
937 var_redir_stop(); 937 var_redir_stop();
938 return FAIL; 938 return FAIL;
939 } 939 }
977 977
978 save_emsg = did_emsg; 978 save_emsg = did_emsg;
979 did_emsg = FALSE; 979 did_emsg = FALSE;
980 set_var_lval(redir_lval, redir_endp, &tv, FALSE, (char_u *)"."); 980 set_var_lval(redir_lval, redir_endp, &tv, FALSE, (char_u *)".");
981 err = did_emsg; 981 err = did_emsg;
982 did_emsg += save_emsg; 982 did_emsg |= save_emsg;
983 if (err) 983 if (err)
984 var_redir_stop(); 984 var_redir_stop();
985 985
986 vim_free(tv.vval.v_string); 986 vim_free(tv.vval.v_string);
987 } 987 }
8959 typval_T save_val; 8959 typval_T save_val;
8960 typval_T save_key; 8960 typval_T save_key;
8961 int rem; 8961 int rem;
8962 int todo; 8962 int todo;
8963 char_u *msg = map ? (char_u *)"map()" : (char_u *)"filter()"; 8963 char_u *msg = map ? (char_u *)"map()" : (char_u *)"filter()";
8964 int save_called_emsg; 8964 int save_did_emsg;
8965 8965
8966 rettv->vval.v_number = 0; 8966 rettv->vval.v_number = 0;
8967 if (argvars[0].v_type == VAR_LIST) 8967 if (argvars[0].v_type == VAR_LIST)
8968 { 8968 {
8969 if ((l = argvars[0].vval.v_list) == NULL 8969 if ((l = argvars[0].vval.v_list) == NULL
8989 if (expr != NULL) 8989 if (expr != NULL)
8990 { 8990 {
8991 prepare_vimvar(VV_VAL, &save_val); 8991 prepare_vimvar(VV_VAL, &save_val);
8992 expr = skipwhite(expr); 8992 expr = skipwhite(expr);
8993 8993
8994 /* We reset "called_emsg" to be able to detect whether an error 8994 /* We reset "did_emsg" to be able to detect whether an error
8995 * occurred during evaluation of the expression. "did_emsg" can't be 8995 * occurred during evaluation of the expression. */
8996 * used, because it is reset when calling a function. */ 8996 save_did_emsg = did_emsg;
8997 save_called_emsg = called_emsg; 8997 did_emsg = FALSE;
8998 called_emsg = FALSE;
8999 8998
9000 if (argvars[0].v_type == VAR_DICT) 8999 if (argvars[0].v_type == VAR_DICT)
9001 { 9000 {
9002 prepare_vimvar(VV_KEY, &save_key); 9001 prepare_vimvar(VV_KEY, &save_key);
9003 vimvars[VV_KEY].vv_type = VAR_STRING; 9002 vimvars[VV_KEY].vv_type = VAR_STRING;
9013 di = HI2DI(hi); 9012 di = HI2DI(hi);
9014 if (tv_check_lock(di->di_tv.v_lock, msg)) 9013 if (tv_check_lock(di->di_tv.v_lock, msg))
9015 break; 9014 break;
9016 vimvars[VV_KEY].vv_str = vim_strsave(di->di_key); 9015 vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
9017 if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL 9016 if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL
9018 || called_emsg) 9017 || did_emsg)
9019 break; 9018 break;
9020 if (!map && rem) 9019 if (!map && rem)
9021 dictitem_remove(d, di); 9020 dictitem_remove(d, di);
9022 clear_tv(&vimvars[VV_KEY].vv_tv); 9021 clear_tv(&vimvars[VV_KEY].vv_tv);
9023 } 9022 }
9032 { 9031 {
9033 if (tv_check_lock(li->li_tv.v_lock, msg)) 9032 if (tv_check_lock(li->li_tv.v_lock, msg))
9034 break; 9033 break;
9035 nli = li->li_next; 9034 nli = li->li_next;
9036 if (filter_map_one(&li->li_tv, expr, map, &rem) == FAIL 9035 if (filter_map_one(&li->li_tv, expr, map, &rem) == FAIL
9037 || called_emsg) 9036 || did_emsg)
9038 break; 9037 break;
9039 if (!map && rem) 9038 if (!map && rem)
9040 listitem_remove(l, li); 9039 listitem_remove(l, li);
9041 } 9040 }
9042 } 9041 }
9043 9042
9044 restore_vimvar(VV_VAL, &save_val); 9043 restore_vimvar(VV_VAL, &save_val);
9045 9044
9046 called_emsg |= save_called_emsg; 9045 did_emsg |= save_did_emsg;
9047 } 9046 }
9048 9047
9049 copy_tv(&argvars[0], rettv); 9048 copy_tv(&argvars[0], rettv);
9050 } 9049 }
9051 9050
17828 return; 17827 return;
17829 } 17828 }
17830 else 17829 else
17831 eap->skip = TRUE; 17830 eap->skip = TRUE;
17832 } 17831 }
17832
17833 /* An error in a function call during evaluation of an expression in magic 17833 /* An error in a function call during evaluation of an expression in magic
17834 * braces should not cause the function not to be defined. */ 17834 * braces should not cause the function not to be defined. */
17835 saved_did_emsg = did_emsg; 17835 saved_did_emsg = did_emsg;
17836 did_emsg = FALSE; 17836 did_emsg = FALSE;
17837 17837