Author: Carl Friedrich Bolz-Tereick <[email protected]>
Branch: py3.7
Changeset: r98490:1787f589a543
Date: 2020-01-08 13:23 +0100
http://bitbucket.org/pypy/pypy/changeset/1787f589a543/

Log:    make cell contents writable

diff --git a/pypy/interpreter/nestedscope.py b/pypy/interpreter/nestedscope.py
--- a/pypy/interpreter/nestedscope.py
+++ b/pypy/interpreter/nestedscope.py
@@ -85,3 +85,6 @@
             return self.get()
         except ValueError:
             raise oefmt(space.w_ValueError, "Cell is empty")
+
+    def descr_set_cell_contents(self, space, w_value):
+        return self.set(w_value)
diff --git a/pypy/interpreter/test/apptest_nestedscope.py 
b/pypy/interpreter/test/apptest_nestedscope.py
--- a/pypy/interpreter/test/apptest_nestedscope.py
+++ b/pypy/interpreter/test/apptest_nestedscope.py
@@ -88,6 +88,19 @@
     g = f(10)
     assert g.__closure__[0].cell_contents == 10
 
+def test_set_cell_contents():
+    def f(x):
+        def g(y):
+            return x + y
+        return g
+
+    g10 = f(10)
+    assert g10(5) == 15
+    assert g10.__closure__[0].cell_contents == 10
+    g10.__closure__[0].cell_contents = 20
+    assert g10.__closure__[0].cell_contents == 20
+    assert g10(5) == 25
+
 def test_empty_cell_contents():
 
     def f():
diff --git a/pypy/interpreter/typedef.py b/pypy/interpreter/typedef.py
--- a/pypy/interpreter/typedef.py
+++ b/pypy/interpreter/typedef.py
@@ -943,7 +943,7 @@
     __reduce__   = interp2app(Cell.descr__reduce__),
     __repr__     = interp2app(Cell.descr__repr__),
     __setstate__ = interp2app(Cell.descr__setstate__),
-    cell_contents= GetSetProperty(Cell.descr__cell_contents, cls=Cell),
+    cell_contents= GetSetProperty(Cell.descr__cell_contents, 
Cell.descr_set_cell_contents, cls=Cell),
 )
 assert not Cell.typedef.acceptable_as_base_class  # no __new__
 
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to