mirror of
https://github.com/python/cpython.git
synced 2025-11-02 03:01:58 +00:00
Make cPickle use the recently-added PyInstance_NewRaw() API to create
instance objects without calling the constructor. This is the same as the new.instance() function.
This commit is contained in:
parent
53f5968f9b
commit
2c77355937
1 changed files with 3 additions and 11 deletions
|
|
@ -2922,20 +2922,12 @@ Instance_New(PyObject *cls, PyObject *args) {
|
|||
UNLESS (__getinitargs__=PyObject_GetAttr(cls, __getinitargs___str)) {
|
||||
/* We have a class with no __getinitargs__, so bypass usual
|
||||
construction */
|
||||
PyInstanceObject *inst;
|
||||
PyObject *inst;
|
||||
|
||||
PyErr_Clear();
|
||||
UNLESS (inst=PyObject_New(PyInstanceObject, &PyInstance_Type))
|
||||
UNLESS (inst=PyInstance_NewRaw(cls, NULL))
|
||||
goto err;
|
||||
inst->in_class=(PyClassObject*)cls;
|
||||
Py_INCREF(cls);
|
||||
UNLESS (inst->in_dict=PyDict_New()) {
|
||||
inst = (PyInstanceObject *) PyObject_AS_GC(inst);
|
||||
PyObject_DEL(inst);
|
||||
goto err;
|
||||
}
|
||||
PyObject_GC_Init(inst);
|
||||
return (PyObject *)inst;
|
||||
return inst;
|
||||
}
|
||||
Py_DECREF(__getinitargs__);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue