diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-06-24 08:59:34 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-06-24 08:59:34 +0000 |
commit | 5f80d051a685021ed423c9ab8c7816626a587078 (patch) | |
tree | ecbdca5ab67c8264e3c1b1126b01edb7a11623df | |
parent | 170aaabe4b118d2d2cc85e138d79f11c86166b4e (diff) | |
download | ruby-5f80d051a685021ed423c9ab8c7816626a587078.tar.gz |
* 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
-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); } |