Skip to content

Commit b0ea38f

Browse files
committed
Get rid of PyStackRef_IsBorrowed
1 parent 902ae84 commit b0ea38f

File tree

5 files changed

+7
-24
lines changed

5 files changed

+7
-24
lines changed

Include/internal/pycore_stackref.h

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,6 @@ PyStackRef_IsNone(_PyStackRef ref)
104104
return _Py_stackref_get_object(ref) == Py_None;
105105
}
106106

107-
static inline bool
108-
PyStackRef_IsBorrowed(_PyStackRef ref)
109-
{
110-
return false;
111-
}
112-
113107
static inline PyObject *
114108
_PyStackRef_AsPyObjectBorrow(_PyStackRef ref, const char *filename, int linenumber)
115109
{
@@ -269,16 +263,6 @@ _PyStackRef_FromPyObjectSteal(PyObject *obj)
269263
}
270264
# define PyStackRef_FromPyObjectSteal(obj) _PyStackRef_FromPyObjectSteal(_PyObject_CAST(obj))
271265

272-
static inline bool
273-
PyStackRef_IsBorrowed(_PyStackRef stackref)
274-
{
275-
if (PyStackRef_IsNull(stackref) || !PyStackRef_IsDeferred(stackref)) {
276-
return false;
277-
}
278-
PyObject *obj = PyStackRef_AsPyObjectBorrow(stackref);
279-
return !(_Py_IsImmortal(obj) || _PyObject_HasDeferredRefcount(obj));
280-
}
281-
282266
static inline bool
283267
PyStackRef_IsHeapSafe(_PyStackRef stackref)
284268
{
@@ -292,11 +276,11 @@ PyStackRef_IsHeapSafe(_PyStackRef stackref)
292276
static inline _PyStackRef
293277
PyStackRef_MakeHeapSafe(_PyStackRef stackref)
294278
{
295-
if (PyStackRef_IsBorrowed(stackref)) {
296-
PyObject *obj = PyStackRef_AsPyObjectBorrow(stackref);
297-
return (_PyStackRef){ .bits = (uintptr_t)(Py_NewRef(obj)) | Py_TAG_PTR };
279+
if (PyStackRef_IsHeapSafe(stackref)) {
280+
return stackref;
298281
}
299-
return stackref;
282+
PyObject *obj = PyStackRef_AsPyObjectBorrow(stackref);
283+
return (_PyStackRef){ .bits = (uintptr_t)(Py_NewRef(obj)) | Py_TAG_PTR };
300284
}
301285

302286
static inline _PyStackRef

Python/bytecodes.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -780,7 +780,7 @@ dummy_func(
780780
* only the locals reference, so PyUnicode_Append knows
781781
* that the string is safe to mutate.
782782
*/
783-
assert(Py_REFCNT(left_o) >= 2 || PyStackRef_IsBorrowed(left));
783+
assert(Py_REFCNT(left_o) >= 2 || !PyStackRef_IsHeapSafe(left));
784784
PyStackRef_CLOSE_SPECIALIZED(left, _PyUnicode_ExactDealloc);
785785
DEAD(left);
786786
PyObject *temp = PyStackRef_AsPyObjectSteal(*target_local);

Python/executor_cases.c.h

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Python/generated_cases.c.h

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Tools/cases_generator/analyzer.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -596,7 +596,6 @@ def has_error_without_pop(op: parser.CodeDef) -> bool:
596596
"PyStackRef_FromPyObjectImmortal",
597597
"PyStackRef_FromPyObjectNew",
598598
"PyStackRef_FromPyObjectSteal",
599-
"PyStackRef_IsBorrowed",
600599
"PyStackRef_IsExactly",
601600
"PyStackRef_FromPyObjectStealMortal",
602601
"PyStackRef_IsNone",

0 commit comments

Comments
 (0)