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

ruby-changes:13058

From: nobu <ko1@a...>
Date: Wed, 9 Sep 2009 11:46:14 +0900 (JST)
Subject: [ruby-changes:13058] Ruby:r24805 (trunk): * enumerator.c (enumerator_data_type): typed.

nobu	2009-09-09 11:46:00 +0900 (Wed, 09 Sep 2009)

  New Revision: 24805

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24805

  Log:
    * enumerator.c (enumerator_data_type): typed.
      (yielder_data_type, generator_data_type): ditto.

  Modified files:
    trunk/ChangeLog
    trunk/enumerator.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 24804)
+++ ChangeLog	(revision 24805)
@@ -1,7 +1,10 @@
-Wed Sep  9 11:28:19 2009  Nobuyoshi Nakada  <nobu@r...>
+Wed Sep  9 11:45:58 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* dir.c (dir_data_type): typed.
 
+	* enumerator.c (enumerator_data_type): typed.
+	  (yielder_data_type, generator_data_type): ditto.
+
 Wed Sep  9 11:11:33 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* include/ruby/ruby.h (rb_data_type_struct): constified dsize.
Index: enumerator.c
===================================================================
--- enumerator.c	(revision 24804)
+++ enumerator.c	(revision 24805)
@@ -121,17 +121,27 @@
     rb_gc_mark(ptr->stop_exc);
 }
 
+#define enumerator_free RUBY_TYPED_DEFAULT_FREE
+
+static size_t
+enumerator_memsize(const void *p)
+{
+    return p ? sizeof(struct enumerator) : 0;
+}
+
+static const rb_data_type_t enumerator_data_type = {
+    "enumerator",
+    enumerator_mark,
+    enumerator_free,
+    enumerator_memsize,
+};
+
 static struct enumerator *
 enumerator_ptr(VALUE obj)
 {
     struct enumerator *ptr;
 
-    Data_Get_Struct(obj, struct enumerator, ptr);
-    if (RDATA(obj)->dmark != enumerator_mark) {
-	rb_raise(rb_eTypeError,
-		 "wrong argument type %s (expected %s)",
-		 rb_obj_classname(obj), rb_class2name(rb_cEnumerator));
-    }
+    TypedData_Get_Struct(obj, struct enumerator, &enumerator_data_type, ptr);
     if (!ptr || ptr->obj == Qundef) {
 	rb_raise(rb_eArgError, "uninitialized enumerator");
     }
@@ -313,7 +323,7 @@
     struct enumerator *ptr;
     VALUE enum_obj;
 
-    enum_obj = Data_Make_Struct(klass, struct enumerator, enumerator_mark, -1, ptr);
+    enum_obj = TypedData_Make_Struct(klass, struct enumerator, &enumerator_data_type, ptr);
     ptr->obj = Qundef;
 
     return enum_obj;
@@ -330,7 +340,7 @@
 {
     struct enumerator *ptr;
 
-    Data_Get_Struct(enum_obj, struct enumerator, ptr);
+    TypedData_Get_Struct(enum_obj, struct enumerator, &enumerator_data_type, ptr);
 
     if (!ptr) {
 	rb_raise(rb_eArgError, "unallocated enumerator");
@@ -413,7 +423,7 @@
 	rb_raise(rb_eTypeError, "can't copy execution context");
     }
 
-    Data_Get_Struct(obj, struct enumerator, ptr1);
+    TypedData_Get_Struct(obj, struct enumerator, &enumerator_data_type, ptr1);
 
     if (!ptr1) {
 	rb_raise(rb_eArgError, "unallocated enumerator");
@@ -943,17 +953,27 @@
     rb_gc_mark(ptr->proc);
 }
 
+#define yielder_free RUBY_TYPED_DEFAULT_FREE
+
+static size_t
+yielder_memsize(const void *p)
+{
+    return p ? sizeof(struct yielder) : 0;
+}
+
+static const rb_data_type_t yielder_data_type = {
+    "yielder",
+    yielder_mark,
+    yielder_free,
+    yielder_memsize,
+};
+
 static struct yielder *
 yielder_ptr(VALUE obj)
 {
     struct yielder *ptr;
 
-    Data_Get_Struct(obj, struct yielder, ptr);
-    if (RDATA(obj)->dmark != yielder_mark) {
-	rb_raise(rb_eTypeError,
-		 "wrong argument type %s (expected %s)",
-		 rb_obj_classname(obj), rb_class2name(rb_cYielder));
-    }
+    TypedData_Get_Struct(obj, struct yielder, &yielder_data_type, ptr);
     if (!ptr || ptr->proc == Qundef) {
 	rb_raise(rb_eArgError, "uninitialized yielder");
     }
@@ -967,7 +987,7 @@
     struct yielder *ptr;
     VALUE obj;
 
-    obj = Data_Make_Struct(klass, struct yielder, yielder_mark, -1, ptr);
+    obj = TypedData_Make_Struct(klass, struct yielder, &yielder_data_type, ptr);
     ptr->proc = Qundef;
 
     return obj;
@@ -978,7 +998,7 @@
 {
     struct yielder *ptr;
 
-    Data_Get_Struct(obj, struct yielder, ptr);
+    TypedData_Get_Struct(obj, struct yielder, &yielder_data_type, ptr);
 
     if (!ptr) {
 	rb_raise(rb_eArgError, "unallocated yielder");
@@ -1029,17 +1049,27 @@
     rb_gc_mark(ptr->proc);
 }
 
+#define generator_free RUBY_TYPED_DEFAULT_FREE
+
+static size_t
+generator_memsize(const void *p)
+{
+    return p ? sizeof(struct generator) : 0;
+}
+
+static const rb_data_type_t generator_data_type = {
+    "generator",
+    generator_mark,
+    generator_free,
+    generator_memsize,
+};
+
 static struct generator *
 generator_ptr(VALUE obj)
 {
     struct generator *ptr;
 
-    Data_Get_Struct(obj, struct generator, ptr);
-    if (RDATA(obj)->dmark != generator_mark) {
-	rb_raise(rb_eTypeError,
-		 "wrong argument type %s (expected %s)",
-		 rb_obj_classname(obj), rb_class2name(rb_cGenerator));
-    }
+    TypedData_Get_Struct(obj, struct generator, &generator_data_type, ptr);
     if (!ptr || ptr->proc == Qundef) {
 	rb_raise(rb_eArgError, "uninitialized generator");
     }
@@ -1053,7 +1083,7 @@
     struct generator *ptr;
     VALUE obj;
 
-    obj = Data_Make_Struct(klass, struct generator, generator_mark, -1, ptr);
+    obj = TypedData_Make_Struct(klass, struct generator, &generator_data_type, ptr);
     ptr->proc = Qundef;
 
     return obj;
@@ -1064,7 +1094,7 @@
 {
     struct generator *ptr;
 
-    Data_Get_Struct(obj, struct generator, ptr);
+    TypedData_Get_Struct(obj, struct generator, &generator_data_type, ptr);
 
     if (!ptr) {
 	rb_raise(rb_eArgError, "unallocated generator");
@@ -1111,7 +1141,7 @@
 
     ptr0 = generator_ptr(orig);
 
-    Data_Get_Struct(obj, struct generator, ptr1);
+    TypedData_Get_Struct(obj, struct generator, &generator_data_type, ptr1);
 
     if (!ptr1) {
 	rb_raise(rb_eArgError, "unallocated generator");

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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