[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