aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-07-10 02:42:07 +0000
committermame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-07-10 02:42:07 +0000
commitb0f115da1a8952e2328e3ef872bb2903c45ed96f (patch)
tree6f0232c7d59881cff82d9870214def9f672ed741
parentd22e08f9375dbc0d0a962751d1c57f17b22f01b6 (diff)
downloadruby-b0f115da1a8952e2328e3ef872bb2903c45ed96f.tar.gz
* parse.y (reduce_nodes_gen): NODE_RETURN in rescue body must not be
reduced when there is an else clause. This caused bizarre behavior in [Bug #4473] [ruby-core:35629] [ruby-core:37884]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32483 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--parse.y4
2 files changed, 10 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 2c8032ec1e..5f474db4b4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Sun Jul 10 11:35:29 2011 Yusuke Endoh <mame@tsg.ne.jp>
+
+ * parse.y (reduce_nodes_gen): NODE_RETURN in rescue body must not be
+ reduced when there is an else clause. This caused bizarre behavior
+ in [Bug #4473] [ruby-core:35629] [ruby-core:37884].
+
Sun Jul 10 09:46:14 2011 Masaya Tarui <tarui@ruby-lnag.org>
* range.c (range_max): fix behavior with excluded end value.
diff --git a/parse.y b/parse.y
index 9769bb9887..ffa649b7af 100644
--- a/parse.y
+++ b/parse.y
@@ -8713,6 +8713,10 @@ reduce_nodes_gen(struct parser_params *parser, NODE **body)
if (!subnodes(nd_head, nd_resq)) goto end;
break;
case NODE_RESCUE:
+ if (node->nd_else) {
+ body = &node->nd_resq;
+ break;
+ }
if (!subnodes(nd_head, nd_resq)) goto end;
break;
default: