[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