[pypy-svn] r47643 - in pypy/dist/pypy/rpython/memory: gc gctransform

arigo at codespeak.net arigo at codespeak.net
Sat Oct 20 16:09:51 CEST 2007


Author: arigo
Date: Sat Oct 20 16:09:49 2007
New Revision: 47643

Modified:
   pypy/dist/pypy/rpython/memory/gc/semispace.py
   pypy/dist/pypy/rpython/memory/gctransform/framework.py
Log:
Two obvious bug fixes.


Modified: pypy/dist/pypy/rpython/memory/gc/semispace.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/gc/semispace.py	(original)
+++ pypy/dist/pypy/rpython/memory/gc/semispace.py	Sat Oct 20 16:09:49 2007
@@ -280,7 +280,7 @@
         return llmemory.cast_adr_to_ptr(addr, lltype.Ptr(self.HDR))
 
     def get_type_id(self, addr):
-        return self.header(addr).tid
+        return self.header(addr).tid & TYPEID_MASK
 
     def init_gc_object(self, addr, typeid):
         hdr = llmemory.cast_adr_to_ptr(addr, lltype.Ptr(self.HDR))

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	Sat Oct 20 16:09:49 2007
@@ -590,7 +590,8 @@
         v_newvalue = hop.spaceop.args[-1]
         # XXX for some GCs the skipping if the newvalue is a constant won't be
         # ok
-        if self.write_barrier_ptr is None or isinstance(v_newvalue, Constant):
+        if (self.write_barrier_ptr is None or isinstance(v_newvalue, Constant)
+            or v_struct.concretetype.TO._gckind != "gc"):
             super(FrameworkGCTransformer, self).transform_generic_set(hop)
         else:
             self.write_barrier_calls += 1



More information about the Pypy-commit mailing list