[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