[#39604] [Bug #2323] "Z".."Z".succが空 — Hiro Asari <redmine@...>
Bug #2323: "Z".."Z".succが空
[#39606] [Feature:trunk] Dir instance methods for relative path — Nobuyoshi Nakada <nobu@...>
なかだです。
まつもと ゆきひろです
kosakiです
なかだです。
> なかだです。
まつもと ゆきひろです
成瀬です。
[#39642] [Bug #2338] 大きなFixnumを値にもつHash#hashが呼び出しごとに変わる — Yuki Sonoda <redmine@...>
Bug #2338: 大きなFixnumを値にもつHash#hashが呼び出しごとに変わる
44Oi44Or44Go55Sz44GX44G+44GZ44CCCgrku6XkuIvjga7nkrDlooPjgaflho3nj77jgZfjgabj
[#39660] [Bug:trunk] Enumerator.new {|y| y << 1 << 2 << 3 } — Yusuke ENDOH <mame@...>
遠藤です。
In article <e0b1e5700911110537u2aacf835pc0aea13d89a92cef@mail.gmail.com>,
遠藤です。
At Wed, 11 Nov 2009 23:50:47 +0900,
遠藤です。
[#39669] メンテナ確認プロセス終了。メンテナ募集 — "Yugui (Yuki Sonoda)" <yugui@...>
-----BEGIN PGP SIGNED MESSAGE-----
[#39685] [Feature #2366] private constant — Yusuke Endoh <redmine@...>
Feature #2366: private constant
まつもと ゆきひろです
チケット #2366 が更新されました。 (by Yusuke Endoh)
遠藤です。
=1B$B31$H$$$$$^$9!#=1B(B
遠藤です。
=1B$B31$H$$$$$^$9!#=1B(B
成瀬です。
=1B$B31$H$$$$$^$9!#=1B(B
遠藤です。
=1B$B31$H$$$$$^$9!#=1B(B
[#39696] [Feature #2372] read_all() with buffering — _ wanabe <redmine@...>
Feature #2372: read_all() with buffering
チケット #2372 が更新されました。 (by _ wanabe)
In article <4b0081d7e73af_8bc5c2a894735e@redmine.ruby-lang.org>,
[#39709] [Bug #2381] Math.gammaの挙動がx86_64とia64で異なる — Mitsuhiro TAKANO <redmine@...>
Bug #2381: Math.gammaの挙動がx86_64とia64で異なる
[#39714] Net::FTP で upload の resume ができない — Tomoyuki Chikanaga <chikanag@...>
近永と申します。
[#39720] hidden objectって? — keiju@... (Keiju ISHITSUKA)
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
以下のコミット以降、後述の現象が発生するそうです。
[#39743] String::gsubにおけるinvalid byte sequenceの検出について — TAKEGAWA Hiroshi <takegawa@...>
竹川と申します。
[#39755] RbConfig.rubybin — Tanaka Akira <akr@...>
ruby コマンドのパス名を返す RbConfig.rubybin というメソッド
須藤です。
In article <20091123.123808.1122146273169400964.kou@cozmixng.org>,
> In article <20091123.123808.1122146273169400964.kou@cozmixng.org>,
須藤です。
At Mon, 30 Nov 2009 19:28:39 +0900,
[#39760] [Bug #2395] 可視性の変更による alias されたメソッドの無効化 — _ wanabe <redmine@...>
Bug #2395: 可視性の変更による alias されたメソッドの無効化
[#39796] バグ? ブロック引数で to_ary が呼ばれる必要のない場面で呼ばれる — keiju@... (Keiju ISHITSUKA)
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
まつもと ゆきひろです
[ruby-dev:39671] [Feature:trunk] hide the internal of anonymous Enumerator
遠藤です。
[ruby-dev:39665] より引用。
2009年11月12日0:38 Akinori MUSHA <knu@idaemons.org>:
> Yielder/Generator という組合せによる実装は実験的なもので、特に
> 後者は外部に公開する必要がないので敢えて伏せていました。公開仕様に
> すると制約になるので、需要が生じるまでは非公開の方がいいのではない
> でしょうか。
ということなら、なるべく内部実装をユーザから見えないようにしませんか?
- Enumerator::Generator を匿名クラスにする (ARGF のように)
- Generator.new や Yielder.new を禁止する
- Enumerator#inspect で Generator の存在は隠す
とするパッチを書いてみました。どうでしょう。
diff --git a/enumerator.c b/enumerator.c
index 7c50f3d..88c37fd 100644
--- a/enumerator.c
+++ b/enumerator.c
@@ -886,29 +886,34 @@ inspect_enumerator(VALUE obj, VALUE dummy, int recur)
untrusted = OBJ_UNTRUSTED(eobj);
/* (1..100).each_cons(2) => "#<Enumerator: 1..100:each_cons(2)>" */
- str = rb_sprintf("#<%s: ", cname);
- rb_str_concat(str, rb_inspect(eobj));
- rb_str_buf_cat2(str, ":");
- rb_str_buf_cat2(str, rb_id2name(e->meth));
+ if (rb_obj_is_kind_of(eobj, rb_cGenerator)) {
+ str = rb_sprintf("#<%s:%p>", cname, (void*)eobj);
+ }
+ else {
+ str = rb_sprintf("#<%s: ", cname);
+ rb_str_concat(str, rb_inspect(eobj));
+ rb_str_buf_cat2(str, ":");
+ rb_str_buf_cat2(str, rb_id2name(e->meth));
- if (e->args) {
- long argc = RARRAY_LEN(e->args);
- VALUE *argv = RARRAY_PTR(e->args);
+ if (e->args) {
+ long argc = RARRAY_LEN(e->args);
+ VALUE *argv = RARRAY_PTR(e->args);
- rb_str_buf_cat2(str, "(");
+ rb_str_buf_cat2(str, "(");
- while (argc--) {
- VALUE arg = *argv++;
+ while (argc--) {
+ VALUE arg = *argv++;
- rb_str_concat(str, rb_inspect(arg));
- rb_str_buf_cat2(str, argc > 0 ? ", " : ")");
+ rb_str_concat(str, rb_inspect(arg));
+ rb_str_buf_cat2(str, argc > 0 ? ", " : ")");
- if (OBJ_TAINTED(arg)) tainted = TRUE;
- if (OBJ_UNTRUSTED(arg)) untrusted = TRUE;
- }
- }
+ if (OBJ_TAINTED(arg)) tainted = TRUE;
+ if (OBJ_UNTRUSTED(arg)) untrusted = TRUE;
+ }
+ }
- rb_str_buf_cat2(str, ">");
+ rb_str_buf_cat2(str, ">");
+ }
if (tainted) OBJ_TAINT(str);
if (untrusted) OBJ_UNTRUST(str);
@@ -1223,17 +1228,17 @@ Init_Enumerator(void)
rb_define_method(rb_eStopIteration, "result", stop_result, 0);
/* Generator */
- rb_cGenerator = rb_define_class_under(rb_cEnumerator,
"Generator", rb_cObject);
+ rb_cGenerator = rb_class_new(rb_cObject);
+ rb_undef_alloc_func(rb_cGenerator);
+ rb_set_class_path(rb_cGenerator, rb_cObject, "Enumerator::Generator");
rb_include_module(rb_cGenerator, rb_mEnumerable);
- rb_define_alloc_func(rb_cGenerator, generator_allocate);
- rb_define_method(rb_cGenerator, "initialize", generator_initialize, -1);
- rb_define_method(rb_cGenerator, "initialize_copy", generator_init_copy, 1);
rb_define_method(rb_cGenerator, "each", generator_each, 0);
+ rb_obj_freeze(rb_cGenerator);
+ rb_gc_register_mark_object(rb_cGenerator);
/* Yielder */
rb_cYielder = rb_define_class_under(rb_cEnumerator, "Yielder", rb_cObject);
- rb_define_alloc_func(rb_cYielder, yielder_allocate);
- rb_define_method(rb_cYielder, "initialize", yielder_initialize, 0);
+ rb_undef_alloc_func(rb_cYielder);
rb_define_method(rb_cYielder, "yield", yielder_yield, -2);
rb_define_method(rb_cYielder, "<<", yielder_yield_push, -2);
--
Yusuke ENDOH <mame@tsg.ne.jp>