Skip to content

Commit 1cdc798

Browse files
committed
Update
1 parent e725c7f commit 1cdc798

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

Lib/test/test_sys.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -787,7 +787,7 @@ def __hash__(self):
787787

788788
@support.cpython_only
789789
def test_get_object_tags(self):
790-
keys = ("immortal", "interned")
790+
keys = ("immortal", "interned", "deferred_refcount")
791791
s = "foobar"
792792
tags = sys.get_object_tags(s)
793793
self.assertEqual(len(tags), len(keys))
@@ -796,7 +796,7 @@ def test_get_object_tags(self):
796796

797797
@support.cpython_only
798798
def test_set_object_tags(self):
799-
keys = ("immortal", "interned")
799+
keys = ("immortal", "interned", "deferred_refcount")
800800
s = "should never interned before" + str(random.randrange(0, 10**9))
801801
origin_tags = sys.get_object_tags(s)
802802
for k in keys:

Python/sysmodule.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Data members:
1818
#include "pycore_audit.h" // _Py_AuditHookEntry
1919
#include "pycore_call.h" // _PyObject_CallNoArgs()
2020
#include "pycore_ceval.h" // _PyEval_SetAsyncGenFinalizer()
21+
#include "pycore_object_deferred.h" // _PyObject_HasDeferredRefcount
2122
#include "pycore_frame.h" // _PyInterpreterFrame
2223
#include "pycore_import.h" // _PyImport_SetDLOpenFlags()
2324
#include "pycore_initconfig.h" // _PyStatus_EXCEPTION()
@@ -1095,6 +1096,19 @@ sys_get_object_tags(PyObject *module, PyObject *op)
10951096
return NULL;
10961097
}
10971098
}
1099+
1100+
if (_PyObject_HasDeferredRefcount(op)) {
1101+
if (PyDict_SetItemString(dict, "deferred_refcount", Py_True) < 0) {
1102+
Py_DECREF(dict);
1103+
return NULL;
1104+
}
1105+
}
1106+
else {
1107+
if (PyDict_SetItemString(dict, "deferred_refcount", Py_False) < 0) {
1108+
Py_DECREF(dict);
1109+
return NULL;
1110+
}
1111+
}
10981112
return dict;
10991113
}
11001114

@@ -1121,6 +1135,9 @@ sys_set_object_tag_impl(PyObject *module, PyObject *object, const char *tag,
11211135
else if (strcmp(tag, "interned") == 0) {
11221136
_PyUnicode_InternMortal(_PyInterpreterState_GET(), &object);
11231137
}
1138+
else if(strcmp(tag, "deferred_refcount") == 0) {
1139+
PyUnstable_Object_EnableDeferredRefcount(object);
1140+
}
11241141
Py_RETURN_NONE;
11251142
}
11261143

0 commit comments

Comments
 (0)