зеркало из https://github.com/github/ruby.git
Copy va_list of exception classes
The list is reused when an exception raised again after retrying in the rescue procedure.
This commit is contained in:
Родитель
a6f5f3cccd
Коммит
97cf290063
6
eval.c
6
eval.c
|
@ -1033,14 +1033,18 @@ rb_vrescue2(VALUE (* b_proc) (VALUE), VALUE data1,
|
|||
if (state == TAG_RAISE) {
|
||||
int handle = FALSE;
|
||||
VALUE eclass;
|
||||
va_list ap;
|
||||
|
||||
result = Qnil;
|
||||
while ((eclass = va_arg(args, VALUE)) != 0) {
|
||||
/* reuses args when raised again after retrying in r_proc */
|
||||
va_copy(ap, args);
|
||||
while ((eclass = va_arg(ap, VALUE)) != 0) {
|
||||
if (rb_obj_is_kind_of(ec->errinfo, eclass)) {
|
||||
handle = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
va_end(ap);
|
||||
|
||||
if (handle) {
|
||||
state = TAG_NONE;
|
||||
|
|
Загрузка…
Ссылка в новой задаче