[pypy-commit] pypy py3.7: add repr to frames

cfbolz pypy.commits at gmail.com
Wed Jan 8 06:50:15 EST 2020


Author: Carl Friedrich Bolz-Tereick <cfbolz at gmx.de>
Branch: py3.7
Changeset: r98486:628cfb318d11
Date: 2020-01-08 12:49 +0100
http://bitbucket.org/pypy/pypy/changeset/628cfb318d11/

Log:	add repr to frames

diff --git a/pypy/interpreter/pyframe.py b/pypy/interpreter/pyframe.py
--- a/pypy/interpreter/pyframe.py
+++ b/pypy/interpreter/pyframe.py
@@ -951,6 +951,12 @@
             self.space, operr, self, self.last_instr)
         raise operr
 
+    def descr_repr(self, space):
+        code = self.pycode
+        moreinfo = ", file '%s', line %s, code %s" % (
+            code.co_filename, self.get_last_lineno(), code.co_name)
+        return self.getrepr(space, "frame", moreinfo)
+
 # ____________________________________________________________
 
 def get_block_class(opname):
diff --git a/pypy/interpreter/test/test_pyframe.py b/pypy/interpreter/test/test_pyframe.py
--- a/pypy/interpreter/test/test_pyframe.py
+++ b/pypy/interpreter/test/test_pyframe.py
@@ -111,3 +111,12 @@
         assert res == 2
         if hasattr(self, "check_no_w_locals"): # not appdirect
             assert self.check_no_w_locals(fh.frame)
+
+    def test_repr(self):
+        import sys
+        def a_name(a, b, c):
+            a + b + c
+            return sys._getframe()
+        frame = a_name(5, 6, 4)
+        r = repr(frame)
+        assert "a_name" in r
diff --git a/pypy/interpreter/typedef.py b/pypy/interpreter/typedef.py
--- a/pypy/interpreter/typedef.py
+++ b/pypy/interpreter/typedef.py
@@ -658,6 +658,7 @@
     f_code = GetSetProperty(PyFrame.fget_code),
     f_locals = GetSetProperty(PyFrame.fget_getdictscope),
     f_globals = GetSetProperty(PyFrame.fget_w_globals),
+    __repr__ = interp2app(PyFrame.descr_repr),
 )
 assert not PyFrame.typedef.acceptable_as_base_class  # no __new__
 


More information about the pypy-commit mailing list