summaryrefslogtreecommitdiffstats
path: root/Python/Python-ast.c
diff options
context:
space:
mode:
authorBatuhan Taskaya <batuhanosmantaskaya@gmail.com>2020-05-06 14:29:32 (GMT)
committerGitHub <noreply@github.com>2020-05-06 14:29:32 (GMT)
commit091951a67c832db83c60f4eb22f1fb474b70e635 (patch)
tree67fa56ccc7099d080ac19460d82a68b7f685b8ff /Python/Python-ast.c
parent2668a9a5aa506a048aef7b4881c8dcf6b81c6870 (diff)
downloadcpython-091951a67c832db83c60f4eb22f1fb474b70e635.zip
cpython-091951a67c832db83c60f4eb22f1fb474b70e635.tar.gz
cpython-091951a67c832db83c60f4eb22f1fb474b70e635.tar.bz2
bpo-40528: Improve and clear several aspects of the ASDL definition code for the AST (GH-19952)
Diffstat (limited to 'Python/Python-ast.c')
-rw-r--r--Python/Python-ast.c155
1 files changed, 69 insertions, 86 deletions
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index 80f9164..f34b145 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -1294,11 +1294,9 @@ static PyObject* ast2obj_object(void *o)
Py_INCREF((PyObject*)o);
return (PyObject*)o;
}
-#define ast2obj_singleton ast2obj_object
#define ast2obj_constant ast2obj_object
#define ast2obj_identifier ast2obj_object
#define ast2obj_string ast2obj_object
-#define ast2obj_bytes ast2obj_object
static PyObject* ast2obj_int(long b)
{
@@ -2077,7 +2075,7 @@ Expression(expr_ty body, PyArena *arena)
mod_ty p;
if (!body) {
PyErr_SetString(PyExc_ValueError,
- "field body is required for Expression");
+ "field 'body' is required for Expression");
return NULL;
}
p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2094,7 +2092,7 @@ FunctionType(asdl_seq * argtypes, expr_ty returns, PyArena *arena)
mod_ty p;
if (!returns) {
PyErr_SetString(PyExc_ValueError,
- "field returns is required for FunctionType");
+ "field 'returns' is required for FunctionType");
return NULL;
}
p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2114,12 +2112,12 @@ FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
stmt_ty p;
if (!name) {
PyErr_SetString(PyExc_ValueError,
- "field name is required for FunctionDef");
+ "field 'name' is required for FunctionDef");
return NULL;
}
if (!args) {
PyErr_SetString(PyExc_ValueError,
- "field args is required for FunctionDef");
+ "field 'args' is required for FunctionDef");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2148,12 +2146,12 @@ AsyncFunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq
stmt_ty p;
if (!name) {
PyErr_SetString(PyExc_ValueError,
- "field name is required for AsyncFunctionDef");
+ "field 'name' is required for AsyncFunctionDef");
return NULL;
}
if (!args) {
PyErr_SetString(PyExc_ValueError,
- "field args is required for AsyncFunctionDef");
+ "field 'args' is required for AsyncFunctionDef");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2181,7 +2179,7 @@ ClassDef(identifier name, asdl_seq * bases, asdl_seq * keywords, asdl_seq *
stmt_ty p;
if (!name) {
PyErr_SetString(PyExc_ValueError,
- "field name is required for ClassDef");
+ "field 'name' is required for ClassDef");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2241,7 +2239,7 @@ Assign(asdl_seq * targets, expr_ty value, string type_comment, int lineno, int
stmt_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for Assign");
+ "field 'value' is required for Assign");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2265,17 +2263,17 @@ AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int
stmt_ty p;
if (!target) {
PyErr_SetString(PyExc_ValueError,
- "field target is required for AugAssign");
+ "field 'target' is required for AugAssign");
return NULL;
}
if (!op) {
PyErr_SetString(PyExc_ValueError,
- "field op is required for AugAssign");
+ "field 'op' is required for AugAssign");
return NULL;
}
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for AugAssign");
+ "field 'value' is required for AugAssign");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2300,12 +2298,12 @@ AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int simple, int
stmt_ty p;
if (!target) {
PyErr_SetString(PyExc_ValueError,
- "field target is required for AnnAssign");
+ "field 'target' is required for AnnAssign");
return NULL;
}
if (!annotation) {
PyErr_SetString(PyExc_ValueError,
- "field annotation is required for AnnAssign");
+ "field 'annotation' is required for AnnAssign");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2331,12 +2329,12 @@ For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse, string
stmt_ty p;
if (!target) {
PyErr_SetString(PyExc_ValueError,
- "field target is required for For");
+ "field 'target' is required for For");
return NULL;
}
if (!iter) {
PyErr_SetString(PyExc_ValueError,
- "field iter is required for For");
+ "field 'iter' is required for For");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2363,12 +2361,12 @@ AsyncFor(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse,
stmt_ty p;
if (!target) {
PyErr_SetString(PyExc_ValueError,
- "field target is required for AsyncFor");
+ "field 'target' is required for AsyncFor");
return NULL;
}
if (!iter) {
PyErr_SetString(PyExc_ValueError,
- "field iter is required for AsyncFor");
+ "field 'iter' is required for AsyncFor");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2394,7 +2392,7 @@ While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int
stmt_ty p;
if (!test) {
PyErr_SetString(PyExc_ValueError,
- "field test is required for While");
+ "field 'test' is required for While");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2418,7 +2416,7 @@ If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int
stmt_ty p;
if (!test) {
PyErr_SetString(PyExc_ValueError,
- "field test is required for If");
+ "field 'test' is required for If");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2519,7 +2517,7 @@ Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int end_lineno,
stmt_ty p;
if (!test) {
PyErr_SetString(PyExc_ValueError,
- "field test is required for Assert");
+ "field 'test' is required for Assert");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2612,7 +2610,7 @@ Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int
stmt_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for Expr");
+ "field 'value' is required for Expr");
return NULL;
}
p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2682,7 +2680,7 @@ BoolOp(boolop_ty op, asdl_seq * values, int lineno, int col_offset, int
expr_ty p;
if (!op) {
PyErr_SetString(PyExc_ValueError,
- "field op is required for BoolOp");
+ "field 'op' is required for BoolOp");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2705,12 +2703,12 @@ NamedExpr(expr_ty target, expr_ty value, int lineno, int col_offset, int
expr_ty p;
if (!target) {
PyErr_SetString(PyExc_ValueError,
- "field target is required for NamedExpr");
+ "field 'target' is required for NamedExpr");
return NULL;
}
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for NamedExpr");
+ "field 'value' is required for NamedExpr");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2733,17 +2731,17 @@ BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int col_offset,
expr_ty p;
if (!left) {
PyErr_SetString(PyExc_ValueError,
- "field left is required for BinOp");
+ "field 'left' is required for BinOp");
return NULL;
}
if (!op) {
PyErr_SetString(PyExc_ValueError,
- "field op is required for BinOp");
+ "field 'op' is required for BinOp");
return NULL;
}
if (!right) {
PyErr_SetString(PyExc_ValueError,
- "field right is required for BinOp");
+ "field 'right' is required for BinOp");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2767,12 +2765,12 @@ UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, int
expr_ty p;
if (!op) {
PyErr_SetString(PyExc_ValueError,
- "field op is required for UnaryOp");
+ "field 'op' is required for UnaryOp");
return NULL;
}
if (!operand) {
PyErr_SetString(PyExc_ValueError,
- "field operand is required for UnaryOp");
+ "field 'operand' is required for UnaryOp");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2795,12 +2793,12 @@ Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, int
expr_ty p;
if (!args) {
PyErr_SetString(PyExc_ValueError,
- "field args is required for Lambda");
+ "field 'args' is required for Lambda");
return NULL;
}
if (!body) {
PyErr_SetString(PyExc_ValueError,
- "field body is required for Lambda");
+ "field 'body' is required for Lambda");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2823,17 +2821,17 @@ IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int col_offset,
expr_ty p;
if (!test) {
PyErr_SetString(PyExc_ValueError,
- "field test is required for IfExp");
+ "field 'test' is required for IfExp");
return NULL;
}
if (!body) {
PyErr_SetString(PyExc_ValueError,
- "field body is required for IfExp");
+ "field 'body' is required for IfExp");
return NULL;
}
if (!orelse) {
PyErr_SetString(PyExc_ValueError,
- "field orelse is required for IfExp");
+ "field 'orelse' is required for IfExp");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2892,7 +2890,7 @@ ListComp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset, int
expr_ty p;
if (!elt) {
PyErr_SetString(PyExc_ValueError,
- "field elt is required for ListComp");
+ "field 'elt' is required for ListComp");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2915,7 +2913,7 @@ SetComp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset, int
expr_ty p;
if (!elt) {
PyErr_SetString(PyExc_ValueError,
- "field elt is required for SetComp");
+ "field 'elt' is required for SetComp");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2938,12 +2936,12 @@ DictComp(expr_ty key, expr_ty value, asdl_seq * generators, int lineno, int
expr_ty p;
if (!key) {
PyErr_SetString(PyExc_ValueError,
- "field key is required for DictComp");
+ "field 'key' is required for DictComp");
return NULL;
}
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for DictComp");
+ "field 'value' is required for DictComp");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2967,7 +2965,7 @@ GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset,
expr_ty p;
if (!elt) {
PyErr_SetString(PyExc_ValueError,
- "field elt is required for GeneratorExp");
+ "field 'elt' is required for GeneratorExp");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -2990,7 +2988,7 @@ Await(expr_ty value, int lineno, int col_offset, int end_lineno, int
expr_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for Await");
+ "field 'value' is required for Await");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3029,7 +3027,7 @@ YieldFrom(expr_ty value, int lineno, int col_offset, int end_lineno, int
expr_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for YieldFrom");
+ "field 'value' is required for YieldFrom");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3051,7 +3049,7 @@ Compare(expr_ty left, asdl_int_seq * ops, asdl_seq * comparators, int lineno,
expr_ty p;
if (!left) {
PyErr_SetString(PyExc_ValueError,
- "field left is required for Compare");
+ "field 'left' is required for Compare");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3075,7 +3073,7 @@ Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, int lineno, int
expr_ty p;
if (!func) {
PyErr_SetString(PyExc_ValueError,
- "field func is required for Call");
+ "field 'func' is required for Call");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3100,7 +3098,7 @@ FormattedValue(expr_ty value, int conversion, expr_ty format_spec, int lineno,
expr_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for FormattedValue");
+ "field 'value' is required for FormattedValue");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3141,7 +3139,7 @@ Constant(constant value, string kind, int lineno, int col_offset, int
expr_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for Constant");
+ "field 'value' is required for Constant");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3164,17 +3162,17 @@ Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, int
expr_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for Attribute");
+ "field 'value' is required for Attribute");
return NULL;
}
if (!attr) {
PyErr_SetString(PyExc_ValueError,
- "field attr is required for Attribute");
+ "field 'attr' is required for Attribute");
return NULL;
}
if (!ctx) {
PyErr_SetString(PyExc_ValueError,
- "field ctx is required for Attribute");
+ "field 'ctx' is required for Attribute");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3198,17 +3196,17 @@ Subscript(expr_ty value, expr_ty slice, expr_context_ty ctx, int lineno, int
expr_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for Subscript");
+ "field 'value' is required for Subscript");
return NULL;
}
if (!slice) {
PyErr_SetString(PyExc_ValueError,
- "field slice is required for Subscript");
+ "field 'slice' is required for Subscript");
return NULL;
}
if (!ctx) {
PyErr_SetString(PyExc_ValueError,
- "field ctx is required for Subscript");
+ "field 'ctx' is required for Subscript");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3232,12 +3230,12 @@ Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset, int
expr_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for Starred");
+ "field 'value' is required for Starred");
return NULL;
}
if (!ctx) {
PyErr_SetString(PyExc_ValueError,
- "field ctx is required for Starred");
+ "field 'ctx' is required for Starred");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3260,12 +3258,12 @@ Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, int
expr_ty p;
if (!id) {
PyErr_SetString(PyExc_ValueError,
- "field id is required for Name");
+ "field 'id' is required for Name");
return NULL;
}
if (!ctx) {
PyErr_SetString(PyExc_ValueError,
- "field ctx is required for Name");
+ "field 'ctx' is required for Name");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3288,7 +3286,7 @@ List(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, int
expr_ty p;
if (!ctx) {
PyErr_SetString(PyExc_ValueError,
- "field ctx is required for List");
+ "field 'ctx' is required for List");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3311,7 +3309,7 @@ Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, int
expr_ty p;
if (!ctx) {
PyErr_SetString(PyExc_ValueError,
- "field ctx is required for Tuple");
+ "field 'ctx' is required for Tuple");
return NULL;
}
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3353,12 +3351,12 @@ comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs, int is_async,
comprehension_ty p;
if (!target) {
PyErr_SetString(PyExc_ValueError,
- "field target is required for comprehension");
+ "field 'target' is required for comprehension");
return NULL;
}
if (!iter) {
PyErr_SetString(PyExc_ValueError,
- "field iter is required for comprehension");
+ "field 'iter' is required for comprehension");
return NULL;
}
p = (comprehension_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3416,7 +3414,7 @@ arg(identifier arg, expr_ty annotation, string type_comment, int lineno, int
arg_ty p;
if (!arg) {
PyErr_SetString(PyExc_ValueError,
- "field arg is required for arg");
+ "field 'arg' is required for arg");
return NULL;
}
p = (arg_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3439,7 +3437,7 @@ keyword(identifier arg, expr_ty value, int lineno, int col_offset, int
keyword_ty p;
if (!value) {
PyErr_SetString(PyExc_ValueError,
- "field value is required for keyword");
+ "field 'value' is required for keyword");
return NULL;
}
p = (keyword_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3460,7 +3458,7 @@ alias(identifier name, identifier asname, PyArena *arena)
alias_ty p;
if (!name) {
PyErr_SetString(PyExc_ValueError,
- "field name is required for alias");
+ "field 'name' is required for alias");
return NULL;
}
p = (alias_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3477,7 +3475,7 @@ withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena)
withitem_ty p;
if (!context_expr) {
PyErr_SetString(PyExc_ValueError,
- "field context_expr is required for withitem");
+ "field 'context_expr' is required for withitem");
return NULL;
}
p = (withitem_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -3494,7 +3492,7 @@ TypeIgnore(int lineno, string tag, PyArena *arena)
type_ignore_ty p;
if (!tag) {
PyErr_SetString(PyExc_ValueError,
- "field tag is required for TypeIgnore");
+ "field 'tag' is required for TypeIgnore");
return NULL;
}
p = (type_ignore_ty)PyArena_Malloc(arena, sizeof(*p));
@@ -4602,11 +4600,8 @@ PyObject* ast2obj_expr_context(expr_context_ty o)
case Del:
Py_INCREF(astmodulestate_global->Del_singleton);
return astmodulestate_global->Del_singleton;
- default:
- /* should never happen, but just in case ... */
- PyErr_Format(PyExc_SystemError, "unknown expr_context found");
- return NULL;
}
+ Py_UNREACHABLE();
}
PyObject* ast2obj_boolop(boolop_ty o)
{
@@ -4617,11 +4612,8 @@ PyObject* ast2obj_boolop(boolop_ty o)
case Or:
Py_INCREF(astmodulestate_global->Or_singleton);
return astmodulestate_global->Or_singleton;
- default:
- /* should never happen, but just in case ... */
- PyErr_Format(PyExc_SystemError, "unknown boolop found");
- return NULL;
}
+ Py_UNREACHABLE();
}
PyObject* ast2obj_operator(operator_ty o)
{
@@ -4665,11 +4657,8 @@ PyObject* ast2obj_operator(operator_ty o)
case FloorDiv:
Py_INCREF(astmodulestate_global->FloorDiv_singleton);
return astmodulestate_global->FloorDiv_singleton;
- default:
- /* should never happen, but just in case ... */
- PyErr_Format(PyExc_SystemError, "unknown operator found");
- return NULL;
}
+ Py_UNREACHABLE();
}
PyObject* ast2obj_unaryop(unaryop_ty o)
{
@@ -4686,11 +4675,8 @@ PyObject* ast2obj_unaryop(unaryop_ty o)
case USub:
Py_INCREF(astmodulestate_global->USub_singleton);
return astmodulestate_global->USub_singleton;
- default:
- /* should never happen, but just in case ... */
- PyErr_Format(PyExc_SystemError, "unknown unaryop found");
- return NULL;
}
+ Py_UNREACHABLE();
}
PyObject* ast2obj_cmpop(cmpop_ty o)
{
@@ -4725,11 +4711,8 @@ PyObject* ast2obj_cmpop(cmpop_ty o)
case NotIn:
Py_INCREF(astmodulestate_global->NotIn_singleton);
return astmodulestate_global->NotIn_singleton;
- default:
- /* should never happen, but just in case ... */
- PyErr_Format(PyExc_SystemError, "unknown cmpop found");
- return NULL;
}
+ Py_UNREACHABLE();
}
PyObject*
ast2obj_comprehension(void* _o)