[#14922] alias $gvar — Koji Arai <JCA02266@...>

新井です。

19 messages 2001/10/14

[#15006] Re: eval.c (rb_stack_check): prohibit recursive raising error — WATANABE Hirofumi <eban@...>

わたなべです。

13 messages 2001/10/26
[#15008] Re: eval.c (rb_stack_check): prohibit recursive raising error — Shugo Maeda <shugo@...> 2001/10/26

前田です。

[ruby-dev:14961] [PATCH] Marshal.load/dump

From: nobu.nakada@...
Date: 2001-10-18 06:00:30 UTC
List: ruby-dev #14961
なかだです。

Subject: Marshal.dump/load and Class#clone.
From: Tanaka Akira <akr@m17n.org>
Date: 17 Oct 2001 14:04:14 +0900
> Marshal.dump できたものが Marshal.load できないことがあります。
> 
> % ruby -e 'Marshal.load(Marshal.dump(String.clone.new("abc")))' 
> -e:1:in `load': dump format error (user class) (ArgumentError)
>         from -e:1

Subject: Marshal.load, Struct and inheritance.
From: Tanaka Akira <akr@m17n.org>
Date: 17 Oct 2001 15:43:42 +0900
> % ruby -e 'S = Struct.new("S", :a)
> class C < S
> end
> p Marshal.load(Marshal.dump(C.new))'
> -e:4:in `load': uninitialized struct (TypeError)
>         from -e:4
> 
> というように、構造体を継承したクラスを Marshal.load できません。

 こんなとこでどうでしょうか。

# ruby-bugsのメールってどうすれば登録できるんだろう…。


Index: marshal.c
===================================================================
RCS file: /cvs/ruby/src/ruby/marshal.c,v
retrieving revision 1.47
diff -u -2 -p -r1.47 marshal.c
--- marshal.c	2001/10/05 06:30:42	1.47
+++ marshal.c	2001/10/18 05:35:52
@@ -248,5 +248,5 @@ w_uclass(obj, klass, arg)
     struct dump_arg *arg;
 {
-    if (CLASS_OF(obj) != klass) {
+    if (rb_class_real(obj) != klass) {
 	w_byte(TYPE_UCLASS, arg);
 	w_unique(rb_class2name(CLASS_OF(obj)), arg);
@@ -934,5 +934,5 @@ r_object(arg)
 
 	    klass = rb_path2class(r_unique(arg));
-	    mem = rb_ivar_get(klass, rb_intern("__member__"));
+	    mem = rb_struct_iv_get(klass, "__member__");
 	    if (mem == Qnil) {
 		rb_raise(rb_eTypeError, "uninitialized struct");


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread

Prev Next