summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
Diffstat (limited to 'Objects')
-rw-r--r--Objects/call.c1
-rw-r--r--Objects/dictobject.c21
-rw-r--r--Objects/funcobject.c6
-rw-r--r--Objects/typeobject.c1
4 files changed, 11 insertions, 18 deletions
diff --git a/Objects/call.c b/Objects/call.c
index c4d31d0..bd027e4 100644
--- a/Objects/call.c
+++ b/Objects/call.c
@@ -1,6 +1,7 @@
#include "Python.h"
#include "pycore_call.h" // _PyObject_CallNoArgsTstate()
#include "pycore_ceval.h" // _Py_EnterRecursiveCallTstate()
+#include "pycore_dict.h" // _PyDict_FromItems()
#include "pycore_object.h" // _PyCFunctionWithKeywords_TrampolineCall()
#include "pycore_pyerrors.h" // _PyErr_Occurred()
#include "pycore_pystate.h" // _PyThreadState_GET()
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 51903ab..c58d07b 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -236,11 +236,6 @@ static int dictresize(PyDictObject *mp, uint8_t log_newsize, int unicode);
static PyObject* dict_iter(PyDictObject *dict);
-/*Global counter used to set ma_version_tag field of dictionary.
- * It is incremented each time that a dictionary is created and each
- * time that a dictionary is modified. */
-uint64_t _pydict_global_version = 0;
-
#include "clinic/dictobject.c.h"
@@ -5658,17 +5653,15 @@ _PyDictKeys_DecRef(PyDictKeysObject *keys)
dictkeys_decref(keys);
}
-static uint32_t next_dict_keys_version = 2;
-
uint32_t _PyDictKeys_GetVersionForCurrentState(PyDictKeysObject *dictkeys)
{
if (dictkeys->dk_version != 0) {
return dictkeys->dk_version;
}
- if (next_dict_keys_version == 0) {
+ if (_PyRuntime.dict_state.next_keys_version == 0) {
return 0;
}
- uint32_t v = next_dict_keys_version++;
+ uint32_t v = _PyRuntime.dict_state.next_keys_version++;
dictkeys->dk_version = v;
return v;
}
@@ -5680,7 +5673,7 @@ validate_watcher_id(PyInterpreterState *interp, int watcher_id)
PyErr_Format(PyExc_ValueError, "Invalid dict watcher ID %d", watcher_id);
return -1;
}
- if (!interp->dict_watchers[watcher_id]) {
+ if (!interp->dict_state.watchers[watcher_id]) {
PyErr_Format(PyExc_ValueError, "No dict watcher set for ID %d", watcher_id);
return -1;
}
@@ -5723,8 +5716,8 @@ PyDict_AddWatcher(PyDict_WatchCallback callback)
PyInterpreterState *interp = _PyInterpreterState_GET();
for (int i = 0; i < DICT_MAX_WATCHERS; i++) {
- if (!interp->dict_watchers[i]) {
- interp->dict_watchers[i] = callback;
+ if (!interp->dict_state.watchers[i]) {
+ interp->dict_state.watchers[i] = callback;
return i;
}
}
@@ -5740,7 +5733,7 @@ PyDict_ClearWatcher(int watcher_id)
if (validate_watcher_id(interp, watcher_id)) {
return -1;
}
- interp->dict_watchers[watcher_id] = NULL;
+ interp->dict_state.watchers[watcher_id] = NULL;
return 0;
}
@@ -5754,7 +5747,7 @@ _PyDict_SendEvent(int watcher_bits,
PyInterpreterState *interp = _PyInterpreterState_GET();
for (int i = 0; i < DICT_MAX_WATCHERS; i++) {
if (watcher_bits & 1) {
- PyDict_WatchCallback cb = interp->dict_watchers[i];
+ PyDict_WatchCallback cb = interp->dict_state.watchers[i];
if (cb && (cb(event, (PyObject*)mp, key, value) < 0)) {
// some dict modification paths (e.g. PyDict_Clear) can't raise, so we
// can't propagate exceptions from dict watchers.
diff --git a/Objects/funcobject.c b/Objects/funcobject.c
index d60e4eb..cab8000 100644
--- a/Objects/funcobject.c
+++ b/Objects/funcobject.c
@@ -7,8 +7,6 @@
#include "pycore_pyerrors.h" // _PyErr_Occurred()
#include "structmember.h" // PyMemberDef
-static uint32_t next_func_version = 1;
-
PyFunctionObject *
_PyFunction_FromConstructor(PyFrameConstructor *constr)
{
@@ -128,10 +126,10 @@ uint32_t _PyFunction_GetVersionForCurrentState(PyFunctionObject *func)
if (func->vectorcall != _PyFunction_Vectorcall) {
return 0;
}
- if (next_func_version == 0) {
+ if (_PyRuntime.func_state.next_version == 0) {
return 0;
}
- uint32_t v = next_func_version++;
+ uint32_t v = _PyRuntime.func_state.next_version++;
func->func_version = v;
return v;
}
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 1e58d32..9d868d5 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -4,6 +4,7 @@
#include "pycore_call.h"
#include "pycore_code.h" // CO_FAST_FREE
#include "pycore_compile.h" // _Py_Mangle()
+#include "pycore_dict.h" // _PyDict_KeysSize()
#include "pycore_initconfig.h" // _PyStatus_OK()
#include "pycore_moduleobject.h" // _PyModule_GetDef()
#include "pycore_object.h" // _PyType_HasFeature()