diff options
author | Victor Stinner <vstinner@python.org> | 2022-05-04 11:30:23 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-04 11:30:23 (GMT) |
commit | d716a0dfe2d1029111db393afaecdb04cc4093de (patch) | |
tree | 2644817d65b365bf1dd2872661948d1b564bff32 /Parser/asdl_c.py | |
parent | 14243369b5f80613628a565c224bba7fb3fcacd8 (diff) | |
download | cpython-d716a0dfe2d1029111db393afaecdb04cc4093de.zip cpython-d716a0dfe2d1029111db393afaecdb04cc4093de.tar.gz cpython-d716a0dfe2d1029111db393afaecdb04cc4093de.tar.bz2 |
Use static inline function Py_EnterRecursiveCall() (#91988)
Currently, calling Py_EnterRecursiveCall() and
Py_LeaveRecursiveCall() may use a function call or a static inline
function call, depending if the internal pycore_ceval.h header file
is included or not. Use a different name for the static inline
function to ensure that the static inline function is always used in
Python internals for best performance. Similar approach than
PyThreadState_GET() (function call) and _PyThreadState_GET() (static
inline function).
* Rename _Py_EnterRecursiveCall() to _Py_EnterRecursiveCallTstate()
* Rename _Py_LeaveRecursiveCall() to _Py_LeaveRecursiveCallTstate()
* pycore_ceval.h: Rename Py_EnterRecursiveCall() to
_Py_EnterRecursiveCall() and Py_LeaveRecursiveCall() and
_Py_LeaveRecursiveCall()
Diffstat (limited to 'Parser/asdl_c.py')
-rwxr-xr-x | Parser/asdl_c.py | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py index 37925a5..3bfe320 100755 --- a/Parser/asdl_c.py +++ b/Parser/asdl_c.py @@ -490,11 +490,11 @@ class Obj2ModPrototypeVisitor(PickleVisitor): class Obj2ModVisitor(PickleVisitor): @contextmanager def recursive_call(self, node, level): - self.emit('if (Py_EnterRecursiveCall(" while traversing \'%s\' node")) {' % node, level, reflow=False) + self.emit('if (_Py_EnterRecursiveCall(" while traversing \'%s\' node")) {' % node, level, reflow=False) self.emit('goto failed;', level + 1) self.emit('}', level) yield - self.emit('Py_LeaveRecursiveCall();', level) + self.emit('_Py_LeaveRecursiveCall();', level) def funcHeader(self, name): ctype = get_c_type(name) @@ -1482,9 +1482,10 @@ def generate_module_def(mod, metadata, f, internal_h): print(textwrap.dedent(""" #include "Python.h" #include "pycore_ast.h" - #include "pycore_ast_state.h" // struct ast_state - #include "pycore_interp.h" // _PyInterpreterState.ast - #include "pycore_pystate.h" // _PyInterpreterState_GET() + #include "pycore_ast_state.h" // struct ast_state + #include "pycore_ceval.h" // _Py_EnterRecursiveCall + #include "pycore_interp.h" // _PyInterpreterState.ast + #include "pycore_pystate.h" // _PyInterpreterState_GET() #include "structmember.h" #include <stddef.h> |