mirror of https://github.com/python/cpython
96 lines
2.0 KiB
C
96 lines
2.0 KiB
C
#ifndef Py_INTERNAL_PARSER_H
|
|
#define Py_INTERNAL_PARSER_H
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifndef Py_BUILD_CORE
|
|
# error "this header requires Py_BUILD_CORE define"
|
|
#endif
|
|
|
|
|
|
#include "pycore_ast.h" // struct _expr
|
|
#include "pycore_global_strings.h" // _Py_DECLARE_STR()
|
|
#include "pycore_pyarena.h" // PyArena
|
|
|
|
|
|
#ifdef Py_DEBUG
|
|
#define _PYPEGEN_NSTATISTICS 2000
|
|
#endif
|
|
|
|
struct _parser_runtime_state {
|
|
#ifdef Py_DEBUG
|
|
long memo_statistics[_PYPEGEN_NSTATISTICS];
|
|
#ifdef Py_GIL_DISABLED
|
|
PyMutex mutex;
|
|
#endif
|
|
#else
|
|
int _not_used;
|
|
#endif
|
|
struct _expr dummy_name;
|
|
};
|
|
|
|
_Py_DECLARE_STR(empty, "")
|
|
#if defined(Py_DEBUG) && defined(Py_GIL_DISABLED)
|
|
#define _parser_runtime_state_INIT \
|
|
{ \
|
|
.mutex = {0}, \
|
|
.dummy_name = { \
|
|
.kind = Name_kind, \
|
|
.v.Name.id = &_Py_STR(empty), \
|
|
.v.Name.ctx = Load, \
|
|
.lineno = 1, \
|
|
.col_offset = 0, \
|
|
.end_lineno = 1, \
|
|
.end_col_offset = 0, \
|
|
}, \
|
|
}
|
|
#else
|
|
#define _parser_runtime_state_INIT \
|
|
{ \
|
|
.dummy_name = { \
|
|
.kind = Name_kind, \
|
|
.v.Name.id = &_Py_STR(empty), \
|
|
.v.Name.ctx = Load, \
|
|
.lineno = 1, \
|
|
.col_offset = 0, \
|
|
.end_lineno = 1, \
|
|
.end_col_offset = 0, \
|
|
}, \
|
|
}
|
|
#endif
|
|
|
|
extern struct _mod* _PyParser_ASTFromString(
|
|
const char *str,
|
|
PyObject* filename,
|
|
int mode,
|
|
PyCompilerFlags *flags,
|
|
PyArena *arena);
|
|
|
|
extern struct _mod* _PyParser_ASTFromFile(
|
|
FILE *fp,
|
|
PyObject *filename_ob,
|
|
const char *enc,
|
|
int mode,
|
|
const char *ps1,
|
|
const char *ps2,
|
|
PyCompilerFlags *flags,
|
|
int *errcode,
|
|
PyArena *arena);
|
|
extern struct _mod* _PyParser_InteractiveASTFromFile(
|
|
FILE *fp,
|
|
PyObject *filename_ob,
|
|
const char *enc,
|
|
int mode,
|
|
const char *ps1,
|
|
const char *ps2,
|
|
PyCompilerFlags *flags,
|
|
int *errcode,
|
|
PyObject **interactive_src,
|
|
PyArena *arena);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* !Py_INTERNAL_PARSER_H */
|