Commit e2966a63 authored by Guido van Rossum's avatar Guido van Rossum

The cl_bases member of a class object is now never NULL.

parent 32c6cdf7
...@@ -42,10 +42,18 @@ newclassobject(bases, methods, name) ...@@ -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 ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment