diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-07-18 05:56:05 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-07-18 05:56:05 +0000 |
commit | f35971afdfd05304d0b5d2b0e3042a0c739f877f (patch) | |
tree | 7b2ec9bc16cac781813584423a00482fc94869aa /eval.c | |
parent | c068201c50bea13d3d48ab7460cdc407946af0ba (diff) | |
download | ruby-f35971afdfd05304d0b5d2b0e3042a0c739f877f.tar.gz |
* regex.c (NUM_FAILURE_ITEMS): was confusing NUM_REG_ITEMS and
NUM_NONREG_ITEMS, which have happened to be same value.
* class.c (rb_class_new): subclass check moved to this function.
* class.c (rb_class_boot): check less version of rb_class_new().
* eval.c (proc_invoke): should preserve iter status for embedded
frame in the block.
* file.c (rb_file_s_expand_path): may overrun buffer on stack.
* string.c (rb_str_insert): forgot to call rb_str_modify().
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1621 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -3590,7 +3590,8 @@ rb_jump_tag(tag) int rb_block_given_p() { - if (ruby_frame->iter) return Qtrue; + if (ruby_frame->iter && ruby_block) + return Qtrue; return Qfalse; } @@ -3603,7 +3604,8 @@ rb_iterator_p() static VALUE rb_f_block_given_p() { - if (ruby_frame->prev && ruby_frame->prev->iter) return Qtrue; + if (ruby_frame->prev && ruby_frame->prev->iter && ruby_block) + return Qtrue; return Qfalse; } @@ -3622,7 +3624,7 @@ rb_yield_0(val, self, klass, pcall) int state; static unsigned serial = 1; - if (!(rb_block_given_p() || rb_f_block_given_p()) || !ruby_block) { + if (!(rb_block_given_p() || rb_f_block_given_p())) { rb_raise(rb_eLocalJumpError, "yield called out of block"); } @@ -6409,7 +6411,6 @@ proc_invoke(proc, args, pcall) old_block = ruby_block; _block = *data; ruby_block = &_block; - ruby_block->frame.iter = ITER_NOT; PUSH_ITER(ITER_CUR); ruby_frame->iter = ITER_CUR; |