mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	 1f777396f5
			
		
	
	
		1f777396f5
		
			
		
	
	
	
	
		
			
			Move creation of a tuple for var-positional parameter out of _PyArg_UnpackKeywordsWithVararg(). Merge _PyArg_UnpackKeywordsWithVararg() with _PyArg_UnpackKeywords(). Add a new parameter in _PyArg_UnpackKeywords(). The "parameters" and "converters" attributes of ParseArgsCodeGen no longer contain the var-positional parameter. It is now available as the "varpos" attribute. Optimize code generation for var-positional parameter and reuse the same generating code for functions with and without keyword parameters. Add special converters for var-positional parameter. "tuple" represents it as a Python tuple and "array" represents it as a continuous array of PyObject*. "object" is a temporary alias of "tuple".
		
			
				
	
	
		
			36 lines
		
	
	
	
		
			914 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
	
		
			914 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef Py_INTERNAL_TUPLE_H
 | |
| #define Py_INTERNAL_TUPLE_H
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| #ifndef Py_BUILD_CORE
 | |
| #  error "this header requires Py_BUILD_CORE define"
 | |
| #endif
 | |
| 
 | |
| extern void _PyTuple_MaybeUntrack(PyObject *);
 | |
| extern void _PyTuple_DebugMallocStats(FILE *out);
 | |
| 
 | |
| /* runtime lifecycle */
 | |
| 
 | |
| extern PyStatus _PyTuple_InitGlobalObjects(PyInterpreterState *);
 | |
| 
 | |
| 
 | |
| /* other API */
 | |
| 
 | |
| #define _PyTuple_ITEMS(op) _Py_RVALUE(_PyTuple_CAST(op)->ob_item)
 | |
| 
 | |
| PyAPI_FUNC(PyObject *)_PyTuple_FromArray(PyObject *const *, Py_ssize_t);
 | |
| PyAPI_FUNC(PyObject *)_PyTuple_FromStackRefSteal(const union _PyStackRef *, Py_ssize_t);
 | |
| PyAPI_FUNC(PyObject *)_PyTuple_FromArraySteal(PyObject *const *, Py_ssize_t);
 | |
| 
 | |
| typedef struct {
 | |
|     PyObject_HEAD
 | |
|     Py_ssize_t it_index;
 | |
|     PyTupleObject *it_seq; /* Set to NULL when iterator is exhausted */
 | |
| } _PyTupleIterObject;
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| #endif   /* !Py_INTERNAL_TUPLE_H */
 |