diff options
Diffstat (limited to 'Parser')
-rw-r--r-- | Parser/parser.c | 8 | ||||
-rw-r--r-- | Parser/parsetok.c | 38 | ||||
-rw-r--r-- | Parser/tokenizer.c | 1 |
3 files changed, 26 insertions, 21 deletions
diff --git a/Parser/parser.c b/Parser/parser.c index ff4ce16..83e5e6d 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -149,6 +149,7 @@ classify(parser_state *ps, int type, char *str) strcmp(l->lb_str, s) != 0) continue; #ifdef PY_PARSER_REQUIRES_FUTURE_KEYWORD +#if 0 /* Leaving this in as an example */ if (!(ps->p_flags & CO_FUTURE_WITH_STATEMENT)) { if (s[0] == 'w' && strcmp(s, "with") == 0) @@ -157,6 +158,7 @@ classify(parser_state *ps, int type, char *str) break; /* not a keyword yet */ } #endif +#endif D(printf("It's a keyword\n")); return n - i; } @@ -178,6 +180,7 @@ classify(parser_state *ps, int type, char *str) } #ifdef PY_PARSER_REQUIRES_FUTURE_KEYWORD +#if 0 /* Leaving this in as an example */ static void future_hack(parser_state *ps) @@ -218,6 +221,7 @@ future_hack(parser_state *ps) } } } +#endif #endif /* future keyword */ int @@ -278,11 +282,13 @@ PyParser_AddToken(register parser_state *ps, register int type, char *str, d->d_name, ps->p_stack.s_top->s_state)); #ifdef PY_PARSER_REQUIRES_FUTURE_KEYWORD +#if 0 if (d->d_name[0] == 'i' && strcmp(d->d_name, "import_stmt") == 0) future_hack(ps); #endif +#endif s_pop(&ps->p_stack); if (s_empty(&ps->p_stack)) { D(printf(" ACCEPT.\n")); @@ -296,10 +302,12 @@ PyParser_AddToken(register parser_state *ps, register int type, char *str, if (s->s_accept) { #ifdef PY_PARSER_REQUIRES_FUTURE_KEYWORD +#if 0 if (d->d_name[0] == 'i' && strcmp(d->d_name, "import_stmt") == 0) future_hack(ps); #endif +#endif /* Pop this dfa and try again */ s_pop(&ps->p_stack); D(printf(" Pop ...\n")); diff --git a/Parser/parsetok.c b/Parser/parsetok.c index 4c3b506..1470327 100644 --- a/Parser/parsetok.c +++ b/Parser/parsetok.c @@ -100,6 +100,7 @@ PyParser_ParseFileFlagsEx(FILE *fp, const char *filename, } #ifdef PY_PARSER_REQUIRES_FUTURE_KEYWORD +#if 0 static char with_msg[] = "%s:%d: Warning: 'with' will become a reserved keyword in Python 2.6\n"; @@ -114,6 +115,7 @@ warn(const char *msg, const char *filename, int lineno) PySys_WriteStderr(msg, filename, lineno); } #endif +#endif /* Parse input coming from the given tokenizer structure. Return error code. */ @@ -133,8 +135,8 @@ parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret, return NULL; } #ifdef PY_PARSER_REQUIRES_FUTURE_KEYWORD - if (*flags & PyPARSE_WITH_IS_KEYWORD) - ps->p_flags |= CO_FUTURE_WITH_STATEMENT; + if (*flags & PyPARSE_BARRY_AS_BDFL) + ps->p_flags |= CO_FUTURE_BARRY_AS_BDFL; #endif for (;;) { @@ -177,26 +179,20 @@ parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret, str[len] = '\0'; #ifdef PY_PARSER_REQUIRES_FUTURE_KEYWORD - /* This is only necessary to support the "as" warning, but - we don't want to warn about "as" in import statements. */ - if (type == NAME && - len == 6 && str[0] == 'i' && strcmp(str, "import") == 0) - handling_import = 1; - - /* Warn about with as NAME */ - if (type == NAME && - !(ps->p_flags & CO_FUTURE_WITH_STATEMENT)) { - if (len == 4 && str[0] == 'w' && strcmp(str, "with") == 0) - warn(with_msg, err_ret->filename, tok->lineno); - else if (!(handling_import || handling_with) && - len == 2 && str[0] == 'a' && - strcmp(str, "as") == 0) - warn(as_msg, err_ret->filename, tok->lineno); + if (type == NOTEQUAL) { + if (!(ps->p_flags & CO_FUTURE_BARRY_AS_BDFL) && + strcmp(str, "!=")) { + err_ret->error = E_SYNTAX; + break; + } + else if ((ps->p_flags & CO_FUTURE_BARRY_AS_BDFL) && + strcmp(str, "<>")) { + err_ret->text = "with Barry as BDFL, use '<>' " + "instead of '!='"; + err_ret->error = E_SYNTAX; + break; + } } - else if (type == NAME && - (ps->p_flags & CO_FUTURE_WITH_STATEMENT) && - len == 4 && str[0] == 'w' && strcmp(str, "with") == 0) - handling_with = 1; #endif if (a >= tok->line_start) col_offset = a - tok->line_start; diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index c4f447d..15e8185 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -1040,6 +1040,7 @@ PyToken_TwoChars(int c1, int c2) break; case '<': switch (c2) { + case '>': return NOTEQUAL; case '=': return LESSEQUAL; case '<': return LEFTSHIFT; } |