[pypy-svn] r52895 - in pypy/branch/jit-hotpath/pypy/jit: codegen/llgraph rainbow rainbow/test timeshifter

antocuni at codespeak.net antocuni at codespeak.net
Tue Mar 25 10:57:27 CET 2008


Author: antocuni
Date: Tue Mar 25 10:57:25 2008
New Revision: 52895

Modified:
   pypy/branch/jit-hotpath/pypy/jit/codegen/llgraph/llimpl.py
   pypy/branch/jit-hotpath/pypy/jit/codegen/llgraph/rgenop.py
   pypy/branch/jit-hotpath/pypy/jit/rainbow/test/test_interpreter.py
   pypy/branch/jit-hotpath/pypy/jit/rainbow/typesystem.py
   pypy/branch/jit-hotpath/pypy/jit/timeshifter/exception.py
   pypy/branch/jit-hotpath/pypy/jit/timeshifter/oop.py
Log:
finish porting of exception.py to ootype. Three more tests pass



Modified: pypy/branch/jit-hotpath/pypy/jit/codegen/llgraph/llimpl.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/codegen/llgraph/llimpl.py	(original)
+++ pypy/branch/jit-hotpath/pypy/jit/codegen/llgraph/llimpl.py	Tue Mar 25 10:57:25 2008
@@ -342,6 +342,21 @@
         vars_gv = [gv_ptr, gv_fieldname]
         return genop(block, "getfield", vars_gv, RESULTTYPE)
 
+def genoosetfield(block, gv_obj, gv_OBJTYPE, gv_fieldname, gv_value):
+    v_obj = _from_opaque(gv_obj)
+    gv_obj = cast(block, gv_OBJTYPE, gv_obj)
+    vars_gv = [gv_obj, gv_fieldname, gv_value]
+    genop(block, "oosetfield", vars_gv, lltype.Void)
+
+def genoogetfield(block, gv_obj, gv_OBJTYPE, gv_fieldname):
+    OBJTYPE = _from_opaque(gv_OBJTYPE).value
+    c_fieldname = _from_opaque(gv_fieldname)
+    RESULTTYPE = getattr(OBJTYPE.TO, c_fieldname.value) #XXX
+    v_obj = _from_opaque(gv_obj)
+    gv_obj = cast(block, gv_OBJTYPE, gv_obj)
+    vars_gv = [gv_obj, gv_fieldname]
+    return genop(block, "oogetfield", vars_gv, RESULTTYPE)
+
 def gensetarrayitem(block, gv_ptr, gv_index, gv_value):
     v_ptr = _from_opaque(gv_ptr)
     if isinstance(v_ptr, InteriorPtrVariable):

Modified: pypy/branch/jit-hotpath/pypy/jit/codegen/llgraph/rgenop.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/codegen/llgraph/rgenop.py	(original)
+++ pypy/branch/jit-hotpath/pypy/jit/codegen/llgraph/rgenop.py	Tue Mar 25 10:57:25 2008
@@ -178,7 +178,20 @@
         #           llimpl.cast(self.b, gv_FIELDTYPE.v, gv_value.v)]
         #return LLVar(llimpl.genop(self.b, 'setfield', vars_gv,
         #                          gv_Void.v))        
+
+    def genop_oogetfield(self, (gv_name, gv_OBJTYPE, gv_FIELDTYPE), gv_obj):
+        ll_assert(self.rgenop.currently_writing is self,
+                     "genop_oogetfield: bad currently_writing")
+        return LLVar(llimpl.genoogetfield(self.b, gv_obj.v,
+                                        gv_OBJTYPE.v, gv_name.v))
     
+    def genop_oosetfield(self, (gv_name, gv_OBJTYPE, gv_FIELDTYPE), gv_obj,
+                                                                  gv_value):
+        ll_assert(self.rgenop.currently_writing is self,
+                     "genop_setfield: bad currently_writing")
+        v_value = llimpl.cast(self.b, gv_FIELDTYPE.v, gv_value.v)
+        llimpl.genoosetfield(self.b, gv_obj.v, gv_OBJTYPE.v, gv_name.v, v_value)
+
     def genop_getsubstruct(self, (gv_name, gv_PTRTYPE, gv_FIELDTYPE), gv_ptr):
         ll_assert(self.rgenop.currently_writing is self,
                      "genop_getsubstruct: bad currently_writing")

Modified: pypy/branch/jit-hotpath/pypy/jit/rainbow/test/test_interpreter.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/rainbow/test/test_interpreter.py	(original)
+++ pypy/branch/jit-hotpath/pypy/jit/rainbow/test/test_interpreter.py	Tue Mar 25 10:57:25 2008
@@ -1920,8 +1920,6 @@
     def _skip(self):
         py.test.skip('in progress')
 
-    test_green_call = _skip
-    test_green_call_void_return = _skip
     test_degenerated_before_return = _skip
     test_degenerated_before_return_2 = _skip
     test_degenerated_at_return = _skip
@@ -1963,5 +1961,4 @@
     test_red_int_add_ovf = _skip
     test_nonzeroness_assert_while_compiling = _skip
     test_segfault_while_compiling = _skip
-    test_substitute_graph_void = _skip
     test_void_args = _skip

Modified: pypy/branch/jit-hotpath/pypy/jit/rainbow/typesystem.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/rainbow/typesystem.py	(original)
+++ pypy/branch/jit-hotpath/pypy/jit/rainbow/typesystem.py	Tue Mar 25 10:57:25 2008
@@ -19,8 +19,7 @@
 class OOTypeHelper(TypeSystemHelper):
 
     name = 'ootype'
-    ROOT_TYPE = llmemory.Address # XXX: should be ootype.ROOT
-    #ROOT_TYPE = ootype.ROOT
+    ROOT_TYPE = ootype.ROOT
 
     def get_typeptr(self, obj):
         return obj.meta

Modified: pypy/branch/jit-hotpath/pypy/jit/timeshifter/exception.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/timeshifter/exception.py	(original)
+++ pypy/branch/jit-hotpath/pypy/jit/timeshifter/exception.py	Tue Mar 25 10:57:25 2008
@@ -31,18 +31,6 @@
     def _freeze_(self):
         return True
 
-    def genop_get_exc_type(self, builder):
-        return builder.genop_getfield(self.exc_type_token, self.gv_excdata)
-
-    def genop_get_exc_value(self, builder):
-        return builder.genop_getfield(self.exc_value_token, self.gv_excdata)
-
-    def genop_set_exc_type(self, builder, gv_value):
-        builder.genop_setfield(self.exc_type_token, self.gv_excdata, gv_value)
-
-    def genop_set_exc_value(self, builder, gv_value):
-        builder.genop_setfield(self.exc_value_token, self.gv_excdata, gv_value)
-
     def fetch_global_excdata(self, jitstate, known_occurred=False):
         builder = jitstate.curbuilder
         gv_etype  = self.genop_get_exc_type (builder)
@@ -82,12 +70,35 @@
         self.null_exc_value_box = rvalue.PtrRedBox(self.exc_value_kind,
                                                    self.gv_null_exc_value)
 
+    def genop_get_exc_type(self, builder):
+        return builder.genop_getfield(self.exc_type_token, self.gv_excdata)
+
+    def genop_get_exc_value(self, builder):
+        return builder.genop_getfield(self.exc_value_token, self.gv_excdata)
+
+    def genop_set_exc_type(self, builder, gv_value):
+        builder.genop_setfield(self.exc_type_token, self.gv_excdata, gv_value)
+
+    def genop_set_exc_value(self, builder, gv_value):
+        builder.genop_setfield(self.exc_value_token, self.gv_excdata, gv_value)
+
 
 class OOTypeExceptionDesc(AbstractExceptionDesc):
     def _create_boxes(self, RGenOp):
         # XXX: think more about exceptions
-        self.null_exc_type_box = rvalue.PtrRedBox(self.exc_type_kind,
-                                                  RGenOp.constPrebuiltGlobal(llmemory.NULL))
-        self.null_exc_value_box = rvalue.PtrRedBox(self.exc_value_kind,
-                                                   RGenOp.constPrebuiltGlobal(llmemory.NULL))
+        self.null_exc_type_box = rvalue.InstanceRedBox(self.exc_type_kind,
+                                                  self.gv_null_exc_type)
+        self.null_exc_value_box = rvalue.InstanceRedBox(self.exc_value_kind,
+                                                   self.gv_null_exc_value)
+
+    def genop_get_exc_type(self, builder):
+        return builder.genop_oogetfield(self.exc_type_token, self.gv_excdata)
+
+    def genop_get_exc_value(self, builder):
+        return builder.genop_oogetfield(self.exc_value_token, self.gv_excdata)
+
+    def genop_set_exc_type(self, builder, gv_value):
+        builder.genop_oosetfield(self.exc_type_token, self.gv_excdata, gv_value)
 
+    def genop_set_exc_value(self, builder, gv_value):
+        builder.genop_oosetfield(self.exc_value_token, self.gv_excdata, gv_value)

Modified: pypy/branch/jit-hotpath/pypy/jit/timeshifter/oop.py
==============================================================================
--- pypy/branch/jit-hotpath/pypy/jit/timeshifter/oop.py	(original)
+++ pypy/branch/jit-hotpath/pypy/jit/timeshifter/oop.py	Tue Mar 25 10:57:25 2008
@@ -7,7 +7,7 @@
 from pypy.rpython.lltypesystem import lltype
 from pypy.tool.sourcetools import func_with_new_name
 from pypy.translator import exceptiontransform
-
+from pypy.translator.simplify import get_funcobj, get_functype
 
 class Index:
     def __init__(self, n):
@@ -232,7 +232,7 @@
     assert exceptiondesc.rtyper is not None
     llinterp = LLInterpreter(exceptiondesc.rtyper, exc_data_ptr=exc_data_ptr)
     def on_top_of_llinterp(*args):
-        return llinterp.eval_graph(fnptr._obj.graph, list(args))
+        return llinterp.eval_graph(get_funcobj(fnptr).graph, list(args))
     return on_top_of_llinterp
 
 class Entry(ExtRegistryEntry):


More information about the pypy-svn mailing list