[pypy-svn] r66594 - pypy/branch/pyjitpl5-optimize4/pypy/jit/backend/minimal

arigo at codespeak.net arigo at codespeak.net
Fri Jul 24 16:26:37 CEST 2009


Author: arigo
Date: Fri Jul 24 16:26:36 2009
New Revision: 66594

Modified:
   pypy/branch/pyjitpl5-optimize4/pypy/jit/backend/minimal/runner.py
Log:
Fix for NEW_WITH_VTABLE not taking the descr any more.
Add the new is_pointer_field() method.


Modified: pypy/branch/pyjitpl5-optimize4/pypy/jit/backend/minimal/runner.py
==============================================================================
--- pypy/branch/pyjitpl5-optimize4/pypy/jit/backend/minimal/runner.py	(original)
+++ pypy/branch/pyjitpl5-optimize4/pypy/jit/backend/minimal/runner.py	Fri Jul 24 16:26:36 2009
@@ -4,7 +4,7 @@
 from pypy.rpython.lltypesystem import lltype, llmemory, rffi, rstr, rclass
 from pypy.rpython.ootypesystem import ootype
 from pypy.jit.metainterp.history import AbstractDescr, AbstractMethDescr
-from pypy.jit.metainterp.history import Box, BoxInt, BoxPtr, BoxObj
+from pypy.jit.metainterp.history import Box, BoxInt, BoxPtr, BoxObj, getkind
 from pypy.jit.metainterp import executor
 from pypy.jit.metainterp.resoperation import rop, opname
 from pypy.jit.backend import model
@@ -209,7 +209,11 @@
                 setattr(p, %(name)r, x)
         """ % dict).compile() in dict2
         sort_key = self._count_sort_key(T, name)
-        return FieldDescr(dict2['getfield'], dict2['setfield'], sort_key)
+        if getkind(FIELDTYPE) in 'po':    # pointer or object
+            Class = PtrFieldDescr
+        else:
+            Class = NonPtrFieldDescr
+        return Class(dict2['getfield'], dict2['setfield'], sort_key)
 
     # ----------
 
@@ -424,8 +428,9 @@
         p = sizedescr.alloc()
         return BoxPtr(p)
 
-    def do_new_with_vtable(self, args, sizedescr):
-        assert isinstance(sizedescr, SizeDescr)
+    def do_new_with_vtable(self, args, descr=None):
+        assert descr is None
+        sizedescr = self.class_sizes[args[0].getint()]
         assert sizedescr.alloc is not None
         p = sizedescr.alloc()
         classadr = args[0].getaddr(self)
@@ -614,8 +619,9 @@
 
     # ----------------
     
-    def do_new_with_vtable(self, args, sizedescr):
-        assert isinstance(sizedescr, SizeDescr)
+    def do_new_with_vtable(self, args, descr):
+        assert descr is None
+        sizedescr = self.class_sizes[args[0].getobj()]
         assert sizedescr.alloc is not None
         obj = sizedescr.alloc()
         return BoxObj(obj)
@@ -658,6 +664,14 @@
     def sort_key(self):
         return self._sort_key
 
+class PtrFieldDescr(FieldDescr):
+    def is_pointer_field(self):
+        return True
+
+class NonPtrFieldDescr(FieldDescr):
+    def is_pointer_field(self):
+        return False
+
 class ArrayDescr(AbstractDescr):
     new = None
     length = None



More information about the Pypy-commit mailing list