summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/proc.c9
-rw-r--r--src/vm.c1
-rw-r--r--tasks/mrbgems_test.rake2
-rw-r--r--test/t/exception.rb12
4 files changed, 21 insertions, 3 deletions
diff --git a/src/proc.c b/src/proc.c
index b2bbe2453..1ae1d495e 100644
--- a/src/proc.c
+++ b/src/proc.c
@@ -17,9 +17,16 @@ struct RProc *
mrb_proc_new(mrb_state *mrb, mrb_irep *irep)
{
struct RProc *p;
+ mrb_callinfo *ci = mrb->c->ci;
p = (struct RProc*)mrb_obj_alloc(mrb, MRB_TT_PROC, mrb->proc_class);
- p->target_class = (mrb->c->ci) ? mrb->c->ci->target_class : 0;
+ p->target_class = 0;
+ if (ci) {
+ if (ci->proc)
+ p->target_class = ci->proc->target_class;
+ if (!p->target_class)
+ p->target_class = ci->target_class;
+ }
p->body.irep = irep;
p->env = 0;
mrb_irep_incref(mrb, irep);
diff --git a/src/vm.c b/src/vm.c
index a752c698b..69f01fe1e 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -604,7 +604,6 @@ mrb_context_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int
stack_init(mrb);
}
stack_extend(mrb, irep->nregs, stack_keep);
- ERR_PC_SET(mrb, pc);
mrb->c->ci->proc = proc;
mrb->c->ci->nregs = irep->nregs + 1;
regs = mrb->c->stack;
diff --git a/tasks/mrbgems_test.rake b/tasks/mrbgems_test.rake
index 500161103..cf907a510 100644
--- a/tasks/mrbgems_test.rake
+++ b/tasks/mrbgems_test.rake
@@ -3,7 +3,7 @@ MRuby.each_target do
test_rbobj = g.test_rbireps.ext(exts.object)
file test_rbobj => g.test_rbireps
- file g.test_rbireps => [g.test_rbfiles].flatten + [g.build.mrbcfile, libfile("#{build_dir}/lib/libmruby")] do |t|
+ file g.test_rbireps => [g.test_rbfiles].flatten + [g.build.mrbcfile] do |t|
open(t.name, 'w') do |f|
g.print_gem_init_header(f)
test_preload = [g.dir, MRUBY_ROOT].map {|dir|
diff --git a/test/t/exception.rb b/test/t/exception.rb
index 4239cba8b..8099e911f 100644
--- a/test/t/exception.rb
+++ b/test/t/exception.rb
@@ -345,3 +345,15 @@ assert('Exception#backtrace') do
true
end
+
+assert('Raise in ensure') do
+
+ assert_raise(RuntimeError) do
+ begin
+ raise ""
+ ensure
+ raise ""
+ end
+ end
+
+end