[pypy-commit] pypy py3.6: fill the classcell even earlier
cfbolz
pypy.commits at gmail.com
Sat May 12 13:10:37 EDT 2018
Author: Carl Friedrich Bolz-Tereick <cfbolz at gmx.de>
Branch: py3.6
Changeset: r94534:4ea0853cd59f
Date: 2018-05-12 19:09 +0200
http://bitbucket.org/pypy/pypy/changeset/4ea0853cd59f/
Log: fill the classcell even earlier
diff --git a/pypy/interpreter/test/test_compiler.py b/pypy/interpreter/test/test_compiler.py
--- a/pypy/interpreter/test/test_compiler.py
+++ b/pypy/interpreter/test/test_compiler.py
@@ -1109,6 +1109,8 @@
assert f() == (4, 3, 2, 1), repr(f())
"""
+ # the following couple of tests are from test_super.py in the stdlib
+
def test_classcell(self):
"""
test_class = None
@@ -1177,6 +1179,24 @@
"""
+ def test_class_mro(self):
+ """
+ test_class = None
+
+ class Meta(type):
+ def mro(self):
+ # self.f() doesn't work yet...
+ self.__dict__["f"]()
+ return super().mro()
+
+ class A(metaclass=Meta):
+ def f():
+ nonlocal test_class
+ test_class = __class__
+
+ assert test_class is A
+ """
+
class AppTestOptimizer(object):
def setup_class(cls):
diff --git a/pypy/objspace/std/typeobject.py b/pypy/objspace/std/typeobject.py
--- a/pypy/objspace/std/typeobject.py
+++ b/pypy/objspace/std/typeobject.py
@@ -803,14 +803,16 @@
key = space.text_w(w_key)
dict_w[key] = space.getitem(w_dict, w_key)
w_type = space.allocate_instance(W_TypeObject, w_typetype)
- W_TypeObject.__init__(w_type, space, name, bases_w or [space.w_object],
- dict_w, is_heaptype=True)
# store the w_type in __classcell__
w_classcell = dict_w.get("__classcell__", None)
if w_classcell:
_store_type_in_classcell(space, w_type, w_classcell, dict_w)
+ W_TypeObject.__init__(w_type, space, name, bases_w or [space.w_object],
+ dict_w, is_heaptype=True)
+
+
w_type.ready()
_set_names(space, w_type)
More information about the pypy-commit
mailing list