mirror of
https://github.com/python/cpython.git
synced 2025-11-25 21:11:09 +00:00
bpo-45753: Interpreter internal tweaks (GH-29575)
* Split exit paths into exceptional and non-exceptional. * Move exit tracing code to individual bytecodes. * Wrap all trace entry and exit events in macros to make them clearer and easier to enhance. * Move return sequence into RETURN_VALUE, YIELD_VALUE and YIELD_FROM. Distinguish between normal trace events and dtrace events.
This commit is contained in:
parent
0aa0bd0563
commit
49444fb807
3 changed files with 214 additions and 153 deletions
|
|
@ -137,23 +137,24 @@ _GetSpecializedCacheEntryForInstruction(const _Py_CODEUNIT *first_instr, int nex
|
|||
#define QUICKENING_INITIAL_WARMUP_VALUE (-QUICKENING_WARMUP_DELAY)
|
||||
#define QUICKENING_WARMUP_COLDEST 1
|
||||
|
||||
static inline void
|
||||
PyCodeObject_IncrementWarmup(PyCodeObject * co)
|
||||
{
|
||||
co->co_warmup++;
|
||||
}
|
||||
|
||||
/* Used by the interpreter to determine when a code object should be quickened */
|
||||
static inline int
|
||||
PyCodeObject_IsWarmedUp(PyCodeObject * co)
|
||||
{
|
||||
return (co->co_warmup == 0);
|
||||
}
|
||||
|
||||
int _Py_Quicken(PyCodeObject *code);
|
||||
|
||||
extern Py_ssize_t _Py_QuickenedCount;
|
||||
/* Returns 1 if quickening occurs.
|
||||
* -1 if an error occurs
|
||||
* 0 otherwise */
|
||||
static inline int
|
||||
_Py_IncrementCountAndMaybeQuicken(PyCodeObject *code)
|
||||
{
|
||||
if (code->co_warmup != 0) {
|
||||
code->co_warmup++;
|
||||
if (code->co_warmup == 0) {
|
||||
return _Py_Quicken(code) ? -1 : 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern Py_ssize_t _Py_QuickenedCount;
|
||||
|
||||
/* "Locals plus" for a code object is the set of locals + cell vars +
|
||||
* free vars. This relates to variable names as well as offsets into
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue