gh-134584: Eliminate redundant refcounting from TO_BOOL_STR (GH-143417)

Signed-off-by: Manjusaka <me@manjusaka.me>
This commit is contained in:
Nadeshiko Manju 2026-01-07 05:11:53 +08:00 committed by GitHub
parent 98e55d70bc
commit 0a5c04a5ce
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 138 additions and 82 deletions

View file

@ -547,23 +547,16 @@ dummy_func(
EXIT_IF(!PyUnicode_CheckExact(value_o));
}
op(_TO_BOOL_STR, (value -- res)) {
op(_TO_BOOL_STR, (value -- res, v)) {
STAT_INC(TO_BOOL, hit);
PyObject *value_o = PyStackRef_AsPyObjectBorrow(value);
if (value_o == &_Py_STR(empty)) {
assert(_Py_IsImmortal(value_o));
DEAD(value);
res = PyStackRef_False;
}
else {
assert(Py_SIZE(value_o));
PyStackRef_CLOSE(value);
res = PyStackRef_True;
}
res = value_o == &_Py_STR(empty) ? PyStackRef_False : PyStackRef_True;
v = value;
DEAD(value);
}
macro(TO_BOOL_STR) =
_GUARD_TOS_UNICODE + unused/1 + unused/2 + _TO_BOOL_STR;
_GUARD_TOS_UNICODE + unused/1 + unused/2 + _TO_BOOL_STR + _POP_TOP_UNICODE;
op(_REPLACE_WITH_TRUE, (value -- res, v)) {
res = PyStackRef_True;