add an ast_warn helper function to make adding those Py3k warnings easier
authorBenjamin Peterson <benjamin@python.org>
Sun, 8 Jun 2008 15:45:23 +0000 (15:45 +0000)
committerBenjamin Peterson <benjamin@python.org>
Sun, 8 Jun 2008 15:45:23 +0000 (15:45 +0000)
Python/ast.c

index 863906f65aa0af9be8419e4bb820cf53c3a49694..ad78840c056ecd0cb55ffda104e684898991129a 100644 (file)
@@ -113,6 +113,19 @@ ast_error_finish(const char *filename)
     PyErr_Restore(type, value, tback);
 }
 
+static int
+ast_warn(struct compiling *c, const node *n, char *msg)
+{
+    if (PyErr_WarnExplicit(PyExc_SyntaxWarning, msg, c->c_filename, LINENO(n),
+                           NULL, NULL) < 0) {
+        /* if -Werr, change it to a SyntaxError */
+        if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_SyntaxWarning))
+            ast_error(n, msg);
+        return 0;
+    }
+    return 1;
+}
+
 /* num_stmts() returns number of contained statements.
 
    Use this routine to determine how big a sequence is needed for
@@ -1363,14 +1376,9 @@ ast_for_atom(struct compiling *c, const node *n)
     }
     case BACKQUOTE: { /* repr */
         expr_ty expression;
-        if (Py_Py3kWarningFlag) {
-            if (PyErr_WarnExplicit(PyExc_SyntaxWarning,
-                                   "backquote not supported in 3.x; use repr()",
-                                   c->c_filename, LINENO(n),
-                                   NULL, NULL)) {
+        if (Py_Py3kWarningFlag &&
+            !ast_warn(c, n, "backquote not supported in 3.x; use repr()"))
             return NULL;
-            }
-        }
         expression = ast_for_testlist(c, CHILD(n, 1));
         if (!expression)
             return NULL;