static int
validate_name(PyObject *name)
{
+ assert(!PyErr_Occurred());
assert(PyUnicode_Check(name));
static const char * const forbidden[] = {
"None",
static int
validate_comprehension(struct validator *state, asdl_comprehension_seq *gens)
{
- Py_ssize_t i;
+ assert(!PyErr_Occurred());
if (!asdl_seq_LEN(gens)) {
PyErr_SetString(PyExc_ValueError, "comprehension with no generators");
return 0;
}
- for (i = 0; i < asdl_seq_LEN(gens); i++) {
+ for (Py_ssize_t i = 0; i < asdl_seq_LEN(gens); i++) {
comprehension_ty comp = asdl_seq_GET(gens, i);
if (!validate_expr(state, comp->target, Store) ||
!validate_expr(state, comp->iter, Load) ||
static int
validate_keywords(struct validator *state, asdl_keyword_seq *keywords)
{
- Py_ssize_t i;
- for (i = 0; i < asdl_seq_LEN(keywords); i++)
+ assert(!PyErr_Occurred());
+ for (Py_ssize_t i = 0; i < asdl_seq_LEN(keywords); i++)
if (!validate_expr(state, (asdl_seq_GET(keywords, i))->value, Load))
return 0;
return 1;
static int
validate_args(struct validator *state, asdl_arg_seq *args)
{
- Py_ssize_t i;
- for (i = 0; i < asdl_seq_LEN(args); i++) {
+ assert(!PyErr_Occurred());
+ for (Py_ssize_t i = 0; i < asdl_seq_LEN(args); i++) {
arg_ty arg = asdl_seq_GET(args, i);
VALIDATE_POSITIONS(arg);
if (arg->annotation && !validate_expr(state, arg->annotation, Load))
static int
validate_arguments(struct validator *state, arguments_ty args)
{
+ assert(!PyErr_Occurred());
if (!validate_args(state, args->posonlyargs) || !validate_args(state, args->args)) {
return 0;
}
static int
validate_constant(struct validator *state, PyObject *value)
{
+ assert(!PyErr_Occurred());
if (value == Py_None || value == Py_Ellipsis)
return 1;
static int
validate_expr(struct validator *state, expr_ty exp, expr_context_ty ctx)
{
+ assert(!PyErr_Occurred());
VALIDATE_POSITIONS(exp);
int ret = -1;
if (++state->recursion_depth > state->recursion_limit) {
static int
validate_pattern_match_value(struct validator *state, expr_ty exp)
{
+ assert(!PyErr_Occurred());
if (!validate_expr(state, exp, Load)) {
return 0;
}
static int
validate_capture(PyObject *name)
{
+ assert(!PyErr_Occurred());
if (_PyUnicode_EqualToASCIIString(name, "_")) {
PyErr_Format(PyExc_ValueError, "can't capture name '_' in patterns");
return 0;
static int
validate_pattern(struct validator *state, pattern_ty p, int star_ok)
{
+ assert(!PyErr_Occurred());
VALIDATE_POSITIONS(p);
int ret = -1;
if (++state->recursion_depth > state->recursion_limit) {
break;
}
}
-
+ if (ret == 0) {
+ break;
+ }
ret = validate_patterns(state, p->v.MatchMapping.patterns, /*star_ok=*/0);
break;
case MatchClass_kind:
break;
}
}
+ if (ret == 0) {
+ break;
+ }
for (Py_ssize_t i = 0; i < asdl_seq_LEN(p->v.MatchClass.kwd_attrs); i++) {
PyObject *identifier = asdl_seq_GET(p->v.MatchClass.kwd_attrs, i);
break;
}
}
+ if (ret == 0) {
+ break;
+ }
if (!validate_patterns(state, p->v.MatchClass.patterns, /*star_ok=*/0)) {
ret = 0;
static int
validate_assignlist(struct validator *state, asdl_expr_seq *targets, expr_context_ty ctx)
{
+ assert(!PyErr_Occurred());
return validate_nonempty_seq(targets, "targets", ctx == Del ? "Delete" : "Assign") &&
validate_exprs(state, targets, ctx, 0);
}
static int
validate_body(struct validator *state, asdl_stmt_seq *body, const char *owner)
{
+ assert(!PyErr_Occurred());
return validate_nonempty_seq(body, "body", owner) && validate_stmts(state, body);
}
static int
validate_stmt(struct validator *state, stmt_ty stmt)
{
+ assert(!PyErr_Occurred());
VALIDATE_POSITIONS(stmt);
int ret = -1;
- Py_ssize_t i;
if (++state->recursion_depth > state->recursion_limit) {
PyErr_SetString(PyExc_RecursionError,
"maximum recursion depth exceeded during compilation");
case With_kind:
if (!validate_nonempty_seq(stmt->v.With.items, "items", "With"))
return 0;
- for (i = 0; i < asdl_seq_LEN(stmt->v.With.items); i++) {
+ for (Py_ssize_t i = 0; i < asdl_seq_LEN(stmt->v.With.items); i++) {
withitem_ty item = asdl_seq_GET(stmt->v.With.items, i);
if (!validate_expr(state, item->context_expr, Load) ||
(item->optional_vars && !validate_expr(state, item->optional_vars, Store)))
case AsyncWith_kind:
if (!validate_nonempty_seq(stmt->v.AsyncWith.items, "items", "AsyncWith"))
return 0;
- for (i = 0; i < asdl_seq_LEN(stmt->v.AsyncWith.items); i++) {
+ for (Py_ssize_t i = 0; i < asdl_seq_LEN(stmt->v.AsyncWith.items); i++) {
withitem_ty item = asdl_seq_GET(stmt->v.AsyncWith.items, i);
if (!validate_expr(state, item->context_expr, Load) ||
(item->optional_vars && !validate_expr(state, item->optional_vars, Store)))
|| !validate_nonempty_seq(stmt->v.Match.cases, "cases", "Match")) {
return 0;
}
- for (i = 0; i < asdl_seq_LEN(stmt->v.Match.cases); i++) {
+ for (Py_ssize_t i = 0; i < asdl_seq_LEN(stmt->v.Match.cases); i++) {
match_case_ty m = asdl_seq_GET(stmt->v.Match.cases, i);
if (!validate_pattern(state, m->pattern, /*star_ok=*/0)
|| (m->guard && !validate_expr(state, m->guard, Load))
PyErr_SetString(PyExc_ValueError, "Try has orelse but no except handlers");
return 0;
}
- for (i = 0; i < asdl_seq_LEN(stmt->v.Try.handlers); i++) {
+ for (Py_ssize_t i = 0; i < asdl_seq_LEN(stmt->v.Try.handlers); i++) {
excepthandler_ty handler = asdl_seq_GET(stmt->v.Try.handlers, i);
VALIDATE_POSITIONS(handler);
if ((handler->v.ExceptHandler.type &&
PyErr_SetString(PyExc_ValueError, "TryStar has orelse but no except handlers");
return 0;
}
- for (i = 0; i < asdl_seq_LEN(stmt->v.TryStar.handlers); i++) {
+ for (Py_ssize_t i = 0; i < asdl_seq_LEN(stmt->v.TryStar.handlers); i++) {
excepthandler_ty handler = asdl_seq_GET(stmt->v.TryStar.handlers, i);
if ((handler->v.ExceptHandler.type &&
!validate_expr(state, handler->v.ExceptHandler.type, Load)) ||
static int
validate_stmts(struct validator *state, asdl_stmt_seq *seq)
{
- Py_ssize_t i;
- for (i = 0; i < asdl_seq_LEN(seq); i++) {
+ assert(!PyErr_Occurred());
+ for (Py_ssize_t i = 0; i < asdl_seq_LEN(seq); i++) {
stmt_ty stmt = asdl_seq_GET(seq, i);
if (stmt) {
if (!validate_stmt(state, stmt))
static int
validate_exprs(struct validator *state, asdl_expr_seq *exprs, expr_context_ty ctx, int null_ok)
{
- Py_ssize_t i;
- for (i = 0; i < asdl_seq_LEN(exprs); i++) {
+ assert(!PyErr_Occurred());
+ for (Py_ssize_t i = 0; i < asdl_seq_LEN(exprs); i++) {
expr_ty expr = asdl_seq_GET(exprs, i);
if (expr) {
if (!validate_expr(state, expr, ctx))
static int
validate_patterns(struct validator *state, asdl_pattern_seq *patterns, int star_ok)
{
- Py_ssize_t i;
- for (i = 0; i < asdl_seq_LEN(patterns); i++) {
+ assert(!PyErr_Occurred());
+ for (Py_ssize_t i = 0; i < asdl_seq_LEN(patterns); i++) {
pattern_ty pattern = asdl_seq_GET(patterns, i);
if (!validate_pattern(state, pattern, star_ok)) {
return 0;
int
_PyAST_Validate(mod_ty mod)
{
+ assert(!PyErr_Occurred());
int res = -1;
struct validator state;
PyThreadState *tstate;