GeezerVison is showing github.com — Add PyFrame_SetLineNumber() for Cython · Issue #118720 · python/cpython
Add PyFrame_SetLineNumber() for Cython #118720DescriptionFeature or enhancement
Proposal:
CPython hides PyFrameObject internals so Cython include pycore_frame.h to set f_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
ActivityBen4C commented on Aug 14, 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_fileno variable so I used PyAPI_FUNC(int) PyFrame_SetLineNumber(PyFrameObject *f, int lineno) in Include/cpython/frameobject.h which uses frame_setlineno from frameobject.c to change the f_lineno. I've been trying to get a test to pass to verify that this works in
Lib/test/test_frame.py but I'm not sure if my approach or logic is correct.
This is what I have so far: Ben4C@1e82093 vstinner commented on Mar 14, 2025 This function was also discussed at #130931. vstinner commented on Mar 14, 2025 I wrote PR gh-131246 to add PyFrame_SetLineNumber(). markshannon commented on Mar 17, 2025 I think is going to be very confusing if PyFrame_SetLineNumber has different behavior from setting the line number in Python frame.f_lineno = ....
The f_lineno field 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. vstinner commented on Mar 17, 2025 I wrote this function to replace the Cython macro:
#define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno)
I suppose that Cython sets f_lineno to produce a traceback with specific line number.
cc @scoder @da-woods da-woods commented on Mar 17, 2025
I suppose that Cython sets f_lineno to 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) markshannon commented on Mar 18, 2025 So what are the proposed semantics of PyFrame_SetLineNumber(), how do we test it?
MetadataMetadataDevelopmentNo branches or pull requestsIssue actions
|