[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