[#14185] ruby on Linux/m68k — akira yamada / やまだあきら <akira@...>
[#14196] fork() on MacOS — nobu.nakada@...
なかだです。
[#14206] undef_method :method_missing — Kenichi Komiya <kom@...1.accsnet.ne.jp>
なかだです。
なかだです。
金光です。
むらけんです.
金光です。
金光です。
金光です。
金光です。どもっ。
むらけんです.
なかだです。
金光です。どもっ。
金光です。
金光です。FOXとかもあるのかぁ。すげぇなぁ。
まつもと ゆきひろです
金光です。御大、待ってましたっ。
なかだです。
金光です。どもどもっ。
なかだです。
さくです。
まつもと ゆきひろです
金光です。どもっ。
まつもと ゆきひろです
金光です。どもどもっ。
まつもと ゆきひろです
岩月と申します。
金光です。どもっ。
岩月と申します。
むらけんです.
楠です
むらけんです.
有馬です。
金光です。
有馬です。
金光です。どもっ。
とみたです。
金光です。
とみたです。
金光です。
まつもと ゆきひろです
金光です。(^_^;
あづみです。
有馬です。
金光です。
有馬です。
金光です。どもっ。
有馬です。
むらけんです.
むらけんさん wrote:
むらけんです.
長沢です。
まつもと ゆきひろです
金光です。どもっ。
有馬です。
金光です。どもどもっ。
むらけんです.
金光です。いちおうフォローだけ
ふなばです。
一応フォローだけ、ほんとにちょっとだけっすよ
[#14229] [BUG] segv on [str].pack("p") — Koji Arai <JCA02266@...>
新井です。
なかだです。
新井です。
なかだです。
[#14338] setup.rb (Re: Common GUI framework) — Minero Aoki <aamine@...>
あおきです。
[#14382] [BUG] segv on regex matching with long string — TAKAHASHI Masayoshi <maki@...>
高橋征義です。
[#14390] [Patch] pp.rb and debug.rb — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
In article <DJEGJLCFNEIMKDNMLFPHCEPJCAAA.nakahiro@sarion.co.jp>,
なひです。
まつもと ゆきひろです
In article <DJEGJLCFNEIMKDNMLFPHCEPJCAAA.nakahiro@sarion.co.jp>,
あおきです。
In article <20010809221751J.aamine@mx.edit.ne.jp>,
なひです。書き忘れ。
なかだです。
nobu.nakada@nifty.ne.jpさんの
なひです。
なかだです。
In article <DJEGJLCFNEIMKDNMLFPHMEAHCBAA.nakahiro@sarion.co.jp>,
なひです。
In article <DJEGJLCFNEIMKDNMLFPHEEAICBAA.nakahiro@sarion.co.jp>,
なひです。
まつもと ゆきひろです
In article <997774251.527258.14423.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
In article <997783083.657819.14685.nullmailer@ev.netlab.jp>,
なひです。
In article <DJEGJLCFNEIMKDNMLFPHEEALCBAA.nakahiro@sarion.co.jp>,
なひです。
In article <DJEGJLCFNEIMKDNMLFPHEEAPCBAA.nakahiro@sarion.co.jp>,
なひです。
In article <DJEGJLCFNEIMKDNMLFPHMEBACBAA.nakahiro@sarion.co.jp>,
なひです。
In article <DJEGJLCFNEIMKDNMLFPHIEBBCBAA.nakahiro@sarion.co.jp>,
うぅむ。ぼーっとしてたら意味もなく Subject を変えてしまった。
In article <20010817205051.UAZHC0A8274C.C78F0C8A@mail.biglobe.ne.jp>,
あづみです。
In article <hvo66bnxe4b.fsf_-_@flux.etl.go.jp>,
古い話題で恐縮ですが…
なかだです。
In article <200109290948.f8T9mbh12942@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
まつもと ゆきひろです
In article <1001945748.240863.24023.nullmailer@ev.netlab.jp>,
なかだです。
In article <200110020334.f923YLb08299@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
In article <200110021010.f92AAIb13474@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
まつもと ゆきひろです
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
In article <1002080461.740444.11187.nullmailer@ev.netlab.jp>,
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
あづみです。
[#14406] typo in ruby 1.7 — Koji Arai <JCA02266@...>
新井です。
[#14413] 1.7.1 2001-08-06: if true && /match/ — WATANABE Tetsuya <tetsu@...>
渡辺哲也です。
[#14465] Ruby/Bsearch — akira yamada / やまだあきら <akira@...>
まつもと ゆきひろです
At Wed, 15 Aug 2001 18:01:50 +0900,
"Akinori MUSHA" <knu@iDaemons.org> wrote:
In article <20010816001456V.satoru@namazu.org>,
Tanaka Akira <akr@m17n.org> wrote:
In article <20010816130056C.satoru@namazu.org>,
[#14480] avoid compile warning of tcltklib with VC5 — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
なかだです。
こんにちは、なかむら(う)です。
[#14505] BUG: ruby 1.6.4 cannot use threads on Sparc (segv) — akira yamada / やまだあきら <akira@...>
[#14530] restore terminal mode even if readline interrupted. — Koji Arai <JCA02266@...>
新井です。
新井です。
新井です。
新井です。
At Wed, 5 Sep 2001 00:19:51 +0900,
まつもと ゆきひろです
[#14552] read in IO#eof? — nobu.nakada@...
なかだです。
[#14575] infinite loop on Dir.glob("*/**/*") — nobu.nakada@...
なかだです。
[#14577] option nodynamic — Daisuke Aoki <dai@...>
青木@横浜です。
[#14595] SEGV at `$0 = "long long string"' — nobu.nakada@...
なかだです。
なかだです。
まつもと ゆきひろです
[ruby-dev:14563] Re: marshal API (was Re: [Patch] pp.rb and debug.rb)
なかだです。
At Tue, 21 Aug 2001 22:13:34 +0900,
Tanaka Akira <akr@m17n.org> wrote:
> もはやあっちは inspect とはほとんど関係ない話なので、こっちはこっちで
> やればいいとおもいます。ruby-dev:14437 の案はいいと思います。ただ、API
> なんで、作者の意向次第ですかねぇ。
参考までに[ruby-dev:14437]と[ruby-dev:14449]の実装案。Arrayの
かわりにHashを使うようになってます。あんまりグローバルにしたく
なかったこともあって、array.cからobject.cにまるごと引っ越してま
す。たぶんこっちの方が自然に思えるのですが。
Index: object.c
===================================================================
RCS file: /cvs/ruby/src/ruby/object.c,v
retrieving revision 1.57
diff -u -2 -p -r1.57 object.c
--- object.c 2001/08/20 04:29:56 1.57
+++ object.c 2001/08/20 06:19:52
@@ -221,5 +221,155 @@ rb_obj_inspect(obj)
}
+static VALUE inspect_key;
+
+struct inspect_arg {
+ VALUE (*func)();
+ VALUE arg1, arg2;
+};
+
+static VALUE
+inspect_call(arg)
+ struct inspect_arg *arg;
+{
+ return (*arg->func)(arg->arg1, arg->arg2);
+}
+
+#define HASH_FOR_INSPECTION
+#ifdef HASH_FOR_INSPECTION
+#define INSPECT_NEW() rb_hash_new3(Qfalse)
+#define INSPECT_BEGIN(tbl, id) rb_hash_aset(inspect_tbl, id, Qtrue)
+#define INSPECT_END(tbl, id) rb_hash_delete(tbl, id)
+#define INSPECTING_P(tbl, id) rb_hash_aref(tbl, id)
+static inline VALUE
+rb_hash_new3(ifnone)
+ VALUE ifnone;
+{
+ VALUE hash = rb_hash_new();
+ RHASH(hash)->ifnone = ifnone;
+ return hash;
+}
+#else
+#define INSPECT_NEW() rb_ary_new()
+#define INSPECT_BEGIN(tbl, id) rb_ary_push(tbl, id)
+#define INSPECT_END(tbl, id) rb_ary_pop(tbl)
+#define INSPECTING_P(tbl, id) rb_ary_includes(tbl, id)
+#endif
+
+#define INSPECT_TABLE() rb_hash_aref(inspect_key, rb_thread_current())
+#define INSPECT_TABLE_NEW() \
+ rb_hash_aset(inspect_key, rb_thread_current(), INSPECT_NEW())
+
+static void
+inspect_key_init()
+{
+ rb_gc_register_address(&inspect_key);
+ inspect_key = rb_hash_new();
+}
+
+static VALUE
+inspect_ensure(id)
+ VALUE id;
+{
+ INSPECT_END(INSPECT_TABLE(), id);
+ return 0;
+}
+
+VALUE
+rb_protect_inspect(func, obj, arg)
+ VALUE (*func)();
+ VALUE obj, arg;
+{
+ struct inspect_arg iarg;
+ VALUE inspect_tbl;
+ VALUE id;
+
+ id = rb_obj_id(obj);
+ if (inspect_key ? NIL_P(inspect_tbl = INSPECT_TABLE())
+ : (inspect_key_init(), Qtrue)) {
+ inspect_tbl = INSPECT_TABLE_NEW();
+ }
+ else if (INSPECTING_P(inspect_tbl, id)) {
+ return (*func)(obj, arg);
+ }
+
+ INSPECT_BEGIN(inspect_tbl, id);
+ iarg.func = func;
+ iarg.arg1 = obj;
+ iarg.arg2 = arg;
+
+ return rb_ensure(inspect_call, (VALUE)&iarg, inspect_ensure, id);
+}
+
+VALUE
+rb_inspecting_p(obj)
+ VALUE obj;
+{
+ VALUE inspect_tbl;
+
+ if (!inspect_key) return Qfalse;
+ inspect_tbl = INSPECT_TABLE();
+ if (NIL_P(inspect_tbl)) return Qfalse;
+ return INSPECTING_P(inspect_tbl, rb_obj_id(obj));
+}
+
+static VALUE
+rb_inspection(obj)
+ VALUE obj;
+{
+ VALUE inspect_tbl;
+ VALUE id = rb_obj_id(obj);
+
+ if (inspect_key ? NIL_P(inspect_tbl = INSPECT_TABLE())
+ : (inspect_key_init(), Qtrue)) {
+ inspect_tbl = INSPECT_TABLE_NEW();
+ }
+ else if (INSPECTING_P(inspect_tbl, id)) {
+ return rb_yield(Qtrue);
+ }
+
+ INSPECT_BEGIN(inspect_tbl, id);
+
+ return rb_ensure(rb_yield, Qfalse, inspect_ensure, id);
+}
+
+static VALUE
+remove_inspect_tbl(inspect_tbl)
+ VALUE inspect_tbl;
+{
+ rb_hash_delete(inspect_key, rb_thread_current());
+ return 0;
+}
+
+static VALUE
+restore_inspect_tbl(inspect_tbl)
+ VALUE inspect_tbl;
+{
+ rb_hash_aset(inspect_key, rb_thread_current(), inspect_tbl);
+ return 0;
+}
+
VALUE
+rb_new_inspection()
+{
+ if (inspect_key) {
+ VALUE inspect_tbl = rb_hash_delete(inspect_key, rb_thread_current());
+ if (!NIL_P(inspect_tbl)) {
+ return rb_ensure(rb_yield, Qnil, restore_inspect_tbl, inspect_tbl);
+ }
+ }
+ else {
+ inspect_key_init();
+ }
+ return rb_ensure(rb_yield, Qnil, remove_inspect_tbl, Qnil);
+}
+
+static VALUE
+rb_inspect_start(obj)
+ VALUE obj;
+{
+ return rb_protect_inspect(rb_yield, obj, Qnil);
+}
+
+VALUE
rb_obj_is_instance_of(obj, c)
VALUE obj, c;
@@ -1171,4 +1321,7 @@ Init_Object()
rb_define_method(rb_mKernel, "to_s", rb_any_to_s, 0);
rb_define_method(rb_mKernel, "inspect", rb_obj_inspect, 0);
+ rb_define_method(rb_mKernel, "inspecting?", rb_inspecting_p, 0);
+ rb_define_method(rb_mKernel, "inspection", rb_inspection, 0);
+ rb_define_method(rb_mKernel, "inspect_start", rb_inspect_start, 0);
rb_define_method(rb_mKernel, "methods", rb_obj_methods, 0);
rb_define_method(rb_mKernel, "public_methods", rb_obj_methods, 0);
@@ -1196,4 +1349,6 @@ Init_Object()
rb_define_global_function("String", rb_f_string, 1);
rb_define_global_function("Array", rb_f_array, 1);
+
+ rb_define_global_function("new_inspection", rb_new_inspection, 0);
rb_cNilClass = rb_define_class("NilClass", rb_cObject);
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦