summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-05-29 08:59:39 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-05-29 08:59:39 +0000
commit8e73a6ce75a115b1fd411d5a3a987d599a7dcc4b (patch)
treee5e320e2ce9e6fbc0cc00927dffa60894f87b709 /eval.c
parentf2a1269383c19a2d6d9fd475681b34e5e81e65e3 (diff)
* regex.c (re_compile_pattern): no back reference to a
subexpression if inside of it. * eval.c (rb_yield_0): preserve and restore ruby_cref as well. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@1473 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/eval.c b/eval.c
index 79e9e3e7dd..6a8cf3f552 100644
--- a/eval.c
+++ b/eval.c
@@ -3503,6 +3503,7 @@ rb_yield_0(val, self, klass, acheck)
{
NODE *node;
volatile VALUE result = Qnil;
+ volatile VALUE old_cref;
struct BLOCK *block;
struct SCOPE *old_scope;
struct FRAME frame;
@@ -3519,6 +3520,8 @@ rb_yield_0(val, self, klass, acheck)
frame = block->frame;
frame.prev = ruby_frame;
ruby_frame = &(frame);
+ old_cref = (VALUE)ruby_cref;
+ ruby_cref = (NODE*)ruby_frame->cbase;
old_scope = ruby_scope;
ruby_scope = block->scope;
ruby_block = block->prev;
@@ -3643,6 +3646,7 @@ rb_yield_0(val, self, klass, acheck)
POP_VARS();
ruby_block = block;
ruby_frame = ruby_frame->prev;
+ ruby_cref = (NODE*)old_cref;
if (ruby_scope->flag & SCOPE_DONT_RECYCLE)
scope_dup(old_scope);
ruby_scope = old_scope;