diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-07-13 05:50:04 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-07-13 05:50:04 +0000 |
commit | b0fd7aed1a78dbc6fc0007f9eec0ec24625628df (patch) | |
tree | 711690ba13265c7eba6c95913b940df4a0f819ce /eval.c | |
parent | e690040379ed10e238bfa7f17b48fe31ecb2bab0 (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.c | 14 |
1 files changed, 7 insertions, 7 deletions
@@ -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 */ |