[前][次][番号順一覧][スレッド一覧]

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

[前][次][番号順一覧][スレッド一覧]