Commit 89a18e4f authored by Yukihiro Matsumoto's avatar Yukihiro Matsumoto

unexpect break/next/redo/retry should raise LocalJumpError

parent 9bb6f0b3
......@@ -911,7 +911,7 @@ raise_error(codegen_scope *s, const char *msg)
{
int idx = new_lit(s, mrb_str_new_cstr(s->mrb, msg));
genop(s, MKOP_ABx(OP_ERR, 0, idx));
genop(s, MKOP_ABx(OP_ERR, 1, idx));
}
static double
......
......@@ -1817,8 +1817,14 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self)
CASE(OP_ERR) {
/* Bx raise RuntimeError with message Lit(Bx) */
mrb_value msg = pool[GETARG_Bx(i)];
mrb_value exc = mrb_exc_new3(mrb, E_RUNTIME_ERROR, msg);
mrb_value exc;
if (GETARG_A(i) == 0) {
exc = mrb_exc_new3(mrb, E_RUNTIME_ERROR, msg);
}
else {
exc = mrb_exc_new3(mrb, E_LOCALJUMP_ERROR, msg);
}
mrb->exc = (struct RObject*)mrb_object(exc);
goto L_RAISE;
}
......
......@@ -2,7 +2,12 @@
# LocalJumpError ISO Test
assert('LocalJumoError', '15.2.25') do
LocalJumpError.class == Class
begin
# this will cause an exception due to the wrong location
retry
rescue => e1
end
LocalJumpError.class == Class and e1.class == LocalJumpError
end
# TODO 15.2.25.2.1 LocalJumpError#exit_value
......
......@@ -2,13 +2,5 @@
# RuntimeError ISO Test
assert('RuntimeError', '15.2.28') do
e2 = nil
begin
# this will cause an exception due to the wrong location
retry
rescue => e1
e2 = e1
end
RuntimeError.class == Class and e2.class == RuntimeError
RuntimeError.class == Class
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment