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

arigo at codespeak.net arigo at codespeak.net
Tue May 31 19:33:26 CEST 2005


Author: arigo
Date: Tue May 31 19:33:26 2005
New Revision: 12942

Modified:
   pypy/dist/pypy/annotation/binaryop.py
   pypy/dist/pypy/annotation/model.py
   pypy/dist/pypy/annotation/unaryop.py
Log:
Changed SomeIterator() to record the container instead of the items it
enumerates.  Allows a consistently rtyped implementation to be chosen based on
what kind of container it iterates over.


Modified: pypy/dist/pypy/annotation/binaryop.py
==============================================================================
--- pypy/dist/pypy/annotation/binaryop.py	(original)
+++ pypy/dist/pypy/annotation/binaryop.py	Tue May 31 19:33:26 2005
@@ -408,7 +408,7 @@
 class __extend__(pairtype(SomeIterator, SomeIterator)):
 
     def union((iter1, iter2)):
-        return SomeIterator(unionof(iter1.s_item, iter2.s_item))
+        return SomeIterator(unionof(iter1.s_container, iter2.s_container))
 
 
 class __extend__(pairtype(SomeBuiltin, SomeBuiltin)):

Modified: pypy/dist/pypy/annotation/model.py
==============================================================================
--- pypy/dist/pypy/annotation/model.py	(original)
+++ pypy/dist/pypy/annotation/model.py	Tue May 31 19:33:26 2005
@@ -225,10 +225,10 @@
 
 
 class SomeIterator(SomeObject):
-    "Stands for an iterator returning objects of a known type."
+    "Stands for an iterator returning objects from a given container."
     knowntype = type(iter([]))  # arbitrarily chose seqiter as the type
-    def __init__(self, s_item=SomeObject()):
-        self.s_item = s_item
+    def __init__(self, s_container):
+        self.s_container = s_container
 
 
 class SomeInstance(SomeObject):

Modified: pypy/dist/pypy/annotation/unaryop.py
==============================================================================
--- pypy/dist/pypy/annotation/unaryop.py	(original)
+++ pypy/dist/pypy/annotation/unaryop.py	Tue May 31 19:33:26 2005
@@ -193,7 +193,10 @@
         return immutablevalue(len(tup.items))
 
     def iter(tup):
-        return SomeIterator(unionof(*tup.items))
+        return SomeIterator(tup)
+
+    def getanyitem(tup):
+        return unionof(*tup.items)
 
 
 class __extend__(SomeList):
@@ -230,7 +233,10 @@
         return SomeObject.len(lst)
 
     def iter(lst):
-        return SomeIterator(lst.listdef.read_item())
+        return SomeIterator(lst)
+
+    def getanyitem(lst):
+        return lst.listdef.read_item()
 
 class __extend__(SomeDict):
 
@@ -244,7 +250,10 @@
         return SomeObject.len(dct)
     
     def iter(dct):
-        return SomeIterator(dct.dictdef.read_key())
+        return SomeIterator(dct)
+
+    def getanyitem(dct):
+        return dct.dictdef.read_key()
 
     def method_get(dct, key, dfl):
         return unionof(dct.dictdef.read_value(), dfl)
@@ -279,7 +288,10 @@
         return SomeString()
 
     def iter(str):
-        return SomeIterator(SomeChar())
+        return SomeIterator(str)
+
+    def getanyitem(str):
+        return SomeChar()
 
     def ord(str):
         return SomeInteger(nonneg=True)
@@ -302,7 +314,7 @@
 class __extend__(SomeIterator):
 
     def next(itr):
-        return itr.s_item
+        return itr.s_container.getanyitem()
 
 
 class __extend__(SomeInstance):



More information about the Pypy-commit mailing list