Mercurial > vim
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 |