mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #5392 from mruby/revert-5391-throw
Revert "Fix `SIGSEGV` with mruby-method + mruby-catch"
This commit is contained in:
@@ -780,25 +780,8 @@ mrb_yield_with_class(mrb_state *mrb, mrb_value b, mrb_int argc, const mrb_value
|
||||
mrb->c->ci->stack[argc+1] = mrb_nil_value();
|
||||
|
||||
if (MRB_PROC_CFUNC_P(p)) {
|
||||
struct mrb_jmpbuf *prev_jmp = mrb->jmp;
|
||||
struct mrb_jmpbuf c_jmp;
|
||||
int ai = mrb_gc_arena_save(mrb);
|
||||
mrb_bool exc = FALSE;
|
||||
|
||||
MRB_TRY(&c_jmp) {
|
||||
mrb->jmp = &c_jmp;
|
||||
ci->acc = CI_ACC_DIRECT;
|
||||
val = MRB_PROC_CFUNC(p)(mrb, self);
|
||||
}
|
||||
MRB_CATCH(&c_jmp) {
|
||||
exc = TRUE;
|
||||
}
|
||||
MRB_END_EXC(&c_jmp);
|
||||
|
||||
mrb->jmp = prev_jmp;
|
||||
mrb_gc_arena_restore(mrb, ai);
|
||||
val = MRB_PROC_CFUNC(p)(mrb, self);
|
||||
cipop(mrb);
|
||||
if (exc) MRB_THROW(mrb->jmp);
|
||||
}
|
||||
else {
|
||||
val = mrb_run(mrb, p, self);
|
||||
|
||||
Reference in New Issue
Block a user