diff options
Diffstat (limited to 'Parser')
-rw-r--r-- | Parser/pegen/pegen.c | 24 | ||||
-rw-r--r-- | Parser/pegen/pegen.h | 1 |
2 files changed, 25 insertions, 0 deletions
diff --git a/Parser/pegen/pegen.c b/Parser/pegen/pegen.c index cd87a9f..ee30c2c 100644 --- a/Parser/pegen/pegen.c +++ b/Parser/pegen/pegen.c @@ -753,6 +753,30 @@ _PyPegen_expect_token(Parser *p, int type) return t; } +expr_ty +_PyPegen_expect_soft_keyword(Parser *p, const char *keyword) +{ + if (p->mark == p->fill) { + if (_PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + return NULL; + } + } + Token *t = p->tokens[p->mark]; + if (t->type != NAME) { + return NULL; + } + char* s = PyBytes_AsString(t->bytes); + if (!s) { + return NULL; + } + if (strcmp(s, keyword) != 0) { + return NULL; + } + expr_ty res = _PyPegen_name_token(p); + return res; +} + Token * _PyPegen_get_last_nonnwhitespace_token(Parser *p) { diff --git a/Parser/pegen/pegen.h b/Parser/pegen/pegen.h index bd3056e..9507d99 100644 --- a/Parser/pegen/pegen.h +++ b/Parser/pegen/pegen.h @@ -122,6 +122,7 @@ int _PyPegen_lookahead_with_int(int, Token *(func)(Parser *, int), Parser *, int int _PyPegen_lookahead(int, void *(func)(Parser *), Parser *); Token *_PyPegen_expect_token(Parser *p, int type); +expr_ty _PyPegen_expect_soft_keyword(Parser *p, const char *keyword); Token *_PyPegen_get_last_nonnwhitespace_token(Parser *); int _PyPegen_fill_token(Parser *p); expr_ty _PyPegen_name_token(Parser *p); |