mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	gh-134043: use _PyObject_GetMethodStackRef in pattern matching (#136356)
				
					
				
			This commit is contained in:
		
							parent
							
								
									5b78c85fb4
								
							
						
					
					
						commit
						89f06a38c0
					
				
					 1 changed files with 6 additions and 4 deletions
				
			
		|  | @ -627,12 +627,14 @@ _PyEval_MatchKeys(PyThreadState *tstate, PyObject *map, PyObject *keys) | |||
|     PyObject *seen = NULL; | ||||
|     PyObject *dummy = NULL; | ||||
|     PyObject *values = NULL; | ||||
|     PyObject *get = NULL; | ||||
|     // We use the two argument form of map.get(key, default) for two reasons:
 | ||||
|     // - Atomically check for a key and get its value without error handling.
 | ||||
|     // - Don't cause key creation or resizing in dict subclasses like
 | ||||
|     //   collections.defaultdict that define __missing__ (or similar).
 | ||||
|     int meth_found = _PyObject_GetMethod(map, &_Py_ID(get), &get); | ||||
|     _PyCStackRef cref; | ||||
|     _PyThreadState_PushCStackRef(tstate, &cref); | ||||
|     int meth_found = _PyObject_GetMethodStackRef(tstate, map, &_Py_ID(get), &cref.ref); | ||||
|     PyObject *get = PyStackRef_AsPyObjectBorrow(cref.ref); | ||||
|     if (get == NULL) { | ||||
|         goto fail; | ||||
|     } | ||||
|  | @ -682,12 +684,12 @@ _PyEval_MatchKeys(PyThreadState *tstate, PyObject *map, PyObject *keys) | |||
|     } | ||||
|     // Success:
 | ||||
| done: | ||||
|     Py_DECREF(get); | ||||
|     _PyThreadState_PopCStackRef(tstate, &cref); | ||||
|     Py_DECREF(seen); | ||||
|     Py_DECREF(dummy); | ||||
|     return values; | ||||
| fail: | ||||
|     Py_XDECREF(get); | ||||
|     _PyThreadState_PopCStackRef(tstate, &cref); | ||||
|     Py_XDECREF(seen); | ||||
|     Py_XDECREF(dummy); | ||||
|     Py_XDECREF(values); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Kumar Aditya
						Kumar Aditya