[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