diff options
author | Fred Drake <fdrake@acm.org> | 2001-01-28 03:55:09 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2001-01-28 03:55:09 (GMT) |
commit | ceb2bff09ee06304ce4d2c49ecd79bac7fd84298 (patch) | |
tree | b7018ab94bed48373570c2ff07671cdde25a2857 | |
parent | 5cc2c8c3c8d9809c45fee8d638dae431b56e773d (diff) | |
download | cpython-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.
-rw-r--r-- | Modules/newmodule.c | 32 |
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[] = |