Author: Alex Gaynor <[email protected]>
Branch: virtual-dicts
Changeset: r48397:325af29a17b8
Date: 2011-10-24 17:30 -0400
http://bitbucket.org/pypy/pypy/changeset/325af29a17b8/
Log: progress I think
diff --git a/pypy/jit/metainterp/optimizeopt/virtualize.py
b/pypy/jit/metainterp/optimizeopt/virtualize.py
--- a/pypy/jit/metainterp/optimizeopt/virtualize.py
+++ b/pypy/jit/metainterp/optimizeopt/virtualize.py
@@ -302,9 +302,16 @@
def get_args_for_fail(self, modifier):
if self.box is None and not modifier.already_seen_virtual(self.keybox):
- # Need a way to store data as pairs of (index, descr), not just
- # descr or index.
- raise NotImplementedError
+ itemboxes = []
+ for items in self._items:
+ descrs = items.keys()
+ sort_descrs(descrs)
+ for descr in descrs:
+ itemboxes.append(items[descr])
+ modifier.register_virtual_fields(self.keybox, itemboxes)
+ for item in itemboxes:
+ item.get_args_for_fail(modifier)
+
def force_at_end_of_preamble(self, already_forced, optforce):
if self in already_forced:
diff --git a/pypy/jit/metainterp/resume.py b/pypy/jit/metainterp/resume.py
--- a/pypy/jit/metainterp/resume.py
+++ b/pypy/jit/metainterp/resume.py
@@ -139,7 +139,7 @@
self.numberings = {}
self.cached_boxes = {}
self.cached_virtuals = {}
-
+
self.nvirtuals = 0
self.nvholes = 0
self.nvreused = 0
@@ -273,6 +273,9 @@
def make_varray(self, arraydescr):
return VArrayInfo(arraydescr)
+ def make_varraystruct(self, arraydescr):
+ return VArrayStructInfo(arraydescr)
+
def make_vstrplain(self, is_unicode=False):
if is_unicode:
return VUniPlainInfo()
@@ -402,7 +405,7 @@
virtuals[num] = vinfo
if self._invalidation_needed(len(liveboxes), nholes):
- memo.clear_box_virtual_numbers()
+ memo.clear_box_virtual_numbers()
def _invalidation_needed(self, nliveboxes, nholes):
memo = self.memo
@@ -455,7 +458,7 @@
def debug_prints(self):
raise NotImplementedError
-
+
class AbstractVirtualStructInfo(AbstractVirtualInfo):
def __init__(self, fielddescrs):
self.fielddescrs = fielddescrs
@@ -537,6 +540,15 @@
for i in self.fieldnums:
debug_print("\t\t", str(untag(i)))
+class VArrayStructInfo(AbstractVirtualInfo):
+ def __init__(self, arraydescr):
+ self.arraydescr = arraydescr
+
+ def debug_prints(self):
+ debug_print("\tvarraystructinfo", self.arraydescr)
+ for i in self.fieldnums:
+ debug_print("\t\t", str(untag(i)))
+
class VStrPlainInfo(AbstractVirtualInfo):
"""Stands for the string made out of the characters of all fieldnums."""
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit