Re-factored PyInstance_New() into PyInstance_New() and PyInstance_NewRaw().

This commit is contained in:
Fred Drake 2001-01-28 03:53:08 +00:00
parent 05473edbe5
commit 5cc2c8c3c8
1 changed files with 36 additions and 15 deletions

View File

@ -428,27 +428,48 @@ PyClass_IsSubclass(PyObject *class, PyObject *base)
/* Instance objects */
PyObject *
PyInstance_New(PyObject *class, PyObject *arg, PyObject *kw)
PyInstance_NewRaw(PyObject *klass, PyObject *dict)
{
PyInstanceObject *inst;
if (!PyClass_Check(klass)) {
PyErr_BadInternalCall();
return NULL;
}
if (dict == NULL) {
dict = PyDict_New();
if (dict == NULL)
return NULL;
}
else {
if (!PyDict_Check(dict)) {
PyErr_BadInternalCall();
return NULL;
}
Py_INCREF(dict);
}
inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
if (inst == NULL) {
Py_DECREF(dict);
return NULL;
}
Py_INCREF(klass);
inst->in_class = (PyClassObject *)klass;
inst->in_dict = dict;
PyObject_GC_Init(inst);
return (PyObject *)inst;
}
PyObject *
PyInstance_New(PyObject *klass, PyObject *arg, PyObject *kw)
{
register PyInstanceObject *inst;
PyObject *init;
static PyObject *initstr;
if (!PyClass_Check(class)) {
PyErr_BadInternalCall();
return NULL;
}
inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
inst = (PyInstanceObject *) PyInstance_NewRaw(klass, NULL);
if (inst == NULL)
return NULL;
inst->in_dict = PyDict_New();
if (inst->in_dict == NULL) {
inst = (PyInstanceObject *) PyObject_AS_GC(inst);
PyObject_DEL(inst);
return NULL;
}
Py_INCREF(class);
inst->in_class = (PyClassObject *)class;
PyObject_GC_Init(inst);
if (initstr == NULL)
initstr = PyString_InternFromString("__init__");
init = instance_getattr2(inst, initstr);