[pypy-commit] pypy default: "func.__name__ = ascii_unicode" would work on pypy but not on cpython.

arigo noreply at buildbot.pypy.org
Mon Apr 13 14:37:04 CEST 2015


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r76784:9eec547db5f5
Date: 2015-04-13 14:37 +0200
http://bitbucket.org/pypy/pypy/changeset/9eec547db5f5/

Log:	"func.__name__ = ascii_unicode" would work on pypy but not on
	cpython.

diff --git a/pypy/interpreter/function.py b/pypy/interpreter/function.py
--- a/pypy/interpreter/function.py
+++ b/pypy/interpreter/function.py
@@ -374,14 +374,11 @@
         return space.wrap(self.name)
 
     def fset_func_name(self, space, w_name):
-        try:
+        if space.isinstance_w(w_name, space.w_str):
             self.name = space.str_w(w_name)
-        except OperationError, e:
-            if e.match(space, space.w_TypeError):
-                raise OperationError(space.w_TypeError,
-                                     space.wrap("func_name must be set "
-                                                "to a string object"))
-            raise
+        else:
+            raise OperationError(space.w_TypeError,
+                space.wrap("__name__ must be set to a string object"))
 
     def fdel_func_doc(self, space):
         self.w_doc = space.w_None
diff --git a/pypy/interpreter/test/test_function.py b/pypy/interpreter/test/test_function.py
--- a/pypy/interpreter/test/test_function.py
+++ b/pypy/interpreter/test/test_function.py
@@ -107,6 +107,12 @@
             __name__ = "bar"
             assert f.__module__ == "foo"''' in {}
 
+    def test_set_name(self):
+        def f(): pass
+        f.__name__ = 'g'
+        assert f.func_name == 'g'
+        raises(TypeError, "f.__name__ = u'g'")
+
 
 class AppTestFunction:
     def test_simple_call(self):


More information about the pypy-commit mailing list