[pypy-commit] pypy value-classes: Fix tests
sbauman
pypy.commits at gmail.com
Tue Sep 27 19:49:16 EDT 2016
Author: Spenser Bauman <sabauma at gmail.com>
Branch: value-classes
Changeset: r87425:84b5711bcbb1
Date: 2016-09-27 19:48 -0400
http://bitbucket.org/pypy/pypy/changeset/84b5711bcbb1/
Log: Fix tests
diff --git a/rpython/jit/metainterp/optimizeopt/virtualstate.py b/rpython/jit/metainterp/optimizeopt/virtualstate.py
--- a/rpython/jit/metainterp/optimizeopt/virtualstate.py
+++ b/rpython/jit/metainterp/optimizeopt/virtualstate.py
@@ -7,6 +7,7 @@
from rpython.jit.metainterp.resoperation import rop, ResOperation, \
InputArgInt, InputArgRef, InputArgFloat
from rpython.rlib.debug import debug_print
+from rpython.rlib.objectmodel import specialize
LEVEL_UNKNOWN = '\x00'
LEVEL_NONNULL = '\x01'
@@ -213,6 +214,7 @@
return (isinstance(other, VirtualStateInfo) and
self.typedescr is other.typedescr)
+ @specialize.argtype(4)
def getfield(self, box, info, descr, optimizer):
assert isinstance(info, AbstractStructPtrInfo)
field = info._fields[descr.get_index()]
@@ -220,17 +222,23 @@
return field
opnum = rop.getfield_for_descr(descr)
getfield = ResOperation(opnum, [box], descr=descr)
- optimizer.emit_operation(getfield)
+ if isinstance(optimizer, list):
+ optimizer.append(getfield)
+ else:
+ from rpython.jit.metainterp.optimizeopt import Optimizer
+ assert isinstance(optimizer, Optimizer)
+ optimizer.emit_operation(getfield)
+ info._fields[descr.get_index()] = getfield
return getfield
def make_virtual_copy(self, box, info, optimizer):
optvirtualize = optimizer.optvirtualize
# newop = ResOperation(rop.NEW_WITH_VTABLE, [], descr=self.typedescr)
opinfo = optvirtualize.make_virtual(self.known_class, box, self.typedescr)
- # optimizer.emit_operation(newop)
for i in range(len(info._fields)):
descr = self.fielddescrs[i]
opinfo._fields[i] = self.getfield(box, info, descr, optimizer)
+ # optimizer.emit_operation(newop)
return opinfo
def enum_forced_boxes(self, boxes, box, optimizer, force_boxes=False):
@@ -265,8 +273,7 @@
"""
assert isinstance(other, NotVirtualStateInfoPtr)
- known_class = self.typedescr
- if not known_class.is_value_class():
+ if not self.typedescr.is_value_class():
raise VirtualStatesCantMatch("different kinds of structs")
# raise VirtualStatesCantMatch("different kinds of structs")
@@ -312,20 +319,18 @@
# virtual object.
# This will probably look a lot like
# AbstractVirtualStateInfo._generate_guards
- fields = []
for i, descr in enumerate(self.fielddescrs):
if runtime_box is not None and opinfo is not None:
- fieldbox = opinfo._fields[descr.get_index()]
+ fieldbox = self.getfield(box, opinfo, descr, extra_guards)
fieldbox_runtime = state.get_runtime_field(runtime_box, descr)
else:
opnum = rop.getfield_for_descr(descr)
fieldbox = ResOperation(opnum, [box], descr=descr)
extra_guards.append(fieldbox)
fieldbox_runtime = None
- fields.append(fieldbox)
- faux_field_state = not_virtual(cpu, fieldbox.type, opinfo)
+ other_field_state = not_virtual(cpu, fieldbox.type, opinfo)
fieldstate = self.fieldstate[i]
- fieldstate.generate_guards(faux_field_state, fieldbox,
+ fieldstate.generate_guards(other_field_state, fieldbox,
fieldbox_runtime, state)
def debug_header(self, indent):
diff --git a/rpython/jit/metainterp/test/test_virtual.py b/rpython/jit/metainterp/test/test_virtual.py
--- a/rpython/jit/metainterp/test/test_virtual.py
+++ b/rpython/jit/metainterp/test/test_virtual.py
@@ -1043,6 +1043,7 @@
return 0
self.meta_interp(f, [])
+ import pdb; pdb.set_trace()
def test_aliased_virtual_states(self):
# All cases are covered when forcing one component of the virtual state
More information about the pypy-commit
mailing list