|
|
|
@ -174,6 +174,7 @@ static int compiler_addop(struct compiler *, int); |
|
|
|
static int compiler_addop_i(struct compiler *, int, Py_ssize_t); |
|
|
|
static int compiler_addop_j(struct compiler *, int, basicblock *, int); |
|
|
|
static int compiler_error(struct compiler *, const char *); |
|
|
|
static int compiler_warn(struct compiler *, const char *); |
|
|
|
static int compiler_nameop(struct compiler *, identifier, expr_context_ty); |
|
|
|
|
|
|
|
static PyCodeObject *compiler_mod(struct compiler *, mod_ty); |
|
|
|
@ -2971,7 +2972,6 @@ compiler_assert(struct compiler *c, stmt_ty s) |
|
|
|
{ |
|
|
|
static PyObject *assertion_error = NULL; |
|
|
|
basicblock *end; |
|
|
|
PyObject* msg; |
|
|
|
|
|
|
|
if (c->c_optimize) |
|
|
|
return 1; |
|
|
|
@ -2981,18 +2981,13 @@ compiler_assert(struct compiler *c, stmt_ty s) |
|
|
|
return 0; |
|
|
|
} |
|
|
|
if (s->v.Assert.test->kind == Tuple_kind && |
|
|
|
asdl_seq_LEN(s->v.Assert.test->v.Tuple.elts) > 0) { |
|
|
|
msg = PyUnicode_FromString("assertion is always true, " |
|
|
|
"perhaps remove parentheses?"); |
|
|
|
if (msg == NULL) |
|
|
|
return 0; |
|
|
|
if (PyErr_WarnExplicitObject(PyExc_SyntaxWarning, msg, |
|
|
|
c->c_filename, c->u->u_lineno, |
|
|
|
NULL, NULL) == -1) { |
|
|
|
Py_DECREF(msg); |
|
|
|
asdl_seq_LEN(s->v.Assert.test->v.Tuple.elts) > 0) |
|
|
|
{ |
|
|
|
if (!compiler_warn(c, "assertion is always true, " |
|
|
|
"perhaps remove parentheses?")) |
|
|
|
{ |
|
|
|
return 0; |
|
|
|
} |
|
|
|
Py_DECREF(msg); |
|
|
|
} |
|
|
|
end = compiler_new_block(c); |
|
|
|
if (end == NULL) |
|
|
|
@ -4793,6 +4788,31 @@ compiler_error(struct compiler *c, const char *errstr) |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
/* Emits a SyntaxWarning and returns 1 on success. |
|
|
|
If a SyntaxWarning raised as error, replaces it with a SyntaxError |
|
|
|
and returns 0. |
|
|
|
*/ |
|
|
|
static int |
|
|
|
compiler_warn(struct compiler *c, const char *errstr) |
|
|
|
{ |
|
|
|
PyObject *msg = PyUnicode_FromString(errstr); |
|
|
|
if (msg == NULL) { |
|
|
|
return 0; |
|
|
|
} |
|
|
|
if (PyErr_WarnExplicitObject(PyExc_SyntaxWarning, msg, c->c_filename, |
|
|
|
c->u->u_lineno, NULL, NULL) < 0) |
|
|
|
{ |
|
|
|
Py_DECREF(msg); |
|
|
|
if (PyErr_ExceptionMatches(PyExc_SyntaxWarning)) { |
|
|
|
PyErr_Clear(); |
|
|
|
return compiler_error(c, errstr); |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
Py_DECREF(msg); |
|
|
|
return 1; |
|
|
|
} |
|
|
|
|
|
|
|
static int |
|
|
|
compiler_handle_subscr(struct compiler *c, const char *kind, |
|
|
|
expr_context_ty ctx) |
|
|
|
|