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
|