diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | eval.c | 20 |
2 files changed, 17 insertions, 8 deletions
@@ -1,3 +1,8 @@ +Tue Jun 24 17:59:30 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net> + + * 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 <aamine@loveruby.net> * lib/net/http.rb (HTTPHeader#proxy_basic_auth): missing `@'. @@ -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); } |