[pypy-commit] pypy virtual-raw-mallocs: factor out a lot of common code in virtualstate.py too
antocuni
noreply at buildbot.pypy.org
Thu Dec 20 14:32:18 CET 2012
Author: Antonio Cuni <anto.cuni at gmail.com>
Branch: virtual-raw-mallocs
Changeset: r59523:acfc338cd3f3
Date: 2012-12-20 14:32 +0100
http://bitbucket.org/pypy/pypy/changeset/acfc338cd3f3/
Log: factor out a lot of common code in virtualstate.py too
diff --git a/pypy/jit/metainterp/optimizeopt/virtualstate.py b/pypy/jit/metainterp/optimizeopt/virtualstate.py
--- a/pypy/jit/metainterp/optimizeopt/virtualstate.py
+++ b/pypy/jit/metainterp/optimizeopt/virtualstate.py
@@ -158,9 +158,7 @@
def debug_header(self, indent):
debug_print(indent + 'VStructStateInfo(%d):' % self.position)
-class VArrayStateInfo(AbstractVirtualStateInfo):
- def __init__(self, arraydescr):
- self.arraydescr = arraydescr
+class AbstractVArrayStateInfo(AbstractVirtualStateInfo):
def generalization_of(self, other, renum, bad):
assert self.position != -1
@@ -187,18 +185,14 @@
return False
return True
- def _generalization_of(self, other):
- return (isinstance(other, VArrayStateInfo) and
- self.arraydescr is other.arraydescr)
-
def enum_forced_boxes(self, boxes, value, optimizer):
- if not isinstance(value, virtualize.VArrayValue):
+ if not isinstance(value, self.ValueClass):
raise BadVirtualState
if not value.is_virtual():
raise BadVirtualState
for i in range(len(self.fieldstate)):
try:
- v = value._items[i]
+ v = value.get_item_value(i)
except IndexError:
raise BadVirtualState
s = self.fieldstate[i]
@@ -212,6 +206,18 @@
def debug_header(self, indent):
debug_print(indent + 'VArrayStateInfo(%d):' % self.position)
+class VArrayStateInfo(AbstractVArrayStateInfo):
+
+ ValueClass = virtualize.VArrayValue
+
+ def __init__(self, arraydescr):
+ self.arraydescr = arraydescr
+
+ def _generalization_of(self, other):
+ return (isinstance(other, VArrayStateInfo) and
+ self.arraydescr is other.arraydescr)
+
+
class VArrayStructStateInfo(AbstractVirtualStateInfo):
def __init__(self, arraydescr, fielddescrs):
self.arraydescr = arraydescr
@@ -287,55 +293,13 @@
debug_print(indent + 'VArrayStructStateInfo(%d):' % self.position)
-class VRawBufferStateInfo(AbstractVirtualStateInfo):
- def __init__(self):
- pass
+class VRawBufferStateInfo(AbstractVArrayStateInfo):
- def _enum(self, virtual_state):
- for s in self.fieldstate:
- s.enum(virtual_state)
-
- def generalization_of(self, other, renum, bad):
- assert self.position != -1
- if self.position in renum:
- if renum[self.position] == other.position:
- return True
- bad[self] = True
- bad[other] = True
- return False
- renum[self.position] = other.position
- if not self._generalization_of(other):
- bad[self] = True
- bad[other] = True
- return False
- if len(self.fieldstate) != len(other.fieldstate):
- bad[self] = True
- bad[other] = True
- return False
- for i in range(len(self.fieldstate)):
- if not self.fieldstate[i].generalization_of(other.fieldstate[i],
- renum, bad):
- bad[self] = True
- bad[other] = True
- return False
- return True
-
+ ValueClass = virtualize.VRawBufferValue
+
def _generalization_of(self, other):
return isinstance(other, VRawBufferStateInfo)
- def enum_forced_boxes(self, boxes, value, optimizer):
- if not isinstance(value, virtualize.VRawBufferValue):
- raise BadVirtualState
- if not value.is_virtual():
- raise BadVirtualState
- for i in range(len(self.fieldstate)):
- try:
- v = value.buffer.values[i]
- except IndexError:
- raise BadVirtualState
- s = self.fieldstate[i]
- if s.position > self.position:
- s.enum_forced_boxes(boxes, v, optimizer)
class NotVirtualStateInfo(AbstractVirtualStateInfo):
def __init__(self, value, is_opaque=False):
More information about the pypy-commit
mailing list