[#33948] Schedule for the 1.8.7 release — "Akinori MUSHA" <knu@...>
Hi, developers,
[#33955] --encoding affects script encoding — sheepman <sheepman@...>
こんばんは sheepman です。
なかだです。
[#33962] Ruby1.9.0でのインタプリタ組み込みについての質問 — Masayuki Yamaguchi <Yamaguchi.Masayuki@...>
山口と申します。
[#33966] Re: [ruby-cvs:22881] Ruby:r15644 (trunk): * test/ruby/test_m17n_comb.rb (TestM17NComb::test_str_chomp): test — Tanaka Akira <akr@...>
In article <200802291457.m1TEv6nh008515@ci.ruby-lang.org>,
まつもと ゆきひろです
[#33974] Test::Unit::Collector::Dirがtest_*.rb以外集めてくれない — "Ken Date" <itacchi@...>
こんにちは、伊達です。
[#33983] Re: [ruby-cvs:22913] Re: Ruby:r15674 (trunk): * gc.c (add_heap): sort heaps array in ascending order to use — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
In article <E1JWAV5-0001MG-9W@x61.netlab.jp>,
[#34011] Should --verbose be equal to -v ? — Yugui <yugui@...>
Yuguiです。
まつもと ゆきひろです
Yuguiです。
[#34020] MurmurHash problem — Nobuyoshi Nakada <nobu@...>
なかだです。
[#34030] uint32_t — KIMURA Koichi <kimura.koichi@...>
木村です。
[#34037] Ruby performance gains on SPARC — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
[#34067] Array#take,take_while,drop,drop_whlie — "Yusuke ENDOH" <mame@...>
遠藤と申します。
[#34068] lgamma_r requires _REENTRANT on Solaris — "Yusuke ENDOH" <mame@...>
遠藤と申します。
[#34077] 異なるエンコーディングだと同じバイト列でも==にならない件 — rubikitch@...
るびきちです。
[#34086] extend spawn to change attributes of child process. — Tanaka Akira <akr@...>
spaen, system, exec, IO.popen で、起動する子プロセスの属性を
[#34093] 拡張ライブラリ初期化中でのmodule_eval — Kouhei Sutou <kou@...>
須藤です。
[#34095] (再送) Cygwin で Resolv.getaddress が失敗する — Kouhei Yanagita <yanagi@...>
こんにちは。柳田です。
こんばんは、植田と申します。
柳田です。
[#34105] rational.rb, complex.rb and mathn.rb — Tadayoshi Funaba <tadf@...>
rational と complex が組み込みになったことで、lib/mathn.rb の意義は薄
現時点で rational.rb と complex.rb を残しているのは、それが無難だから
で、かなり選択肢を絞った叩き台です。
けいじゅ@いしつかです.
原です。
> 私も Complex の組み込みは Rational とは比較にならないくらい、仕様が決め
まつもと ゆきひろです
> Mathモジュールは伝統的にlibmのラッパーであったので、それを逸
原です。
> (1) (-8)**Rational(1,2) は複素数1.0+1.7320508*i
[#34109] LP64: date.rb:321:in `convert': integer 86400000000000 too big to convert to `int' (RangeError) — Tanaka Akira <akr@...>
LP64 なマシンで test-all が動かなくなっています。
[#34144] [質問2点] C からの定数参照 & thread switching コストの低減 — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
[#34158] Complex組み込み — Masahiro TANAKA <masa16.tanaka@...>
Complexが組み込みになるそうですが、これはcomplex.rbを踏襲して、
原です。
> 今までの Complex は、complex.rb にほぼ残して、たとえば Rational 成分
原です。
> そうです。Complex が難しい、という話を書いておくと、
まつもと ゆきひろです
> |僕としては、/ 演算子の振舞いについて前向きに検討してほしいです。
まつもと ゆきひろです
> ふむ。では、/ のふるまいを
まつもと ゆきひろです
> |僕は、quo がいいと思います。
まつもと ゆきひろです
> となるようですが、別の実装として、
田中です。
> 最初に言っておきますが、気を悪くされたのならすみません。
村田です.
[#34159] ruby-trunk Marshal.dump bug — nagachika <rucila@...>
nagachika と申します。
[#34163] Array#shift/unshift の高速化 — wanabe <s.wanabe@...>
ワナベと申します。
[#34189] Re: [ruby-cvs:23106] Re: Ruby:r15866 (trunk): * numeric.c (num_quo): should convert its operand to Rational. — Tadayoshi Funaba <tadf@...>
間違って送ったので、再送。
> > > Log:
[ruby-dev:34128] enumerator with certain built-in methods dumps core
遠藤と申します。
以下で 1.9 が落ちます。
$ ./ruby -e 'Module.enum_for(:new).next'
[BUG] Segmentation fault
ruby 1.9.0 (2008-03-25 revision 15837) [i686-linux]
-- control frame ----------
c:0006 p:---- s:0011 b:0011 l:000010 d:000010 CFUNC :initialize
c:0005 p:---- s:0009 b:0009 l:000008 d:000008 CFUNC :new
c:0004 p:---- s:0007 b:0007 l:000006 d:000006 CFUNC :call
c:0003 p:---- s:0005 b:0005 l:000004 d:000004 CFUNC :each
c:0002 p:---- s:0003 b:0003 l:001888 d:000002 IFUNC
c:0001 p:---- s:0001 b:-001 l:000000 d:000000 ------
---------------------------
DBG> : ":0:in `new'"
DBG> : ":0:in `call'"
DBG> : ":0:in `each'"
-- backtrace of native function call (Use addr2line) --
0x80fb525
0x81235ce
0x812362b
0x80c9880
0xffffe440
0x8059f27
0x8080159
0x80fa425
0x805b58d
0x805b8b0
0x805ba3c
0x8080dda
0x80f19de
0x80fa425
0x8060f7e
0x80f19de
0x80fa425
0x805b58d
0x805b8b0
0x805dc43
0x805a258
0x805a2cf
0x81211fd
0x80fa425
0x805b58d
0x805b8b0
0x805dc43
0x805a258
0x805a2cf
0x812115f
0x80f96f0
0x80f992e
0x81009c5
0x805ab9f
0x805e250
0x8058641
0xb7dadea8
0x8058551
-------------------------------------------------------
アボートしました
コントロールスタックの最初で module_eval などが呼ばれると、
ruby レベルの cfp が存在しないため、無効な cfp にアクセス
するようです。
ほかにも以下のプログラムたちで落ちます。
☆ eval.c で落ちる
- Object.enum_for(:class_eval).next
- Fiber.new(&Object.method(:class_eval)).resume("foo")
- Thread.new("foo", &Object.method(:class_eval)).join
- "foo".enum_for(:instance_eval).next
- Fiber.new(&"foo".method(:instance_eval)).resume("foo")
- Thread.new("foo", &"foo".method(:instance_eval)).join
- enum_for(:eval, "foo").next
- Fiber.new(&Object.method(:eval)).resume("foo")
- Thread.new("foo", &Object.method(:eval)).join
- enum_for(:local_variables).next
- enum_for(:block_given?).next
☆ ruby_cref/SCOPE_TEST/SCOPE_CHECK/SCOPE_SET で落ちる
- enum_for(:binding).next
- Module.enum_for(:nesting).next
- Module.enum_for(:constants).next
- Module.enum_for(:attr, :foo).next
- Module.enum_for(:attr_reader, :foo).next
- Module.enum_for(:attr_writer, :foo).next
- Module.enum_for(:attr_accessor, :foo).next
- Module.enum_for(:public).next
- Module.enum_for(:protected).next
- Module.enum_for(:private).next
- module M; enum_for(:module_function).next; end
☆ rb_backref_set/rb_backref_get で落ちる
- "abc".enum_for(:[], /./).next
- "abc".enum_for(:scan, /./).next
- "abc".enum_for(:sub, /./).next
- "abc".enum_for(:gsub, /./).next
- "abc".enum_for(:split, /./).next
- "abc".enum_for(:partition, /./).next
- "abc".enum_for(:rpartition, /./).next
"abc".enum_for(:scan, /./).next は実際に使いそうです。
eval.c だけ応急処置を作ってみましたが、この方針だと backref 周りで
修正がたくさん必要そうです。
根本的な対策を検討した方がいいかもしれません。
# コントロールスタックの最初にダミーの ruby レベルのフレームをおく?
Index: eval.c
===================================================================
--- eval.c (revision 15834)
+++ eval.c (working copy)
@@ -886,7 +886,7 @@
rb_thread_t *th = GET_THREAD();
rb_control_frame_t *cfp = th->cfp;
cfp = vm_get_ruby_level_cfp(th, RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp));
- if (GC_GUARDED_PTR_REF(cfp->lfp[0])) {
+ if (cfp && GC_GUARDED_PTR_REF(cfp->lfp[0])) {
return Qtrue;
}
else {
@@ -1712,6 +1712,9 @@
}
else {
rb_control_frame_t *cfp = vm_get_ruby_level_cfp(th, th->cfp);
+ if (!cfp) {
+ rb_raise(rb_eArgError, "eval called at the stack bottom");
+ }
th->base_block = RUBY_VM_GET_BLOCK_PTR_IN_CFP(cfp);
th->base_block->iseq = cfp->iseq; /* TODO */
}
@@ -1851,8 +1854,9 @@
*th->cfp->lfp = GC_GUARDED_PTR(&block);
}
- while (!RUBY_VM_NORMAL_ISEQ_P(cfp->iseq)) {
- cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp);
+ cfp = vm_get_ruby_level_cfp(th, cfp);
+ if (!cfp) {
+ return (*func) (args);
}
stored_cref = (NODE *)vm_cfp_svar_get(th, cfp, 2);
@@ -2612,6 +2616,8 @@
vm_get_ruby_level_cfp(th, RUBY_VM_PREVIOUS_CONTROL_FRAME(th->cfp));
int i;
+ if (!cfp) return ary;
+
while (1) {
if (cfp->iseq) {
for (i = 0; i < cfp->iseq->local_table_size; i++) {
--
Yusuke ENDOH <mame@tsg.ne.jp>