diff options
| author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-06-07 23:33:51 +0000 |
|---|---|---|
| committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-06-07 23:33:51 +0000 |
| commit | 3a9bbe2595d34787d0e8a813ec0b2c2c87a34671 (patch) | |
| tree | f741ef14908586e50ba0264d7dd2d373d8b53c2b /eval.c | |
| parent | f955ef5f405cdb2021e39d740a0d820e2dc5ba5d (diff) | |
| download | ruby-3a9bbe2595d34787d0e8a813ec0b2c2c87a34671.tar.gz ruby-3a9bbe2595d34787d0e8a813ec0b2c2c87a34671.tar.xz ruby-3a9bbe2595d34787d0e8a813ec0b2c2c87a34671.zip | |
* enum.c (enum_min_by, enum_max_by): return nil if no iteration.
fixed: [ruby-dev:26245]
* eval.c (rb_need_block): ensure a block is given.
* eval.c (backtrace): skip successive frames sharing same node.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@8590 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
| -rw-r--r-- | eval.c | 16 |
1 files changed, 11 insertions, 5 deletions
@@ -4674,6 +4674,14 @@ break_jump(retval) localjump_error("unexpected break", retval, TAG_BREAK); } +void +rb_need_block() +{ + if (!rb_block_given_p()) { + localjump_error("no block given", Qnil, 0); + } +} + static VALUE rb_yield_0(val, self, klass, flags, avalue) VALUE val, self, klass; /* OK */ @@ -4691,9 +4699,7 @@ rb_yield_0(val, self, klass, flags, avalue) int lambda = flags & YIELD_LAMBDA_CALL; int state; - if (!rb_block_given_p()) { - localjump_error("no block given", Qnil, 0); - } + rb_need_block(); PUSH_VARS(); block = ruby_block; @@ -6029,8 +6035,9 @@ backtrace(lev) } } } - while (frame && (n = frame->node)) { + for (; frame && (n = frame->node); frame = frame->prev) { if (frame->prev && frame->prev->last_func) { + if (frame->prev->node == n) continue; snprintf(buf, BUFSIZ, "%s:%d:in `%s'", n->nd_file, nd_line(n), rb_id2name(frame->prev->last_func)); @@ -6039,7 +6046,6 @@ backtrace(lev) snprintf(buf, BUFSIZ, "%s:%d", n->nd_file, nd_line(n)); } rb_ary_push(ary, rb_str_new2(buf)); - frame = frame->prev; } return ary; |
