mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +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)) {
 | 
					          UNLESS (__getinitargs__=PyObject_GetAttr(cls, __getinitargs___str)) {
 | 
				
			||||||
              /* We have a class with no __getinitargs__, so bypass usual
 | 
					              /* We have a class with no __getinitargs__, so bypass usual
 | 
				
			||||||
                 construction  */
 | 
					                 construction  */
 | 
				
			||||||
              PyInstanceObject *inst;
 | 
					              PyObject *inst;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
              PyErr_Clear();
 | 
					              PyErr_Clear();
 | 
				
			||||||
              UNLESS (inst=PyObject_New(PyInstanceObject, &PyInstance_Type))
 | 
					              UNLESS (inst=PyInstance_NewRaw(cls, NULL))
 | 
				
			||||||
                goto err;
 | 
					                goto err;
 | 
				
			||||||
              inst->in_class=(PyClassObject*)cls;
 | 
					              return inst;
 | 
				
			||||||
              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;
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          Py_DECREF(__getinitargs__);
 | 
					          Py_DECREF(__getinitargs__);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue