mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			75 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/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
 |