Skip to content

Commit 120bc73

Browse files
committed
Add sys._is_immortal
1 parent e389d6c commit 120bc73

File tree

3 files changed

+59
-1
lines changed

3 files changed

+59
-1
lines changed

Lib/test/test_sys.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -713,6 +713,20 @@ def test_43581(self):
713713
# the test runs under regrtest.
714714
self.assertEqual(sys.__stdout__.encoding, sys.__stderr__.encoding)
715715

716+
@unittest.skipUnless(hasattr(sys, "_is_immortal"))
717+
def test_immortal(self):
718+
# Not extensive
719+
known_immortals = (True, False, None, 0, ())
720+
for immortal in known_immortals:
721+
with self.subTest(immortal=immortal):
722+
self.assertTrue(sys._is_immortal(immortal))
723+
724+
# Some arbitrary mutable objects
725+
non_immortals = (object(), self, [object()])
726+
for non_immortal in non_immortals:
727+
with self.subTest(non_immortal=non_immortal):
728+
self.assertFalse(sys._is_immortal(non_immortal))
729+
716730
def test_intern(self):
717731
has_is_interned = (test.support.check_impl_detail(cpython=True)
718732
or hasattr(sys, '_is_interned'))

Python/clinic/sysmodule.c.h

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

Python/sysmodule.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -955,6 +955,21 @@ sys_intern_impl(PyObject *module, PyObject *s)
955955
}
956956
}
957957

958+
/*[clinic input]
959+
sys._is_immortal -> bool
960+
961+
op: object
962+
/
963+
964+
Return True if the given object is "immortal" per PEP 683.
965+
[clinic start generated code]*/
966+
967+
static int
968+
sys__is_immortal_impl(PyObject *module, PyObject *op)
969+
/*[clinic end generated code: output=c2f5d6a80efb8d1a input=83733fc356c78475]*/
970+
{
971+
return _Py_IsImmortal(op);
972+
}
958973

959974
/*[clinic input]
960975
sys._is_interned -> bool
@@ -2590,6 +2605,7 @@ static PyMethodDef sys_methods[] = {
25902605
SYS__GETFRAMEMODULENAME_METHODDEF
25912606
SYS_GETWINDOWSVERSION_METHODDEF
25922607
SYS__ENABLELEGACYWINDOWSFSENCODING_METHODDEF
2608+
SYS__IS_IMMORTAL_METHODDEF
25932609
SYS_INTERN_METHODDEF
25942610
SYS__IS_INTERNED_METHODDEF
25952611
SYS_IS_FINALIZING_METHODDEF

0 commit comments

Comments
 (0)