[#34261] ComplexFloat — "Kenta Murata" <muraken@...>

村田です.

117 messages 2008/04/06
[#34280] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/10

村田です.

[#34286] Re: ComplexFloat — Nobuyoshi Nakada <nobu@...> 2008/04/10

なかだです。

[#34288] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/10

むらたです.

[#34290] Re: ComplexFloat — "U.Nakamura" <usa@...> 2008/04/10

こんにちは、なかむら(う)です。

[#34293] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/10

むらたです.

[#34296] Re: ComplexFloat — "U.Nakamura" <usa@...> 2008/04/10

こんにちは、なかむら(う)です。

[#34298] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/10

むらたです.

[#34300] Re: ComplexFloat — Tanaka Akira <akr@...> 2008/04/10

In article <761216ce0804100221x67f10f12iab12b0e35b6f50e4@mail.gmail.com>,

[#34301] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/10

むらたです.

[#34303] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/04/10

まつもと ゆきひろです

[#34314] Re: ComplexFloat — Tadayoshi Funaba <tadf@...> 2008/04/10

利点としては、拡張ライブラリが書きやすい、ということ。正当化の理由とし

[#34316] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/10

むらたです.

[#34317] Re: ComplexFloat — Tadayoshi Funaba <tadf@...> 2008/04/10

> 私にはいびつな進化という感じはしません.むしろ,せっかく C で実装できるのに

[#34318] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/10

むらたです.

[#34322] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/04/10

まつもと ゆきひろです

[#34328] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/11

むらたです.

[#34331] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/04/11

まつもと ゆきひろです

[#34340] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/11

むらたです.

[#34341] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/04/11

まつもと ゆきひろです

[#34362] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/12

むらたです.

[#34363] Re: ComplexFloat — Tanaka Akira <akr@...> 2008/04/12

In article <761216ce0804120723n16bfbad7qdae90f142978d256@mail.gmail.com>,

[#34367] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/12

むらたです.

[#34368] Re: ComplexFloat — Tanaka Akira <akr@...> 2008/04/12

In article <761216ce0804121011h6132d58fh4916ecbb29d58690@mail.gmail.com>,

[#34369] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/12

むらたです.

[#34364] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/04/12

まつもと ゆきひろです

[#34366] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/12

むらたです.

[#34386] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/04/13

まつもと ゆきひろです

[#34415] Re: ComplexFloat — "Kenta Murata" <muraken@...> 2008/04/15

むらたです.

[#34439] Re: ComplexFloat — Shin-ichiro HARA <sinara@...> 2008/04/17

原です。

[#34442] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/04/17

まつもと ゆきひろです

[#34451] Re: ComplexFloat — Shin-ichiro HARA <sinara@...> 2008/04/18

原です。

[#34455] Re: ComplexFloat — Tadayoshi Funaba <tadf@...> 2008/04/18

> 1. ComplexFloat を組込みにし、Complex を標準ライブラリとして提供する。

[#34457] Re: ComplexFloat — Shin-ichiro HARA <sinara@...> 2008/04/20

原です。

[#34458] Re: ComplexFloat — Tadayoshi Funaba <tadf@...> 2008/04/20

> 分かりににくかったですが、これは、ComplexFloat を含めた組込みの数体系が

[#34502] Re: ComplexFloat — sheepman <sh@...> 2008/04/24

こんばんは sheepman です。

[#34601] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/05/07

まつもと ゆきひろです

[#34603] Re: ComplexFloat — keiju@... (石塚圭樹) 2008/05/07

けいじゅ@いしつかです.

[#34614] Re: ComplexFloat — Yukihiro Matsumoto <matz@...> 2008/05/08

まつもと ゆきひろです

[#34621] Re: ComplexFloat — keiju@... (石塚圭樹) 2008/05/08

けいじゅ@いしつかです.

[ruby-dev:34352] patch for

From: wanabe <s.wanabe@...>
Date: 2008-04-12 06:22:54 UTC
List: ruby-dev #34352
ワナベと申します。

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);
 	    }
 	}


-- 
ワナベ

In This Thread

Prev Next