summaryrefslogtreecommitdiffstats
path: root/Modules/newmodule.c
diff options
context:
space:
mode:
authorFred Drake <fdrake@acm.org>2001-01-28 03:55:09 (GMT)
committerFred Drake <fdrake@acm.org>2001-01-28 03:55:09 (GMT)
commitceb2bff09ee06304ce4d2c49ecd79bac7fd84298 (patch)
treeb7018ab94bed48373570c2ff07671cdde25a2857 /Modules/newmodule.c
parent5cc2c8c3c8d9809c45fee8d638dae431b56e773d (diff)
downloadcpython-ceb2bff09ee06304ce4d2c49ecd79bac7fd84298.zip
cpython-ceb2bff09ee06304ce4d2c49ecd79bac7fd84298.tar.gz
cpython-ceb2bff09ee06304ce4d2c49ecd79bac7fd84298.tar.bz2
new_instance(): Use PyInstance_NewRaw() instead of knowing too much
about the internal initialization of instance objects. Make the dict parameter optional, and allow None as equivalent to omission.
Diffstat (limited to 'Modules/newmodule.c')
-rw-r--r--Modules/newmodule.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/Modules/newmodule.c b/Modules/newmodule.c
index 06b7d82..7c7bee7 100644
--- a/Modules/newmodule.c
+++ b/Modules/newmodule.c
@@ -5,27 +5,29 @@
#include "compile.h"
static char new_instance_doc[] =
-"Create an instance object from (CLASS, DICT) without calling its __init__().";
+"Create an instance object from (CLASS [, DICT]) without calling its\n\
+__init__() method. DICT must be a dictionary or None.";
static PyObject *
new_instance(PyObject* unused, PyObject* args)
{
- PyObject* klass;
- PyObject *dict;
- PyInstanceObject *inst;
- if (!PyArg_ParseTuple(args, "O!O!:instance",
- &PyClass_Type, &klass,
- &PyDict_Type, &dict))
+ PyObject *klass;
+ PyObject *dict = NULL;
+
+ if (!PyArg_ParseTuple(args, "O!|O:instance",
+ &PyClass_Type, &klass, &dict))
return NULL;
- inst = PyObject_New(PyInstanceObject, &PyInstance_Type);
- if (inst == NULL)
+
+ if (dict == Py_None)
+ dict = NULL;
+ else if (dict == NULL)
+ /* do nothing */;
+ else if (!PyDict_Check(dict)) {
+ PyErr_SetString(PyExc_TypeError,
+ "new.instance() second arg must be dictionary or None");
return NULL;
- Py_INCREF(klass);
- Py_INCREF(dict);
- inst->in_class = (PyClassObject *)klass;
- inst->in_dict = dict;
- PyObject_GC_Init(inst);
- return (PyObject *)inst;
+ }
+ return PyInstance_NewRaw(klass, dict);
}
static char new_im_doc[] =