From 5f80d051a685021ed423c9ab8c7816626a587078 Mon Sep 17 00:00:00 2001 From: nobu Date: Tue, 24 Jun 2003 08:59:34 +0000 Subject: [PATCH] * eval.c (rb_yield_0): show yielded block position not only yielding point. [ruby-dev:20441] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3996 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ eval.c | 20 ++++++++++++-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index bdafb83cb0..7d85ded3dc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Jun 24 17:59:30 2003 Nobuyoshi Nakada + + * eval.c (rb_yield_0): show yielded block position not only yielding + point. [ruby-dev:20441] + Tue Jun 24 16:47:07 2003 Minero Aoki * lib/net/http.rb (HTTPHeader#proxy_basic_auth): missing `@'. diff --git a/eval.c b/eval.c index 4d19b89c34..0468d37dc9 100644 --- a/eval.c +++ b/eval.c @@ -2350,7 +2350,6 @@ rb_Array(val) VALUE val; { VALUE tmp = rb_check_array_type(val); - ID to_a; if (NIL_P(tmp)) { /* hack to avoid invoke Object#to_a */ @@ -4080,21 +4079,26 @@ rb_yield_0(val, self, klass, pcall, avalue) massign(self, block->var, val, pcall); } else { + int len = 0; if (avalue) { - if (RARRAY(val)->len == 0) { - goto zero_arg; - } - if (RARRAY(val)->len == 1) { + len = RARRAY(val)->len; + if (len == 1) { val = RARRAY(val)->ptr[0]; } else { - rb_warn("multiple values for a block parameter (%d for 1)", RARRAY(val)->len); + goto mult_values; } } else if (val == Qundef) { - zero_arg: - rb_warn("multiple values for a block parameter (0 for 1)"); val = Qnil; + mult_values: + { + NODE *curr = ruby_current_node; + ruby_current_node = block->var; + rb_warn("multiple values for a block parameter (%d for 1)\n\tfrom %s:%d", + len, curr->nd_file, nd_line(curr)); + ruby_current_node = curr; + } } assign(self, block->var, val, pcall); }