mirror of
https://github.com/python/cpython.git
synced 2025-09-05 00:11:10 +00:00
The cl_bases member of a class object is now never NULL.
This commit is contained in:
parent
32c6cdf776
commit
e2966a6362
1 changed files with 15 additions and 8 deletions
|
@ -42,10 +42,18 @@ newclassobject(bases, methods, name)
|
||||||
object *name; /* String; NULL if unknown */
|
object *name; /* String; NULL if unknown */
|
||||||
{
|
{
|
||||||
classobject *op;
|
classobject *op;
|
||||||
|
if (bases == NULL) {
|
||||||
|
bases = newtupleobject(0);
|
||||||
|
if (bases == NULL)
|
||||||
|
return err_nomem();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
INCREF(bases);
|
||||||
op = NEWOBJ(classobject, &Classtype);
|
op = NEWOBJ(classobject, &Classtype);
|
||||||
if (op == NULL)
|
if (op == NULL) {
|
||||||
|
DECREF(bases);
|
||||||
return NULL;
|
return NULL;
|
||||||
XINCREF(bases);
|
}
|
||||||
op->cl_bases = bases;
|
op->cl_bases = bases;
|
||||||
INCREF(methods);
|
INCREF(methods);
|
||||||
op->cl_methods = methods;
|
op->cl_methods = methods;
|
||||||
|
@ -60,7 +68,8 @@ static void
|
||||||
class_dealloc(op)
|
class_dealloc(op)
|
||||||
classobject *op;
|
classobject *op;
|
||||||
{
|
{
|
||||||
XDECREF(op->cl_bases);
|
int i;
|
||||||
|
DECREF(op->cl_bases);
|
||||||
DECREF(op->cl_methods);
|
DECREF(op->cl_methods);
|
||||||
XDECREF(op->cl_name);
|
XDECREF(op->cl_name);
|
||||||
free((ANY *)op);
|
free((ANY *)op);
|
||||||
|
@ -77,8 +86,6 @@ class_getattr(op, name)
|
||||||
return op->cl_methods;
|
return op->cl_methods;
|
||||||
}
|
}
|
||||||
if (strcmp(name, "__bases__") == 0) {
|
if (strcmp(name, "__bases__") == 0) {
|
||||||
if (op->cl_bases == NULL)
|
|
||||||
return newtupleobject(0);
|
|
||||||
INCREF(op->cl_bases);
|
INCREF(op->cl_bases);
|
||||||
return op->cl_bases;
|
return op->cl_bases;
|
||||||
}
|
}
|
||||||
|
@ -95,7 +102,7 @@ class_getattr(op, name)
|
||||||
INCREF(v);
|
INCREF(v);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
if (op->cl_bases != NULL) {
|
{
|
||||||
int n = gettuplesize(op->cl_bases);
|
int n = gettuplesize(op->cl_bases);
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
|
@ -105,7 +112,7 @@ class_getattr(op, name)
|
||||||
err_clear();
|
err_clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
err_setstr(NameError, name);
|
err_setstr(AttributeError, name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -209,7 +216,7 @@ instance_getattr(inst, name)
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
DECREF(v);
|
DECREF(v);
|
||||||
err_setstr(NameError, name);
|
err_setstr(AttributeError, name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue