mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	GH-107596: Specialize str[int] (GH-107597)
This commit is contained in:
		
							parent
							
								
									aab6f7173a
								
							
						
					
					
						commit
						ea72c6fe3b
					
				
					 10 changed files with 172 additions and 97 deletions
				
			
		|  | @ -509,6 +509,7 @@ dummy_func( | |||
|             BINARY_SUBSCR_DICT, | ||||
|             BINARY_SUBSCR_GETITEM, | ||||
|             BINARY_SUBSCR_LIST_INT, | ||||
|             BINARY_SUBSCR_STR_INT, | ||||
|             BINARY_SUBSCR_TUPLE_INT, | ||||
|         }; | ||||
| 
 | ||||
|  | @ -574,6 +575,21 @@ dummy_func( | |||
|             Py_DECREF(list); | ||||
|         } | ||||
| 
 | ||||
|         inst(BINARY_SUBSCR_STR_INT, (unused/1, str, sub -- res)) { | ||||
|             DEOPT_IF(!PyLong_CheckExact(sub), BINARY_SUBSCR); | ||||
|             DEOPT_IF(!PyUnicode_CheckExact(str), BINARY_SUBSCR); | ||||
|             DEOPT_IF(!_PyLong_IsNonNegativeCompact((PyLongObject *)sub), BINARY_SUBSCR); | ||||
|             Py_ssize_t index = ((PyLongObject*)sub)->long_value.ob_digit[0]; | ||||
|             DEOPT_IF(PyUnicode_GET_LENGTH(str) <= index, BINARY_SUBSCR); | ||||
|             // Specialize for reading an ASCII character from any string:
 | ||||
|             Py_UCS4 c = PyUnicode_READ_CHAR(str, index); | ||||
|             DEOPT_IF(Py_ARRAY_LENGTH(_Py_SINGLETON(strings).ascii) <= c, BINARY_SUBSCR); | ||||
|             STAT_INC(BINARY_SUBSCR, hit); | ||||
|             res = (PyObject*)&_Py_SINGLETON(strings).ascii[c]; | ||||
|             _Py_DECREF_SPECIALIZED(sub, (destructor)PyObject_Free); | ||||
|             Py_DECREF(str); | ||||
|         } | ||||
| 
 | ||||
|         inst(BINARY_SUBSCR_TUPLE_INT, (unused/1, tuple, sub -- res)) { | ||||
|             DEOPT_IF(!PyLong_CheckExact(sub), BINARY_SUBSCR); | ||||
|             DEOPT_IF(!PyTuple_CheckExact(tuple), BINARY_SUBSCR); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Brandt Bucher
						Brandt Bucher