[#34194] File.read (または String#include?) でSEGV — wanabe <s.wanabe@...>
ワナベと申します。
[#34200] Resolv.getaddress がエラーになる — "Kouhei Yanagita" <yanagi@...>
柳田です。
[#34239] MVM interface draft — Nobuyoshi Nakada <nobu@...>
なかだです。
[#34261] ComplexFloat — "Kenta Murata" <muraken@...>
村田です.
村田です.
なかだです。
むらたです.
こんにちは、なかむら(う)です。
むらたです.
こんにちは、なかむら(う)です。
むらたです.
In article <761216ce0804100221x67f10f12iab12b0e35b6f50e4@mail.gmail.com>,
むらたです.
まつもと ゆきひろです
利点としては、拡張ライブラリが書きやすい、ということ。正当化の理由とし
むらたです.
> 私にはいびつな進化という感じはしません.むしろ,せっかく C で実装できるのに
むらたです.
まつもと ゆきひろです
むらたです.
まつもと ゆきひろです
むらたです.
まつもと ゆきひろです
むらたです.
In article <761216ce0804120723n16bfbad7qdae90f142978d256@mail.gmail.com>,
むらたです.
In article <761216ce0804121011h6132d58fh4916ecbb29d58690@mail.gmail.com>,
むらたです.
In article <761216ce0804121039l605a8ec6sebe52afdbbb52160@mail.gmail.com>,
むらたです.
In article <761216ce0804121126i557ad854j6e52283f7ef4542@mail.gmail.com>,
まつもと ゆきひろです
むらたです.
まつもと ゆきひろです
むらたです.
原です。
まつもと ゆきひろです
遠藤と申します。
原です。
In article <4808653F.80607@blade.nagaokaut.ac.jp>,
原です。
> 1. ComplexFloat を組込みにし、Complex を標準ライブラリとして提供する。
原です。
> 分かりににくかったですが、これは、ComplexFloat を含めた組込みの数体系が
こんばんは sheepman です。
まつもと ゆきひろです
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
原です。
けいじゅ@いしつかです.
Complex と ComplexFloat とクラスをふたつに分ける理由がどうに
原です。
まつもと ゆきひろです
原です。
[#34266] Ruby1.9 での $SAFE==4 時の autoload 動作 — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
[#34272] patch for [ruby-core:14537] — wanabe <s.wanabe@...>
ワナベと申します。
[#34278] Re: [ruby-cvs:23187] Ruby:r15947 (trunk): * lib/generator.rb: removed obsolete library. [ruby-core:16233] — SASADA Koichi <ko1@...>
ささだです.
まつもと ゆきひろです
[#34285] Complex#scalar? returns false — "Kenta Murata" <muraken@...>
むらたです.
[#34313] Enumerable#find_index vs. Array#index — "Akinori MUSHA" <knu@...>
[ruby-talk:178495] が発端で Enumerable#find_index というのが
まつもと ゆきひろです
[#34352] patch for — wanabe <s.wanabe@...>
ワナベと申します。
[#34391] Preparing for 1.8.7-preview1 — "Akinori MUSHA" <knu@...>
延び延びになってしまいましたが、ようやく enumerator 関連、
[#34393] fluent comma — "Yusuke ENDOH" <mame@...>
遠藤と申します。
[#34402] OpenSSL::SSL::SSLContext#set_params — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#34417] Ruby 1.8.7-preview1 has been released — "Akinori MUSHA" <knu@...>
Ruby 1.8.7-preview1 をリリースしました。伸び伸びのスケジュール
[#34430] str_new() may create broken string — wanabe <s.wanabe@...>
ワナベと申します。
[#34460] patch for ruby-dev:34236 — wanabe <s.wanabe@...>
ワナベと申します。
[#34476] coerce with Rational and Complex — "Yusuke ENDOH" <mame@...>
遠藤と申します。
[#34512] [ruby-core:16238]の検証 — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
[#34515] M17N のリファレンス — sheepman <sh@...>
こんにちは sheepman です。
[#34540] 0**-1 == 0 ? — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
[ruby-dev:34352] patch for
ワナベと申します。
Fiber のトップフレームに ISeq を加えるパッチを書きました。
ついでなので Thread も同様にしました。
test_knownbug.rb の [ruby-dev:34128] とあるテストが通るようになります。
バックトレース対策で iseq->filename に nil を入れてしまいましたが
(普通に filename を入れると、Fiber.new(method(:load)).resume で
ファイル名が空文字列、行番号が 0 などと表示される)
本来はどう対処するのがスマートなのでしょうか。
Index: eval_error.c
===================================================================
--- eval_error.c (revision 15933)
+++ eval_error.c (working copy)
@@ -10,11 +10,11 @@
rb_control_frame_t *cfp = vm_get_ruby_level_cfp(th, th->cfp);
if (cfp) {
- return RSTRING_PTR(cfp->iseq->filename);
+ if (!NIL_P(cfp->iseq->filename)) {
+ return RSTRING_PTR(cfp->iseq->filename);
+ }
}
- else {
- return 0;
- }
+ return 0;
}
int
Index: cont.c
===================================================================
--- cont.c (revision 15933)
+++ cont.c (working copy)
@@ -501,6 +501,8 @@
rb_context_t *cont = fiber_alloc(klass);
VALUE contval = cont->self;
rb_thread_t *th = &cont->saved_thread;
+ VALUE filename = rb_str_new2("<dummy fiber toplevel>");
+ VALUE iseq = rb_iseq_new(0, filename, Qnil, 0, ISEQ_TYPE_TOP);
/* initialize */
cont->vm_stack = 0;
@@ -509,18 +511,7 @@
th->stack_size = FIBER_VM_STACK_SIZE;
th->stack = ALLOC_N(VALUE, th->stack_size);
- th->cfp = (void *)(th->stack + th->stack_size);
- th->cfp--;
- th->cfp->pc = 0;
- th->cfp->sp = th->stack + 1;
- th->cfp->bp = 0;
- th->cfp->lfp = th->stack;
- *th->cfp->lfp = 0;
- th->cfp->dfp = th->stack;
- th->cfp->self = Qnil;
- th->cfp->flag = 0;
- th->cfp->iseq = 0;
- th->cfp->proc = 0;
+ vm_set_branch_frame(th, iseq);
th->cfp->block_iseq = 0;
th->tag = 0;
th->local_storage = st_init_numtable();
Index: vm.c
===================================================================
--- vm.c (revision 15933)
+++ vm.c (working copy)
@@ -1666,6 +1666,17 @@
return obj;
}
+void
+vm_set_branch_frame(rb_thread_t *th, VALUE iseqval)
+{
+ rb_iseq_t *iseq;
+
+ th->cfp = (void *)(th->stack + th->stack_size);
+ GetISeqPtr(iseqval, iseq);
+ vm_push_frame(th, iseq, FRAME_MAGIC_TOP, th->top_self, 0,
+ iseq->iseq_encoded, th->stack, 0, iseq->local_size);
+}
+
static void
th_init2(rb_thread_t *th)
{
@@ -1687,24 +1698,37 @@
}
static void
-th_init(rb_thread_t *th)
+th_init(rb_thread_t *th, VALUE iseq)
{
- th_init2(th);
+ /* allocate thread stack */
+ th->stack_size = RUBY_VM_THREAD_STACK_SIZE;
+ th->stack = thread_recycle_stack(th->stack_size);
+
+ vm_set_branch_frame(th, iseq);
+
+ th->status = THREAD_RUNNABLE;
+ th->errinfo = Qnil;
+
+#if USE_VALUE_CACHE
+ th->value_cache_ptr = &th->value_cache[0];
+#endif
}
static VALUE
ruby_thread_init(VALUE self)
{
+ VALUE filename = rb_str_new2("<dummy thread toplevel>");
+ VALUE iseq = rb_iseq_new(0, filename, Qnil, 0, ISEQ_TYPE_TOP);
rb_thread_t *th;
rb_vm_t *vm = GET_THREAD()->vm;
GetThreadPtr(self, th);
- th_init(th);
th->self = self;
th->vm = vm;
th->top_wrapper = 0;
th->top_self = rb_vm_top_self();
+ th_init(th, iseq);
return self;
}
Index: vm_dump.c
===================================================================
--- vm_dump.c (revision 15933)
+++ vm_dump.c (working copy)
@@ -102,7 +102,12 @@
line = vm_get_sourceline(cfp);
if (line) {
char fn[MAX_POSBUF+1];
- snprintf(fn, MAX_POSBUF, "%s", RSTRING_PTR(cfp->iseq->filename));
+ VALUE filename = cfp->iseq->filename;
+
+ if (NIL_P(filename)) {
+ filename = cfp->iseq->name;
+ }
+ snprintf(fn, MAX_POSBUF, "%s", RSTRING_PTR(filename));
snprintf(posbuf, MAX_POSBUF, "%s:%d", fn, line);
}
}
--
ワナベ