summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-07-13 05:50:04 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-07-13 05:50:04 +0000
commitb0fd7aed1a78dbc6fc0007f9eec0ec24625628df (patch)
tree711690ba13265c7eba6c95913b940df4a0f819ce /eval.c
parente690040379ed10e238bfa7f17b48fe31ecb2bab0 (diff)
* eval.c: wrapper modifies updated to 1.7 changes.
* object.c (rb_obj_dup): should free generic_ivar if original owns them. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@1593 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/eval.c b/eval.c
index 8e3ffd1035..622b624e99 100644
--- a/eval.c
+++ b/eval.c
@@ -574,6 +574,7 @@ new_blktag()
_block.vmode = scope_vmode; \
_block.flags = BLOCK_D_SCOPE; \
_block.dyna_vars = ruby_dyna_vars; \
+ _block.wrapper = ruby_wrapper; \
ruby_block = &_block;
#define POP_BLOCK_TAG(tag) do { \
@@ -3511,8 +3512,9 @@ rb_yield_0(val, self, klass, acheck)
NODE *node;
volatile VALUE result = Qnil;
volatile VALUE old_cref;
- struct BLOCK *block;
- struct SCOPE *old_scope;
+ volatile VALUE old_wrapper;
+ struct BLOCK * volatile block;
+ struct SCOPE * volatile old_scope;
struct FRAME frame;
int state;
static unsigned serial = 1;
@@ -3529,6 +3531,8 @@ rb_yield_0(val, self, klass, acheck)
ruby_frame = &(frame);
old_cref = (VALUE)ruby_cref;
ruby_cref = (NODE*)ruby_frame->cbase;
+ old_wrapper = ruby_wrapper;
+ ruby_wrapper = block->wrapper;
old_scope = ruby_scope;
ruby_scope = block->scope;
ruby_block = block->prev;
@@ -3654,6 +3658,7 @@ rb_yield_0(val, self, klass, acheck)
ruby_block = block;
ruby_frame = ruby_frame->prev;
ruby_cref = (NODE*)old_cref;
+ ruby_wrapper = old_wrapper;
if (ruby_scope->flag & SCOPE_DONT_RECYCLE)
scope_dup(old_scope);
ruby_scope = old_scope;
@@ -6334,7 +6339,6 @@ proc_call(proc, args)
orphan = blk_orphan(data);
ruby_wrapper = data->wrapper;
-
/* PUSH BLOCK from data */
old_block = ruby_block;
_block = *data;
@@ -6455,7 +6459,6 @@ block_pass(self, node)
int state;
volatile int orphan;
volatile int safe = ruby_safe_level;
- volatile VALUE old_wrapper = ruby_wrapper;
if (NIL_P(block)) {
return rb_eval(self, node->nd_iter);
@@ -6471,8 +6474,6 @@ block_pass(self, node)
Data_Get_Struct(block, struct BLOCK, data);
orphan = blk_orphan(data);
- ruby_wrapper = data->wrapper;
-
/* PUSH BLOCK from data */
old_block = ruby_block;
_block = *data;
@@ -6510,7 +6511,6 @@ block_pass(self, node)
}
}
ruby_block = old_block;
- ruby_wrapper = old_wrapper;
ruby_safe_level = safe;
switch (state) {/* escape from orphan procedure */