Repository navigation
Add PyFrame_SetLineNumber() for Cython #118720
Description
Activity
- addedtype-featureA feature request or enhancementA feature request or enhancement
on May 7, 2024 Hello, I've been working on this for a little while, but I'm a bit lost on implementing the changes.
From what I understand think I'm supposed to create a public API to set the
f_filenovariable so I usedPyAPI_FUNC(int) PyFrame_SetLineNumber(PyFrameObject *f, int lineno)inInclude/cpython/frameobject.hwhich usesframe_setlinenofromframeobject.cto change thef_lineno. I've been trying to get a test to pass to verify that this works in
Lib/test/test_frame.pybut I'm not sure if my approach or logic is correct.This is what I have so far: Ben4C@1e82093
Reacted by Inada NaokiThis function was also discussed at #130931.
I wrote PR gh-131246 to add
PyFrame_SetLineNumber().- addedinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)
on Mar 14, 2025 I think is going to be very confusing if
PyFrame_SetLineNumberhas different behavior from setting the line number in Pythonframe.f_lineno = ....The
f_linenofield in the the frame object is a cache for the computed line number.
It may overwritten by the interpreter, so setting it will not work reliably.I suppose that Cython sets
f_linenoto produce a traceback with specific line number.Yes - it's used directly after creating a frame for that purpose.
(It's also used in the old, pre-sys-monitoring code. I would not worry about replacing that usage because I think that's only on older Python versions)
So what are the proposed semantics of
PyFrame_SetLineNumber(), how do we test it?
Feature or enhancement
Proposal:
CPython hides PyFrameObject internals so Cython include
pycore_frame.hto setf_lineno.Let's provide PyFrame_SetLineNumber() for Cython.
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
#117551 (comment)
Linked PRs