mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Extend function() to support an optional closure argument.
Also, simplify some ref counting for other optional arguments.
This commit is contained in:
parent
14cb1e1eff
commit
df3f793516
2 changed files with 89 additions and 12 deletions
|
@ -71,6 +71,30 @@ func()
|
|||
verify(g['c'] == 3,
|
||||
'Could not create a proper function object')
|
||||
|
||||
# test the various extended flavors of function.new
|
||||
def f(x):
|
||||
def g(y):
|
||||
return x + y
|
||||
return g
|
||||
g = f(4)
|
||||
new.function(f.func_code, {}, "blah")
|
||||
g2 = new.function(g.func_code, {}, "blah", (2,), g.func_closure)
|
||||
verify(g2() == 6)
|
||||
g3 = new.function(g.func_code, {}, "blah", None, g.func_closure)
|
||||
verify(g3(5) == 9)
|
||||
def test_closure(func, closure, exc):
|
||||
try:
|
||||
new.function(func.func_code, {}, "", None, closure)
|
||||
except exc:
|
||||
pass
|
||||
else:
|
||||
print "corrupt closure accepted"
|
||||
|
||||
test_closure(g, None, TypeError) # invalid closure
|
||||
test_closure(g, (1,), TypeError) # non-cell in closure
|
||||
test_closure(g, (1, 1), ValueError) # closure is wrong size
|
||||
test_closure(f, g.func_closure, ValueError) # no closure needed
|
||||
|
||||
print 'new.code()'
|
||||
# bogus test of new.code()
|
||||
# Note: Jython will never have new.code()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue