vm_exec_handle_exception: do not goto into a branch
I'm not necessarily against every goto in general, but jumping into a branch is definitely a bad idea. Better refactor.
This commit is contained in:
parent
b95b249784
commit
f12efec2c2
Notes:
git
2020-06-29 11:06:36 +09:00
20
vm.c
20
vm.c
@ -2083,10 +2083,16 @@ vm_exec_handle_exception(rb_execution_context_t *ec, enum ruby_tag_type state,
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (state == TAG_BREAK && !escape_cfp) {
|
||||
type = CATCH_TYPE_BREAK;
|
||||
else if ((state == TAG_BREAK && !escape_cfp) ||
|
||||
(state == TAG_REDO) ||
|
||||
(state == TAG_NEXT)) {
|
||||
type = (const enum catch_type[TAG_MASK]) {
|
||||
[TAG_BREAK] = CATCH_TYPE_BREAK,
|
||||
[TAG_NEXT] = CATCH_TYPE_NEXT,
|
||||
[TAG_REDO] = CATCH_TYPE_REDO,
|
||||
/* otherwise = dontcare */
|
||||
}[state];
|
||||
|
||||
search_restart_point:
|
||||
ct = cfp->iseq->body->catch_table;
|
||||
if (ct) for (i = 0; i < ct->size; i++) {
|
||||
entry = UNALIGNED_MEMBER_PTR(ct, entries[i]);
|
||||
@ -2116,14 +2122,6 @@ vm_exec_handle_exception(rb_execution_context_t *ec, enum ruby_tag_type state,
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (state == TAG_REDO) {
|
||||
type = CATCH_TYPE_REDO;
|
||||
goto search_restart_point;
|
||||
}
|
||||
else if (state == TAG_NEXT) {
|
||||
type = CATCH_TYPE_NEXT;
|
||||
goto search_restart_point;
|
||||
}
|
||||
else {
|
||||
ct = cfp->iseq->body->catch_table;
|
||||
if (ct) for (i = 0; i < ct->size; i++) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user