summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--include/ruby/intern.h1
-rw-r--r--marshal.c2
-rw-r--r--struct.c2
4 files changed, 12 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 4627b4ef6e..bb78fa70fd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Sun Sep 9 01:17:05 2007 Tanaka Akira <akr@fsij.org>
+
+ * marshal.c (r_object0): don't call user-defined initialize for
+ T_STRUCT objects.
+
+ * include/ruby/intern.h (rb_struct_initialize): declared.
+
+ * struct.c (rb_struct_initialize): export.
+
Sat Sep 8 23:55:56 2007 Tanaka Akira <akr@fsij.org>
* eval_method.ci (rb_get_alloc_func): new function to get allocation
diff --git a/include/ruby/intern.h b/include/ruby/intern.h
index ecfbe95a8a..7391845e2d 100644
--- a/include/ruby/intern.h
+++ b/include/ruby/intern.h
@@ -531,6 +531,7 @@ VALUE rb_str_length(VALUE);
VALUE rb_struct_new(VALUE, ...);
VALUE rb_struct_define(const char*, ...);
VALUE rb_struct_alloc(VALUE, VALUE);
+VALUE rb_struct_initialize(VALUE, VALUE);
VALUE rb_struct_aref(VALUE, VALUE);
VALUE rb_struct_aset(VALUE, VALUE, VALUE);
VALUE rb_struct_getmember(VALUE, ID);
diff --git a/marshal.c b/marshal.c
index 539165ecfa..14a4cd6197 100644
--- a/marshal.c
+++ b/marshal.c
@@ -1276,7 +1276,7 @@ r_object0(struct load_arg *arg, int *ivp, VALUE extmod)
}
rb_ary_push(values, r_object(arg));
}
- rb_obj_call_init(v, RARRAY_LEN(values), RARRAY_PTR(values));
+ rb_struct_initialize(v, values);
v = r_leave(v, arg);
}
break;
diff --git a/struct.c b/struct.c
index 671788fc10..57050b7422 100644
--- a/struct.c
+++ b/struct.c
@@ -300,7 +300,7 @@ rb_struct_s_def(int argc, VALUE *argv, VALUE klass)
/*
*/
-static VALUE
+VALUE
rb_struct_initialize(VALUE self, VALUE values)
{
VALUE klass = rb_obj_class(self);