unexpect break/next/redo/retry should raise LocalJumpError

This commit is contained in:
Yukihiro Matsumoto
2012-10-20 03:59:13 +09:00
parent 9bb6f0b331
commit 89a18e4f22
4 changed files with 15 additions and 12 deletions
+1 -1
View File
@@ -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
+7 -1
View File
@@ -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;
}
+6 -1
View File
@@ -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
+1 -9
View File
@@ -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