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

ruby-changes:21310

From: nobu <ko1@a...>
Date: Thu, 29 Sep 2011 20:10:55 +0900 (JST)
Subject: [ruby-changes:21310] nobu:r33359 (trunk): * gc.c (is_id_value, is_live_object): extract from id2ref().

nobu	2011-09-29 20:10:46 +0900 (Thu, 29 Sep 2011)

  New Revision: 33359

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

  Log:
    * gc.c (is_id_value, is_live_object): extract from id2ref().

  Modified files:
    trunk/ChangeLog
    trunk/gc.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 33358)
+++ ChangeLog	(revision 33359)
@@ -1,5 +1,7 @@
-Thu Sep 29 20:09:42 2011  Nobuyoshi Nakada  <nobu@r...>
+Thu Sep 29 20:10:42 2011  Nobuyoshi Nakada  <nobu@r...>
 
+	* gc.c (is_id_value, is_live_object): extract from id2ref().
+
 	* gc.c (run_finalizer): use object instead of object id.
 
 Thu Sep 29 20:07:36 2011  Nobuyoshi Nakada  <nobu@r...>
Index: gc.c
===================================================================
--- gc.c	(revision 33358)
+++ gc.c	(revision 33359)
@@ -3094,6 +3094,15 @@
 }
 
 static inline int
+is_id_value(rb_objspace_t *objspace, VALUE ptr)
+{
+    if (!is_pointer_to_heap(objspace, (void *)ptr)) return FALSE;
+    if (BUILTIN_TYPE(ptr) > T_FIXNUM) return FALSE;
+    if (BUILTIN_TYPE(ptr) == T_ICLASS) return FALSE;
+    return TRUE;
+}
+
+static inline int
 is_dead_object(rb_objspace_t *objspace, VALUE ptr)
 {
     struct heaps_slot *slot = objspace->heap.sweep_slots;
@@ -3107,6 +3116,15 @@
     return FALSE;
 }
 
+static inline int
+is_live_object(rb_objspace_t *objspace, VALUE ptr)
+{
+    if (BUILTIN_TYPE(ptr) == 0) return FALSE;
+    if (RBASIC(ptr)->klass == 0) return FALSE;
+    if (is_dead_object(objspace, ptr)) return FALSE;
+    return TRUE;
+}
+
 /*
  *  call-seq:
  *     ObjectSpace._id2ref(object_id) -> an_object
@@ -3149,12 +3167,10 @@
 	return ID2SYM(symid);
     }
 
-    if (!is_pointer_to_heap(objspace, (void *)ptr) ||
-	BUILTIN_TYPE(ptr) > T_FIXNUM || BUILTIN_TYPE(ptr) == T_ICLASS) {
+    if (!is_id_value(objspace, ptr)) {
 	rb_raise(rb_eRangeError, "%p is not id value", p0);
     }
-    if (BUILTIN_TYPE(ptr) == 0 || RBASIC(ptr)->klass == 0 ||
-	is_dead_object(objspace, ptr)) {
+    if (!is_live_object(objspace, ptr)) {
 	rb_raise(rb_eRangeError, "%p is recycled object", p0);
     }
     return (VALUE)ptr;

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

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