Kaydet (Commit) 5cc2c8c3 authored tarafından Fred Drake's avatar Fred Drake

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

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