[pypy-svn] r18766 - pypy/dist/pypy/annotation

pedronis at codespeak.net pedronis at codespeak.net
Wed Oct 19 19:28:01 CEST 2005


Author: pedronis
Date: Wed Oct 19 19:27:58 2005
New Revision: 18766

Modified:
   pypy/dist/pypy/annotation/binaryop.py
   pypy/dist/pypy/annotation/listdef.py
Log:
use (possibly circual) chains of read_item/generalize for setitem(list,slice,value) and int*list/list*int

preperation for special fixed-size lists support



Modified: pypy/dist/pypy/annotation/binaryop.py
==============================================================================
--- pypy/dist/pypy/annotation/binaryop.py	(original)
+++ pypy/dist/pypy/annotation/binaryop.py	Wed Oct 19 19:27:58 2005
@@ -434,8 +434,7 @@
 class __extend__(pairtype(SomeList, SomeInteger)):
     
     def mul((lst1, int2)):
-        #return getbookkeeper().newlist(lst1.listdef.read_item())
-        return SomeList(lst1.listdef)
+        return lst1.listdef.offspring()
 
     def getitem((lst1, int2)):
         getbookkeeper().count("list_getitem", int2)
@@ -456,8 +455,7 @@
 class __extend__(pairtype(SomeList, SomeSlice)):
 
     def getitem((lst, slic)):
-        #return getbookkeeper().newlist(lst.listdef.read_item())
-        return SomeList(lst.listdef)
+        return lst.listdef.offspring()
     getitem.can_only_throw = []
 
     def setitem((lst, slic), s_iterable):
@@ -496,8 +494,7 @@
 class __extend__(pairtype(SomeInteger, SomeList)):
     
     def mul((int1, lst2)):
-        #return getbookkeeper().newlist(lst2.listdef.read_item())
-        return SomeList(lst2.listdef)
+        return lst2.listdef.offspring()
 
 
 class __extend__(pairtype(SomeInstance, SomeInstance)):

Modified: pypy/dist/pypy/annotation/listdef.py
==============================================================================
--- pypy/dist/pypy/annotation/listdef.py	(original)
+++ pypy/dist/pypy/annotation/listdef.py	Wed Oct 19 19:27:58 2005
@@ -78,13 +78,16 @@
         self.listitem.itemof[self] = True
         self.bookkeeper = bookkeeper
 
+    def getbookkeeper(self):
+        if self.bookkeeper is None:
+            from pypy.annotation.bookkeeper import getbookkeeper
+            return getbookkeeper()
+        else:
+            return self.bookkeeper
+
     def read_item(self, position_key=None):
         if position_key is None:
-            if self.bookkeeper is None:   # for tests
-                from pypy.annotation.bookkeeper import getbookkeeper
-                position_key = getbookkeeper().position_key
-            else:
-                position_key = self.bookkeeper.position_key
+            position_key = self.getbookkeeper().position_key
         self.listitem.read_locations[position_key] = True
         return self.listitem.s_value
 
@@ -105,13 +108,16 @@
         self.generalize(s_other_value)
         other.generalize(s_self_value)
 
-    def offspring(self, other):
+    def offspring(self, *others):
         s_self_value = self.read_item()
-        s_other_value = other.read_item()        
-        s_newlst = self.bookkeeper.newlist(s_self_value, s_other_value)
+        s_other_values = []
+        for other in others:
+            s_other_values.append(other.read_item())
+        s_newlst = self.getbookkeeper().newlist(s_self_value, *s_other_values)
         s_newvalue = s_newlst.listdef.read_item()
         self.generalize(s_newvalue)
-        other.generalize(s_newvalue)
+        for other in others:
+            other.generalize(s_newvalue)
         return s_newlst
 
     def generalize(self, s_value):



More information about the Pypy-commit mailing list