summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2003-02-15 03:01:11 (GMT)
committerTim Peters <tim.peters@gmail.com>2003-02-15 03:01:11 (GMT)
commit080c88b9126c13d14d2383bee345a41529f14130 (patch)
treed129410fc4d235b4563257d5c12c43c69c1b5cbb /Objects
parentd2c684f79fc1361442b7849d5a2d05b04988616d (diff)
downloadcpython-080c88b9126c13d14d2383bee345a41529f14130.zip
cpython-080c88b9126c13d14d2383bee345a41529f14130.tar.gz
cpython-080c88b9126c13d14d2383bee345a41529f14130.tar.bz2
cPickle.c, load_build(): Taught cPickle how to pick apart
the optional proto 2 slot state. pickle.py, load_build(): CAUTION: Noted that cPickle's load_build and pickle's load_build really don't do the same things with the state, and didn't before this patch either. cPickle never tries to do .update(), and has no backoff if instance.__dict__ can't be retrieved. There are no tests that can tell the difference, and part of what cPickle's load_build() did looked accidental to me, so I don't know what the true intent is here. pickletester.py, test_pickle.py: Got rid of the hack for exempting cPickle from running some of the proto 2 tests. dictobject.c, PyDict_Next(): documented intended use.
Diffstat (limited to 'Objects')
-rw-r--r--Objects/dictobject.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index de7a18e..9ae7185 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -642,7 +642,17 @@ PyDict_Clear(PyObject *op)
PyMem_DEL(table);
}
-/* CAUTION: In general, it isn't safe to use PyDict_Next in a loop that
+/*
+ * Iterate over a dict. Use like so:
+ *
+ * int i;
+ * PyObject *key, *value;
+ * i = 0; # important! i should not otherwise be changed by you
+ * while (PyDict_Next(yourdict, &i, &key, &value) {
+ * Refer to borrowed references in key and value.
+ * }
+ *
+ * CAUTION: In general, it isn't safe to use PyDict_Next in a loop that
* mutates the dict. One exception: it is safe if the loop merely changes
* the values associated with the keys (but doesn't insert new keys or
* delete keys), via PyDict_SetItem().