[#32185] Date#+に大きな数字を与えるとおかしな日付に — "madoka yamamoto" <yamamotomadoka@...>

こんにちは、山本と申します。

26 messages 2007/11/08
[#32186] Re: Date#+に大きな数字を与えるとおかしな日付に — Tadayoshi Funaba <tadf@...> 2007/11/08

> Dateオブジェクトに+で大きな数字を与えるとおかしくなるようです。

[#32188] Re: Date#+に大きな数字を与えるとおかしな日付に — "madoka yamamoto" <yamamotomadoka@...> 2007/11/09

山本です。

[#32191] Re: Date#+に大きな数字を与えるとおかしな日付に — tadf@... 2007/11/09

> アルゴリズムの意味がわからないで書いた、表層的なパッチなので

[#32194] Re: Date#+に大きな数字を与えるとおかしな日付に — Yukihiro Matsumoto <matz@...> 2007/11/09

Hi,

[#32200] Re: rational (Re: Date#+に大きな数字を与えるとおかしな日付に) — Tadayoshi Funaba <tadf@...> 2007/11/10

> 1.9ではRationalとComplexを組み込みに、という話はありましたが、

[#32225] Re: rational (Re: Date#+に大きな数字を与えるとおかしな日付に) — Shin-ichiro HARA <sinara@...> 2007/11/12

原です。

[#32198] [提案] Array#tail — "Yusuke ENDOH" <mame@...>

遠藤と申します。

21 messages 2007/11/09
[#32199] Re: [提案] Array#tail — Yukihiro Matsumoto <matz@...> 2007/11/10

まつもと ゆきひろです

[#32352] 1.9.1のリリース時期について — KIMURA Koichi <hogemuta@...>

木村です。

16 messages 2007/11/24
[#32353] Re: 1.9.1のリリース時期について — Yukihiro Matsumoto <matz@...> 2007/11/24

まつもと ゆきひろです

[#32403] Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — Takahiro Kambe <taca@...>

こんばんは。

32 messages 2007/11/29
[#32414] Re: Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — Urabe Shyouhei <shyouhei@...> 2007/11/30

卜部です。

[#32444] Re: Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — Yukihiro Matsumoto <matz@...> 2007/12/03

まつもと ゆきひろです

[#32488] Re: Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — Urabe Shyouhei <shyouhei@...> 2007/12/08

卜部です。

[#32525] Re: Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — "Yusuke ENDOH" <mame@...> 2007/12/10

遠藤と申します。

[#32643] Re: Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — "Yusuke ENDOH" <mame@...> 2007/12/19

遠藤です。

[#32409] Re: [ruby-cvs:21293] Ruby:r14056 (trunk): * signal.c (trap_signm): SIGVTALRM no longer used for green — SASADA Koichi <ko1@...>

 ささだです.

10 messages 2007/11/30

[ruby-dev:32389] Re: enumerator with single array and multiple arguments.

From: SASADA Koichi <ko1@...>
Date: 2007-11-28 05:54:45 UTC
List: ruby-dev #32389
 ささだです.

Tanaka Akira wrote:
> enumerator を通すとひとつの配列と複数の引数が区別できません。

 こんな感じでどうでしょうか.rb_iterate で積む C で書いたブロック呼
び出し関数で,1.8 だと self を渡していたところを,引数の数を渡すよう
にしてみました.誰も self 使ってないからいいかなぁ,と.


Index: include/ruby/ruby.h
===================================================================
--- include/ruby/ruby.h	(リビジョン 14039)
+++ include/ruby/ruby.h	(作業コピー)
@@ -772,6 +772,7 @@
 VALUE rb_each(VALUE);
 VALUE rb_yield(VALUE);
 VALUE rb_yield_values(int n, ...);
+VALUE rb_yield_values2(int n, VALUE *argv);
 VALUE rb_yield_splat(VALUE);
 int rb_block_given_p(void);
 void rb_need_block(void);
Index: enumerator.c
===================================================================
--- enumerator.c	(リビジョン 14039)
+++ enumerator.c	(作業コピー)
@@ -225,6 +225,17 @@
 }

 static VALUE
+enumerator_each_i(VALUE v, VALUE enum_obj, int argc)
+{
+    if (argc == 1) {
+	return rb_yield(v);
+    }
+    else {
+	return rb_yield_values2(argc, RARRAY_PTR(v));
+    }
+}
+
+static VALUE
 enumerator_init(VALUE enum_obj, VALUE obj, VALUE meth, int argc,
VALUE *argv)
 {
     struct enumerator *ptr = enumerator_ptr(enum_obj);
@@ -235,7 +246,7 @@
 	ptr->iter = enumerator_iter_i;
     }
     else {
-	ptr->iter = (enum_iter *)rb_yield;
+	ptr->iter = (enum_iter *)enumerator_each_i;
     }
     if (argc) ptr->args = rb_ary_new4(argc, argv);
     ptr->fib = 0;
Index: eval.c
===================================================================
--- eval.c	(リビジョン 14039)
+++ eval.c	(作業コピー)
@@ -953,6 +953,12 @@
 }

 VALUE
+rb_yield_values2(int argc, VALUE *argv)
+{
+    return rb_yield_0(argc, argv);
+}
+
+VALUE
 rb_yield_splat(VALUE values)
 {
     VALUE tmp = rb_check_array_type(values);
Index: insnhelper.ci
===================================================================
--- insnhelper.ci	(リビジョン 14039)
+++ insnhelper.ci	(作業コピー)
@@ -661,7 +661,7 @@
 		  self, (VALUE)block->dfp,
 		  0, th->cfp->sp, block->lfp, 1);

-    val = (*ifunc->nd_cfnc) (arg, ifunc->nd_tval, Qnil);
+    val = (*ifunc->nd_cfnc) (arg, ifunc->nd_tval, argc);

     th->cfp++;
     return val;


-- 
// SASADA Koichi at atdot dot net

In This Thread