[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