Skip to content
28 changes: 27 additions & 1 deletion Include/internal/pycore_optimizer.h
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,8 @@ static inline uint16_t uop_get_error_target(const _PyUOpInstruction *inst)

#define REF_IS_BORROWED 1
#define REF_IS_INVALID 2
#define REF_TAG_BITS 3
#define REF_IS_UNIQUE 4
#define REF_TAG_BITS 7

#define JIT_BITS_TO_PTR_MASKED(REF) ((JitOptSymbol *)(((REF).bits) & (~REF_TAG_BITS)))

Expand Down Expand Up @@ -242,6 +243,31 @@ PyJitRef_IsInvalid(JitOptRef ref)
return (ref.bits & REF_IS_INVALID) == REF_IS_INVALID;
}

static inline JitOptRef
PyJitRef_MakeUnique(JitOptRef ref)
{
assert((ref.bits & REF_IS_UNIQUE) == 0);
return (JitOptRef){ ref.bits | REF_IS_UNIQUE };
}

static inline JitOptRef
PyJitRef_RemoveUnique(JitOptRef ref)
{
return (JitOptRef){ ref.bits & (~REF_IS_UNIQUE) };
}

static inline bool
PyJitRef_IsUnique(JitOptRef ref)
{
return (ref.bits & REF_IS_UNIQUE) == REF_IS_UNIQUE;
}

static inline JitOptRef
PyJitRef_StripBorrowInfo(JitOptRef ref)
{
return (JitOptRef){ .bits = ref.bits & ~(REF_IS_BORROWED | REF_IS_INVALID) };
}

static inline JitOptRef
PyJitRef_StripReferenceInfo(JitOptRef ref)
{
Expand Down
2 changes: 2 additions & 0 deletions Include/internal/pycore_tuple.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ extern PyStatus _PyTuple_InitGlobalObjects(PyInterpreterState *);

/* other API */

PyAPI_FUNC(void) _PyTuple_EmptyExactDealloc(PyObject *self);

#define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)

PyAPI_FUNC(PyObject *)_PyTuple_FromStackRefStealOnSuccess(const union _PyStackRef *, Py_ssize_t);
Expand Down
Loading
Loading