Skip to content

Commit f02f543

Browse files
_PyCoLineInstrumentationData as argument in _Py_Instrumentation_GetLine
1 parent 9771e79 commit f02f543

File tree

4 files changed

+10
-14
lines changed

4 files changed

+10
-14
lines changed

Include/internal/pycore_instruments.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,6 @@ PyAPI_FUNC(void)
6464
_Py_call_instrumentation_exc2(PyThreadState *tstate, int event,
6565
_PyInterpreterFrame *frame, _Py_CODEUNIT *instr, PyObject *arg0, PyObject *arg1);
6666

67-
extern int
68-
_Py_Instrumentation_GetLine(PyCodeObject *code, int index);
69-
7067
PyAPI_DATA(PyObject) _PyInstrumentation_MISSING;
7168
PyAPI_DATA(PyObject) _PyInstrumentation_DISABLE;
7269

@@ -122,6 +119,8 @@ typedef struct _PyCoMonitoringData {
122119
uint8_t *per_instruction_tools;
123120
} _PyCoMonitoringData;
124121

122+
extern int
123+
_Py_Instrumentation_GetLine(PyCodeObject *code, _PyCoLineInstrumentationData *line_data, int index);
125124

126125
#ifdef __cplusplus
127126
}

Objects/codeobject.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1018,7 +1018,7 @@ PyCode_Addr2Line(PyCodeObject *co, int addrq)
10181018
if (data) {
10191019
_PyCoLineInstrumentationData *lines = _Py_atomic_load_ptr_acquire(&data->lines);
10201020
if (lines) {
1021-
return _Py_Instrumentation_GetLine(co, addrq/sizeof(_Py_CODEUNIT));
1021+
return _Py_Instrumentation_GetLine(co, lines, addrq/sizeof(_Py_CODEUNIT));
10221022
}
10231023
}
10241024
assert(addrq >= 0 && addrq < _PyCode_NBYTES(co));
@@ -1034,7 +1034,7 @@ _PyCode_SafeAddr2Line(PyCodeObject *co, int addrq)
10341034
return co->co_firstlineno;
10351035
}
10361036
if (co->_co_monitoring && co->_co_monitoring->lines) {
1037-
return _Py_Instrumentation_GetLine(co, addrq/sizeof(_Py_CODEUNIT));
1037+
return _Py_Instrumentation_GetLine(co, co->_co_monitoring->lines, addrq/sizeof(_Py_CODEUNIT));
10381038
}
10391039
if (!(addrq >= 0 && addrq < _PyCode_NBYTES(co))) {
10401040
return -1;

Python/instrumentation.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1286,13 +1286,10 @@ _Py_call_instrumentation_exc2(
12861286
}
12871287

12881288
int
1289-
_Py_Instrumentation_GetLine(PyCodeObject *code, int index)
1289+
_Py_Instrumentation_GetLine(PyCodeObject *code, _PyCoLineInstrumentationData *line_data, int index)
12901290
{
1291-
_PyCoMonitoringData *monitoring = code->_co_monitoring;
1292-
assert(monitoring != NULL);
1293-
assert(monitoring->lines != NULL);
1291+
assert(line_data != NULL);
12941292
assert(index < Py_SIZE(code));
1295-
_PyCoLineInstrumentationData *line_data = monitoring->lines;
12961293
int line_delta = get_line_delta(line_data, index);
12971294
int line = compute_line(code, line_delta);
12981295
return line;
@@ -1310,11 +1307,11 @@ _Py_call_instrumentation_line(PyThreadState *tstate, _PyInterpreterFrame* frame,
13101307
_PyCoMonitoringData *monitoring = code->_co_monitoring;
13111308
_PyCoLineInstrumentationData *line_data = monitoring->lines;
13121309
PyInterpreterState *interp = tstate->interp;
1313-
int line = _Py_Instrumentation_GetLine(code, i);
1310+
int line = _Py_Instrumentation_GetLine(code, line_data, i);
13141311
assert(line >= 0);
13151312
assert(prev != NULL);
13161313
int prev_index = (int)(prev - bytecode);
1317-
int prev_line = _Py_Instrumentation_GetLine(code, prev_index);
1314+
int prev_line = _Py_Instrumentation_GetLine(code, line_data, prev_index);
13181315
if (prev_line == line) {
13191316
int prev_opcode = bytecode[prev_index].op.code;
13201317
/* RESUME and INSTRUMENTED_RESUME are needed for the operation of

Python/legacy_tracing.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -391,8 +391,8 @@ sys_trace_jump_func(
391391
assert(PyCode_Check(code));
392392
/* We can call _Py_Instrumentation_GetLine because we always set
393393
* line events for tracing */
394-
int to_line = _Py_Instrumentation_GetLine(code, to);
395-
int from_line = _Py_Instrumentation_GetLine(code, from);
394+
int to_line = _Py_Instrumentation_GetLine(code, code->_co_monitoring->lines, to);
395+
int from_line = _Py_Instrumentation_GetLine(code, code->_co_monitoring->lines, from);
396396
if (to_line != from_line) {
397397
/* Will be handled by target INSTRUMENTED_LINE */
398398
return &_PyInstrumentation_DISABLE;

0 commit comments

Comments
 (0)