mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	Variation of patch # 1624059 to speed up checking if an object is a subclass
of some of the common builtin types. Use a bit in tp_flags for each common builtin type. Check the bit to determine if any instance is a subclass of these common types. The check avoids a function call and O(n) search of the base classes. The check is done in the various Py*_Check macros rather than calling PyType_IsSubtype(). All the bits are set in tp_flags when the type is declared in the Objects/*object.c files because PyType_Ready() is not called for all the types. Should PyType_Ready() be called for all types? If so and the change is made, the changes to the Objects/*object.c files can be reverted (remove setting the tp_flags). Objects/typeobject.c would also have to be modified to add conditions for Py*_CheckExact() in addition to each the PyType_IsSubtype check.
This commit is contained in:
		
							parent
							
								
									5a3e812444
								
							
						
					
					
						commit
						ee3a1b5244
					
				
					 18 changed files with 61 additions and 22 deletions
				
			
		|  | @ -7967,7 +7967,7 @@ PyTypeObject PyUnicode_Type = { | |||
|     0,			 		/* tp_setattro */ | ||||
|     &unicode_as_buffer,			/* tp_as_buffer */ | ||||
|     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES | | ||||
| 	    Py_TPFLAGS_BASETYPE,	/* tp_flags */ | ||||
| 	    Py_TPFLAGS_BASETYPE | Py_TPFLAGS_UNICODE_SUBCLASS,	/* tp_flags */ | ||||
|     unicode_doc,			/* tp_doc */ | ||||
|     0,					/* tp_traverse */ | ||||
|     0,					/* tp_clear */ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Neal Norwitz
						Neal Norwitz