17db96d56Sopenharmony_ci#ifndef PEGEN_H 27db96d56Sopenharmony_ci#define PEGEN_H 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci#define PY_SSIZE_T_CLEAN 57db96d56Sopenharmony_ci#include <Python.h> 67db96d56Sopenharmony_ci#include <token.h> 77db96d56Sopenharmony_ci#include <pycore_ast.h> 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci#if 0 107db96d56Sopenharmony_ci#define PyPARSE_YIELD_IS_KEYWORD 0x0001 117db96d56Sopenharmony_ci#endif 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ci#define PyPARSE_DONT_IMPLY_DEDENT 0x0002 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ci#if 0 167db96d56Sopenharmony_ci#define PyPARSE_WITH_IS_KEYWORD 0x0003 177db96d56Sopenharmony_ci#define PyPARSE_PRINT_IS_FUNCTION 0x0004 187db96d56Sopenharmony_ci#define PyPARSE_UNICODE_LITERALS 0x0008 197db96d56Sopenharmony_ci#endif 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ci#define PyPARSE_IGNORE_COOKIE 0x0010 227db96d56Sopenharmony_ci#define PyPARSE_BARRY_AS_BDFL 0x0020 237db96d56Sopenharmony_ci#define PyPARSE_TYPE_COMMENTS 0x0040 247db96d56Sopenharmony_ci#define PyPARSE_ASYNC_HACKS 0x0080 257db96d56Sopenharmony_ci#define PyPARSE_ALLOW_INCOMPLETE_INPUT 0x0100 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_ci#define CURRENT_POS (-5) 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_citypedef struct _memo { 307db96d56Sopenharmony_ci int type; 317db96d56Sopenharmony_ci void *node; 327db96d56Sopenharmony_ci int mark; 337db96d56Sopenharmony_ci struct _memo *next; 347db96d56Sopenharmony_ci} Memo; 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_citypedef struct { 377db96d56Sopenharmony_ci int type; 387db96d56Sopenharmony_ci PyObject *bytes; 397db96d56Sopenharmony_ci int level; 407db96d56Sopenharmony_ci int lineno, col_offset, end_lineno, end_col_offset; 417db96d56Sopenharmony_ci Memo *memo; 427db96d56Sopenharmony_ci} Token; 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_citypedef struct { 457db96d56Sopenharmony_ci char *str; 467db96d56Sopenharmony_ci int type; 477db96d56Sopenharmony_ci} KeywordToken; 487db96d56Sopenharmony_ci 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_citypedef struct { 517db96d56Sopenharmony_ci struct { 527db96d56Sopenharmony_ci int lineno; 537db96d56Sopenharmony_ci char *comment; // The " <tag>" in "# type: ignore <tag>" 547db96d56Sopenharmony_ci } *items; 557db96d56Sopenharmony_ci size_t size; 567db96d56Sopenharmony_ci size_t num_items; 577db96d56Sopenharmony_ci} growable_comment_array; 587db96d56Sopenharmony_ci 597db96d56Sopenharmony_citypedef struct { 607db96d56Sopenharmony_ci struct tok_state *tok; 617db96d56Sopenharmony_ci Token **tokens; 627db96d56Sopenharmony_ci int mark; 637db96d56Sopenharmony_ci int fill, size; 647db96d56Sopenharmony_ci PyArena *arena; 657db96d56Sopenharmony_ci KeywordToken **keywords; 667db96d56Sopenharmony_ci char **soft_keywords; 677db96d56Sopenharmony_ci int n_keyword_lists; 687db96d56Sopenharmony_ci int start_rule; 697db96d56Sopenharmony_ci int *errcode; 707db96d56Sopenharmony_ci int parsing_started; 717db96d56Sopenharmony_ci PyObject* normalize; 727db96d56Sopenharmony_ci int starting_lineno; 737db96d56Sopenharmony_ci int starting_col_offset; 747db96d56Sopenharmony_ci int error_indicator; 757db96d56Sopenharmony_ci int flags; 767db96d56Sopenharmony_ci int feature_version; 777db96d56Sopenharmony_ci growable_comment_array type_ignore_comments; 787db96d56Sopenharmony_ci Token *known_err_token; 797db96d56Sopenharmony_ci int level; 807db96d56Sopenharmony_ci int call_invalid_rules; 817db96d56Sopenharmony_ci} Parser; 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_citypedef struct { 847db96d56Sopenharmony_ci cmpop_ty cmpop; 857db96d56Sopenharmony_ci expr_ty expr; 867db96d56Sopenharmony_ci} CmpopExprPair; 877db96d56Sopenharmony_ci 887db96d56Sopenharmony_citypedef struct { 897db96d56Sopenharmony_ci expr_ty key; 907db96d56Sopenharmony_ci expr_ty value; 917db96d56Sopenharmony_ci} KeyValuePair; 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_citypedef struct { 947db96d56Sopenharmony_ci expr_ty key; 957db96d56Sopenharmony_ci pattern_ty pattern; 967db96d56Sopenharmony_ci} KeyPatternPair; 977db96d56Sopenharmony_ci 987db96d56Sopenharmony_citypedef struct { 997db96d56Sopenharmony_ci arg_ty arg; 1007db96d56Sopenharmony_ci expr_ty value; 1017db96d56Sopenharmony_ci} NameDefaultPair; 1027db96d56Sopenharmony_ci 1037db96d56Sopenharmony_citypedef struct { 1047db96d56Sopenharmony_ci asdl_arg_seq *plain_names; 1057db96d56Sopenharmony_ci asdl_seq *names_with_defaults; // asdl_seq* of NameDefaultsPair's 1067db96d56Sopenharmony_ci} SlashWithDefault; 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_citypedef struct { 1097db96d56Sopenharmony_ci arg_ty vararg; 1107db96d56Sopenharmony_ci asdl_seq *kwonlyargs; // asdl_seq* of NameDefaultsPair's 1117db96d56Sopenharmony_ci arg_ty kwarg; 1127db96d56Sopenharmony_ci} StarEtc; 1137db96d56Sopenharmony_ci 1147db96d56Sopenharmony_citypedef struct { operator_ty kind; } AugOperator; 1157db96d56Sopenharmony_citypedef struct { 1167db96d56Sopenharmony_ci void *element; 1177db96d56Sopenharmony_ci int is_keyword; 1187db96d56Sopenharmony_ci} KeywordOrStarred; 1197db96d56Sopenharmony_ci 1207db96d56Sopenharmony_ci// Internal parser functions 1217db96d56Sopenharmony_ci#if defined(Py_DEBUG) 1227db96d56Sopenharmony_civoid _PyPegen_clear_memo_statistics(void); 1237db96d56Sopenharmony_ciPyObject *_PyPegen_get_memo_statistics(void); 1247db96d56Sopenharmony_ci#endif 1257db96d56Sopenharmony_ci 1267db96d56Sopenharmony_ciint _PyPegen_insert_memo(Parser *p, int mark, int type, void *node); 1277db96d56Sopenharmony_ciint _PyPegen_update_memo(Parser *p, int mark, int type, void *node); 1287db96d56Sopenharmony_ciint _PyPegen_is_memoized(Parser *p, int type, void *pres); 1297db96d56Sopenharmony_ci 1307db96d56Sopenharmony_ciint _PyPegen_lookahead_with_name(int, expr_ty (func)(Parser *), Parser *); 1317db96d56Sopenharmony_ciint _PyPegen_lookahead_with_int(int, Token *(func)(Parser *, int), Parser *, int); 1327db96d56Sopenharmony_ciint _PyPegen_lookahead_with_string(int , expr_ty (func)(Parser *, const char*), Parser *, const char*); 1337db96d56Sopenharmony_ciint _PyPegen_lookahead(int, void *(func)(Parser *), Parser *); 1347db96d56Sopenharmony_ci 1357db96d56Sopenharmony_ciToken *_PyPegen_expect_token(Parser *p, int type); 1367db96d56Sopenharmony_civoid* _PyPegen_expect_forced_result(Parser *p, void* result, const char* expected); 1377db96d56Sopenharmony_ciToken *_PyPegen_expect_forced_token(Parser *p, int type, const char* expected); 1387db96d56Sopenharmony_ciexpr_ty _PyPegen_expect_soft_keyword(Parser *p, const char *keyword); 1397db96d56Sopenharmony_ciexpr_ty _PyPegen_soft_keyword_token(Parser *p); 1407db96d56Sopenharmony_ciToken *_PyPegen_get_last_nonnwhitespace_token(Parser *); 1417db96d56Sopenharmony_ciint _PyPegen_fill_token(Parser *p); 1427db96d56Sopenharmony_ciexpr_ty _PyPegen_name_token(Parser *p); 1437db96d56Sopenharmony_ciexpr_ty _PyPegen_number_token(Parser *p); 1447db96d56Sopenharmony_civoid *_PyPegen_string_token(Parser *p); 1457db96d56Sopenharmony_ciPy_ssize_t _PyPegen_byte_offset_to_character_offset(PyObject *line, Py_ssize_t col_offset); 1467db96d56Sopenharmony_ci 1477db96d56Sopenharmony_ci// Error handling functions and APIs 1487db96d56Sopenharmony_citypedef enum { 1497db96d56Sopenharmony_ci STAR_TARGETS, 1507db96d56Sopenharmony_ci DEL_TARGETS, 1517db96d56Sopenharmony_ci FOR_TARGETS 1527db96d56Sopenharmony_ci} TARGETS_TYPE; 1537db96d56Sopenharmony_ci 1547db96d56Sopenharmony_ciint _Pypegen_raise_decode_error(Parser *p); 1557db96d56Sopenharmony_civoid _PyPegen_raise_tokenizer_init_error(PyObject *filename); 1567db96d56Sopenharmony_ciint _Pypegen_tokenizer_error(Parser *p); 1577db96d56Sopenharmony_civoid *_PyPegen_raise_error(Parser *p, PyObject *errtype, const char *errmsg, ...); 1587db96d56Sopenharmony_civoid *_PyPegen_raise_error_known_location(Parser *p, PyObject *errtype, 1597db96d56Sopenharmony_ci Py_ssize_t lineno, Py_ssize_t col_offset, 1607db96d56Sopenharmony_ci Py_ssize_t end_lineno, Py_ssize_t end_col_offset, 1617db96d56Sopenharmony_ci const char *errmsg, va_list va); 1627db96d56Sopenharmony_civoid _Pypegen_set_syntax_error(Parser* p, Token* last_token); 1637db96d56Sopenharmony_ciPy_LOCAL_INLINE(void *) 1647db96d56Sopenharmony_ciRAISE_ERROR_KNOWN_LOCATION(Parser *p, PyObject *errtype, 1657db96d56Sopenharmony_ci Py_ssize_t lineno, Py_ssize_t col_offset, 1667db96d56Sopenharmony_ci Py_ssize_t end_lineno, Py_ssize_t end_col_offset, 1677db96d56Sopenharmony_ci const char *errmsg, ...) 1687db96d56Sopenharmony_ci{ 1697db96d56Sopenharmony_ci va_list va; 1707db96d56Sopenharmony_ci va_start(va, errmsg); 1717db96d56Sopenharmony_ci Py_ssize_t _col_offset = (col_offset == CURRENT_POS ? CURRENT_POS : col_offset + 1); 1727db96d56Sopenharmony_ci Py_ssize_t _end_col_offset = (end_col_offset == CURRENT_POS ? CURRENT_POS : end_col_offset + 1); 1737db96d56Sopenharmony_ci _PyPegen_raise_error_known_location(p, errtype, lineno, _col_offset, end_lineno, _end_col_offset, errmsg, va); 1747db96d56Sopenharmony_ci va_end(va); 1757db96d56Sopenharmony_ci return NULL; 1767db96d56Sopenharmony_ci} 1777db96d56Sopenharmony_ci#define RAISE_SYNTAX_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_SyntaxError, msg, ##__VA_ARGS__) 1787db96d56Sopenharmony_ci#define RAISE_INDENTATION_ERROR(msg, ...) _PyPegen_raise_error(p, PyExc_IndentationError, msg, ##__VA_ARGS__) 1797db96d56Sopenharmony_ci#define RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, msg, ...) \ 1807db96d56Sopenharmony_ci RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (b)->end_lineno, (b)->end_col_offset, msg, ##__VA_ARGS__) 1817db96d56Sopenharmony_ci#define RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, msg, ...) \ 1827db96d56Sopenharmony_ci RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, (a)->end_lineno, (a)->end_col_offset, msg, ##__VA_ARGS__) 1837db96d56Sopenharmony_ci#define RAISE_SYNTAX_ERROR_STARTING_FROM(a, msg, ...) \ 1847db96d56Sopenharmony_ci RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, (a)->lineno, (a)->col_offset, CURRENT_POS, CURRENT_POS, msg, ##__VA_ARGS__) 1857db96d56Sopenharmony_ci#define RAISE_SYNTAX_ERROR_INVALID_TARGET(type, e) _RAISE_SYNTAX_ERROR_INVALID_TARGET(p, type, e) 1867db96d56Sopenharmony_ci 1877db96d56Sopenharmony_ciPy_LOCAL_INLINE(void *) 1887db96d56Sopenharmony_ciCHECK_CALL(Parser *p, void *result) 1897db96d56Sopenharmony_ci{ 1907db96d56Sopenharmony_ci if (result == NULL) { 1917db96d56Sopenharmony_ci assert(PyErr_Occurred()); 1927db96d56Sopenharmony_ci p->error_indicator = 1; 1937db96d56Sopenharmony_ci } 1947db96d56Sopenharmony_ci return result; 1957db96d56Sopenharmony_ci} 1967db96d56Sopenharmony_ci 1977db96d56Sopenharmony_ci/* This is needed for helper functions that are allowed to 1987db96d56Sopenharmony_ci return NULL without an error. Example: _PyPegen_seq_extract_starred_exprs */ 1997db96d56Sopenharmony_ciPy_LOCAL_INLINE(void *) 2007db96d56Sopenharmony_ciCHECK_CALL_NULL_ALLOWED(Parser *p, void *result) 2017db96d56Sopenharmony_ci{ 2027db96d56Sopenharmony_ci if (result == NULL && PyErr_Occurred()) { 2037db96d56Sopenharmony_ci p->error_indicator = 1; 2047db96d56Sopenharmony_ci } 2057db96d56Sopenharmony_ci return result; 2067db96d56Sopenharmony_ci} 2077db96d56Sopenharmony_ci 2087db96d56Sopenharmony_ci#define CHECK(type, result) ((type) CHECK_CALL(p, result)) 2097db96d56Sopenharmony_ci#define CHECK_NULL_ALLOWED(type, result) ((type) CHECK_CALL_NULL_ALLOWED(p, result)) 2107db96d56Sopenharmony_ci 2117db96d56Sopenharmony_ciexpr_ty _PyPegen_get_invalid_target(expr_ty e, TARGETS_TYPE targets_type); 2127db96d56Sopenharmony_ciconst char *_PyPegen_get_expr_name(expr_ty); 2137db96d56Sopenharmony_ciPy_LOCAL_INLINE(void *) 2147db96d56Sopenharmony_ci_RAISE_SYNTAX_ERROR_INVALID_TARGET(Parser *p, TARGETS_TYPE type, void *e) 2157db96d56Sopenharmony_ci{ 2167db96d56Sopenharmony_ci expr_ty invalid_target = CHECK_NULL_ALLOWED(expr_ty, _PyPegen_get_invalid_target(e, type)); 2177db96d56Sopenharmony_ci if (invalid_target != NULL) { 2187db96d56Sopenharmony_ci const char *msg; 2197db96d56Sopenharmony_ci if (type == STAR_TARGETS || type == FOR_TARGETS) { 2207db96d56Sopenharmony_ci msg = "cannot assign to %s"; 2217db96d56Sopenharmony_ci } 2227db96d56Sopenharmony_ci else { 2237db96d56Sopenharmony_ci msg = "cannot delete %s"; 2247db96d56Sopenharmony_ci } 2257db96d56Sopenharmony_ci return RAISE_SYNTAX_ERROR_KNOWN_LOCATION( 2267db96d56Sopenharmony_ci invalid_target, 2277db96d56Sopenharmony_ci msg, 2287db96d56Sopenharmony_ci _PyPegen_get_expr_name(invalid_target) 2297db96d56Sopenharmony_ci ); 2307db96d56Sopenharmony_ci return RAISE_SYNTAX_ERROR_KNOWN_LOCATION(invalid_target, "invalid syntax"); 2317db96d56Sopenharmony_ci } 2327db96d56Sopenharmony_ci return NULL; 2337db96d56Sopenharmony_ci} 2347db96d56Sopenharmony_ci 2357db96d56Sopenharmony_ci// Action utility functions 2367db96d56Sopenharmony_ci 2377db96d56Sopenharmony_civoid *_PyPegen_dummy_name(Parser *p, ...); 2387db96d56Sopenharmony_civoid * _PyPegen_seq_last_item(asdl_seq *seq); 2397db96d56Sopenharmony_ci#define PyPegen_last_item(seq, type) ((type)_PyPegen_seq_last_item((asdl_seq*)seq)) 2407db96d56Sopenharmony_civoid * _PyPegen_seq_first_item(asdl_seq *seq); 2417db96d56Sopenharmony_ci#define PyPegen_first_item(seq, type) ((type)_PyPegen_seq_first_item((asdl_seq*)seq)) 2427db96d56Sopenharmony_ci#define UNUSED(expr) do { (void)(expr); } while (0) 2437db96d56Sopenharmony_ci#define EXTRA_EXPR(head, tail) head->lineno, (head)->col_offset, (tail)->end_lineno, (tail)->end_col_offset, p->arena 2447db96d56Sopenharmony_ci#define EXTRA _start_lineno, _start_col_offset, _end_lineno, _end_col_offset, p->arena 2457db96d56Sopenharmony_ciPyObject *_PyPegen_new_type_comment(Parser *, const char *); 2467db96d56Sopenharmony_ci 2477db96d56Sopenharmony_ciPy_LOCAL_INLINE(PyObject *) 2487db96d56Sopenharmony_ciNEW_TYPE_COMMENT(Parser *p, Token *tc) 2497db96d56Sopenharmony_ci{ 2507db96d56Sopenharmony_ci if (tc == NULL) { 2517db96d56Sopenharmony_ci return NULL; 2527db96d56Sopenharmony_ci } 2537db96d56Sopenharmony_ci const char *bytes = PyBytes_AsString(tc->bytes); 2547db96d56Sopenharmony_ci if (bytes == NULL) { 2557db96d56Sopenharmony_ci goto error; 2567db96d56Sopenharmony_ci } 2577db96d56Sopenharmony_ci PyObject *tco = _PyPegen_new_type_comment(p, bytes); 2587db96d56Sopenharmony_ci if (tco == NULL) { 2597db96d56Sopenharmony_ci goto error; 2607db96d56Sopenharmony_ci } 2617db96d56Sopenharmony_ci return tco; 2627db96d56Sopenharmony_ci error: 2637db96d56Sopenharmony_ci p->error_indicator = 1; // Inline CHECK_CALL 2647db96d56Sopenharmony_ci return NULL; 2657db96d56Sopenharmony_ci} 2667db96d56Sopenharmony_ci 2677db96d56Sopenharmony_ciPy_LOCAL_INLINE(void *) 2687db96d56Sopenharmony_ciINVALID_VERSION_CHECK(Parser *p, int version, char *msg, void *node) 2697db96d56Sopenharmony_ci{ 2707db96d56Sopenharmony_ci if (node == NULL) { 2717db96d56Sopenharmony_ci p->error_indicator = 1; // Inline CHECK_CALL 2727db96d56Sopenharmony_ci return NULL; 2737db96d56Sopenharmony_ci } 2747db96d56Sopenharmony_ci if (p->feature_version < version) { 2757db96d56Sopenharmony_ci p->error_indicator = 1; 2767db96d56Sopenharmony_ci return RAISE_SYNTAX_ERROR("%s only supported in Python 3.%i and greater", 2777db96d56Sopenharmony_ci msg, version); 2787db96d56Sopenharmony_ci } 2797db96d56Sopenharmony_ci return node; 2807db96d56Sopenharmony_ci} 2817db96d56Sopenharmony_ci 2827db96d56Sopenharmony_ci#define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node)) 2837db96d56Sopenharmony_ci 2847db96d56Sopenharmony_ciarg_ty _PyPegen_add_type_comment_to_arg(Parser *, arg_ty, Token *); 2857db96d56Sopenharmony_ciPyObject *_PyPegen_new_identifier(Parser *, const char *); 2867db96d56Sopenharmony_ciasdl_seq *_PyPegen_singleton_seq(Parser *, void *); 2877db96d56Sopenharmony_ciasdl_seq *_PyPegen_seq_insert_in_front(Parser *, void *, asdl_seq *); 2887db96d56Sopenharmony_ciasdl_seq *_PyPegen_seq_append_to_end(Parser *, asdl_seq *, void *); 2897db96d56Sopenharmony_ciasdl_seq *_PyPegen_seq_flatten(Parser *, asdl_seq *); 2907db96d56Sopenharmony_ciexpr_ty _PyPegen_join_names_with_dot(Parser *, expr_ty, expr_ty); 2917db96d56Sopenharmony_ciint _PyPegen_seq_count_dots(asdl_seq *); 2927db96d56Sopenharmony_cialias_ty _PyPegen_alias_for_star(Parser *, int, int, int, int, PyArena *); 2937db96d56Sopenharmony_ciasdl_identifier_seq *_PyPegen_map_names_to_ids(Parser *, asdl_expr_seq *); 2947db96d56Sopenharmony_ciCmpopExprPair *_PyPegen_cmpop_expr_pair(Parser *, cmpop_ty, expr_ty); 2957db96d56Sopenharmony_ciasdl_int_seq *_PyPegen_get_cmpops(Parser *p, asdl_seq *); 2967db96d56Sopenharmony_ciasdl_expr_seq *_PyPegen_get_exprs(Parser *, asdl_seq *); 2977db96d56Sopenharmony_ciexpr_ty _PyPegen_set_expr_context(Parser *, expr_ty, expr_context_ty); 2987db96d56Sopenharmony_ciKeyValuePair *_PyPegen_key_value_pair(Parser *, expr_ty, expr_ty); 2997db96d56Sopenharmony_ciasdl_expr_seq *_PyPegen_get_keys(Parser *, asdl_seq *); 3007db96d56Sopenharmony_ciasdl_expr_seq *_PyPegen_get_values(Parser *, asdl_seq *); 3017db96d56Sopenharmony_ciKeyPatternPair *_PyPegen_key_pattern_pair(Parser *, expr_ty, pattern_ty); 3027db96d56Sopenharmony_ciasdl_expr_seq *_PyPegen_get_pattern_keys(Parser *, asdl_seq *); 3037db96d56Sopenharmony_ciasdl_pattern_seq *_PyPegen_get_patterns(Parser *, asdl_seq *); 3047db96d56Sopenharmony_ciNameDefaultPair *_PyPegen_name_default_pair(Parser *, arg_ty, expr_ty, Token *); 3057db96d56Sopenharmony_ciSlashWithDefault *_PyPegen_slash_with_default(Parser *, asdl_arg_seq *, asdl_seq *); 3067db96d56Sopenharmony_ciStarEtc *_PyPegen_star_etc(Parser *, arg_ty, asdl_seq *, arg_ty); 3077db96d56Sopenharmony_ciarguments_ty _PyPegen_make_arguments(Parser *, asdl_arg_seq *, SlashWithDefault *, 3087db96d56Sopenharmony_ci asdl_arg_seq *, asdl_seq *, StarEtc *); 3097db96d56Sopenharmony_ciarguments_ty _PyPegen_empty_arguments(Parser *); 3107db96d56Sopenharmony_ciAugOperator *_PyPegen_augoperator(Parser*, operator_ty type); 3117db96d56Sopenharmony_cistmt_ty _PyPegen_function_def_decorators(Parser *, asdl_expr_seq *, stmt_ty); 3127db96d56Sopenharmony_cistmt_ty _PyPegen_class_def_decorators(Parser *, asdl_expr_seq *, stmt_ty); 3137db96d56Sopenharmony_ciKeywordOrStarred *_PyPegen_keyword_or_starred(Parser *, void *, int); 3147db96d56Sopenharmony_ciasdl_expr_seq *_PyPegen_seq_extract_starred_exprs(Parser *, asdl_seq *); 3157db96d56Sopenharmony_ciasdl_keyword_seq *_PyPegen_seq_delete_starred_exprs(Parser *, asdl_seq *); 3167db96d56Sopenharmony_ciexpr_ty _PyPegen_collect_call_seqs(Parser *, asdl_expr_seq *, asdl_seq *, 3177db96d56Sopenharmony_ci int lineno, int col_offset, int end_lineno, 3187db96d56Sopenharmony_ci int end_col_offset, PyArena *arena); 3197db96d56Sopenharmony_ciexpr_ty _PyPegen_concatenate_strings(Parser *p, asdl_seq *); 3207db96d56Sopenharmony_ciexpr_ty _PyPegen_ensure_imaginary(Parser *p, expr_ty); 3217db96d56Sopenharmony_ciexpr_ty _PyPegen_ensure_real(Parser *p, expr_ty); 3227db96d56Sopenharmony_ciasdl_seq *_PyPegen_join_sequences(Parser *, asdl_seq *, asdl_seq *); 3237db96d56Sopenharmony_ciint _PyPegen_check_barry_as_flufl(Parser *, Token *); 3247db96d56Sopenharmony_ciint _PyPegen_check_legacy_stmt(Parser *p, expr_ty t); 3257db96d56Sopenharmony_cimod_ty _PyPegen_make_module(Parser *, asdl_stmt_seq *); 3267db96d56Sopenharmony_civoid *_PyPegen_arguments_parsing_error(Parser *, expr_ty); 3277db96d56Sopenharmony_ciexpr_ty _PyPegen_get_last_comprehension_item(comprehension_ty comprehension); 3287db96d56Sopenharmony_civoid *_PyPegen_nonparen_genexp_in_call(Parser *p, expr_ty args, asdl_comprehension_seq *comprehensions); 3297db96d56Sopenharmony_ci 3307db96d56Sopenharmony_ci// Parser API 3317db96d56Sopenharmony_ci 3327db96d56Sopenharmony_ciParser *_PyPegen_Parser_New(struct tok_state *, int, int, int, int *, PyArena *); 3337db96d56Sopenharmony_civoid _PyPegen_Parser_Free(Parser *); 3347db96d56Sopenharmony_cimod_ty _PyPegen_run_parser_from_file_pointer(FILE *, int, PyObject *, const char *, 3357db96d56Sopenharmony_ci const char *, const char *, PyCompilerFlags *, int *, PyArena *); 3367db96d56Sopenharmony_civoid *_PyPegen_run_parser(Parser *); 3377db96d56Sopenharmony_cimod_ty _PyPegen_run_parser_from_string(const char *, int, PyObject *, PyCompilerFlags *, PyArena *); 3387db96d56Sopenharmony_ciasdl_stmt_seq *_PyPegen_interactive_exit(Parser *); 3397db96d56Sopenharmony_ci 3407db96d56Sopenharmony_ci// Generated function in parse.c - function definition in python.gram 3417db96d56Sopenharmony_civoid *_PyPegen_parse(Parser *); 3427db96d56Sopenharmony_ci 3437db96d56Sopenharmony_ci#endif 344