[#22494] [ANN] YARV: Yet another RubyVM 0.0.0- — "K.Sasada" <ko1@...>
あけましておめでとうございます。
まつもと ゆきひろです
なかだです。
nobu.nakada@nifty.ne.jp wrote :
[#22503] can't require — IWATSUKI Hiroyuki <don@...>
岩月と申します。
なかだです。
まつもと ゆきひろです
岩月と申します。
山本です。
岩月と申します。
なかだです。
山本です。
なかだです。
山本です。
なかだです。
まつもと ゆきひろです
In article <1073474004.933446.5475.nullmailer@picachu.netlab.jp>,
なかだです。
山本です。なかださんのコードで気になった点が3つあります。
なかだです。
山本です。
山本です。
なかだです。
山本です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
山本です。
まつもと ゆきひろです
山本です。
山本です。
まつもと ゆきひろです
山本です。
まつもと ゆきひろです
山本です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
山本です。
山本です。
なかだです。
山本です。WinCVS + byacc + sed をインストールして、ビルドできるようになりました。
山本です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
まつもと ゆきひろです
山本です。
山本です。
なかだです。
まつもと ゆきひろです
山本です。
なかだです。
山本です。
山本です。
まつもと ゆきひろです
山本です。
なかだです。
山本です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
山本です。
まつもと ゆきひろです
[#22507] Re: config.h generated for MVC not usable to compile an app with BCC 5.5 (PR#1242) — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#22588] marshaling a class which is defined under singleton class — Tanaka Akira <akr@...17n.org>
次のように、特異クラス内で定義したクラスを marshal するとエラーが出ま
[#22589] marshaling a time with singletom method. — Tanaka Akira <akr@...17n.org>
ふと気がついたのですが、
[#22590] empty proc equality — Tanaka Akira <akr@...17n.org>
次のように、異なる空の proc が == になるのは意図されているのでしょうか。
なかだです。
In article <200401160217.i0G2Hn2U005256@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
まつもと ゆきひろです
[#22608] Time#[+-] when given a negative argument — siena@... (Siena. / SHINAGAWA, Norihide)
Siena. です。
[#22621] marshaling a object which have singleton class which have singleton method — Tanaka Akira <akr@...17n.org>
次のように、特異クラスに特異メソッドをつけた場合、Marshal.dump が失敗
In article <1074477335.411187.19623.nullmailer@picachu.netlab.jp>,
[#22624] Find.find raises SecurityError in $SAFE>=1 — Tietew <tietew-ml-ruby-dev@...>
Tietew です。
まつもと ゆきひろです
[#22634] build faild on Linux/ia64 — akira yamada <akira@...>
まつもと ゆきひろです
[#22662] NODE_NEWLINE -> NEWILNE flag — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
[#22688] output directory for extensions — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
なかだです。
[#22691] 次期リリースでの新規添付ライブラリ — "Kawaji, Shinya" <kawaji@...>
かわじ、です
まつもと ゆきひろです
まつもと ゆきひろです
かわじ、です。
[#22763] $: trick in test/* — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
In article <1075383555.811739.10596.nullmailer@picachu.netlab.jp>,
まつもと ゆきひろです
[ruby-dev:22605] Re: marshaling a nameerror.
なかだです。
At Sat, 17 Jan 2004 14:19:30 +0900,
Tanaka Akira wrote:
> 次のように、とある例外オブジェクトが marshal 出来ないことに気がつきました。
>
> % ruby -ve '
> begin
> eval("x")
> rescue Exception
> p Marshal.dump($!)
> end'
> ruby 1.9.0 (2004-01-16) [i686-linux]
> -e:5:in `dump': singleton can't be dumped (TypeError)
> from -e:5
>
> なぜか、p $! を入れただけで marshal 出来るようになるのが不思議なところ
> です。
メッセージをon-demandで作るために、レシーバ(この場合singletonで
あるmain )を持ってるからですね。to_sの中でメッセージを作って、
レシーバをインスタンス変数から削除しているので、その後はエラー
にならなくなります。
既存のデータと互換性がなくていいなら、marshal_dumpですかねぇ。
Index: error.c
===================================================================
RCS file: /cvs/ruby/src/ruby/error.c,v
retrieving revision 1.87
diff -u -2 -p -d -r1.87 error.c
--- error.c 30 Dec 2003 16:36:05 -0000 1.87
+++ error.c 17 Jan 2004 07:48:52 -0000
@@ -606,9 +606,15 @@ name_err_initialize(argc, argv, self)
VALUE self;
{
- VALUE name;
+ static VALUE name_err_mdump _((VALUE));
+ VALUE recv, name;
- name = (argc > 1) ? argv[--argc] : Qnil;
+ name = (argc > 2) ? argv[--argc] : Qnil;
+ recv = (argc > 1) ? argv[--argc] : Qnil;
exc_initialize(argc, argv, self);
+ rb_iv_set(self, "recv", recv);
rb_iv_set(self, "name", name);
+ if (!NIL_P(recv)) {
+ rb_define_singleton_method(self, "marshal_dump", name_err_mdump, 0);
+ }
return self;
}
@@ -630,4 +636,73 @@ name_err_name(self)
/*
* call-seq:
+ * name_error.to_s => string
+ *
+ * Produce a nicely-formated string representing the +NameError+.
+ */
+
+static VALUE
+name_err_to_s(exc)
+ VALUE exc;
+{
+ VALUE mesg = rb_attr_get(exc, rb_intern("mesg"));
+ ID id_recv = rb_intern("recv");
+
+ if (NIL_P(mesg)) return rb_class_path(CLASS_OF(exc));
+ if (rb_ivar_defined(exc, id_recv)) {
+ char buf[BUFSIZ];
+ char *desc = "";
+ VALUE d;
+ int noclass;
+ VALUE obj = rb_ivar_get(exc, id_recv);
+ int state;
+
+ switch (TYPE(obj)) {
+ case T_NIL:
+ desc = "nil";
+ break;
+ case T_TRUE:
+ desc = "true";
+ break;
+ case T_FALSE:
+ desc = "false";
+ break;
+ default:
+ d = rb_protect(rb_inspect, obj, 0);
+ if (!NIL_P(d) || RSTRING(d)->len > 65) {
+ d = rb_any_to_s(obj);
+ }
+ break;
+ }
+ if (d) {
+ desc = RSTRING(d)->ptr;
+ }
+ noclass = (!desc || desc[0]=='#');
+ snprintf(buf, BUFSIZ, RSTRING(mesg)->ptr, desc,
+ noclass ? "" : ":",
+ noclass ? "" : rb_obj_classname(obj));
+ mesg = rb_str_new2(buf);
+ rb_iv_set(exc, "mesg", mesg);
+ st_delete(ROBJECT(exc)->iv_tbl, (st_data_t*)&id_recv, 0);
+ }
+ if (OBJ_TAINTED(exc)) OBJ_TAINT(mesg);
+ return mesg;
+}
+
+static VALUE
+name_err_mdump(exc)
+ VALUE exc;
+{
+ VALUE klass;
+
+ name_err_to_s(exc);
+ klass = RBASIC(exc)->klass;
+ if (RBASIC(klass)->flags & FL_SINGLETON) {
+ rb_remove_method(klass, "marshal_dump");
+ }
+ return rb_obj_dup(exc);
+}
+
+/*
+ * call-seq:
* NoMethodError.new(msg, name [, args]) => no_method_error
*
@@ -644,5 +719,5 @@ nometh_err_initialize(argc, argv, self)
VALUE self;
{
- VALUE args = (argc > 2) ? argv[--argc] : Qnil;
+ VALUE args = (argc > 3) ? argv[--argc] : Qnil;
name_err_initialize(argc, argv, self);
rb_iv_set(self, "args", args);
@@ -885,4 +960,5 @@ Init_Exception()
rb_define_method(rb_eNameError, "initialize", name_err_initialize, -1);
rb_define_method(rb_eNameError, "name", name_err_name, 0);
+ rb_define_method(rb_eNameError, "to_s", name_err_to_s, 0);
rb_eNoMethodError = rb_define_class("NoMethodError", rb_eNameError);
rb_define_method(rb_eNoMethodError, "initialize", nometh_err_initialize, -1);
Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.629
diff -u -2 -p -d -r1.629 eval.c
--- eval.c 16 Jan 2004 14:53:10 -0000 1.629
+++ eval.c 17 Jan 2004 07:23:46 -0000
@@ -5161,63 +5161,4 @@ static int last_call_status;
/*
- * call-seq:
- * name_error.to_s => string
- *
- * Produce a nicely-formated string representing the +NameError+.
- */
-
-static VALUE
-name_err_to_s(exc)
- VALUE exc;
-{
- VALUE mesg = rb_attr_get(exc, rb_intern("mesg"));
- ID id_recv = rb_intern("recv");
-
- if (NIL_P(mesg)) return rb_class_path(CLASS_OF(exc));
- if (rb_ivar_defined(exc, id_recv)) {
- char buf[BUFSIZ];
- char *desc = "";
- volatile VALUE d = 0;
- int noclass;
- VALUE obj = rb_ivar_get(exc, id_recv);
- int state;
-
- switch (TYPE(obj)) {
- case T_NIL:
- desc = "nil";
- break;
- case T_TRUE:
- desc = "true";
- break;
- case T_FALSE:
- desc = "false";
- break;
- default:
- PUSH_TAG(PROT_NONE);
- if ((state = EXEC_TAG()) == 0) {
- d = rb_inspect(obj);
- }
- POP_TAG();
- if (!d || RSTRING(d)->len > 65) {
- d = rb_any_to_s(obj);
- }
- break;
- }
- if (d) {
- desc = RSTRING(d)->ptr;
- }
- noclass = (!desc || desc[0]=='#');
- snprintf(buf, BUFSIZ, RSTRING(mesg)->ptr, desc,
- noclass ? "" : ":",
- noclass ? "" : rb_obj_classname(obj));
- mesg = rb_str_new2(buf);
- rb_iv_set(exc, "mesg", mesg);
- st_delete(ROBJECT(exc)->iv_tbl, (st_data_t*)&id_recv, 0);
- }
- if (OBJ_TAINTED(exc)) OBJ_TAINT(mesg);
- return mesg;
-}
-
-/*
* call-seq:
* obj.method_missing(symbol [, *args] ) => result
@@ -5293,4 +5234,5 @@ rb_method_missing(argc, argv, obj)
snprintf(buf, BUFSIZ, format, rb_id2name(id));
args[n++] = rb_str_new2(buf);
+ args[n++] = obj;
args[n++] = argv[0];
if (exc == rb_eNoMethodError) {
@@ -5298,5 +5240,4 @@ rb_method_missing(argc, argv, obj)
}
exc = rb_class_new_instance(n, args, exc);
- rb_iv_set(exc, "recv", obj);
ruby_frame = ruby_frame->prev; /* pop frame for "method_missing" */
rb_exc_raise(exc);
@@ -7662,7 +7603,4 @@ Init_load()
ruby_dln_librefs = rb_ary_new();
rb_global_variable(&ruby_dln_librefs);
-
- /* not really a right place */
- rb_define_method(rb_eNameError, "to_s", name_err_to_s, 0);
}
Index: marshal.c
===================================================================
RCS file: /cvs/ruby/src/ruby/marshal.c,v
retrieving revision 1.112
diff -u -2 -p -d -r1.112 marshal.c
--- marshal.c 16 Jan 2004 05:36:54 -0000 1.112
+++ marshal.c 17 Jan 2004 07:37:51 -0000
@@ -105,6 +105,10 @@ class2path(klass)
VALUE path = rb_class_path(klass);
char *n = RSTRING(path)->ptr;
+ VALUE c = rb_path2class(n);
- if (rb_path2class(n) != klass) {
+ if (c == klass) return path;
+ if (!(RBASIC(klass)->flags & FL_SINGLETON) ||
+ RCLASS(klass)->m_tbl->num_entries ||
+ RCLASS(klass)->super != c) {
rb_raise(rb_eArgError, "%s cannot be referred", n);
}
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦