[pypy-svn] r49707 - in pypy/dist/pypy/rpython/memory: . gctransform

arigo at codespeak.net arigo at codespeak.net
Thu Dec 13 13:37:28 CET 2007


Author: arigo
Date: Thu Dec 13 13:37:27 2007
New Revision: 49707

Modified:
   pypy/dist/pypy/rpython/memory/gctransform/framework.py
   pypy/dist/pypy/rpython/memory/gctypelayout.py
Log:
It seems to be a bit better to not be clever here.
Separate Bool fields are nicer for gcc.


Modified: pypy/dist/pypy/rpython/memory/gctransform/framework.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gctransform/framework.py	(original)
+++ pypy/dist/pypy/rpython/memory/gctransform/framework.py	Thu Dec 13 13:37:27 2007
@@ -116,7 +116,8 @@
             # types of the GC information tables
             OFFSETS_TO_GC_PTR = lltype.Array(lltype.Signed)
             TYPE_INFO = lltype.Struct("type_info",
-                ("isvarsize",   lltype.Signed),
+                ("isvarsize",   lltype.Bool),
+                ("gcptrinvarsize", lltype.Bool),
                 ("finalizer",   self.FINALIZERTYPE),
                 ("fixedsize",   lltype.Signed),
                 ("ofstoptrs",   lltype.Ptr(OFFSETS_TO_GC_PTR)),
@@ -130,11 +131,11 @@
 
         def q_is_varsize(typeid):
             ll_assert(typeid > 0, "invalid type_id")
-            return gcdata.type_info_table[typeid].isvarsize != 0
+            return gcdata.type_info_table[typeid].isvarsize
 
         def q_has_gcptr_in_varsize(typeid):
             ll_assert(typeid > 0, "invalid type_id")
-            return gcdata.type_info_table[typeid].isvarsize > 1
+            return gcdata.type_info_table[typeid].gcptrinvarsize
 
         def q_finalizer(typeid):
             ll_assert(typeid > 0, "invalid type_id")

Modified: pypy/dist/pypy/rpython/memory/gctypelayout.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gctypelayout.py	(original)
+++ pypy/dist/pypy/rpython/memory/gctypelayout.py	Thu Dec 13 13:37:27 2007
@@ -38,7 +38,8 @@
             info["finalizer"] = self.make_finalizer_funcptr_for_type(TYPE)
             info["weakptrofs"] = weakpointer_offset(TYPE)
             if not TYPE._is_varsize():
-                info["isvarsize"] = 0
+                info["isvarsize"] = False
+                info["gcptrinvarsize"] = False
                 info["fixedsize"] = llarena.round_up_for_allocation(
                     llmemory.sizeof(TYPE))
                 info["ofstolength"] = -1
@@ -47,6 +48,7 @@
                 # varsize ones, the GC must anyway compute the size at run-time
                 # and round up that result.
             else:
+                info["isvarsize"] = True
                 info["fixedsize"] = llmemory.sizeof(TYPE, 0)
                 if isinstance(TYPE, lltype.Struct):
                     ARRAY = TYPE._flds[TYPE._arrayfld]
@@ -72,9 +74,7 @@
                     offsets = ()
                 info["varofstoptrs"] = self.offsets2table(offsets, ARRAY.OF)
                 info["varitemsize"] = llmemory.sizeof(ARRAY.OF)
-                info["isvarsize"] = 1 + (len(offsets) > 0)
-                # isvarsize is set to 1 if there are no gc ptrs in the
-                # varsize part, and to 2 if there are.
+                info["gcptrinvarsize"] = len(offsets) > 0
             return type_id
 
     def offsets2table(self, offsets, TYPE):
@@ -92,11 +92,11 @@
 
     def q_is_varsize(self, typeid):
         assert typeid > 0
-        return self.type_info_list[typeid]["isvarsize"] != 0
+        return self.type_info_list[typeid]["isvarsize"]
 
     def q_has_gcptr_in_varsize(self, typeid):
         assert typeid > 0
-        return self.type_info_list[typeid]["isvarsize"] > 1
+        return self.type_info_list[typeid]["gcptrinvarsize"]
 
     def q_finalizer(self, typeid):
         assert typeid > 0



More information about the Pypy-commit mailing list