Merged revisions 83951 via svnmerge from
[python/dscho.git] / Objects / dictobject.c
blob8d0e6a4a73e2591f49ee9982b24b266d4d7d41f9
2 /* Dictionary object implementation using a hash table */
4 /* The distribution includes a separate file, Objects/dictnotes.txt,
5 describing explorations into dictionary design and optimization.
6 It covers typical dictionary use patterns, the parameters for
7 tuning dictionaries, and several ideas for possible optimizations.
8 */
10 #include "Python.h"
11 #include "stringlib/eq.h"
14 /* Set a key error with the specified argument, wrapping it in a
15 * tuple automatically so that tuple keys are not unpacked as the
16 * exception arguments. */
17 static void
18 set_key_error(PyObject *arg)
20 PyObject *tup;
21 tup = PyTuple_Pack(1, arg);
22 if (!tup)
23 return; /* caller will expect error to be set anyway */
24 PyErr_SetObject(PyExc_KeyError, tup);
25 Py_DECREF(tup);
28 /* Define this out if you don't want conversion statistics on exit. */
29 #undef SHOW_CONVERSION_COUNTS
31 /* See large comment block below. This must be >= 1. */
32 #define PERTURB_SHIFT 5
35 Major subtleties ahead: Most hash schemes depend on having a "good" hash
36 function, in the sense of simulating randomness. Python doesn't: its most
37 important hash functions (for strings and ints) are very regular in common
38 cases:
40 >>> map(hash, (0, 1, 2, 3))
41 [0, 1, 2, 3]
42 >>> map(hash, ("namea", "nameb", "namec", "named"))
43 [-1658398457, -1658398460, -1658398459, -1658398462]
44 >>>
46 This isn't necessarily bad! To the contrary, in a table of size 2**i, taking
47 the low-order i bits as the initial table index is extremely fast, and there
48 are no collisions at all for dicts indexed by a contiguous range of ints.
49 The same is approximately true when keys are "consecutive" strings. So this
50 gives better-than-random behavior in common cases, and that's very desirable.
52 OTOH, when collisions occur, the tendency to fill contiguous slices of the
53 hash table makes a good collision resolution strategy crucial. Taking only
54 the last i bits of the hash code is also vulnerable: for example, consider
55 the list [i << 16 for i in range(20000)] as a set of keys. Since ints are
56 their own hash codes, and this fits in a dict of size 2**15, the last 15 bits
57 of every hash code are all 0: they *all* map to the same table index.
59 But catering to unusual cases should not slow the usual ones, so we just take
60 the last i bits anyway. It's up to collision resolution to do the rest. If
61 we *usually* find the key we're looking for on the first try (and, it turns
62 out, we usually do -- the table load factor is kept under 2/3, so the odds
63 are solidly in our favor), then it makes best sense to keep the initial index
64 computation dirt cheap.
66 The first half of collision resolution is to visit table indices via this
67 recurrence:
69 j = ((5*j) + 1) mod 2**i
71 For any initial j in range(2**i), repeating that 2**i times generates each
72 int in range(2**i) exactly once (see any text on random-number generation for
73 proof). By itself, this doesn't help much: like linear probing (setting
74 j += 1, or j -= 1, on each loop trip), it scans the table entries in a fixed
75 order. This would be bad, except that's not the only thing we do, and it's
76 actually *good* in the common cases where hash keys are consecutive. In an
77 example that's really too small to make this entirely clear, for a table of
78 size 2**3 the order of indices is:
80 0 -> 1 -> 6 -> 7 -> 4 -> 5 -> 2 -> 3 -> 0 [and here it's repeating]
82 If two things come in at index 5, the first place we look after is index 2,
83 not 6, so if another comes in at index 6 the collision at 5 didn't hurt it.
84 Linear probing is deadly in this case because there the fixed probe order
85 is the *same* as the order consecutive keys are likely to arrive. But it's
86 extremely unlikely hash codes will follow a 5*j+1 recurrence by accident,
87 and certain that consecutive hash codes do not.
89 The other half of the strategy is to get the other bits of the hash code
90 into play. This is done by initializing a (unsigned) vrbl "perturb" to the
91 full hash code, and changing the recurrence to:
93 j = (5*j) + 1 + perturb;
94 perturb >>= PERTURB_SHIFT;
95 use j % 2**i as the next table index;
97 Now the probe sequence depends (eventually) on every bit in the hash code,
98 and the pseudo-scrambling property of recurring on 5*j+1 is more valuable,
99 because it quickly magnifies small differences in the bits that didn't affect
100 the initial index. Note that because perturb is unsigned, if the recurrence
101 is executed often enough perturb eventually becomes and remains 0. At that
102 point (very rarely reached) the recurrence is on (just) 5*j+1 again, and
103 that's certain to find an empty slot eventually (since it generates every int
104 in range(2**i), and we make sure there's always at least one empty slot).
106 Selecting a good value for PERTURB_SHIFT is a balancing act. You want it
107 small so that the high bits of the hash code continue to affect the probe
108 sequence across iterations; but you want it large so that in really bad cases
109 the high-order hash bits have an effect on early iterations. 5 was "the
110 best" in minimizing total collisions across experiments Tim Peters ran (on
111 both normal and pathological cases), but 4 and 6 weren't significantly worse.
113 Historical: Reimer Behrends contributed the idea of using a polynomial-based
114 approach, using repeated multiplication by x in GF(2**n) where an irreducible
115 polynomial for each table size was chosen such that x was a primitive root.
116 Christian Tismer later extended that to use division by x instead, as an
117 efficient way to get the high bits of the hash code into play. This scheme
118 also gave excellent collision statistics, but was more expensive: two
119 if-tests were required inside the loop; computing "the next" index took about
120 the same number of operations but without as much potential parallelism
121 (e.g., computing 5*j can go on at the same time as computing 1+perturb in the
122 above, and then shifting perturb can be done while the table index is being
123 masked); and the PyDictObject struct required a member to hold the table's
124 polynomial. In Tim's experiments the current scheme ran faster, produced
125 equally good collision statistics, needed less code & used less memory.
127 Theoretical Python 2.5 headache: hash codes are only C "long", but
128 sizeof(Py_ssize_t) > sizeof(long) may be possible. In that case, and if a
129 dict is genuinely huge, then only the slots directly reachable via indexing
130 by a C long can be the first slot in a probe sequence. The probe sequence
131 will still eventually reach every slot in the table, but the collision rate
132 on initial probes may be much higher than this scheme was designed for.
133 Getting a hash code as fat as Py_ssize_t is the only real cure. But in
134 practice, this probably won't make a lick of difference for many years (at
135 which point everyone will have terabytes of RAM on 64-bit boxes).
138 /* Object used as dummy key to fill deleted entries */
139 static PyObject *dummy = NULL; /* Initialized by first call to newPyDictObject() */
141 #ifdef Py_REF_DEBUG
142 PyObject *
143 _PyDict_Dummy(void)
145 return dummy;
147 #endif
149 /* forward declarations */
150 static PyDictEntry *
151 lookdict_unicode(PyDictObject *mp, PyObject *key, long hash);
153 #ifdef SHOW_CONVERSION_COUNTS
154 static long created = 0L;
155 static long converted = 0L;
157 static void
158 show_counts(void)
160 fprintf(stderr, "created %ld string dicts\n", created);
161 fprintf(stderr, "converted %ld to normal dicts\n", converted);
162 fprintf(stderr, "%.2f%% conversion rate\n", (100.0*converted)/created);
164 #endif
166 /* Debug statistic to compare allocations with reuse through the free list */
167 #undef SHOW_ALLOC_COUNT
168 #ifdef SHOW_ALLOC_COUNT
169 static size_t count_alloc = 0;
170 static size_t count_reuse = 0;
172 static void
173 show_alloc(void)
175 fprintf(stderr, "Dict allocations: %" PY_FORMAT_SIZE_T "d\n",
176 count_alloc);
177 fprintf(stderr, "Dict reuse through freelist: %" PY_FORMAT_SIZE_T
178 "d\n", count_reuse);
179 fprintf(stderr, "%.2f%% reuse rate\n\n",
180 (100.0*count_reuse/(count_alloc+count_reuse)));
182 #endif
184 /* Debug statistic to count GC tracking of dicts */
185 #ifdef SHOW_TRACK_COUNT
186 static Py_ssize_t count_untracked = 0;
187 static Py_ssize_t count_tracked = 0;
189 static void
190 show_track(void)
192 fprintf(stderr, "Dicts created: %" PY_FORMAT_SIZE_T "d\n",
193 count_tracked + count_untracked);
194 fprintf(stderr, "Dicts tracked by the GC: %" PY_FORMAT_SIZE_T
195 "d\n", count_tracked);
196 fprintf(stderr, "%.2f%% dict tracking rate\n\n",
197 (100.0*count_tracked/(count_untracked+count_tracked)));
199 #endif
202 /* Initialization macros.
203 There are two ways to create a dict: PyDict_New() is the main C API
204 function, and the tp_new slot maps to dict_new(). In the latter case we
205 can save a little time over what PyDict_New does because it's guaranteed
206 that the PyDictObject struct is already zeroed out.
207 Everyone except dict_new() should use EMPTY_TO_MINSIZE (unless they have
208 an excellent reason not to).
211 #define INIT_NONZERO_DICT_SLOTS(mp) do { \
212 (mp)->ma_table = (mp)->ma_smalltable; \
213 (mp)->ma_mask = PyDict_MINSIZE - 1; \
214 } while(0)
216 #define EMPTY_TO_MINSIZE(mp) do { \
217 memset((mp)->ma_smalltable, 0, sizeof((mp)->ma_smalltable)); \
218 (mp)->ma_used = (mp)->ma_fill = 0; \
219 INIT_NONZERO_DICT_SLOTS(mp); \
220 } while(0)
222 /* Dictionary reuse scheme to save calls to malloc, free, and memset */
223 #ifndef PyDict_MAXFREELIST
224 #define PyDict_MAXFREELIST 80
225 #endif
226 static PyDictObject *free_list[PyDict_MAXFREELIST];
227 static int numfree = 0;
229 void
230 PyDict_Fini(void)
232 PyDictObject *op;
234 while (numfree) {
235 op = free_list[--numfree];
236 assert(PyDict_CheckExact(op));
237 PyObject_GC_Del(op);
241 PyObject *
242 PyDict_New(void)
244 register PyDictObject *mp;
245 if (dummy == NULL) { /* Auto-initialize dummy */
246 dummy = PyUnicode_FromString("<dummy key>");
247 if (dummy == NULL)
248 return NULL;
249 #ifdef SHOW_CONVERSION_COUNTS
250 Py_AtExit(show_counts);
251 #endif
252 #ifdef SHOW_ALLOC_COUNT
253 Py_AtExit(show_alloc);
254 #endif
255 #ifdef SHOW_TRACK_COUNT
256 Py_AtExit(show_track);
257 #endif
259 if (numfree) {
260 mp = free_list[--numfree];
261 assert (mp != NULL);
262 assert (Py_TYPE(mp) == &PyDict_Type);
263 _Py_NewReference((PyObject *)mp);
264 if (mp->ma_fill) {
265 EMPTY_TO_MINSIZE(mp);
266 } else {
267 /* At least set ma_table and ma_mask; these are wrong
268 if an empty but presized dict is added to freelist */
269 INIT_NONZERO_DICT_SLOTS(mp);
271 assert (mp->ma_used == 0);
272 assert (mp->ma_table == mp->ma_smalltable);
273 assert (mp->ma_mask == PyDict_MINSIZE - 1);
274 #ifdef SHOW_ALLOC_COUNT
275 count_reuse++;
276 #endif
277 } else {
278 mp = PyObject_GC_New(PyDictObject, &PyDict_Type);
279 if (mp == NULL)
280 return NULL;
281 EMPTY_TO_MINSIZE(mp);
282 #ifdef SHOW_ALLOC_COUNT
283 count_alloc++;
284 #endif
286 mp->ma_lookup = lookdict_unicode;
287 #ifdef SHOW_TRACK_COUNT
288 count_untracked++;
289 #endif
290 #ifdef SHOW_CONVERSION_COUNTS
291 ++created;
292 #endif
293 return (PyObject *)mp;
297 The basic lookup function used by all operations.
298 This is based on Algorithm D from Knuth Vol. 3, Sec. 6.4.
299 Open addressing is preferred over chaining since the link overhead for
300 chaining would be substantial (100% with typical malloc overhead).
302 The initial probe index is computed as hash mod the table size. Subsequent
303 probe indices are computed as explained earlier.
305 All arithmetic on hash should ignore overflow.
307 The details in this version are due to Tim Peters, building on many past
308 contributions by Reimer Behrends, Jyrki Alakuijala, Vladimir Marangozov and
309 Christian Tismer.
311 lookdict() is general-purpose, and may return NULL if (and only if) a
312 comparison raises an exception (this was new in Python 2.5).
313 lookdict_unicode() below is specialized to string keys, comparison of which can
314 never raise an exception; that function can never return NULL. For both, when
315 the key isn't found a PyDictEntry* is returned for which the me_value field is
316 NULL; this is the slot in the dict at which the key would have been found, and
317 the caller can (if it wishes) add the <key, value> pair to the returned
318 PyDictEntry*.
320 static PyDictEntry *
321 lookdict(PyDictObject *mp, PyObject *key, register long hash)
323 register size_t i;
324 register size_t perturb;
325 register PyDictEntry *freeslot;
326 register size_t mask = (size_t)mp->ma_mask;
327 PyDictEntry *ep0 = mp->ma_table;
328 register PyDictEntry *ep;
329 register int cmp;
330 PyObject *startkey;
332 i = (size_t)hash & mask;
333 ep = &ep0[i];
334 if (ep->me_key == NULL || ep->me_key == key)
335 return ep;
337 if (ep->me_key == dummy)
338 freeslot = ep;
339 else {
340 if (ep->me_hash == hash) {
341 startkey = ep->me_key;
342 Py_INCREF(startkey);
343 cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
344 Py_DECREF(startkey);
345 if (cmp < 0)
346 return NULL;
347 if (ep0 == mp->ma_table && ep->me_key == startkey) {
348 if (cmp > 0)
349 return ep;
351 else {
352 /* The compare did major nasty stuff to the
353 * dict: start over.
354 * XXX A clever adversary could prevent this
355 * XXX from terminating.
357 return lookdict(mp, key, hash);
360 freeslot = NULL;
363 /* In the loop, me_key == dummy is by far (factor of 100s) the
364 least likely outcome, so test for that last. */
365 for (perturb = hash; ; perturb >>= PERTURB_SHIFT) {
366 i = (i << 2) + i + perturb + 1;
367 ep = &ep0[i & mask];
368 if (ep->me_key == NULL)
369 return freeslot == NULL ? ep : freeslot;
370 if (ep->me_key == key)
371 return ep;
372 if (ep->me_hash == hash && ep->me_key != dummy) {
373 startkey = ep->me_key;
374 Py_INCREF(startkey);
375 cmp = PyObject_RichCompareBool(startkey, key, Py_EQ);
376 Py_DECREF(startkey);
377 if (cmp < 0)
378 return NULL;
379 if (ep0 == mp->ma_table && ep->me_key == startkey) {
380 if (cmp > 0)
381 return ep;
383 else {
384 /* The compare did major nasty stuff to the
385 * dict: start over.
386 * XXX A clever adversary could prevent this
387 * XXX from terminating.
389 return lookdict(mp, key, hash);
392 else if (ep->me_key == dummy && freeslot == NULL)
393 freeslot = ep;
395 assert(0); /* NOT REACHED */
396 return 0;
400 * Hacked up version of lookdict which can assume keys are always
401 * unicodes; this assumption allows testing for errors during
402 * PyObject_RichCompareBool() to be dropped; unicode-unicode
403 * comparisons never raise exceptions. This also means we don't need
404 * to go through PyObject_RichCompareBool(); we can always use
405 * unicode_eq() directly.
407 * This is valuable because dicts with only unicode keys are very common.
409 static PyDictEntry *
410 lookdict_unicode(PyDictObject *mp, PyObject *key, register long hash)
412 register size_t i;
413 register size_t perturb;
414 register PyDictEntry *freeslot;
415 register size_t mask = (size_t)mp->ma_mask;
416 PyDictEntry *ep0 = mp->ma_table;
417 register PyDictEntry *ep;
419 /* Make sure this function doesn't have to handle non-unicode keys,
420 including subclasses of str; e.g., one reason to subclass
421 unicodes is to override __eq__, and for speed we don't cater to
422 that here. */
423 if (!PyUnicode_CheckExact(key)) {
424 #ifdef SHOW_CONVERSION_COUNTS
425 ++converted;
426 #endif
427 mp->ma_lookup = lookdict;
428 return lookdict(mp, key, hash);
430 i = hash & mask;
431 ep = &ep0[i];
432 if (ep->me_key == NULL || ep->me_key == key)
433 return ep;
434 if (ep->me_key == dummy)
435 freeslot = ep;
436 else {
437 if (ep->me_hash == hash && unicode_eq(ep->me_key, key))
438 return ep;
439 freeslot = NULL;
442 /* In the loop, me_key == dummy is by far (factor of 100s) the
443 least likely outcome, so test for that last. */
444 for (perturb = hash; ; perturb >>= PERTURB_SHIFT) {
445 i = (i << 2) + i + perturb + 1;
446 ep = &ep0[i & mask];
447 if (ep->me_key == NULL)
448 return freeslot == NULL ? ep : freeslot;
449 if (ep->me_key == key
450 || (ep->me_hash == hash
451 && ep->me_key != dummy
452 && unicode_eq(ep->me_key, key)))
453 return ep;
454 if (ep->me_key == dummy && freeslot == NULL)
455 freeslot = ep;
457 assert(0); /* NOT REACHED */
458 return 0;
461 #ifdef SHOW_TRACK_COUNT
462 #define INCREASE_TRACK_COUNT \
463 (count_tracked++, count_untracked--);
464 #define DECREASE_TRACK_COUNT \
465 (count_tracked--, count_untracked++);
466 #else
467 #define INCREASE_TRACK_COUNT
468 #define DECREASE_TRACK_COUNT
469 #endif
471 #define MAINTAIN_TRACKING(mp, key, value) \
472 do { \
473 if (!_PyObject_GC_IS_TRACKED(mp)) { \
474 if (_PyObject_GC_MAY_BE_TRACKED(key) || \
475 _PyObject_GC_MAY_BE_TRACKED(value)) { \
476 _PyObject_GC_TRACK(mp); \
477 INCREASE_TRACK_COUNT \
480 } while(0)
482 void
483 _PyDict_MaybeUntrack(PyObject *op)
485 PyDictObject *mp;
486 PyObject *value;
487 Py_ssize_t mask, i;
488 PyDictEntry *ep;
490 if (!PyDict_CheckExact(op) || !_PyObject_GC_IS_TRACKED(op))
491 return;
493 mp = (PyDictObject *) op;
494 ep = mp->ma_table;
495 mask = mp->ma_mask;
496 for (i = 0; i <= mask; i++) {
497 if ((value = ep[i].me_value) == NULL)
498 continue;
499 if (_PyObject_GC_MAY_BE_TRACKED(value) ||
500 _PyObject_GC_MAY_BE_TRACKED(ep[i].me_key))
501 return;
503 DECREASE_TRACK_COUNT
504 _PyObject_GC_UNTRACK(op);
509 Internal routine to insert a new item into the table.
510 Used both by the internal resize routine and by the public insert routine.
511 Eats a reference to key and one to value.
512 Returns -1 if an error occurred, or 0 on success.
514 static int
515 insertdict(register PyDictObject *mp, PyObject *key, long hash, PyObject *value)
517 PyObject *old_value;
518 register PyDictEntry *ep;
519 typedef PyDictEntry *(*lookupfunc)(PyDictObject *, PyObject *, long);
521 assert(mp->ma_lookup != NULL);
522 ep = mp->ma_lookup(mp, key, hash);
523 if (ep == NULL) {
524 Py_DECREF(key);
525 Py_DECREF(value);
526 return -1;
528 MAINTAIN_TRACKING(mp, key, value);
529 if (ep->me_value != NULL) {
530 old_value = ep->me_value;
531 ep->me_value = value;
532 Py_DECREF(old_value); /* which **CAN** re-enter */
533 Py_DECREF(key);
535 else {
536 if (ep->me_key == NULL)
537 mp->ma_fill++;
538 else {
539 assert(ep->me_key == dummy);
540 Py_DECREF(dummy);
542 ep->me_key = key;
543 ep->me_hash = (Py_ssize_t)hash;
544 ep->me_value = value;
545 mp->ma_used++;
547 return 0;
551 Internal routine used by dictresize() to insert an item which is
552 known to be absent from the dict. This routine also assumes that
553 the dict contains no deleted entries. Besides the performance benefit,
554 using insertdict() in dictresize() is dangerous (SF bug #1456209).
555 Note that no refcounts are changed by this routine; if needed, the caller
556 is responsible for incref'ing `key` and `value`.
558 static void
559 insertdict_clean(register PyDictObject *mp, PyObject *key, long hash,
560 PyObject *value)
562 register size_t i;
563 register size_t perturb;
564 register size_t mask = (size_t)mp->ma_mask;
565 PyDictEntry *ep0 = mp->ma_table;
566 register PyDictEntry *ep;
568 MAINTAIN_TRACKING(mp, key, value);
569 i = hash & mask;
570 ep = &ep0[i];
571 for (perturb = hash; ep->me_key != NULL; perturb >>= PERTURB_SHIFT) {
572 i = (i << 2) + i + perturb + 1;
573 ep = &ep0[i & mask];
575 assert(ep->me_value == NULL);
576 mp->ma_fill++;
577 ep->me_key = key;
578 ep->me_hash = (Py_ssize_t)hash;
579 ep->me_value = value;
580 mp->ma_used++;
584 Restructure the table by allocating a new table and reinserting all
585 items again. When entries have been deleted, the new table may
586 actually be smaller than the old one.
588 static int
589 dictresize(PyDictObject *mp, Py_ssize_t minused)
591 Py_ssize_t newsize;
592 PyDictEntry *oldtable, *newtable, *ep;
593 Py_ssize_t i;
594 int is_oldtable_malloced;
595 PyDictEntry small_copy[PyDict_MINSIZE];
597 assert(minused >= 0);
599 /* Find the smallest table size > minused. */
600 for (newsize = PyDict_MINSIZE;
601 newsize <= minused && newsize > 0;
602 newsize <<= 1)
604 if (newsize <= 0) {
605 PyErr_NoMemory();
606 return -1;
609 /* Get space for a new table. */
610 oldtable = mp->ma_table;
611 assert(oldtable != NULL);
612 is_oldtable_malloced = oldtable != mp->ma_smalltable;
614 if (newsize == PyDict_MINSIZE) {
615 /* A large table is shrinking, or we can't get any smaller. */
616 newtable = mp->ma_smalltable;
617 if (newtable == oldtable) {
618 if (mp->ma_fill == mp->ma_used) {
619 /* No dummies, so no point doing anything. */
620 return 0;
622 /* We're not going to resize it, but rebuild the
623 table anyway to purge old dummy entries.
624 Subtle: This is *necessary* if fill==size,
625 as lookdict needs at least one virgin slot to
626 terminate failing searches. If fill < size, it's
627 merely desirable, as dummies slow searches. */
628 assert(mp->ma_fill > mp->ma_used);
629 memcpy(small_copy, oldtable, sizeof(small_copy));
630 oldtable = small_copy;
633 else {
634 newtable = PyMem_NEW(PyDictEntry, newsize);
635 if (newtable == NULL) {
636 PyErr_NoMemory();
637 return -1;
641 /* Make the dict empty, using the new table. */
642 assert(newtable != oldtable);
643 mp->ma_table = newtable;
644 mp->ma_mask = newsize - 1;
645 memset(newtable, 0, sizeof(PyDictEntry) * newsize);
646 mp->ma_used = 0;
647 i = mp->ma_fill;
648 mp->ma_fill = 0;
650 /* Copy the data over; this is refcount-neutral for active entries;
651 dummy entries aren't copied over, of course */
652 for (ep = oldtable; i > 0; ep++) {
653 if (ep->me_value != NULL) { /* active entry */
654 --i;
655 insertdict_clean(mp, ep->me_key, (long)ep->me_hash,
656 ep->me_value);
658 else if (ep->me_key != NULL) { /* dummy entry */
659 --i;
660 assert(ep->me_key == dummy);
661 Py_DECREF(ep->me_key);
663 /* else key == value == NULL: nothing to do */
666 if (is_oldtable_malloced)
667 PyMem_DEL(oldtable);
668 return 0;
671 /* Create a new dictionary pre-sized to hold an estimated number of elements.
672 Underestimates are okay because the dictionary will resize as necessary.
673 Overestimates just mean the dictionary will be more sparse than usual.
676 PyObject *
677 _PyDict_NewPresized(Py_ssize_t minused)
679 PyObject *op = PyDict_New();
681 if (minused>5 && op != NULL && dictresize((PyDictObject *)op, minused) == -1) {
682 Py_DECREF(op);
683 return NULL;
685 return op;
688 /* Note that, for historical reasons, PyDict_GetItem() suppresses all errors
689 * that may occur (originally dicts supported only string keys, and exceptions
690 * weren't possible). So, while the original intent was that a NULL return
691 * meant the key wasn't present, in reality it can mean that, or that an error
692 * (suppressed) occurred while computing the key's hash, or that some error
693 * (suppressed) occurred when comparing keys in the dict's internal probe
694 * sequence. A nasty example of the latter is when a Python-coded comparison
695 * function hits a stack-depth error, which can cause this to return NULL
696 * even if the key is present.
698 PyObject *
699 PyDict_GetItem(PyObject *op, PyObject *key)
701 long hash;
702 PyDictObject *mp = (PyDictObject *)op;
703 PyDictEntry *ep;
704 PyThreadState *tstate;
705 if (!PyDict_Check(op))
706 return NULL;
707 if (!PyUnicode_CheckExact(key) ||
708 (hash = ((PyUnicodeObject *) key)->hash) == -1)
710 hash = PyObject_Hash(key);
711 if (hash == -1) {
712 PyErr_Clear();
713 return NULL;
717 /* We can arrive here with a NULL tstate during initialization: try
718 running "python -Wi" for an example related to string interning.
719 Let's just hope that no exception occurs then... This must be
720 _PyThreadState_Current and not PyThreadState_GET() because in debug
721 mode, the latter complains if tstate is NULL. */
722 tstate = _PyThreadState_Current;
723 if (tstate != NULL && tstate->curexc_type != NULL) {
724 /* preserve the existing exception */
725 PyObject *err_type, *err_value, *err_tb;
726 PyErr_Fetch(&err_type, &err_value, &err_tb);
727 ep = (mp->ma_lookup)(mp, key, hash);
728 /* ignore errors */
729 PyErr_Restore(err_type, err_value, err_tb);
730 if (ep == NULL)
731 return NULL;
733 else {
734 ep = (mp->ma_lookup)(mp, key, hash);
735 if (ep == NULL) {
736 PyErr_Clear();
737 return NULL;
740 return ep->me_value;
743 /* Variant of PyDict_GetItem() that doesn't suppress exceptions.
744 This returns NULL *with* an exception set if an exception occurred.
745 It returns NULL *without* an exception set if the key wasn't present.
747 PyObject *
748 PyDict_GetItemWithError(PyObject *op, PyObject *key)
750 long hash;
751 PyDictObject*mp = (PyDictObject *)op;
752 PyDictEntry *ep;
754 if (!PyDict_Check(op)) {
755 PyErr_BadInternalCall();
756 return NULL;
758 if (!PyUnicode_CheckExact(key) ||
759 (hash = ((PyUnicodeObject *) key)->hash) == -1)
761 hash = PyObject_Hash(key);
762 if (hash == -1) {
763 return NULL;
767 ep = (mp->ma_lookup)(mp, key, hash);
768 if (ep == NULL)
769 return NULL;
770 return ep->me_value;
773 /* CAUTION: PyDict_SetItem() must guarantee that it won't resize the
774 * dictionary if it's merely replacing the value for an existing key.
775 * This means that it's safe to loop over a dictionary with PyDict_Next()
776 * and occasionally replace a value -- but you can't insert new keys or
777 * remove them.
780 PyDict_SetItem(register PyObject *op, PyObject *key, PyObject *value)
782 register PyDictObject *mp;
783 register long hash;
784 register Py_ssize_t n_used;
786 if (!PyDict_Check(op)) {
787 PyErr_BadInternalCall();
788 return -1;
790 assert(key);
791 assert(value);
792 mp = (PyDictObject *)op;
793 if (!PyUnicode_CheckExact(key) ||
794 (hash = ((PyUnicodeObject *) key)->hash) == -1)
796 hash = PyObject_Hash(key);
797 if (hash == -1)
798 return -1;
800 assert(mp->ma_fill <= mp->ma_mask); /* at least one empty slot */
801 n_used = mp->ma_used;
802 Py_INCREF(value);
803 Py_INCREF(key);
804 if (insertdict(mp, key, hash, value) != 0)
805 return -1;
806 /* If we added a key, we can safely resize. Otherwise just return!
807 * If fill >= 2/3 size, adjust size. Normally, this doubles or
808 * quaduples the size, but it's also possible for the dict to shrink
809 * (if ma_fill is much larger than ma_used, meaning a lot of dict
810 * keys have been * deleted).
812 * Quadrupling the size improves average dictionary sparseness
813 * (reducing collisions) at the cost of some memory and iteration
814 * speed (which loops over every possible entry). It also halves
815 * the number of expensive resize operations in a growing dictionary.
817 * Very large dictionaries (over 50K items) use doubling instead.
818 * This may help applications with severe memory constraints.
820 if (!(mp->ma_used > n_used && mp->ma_fill*3 >= (mp->ma_mask+1)*2))
821 return 0;
822 return dictresize(mp, (mp->ma_used > 50000 ? 2 : 4) * mp->ma_used);
826 PyDict_DelItem(PyObject *op, PyObject *key)
828 register PyDictObject *mp;
829 register long hash;
830 register PyDictEntry *ep;
831 PyObject *old_value, *old_key;
833 if (!PyDict_Check(op)) {
834 PyErr_BadInternalCall();
835 return -1;
837 assert(key);
838 if (!PyUnicode_CheckExact(key) ||
839 (hash = ((PyUnicodeObject *) key)->hash) == -1) {
840 hash = PyObject_Hash(key);
841 if (hash == -1)
842 return -1;
844 mp = (PyDictObject *)op;
845 ep = (mp->ma_lookup)(mp, key, hash);
846 if (ep == NULL)
847 return -1;
848 if (ep->me_value == NULL) {
849 set_key_error(key);
850 return -1;
852 old_key = ep->me_key;
853 Py_INCREF(dummy);
854 ep->me_key = dummy;
855 old_value = ep->me_value;
856 ep->me_value = NULL;
857 mp->ma_used--;
858 Py_DECREF(old_value);
859 Py_DECREF(old_key);
860 return 0;
863 void
864 PyDict_Clear(PyObject *op)
866 PyDictObject *mp;
867 PyDictEntry *ep, *table;
868 int table_is_malloced;
869 Py_ssize_t fill;
870 PyDictEntry small_copy[PyDict_MINSIZE];
871 #ifdef Py_DEBUG
872 Py_ssize_t i, n;
873 #endif
875 if (!PyDict_Check(op))
876 return;
877 mp = (PyDictObject *)op;
878 #ifdef Py_DEBUG
879 n = mp->ma_mask + 1;
880 i = 0;
881 #endif
883 table = mp->ma_table;
884 assert(table != NULL);
885 table_is_malloced = table != mp->ma_smalltable;
887 /* This is delicate. During the process of clearing the dict,
888 * decrefs can cause the dict to mutate. To avoid fatal confusion
889 * (voice of experience), we have to make the dict empty before
890 * clearing the slots, and never refer to anything via mp->xxx while
891 * clearing.
893 fill = mp->ma_fill;
894 if (table_is_malloced)
895 EMPTY_TO_MINSIZE(mp);
897 else if (fill > 0) {
898 /* It's a small table with something that needs to be cleared.
899 * Afraid the only safe way is to copy the dict entries into
900 * another small table first.
902 memcpy(small_copy, table, sizeof(small_copy));
903 table = small_copy;
904 EMPTY_TO_MINSIZE(mp);
906 /* else it's a small table that's already empty */
908 /* Now we can finally clear things. If C had refcounts, we could
909 * assert that the refcount on table is 1 now, i.e. that this function
910 * has unique access to it, so decref side-effects can't alter it.
912 for (ep = table; fill > 0; ++ep) {
913 #ifdef Py_DEBUG
914 assert(i < n);
915 ++i;
916 #endif
917 if (ep->me_key) {
918 --fill;
919 Py_DECREF(ep->me_key);
920 Py_XDECREF(ep->me_value);
922 #ifdef Py_DEBUG
923 else
924 assert(ep->me_value == NULL);
925 #endif
928 if (table_is_malloced)
929 PyMem_DEL(table);
933 * Iterate over a dict. Use like so:
935 * Py_ssize_t i;
936 * PyObject *key, *value;
937 * i = 0; # important! i should not otherwise be changed by you
938 * while (PyDict_Next(yourdict, &i, &key, &value)) {
939 * Refer to borrowed references in key and value.
942 * CAUTION: In general, it isn't safe to use PyDict_Next in a loop that
943 * mutates the dict. One exception: it is safe if the loop merely changes
944 * the values associated with the keys (but doesn't insert new keys or
945 * delete keys), via PyDict_SetItem().
948 PyDict_Next(PyObject *op, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue)
950 register Py_ssize_t i;
951 register Py_ssize_t mask;
952 register PyDictEntry *ep;
954 if (!PyDict_Check(op))
955 return 0;
956 i = *ppos;
957 if (i < 0)
958 return 0;
959 ep = ((PyDictObject *)op)->ma_table;
960 mask = ((PyDictObject *)op)->ma_mask;
961 while (i <= mask && ep[i].me_value == NULL)
962 i++;
963 *ppos = i+1;
964 if (i > mask)
965 return 0;
966 if (pkey)
967 *pkey = ep[i].me_key;
968 if (pvalue)
969 *pvalue = ep[i].me_value;
970 return 1;
973 /* Internal version of PyDict_Next that returns a hash value in addition to the key and value.*/
975 _PyDict_Next(PyObject *op, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue, long *phash)
977 register Py_ssize_t i;
978 register Py_ssize_t mask;
979 register PyDictEntry *ep;
981 if (!PyDict_Check(op))
982 return 0;
983 i = *ppos;
984 if (i < 0)
985 return 0;
986 ep = ((PyDictObject *)op)->ma_table;
987 mask = ((PyDictObject *)op)->ma_mask;
988 while (i <= mask && ep[i].me_value == NULL)
989 i++;
990 *ppos = i+1;
991 if (i > mask)
992 return 0;
993 *phash = (long)(ep[i].me_hash);
994 if (pkey)
995 *pkey = ep[i].me_key;
996 if (pvalue)
997 *pvalue = ep[i].me_value;
998 return 1;
1001 /* Methods */
1003 static void
1004 dict_dealloc(register PyDictObject *mp)
1006 register PyDictEntry *ep;
1007 Py_ssize_t fill = mp->ma_fill;
1008 PyObject_GC_UnTrack(mp);
1009 Py_TRASHCAN_SAFE_BEGIN(mp)
1010 for (ep = mp->ma_table; fill > 0; ep++) {
1011 if (ep->me_key) {
1012 --fill;
1013 Py_DECREF(ep->me_key);
1014 Py_XDECREF(ep->me_value);
1017 if (mp->ma_table != mp->ma_smalltable)
1018 PyMem_DEL(mp->ma_table);
1019 if (numfree < PyDict_MAXFREELIST && Py_TYPE(mp) == &PyDict_Type)
1020 free_list[numfree++] = mp;
1021 else
1022 Py_TYPE(mp)->tp_free((PyObject *)mp);
1023 Py_TRASHCAN_SAFE_END(mp)
1026 static PyObject *
1027 dict_repr(PyDictObject *mp)
1029 Py_ssize_t i;
1030 PyObject *s, *temp, *colon = NULL;
1031 PyObject *pieces = NULL, *result = NULL;
1032 PyObject *key, *value;
1034 i = Py_ReprEnter((PyObject *)mp);
1035 if (i != 0) {
1036 return i > 0 ? PyUnicode_FromString("{...}") : NULL;
1039 if (mp->ma_used == 0) {
1040 result = PyUnicode_FromString("{}");
1041 goto Done;
1044 pieces = PyList_New(0);
1045 if (pieces == NULL)
1046 goto Done;
1048 colon = PyUnicode_FromString(": ");
1049 if (colon == NULL)
1050 goto Done;
1052 /* Do repr() on each key+value pair, and insert ": " between them.
1053 Note that repr may mutate the dict. */
1054 i = 0;
1055 while (PyDict_Next((PyObject *)mp, &i, &key, &value)) {
1056 int status;
1057 /* Prevent repr from deleting value during key format. */
1058 Py_INCREF(value);
1059 s = PyObject_Repr(key);
1060 PyUnicode_Append(&s, colon);
1061 PyUnicode_AppendAndDel(&s, PyObject_Repr(value));
1062 Py_DECREF(value);
1063 if (s == NULL)
1064 goto Done;
1065 status = PyList_Append(pieces, s);
1066 Py_DECREF(s); /* append created a new ref */
1067 if (status < 0)
1068 goto Done;
1071 /* Add "{}" decorations to the first and last items. */
1072 assert(PyList_GET_SIZE(pieces) > 0);
1073 s = PyUnicode_FromString("{");
1074 if (s == NULL)
1075 goto Done;
1076 temp = PyList_GET_ITEM(pieces, 0);
1077 PyUnicode_AppendAndDel(&s, temp);
1078 PyList_SET_ITEM(pieces, 0, s);
1079 if (s == NULL)
1080 goto Done;
1082 s = PyUnicode_FromString("}");
1083 if (s == NULL)
1084 goto Done;
1085 temp = PyList_GET_ITEM(pieces, PyList_GET_SIZE(pieces) - 1);
1086 PyUnicode_AppendAndDel(&temp, s);
1087 PyList_SET_ITEM(pieces, PyList_GET_SIZE(pieces) - 1, temp);
1088 if (temp == NULL)
1089 goto Done;
1091 /* Paste them all together with ", " between. */
1092 s = PyUnicode_FromString(", ");
1093 if (s == NULL)
1094 goto Done;
1095 result = PyUnicode_Join(s, pieces);
1096 Py_DECREF(s);
1098 Done:
1099 Py_XDECREF(pieces);
1100 Py_XDECREF(colon);
1101 Py_ReprLeave((PyObject *)mp);
1102 return result;
1105 static Py_ssize_t
1106 dict_length(PyDictObject *mp)
1108 return mp->ma_used;
1111 static PyObject *
1112 dict_subscript(PyDictObject *mp, register PyObject *key)
1114 PyObject *v;
1115 long hash;
1116 PyDictEntry *ep;
1117 assert(mp->ma_table != NULL);
1118 if (!PyUnicode_CheckExact(key) ||
1119 (hash = ((PyUnicodeObject *) key)->hash) == -1) {
1120 hash = PyObject_Hash(key);
1121 if (hash == -1)
1122 return NULL;
1124 ep = (mp->ma_lookup)(mp, key, hash);
1125 if (ep == NULL)
1126 return NULL;
1127 v = ep->me_value;
1128 if (v == NULL) {
1129 if (!PyDict_CheckExact(mp)) {
1130 /* Look up __missing__ method if we're a subclass. */
1131 PyObject *missing, *res;
1132 static PyObject *missing_str = NULL;
1133 missing = _PyObject_LookupSpecial((PyObject *)mp,
1134 "__missing__",
1135 &missing_str);
1136 if (missing != NULL) {
1137 res = PyObject_CallFunctionObjArgs(missing,
1138 key, NULL);
1139 Py_DECREF(missing);
1140 return res;
1142 else if (PyErr_Occurred())
1143 return NULL;
1145 set_key_error(key);
1146 return NULL;
1148 else
1149 Py_INCREF(v);
1150 return v;
1153 static int
1154 dict_ass_sub(PyDictObject *mp, PyObject *v, PyObject *w)
1156 if (w == NULL)
1157 return PyDict_DelItem((PyObject *)mp, v);
1158 else
1159 return PyDict_SetItem((PyObject *)mp, v, w);
1162 static PyMappingMethods dict_as_mapping = {
1163 (lenfunc)dict_length, /*mp_length*/
1164 (binaryfunc)dict_subscript, /*mp_subscript*/
1165 (objobjargproc)dict_ass_sub, /*mp_ass_subscript*/
1168 static PyObject *
1169 dict_keys(register PyDictObject *mp)
1171 register PyObject *v;
1172 register Py_ssize_t i, j;
1173 PyDictEntry *ep;
1174 Py_ssize_t mask, n;
1176 again:
1177 n = mp->ma_used;
1178 v = PyList_New(n);
1179 if (v == NULL)
1180 return NULL;
1181 if (n != mp->ma_used) {
1182 /* Durnit. The allocations caused the dict to resize.
1183 * Just start over, this shouldn't normally happen.
1185 Py_DECREF(v);
1186 goto again;
1188 ep = mp->ma_table;
1189 mask = mp->ma_mask;
1190 for (i = 0, j = 0; i <= mask; i++) {
1191 if (ep[i].me_value != NULL) {
1192 PyObject *key = ep[i].me_key;
1193 Py_INCREF(key);
1194 PyList_SET_ITEM(v, j, key);
1195 j++;
1198 assert(j == n);
1199 return v;
1202 static PyObject *
1203 dict_values(register PyDictObject *mp)
1205 register PyObject *v;
1206 register Py_ssize_t i, j;
1207 PyDictEntry *ep;
1208 Py_ssize_t mask, n;
1210 again:
1211 n = mp->ma_used;
1212 v = PyList_New(n);
1213 if (v == NULL)
1214 return NULL;
1215 if (n != mp->ma_used) {
1216 /* Durnit. The allocations caused the dict to resize.
1217 * Just start over, this shouldn't normally happen.
1219 Py_DECREF(v);
1220 goto again;
1222 ep = mp->ma_table;
1223 mask = mp->ma_mask;
1224 for (i = 0, j = 0; i <= mask; i++) {
1225 if (ep[i].me_value != NULL) {
1226 PyObject *value = ep[i].me_value;
1227 Py_INCREF(value);
1228 PyList_SET_ITEM(v, j, value);
1229 j++;
1232 assert(j == n);
1233 return v;
1236 static PyObject *
1237 dict_items(register PyDictObject *mp)
1239 register PyObject *v;
1240 register Py_ssize_t i, j, n;
1241 Py_ssize_t mask;
1242 PyObject *item, *key, *value;
1243 PyDictEntry *ep;
1245 /* Preallocate the list of tuples, to avoid allocations during
1246 * the loop over the items, which could trigger GC, which
1247 * could resize the dict. :-(
1249 again:
1250 n = mp->ma_used;
1251 v = PyList_New(n);
1252 if (v == NULL)
1253 return NULL;
1254 for (i = 0; i < n; i++) {
1255 item = PyTuple_New(2);
1256 if (item == NULL) {
1257 Py_DECREF(v);
1258 return NULL;
1260 PyList_SET_ITEM(v, i, item);
1262 if (n != mp->ma_used) {
1263 /* Durnit. The allocations caused the dict to resize.
1264 * Just start over, this shouldn't normally happen.
1266 Py_DECREF(v);
1267 goto again;
1269 /* Nothing we do below makes any function calls. */
1270 ep = mp->ma_table;
1271 mask = mp->ma_mask;
1272 for (i = 0, j = 0; i <= mask; i++) {
1273 if ((value=ep[i].me_value) != NULL) {
1274 key = ep[i].me_key;
1275 item = PyList_GET_ITEM(v, j);
1276 Py_INCREF(key);
1277 PyTuple_SET_ITEM(item, 0, key);
1278 Py_INCREF(value);
1279 PyTuple_SET_ITEM(item, 1, value);
1280 j++;
1283 assert(j == n);
1284 return v;
1287 static PyObject *
1288 dict_fromkeys(PyObject *cls, PyObject *args)
1290 PyObject *seq;
1291 PyObject *value = Py_None;
1292 PyObject *it; /* iter(seq) */
1293 PyObject *key;
1294 PyObject *d;
1295 int status;
1297 if (!PyArg_UnpackTuple(args, "fromkeys", 1, 2, &seq, &value))
1298 return NULL;
1300 d = PyObject_CallObject(cls, NULL);
1301 if (d == NULL)
1302 return NULL;
1304 if (PyDict_CheckExact(d) && PyDict_CheckExact(seq)) {
1305 PyDictObject *mp = (PyDictObject *)d;
1306 PyObject *oldvalue;
1307 Py_ssize_t pos = 0;
1308 PyObject *key;
1309 long hash;
1311 if (dictresize(mp, Py_SIZE(seq)))
1312 return NULL;
1314 while (_PyDict_Next(seq, &pos, &key, &oldvalue, &hash)) {
1315 Py_INCREF(key);
1316 Py_INCREF(value);
1317 if (insertdict(mp, key, hash, value))
1318 return NULL;
1320 return d;
1323 if (PyDict_CheckExact(d) && PyAnySet_CheckExact(seq)) {
1324 PyDictObject *mp = (PyDictObject *)d;
1325 Py_ssize_t pos = 0;
1326 PyObject *key;
1327 long hash;
1329 if (dictresize(mp, PySet_GET_SIZE(seq)))
1330 return NULL;
1332 while (_PySet_NextEntry(seq, &pos, &key, &hash)) {
1333 Py_INCREF(key);
1334 Py_INCREF(value);
1335 if (insertdict(mp, key, hash, value))
1336 return NULL;
1338 return d;
1341 it = PyObject_GetIter(seq);
1342 if (it == NULL){
1343 Py_DECREF(d);
1344 return NULL;
1347 if (PyDict_CheckExact(d)) {
1348 while ((key = PyIter_Next(it)) != NULL) {
1349 status = PyDict_SetItem(d, key, value);
1350 Py_DECREF(key);
1351 if (status < 0)
1352 goto Fail;
1354 } else {
1355 while ((key = PyIter_Next(it)) != NULL) {
1356 status = PyObject_SetItem(d, key, value);
1357 Py_DECREF(key);
1358 if (status < 0)
1359 goto Fail;
1363 if (PyErr_Occurred())
1364 goto Fail;
1365 Py_DECREF(it);
1366 return d;
1368 Fail:
1369 Py_DECREF(it);
1370 Py_DECREF(d);
1371 return NULL;
1374 static int
1375 dict_update_common(PyObject *self, PyObject *args, PyObject *kwds, char *methname)
1377 PyObject *arg = NULL;
1378 int result = 0;
1380 if (!PyArg_UnpackTuple(args, methname, 0, 1, &arg))
1381 result = -1;
1383 else if (arg != NULL) {
1384 if (PyObject_HasAttrString(arg, "keys"))
1385 result = PyDict_Merge(self, arg, 1);
1386 else
1387 result = PyDict_MergeFromSeq2(self, arg, 1);
1389 if (result == 0 && kwds != NULL)
1390 result = PyDict_Merge(self, kwds, 1);
1391 return result;
1394 static PyObject *
1395 dict_update(PyObject *self, PyObject *args, PyObject *kwds)
1397 if (dict_update_common(self, args, kwds, "update") != -1)
1398 Py_RETURN_NONE;
1399 return NULL;
1402 /* Update unconditionally replaces existing items.
1403 Merge has a 3rd argument 'override'; if set, it acts like Update,
1404 otherwise it leaves existing items unchanged.
1406 PyDict_{Update,Merge} update/merge from a mapping object.
1408 PyDict_MergeFromSeq2 updates/merges from any iterable object
1409 producing iterable objects of length 2.
1413 PyDict_MergeFromSeq2(PyObject *d, PyObject *seq2, int override)
1415 PyObject *it; /* iter(seq2) */
1416 Py_ssize_t i; /* index into seq2 of current element */
1417 PyObject *item; /* seq2[i] */
1418 PyObject *fast; /* item as a 2-tuple or 2-list */
1420 assert(d != NULL);
1421 assert(PyDict_Check(d));
1422 assert(seq2 != NULL);
1424 it = PyObject_GetIter(seq2);
1425 if (it == NULL)
1426 return -1;
1428 for (i = 0; ; ++i) {
1429 PyObject *key, *value;
1430 Py_ssize_t n;
1432 fast = NULL;
1433 item = PyIter_Next(it);
1434 if (item == NULL) {
1435 if (PyErr_Occurred())
1436 goto Fail;
1437 break;
1440 /* Convert item to sequence, and verify length 2. */
1441 fast = PySequence_Fast(item, "");
1442 if (fast == NULL) {
1443 if (PyErr_ExceptionMatches(PyExc_TypeError))
1444 PyErr_Format(PyExc_TypeError,
1445 "cannot convert dictionary update "
1446 "sequence element #%zd to a sequence",
1448 goto Fail;
1450 n = PySequence_Fast_GET_SIZE(fast);
1451 if (n != 2) {
1452 PyErr_Format(PyExc_ValueError,
1453 "dictionary update sequence element #%zd "
1454 "has length %zd; 2 is required",
1455 i, n);
1456 goto Fail;
1459 /* Update/merge with this (key, value) pair. */
1460 key = PySequence_Fast_GET_ITEM(fast, 0);
1461 value = PySequence_Fast_GET_ITEM(fast, 1);
1462 if (override || PyDict_GetItem(d, key) == NULL) {
1463 int status = PyDict_SetItem(d, key, value);
1464 if (status < 0)
1465 goto Fail;
1467 Py_DECREF(fast);
1468 Py_DECREF(item);
1471 i = 0;
1472 goto Return;
1473 Fail:
1474 Py_XDECREF(item);
1475 Py_XDECREF(fast);
1476 i = -1;
1477 Return:
1478 Py_DECREF(it);
1479 return Py_SAFE_DOWNCAST(i, Py_ssize_t, int);
1483 PyDict_Update(PyObject *a, PyObject *b)
1485 return PyDict_Merge(a, b, 1);
1489 PyDict_Merge(PyObject *a, PyObject *b, int override)
1491 register PyDictObject *mp, *other;
1492 register Py_ssize_t i;
1493 PyDictEntry *entry;
1495 /* We accept for the argument either a concrete dictionary object,
1496 * or an abstract "mapping" object. For the former, we can do
1497 * things quite efficiently. For the latter, we only require that
1498 * PyMapping_Keys() and PyObject_GetItem() be supported.
1500 if (a == NULL || !PyDict_Check(a) || b == NULL) {
1501 PyErr_BadInternalCall();
1502 return -1;
1504 mp = (PyDictObject*)a;
1505 if (PyDict_Check(b)) {
1506 other = (PyDictObject*)b;
1507 if (other == mp || other->ma_used == 0)
1508 /* a.update(a) or a.update({}); nothing to do */
1509 return 0;
1510 if (mp->ma_used == 0)
1511 /* Since the target dict is empty, PyDict_GetItem()
1512 * always returns NULL. Setting override to 1
1513 * skips the unnecessary test.
1515 override = 1;
1516 /* Do one big resize at the start, rather than
1517 * incrementally resizing as we insert new items. Expect
1518 * that there will be no (or few) overlapping keys.
1520 if ((mp->ma_fill + other->ma_used)*3 >= (mp->ma_mask+1)*2) {
1521 if (dictresize(mp, (mp->ma_used + other->ma_used)*2) != 0)
1522 return -1;
1524 for (i = 0; i <= other->ma_mask; i++) {
1525 entry = &other->ma_table[i];
1526 if (entry->me_value != NULL &&
1527 (override ||
1528 PyDict_GetItem(a, entry->me_key) == NULL)) {
1529 Py_INCREF(entry->me_key);
1530 Py_INCREF(entry->me_value);
1531 if (insertdict(mp, entry->me_key,
1532 (long)entry->me_hash,
1533 entry->me_value) != 0)
1534 return -1;
1538 else {
1539 /* Do it the generic, slower way */
1540 PyObject *keys = PyMapping_Keys(b);
1541 PyObject *iter;
1542 PyObject *key, *value;
1543 int status;
1545 if (keys == NULL)
1546 /* Docstring says this is equivalent to E.keys() so
1547 * if E doesn't have a .keys() method we want
1548 * AttributeError to percolate up. Might as well
1549 * do the same for any other error.
1551 return -1;
1553 iter = PyObject_GetIter(keys);
1554 Py_DECREF(keys);
1555 if (iter == NULL)
1556 return -1;
1558 for (key = PyIter_Next(iter); key; key = PyIter_Next(iter)) {
1559 if (!override && PyDict_GetItem(a, key) != NULL) {
1560 Py_DECREF(key);
1561 continue;
1563 value = PyObject_GetItem(b, key);
1564 if (value == NULL) {
1565 Py_DECREF(iter);
1566 Py_DECREF(key);
1567 return -1;
1569 status = PyDict_SetItem(a, key, value);
1570 Py_DECREF(key);
1571 Py_DECREF(value);
1572 if (status < 0) {
1573 Py_DECREF(iter);
1574 return -1;
1577 Py_DECREF(iter);
1578 if (PyErr_Occurred())
1579 /* Iterator completed, via error */
1580 return -1;
1582 return 0;
1585 static PyObject *
1586 dict_copy(register PyDictObject *mp)
1588 return PyDict_Copy((PyObject*)mp);
1591 PyObject *
1592 PyDict_Copy(PyObject *o)
1594 PyObject *copy;
1596 if (o == NULL || !PyDict_Check(o)) {
1597 PyErr_BadInternalCall();
1598 return NULL;
1600 copy = PyDict_New();
1601 if (copy == NULL)
1602 return NULL;
1603 if (PyDict_Merge(copy, o, 1) == 0)
1604 return copy;
1605 Py_DECREF(copy);
1606 return NULL;
1609 Py_ssize_t
1610 PyDict_Size(PyObject *mp)
1612 if (mp == NULL || !PyDict_Check(mp)) {
1613 PyErr_BadInternalCall();
1614 return -1;
1616 return ((PyDictObject *)mp)->ma_used;
1619 PyObject *
1620 PyDict_Keys(PyObject *mp)
1622 if (mp == NULL || !PyDict_Check(mp)) {
1623 PyErr_BadInternalCall();
1624 return NULL;
1626 return dict_keys((PyDictObject *)mp);
1629 PyObject *
1630 PyDict_Values(PyObject *mp)
1632 if (mp == NULL || !PyDict_Check(mp)) {
1633 PyErr_BadInternalCall();
1634 return NULL;
1636 return dict_values((PyDictObject *)mp);
1639 PyObject *
1640 PyDict_Items(PyObject *mp)
1642 if (mp == NULL || !PyDict_Check(mp)) {
1643 PyErr_BadInternalCall();
1644 return NULL;
1646 return dict_items((PyDictObject *)mp);
1649 /* Return 1 if dicts equal, 0 if not, -1 if error.
1650 * Gets out as soon as any difference is detected.
1651 * Uses only Py_EQ comparison.
1653 static int
1654 dict_equal(PyDictObject *a, PyDictObject *b)
1656 Py_ssize_t i;
1658 if (a->ma_used != b->ma_used)
1659 /* can't be equal if # of entries differ */
1660 return 0;
1662 /* Same # of entries -- check all of 'em. Exit early on any diff. */
1663 for (i = 0; i <= a->ma_mask; i++) {
1664 PyObject *aval = a->ma_table[i].me_value;
1665 if (aval != NULL) {
1666 int cmp;
1667 PyObject *bval;
1668 PyObject *key = a->ma_table[i].me_key;
1669 /* temporarily bump aval's refcount to ensure it stays
1670 alive until we're done with it */
1671 Py_INCREF(aval);
1672 /* ditto for key */
1673 Py_INCREF(key);
1674 bval = PyDict_GetItemWithError((PyObject *)b, key);
1675 Py_DECREF(key);
1676 if (bval == NULL) {
1677 Py_DECREF(aval);
1678 if (PyErr_Occurred())
1679 return -1;
1680 return 0;
1682 cmp = PyObject_RichCompareBool(aval, bval, Py_EQ);
1683 Py_DECREF(aval);
1684 if (cmp <= 0) /* error or not equal */
1685 return cmp;
1688 return 1;
1691 static PyObject *
1692 dict_richcompare(PyObject *v, PyObject *w, int op)
1694 int cmp;
1695 PyObject *res;
1697 if (!PyDict_Check(v) || !PyDict_Check(w)) {
1698 res = Py_NotImplemented;
1700 else if (op == Py_EQ || op == Py_NE) {
1701 cmp = dict_equal((PyDictObject *)v, (PyDictObject *)w);
1702 if (cmp < 0)
1703 return NULL;
1704 res = (cmp == (op == Py_EQ)) ? Py_True : Py_False;
1706 else
1707 res = Py_NotImplemented;
1708 Py_INCREF(res);
1709 return res;
1712 static PyObject *
1713 dict_contains(register PyDictObject *mp, PyObject *key)
1715 long hash;
1716 PyDictEntry *ep;
1718 if (!PyUnicode_CheckExact(key) ||
1719 (hash = ((PyUnicodeObject *) key)->hash) == -1) {
1720 hash = PyObject_Hash(key);
1721 if (hash == -1)
1722 return NULL;
1724 ep = (mp->ma_lookup)(mp, key, hash);
1725 if (ep == NULL)
1726 return NULL;
1727 return PyBool_FromLong(ep->me_value != NULL);
1730 static PyObject *
1731 dict_get(register PyDictObject *mp, PyObject *args)
1733 PyObject *key;
1734 PyObject *failobj = Py_None;
1735 PyObject *val = NULL;
1736 long hash;
1737 PyDictEntry *ep;
1739 if (!PyArg_UnpackTuple(args, "get", 1, 2, &key, &failobj))
1740 return NULL;
1742 if (!PyUnicode_CheckExact(key) ||
1743 (hash = ((PyUnicodeObject *) key)->hash) == -1) {
1744 hash = PyObject_Hash(key);
1745 if (hash == -1)
1746 return NULL;
1748 ep = (mp->ma_lookup)(mp, key, hash);
1749 if (ep == NULL)
1750 return NULL;
1751 val = ep->me_value;
1752 if (val == NULL)
1753 val = failobj;
1754 Py_INCREF(val);
1755 return val;
1759 static PyObject *
1760 dict_setdefault(register PyDictObject *mp, PyObject *args)
1762 PyObject *key;
1763 PyObject *failobj = Py_None;
1764 PyObject *val = NULL;
1765 long hash;
1766 PyDictEntry *ep;
1768 if (!PyArg_UnpackTuple(args, "setdefault", 1, 2, &key, &failobj))
1769 return NULL;
1771 if (!PyUnicode_CheckExact(key) ||
1772 (hash = ((PyUnicodeObject *) key)->hash) == -1) {
1773 hash = PyObject_Hash(key);
1774 if (hash == -1)
1775 return NULL;
1777 ep = (mp->ma_lookup)(mp, key, hash);
1778 if (ep == NULL)
1779 return NULL;
1780 val = ep->me_value;
1781 if (val == NULL) {
1782 val = failobj;
1783 if (PyDict_SetItem((PyObject*)mp, key, failobj))
1784 val = NULL;
1786 Py_XINCREF(val);
1787 return val;
1791 static PyObject *
1792 dict_clear(register PyDictObject *mp)
1794 PyDict_Clear((PyObject *)mp);
1795 Py_RETURN_NONE;
1798 static PyObject *
1799 dict_pop(PyDictObject *mp, PyObject *args)
1801 long hash;
1802 PyDictEntry *ep;
1803 PyObject *old_value, *old_key;
1804 PyObject *key, *deflt = NULL;
1806 if(!PyArg_UnpackTuple(args, "pop", 1, 2, &key, &deflt))
1807 return NULL;
1808 if (mp->ma_used == 0) {
1809 if (deflt) {
1810 Py_INCREF(deflt);
1811 return deflt;
1813 PyErr_SetString(PyExc_KeyError,
1814 "pop(): dictionary is empty");
1815 return NULL;
1817 if (!PyUnicode_CheckExact(key) ||
1818 (hash = ((PyUnicodeObject *) key)->hash) == -1) {
1819 hash = PyObject_Hash(key);
1820 if (hash == -1)
1821 return NULL;
1823 ep = (mp->ma_lookup)(mp, key, hash);
1824 if (ep == NULL)
1825 return NULL;
1826 if (ep->me_value == NULL) {
1827 if (deflt) {
1828 Py_INCREF(deflt);
1829 return deflt;
1831 set_key_error(key);
1832 return NULL;
1834 old_key = ep->me_key;
1835 Py_INCREF(dummy);
1836 ep->me_key = dummy;
1837 old_value = ep->me_value;
1838 ep->me_value = NULL;
1839 mp->ma_used--;
1840 Py_DECREF(old_key);
1841 return old_value;
1844 static PyObject *
1845 dict_popitem(PyDictObject *mp)
1847 Py_ssize_t i = 0;
1848 PyDictEntry *ep;
1849 PyObject *res;
1851 /* Allocate the result tuple before checking the size. Believe it
1852 * or not, this allocation could trigger a garbage collection which
1853 * could empty the dict, so if we checked the size first and that
1854 * happened, the result would be an infinite loop (searching for an
1855 * entry that no longer exists). Note that the usual popitem()
1856 * idiom is "while d: k, v = d.popitem()". so needing to throw the
1857 * tuple away if the dict *is* empty isn't a significant
1858 * inefficiency -- possible, but unlikely in practice.
1860 res = PyTuple_New(2);
1861 if (res == NULL)
1862 return NULL;
1863 if (mp->ma_used == 0) {
1864 Py_DECREF(res);
1865 PyErr_SetString(PyExc_KeyError,
1866 "popitem(): dictionary is empty");
1867 return NULL;
1869 /* Set ep to "the first" dict entry with a value. We abuse the hash
1870 * field of slot 0 to hold a search finger:
1871 * If slot 0 has a value, use slot 0.
1872 * Else slot 0 is being used to hold a search finger,
1873 * and we use its hash value as the first index to look.
1875 ep = &mp->ma_table[0];
1876 if (ep->me_value == NULL) {
1877 i = ep->me_hash;
1878 /* The hash field may be a real hash value, or it may be a
1879 * legit search finger, or it may be a once-legit search
1880 * finger that's out of bounds now because it wrapped around
1881 * or the table shrunk -- simply make sure it's in bounds now.
1883 if (i > mp->ma_mask || i < 1)
1884 i = 1; /* skip slot 0 */
1885 while ((ep = &mp->ma_table[i])->me_value == NULL) {
1886 i++;
1887 if (i > mp->ma_mask)
1888 i = 1;
1891 PyTuple_SET_ITEM(res, 0, ep->me_key);
1892 PyTuple_SET_ITEM(res, 1, ep->me_value);
1893 Py_INCREF(dummy);
1894 ep->me_key = dummy;
1895 ep->me_value = NULL;
1896 mp->ma_used--;
1897 assert(mp->ma_table[0].me_value == NULL);
1898 mp->ma_table[0].me_hash = i + 1; /* next place to start */
1899 return res;
1902 static int
1903 dict_traverse(PyObject *op, visitproc visit, void *arg)
1905 Py_ssize_t i = 0;
1906 PyObject *pk;
1907 PyObject *pv;
1909 while (PyDict_Next(op, &i, &pk, &pv)) {
1910 Py_VISIT(pk);
1911 Py_VISIT(pv);
1913 return 0;
1916 static int
1917 dict_tp_clear(PyObject *op)
1919 PyDict_Clear(op);
1920 return 0;
1923 static PyObject *dictiter_new(PyDictObject *, PyTypeObject *);
1925 static PyObject *
1926 dict_sizeof(PyDictObject *mp)
1928 Py_ssize_t res;
1930 res = sizeof(PyDictObject);
1931 if (mp->ma_table != mp->ma_smalltable)
1932 res = res + (mp->ma_mask + 1) * sizeof(PyDictEntry);
1933 return PyLong_FromSsize_t(res);
1936 PyDoc_STRVAR(contains__doc__,
1937 "D.__contains__(k) -> True if D has a key k, else False");
1939 PyDoc_STRVAR(getitem__doc__, "x.__getitem__(y) <==> x[y]");
1941 PyDoc_STRVAR(sizeof__doc__,
1942 "D.__sizeof__() -> size of D in memory, in bytes");
1944 PyDoc_STRVAR(get__doc__,
1945 "D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.");
1947 PyDoc_STRVAR(setdefault_doc__,
1948 "D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D");
1950 PyDoc_STRVAR(pop__doc__,
1951 "D.pop(k[,d]) -> v, remove specified key and return the corresponding value.\n\
1952 If key is not found, d is returned if given, otherwise KeyError is raised");
1954 PyDoc_STRVAR(popitem__doc__,
1955 "D.popitem() -> (k, v), remove and return some (key, value) pair as a\n\
1956 2-tuple; but raise KeyError if D is empty.");
1958 PyDoc_STRVAR(update__doc__,
1959 "D.update(E, **F) -> None. Update D from dict/iterable E and F.\n"
1960 "If E has a .keys() method, does: for k in E: D[k] = E[k]\n\
1961 If E lacks .keys() method, does: for (k, v) in E: D[k] = v\n\
1962 In either case, this is followed by: for k in F: D[k] = F[k]");
1964 PyDoc_STRVAR(fromkeys__doc__,
1965 "dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.\n\
1966 v defaults to None.");
1968 PyDoc_STRVAR(clear__doc__,
1969 "D.clear() -> None. Remove all items from D.");
1971 PyDoc_STRVAR(copy__doc__,
1972 "D.copy() -> a shallow copy of D");
1974 /* Forward */
1975 static PyObject *dictkeys_new(PyObject *);
1976 static PyObject *dictitems_new(PyObject *);
1977 static PyObject *dictvalues_new(PyObject *);
1979 PyDoc_STRVAR(keys__doc__,
1980 "D.keys() -> a set-like object providing a view on D's keys");
1981 PyDoc_STRVAR(items__doc__,
1982 "D.items() -> a set-like object providing a view on D's items");
1983 PyDoc_STRVAR(values__doc__,
1984 "D.values() -> an object providing a view on D's values");
1986 static PyMethodDef mapp_methods[] = {
1987 {"__contains__",(PyCFunction)dict_contains, METH_O | METH_COEXIST,
1988 contains__doc__},
1989 {"__getitem__", (PyCFunction)dict_subscript, METH_O | METH_COEXIST,
1990 getitem__doc__},
1991 {"__sizeof__", (PyCFunction)dict_sizeof, METH_NOARGS,
1992 sizeof__doc__},
1993 {"get", (PyCFunction)dict_get, METH_VARARGS,
1994 get__doc__},
1995 {"setdefault", (PyCFunction)dict_setdefault, METH_VARARGS,
1996 setdefault_doc__},
1997 {"pop", (PyCFunction)dict_pop, METH_VARARGS,
1998 pop__doc__},
1999 {"popitem", (PyCFunction)dict_popitem, METH_NOARGS,
2000 popitem__doc__},
2001 {"keys", (PyCFunction)dictkeys_new, METH_NOARGS,
2002 keys__doc__},
2003 {"items", (PyCFunction)dictitems_new, METH_NOARGS,
2004 items__doc__},
2005 {"values", (PyCFunction)dictvalues_new, METH_NOARGS,
2006 values__doc__},
2007 {"update", (PyCFunction)dict_update, METH_VARARGS | METH_KEYWORDS,
2008 update__doc__},
2009 {"fromkeys", (PyCFunction)dict_fromkeys, METH_VARARGS | METH_CLASS,
2010 fromkeys__doc__},
2011 {"clear", (PyCFunction)dict_clear, METH_NOARGS,
2012 clear__doc__},
2013 {"copy", (PyCFunction)dict_copy, METH_NOARGS,
2014 copy__doc__},
2015 {NULL, NULL} /* sentinel */
2018 /* Return 1 if `key` is in dict `op`, 0 if not, and -1 on error. */
2020 PyDict_Contains(PyObject *op, PyObject *key)
2022 long hash;
2023 PyDictObject *mp = (PyDictObject *)op;
2024 PyDictEntry *ep;
2026 if (!PyUnicode_CheckExact(key) ||
2027 (hash = ((PyUnicodeObject *) key)->hash) == -1) {
2028 hash = PyObject_Hash(key);
2029 if (hash == -1)
2030 return -1;
2032 ep = (mp->ma_lookup)(mp, key, hash);
2033 return ep == NULL ? -1 : (ep->me_value != NULL);
2036 /* Internal version of PyDict_Contains used when the hash value is already known */
2038 _PyDict_Contains(PyObject *op, PyObject *key, long hash)
2040 PyDictObject *mp = (PyDictObject *)op;
2041 PyDictEntry *ep;
2043 ep = (mp->ma_lookup)(mp, key, hash);
2044 return ep == NULL ? -1 : (ep->me_value != NULL);
2047 /* Hack to implement "key in dict" */
2048 static PySequenceMethods dict_as_sequence = {
2049 0, /* sq_length */
2050 0, /* sq_concat */
2051 0, /* sq_repeat */
2052 0, /* sq_item */
2053 0, /* sq_slice */
2054 0, /* sq_ass_item */
2055 0, /* sq_ass_slice */
2056 PyDict_Contains, /* sq_contains */
2057 0, /* sq_inplace_concat */
2058 0, /* sq_inplace_repeat */
2061 static PyObject *
2062 dict_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
2064 PyObject *self;
2066 assert(type != NULL && type->tp_alloc != NULL);
2067 self = type->tp_alloc(type, 0);
2068 if (self != NULL) {
2069 PyDictObject *d = (PyDictObject *)self;
2070 /* It's guaranteed that tp->alloc zeroed out the struct. */
2071 assert(d->ma_table == NULL && d->ma_fill == 0 && d->ma_used == 0);
2072 INIT_NONZERO_DICT_SLOTS(d);
2073 d->ma_lookup = lookdict_unicode;
2074 /* The object has been implicitely tracked by tp_alloc */
2075 if (type == &PyDict_Type)
2076 _PyObject_GC_UNTRACK(d);
2077 #ifdef SHOW_CONVERSION_COUNTS
2078 ++created;
2079 #endif
2080 #ifdef SHOW_TRACK_COUNT
2081 if (_PyObject_GC_IS_TRACKED(d))
2082 count_tracked++;
2083 else
2084 count_untracked++;
2085 #endif
2087 return self;
2090 static int
2091 dict_init(PyObject *self, PyObject *args, PyObject *kwds)
2093 return dict_update_common(self, args, kwds, "dict");
2096 static PyObject *
2097 dict_iter(PyDictObject *dict)
2099 return dictiter_new(dict, &PyDictIterKey_Type);
2102 PyDoc_STRVAR(dictionary_doc,
2103 "dict() -> new empty dictionary\n"
2104 "dict(mapping) -> new dictionary initialized from a mapping object's\n"
2105 " (key, value) pairs\n"
2106 "dict(iterable) -> new dictionary initialized as if via:\n"
2107 " d = {}\n"
2108 " for k, v in iterable:\n"
2109 " d[k] = v\n"
2110 "dict(**kwargs) -> new dictionary initialized with the name=value pairs\n"
2111 " in the keyword argument list. For example: dict(one=1, two=2)");
2113 PyTypeObject PyDict_Type = {
2114 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2115 "dict",
2116 sizeof(PyDictObject),
2118 (destructor)dict_dealloc, /* tp_dealloc */
2119 0, /* tp_print */
2120 0, /* tp_getattr */
2121 0, /* tp_setattr */
2122 0, /* tp_reserved */
2123 (reprfunc)dict_repr, /* tp_repr */
2124 0, /* tp_as_number */
2125 &dict_as_sequence, /* tp_as_sequence */
2126 &dict_as_mapping, /* tp_as_mapping */
2127 (hashfunc)PyObject_HashNotImplemented, /* tp_hash */
2128 0, /* tp_call */
2129 0, /* tp_str */
2130 PyObject_GenericGetAttr, /* tp_getattro */
2131 0, /* tp_setattro */
2132 0, /* tp_as_buffer */
2133 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
2134 Py_TPFLAGS_BASETYPE | Py_TPFLAGS_DICT_SUBCLASS, /* tp_flags */
2135 dictionary_doc, /* tp_doc */
2136 dict_traverse, /* tp_traverse */
2137 dict_tp_clear, /* tp_clear */
2138 dict_richcompare, /* tp_richcompare */
2139 0, /* tp_weaklistoffset */
2140 (getiterfunc)dict_iter, /* tp_iter */
2141 0, /* tp_iternext */
2142 mapp_methods, /* tp_methods */
2143 0, /* tp_members */
2144 0, /* tp_getset */
2145 0, /* tp_base */
2146 0, /* tp_dict */
2147 0, /* tp_descr_get */
2148 0, /* tp_descr_set */
2149 0, /* tp_dictoffset */
2150 dict_init, /* tp_init */
2151 PyType_GenericAlloc, /* tp_alloc */
2152 dict_new, /* tp_new */
2153 PyObject_GC_Del, /* tp_free */
2156 /* For backward compatibility with old dictionary interface */
2158 PyObject *
2159 PyDict_GetItemString(PyObject *v, const char *key)
2161 PyObject *kv, *rv;
2162 kv = PyUnicode_FromString(key);
2163 if (kv == NULL)
2164 return NULL;
2165 rv = PyDict_GetItem(v, kv);
2166 Py_DECREF(kv);
2167 return rv;
2171 PyDict_SetItemString(PyObject *v, const char *key, PyObject *item)
2173 PyObject *kv;
2174 int err;
2175 kv = PyUnicode_FromString(key);
2176 if (kv == NULL)
2177 return -1;
2178 PyUnicode_InternInPlace(&kv); /* XXX Should we really? */
2179 err = PyDict_SetItem(v, kv, item);
2180 Py_DECREF(kv);
2181 return err;
2185 PyDict_DelItemString(PyObject *v, const char *key)
2187 PyObject *kv;
2188 int err;
2189 kv = PyUnicode_FromString(key);
2190 if (kv == NULL)
2191 return -1;
2192 err = PyDict_DelItem(v, kv);
2193 Py_DECREF(kv);
2194 return err;
2197 /* Dictionary iterator types */
2199 typedef struct {
2200 PyObject_HEAD
2201 PyDictObject *di_dict; /* Set to NULL when iterator is exhausted */
2202 Py_ssize_t di_used;
2203 Py_ssize_t di_pos;
2204 PyObject* di_result; /* reusable result tuple for iteritems */
2205 Py_ssize_t len;
2206 } dictiterobject;
2208 static PyObject *
2209 dictiter_new(PyDictObject *dict, PyTypeObject *itertype)
2211 dictiterobject *di;
2212 di = PyObject_GC_New(dictiterobject, itertype);
2213 if (di == NULL)
2214 return NULL;
2215 Py_INCREF(dict);
2216 di->di_dict = dict;
2217 di->di_used = dict->ma_used;
2218 di->di_pos = 0;
2219 di->len = dict->ma_used;
2220 if (itertype == &PyDictIterItem_Type) {
2221 di->di_result = PyTuple_Pack(2, Py_None, Py_None);
2222 if (di->di_result == NULL) {
2223 Py_DECREF(di);
2224 return NULL;
2227 else
2228 di->di_result = NULL;
2229 _PyObject_GC_TRACK(di);
2230 return (PyObject *)di;
2233 static void
2234 dictiter_dealloc(dictiterobject *di)
2236 Py_XDECREF(di->di_dict);
2237 Py_XDECREF(di->di_result);
2238 PyObject_GC_Del(di);
2241 static int
2242 dictiter_traverse(dictiterobject *di, visitproc visit, void *arg)
2244 Py_VISIT(di->di_dict);
2245 Py_VISIT(di->di_result);
2246 return 0;
2249 static PyObject *
2250 dictiter_len(dictiterobject *di)
2252 Py_ssize_t len = 0;
2253 if (di->di_dict != NULL && di->di_used == di->di_dict->ma_used)
2254 len = di->len;
2255 return PyLong_FromSize_t(len);
2258 PyDoc_STRVAR(length_hint_doc,
2259 "Private method returning an estimate of len(list(it)).");
2261 static PyMethodDef dictiter_methods[] = {
2262 {"__length_hint__", (PyCFunction)dictiter_len, METH_NOARGS,
2263 length_hint_doc},
2264 {NULL, NULL} /* sentinel */
2267 static PyObject *dictiter_iternextkey(dictiterobject *di)
2269 PyObject *key;
2270 register Py_ssize_t i, mask;
2271 register PyDictEntry *ep;
2272 PyDictObject *d = di->di_dict;
2274 if (d == NULL)
2275 return NULL;
2276 assert (PyDict_Check(d));
2278 if (di->di_used != d->ma_used) {
2279 PyErr_SetString(PyExc_RuntimeError,
2280 "dictionary changed size during iteration");
2281 di->di_used = -1; /* Make this state sticky */
2282 return NULL;
2285 i = di->di_pos;
2286 if (i < 0)
2287 goto fail;
2288 ep = d->ma_table;
2289 mask = d->ma_mask;
2290 while (i <= mask && ep[i].me_value == NULL)
2291 i++;
2292 di->di_pos = i+1;
2293 if (i > mask)
2294 goto fail;
2295 di->len--;
2296 key = ep[i].me_key;
2297 Py_INCREF(key);
2298 return key;
2300 fail:
2301 Py_DECREF(d);
2302 di->di_dict = NULL;
2303 return NULL;
2306 PyTypeObject PyDictIterKey_Type = {
2307 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2308 "dict_keyiterator", /* tp_name */
2309 sizeof(dictiterobject), /* tp_basicsize */
2310 0, /* tp_itemsize */
2311 /* methods */
2312 (destructor)dictiter_dealloc, /* tp_dealloc */
2313 0, /* tp_print */
2314 0, /* tp_getattr */
2315 0, /* tp_setattr */
2316 0, /* tp_reserved */
2317 0, /* tp_repr */
2318 0, /* tp_as_number */
2319 0, /* tp_as_sequence */
2320 0, /* tp_as_mapping */
2321 0, /* tp_hash */
2322 0, /* tp_call */
2323 0, /* tp_str */
2324 PyObject_GenericGetAttr, /* tp_getattro */
2325 0, /* tp_setattro */
2326 0, /* tp_as_buffer */
2327 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
2328 0, /* tp_doc */
2329 (traverseproc)dictiter_traverse, /* tp_traverse */
2330 0, /* tp_clear */
2331 0, /* tp_richcompare */
2332 0, /* tp_weaklistoffset */
2333 PyObject_SelfIter, /* tp_iter */
2334 (iternextfunc)dictiter_iternextkey, /* tp_iternext */
2335 dictiter_methods, /* tp_methods */
2339 static PyObject *dictiter_iternextvalue(dictiterobject *di)
2341 PyObject *value;
2342 register Py_ssize_t i, mask;
2343 register PyDictEntry *ep;
2344 PyDictObject *d = di->di_dict;
2346 if (d == NULL)
2347 return NULL;
2348 assert (PyDict_Check(d));
2350 if (di->di_used != d->ma_used) {
2351 PyErr_SetString(PyExc_RuntimeError,
2352 "dictionary changed size during iteration");
2353 di->di_used = -1; /* Make this state sticky */
2354 return NULL;
2357 i = di->di_pos;
2358 mask = d->ma_mask;
2359 if (i < 0 || i > mask)
2360 goto fail;
2361 ep = d->ma_table;
2362 while ((value=ep[i].me_value) == NULL) {
2363 i++;
2364 if (i > mask)
2365 goto fail;
2367 di->di_pos = i+1;
2368 di->len--;
2369 Py_INCREF(value);
2370 return value;
2372 fail:
2373 Py_DECREF(d);
2374 di->di_dict = NULL;
2375 return NULL;
2378 PyTypeObject PyDictIterValue_Type = {
2379 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2380 "dict_valueiterator", /* tp_name */
2381 sizeof(dictiterobject), /* tp_basicsize */
2382 0, /* tp_itemsize */
2383 /* methods */
2384 (destructor)dictiter_dealloc, /* tp_dealloc */
2385 0, /* tp_print */
2386 0, /* tp_getattr */
2387 0, /* tp_setattr */
2388 0, /* tp_reserved */
2389 0, /* tp_repr */
2390 0, /* tp_as_number */
2391 0, /* tp_as_sequence */
2392 0, /* tp_as_mapping */
2393 0, /* tp_hash */
2394 0, /* tp_call */
2395 0, /* tp_str */
2396 PyObject_GenericGetAttr, /* tp_getattro */
2397 0, /* tp_setattro */
2398 0, /* tp_as_buffer */
2399 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
2400 0, /* tp_doc */
2401 (traverseproc)dictiter_traverse, /* tp_traverse */
2402 0, /* tp_clear */
2403 0, /* tp_richcompare */
2404 0, /* tp_weaklistoffset */
2405 PyObject_SelfIter, /* tp_iter */
2406 (iternextfunc)dictiter_iternextvalue, /* tp_iternext */
2407 dictiter_methods, /* tp_methods */
2411 static PyObject *dictiter_iternextitem(dictiterobject *di)
2413 PyObject *key, *value, *result = di->di_result;
2414 register Py_ssize_t i, mask;
2415 register PyDictEntry *ep;
2416 PyDictObject *d = di->di_dict;
2418 if (d == NULL)
2419 return NULL;
2420 assert (PyDict_Check(d));
2422 if (di->di_used != d->ma_used) {
2423 PyErr_SetString(PyExc_RuntimeError,
2424 "dictionary changed size during iteration");
2425 di->di_used = -1; /* Make this state sticky */
2426 return NULL;
2429 i = di->di_pos;
2430 if (i < 0)
2431 goto fail;
2432 ep = d->ma_table;
2433 mask = d->ma_mask;
2434 while (i <= mask && ep[i].me_value == NULL)
2435 i++;
2436 di->di_pos = i+1;
2437 if (i > mask)
2438 goto fail;
2440 if (result->ob_refcnt == 1) {
2441 Py_INCREF(result);
2442 Py_DECREF(PyTuple_GET_ITEM(result, 0));
2443 Py_DECREF(PyTuple_GET_ITEM(result, 1));
2444 } else {
2445 result = PyTuple_New(2);
2446 if (result == NULL)
2447 return NULL;
2449 di->len--;
2450 key = ep[i].me_key;
2451 value = ep[i].me_value;
2452 Py_INCREF(key);
2453 Py_INCREF(value);
2454 PyTuple_SET_ITEM(result, 0, key);
2455 PyTuple_SET_ITEM(result, 1, value);
2456 return result;
2458 fail:
2459 Py_DECREF(d);
2460 di->di_dict = NULL;
2461 return NULL;
2464 PyTypeObject PyDictIterItem_Type = {
2465 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2466 "dict_itemiterator", /* tp_name */
2467 sizeof(dictiterobject), /* tp_basicsize */
2468 0, /* tp_itemsize */
2469 /* methods */
2470 (destructor)dictiter_dealloc, /* tp_dealloc */
2471 0, /* tp_print */
2472 0, /* tp_getattr */
2473 0, /* tp_setattr */
2474 0, /* tp_reserved */
2475 0, /* tp_repr */
2476 0, /* tp_as_number */
2477 0, /* tp_as_sequence */
2478 0, /* tp_as_mapping */
2479 0, /* tp_hash */
2480 0, /* tp_call */
2481 0, /* tp_str */
2482 PyObject_GenericGetAttr, /* tp_getattro */
2483 0, /* tp_setattro */
2484 0, /* tp_as_buffer */
2485 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
2486 0, /* tp_doc */
2487 (traverseproc)dictiter_traverse, /* tp_traverse */
2488 0, /* tp_clear */
2489 0, /* tp_richcompare */
2490 0, /* tp_weaklistoffset */
2491 PyObject_SelfIter, /* tp_iter */
2492 (iternextfunc)dictiter_iternextitem, /* tp_iternext */
2493 dictiter_methods, /* tp_methods */
2498 /***********************************************/
2499 /* View objects for keys(), items(), values(). */
2500 /***********************************************/
2502 /* The instance lay-out is the same for all three; but the type differs. */
2504 typedef struct {
2505 PyObject_HEAD
2506 PyDictObject *dv_dict;
2507 } dictviewobject;
2510 static void
2511 dictview_dealloc(dictviewobject *dv)
2513 Py_XDECREF(dv->dv_dict);
2514 PyObject_GC_Del(dv);
2517 static int
2518 dictview_traverse(dictviewobject *dv, visitproc visit, void *arg)
2520 Py_VISIT(dv->dv_dict);
2521 return 0;
2524 static Py_ssize_t
2525 dictview_len(dictviewobject *dv)
2527 Py_ssize_t len = 0;
2528 if (dv->dv_dict != NULL)
2529 len = dv->dv_dict->ma_used;
2530 return len;
2533 static PyObject *
2534 dictview_new(PyObject *dict, PyTypeObject *type)
2536 dictviewobject *dv;
2537 if (dict == NULL) {
2538 PyErr_BadInternalCall();
2539 return NULL;
2541 if (!PyDict_Check(dict)) {
2542 /* XXX Get rid of this restriction later */
2543 PyErr_Format(PyExc_TypeError,
2544 "%s() requires a dict argument, not '%s'",
2545 type->tp_name, dict->ob_type->tp_name);
2546 return NULL;
2548 dv = PyObject_GC_New(dictviewobject, type);
2549 if (dv == NULL)
2550 return NULL;
2551 Py_INCREF(dict);
2552 dv->dv_dict = (PyDictObject *)dict;
2553 _PyObject_GC_TRACK(dv);
2554 return (PyObject *)dv;
2557 /* TODO(guido): The views objects are not complete:
2559 * support more set operations
2560 * support arbitrary mappings?
2561 - either these should be static or exported in dictobject.h
2562 - if public then they should probably be in builtins
2565 /* Return 1 if self is a subset of other, iterating over self;
2566 0 if not; -1 if an error occurred. */
2567 static int
2568 all_contained_in(PyObject *self, PyObject *other)
2570 PyObject *iter = PyObject_GetIter(self);
2571 int ok = 1;
2573 if (iter == NULL)
2574 return -1;
2575 for (;;) {
2576 PyObject *next = PyIter_Next(iter);
2577 if (next == NULL) {
2578 if (PyErr_Occurred())
2579 ok = -1;
2580 break;
2582 ok = PySequence_Contains(other, next);
2583 Py_DECREF(next);
2584 if (ok <= 0)
2585 break;
2587 Py_DECREF(iter);
2588 return ok;
2591 static PyObject *
2592 dictview_richcompare(PyObject *self, PyObject *other, int op)
2594 Py_ssize_t len_self, len_other;
2595 int ok;
2596 PyObject *result;
2598 assert(self != NULL);
2599 assert(PyDictViewSet_Check(self));
2600 assert(other != NULL);
2602 if (!PyAnySet_Check(other) && !PyDictViewSet_Check(other)) {
2603 Py_INCREF(Py_NotImplemented);
2604 return Py_NotImplemented;
2607 len_self = PyObject_Size(self);
2608 if (len_self < 0)
2609 return NULL;
2610 len_other = PyObject_Size(other);
2611 if (len_other < 0)
2612 return NULL;
2614 ok = 0;
2615 switch(op) {
2617 case Py_NE:
2618 case Py_EQ:
2619 if (len_self == len_other)
2620 ok = all_contained_in(self, other);
2621 if (op == Py_NE && ok >= 0)
2622 ok = !ok;
2623 break;
2625 case Py_LT:
2626 if (len_self < len_other)
2627 ok = all_contained_in(self, other);
2628 break;
2630 case Py_LE:
2631 if (len_self <= len_other)
2632 ok = all_contained_in(self, other);
2633 break;
2635 case Py_GT:
2636 if (len_self > len_other)
2637 ok = all_contained_in(other, self);
2638 break;
2640 case Py_GE:
2641 if (len_self >= len_other)
2642 ok = all_contained_in(other, self);
2643 break;
2646 if (ok < 0)
2647 return NULL;
2648 result = ok ? Py_True : Py_False;
2649 Py_INCREF(result);
2650 return result;
2653 static PyObject *
2654 dictview_repr(dictviewobject *dv)
2656 PyObject *seq;
2657 PyObject *result;
2659 seq = PySequence_List((PyObject *)dv);
2660 if (seq == NULL)
2661 return NULL;
2663 result = PyUnicode_FromFormat("%s(%R)", Py_TYPE(dv)->tp_name, seq);
2664 Py_DECREF(seq);
2665 return result;
2668 /*** dict_keys ***/
2670 static PyObject *
2671 dictkeys_iter(dictviewobject *dv)
2673 if (dv->dv_dict == NULL) {
2674 Py_RETURN_NONE;
2676 return dictiter_new(dv->dv_dict, &PyDictIterKey_Type);
2679 static int
2680 dictkeys_contains(dictviewobject *dv, PyObject *obj)
2682 if (dv->dv_dict == NULL)
2683 return 0;
2684 return PyDict_Contains((PyObject *)dv->dv_dict, obj);
2687 static PySequenceMethods dictkeys_as_sequence = {
2688 (lenfunc)dictview_len, /* sq_length */
2689 0, /* sq_concat */
2690 0, /* sq_repeat */
2691 0, /* sq_item */
2692 0, /* sq_slice */
2693 0, /* sq_ass_item */
2694 0, /* sq_ass_slice */
2695 (objobjproc)dictkeys_contains, /* sq_contains */
2698 static PyObject*
2699 dictviews_sub(PyObject* self, PyObject *other)
2701 PyObject *result = PySet_New(self);
2702 PyObject *tmp;
2703 if (result == NULL)
2704 return NULL;
2706 tmp = PyObject_CallMethod(result, "difference_update", "O", other);
2707 if (tmp == NULL) {
2708 Py_DECREF(result);
2709 return NULL;
2712 Py_DECREF(tmp);
2713 return result;
2716 static PyObject*
2717 dictviews_and(PyObject* self, PyObject *other)
2719 PyObject *result = PySet_New(self);
2720 PyObject *tmp;
2721 if (result == NULL)
2722 return NULL;
2724 tmp = PyObject_CallMethod(result, "intersection_update", "O", other);
2725 if (tmp == NULL) {
2726 Py_DECREF(result);
2727 return NULL;
2730 Py_DECREF(tmp);
2731 return result;
2734 static PyObject*
2735 dictviews_or(PyObject* self, PyObject *other)
2737 PyObject *result = PySet_New(self);
2738 PyObject *tmp;
2739 if (result == NULL)
2740 return NULL;
2742 tmp = PyObject_CallMethod(result, "update", "O", other);
2743 if (tmp == NULL) {
2744 Py_DECREF(result);
2745 return NULL;
2748 Py_DECREF(tmp);
2749 return result;
2752 static PyObject*
2753 dictviews_xor(PyObject* self, PyObject *other)
2755 PyObject *result = PySet_New(self);
2756 PyObject *tmp;
2757 if (result == NULL)
2758 return NULL;
2760 tmp = PyObject_CallMethod(result, "symmetric_difference_update", "O",
2761 other);
2762 if (tmp == NULL) {
2763 Py_DECREF(result);
2764 return NULL;
2767 Py_DECREF(tmp);
2768 return result;
2771 static PyNumberMethods dictviews_as_number = {
2772 0, /*nb_add*/
2773 (binaryfunc)dictviews_sub, /*nb_subtract*/
2774 0, /*nb_multiply*/
2775 0, /*nb_remainder*/
2776 0, /*nb_divmod*/
2777 0, /*nb_power*/
2778 0, /*nb_negative*/
2779 0, /*nb_positive*/
2780 0, /*nb_absolute*/
2781 0, /*nb_bool*/
2782 0, /*nb_invert*/
2783 0, /*nb_lshift*/
2784 0, /*nb_rshift*/
2785 (binaryfunc)dictviews_and, /*nb_and*/
2786 (binaryfunc)dictviews_xor, /*nb_xor*/
2787 (binaryfunc)dictviews_or, /*nb_or*/
2790 static PyMethodDef dictkeys_methods[] = {
2791 {NULL, NULL} /* sentinel */
2794 PyTypeObject PyDictKeys_Type = {
2795 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2796 "dict_keys", /* tp_name */
2797 sizeof(dictviewobject), /* tp_basicsize */
2798 0, /* tp_itemsize */
2799 /* methods */
2800 (destructor)dictview_dealloc, /* tp_dealloc */
2801 0, /* tp_print */
2802 0, /* tp_getattr */
2803 0, /* tp_setattr */
2804 0, /* tp_reserved */
2805 (reprfunc)dictview_repr, /* tp_repr */
2806 &dictviews_as_number, /* tp_as_number */
2807 &dictkeys_as_sequence, /* tp_as_sequence */
2808 0, /* tp_as_mapping */
2809 0, /* tp_hash */
2810 0, /* tp_call */
2811 0, /* tp_str */
2812 PyObject_GenericGetAttr, /* tp_getattro */
2813 0, /* tp_setattro */
2814 0, /* tp_as_buffer */
2815 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
2816 0, /* tp_doc */
2817 (traverseproc)dictview_traverse, /* tp_traverse */
2818 0, /* tp_clear */
2819 dictview_richcompare, /* tp_richcompare */
2820 0, /* tp_weaklistoffset */
2821 (getiterfunc)dictkeys_iter, /* tp_iter */
2822 0, /* tp_iternext */
2823 dictkeys_methods, /* tp_methods */
2827 static PyObject *
2828 dictkeys_new(PyObject *dict)
2830 return dictview_new(dict, &PyDictKeys_Type);
2833 /*** dict_items ***/
2835 static PyObject *
2836 dictitems_iter(dictviewobject *dv)
2838 if (dv->dv_dict == NULL) {
2839 Py_RETURN_NONE;
2841 return dictiter_new(dv->dv_dict, &PyDictIterItem_Type);
2844 static int
2845 dictitems_contains(dictviewobject *dv, PyObject *obj)
2847 PyObject *key, *value, *found;
2848 if (dv->dv_dict == NULL)
2849 return 0;
2850 if (!PyTuple_Check(obj) || PyTuple_GET_SIZE(obj) != 2)
2851 return 0;
2852 key = PyTuple_GET_ITEM(obj, 0);
2853 value = PyTuple_GET_ITEM(obj, 1);
2854 found = PyDict_GetItem((PyObject *)dv->dv_dict, key);
2855 if (found == NULL) {
2856 if (PyErr_Occurred())
2857 return -1;
2858 return 0;
2860 return PyObject_RichCompareBool(value, found, Py_EQ);
2863 static PySequenceMethods dictitems_as_sequence = {
2864 (lenfunc)dictview_len, /* sq_length */
2865 0, /* sq_concat */
2866 0, /* sq_repeat */
2867 0, /* sq_item */
2868 0, /* sq_slice */
2869 0, /* sq_ass_item */
2870 0, /* sq_ass_slice */
2871 (objobjproc)dictitems_contains, /* sq_contains */
2874 static PyMethodDef dictitems_methods[] = {
2875 {NULL, NULL} /* sentinel */
2878 PyTypeObject PyDictItems_Type = {
2879 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2880 "dict_items", /* tp_name */
2881 sizeof(dictviewobject), /* tp_basicsize */
2882 0, /* tp_itemsize */
2883 /* methods */
2884 (destructor)dictview_dealloc, /* tp_dealloc */
2885 0, /* tp_print */
2886 0, /* tp_getattr */
2887 0, /* tp_setattr */
2888 0, /* tp_reserved */
2889 (reprfunc)dictview_repr, /* tp_repr */
2890 &dictviews_as_number, /* tp_as_number */
2891 &dictitems_as_sequence, /* tp_as_sequence */
2892 0, /* tp_as_mapping */
2893 0, /* tp_hash */
2894 0, /* tp_call */
2895 0, /* tp_str */
2896 PyObject_GenericGetAttr, /* tp_getattro */
2897 0, /* tp_setattro */
2898 0, /* tp_as_buffer */
2899 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
2900 0, /* tp_doc */
2901 (traverseproc)dictview_traverse, /* tp_traverse */
2902 0, /* tp_clear */
2903 dictview_richcompare, /* tp_richcompare */
2904 0, /* tp_weaklistoffset */
2905 (getiterfunc)dictitems_iter, /* tp_iter */
2906 0, /* tp_iternext */
2907 dictitems_methods, /* tp_methods */
2911 static PyObject *
2912 dictitems_new(PyObject *dict)
2914 return dictview_new(dict, &PyDictItems_Type);
2917 /*** dict_values ***/
2919 static PyObject *
2920 dictvalues_iter(dictviewobject *dv)
2922 if (dv->dv_dict == NULL) {
2923 Py_RETURN_NONE;
2925 return dictiter_new(dv->dv_dict, &PyDictIterValue_Type);
2928 static PySequenceMethods dictvalues_as_sequence = {
2929 (lenfunc)dictview_len, /* sq_length */
2930 0, /* sq_concat */
2931 0, /* sq_repeat */
2932 0, /* sq_item */
2933 0, /* sq_slice */
2934 0, /* sq_ass_item */
2935 0, /* sq_ass_slice */
2936 (objobjproc)0, /* sq_contains */
2939 static PyMethodDef dictvalues_methods[] = {
2940 {NULL, NULL} /* sentinel */
2943 PyTypeObject PyDictValues_Type = {
2944 PyVarObject_HEAD_INIT(&PyType_Type, 0)
2945 "dict_values", /* tp_name */
2946 sizeof(dictviewobject), /* tp_basicsize */
2947 0, /* tp_itemsize */
2948 /* methods */
2949 (destructor)dictview_dealloc, /* tp_dealloc */
2950 0, /* tp_print */
2951 0, /* tp_getattr */
2952 0, /* tp_setattr */
2953 0, /* tp_reserved */
2954 (reprfunc)dictview_repr, /* tp_repr */
2955 0, /* tp_as_number */
2956 &dictvalues_as_sequence, /* tp_as_sequence */
2957 0, /* tp_as_mapping */
2958 0, /* tp_hash */
2959 0, /* tp_call */
2960 0, /* tp_str */
2961 PyObject_GenericGetAttr, /* tp_getattro */
2962 0, /* tp_setattro */
2963 0, /* tp_as_buffer */
2964 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
2965 0, /* tp_doc */
2966 (traverseproc)dictview_traverse, /* tp_traverse */
2967 0, /* tp_clear */
2968 0, /* tp_richcompare */
2969 0, /* tp_weaklistoffset */
2970 (getiterfunc)dictvalues_iter, /* tp_iter */
2971 0, /* tp_iternext */
2972 dictvalues_methods, /* tp_methods */
2976 static PyObject *
2977 dictvalues_new(PyObject *dict)
2979 return dictview_new(dict, &PyDictValues_Type);