diff options
author | Mark Shannon <mark@hotpy.org> | 2021-04-29 12:12:51 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-29 12:12:51 (GMT) |
commit | c76da79b37d2bcbe575cc927ba0a9b7a9ce465db (patch) | |
tree | cf5e884131b3f44f038355ff4980cfbb97a6e228 /Include/cpython/code.h | |
parent | 53dd6c99b39d90935c00bc1558582e494641248e (diff) | |
download | cpython-c76da79b37d2bcbe575cc927ba0a9b7a9ce465db.zip cpython-c76da79b37d2bcbe575cc927ba0a9b7a9ce465db.tar.gz cpython-c76da79b37d2bcbe575cc927ba0a9b7a9ce465db.tar.bz2 |
bpo-42739: Don't use sentinels to mark end of line table. (GH-25657)
* Add length parameter to PyLineTable_InitAddressRange and doen't use sentinel values at end of table. Makes the line number table more robust.
* Update PyCodeAddressRange to match PEP 626.
Diffstat (limited to 'Include/cpython/code.h')
-rw-r--r-- | Include/cpython/code.h | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/Include/cpython/code.h b/Include/cpython/code.h index c3065bb..e810eb4 100644 --- a/Include/cpython/code.h +++ b/Include/cpython/code.h @@ -135,12 +135,17 @@ PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno); PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int); /* for internal use only */ +struct _opaque { + int computed_line; + char *lo_next; + char *limit; +}; + typedef struct _line_offsets { int ar_start; int ar_end; int ar_line; - int ar_computed_line; - char *lo_next; + struct _opaque opaque; } PyCodeAddressRange; /* Update *bounds to describe the first and one-past-the-last instructions in the @@ -170,7 +175,7 @@ PyAPI_FUNC(int) _PyCode_SetExtra(PyObject *code, Py_ssize_t index, int _PyCode_InitAddressRange(PyCodeObject* co, PyCodeAddressRange *bounds); /** Out of process API for initializing the line number table. */ -void PyLineTable_InitAddressRange(char *linetable, int firstlineno, PyCodeAddressRange *range); +void PyLineTable_InitAddressRange(char *linetable, Py_ssize_t length, int firstlineno, PyCodeAddressRange *range); /** API for traversing the line number table. */ int PyLineTable_NextAddressRange(PyCodeAddressRange *range); |