]> granicus.if.org Git - python/commitdiff
Re-factored PyInstance_New() into PyInstance_New() and PyInstance_NewRaw().
authorFred Drake <fdrake@acm.org>
Sun, 28 Jan 2001 03:53:08 +0000 (03:53 +0000)
committerFred Drake <fdrake@acm.org>
Sun, 28 Jan 2001 03:53:08 +0000 (03:53 +0000)
Objects/classobject.c

index 40ff9839b9368a8d67422ea92ba2b3c18d2fc3b2..60214a44226608bda984286d57e987fc8096f358 100644 (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)
 {
-       register PyInstanceObject *inst;
-       PyObject *init;
-       static PyObject *initstr;
-       if (!PyClass_Check(class)) {
+       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)
-               return NULL;
-       inst->in_dict = PyDict_New();
-       if (inst->in_dict == NULL) {
-               inst = (PyInstanceObject *) PyObject_AS_GC(inst);
-               PyObject_DEL(inst);
+       if (inst == NULL) {
+               Py_DECREF(dict);
                return NULL;
        }
-       Py_INCREF(class);
-       inst->in_class = (PyClassObject *)class;
+       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;
+
+       inst = (PyInstanceObject *) PyInstance_NewRaw(klass, NULL);
+       if (inst == NULL)
+               return NULL;
        if (initstr == NULL)
                initstr = PyString_InternFromString("__init__");
        init = instance_getattr2(inst, initstr);