ruby-changes:2512
From: ko1@a...
Date: 23 Nov 2007 16:01:51 +0900
Subject: [ruby-changes:2512] akr - Ruby:r14003 (trunk): * struct.c (rb_struct_alloc_noinit): new function.
akr 2007-11-23 16:00:50 +0900 (Fri, 23 Nov 2007)
New Revision: 14003
Modified files:
trunk/ChangeLog
trunk/include/ruby/intern.h
trunk/range.c
trunk/struct.c
Log:
* struct.c (rb_struct_alloc_noinit): new function.
(rb_struct_define_without_accessor): add allocator to the arguments.
* range.c (range_alloc): re-introduced using rb_struct_alloc_noinit.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=14003&r2=14002
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/struct.c?r1=14003&r2=14002
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/range.c?r1=14003&r2=14002
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/include/ruby/intern.h?r1=14003&r2=14002
Index: include/ruby/intern.h
===================================================================
--- include/ruby/intern.h (revision 14002)
+++ include/ruby/intern.h (revision 14003)
@@ -542,7 +542,8 @@
VALUE rb_struct_iv_get(VALUE, const char*);
VALUE rb_struct_s_members(VALUE);
VALUE rb_struct_members(VALUE);
-VALUE rb_struct_define_without_accessor(char *, VALUE, ...);
+VALUE rb_struct_alloc_noinit(VALUE);
+VALUE rb_struct_define_without_accessor(char *, VALUE, rb_alloc_func_t, ...);
/* thread.c */
typedef void rb_unblock_function_t(void *);
typedef VALUE rb_blocking_function_t(void *);
Index: ChangeLog
===================================================================
--- ChangeLog (revision 14002)
+++ ChangeLog (revision 14003)
@@ -1,3 +1,10 @@
+Fri Nov 23 15:59:04 2007 Tanaka Akira <akr@f...>
+
+ * struct.c (rb_struct_alloc_noinit): new function.
+ (rb_struct_define_without_accessor): add allocator to the arguments.
+
+ * range.c (range_alloc): re-introduced using rb_struct_alloc_noinit.
+
Fri Nov 23 15:27:43 2007 Tanaka Akira <akr@f...>
* re.c (REG_CASESTATE): unused macro removed.
Index: range.c
===================================================================
--- range.c (revision 14002)
+++ range.c (revision 14003)
@@ -816,6 +816,14 @@
return range;
}
+static VALUE
+range_alloc(VALUE klass)
+{
+ /* rb_struct_alloc_noinit itself should not be used because
+ * rb_marshal_define_compat uses equality of allocaiton function */
+ return rb_struct_alloc_noinit(klass);
+}
+
/* A <code>Range</code> represents an interval---a set of values with a
* start and an end. Ranges may be constructed using the
* <em>s</em><code>..</code><em>e</em> and
@@ -879,7 +887,8 @@
id_end = rb_intern("end");
id_excl = rb_intern("excl");
- rb_cRange = rb_struct_define_without_accessor("Range", rb_cObject,
+ rb_cRange = rb_struct_define_without_accessor(
+ "Range", rb_cObject, range_alloc,
"begin", "end", "excl", NULL);
rb_include_module(rb_cRange, rb_mEnumerable);
Index: struct.c
===================================================================
--- struct.c (revision 14002)
+++ struct.c (revision 14003)
@@ -218,8 +218,14 @@
}
VALUE
-rb_struct_define_without_accessor(char *class_name, VALUE super, ...)
+rb_struct_alloc_noinit(VALUE klass)
{
+ return struct_alloc(klass);
+}
+
+VALUE
+rb_struct_define_without_accessor(char *class_name, VALUE super, rb_alloc_func_t alloc, ...)
+{
VALUE klass;
va_list ar;
VALUE members;
@@ -247,7 +253,10 @@
rb_iv_set(klass, "__size__", LONG2NUM(RARRAY_LEN(members)));
rb_iv_set(klass, "__members__", members);
- rb_define_alloc_func(klass, struct_alloc);
+ if (alloc)
+ rb_define_alloc_func(klass, alloc);
+ else
+ rb_define_alloc_func(klass, struct_alloc);
return klass;
}
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml