mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	bpo-33818: PyExceptionClass_Name() will now return "const char *". (GH-7581)
This commit is contained in:
		
							parent
							
								
									08f127a3ca
								
							
						
					
					
						commit
						ceeef10cdb
					
				
					 6 changed files with 14 additions and 9 deletions
				
			
		|  | @ -115,9 +115,13 @@ Optimizations | ||||||
|   first introduced in Python 3.4.  It offers better performance and smaller |   first introduced in Python 3.4.  It offers better performance and smaller | ||||||
|   size compared to Protocol 3 available since Python 3.0. |   size compared to Protocol 3 available since Python 3.0. | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| Build and C API Changes | Build and C API Changes | ||||||
| ======================= | ======================= | ||||||
| 
 | 
 | ||||||
|  | * The result of :c:func:`PyExceptionClass_Name` is now of type | ||||||
|  |   ``const char *`` rather of ``char *``. | ||||||
|  |   (Contributed by Serhiy Storchaka in :issue:`33818`.) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| Deprecated | Deprecated | ||||||
|  |  | ||||||
|  | @ -140,10 +140,9 @@ PyAPI_FUNC(void) _PyErr_ChainExceptions(PyObject *, PyObject *, PyObject *); | ||||||
| #define PyExceptionInstance_Check(x)                    \ | #define PyExceptionInstance_Check(x)                    \ | ||||||
|     PyType_FastSubclass((x)->ob_type, Py_TPFLAGS_BASE_EXC_SUBCLASS) |     PyType_FastSubclass((x)->ob_type, Py_TPFLAGS_BASE_EXC_SUBCLASS) | ||||||
| 
 | 
 | ||||||
| PyAPI_FUNC(char *) PyExceptionClass_Name(PyObject *); | PyAPI_FUNC(const char *) PyExceptionClass_Name(PyObject *); | ||||||
| #ifndef Py_LIMITED_API | #ifndef Py_LIMITED_API | ||||||
| #define PyExceptionClass_Name(x) \ | #define PyExceptionClass_Name(x)  (((PyTypeObject*)(x))->tp_name) | ||||||
|      ((char *)(((PyTypeObject *)(x))->tp_name)) |  | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #define PyExceptionInstance_Class(x) ((PyObject*)((x)->ob_type)) | #define PyExceptionInstance_Class(x) ((PyObject*)((x)->ob_type)) | ||||||
|  |  | ||||||
|  | @ -0,0 +1,2 @@ | ||||||
|  | :c:func:`PyExceptionClass_Name` will now return ``const char *`` instead of | ||||||
|  | ``char *``. | ||||||
|  | @ -344,10 +344,10 @@ PyException_SetContext(PyObject *self, PyObject *context) | ||||||
| 
 | 
 | ||||||
| #undef PyExceptionClass_Name | #undef PyExceptionClass_Name | ||||||
| 
 | 
 | ||||||
| char * | const char * | ||||||
| PyExceptionClass_Name(PyObject *ob) | PyExceptionClass_Name(PyObject *ob) | ||||||
| { | { | ||||||
|     return (char *)((PyTypeObject*)ob)->tp_name; |     return ((PyTypeObject*)ob)->tp_name; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static struct PyMemberDef BaseException_members[] = { | static struct PyMemberDef BaseException_members[] = { | ||||||
|  |  | ||||||
|  | @ -947,7 +947,7 @@ PyErr_WriteUnraisable(PyObject *obj) | ||||||
|     _Py_IDENTIFIER(__module__); |     _Py_IDENTIFIER(__module__); | ||||||
|     PyObject *f, *t, *v, *tb; |     PyObject *f, *t, *v, *tb; | ||||||
|     PyObject *moduleName = NULL; |     PyObject *moduleName = NULL; | ||||||
|     char* className; |     const char *className; | ||||||
| 
 | 
 | ||||||
|     PyErr_Fetch(&t, &v, &tb); |     PyErr_Fetch(&t, &v, &tb); | ||||||
| 
 | 
 | ||||||
|  | @ -977,7 +977,7 @@ PyErr_WriteUnraisable(PyObject *obj) | ||||||
|     assert(PyExceptionClass_Check(t)); |     assert(PyExceptionClass_Check(t)); | ||||||
|     className = PyExceptionClass_Name(t); |     className = PyExceptionClass_Name(t); | ||||||
|     if (className != NULL) { |     if (className != NULL) { | ||||||
|         char *dot = strrchr(className, '.'); |         const char *dot = strrchr(className, '.'); | ||||||
|         if (dot != NULL) |         if (dot != NULL) | ||||||
|             className = dot+1; |             className = dot+1; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -774,12 +774,12 @@ print_exception(PyObject *f, PyObject *value) | ||||||
|     } |     } | ||||||
|     else { |     else { | ||||||
|         PyObject* moduleName; |         PyObject* moduleName; | ||||||
|         char* className; |         const char *className; | ||||||
|         _Py_IDENTIFIER(__module__); |         _Py_IDENTIFIER(__module__); | ||||||
|         assert(PyExceptionClass_Check(type)); |         assert(PyExceptionClass_Check(type)); | ||||||
|         className = PyExceptionClass_Name(type); |         className = PyExceptionClass_Name(type); | ||||||
|         if (className != NULL) { |         if (className != NULL) { | ||||||
|             char *dot = strrchr(className, '.'); |             const char *dot = strrchr(className, '.'); | ||||||
|             if (dot != NULL) |             if (dot != NULL) | ||||||
|                 className = dot+1; |                 className = dot+1; | ||||||
|         } |         } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Serhiy Storchaka
						Serhiy Storchaka