Add list() method, analogous to tuple().

This commit is contained in:
Guido van Rossum 1996-04-09 02:41:06 +00:00
parent a5a3db70d4
commit d17057745c
1 changed files with 36 additions and 0 deletions

View File

@ -844,6 +844,41 @@ builtin_len(self, args)
return newintobject(len); return newintobject(len);
} }
static object *
builtin_list(self, args)
object *self;
object *args;
{
object *v;
sequence_methods *sqf;
if (!newgetargs(args, "O:list", &v))
return NULL;
if ((sqf = v->ob_type->tp_as_sequence) != NULL) {
int n = (*sqf->sq_length)(v);
int i;
object *l;
if (n < 0)
return NULL;
l = newlistobject(n);
if (l == NULL)
return NULL;
for (i = 0; i < n; i++) {
object *item = (*sqf->sq_item)(v, i);
if (item == NULL) {
DECREF(l);
l = NULL;
break;
}
setlistitem(l, i, item);
}
/* XXX Should support indefinite-length sequences */
return l;
}
err_setstr(TypeError, "list() argument must be a sequence");
return NULL;
}
static object * static object *
builtin_locals(self, args) builtin_locals(self, args)
object *self; object *self;
@ -1462,6 +1497,7 @@ static struct methodlist builtin_methods[] = {
{"input", builtin_input, 1}, {"input", builtin_input, 1},
{"int", builtin_int, 1}, {"int", builtin_int, 1},
{"len", builtin_len, 1}, {"len", builtin_len, 1},
{"list", builtin_list, 1},
{"locals", builtin_locals, 1}, {"locals", builtin_locals, 1},
{"long", builtin_long, 1}, {"long", builtin_long, 1},
{"map", builtin_map, 1}, {"map", builtin_map, 1},