symbian-qemu-0.9.1-12/python-2.6.1/Lib/test/crashers/iter.py
author Peter Fordham <peter.fordham@gmail.com>
Mon, 31 May 2010 16:05:54 -0700
branchCompilerCompatibility
changeset 76 8e8bf3dcfd6b
parent 1 2fb8b9db1c86
permissions -rw-r--r--
Bug 1806 - Simplify/Remove use of inline assembler.

# Calls to PyIter_Next, or direct calls to tp_iternext, on an object
# which might no longer be an iterable because its 'next' method was
# removed.  These are all variants of Issue3720.

"""
Run this script with an argument between 1 and <N> to test for
different crashes.
"""
N = 8

import sys

class Foo(object):
    def __iter__(self):
        return self
    def next(self):
        del Foo.next
        return (1, 2)

def case1():
    list(enumerate(Foo()))

def case2():
    x, y = Foo()

def case3():
    filter(None, Foo())

def case4():
    map(None, Foo(), Foo())

def case5():
    max(Foo())

def case6():
    sum(Foo(), ())

def case7():
    dict(Foo())

def case8():
    sys.stdout.writelines(Foo())

# etc...


if __name__ == '__main__':
    if len(sys.argv) < 2:
        print __doc__.replace('<N>', str(N))
    else:
        n = int(sys.argv[1])
        func = globals()['case%d' % n]
        func()