Mercurial > vim
comparison src/vim9execute.c @ 33601:28605af12602 v9.0.2044
patch 9.0.2044: Vim9: exceptions confuse defered functions
Commit: https://github.com/vim/vim/commit/0672595fd50e9ae668676a40e28ebf66d7f52392
Author: Yegappan Lakshmanan <yegappan@yahoo.com>
Date: Wed Oct 18 11:47:37 2023 +0200
patch 9.0.2044: Vim9: exceptions confuse defered functions
Problem: Vim9: exceptions confuse defered functions
Solution: save and restore exception state when calling defered
functions
closes: #13364
closes: #13372
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 18 Oct 2023 12:00:05 +0200 |
parents | c470d4fd5eba |
children | 31fb1a760ad6 |
comparison
equal
deleted
inserted
replaced
33600:b59496c2797b | 33601:28605af12602 |
---|---|
1138 } | 1138 } |
1139 | 1139 |
1140 char_u *name = functv->vval.v_string; | 1140 char_u *name = functv->vval.v_string; |
1141 functv->vval.v_string = NULL; | 1141 functv->vval.v_string = NULL; |
1142 | 1142 |
1143 // If the deferred function is called after an exception, then only the | |
1144 // first statement in the function will be executed. Save and restore | |
1145 // the try/catch/throw exception state. | |
1146 int save_trylevel = trylevel; | |
1147 int save_did_throw = did_throw; | |
1148 int save_need_rethrow = need_rethrow; | |
1149 | |
1150 trylevel = 0; | |
1151 did_throw = FALSE; | |
1152 need_rethrow = FALSE; | |
1153 | |
1143 (void)call_func(name, -1, &rettv, argcount, argvars, &funcexe); | 1154 (void)call_func(name, -1, &rettv, argcount, argvars, &funcexe); |
1155 | |
1156 trylevel = save_trylevel; | |
1157 did_throw = save_did_throw; | |
1158 need_rethrow = save_need_rethrow; | |
1144 | 1159 |
1145 clear_tv(&rettv); | 1160 clear_tv(&rettv); |
1146 vim_free(name); | 1161 vim_free(name); |
1147 } | 1162 } |
1148 } | 1163 } |