From c6d2cde148d54fd1489eb3589a10d07753c701a7 Mon Sep 17 00:00:00 2001 From: Masamitsu MURASE Date: Mon, 25 Feb 2013 00:20:10 +0900 Subject: Adjust stack position of NODE_RESCUE. --- src/codegen.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/codegen.c b/src/codegen.c index 86d61fecf..d3239259b 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -1083,6 +1083,7 @@ codegen(codegen_scope *s, node *tree, int val) } if (n3->cdr->cdr->car) { codegen(s, n3->cdr->cdr->car, val); + if (val) pop(); } tmp = new_label(s); genop(s, MKOP_sBx(OP_JMP, exend)); @@ -1102,6 +1103,9 @@ codegen(codegen_scope *s, node *tree, int val) if (tree->car) { codegen(s, tree->car, val); } + else if (val) { + push(); + } dispatch_linked(s, exend); loop_pop(s, NOVAL); } -- cgit v1.2.3 From efa18038de038c366c6ee54f47670c80ec068aad Mon Sep 17 00:00:00 2001 From: Masamitsu MURASE Date: Mon, 25 Feb 2013 00:25:03 +0900 Subject: Add more tests for `begin` and `rescue`. --- test/t/exception.rb | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/test/t/exception.rb b/test/t/exception.rb index a2e6acc07..663c8f337 100644 --- a/test/t/exception.rb +++ b/test/t/exception.rb @@ -287,6 +287,34 @@ assert('Exception 16') do end end +assert('Exception 17') do + begin + raise "a" # StandardError + rescue ArgumentError + 1 + rescue StandardError + 2 + else + 3 + ensure + 4 + end == 2 +end + +assert('Exception 18') do + begin + 0 + rescue ArgumentError + 1 + rescue StandardError + 2 + else + 3 + ensure + 4 + end == 3 +end + assert('Exception#inspect without message') do Exception.new.inspect end -- cgit v1.2.3