[pypy-svn] r67265 - pypy/branch/pyjitpl5-less-is_oo/pypy/jit/metainterp
antocuni at codespeak.net
antocuni at codespeak.net
Thu Aug 27 23:42:30 CEST 2009
Author: antocuni
Date: Thu Aug 27 23:42:29 2009
New Revision: 67265
Modified:
pypy/branch/pyjitpl5-less-is_oo/pypy/jit/metainterp/typesystem.py
pypy/branch/pyjitpl5-less-is_oo/pypy/jit/metainterp/virtualizable.py
Log:
get rid of the various is_oo in virtualizable.py
Modified: pypy/branch/pyjitpl5-less-is_oo/pypy/jit/metainterp/typesystem.py
==============================================================================
--- pypy/branch/pyjitpl5-less-is_oo/pypy/jit/metainterp/typesystem.py (original)
+++ pypy/branch/pyjitpl5-less-is_oo/pypy/jit/metainterp/typesystem.py Thu Aug 27 23:42:29 2009
@@ -1,6 +1,8 @@
from pypy.rpython.lltypesystem import lltype, llmemory, rclass
from pypy.rpython.ootypesystem import ootype
from pypy.rpython.annlowlevel import cast_base_ptr_to_instance, llstr, oostr
+from pypy.rpython.annlowlevel import cast_instance_to_base_ptr
+from pypy.rpython.annlowlevel import cast_instance_to_base_obj
from pypy.jit.metainterp import history
from pypy.jit.metainterp import history
@@ -37,11 +39,16 @@
name = 'lltype'
functionptr = staticmethod(lltype.functionptr)
+ nullptr = staticmethod(lltype.nullptr)
+ cast_instance_to_base_ref = staticmethod(cast_instance_to_base_ptr)
BASETYPE = llmemory.GCREF
BoxRef = history.BoxPtr
ConstRef = history.ConstPtr
loops_done_with_this_frame_ref = None # patched by compile.py
+ from pypy.rpython.lltypesystem.rvirtualizable2 import VABLERTIPTR as VABLERTI
+ null_vable_rti = lltype.nullptr(VABLERTI.TO)
+
def new_ConstRef(self, x):
ptrval = lltype.cast_opaque_ptr(llmemory.GCREF, x)
return history.ConstPtr(ptrval)
@@ -54,6 +61,13 @@
FUNCPTRTYPE = lltype.Ptr(FUNCTYPE)
return FUNCTYPE, FUNCPTRTYPE
+ def get_superclass(self, TYPE):
+ return lltype.Ptr(TYPE.TO._first_struct()[1])
+
+ def cast_to_instance_maybe(self, TYPE, instance):
+ return lltype.cast_pointer(TYPE, instance)
+ cast_to_instance_maybe._annspecialcase_ = 'specialize:arg(1)'
+
def cast_fnptr_to_root(self, fnptr):
return llmemory.cast_ptr_to_adr(fnptr)
@@ -122,11 +136,16 @@
name = 'ootype'
functionptr = staticmethod(ootype.static_meth)
+ nullptr = staticmethod(ootype.null)
+ cast_instance_to_base_ref = staticmethod(cast_instance_to_base_obj)
BASETYPE = ootype.Object
BoxRef = history.BoxObj
ConstRef = history.ConstObj
loops_done_with_this_frame_ref = None # patched by compile.py
+ from pypy.rpython.ootypesystem.rvirtualizable2 import VABLERTI
+ null_vable_rti = ootype.make_null_instance(VABLERTI)
+
def new_ConstRef(self, x):
obj = ootype.cast_to_object(x)
return history.ConstObj(obj)
@@ -138,6 +157,13 @@
FUNCTYPE = ootype.StaticMethod(ARGS, RESULT)
return FUNCTYPE, FUNCTYPE
+ def get_superclass(self, TYPE):
+ return TYPE._superclass
+
+ def cast_to_instance_maybe(self, TYPE, instance):
+ return instance
+ cast_to_instance_maybe._annspecialcase_ = 'specialize:arg(1)'
+
def cast_fnptr_to_root(self, fnptr):
return ootype.cast_to_object(fnptr)
Modified: pypy/branch/pyjitpl5-less-is_oo/pypy/jit/metainterp/virtualizable.py
==============================================================================
--- pypy/branch/pyjitpl5-less-is_oo/pypy/jit/metainterp/virtualizable.py (original)
+++ pypy/branch/pyjitpl5-less-is_oo/pypy/jit/metainterp/virtualizable.py Thu Aug 27 23:42:29 2009
@@ -1,12 +1,10 @@
from pypy.rpython.lltypesystem import lltype
from pypy.rpython.ootypesystem import ootype
-from pypy.rpython.annlowlevel import cast_instance_to_base_ptr
-from pypy.rpython.annlowlevel import cast_instance_to_base_obj
from pypy.rpython.annlowlevel import cast_base_ptr_to_instance
from pypy.rpython import rvirtualizable2
from pypy.rlib.objectmodel import we_are_translated
from pypy.rlib.unroll import unrolling_iterable
-from pypy.jit.metainterp.typesystem import deref
+from pypy.jit.metainterp.typesystem import deref, fieldType, arrayItem
from pypy.jit.metainterp import history
from pypy.jit.metainterp.warmspot import wrap, unwrap
@@ -16,17 +14,10 @@
self.warmrunnerdesc = warmrunnerdesc
jitdriver = warmrunnerdesc.jitdriver
cpu = warmrunnerdesc.cpu
- self.is_oo = cpu.is_oo
- if not self.is_oo:
- from pypy.rpython.lltypesystem.rvirtualizable2 import VABLERTIPTR
- self.VABLERTI = VABLERTIPTR
- self.null_vable_rti = lltype.nullptr(VABLERTIPTR.TO)
- self.BoxArray = history.BoxPtr
- else:
- from pypy.rpython.ootypesystem.rvirtualizable2 import VABLERTI
- self.VABLERTI = VABLERTI
- self.null_vable_rti = ootype.make_null_instance(VABLERTI)
- self.BoxArray = history.BoxObj
+ self.cpu = cpu
+ self.VABLERTI = cpu.ts.VABLERTI
+ self.null_vable_rti = cpu.ts.null_vable_rti
+ self.BoxArray = cpu.ts.BoxRef
#
assert len(jitdriver.virtualizables) == 1 # for now
[vname] = jitdriver.virtualizables
@@ -34,16 +25,10 @@
self.index_of_virtualizable = index
VTYPEPTR = warmrunnerdesc.JIT_ENTER_FUNCTYPE.ARGS[index]
while 'virtualizable2_accessor' not in deref(VTYPEPTR)._hints:
- if not self.is_oo:
- VTYPEPTR = lltype.Ptr(VTYPEPTR.TO._first_struct()[1])
- else:
- VTYPEPTR = VTYPEPTR._superclass
+ VTYPEPTR = cpu.ts.get_superclass(VTYPEPTR)
self.VTYPEPTR = VTYPEPTR
self.VTYPE = VTYPE = deref(VTYPEPTR)
- if not self.is_oo:
- self.null_vable = lltype.nullptr(VTYPE)
- else:
- self.null_vable = ootype.null(VTYPE)
+ self.null_vable = cpu.ts.nullptr(VTYPE)
#
accessor = VTYPE._hints['virtualizable2_accessor']
all_fields = accessor.fields
@@ -57,26 +42,16 @@
self.static_fields = static_fields
self.array_fields = array_fields
#
- if not self.is_oo: # lltype
- assert isinstance(VTYPEPTR, lltype.Ptr)
- FIELDTYPES = [getattr(VTYPE, name) for name in static_fields]
- ARRAYITEMTYPES = []
- for name in array_fields:
- ARRAYPTR = getattr(VTYPE, name)
- assert isinstance(ARRAYPTR, lltype.Ptr)
- assert isinstance(ARRAYPTR.TO, lltype.GcArray)
- ARRAYITEMTYPES.append(ARRAYPTR.TO.OF)
- self.array_descrs = [cpu.arraydescrof(getattr(VTYPE, name).TO)
- for name in array_fields]
- else: # ootype
- FIELDTYPES = [VTYPE._field_type(name) for name in static_fields]
- ARRAYITEMTYPES = []
- for name in array_fields:
- ARRAY = VTYPE._field_type(name)
- assert isinstance(ARRAY, ootype.Array)
- ARRAYITEMTYPES.append(ARRAY.ITEM)
- self.array_descrs = [cpu.arraydescrof(VTYPE._field_type(name))
- for name in array_fields]
+ FIELDTYPES = [fieldType(VTYPE, name) for name in static_fields]
+ ARRAYITEMTYPES = []
+ for name in array_fields:
+ ARRAYPTR = fieldType(VTYPE, name)
+ ARRAY = deref(ARRAYPTR)
+ assert isinstance(ARRAYPTR, (lltype.Ptr, ootype.Array))
+ assert isinstance(ARRAY, (lltype.GcArray, ootype.Array))
+ ARRAYITEMTYPES.append(arrayItem(ARRAY))
+ self.array_descrs = [cpu.arraydescrof(deref(fieldType(VTYPE, name)))
+ for name in array_fields]
#
self.num_static_extra_boxes = len(static_fields)
self.num_arrays = len(array_fields)
@@ -185,16 +160,10 @@
all_graphs, self.VTYPEPTR, funcptr)
def unwrap_virtualizable_box(self, virtualizable_box):
- if not self.is_oo:
- return virtualizable_box.getref(self.VTYPEPTR)
- else:
- return virtualizable_box.getref(self.VTYPE)
+ return virtualizable_box.getref(self.VTYPEPTR)
def cast_to_vtype(self, virtualizable):
- if not self.is_oo:
- return lltype.cast_pointer(self.VTYPEPTR, virtualizable)
- else:
- return virtualizable
+ return self.cpu.ts.cast_to_instance_maybe(self.VTYPEPTR, virtualizable)
cast_to_vtype._annspecialcase_ = 'specialize:ll'
def is_vtypeptr(self, TYPE):
@@ -202,10 +171,7 @@
def cast_instance_to_base_ptr(self, vable_rti):
if we_are_translated():
- if not self.is_oo:
- return cast_instance_to_base_ptr(vable_rti)
- else:
- return cast_instance_to_base_obj(vable_rti)
+ return self.cpu.ts.cast_instance_to_base_ref(vable_rti)
else:
vable_rti._TYPE = self.VABLERTI # hack for non-translated mode
return vable_rti
More information about the Pypy-commit
mailing list