]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Add a really stupid warning about 'yield' used as an identifier.
authorGuido van Rossum <guido@python.org>
Tue, 17 Jul 2001 16:53:11 +0000 (16:53 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 17 Jul 2001 16:53:11 +0000 (16:53 +0000)
This is really stupid because it cannot be suppressed or altered using
the warning framework; that's because the warning framework is built
on Python interpreter internals, and the parser generator doesn't have
access to any of those (you cannot use anything of type PyObject * in
the parser).

But it's better than nothing, and implementing a proper check for this
appears to require modifying compile.c in a dozen places, for which I
don't have the stamina today.  I promise we'll do better in 2.2a2.

At least it tells you the filename and line number (unlike the first
hack I considered :-).

Parser/parsetok.c

index 6017e5f7f8621a689a0d853a75cee4fdf6f91a11..386b82fea6177115a9daaa70e7f968f6df5ed99a 100644 (file)
@@ -92,6 +92,9 @@ PyParser_ParseFileFlags(FILE *fp, char *filename, grammar *g, int start,
 /* Parse input coming from the given tokenizer structure.
    Return error code. */
 
+static char yield_msg[] =
+"%s:%d: Warning: 'yield' will become a reserved keyword in the future\n";
+
 static node *
 parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret,
         int flags)
@@ -135,6 +138,15 @@ parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret,
                if (len > 0)
                        strncpy(str, a, len);
                str[len] = '\0';
+
+               /* Warn about yield as NAME */
+               if (type == NAME && !ps->p_generators &&
+                   len == 5 && str[0] == 'y' && strcmp(str, "yield") == 0)
+                       PySys_WriteStderr(yield_msg,
+                                         err_ret->filename==NULL ?
+                                         "<string>" : err_ret->filename,
+                                         tok->lineno);
+
                if ((err_ret->error =
                     PyParser_AddToken(ps, (int)type, str, tok->lineno,
                                       &(err_ret->expected))) != E_OK) {