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

Reply via email to