Skip to content

Commit 774b1c3

Browse files
committed
a little more code cleanup
1 parent 671d19b commit 774b1c3

1 file changed

Lines changed: 14 additions & 15 deletions

File tree

Python/frame.c

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -163,15 +163,18 @@ PyUnstable_InterpreterFrame_GetLineSafe(struct _PyInterpreterFrame *frame)
163163
if (code == NULL) {
164164
return -1;
165165
}
166-
int addr = _PyInterpreterFrame_LASTI(frame) * sizeof(_Py_CODEUNIT);
166+
_Py_CODEUNIT *bytecode = _PyFrame_SafeGetBytecode(frame, code);
167+
if (bytecode == NULL) {
168+
return -1;
169+
}
170+
int addr = (int)(frame->instr_ptr - bytecode) * sizeof(_Py_CODEUNIT);
167171
return _PyCode_SafeAddr2Line(code, addr);
168172
}
169173

170174

171-
struct _PyInterpreterFrame * _Py_NO_SANITIZE_THREAD
172-
PyUnstable_ThreadState_GetInterpreterFrame(PyThreadState *tstate)
175+
static _PyInterpreterFrame * _Py_NO_SANITIZE_THREAD
176+
_first_complete_frame(_PyInterpreterFrame *frame)
173177
{
174-
_PyInterpreterFrame *frame = tstate->current_frame;
175178
while (frame != NULL) {
176179
if (_PyMem_IsPtrFreed(frame)) {
177180
return NULL;
@@ -184,20 +187,16 @@ PyUnstable_ThreadState_GetInterpreterFrame(PyThreadState *tstate)
184187
return NULL;
185188
}
186189

190+
struct _PyInterpreterFrame * _Py_NO_SANITIZE_THREAD
191+
PyUnstable_ThreadState_GetInterpreterFrame(PyThreadState *tstate)
192+
{
193+
return _first_complete_frame(tstate->current_frame);
194+
}
195+
187196
struct _PyInterpreterFrame * _Py_NO_SANITIZE_THREAD
188197
PyUnstable_InterpreterFrame_GetNextComplete(struct _PyInterpreterFrame *frame)
189198
{
190-
_PyInterpreterFrame *previous = frame->previous;
191-
while (previous != NULL) {
192-
if (_PyMem_IsPtrFreed(previous)) {
193-
return NULL;
194-
}
195-
if (!_PyFrame_IsIncomplete(previous)) {
196-
return previous;
197-
}
198-
previous = previous->previous;
199-
}
200-
return NULL;
199+
return _first_complete_frame(frame->previous);
201200
}
202201

203202
const PyTypeObject *const PyUnstable_ExecutableKinds[PyUnstable_EXECUTABLE_KINDS+1] = {

0 commit comments

Comments
 (0)