[#20392] [BigDecimal] proposal to change specification — "Tadashi Saito" <shiba@...2.accsnet.ne.jp>

斎藤と申します。

25 messages 2003/06/20
[#20407] Re: [BigDecimal] proposal to change specification — "Shigeo Kobayashi" <shigeo@...> 2003/06/22

小林です。

[#20447] [BigDecimal] renaming proposal — "Tadashi Saito" <shiba@...2.accsnet.ne.jp>

斎藤です。

47 messages 2003/06/24
[#20621] Re: [BigDecimal] renaming proposal — "Shigeo Kobayashi" <shigeo@...> 2003/07/11

小林@MAILチェック中です。

[#20628] Re: [BigDecimal] renaming proposal — "Shigeo Kobayashi" <shigeo@...> 2003/07/11

小林です。

[ruby-dev:20442] Re: [New Block] 悪いのは誰?

From: nobu.nakada@...
Date: 2003-06-24 07:33:19 UTC
List: ruby-dev #20442
なかだです。

At Tue, 24 Jun 2003 15:58:40 +0900,
> 1.8.0 preview3 で、次のスクリプトでの warning が2行目で
> 出ますが、4行目つまり、定義部分ではなく利用時に出るべき
> ではないでしょうか?
> 
> def foo
>   yield(1, 2)
> end
> foo do |x|
>   p x
> end
> 
> #-> test.rb:2: warning: multiple values for a block parameter (2 for 1)

どう出るのがいいでしょう。どこからyieldされてるかも分かったほう
がいいような気がするのですが。

とりあえず一案。

  $ ./ruby test.rb
  test.rb:4: warning: multiple values for a block parameter (2 for 1)
          from test.rb:2
  [1, 2]


Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.468
diff -u -2 -p -r1.468 eval.c
--- eval.c	23 Jun 2003 08:41:07 -0000	1.468
+++ eval.c	24 Jun 2003 07:29:22 -0000
@@ -4081,19 +4081,25 @@ rb_yield_0(val, self, klass, pcall, aval
 	    }
 	    else {
+		int len = 1;
 		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;
+		    len = 0;
+		  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);


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread