mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	bpo-27535: Cleanup create_filter() (#4516)
create_filter() now expects the action as a _Py_Identifier which avoids string comparison, and more important, to avoid handling the "unknown action" annoying case.
This commit is contained in:
		
							parent
							
								
									0327bde9da
								
							
						
					
					
						commit
						b98f1715a3
					
				
					 1 changed files with 18 additions and 38 deletions
				
			
		|  | @ -11,6 +11,10 @@ MODULE_NAME " provides basic warning filtering support.\n" | |||
| 
 | ||||
| _Py_IDENTIFIER(argv); | ||||
| _Py_IDENTIFIER(stderr); | ||||
| _Py_IDENTIFIER(ignore); | ||||
| _Py_IDENTIFIER(error); | ||||
| _Py_IDENTIFIER(always); | ||||
| _Py_static_string(PyId_default, "default"); | ||||
| 
 | ||||
| static int | ||||
| check_matched(PyObject *obj, PyObject *arg) | ||||
|  | @ -1149,31 +1153,8 @@ static PyMethodDef warnings_functions[] = { | |||
| 
 | ||||
| 
 | ||||
| static PyObject * | ||||
| create_filter(PyObject *category, const char *action) | ||||
| create_filter(PyObject *category, _Py_Identifier *id) | ||||
| { | ||||
|     _Py_IDENTIFIER(ignore); | ||||
|     _Py_IDENTIFIER(error); | ||||
|     _Py_IDENTIFIER(always); | ||||
|     _Py_static_string(PyId_default, "default"); | ||||
|     _Py_Identifier *id; | ||||
| 
 | ||||
|     if (!strcmp(action, "ignore")) { | ||||
|         id = &PyId_ignore; | ||||
|     } | ||||
|     else if (!strcmp(action, "error")) { | ||||
|         id = &PyId_error; | ||||
|     } | ||||
|     else if (!strcmp(action, "default")) { | ||||
|         id = &PyId_default; | ||||
|     } | ||||
|     else if (!strcmp(action, "always")) { | ||||
|         id = &PyId_always; | ||||
|     } | ||||
|     else { | ||||
|         PyErr_SetString(PyExc_ValueError, "unknown action"); | ||||
|         return NULL; | ||||
|     } | ||||
| 
 | ||||
|     PyObject *action_str = _PyUnicode_FromId(id); | ||||
|     if (action_str == NULL) { | ||||
|         return NULL; | ||||
|  | @ -1199,48 +1180,47 @@ init_filters(const _PyCoreConfig *config) | |||
|     } | ||||
| #endif | ||||
|     PyObject *filters = PyList_New(count); | ||||
|     unsigned int pos = 0;  /* Post-incremented in each use. */ | ||||
|     unsigned int x; | ||||
|     const char *bytes_action, *resource_action; | ||||
| 
 | ||||
|     if (filters == NULL) | ||||
|         return NULL; | ||||
| 
 | ||||
|     size_t pos = 0;  /* Post-incremented in each use. */ | ||||
| #ifndef Py_DEBUG | ||||
|     if (!dev_mode) { | ||||
|         PyList_SET_ITEM(filters, pos++, | ||||
|                         create_filter(PyExc_DeprecationWarning, "ignore")); | ||||
|                         create_filter(PyExc_DeprecationWarning, &PyId_ignore)); | ||||
|         PyList_SET_ITEM(filters, pos++, | ||||
|                         create_filter(PyExc_PendingDeprecationWarning, "ignore")); | ||||
|                         create_filter(PyExc_PendingDeprecationWarning, &PyId_ignore)); | ||||
|         PyList_SET_ITEM(filters, pos++, | ||||
|                         create_filter(PyExc_ImportWarning, "ignore")); | ||||
|                         create_filter(PyExc_ImportWarning, &PyId_ignore)); | ||||
|     } | ||||
| #endif | ||||
| 
 | ||||
|     _Py_Identifier *bytes_action; | ||||
|     if (Py_BytesWarningFlag > 1) | ||||
|         bytes_action = "error"; | ||||
|         bytes_action = &PyId_error; | ||||
|     else if (Py_BytesWarningFlag) | ||||
|         bytes_action = "default"; | ||||
|         bytes_action = &PyId_default; | ||||
|     else | ||||
|         bytes_action = "ignore"; | ||||
|         bytes_action = &PyId_ignore; | ||||
|     PyList_SET_ITEM(filters, pos++, create_filter(PyExc_BytesWarning, | ||||
|                     bytes_action)); | ||||
| 
 | ||||
|     _Py_Identifier *resource_action; | ||||
|     /* resource usage warnings are enabled by default in pydebug mode */ | ||||
| #ifdef Py_DEBUG | ||||
|     resource_action = "always"; | ||||
|     resource_action = &PyId_always; | ||||
| #else | ||||
|     resource_action = (dev_mode ? "always" : "ignore"); | ||||
|     resource_action = (dev_mode ? &PyId_always : &PyId_ignore); | ||||
| #endif | ||||
|     PyList_SET_ITEM(filters, pos++, create_filter(PyExc_ResourceWarning, | ||||
|                     resource_action)); | ||||
| 
 | ||||
|     if (dev_mode) { | ||||
|         PyList_SET_ITEM(filters, pos++, | ||||
|                         create_filter(PyExc_Warning, "default")); | ||||
|                         create_filter(PyExc_Warning, &PyId_default)); | ||||
|     } | ||||
| 
 | ||||
|     for (x = 0; x < pos; x += 1) { | ||||
|     for (size_t x = 0; x < pos; x++) { | ||||
|         if (PyList_GET_ITEM(filters, x) == NULL) { | ||||
|             Py_DECREF(filters); | ||||
|             return NULL; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Victor Stinner
						Victor Stinner