diff options
author | Guido van Rossum <guido@python.org> | 1991-10-20 20:20:40 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1991-10-20 20:20:40 (GMT) |
commit | e6f7d18e6b303f1e2613d0b016bd0dfb6fd337a1 (patch) | |
tree | 22b8ff0e06b71d42ab207f8d063e68a37fe51aed /Objects/listobject.c | |
parent | c64d04dedd1800cfc02a72e0109f0b806f644535 (diff) | |
download | cpython-e6f7d18e6b303f1e2613d0b016bd0dfb6fd337a1.zip cpython-e6f7d18e6b303f1e2613d0b016bd0dfb6fd337a1.tar.gz cpython-e6f7d18e6b303f1e2613d0b016bd0dfb6fd337a1.tar.bz2 |
Added count() method.
Changed some conditional INCREFs into XINCREFs.
Diffstat (limited to 'Objects/listobject.c')
-rw-r--r-- | Objects/listobject.c | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/Objects/listobject.c b/Objects/listobject.c index 4026622..18bdbca 100644 --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -94,21 +94,18 @@ setlistitem(op, i, newitem) { register object *olditem; if (!is_listobject(op)) { - if (newitem != NULL) - DECREF(newitem); + XDECREF(newitem); err_badcall(); return -1; } if (i < 0 || i >= ((listobject *)op) -> ob_size) { - if (newitem != NULL) - DECREF(newitem); + XDECREF(newitem); err_setstr(IndexError, "list assignment index out of range"); return -1; } olditem = ((listobject *)op) -> ob_item[i]; ((listobject *)op) -> ob_item[i] = newitem; - if (olditem != NULL) - DECREF(olditem); + XDECREF(olditem); return 0; } @@ -177,8 +174,7 @@ list_dealloc(op) { int i; for (i = 0; i < op->ob_size; i++) { - if (op->ob_item[i] != NULL) - DECREF(op->ob_item[i]); + XDECREF(op->ob_item[i]); } if (op->ob_item != NULL) free((ANY *)op->ob_item); @@ -552,6 +548,25 @@ listindex(self, args) } static object * +listcount(self, args) + listobject *self; + object *args; +{ + int count = 0; + int i; + + if (args == NULL) { + err_badarg(); + return NULL; + } + for (i = 0; i < self->ob_size; i++) { + if (cmpobject(self->ob_item[i], args) == 0) + count++; + } + return newintobject((long)count); +} + +static object * listremove(self, args) listobject *self; object *args; @@ -577,6 +592,7 @@ listremove(self, args) static struct methodlist list_methods[] = { {"append", listappend}, + {"count", listcount}, {"index", listindex}, {"insert", listinsert}, {"sort", listsort}, |