mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
	
	
		
			76 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			76 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| 
								 | 
							
								#!/usr/bin/env bash
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Any PyObject exposed via the public API is problematic since it must
							 | 
						||
| 
								 | 
							
								# be made per-interpreter.  This involves the following:
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# singletons:
							 | 
						||
| 
								 | 
							
								#  - None
							 | 
						||
| 
								 | 
							
								#  - True
							 | 
						||
| 
								 | 
							
								#  - False
							 | 
						||
| 
								 | 
							
								#  - NotImplemented
							 | 
						||
| 
								 | 
							
								#  - Ellipsis
							 | 
						||
| 
								 | 
							
								# PyTypeObject:
							 | 
						||
| 
								 | 
							
								#  - PyExc*  [97]
							 | 
						||
| 
								 | 
							
								#  - static types  [81]
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# In the non-stable API we could use #defines to do the conversion
							 | 
						||
| 
								 | 
							
								# transparently (though Py_None is perhaps problematic for performance
							 | 
						||
| 
								 | 
							
								# reasons).  However, we can't take that approach with the stable API.
							 | 
						||
| 
								 | 
							
								# That means we must find all functions (& macros) in the stable API
							 | 
						||
| 
								 | 
							
								# (and probably the full public API, for sanity sake) and adjust them.
							 | 
						||
| 
								 | 
							
								# This will involve internally converting from the public object to the
							 | 
						||
| 
								 | 
							
								# corresponding per-interpreter object.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Note that the only place this solution fails is with direct pointer
							 | 
						||
| 
								 | 
							
								# equality checks with the public objects.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# XXX What about saying that the stable API is not sub-interpreter
							 | 
						||
| 
								 | 
							
								# compatible?
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function run_capi() {
							 | 
						||
| 
								 | 
							
								    ./python Tools/c-analyzer/c-analyzer.py capi \
							 | 
						||
| 
								 | 
							
								        --no-progress \
							 | 
						||
| 
								 | 
							
								        --group-by kind \
							 | 
						||
| 
								 | 
							
								        --func --inline --macro \
							 | 
						||
| 
								 | 
							
								        --no-show-empty \
							 | 
						||
| 
								 | 
							
								        --ignore '<must-resolve.ignored>' \
							 | 
						||
| 
								 | 
							
								        $@
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								echo ''
							 | 
						||
| 
								 | 
							
								echo '#################################################'
							 | 
						||
| 
								 | 
							
								echo '# All API'
							 | 
						||
| 
								 | 
							
								echo '#################################################'
							 | 
						||
| 
								 | 
							
								run_capi --format summary Include/*.h Include/cpython/*.h
							 | 
						||
| 
								 | 
							
								run_capi --format table Include/*.h Include/cpython/*.h
							 | 
						||
| 
								 | 
							
								echo ''
							 | 
						||
| 
								 | 
							
								echo ''
							 | 
						||
| 
								 | 
							
								echo '#################################################'
							 | 
						||
| 
								 | 
							
								echo '# stable API'
							 | 
						||
| 
								 | 
							
								echo '#################################################'
							 | 
						||
| 
								 | 
							
								echo ''
							 | 
						||
| 
								 | 
							
								echo '# public:'
							 | 
						||
| 
								 | 
							
								run_capi --format summary --public --no-show-empty Include/*.h
							 | 
						||
| 
								 | 
							
								echo ''
							 | 
						||
| 
								 | 
							
								echo '# private:'
							 | 
						||
| 
								 | 
							
								run_capi --format summary --private --no-show-empty Include/*.h
							 | 
						||
| 
								 | 
							
								echo ''
							 | 
						||
| 
								 | 
							
								run_capi --format full -v Include/*.h
							 | 
						||
| 
								 | 
							
								#run_capi --format full -v --public Include/*.h
							 | 
						||
| 
								 | 
							
								#run_capi --format full -v --private Include/*.h
							 | 
						||
| 
								 | 
							
								echo ''
							 | 
						||
| 
								 | 
							
								echo '#################################################'
							 | 
						||
| 
								 | 
							
								echo '# cpython API'
							 | 
						||
| 
								 | 
							
								echo '#################################################'
							 | 
						||
| 
								 | 
							
								echo ''
							 | 
						||
| 
								 | 
							
								echo '# public:'
							 | 
						||
| 
								 | 
							
								run_capi --format summary --public --no-show-empty Include/cpython/*.h
							 | 
						||
| 
								 | 
							
								echo ''
							 | 
						||
| 
								 | 
							
								echo '# private:'
							 | 
						||
| 
								 | 
							
								run_capi --format summary --private --no-show-empty Include/cpython/*.h
							 | 
						||
| 
								 | 
							
								echo ''
							 | 
						||
| 
								 | 
							
								run_capi --format full -v Include/cpython/*.h
							 | 
						||
| 
								 | 
							
								#run_capi --format full -v --public Include/cpython/*.h
							 | 
						||
| 
								 | 
							
								#run_capi --format full -v --private Include/cpython/*.h
							 |