• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef Py_INTERNAL_PARSER_H
2 #define Py_INTERNAL_PARSER_H
3 #ifdef __cplusplus
4 extern "C" {
5 #endif
6 
7 #ifndef Py_BUILD_CORE
8 #  error "this header requires Py_BUILD_CORE define"
9 #endif
10 
11 
12 #include "pycore_ast.h"             // struct _expr
13 #include "pycore_global_strings.h"  // _Py_DECLARE_STR()
14 #include "pycore_pyarena.h"         // PyArena
15 
16 
17 #ifdef Py_DEBUG
18 #define _PYPEGEN_NSTATISTICS 2000
19 #endif
20 
21 struct _parser_runtime_state {
22 #ifdef Py_DEBUG
23     long memo_statistics[_PYPEGEN_NSTATISTICS];
24 #ifdef Py_GIL_DISABLED
25     PyMutex mutex;
26 #endif
27 #else
28     int _not_used;
29 #endif
30     struct _expr dummy_name;
31 };
32 
33 _Py_DECLARE_STR(empty, "")
34 #if defined(Py_DEBUG) && defined(Py_GIL_DISABLED)
35 #define _parser_runtime_state_INIT \
36     { \
37         .mutex = {0}, \
38         .dummy_name = { \
39             .kind = Name_kind, \
40             .v.Name.id = &_Py_STR(empty), \
41             .v.Name.ctx = Load, \
42             .lineno = 1, \
43             .col_offset = 0, \
44             .end_lineno = 1, \
45             .end_col_offset = 0, \
46         }, \
47     }
48 #else
49 #define _parser_runtime_state_INIT \
50     { \
51         .dummy_name = { \
52             .kind = Name_kind, \
53             .v.Name.id = &_Py_STR(empty), \
54             .v.Name.ctx = Load, \
55             .lineno = 1, \
56             .col_offset = 0, \
57             .end_lineno = 1, \
58             .end_col_offset = 0, \
59         }, \
60     }
61 #endif
62 
63 extern struct _mod* _PyParser_ASTFromString(
64     const char *str,
65     PyObject* filename,
66     int mode,
67     PyCompilerFlags *flags,
68     PyArena *arena);
69 
70 extern struct _mod* _PyParser_ASTFromFile(
71     FILE *fp,
72     PyObject *filename_ob,
73     const char *enc,
74     int mode,
75     const char *ps1,
76     const char *ps2,
77     PyCompilerFlags *flags,
78     int *errcode,
79     PyArena *arena);
80 extern struct _mod* _PyParser_InteractiveASTFromFile(
81     FILE *fp,
82     PyObject *filename_ob,
83     const char *enc,
84     int mode,
85     const char *ps1,
86     const char *ps2,
87     PyCompilerFlags *flags,
88     int *errcode,
89     PyObject **interactive_src,
90     PyArena *arena);
91 
92 #ifdef __cplusplus
93 }
94 #endif
95 #endif /* !Py_INTERNAL_PARSER_H */
96