[#24210] [SEGV] redefine Struct with same name — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。Struct を同じ名前で二度定義すると、
6 messages
2004/09/03
[#24213] 1.instance_eval "@@a" dumps core — Tanaka Akira <akr@...17n.org>
次のように、1.instance_eval "@@a" とすると core を吐きます。
10 messages
2004/09/03
[#24217] Re: 1.instance_eval "@@a" dumps core
— Yukihiro Matsumoto <matz@...>
2004/09/03
まつもと ゆきひろです
[#24218] Re: 1.instance_eval "@@a" dumps core
— Tanaka Akira <akr@...17n.org>
2004/09/04
In article <1094229200.559688.22218.nullmailer@picachu.netlab.jp>,
[#24219] Re: 1.instance_eval "@@a" dumps core
— Yukihiro Matsumoto <matz@...>
2004/09/05
まつもと ゆきひろです
[#24220] Re: 1.instance_eval "@@a" dumps core
— Tanaka Akira <akr@...17n.org>
2004/09/05
In article <1094342919.363209.2395.nullmailer@picachu.netlab.jp>,
[#24221] Re: 1.instance_eval "@@a" dumps core
— Yukihiro Matsumoto <matz@...>
2004/09/05
まつもと ゆきひろです
[#24231] system("") — Tanaka Akira <akr@...17n.org>
次のように、system("") が例外になるのは意図された挙動でしょうか?
6 messages
2004/09/06
[#24234] 要素代入での?!の扱いについて — Nowake <nowake@...>
野分です。
6 messages
2004/09/06
[#24255] ripper committed — Minero Aoki <aamine@...>
青木です。
11 messages
2004/09/12
[#24261] Array#collect! dumps core — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
7 messages
2004/09/14
[#24277] new NKF2拡張ライブラリ — "Kenichi.Tamura" <sgs02516@...>
たむらです。
5 messages
2004/09/16
[#24287] Array#sort! with calcc dumps core — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
6 messages
2004/09/19
[#24288] Re: Array#sort! with calcc dumps core
— Yukihiro Matsumoto <matz@...>
2004/09/19
まつもと ゆきひろです
[#24302] Procのブロック呼び出しメソッド名を自由に設定 — Nowake <nowake@...>
こんばんは、野分です。
8 messages
2004/09/21
[#24304] Re: Procのブロック呼び出しメソッド名を自由に設定
— Yukihiro Matsumoto <matz@...>
2004/09/22
まつもと ゆきひろです
[#24311] Array#sort! dumps core — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
5 messages
2004/09/22
[#24315] String#sub! dumps core — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
5 messages
2004/09/23
[#24332] Marshal.dump dumps core — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
4 messages
2004/09/24
[#24337] Re: [ruby-cvs] ruby: * hash.c: iterator functions for hash_foreach() should return enum — nobu@...
なかだです。
4 messages
2004/09/24
[#24341] Array#* dumps core — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
9 messages
2004/09/25
[#24351] Re: Array#* dumps core
— nobu@...
2004/09/27
なかだです。
[#24354] finalizer
— Tanaka Akira <akr@...17n.org>
2004/09/27
In article <200409270225.i8R2PDfs014206@sharui.nakada.niregi.kanuma.tochigi.jp>,
[#24368] Enumerable#sort_by dumps core — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
4 messages
2004/09/28
[ruby-dev:24352] Re: `dump': uninitialized struct (TypeError)
From:
nobu@...
Date:
2004-09-27 02:46:18 UTC
List:
ruby-dev #24352
なかだです。
At Sat, 25 Sep 2004 11:10:02 +0900,
Tanaka Akira wrote in [ruby-dev:24342]:
> 次のように struct を dump できません。
>
> % ./ruby -ve 'Marshal.dump(Struct.new("A", :a).new)'
> ruby 1.9.0 (2004-09-24) [i686-linux]
> -e:1:in `dump': uninitialized struct (TypeError)
> from -e:1
__member__から__members__に変更になったのにmarshal.cが追従して
ないんですが、むしろstruct_members()をexternにしたほうがいいん
じゃないでしょうか。
Index: intern.h
===================================================================
RCS file: /cvs/ruby/src/ruby/intern.h,v
retrieving revision 1.152
diff -U2 -p -d -r1.152 intern.h
--- intern.h 24 Sep 2004 05:53:41 -0000 1.152
+++ intern.h 27 Sep 2004 02:40:17 -0000
@@ -445,4 +445,6 @@ VALUE rb_struct_aset _((VALUE, VALUE, VA
VALUE rb_struct_getmember _((VALUE, ID));
VALUE rb_struct_iv_get _((VALUE, char*));
+VALUE rb_struct_s_members _((VALUE));
+VALUE rb_struct_members _((VALUE));
/* time.c */
VALUE rb_time_new _((time_t, time_t));
Index: marshal.c
===================================================================
RCS file: /cvs/ruby/src/ruby/marshal.c,v
retrieving revision 1.115
diff -U2 -p -d -r1.115 marshal.c
--- marshal.c 17 Aug 2004 09:02:40 -0000 1.115
+++ marshal.c 27 Sep 2004 02:38:20 -0000
@@ -636,8 +636,5 @@ w_object(obj, arg, limit)
w_long(len, arg);
- mem = rb_struct_iv_get(rb_obj_class(obj), "__member__");
- if (mem == Qnil) {
- rb_raise(rb_eTypeError, "uninitialized struct");
- }
+ mem = rb_struct_members(obj);
for (i=0; i<len; i++) {
w_symbol(SYM2ID(RARRAY(mem)->ptr[i]), arg);
Index: struct.c
===================================================================
RCS file: /cvs/ruby/src/ruby/struct.c,v
retrieving revision 1.59
diff -U2 -p -d -r1.59 struct.c
--- struct.c 24 Sep 2004 16:58:50 -0000 1.59
+++ struct.c 27 Sep 2004 02:43:56 -0000
@@ -34,6 +34,6 @@ rb_struct_iv_get(c, name)
}
-static VALUE
-struct_s_members(klass)
+VALUE
+rb_struct_s_members(klass)
VALUE klass;
{
@@ -46,13 +46,10 @@ struct_s_members(klass)
}
-static VALUE
-struct_members(s)
+VALUE
+rb_struct_members(s)
VALUE s;
{
- VALUE members = struct_s_members(rb_obj_class(s));
+ VALUE members = rb_struct_s_members(rb_obj_class(s));
- if (NIL_P(members)) {
- rb_bug("non-initialized struct");
- }
if (RSTRUCT(s)->len != RARRAY(members)->len) {
rb_raise(rb_eTypeError, "struct size differs (%d required %d given)",
@@ -63,5 +60,5 @@ struct_members(s)
static VALUE
-rb_struct_s_members(klass)
+rb_struct_s_members_m(klass)
VALUE klass;
{
@@ -69,5 +66,5 @@ rb_struct_s_members(klass)
VALUE *p, *pend;
- members = struct_s_members(klass);
+ members = rb_struct_s_members(klass);
ary = rb_ary_new2(RARRAY(members)->len);
p = RARRAY(members)->ptr; pend = p + RARRAY(members)->len;
@@ -93,8 +90,8 @@ rb_struct_s_members(klass)
static VALUE
-rb_struct_members(obj)
+rb_struct_members_m(obj)
VALUE obj;
{
- return rb_struct_s_members(rb_obj_class(obj));
+ return rb_struct_s_members_m(rb_obj_class(obj));
}
@@ -107,5 +104,5 @@ rb_struct_getmember(obj, id)
long i;
- members = struct_members(obj);
+ members = rb_struct_members(obj);
slot = ID2SYM(id);
for (i=0; i<RARRAY(members)->len; i++) {
@@ -165,5 +162,5 @@ rb_struct_set(obj, val)
long i;
- members = struct_members(obj);
+ members = rb_struct_members(obj);
rb_struct_modify(obj);
for (i=0; i<RARRAY(members)->len; i++) {
@@ -210,5 +207,5 @@ make_struct(name, members, klass)
rb_define_singleton_method(nstr, "new", rb_class_new_instance, -1);
rb_define_singleton_method(nstr, "[]", rb_class_new_instance, -1);
- rb_define_singleton_method(nstr, "members", rb_struct_s_members, 0);
+ rb_define_singleton_method(nstr, "members", rb_struct_s_members_m, 0);
for (i=0; i< RARRAY(members)->len; i++) {
ID id = SYM2ID(RARRAY(members)->ptr[i]);
@@ -458,5 +455,5 @@ rb_struct_each_pair(s)
long i;
- members = struct_members(s);
+ members = rb_struct_members(s);
for (i=0; i<RSTRUCT(s)->len; i++) {
rb_yield_values(2, rb_ary_entry(members, i), RSTRUCT(s)->ptr[i]);
@@ -473,5 +470,5 @@ inspect_struct(s)
long i;
- members = struct_members(s);
+ members = rb_struct_members(s);
str = rb_str_buf_new2("#<struct ");
rb_str_cat2(str, cname);
@@ -564,5 +561,5 @@ rb_struct_aref_id(s, id)
long i, len;
- members = struct_members(s);
+ members = rb_struct_members(s);
len = RARRAY(members)->len;
for (i=0; i<len; i++) {
@@ -623,5 +620,5 @@ rb_struct_aset_id(s, id, val)
long i, len;
- members = struct_members(s);
+ members = rb_struct_members(s);
rb_struct_modify(s);
len = RARRAY(members)->len;
@@ -910,4 +907,4 @@ Init_Struct()
rb_define_method(rb_cStruct, "values_at", rb_struct_values_at, -1);
- rb_define_method(rb_cStruct, "members", rb_struct_members, 0);
+ rb_define_method(rb_cStruct, "members", rb_struct_members_m, 0);
}
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦