Home | History | Annotate | Download | only in Python
      1 /* File automatically generated by Parser/asdl_c.py. */
      2 
      3 #include <stddef.h>
      4 
      5 #include "Python.h"
      6 #include "Python-ast.h"
      7 
      8 static PyTypeObject AST_type;
      9 static PyTypeObject *mod_type;
     10 static PyObject* ast2obj_mod(void*);
     11 static PyTypeObject *Module_type;
     12 _Py_IDENTIFIER(body);
     13 static char *Module_fields[]={
     14     "body",
     15 };
     16 static PyTypeObject *Interactive_type;
     17 static char *Interactive_fields[]={
     18     "body",
     19 };
     20 static PyTypeObject *Expression_type;
     21 static char *Expression_fields[]={
     22     "body",
     23 };
     24 static PyTypeObject *Suite_type;
     25 static char *Suite_fields[]={
     26     "body",
     27 };
     28 static PyTypeObject *stmt_type;
     29 _Py_IDENTIFIER(lineno);
     30 _Py_IDENTIFIER(col_offset);
     31 static char *stmt_attributes[] = {
     32     "lineno",
     33     "col_offset",
     34 };
     35 static PyObject* ast2obj_stmt(void*);
     36 static PyTypeObject *FunctionDef_type;
     37 _Py_IDENTIFIER(name);
     38 _Py_IDENTIFIER(args);
     39 _Py_IDENTIFIER(decorator_list);
     40 _Py_IDENTIFIER(returns);
     41 static char *FunctionDef_fields[]={
     42     "name",
     43     "args",
     44     "body",
     45     "decorator_list",
     46     "returns",
     47 };
     48 static PyTypeObject *AsyncFunctionDef_type;
     49 static char *AsyncFunctionDef_fields[]={
     50     "name",
     51     "args",
     52     "body",
     53     "decorator_list",
     54     "returns",
     55 };
     56 static PyTypeObject *ClassDef_type;
     57 _Py_IDENTIFIER(bases);
     58 _Py_IDENTIFIER(keywords);
     59 static char *ClassDef_fields[]={
     60     "name",
     61     "bases",
     62     "keywords",
     63     "body",
     64     "decorator_list",
     65 };
     66 static PyTypeObject *Return_type;
     67 _Py_IDENTIFIER(value);
     68 static char *Return_fields[]={
     69     "value",
     70 };
     71 static PyTypeObject *Delete_type;
     72 _Py_IDENTIFIER(targets);
     73 static char *Delete_fields[]={
     74     "targets",
     75 };
     76 static PyTypeObject *Assign_type;
     77 static char *Assign_fields[]={
     78     "targets",
     79     "value",
     80 };
     81 static PyTypeObject *AugAssign_type;
     82 _Py_IDENTIFIER(target);
     83 _Py_IDENTIFIER(op);
     84 static char *AugAssign_fields[]={
     85     "target",
     86     "op",
     87     "value",
     88 };
     89 static PyTypeObject *AnnAssign_type;
     90 _Py_IDENTIFIER(annotation);
     91 _Py_IDENTIFIER(simple);
     92 static char *AnnAssign_fields[]={
     93     "target",
     94     "annotation",
     95     "value",
     96     "simple",
     97 };
     98 static PyTypeObject *For_type;
     99 _Py_IDENTIFIER(iter);
    100 _Py_IDENTIFIER(orelse);
    101 static char *For_fields[]={
    102     "target",
    103     "iter",
    104     "body",
    105     "orelse",
    106 };
    107 static PyTypeObject *AsyncFor_type;
    108 static char *AsyncFor_fields[]={
    109     "target",
    110     "iter",
    111     "body",
    112     "orelse",
    113 };
    114 static PyTypeObject *While_type;
    115 _Py_IDENTIFIER(test);
    116 static char *While_fields[]={
    117     "test",
    118     "body",
    119     "orelse",
    120 };
    121 static PyTypeObject *If_type;
    122 static char *If_fields[]={
    123     "test",
    124     "body",
    125     "orelse",
    126 };
    127 static PyTypeObject *With_type;
    128 _Py_IDENTIFIER(items);
    129 static char *With_fields[]={
    130     "items",
    131     "body",
    132 };
    133 static PyTypeObject *AsyncWith_type;
    134 static char *AsyncWith_fields[]={
    135     "items",
    136     "body",
    137 };
    138 static PyTypeObject *Raise_type;
    139 _Py_IDENTIFIER(exc);
    140 _Py_IDENTIFIER(cause);
    141 static char *Raise_fields[]={
    142     "exc",
    143     "cause",
    144 };
    145 static PyTypeObject *Try_type;
    146 _Py_IDENTIFIER(handlers);
    147 _Py_IDENTIFIER(finalbody);
    148 static char *Try_fields[]={
    149     "body",
    150     "handlers",
    151     "orelse",
    152     "finalbody",
    153 };
    154 static PyTypeObject *Assert_type;
    155 _Py_IDENTIFIER(msg);
    156 static char *Assert_fields[]={
    157     "test",
    158     "msg",
    159 };
    160 static PyTypeObject *Import_type;
    161 _Py_IDENTIFIER(names);
    162 static char *Import_fields[]={
    163     "names",
    164 };
    165 static PyTypeObject *ImportFrom_type;
    166 _Py_IDENTIFIER(module);
    167 _Py_IDENTIFIER(level);
    168 static char *ImportFrom_fields[]={
    169     "module",
    170     "names",
    171     "level",
    172 };
    173 static PyTypeObject *Global_type;
    174 static char *Global_fields[]={
    175     "names",
    176 };
    177 static PyTypeObject *Nonlocal_type;
    178 static char *Nonlocal_fields[]={
    179     "names",
    180 };
    181 static PyTypeObject *Expr_type;
    182 static char *Expr_fields[]={
    183     "value",
    184 };
    185 static PyTypeObject *Pass_type;
    186 static PyTypeObject *Break_type;
    187 static PyTypeObject *Continue_type;
    188 static PyTypeObject *expr_type;
    189 static char *expr_attributes[] = {
    190     "lineno",
    191     "col_offset",
    192 };
    193 static PyObject* ast2obj_expr(void*);
    194 static PyTypeObject *BoolOp_type;
    195 _Py_IDENTIFIER(values);
    196 static char *BoolOp_fields[]={
    197     "op",
    198     "values",
    199 };
    200 static PyTypeObject *BinOp_type;
    201 _Py_IDENTIFIER(left);
    202 _Py_IDENTIFIER(right);
    203 static char *BinOp_fields[]={
    204     "left",
    205     "op",
    206     "right",
    207 };
    208 static PyTypeObject *UnaryOp_type;
    209 _Py_IDENTIFIER(operand);
    210 static char *UnaryOp_fields[]={
    211     "op",
    212     "operand",
    213 };
    214 static PyTypeObject *Lambda_type;
    215 static char *Lambda_fields[]={
    216     "args",
    217     "body",
    218 };
    219 static PyTypeObject *IfExp_type;
    220 static char *IfExp_fields[]={
    221     "test",
    222     "body",
    223     "orelse",
    224 };
    225 static PyTypeObject *Dict_type;
    226 _Py_IDENTIFIER(keys);
    227 static char *Dict_fields[]={
    228     "keys",
    229     "values",
    230 };
    231 static PyTypeObject *Set_type;
    232 _Py_IDENTIFIER(elts);
    233 static char *Set_fields[]={
    234     "elts",
    235 };
    236 static PyTypeObject *ListComp_type;
    237 _Py_IDENTIFIER(elt);
    238 _Py_IDENTIFIER(generators);
    239 static char *ListComp_fields[]={
    240     "elt",
    241     "generators",
    242 };
    243 static PyTypeObject *SetComp_type;
    244 static char *SetComp_fields[]={
    245     "elt",
    246     "generators",
    247 };
    248 static PyTypeObject *DictComp_type;
    249 _Py_IDENTIFIER(key);
    250 static char *DictComp_fields[]={
    251     "key",
    252     "value",
    253     "generators",
    254 };
    255 static PyTypeObject *GeneratorExp_type;
    256 static char *GeneratorExp_fields[]={
    257     "elt",
    258     "generators",
    259 };
    260 static PyTypeObject *Await_type;
    261 static char *Await_fields[]={
    262     "value",
    263 };
    264 static PyTypeObject *Yield_type;
    265 static char *Yield_fields[]={
    266     "value",
    267 };
    268 static PyTypeObject *YieldFrom_type;
    269 static char *YieldFrom_fields[]={
    270     "value",
    271 };
    272 static PyTypeObject *Compare_type;
    273 _Py_IDENTIFIER(ops);
    274 _Py_IDENTIFIER(comparators);
    275 static char *Compare_fields[]={
    276     "left",
    277     "ops",
    278     "comparators",
    279 };
    280 static PyTypeObject *Call_type;
    281 _Py_IDENTIFIER(func);
    282 static char *Call_fields[]={
    283     "func",
    284     "args",
    285     "keywords",
    286 };
    287 static PyTypeObject *Num_type;
    288 _Py_IDENTIFIER(n);
    289 static char *Num_fields[]={
    290     "n",
    291 };
    292 static PyTypeObject *Str_type;
    293 _Py_IDENTIFIER(s);
    294 static char *Str_fields[]={
    295     "s",
    296 };
    297 static PyTypeObject *FormattedValue_type;
    298 _Py_IDENTIFIER(conversion);
    299 _Py_IDENTIFIER(format_spec);
    300 static char *FormattedValue_fields[]={
    301     "value",
    302     "conversion",
    303     "format_spec",
    304 };
    305 static PyTypeObject *JoinedStr_type;
    306 static char *JoinedStr_fields[]={
    307     "values",
    308 };
    309 static PyTypeObject *Bytes_type;
    310 static char *Bytes_fields[]={
    311     "s",
    312 };
    313 static PyTypeObject *NameConstant_type;
    314 static char *NameConstant_fields[]={
    315     "value",
    316 };
    317 static PyTypeObject *Ellipsis_type;
    318 static PyTypeObject *Constant_type;
    319 static char *Constant_fields[]={
    320     "value",
    321 };
    322 static PyTypeObject *Attribute_type;
    323 _Py_IDENTIFIER(attr);
    324 _Py_IDENTIFIER(ctx);
    325 static char *Attribute_fields[]={
    326     "value",
    327     "attr",
    328     "ctx",
    329 };
    330 static PyTypeObject *Subscript_type;
    331 _Py_IDENTIFIER(slice);
    332 static char *Subscript_fields[]={
    333     "value",
    334     "slice",
    335     "ctx",
    336 };
    337 static PyTypeObject *Starred_type;
    338 static char *Starred_fields[]={
    339     "value",
    340     "ctx",
    341 };
    342 static PyTypeObject *Name_type;
    343 _Py_IDENTIFIER(id);
    344 static char *Name_fields[]={
    345     "id",
    346     "ctx",
    347 };
    348 static PyTypeObject *List_type;
    349 static char *List_fields[]={
    350     "elts",
    351     "ctx",
    352 };
    353 static PyTypeObject *Tuple_type;
    354 static char *Tuple_fields[]={
    355     "elts",
    356     "ctx",
    357 };
    358 static PyTypeObject *expr_context_type;
    359 static PyObject *Load_singleton, *Store_singleton, *Del_singleton,
    360 *AugLoad_singleton, *AugStore_singleton, *Param_singleton;
    361 static PyObject* ast2obj_expr_context(expr_context_ty);
    362 static PyTypeObject *Load_type;
    363 static PyTypeObject *Store_type;
    364 static PyTypeObject *Del_type;
    365 static PyTypeObject *AugLoad_type;
    366 static PyTypeObject *AugStore_type;
    367 static PyTypeObject *Param_type;
    368 static PyTypeObject *slice_type;
    369 static PyObject* ast2obj_slice(void*);
    370 static PyTypeObject *Slice_type;
    371 _Py_IDENTIFIER(lower);
    372 _Py_IDENTIFIER(upper);
    373 _Py_IDENTIFIER(step);
    374 static char *Slice_fields[]={
    375     "lower",
    376     "upper",
    377     "step",
    378 };
    379 static PyTypeObject *ExtSlice_type;
    380 _Py_IDENTIFIER(dims);
    381 static char *ExtSlice_fields[]={
    382     "dims",
    383 };
    384 static PyTypeObject *Index_type;
    385 static char *Index_fields[]={
    386     "value",
    387 };
    388 static PyTypeObject *boolop_type;
    389 static PyObject *And_singleton, *Or_singleton;
    390 static PyObject* ast2obj_boolop(boolop_ty);
    391 static PyTypeObject *And_type;
    392 static PyTypeObject *Or_type;
    393 static PyTypeObject *operator_type;
    394 static PyObject *Add_singleton, *Sub_singleton, *Mult_singleton,
    395 *MatMult_singleton, *Div_singleton, *Mod_singleton, *Pow_singleton,
    396 *LShift_singleton, *RShift_singleton, *BitOr_singleton, *BitXor_singleton,
    397 *BitAnd_singleton, *FloorDiv_singleton;
    398 static PyObject* ast2obj_operator(operator_ty);
    399 static PyTypeObject *Add_type;
    400 static PyTypeObject *Sub_type;
    401 static PyTypeObject *Mult_type;
    402 static PyTypeObject *MatMult_type;
    403 static PyTypeObject *Div_type;
    404 static PyTypeObject *Mod_type;
    405 static PyTypeObject *Pow_type;
    406 static PyTypeObject *LShift_type;
    407 static PyTypeObject *RShift_type;
    408 static PyTypeObject *BitOr_type;
    409 static PyTypeObject *BitXor_type;
    410 static PyTypeObject *BitAnd_type;
    411 static PyTypeObject *FloorDiv_type;
    412 static PyTypeObject *unaryop_type;
    413 static PyObject *Invert_singleton, *Not_singleton, *UAdd_singleton,
    414 *USub_singleton;
    415 static PyObject* ast2obj_unaryop(unaryop_ty);
    416 static PyTypeObject *Invert_type;
    417 static PyTypeObject *Not_type;
    418 static PyTypeObject *UAdd_type;
    419 static PyTypeObject *USub_type;
    420 static PyTypeObject *cmpop_type;
    421 static PyObject *Eq_singleton, *NotEq_singleton, *Lt_singleton, *LtE_singleton,
    422 *Gt_singleton, *GtE_singleton, *Is_singleton, *IsNot_singleton, *In_singleton,
    423 *NotIn_singleton;
    424 static PyObject* ast2obj_cmpop(cmpop_ty);
    425 static PyTypeObject *Eq_type;
    426 static PyTypeObject *NotEq_type;
    427 static PyTypeObject *Lt_type;
    428 static PyTypeObject *LtE_type;
    429 static PyTypeObject *Gt_type;
    430 static PyTypeObject *GtE_type;
    431 static PyTypeObject *Is_type;
    432 static PyTypeObject *IsNot_type;
    433 static PyTypeObject *In_type;
    434 static PyTypeObject *NotIn_type;
    435 static PyTypeObject *comprehension_type;
    436 static PyObject* ast2obj_comprehension(void*);
    437 _Py_IDENTIFIER(ifs);
    438 _Py_IDENTIFIER(is_async);
    439 static char *comprehension_fields[]={
    440     "target",
    441     "iter",
    442     "ifs",
    443     "is_async",
    444 };
    445 static PyTypeObject *excepthandler_type;
    446 static char *excepthandler_attributes[] = {
    447     "lineno",
    448     "col_offset",
    449 };
    450 static PyObject* ast2obj_excepthandler(void*);
    451 static PyTypeObject *ExceptHandler_type;
    452 _Py_IDENTIFIER(type);
    453 static char *ExceptHandler_fields[]={
    454     "type",
    455     "name",
    456     "body",
    457 };
    458 static PyTypeObject *arguments_type;
    459 static PyObject* ast2obj_arguments(void*);
    460 _Py_IDENTIFIER(vararg);
    461 _Py_IDENTIFIER(kwonlyargs);
    462 _Py_IDENTIFIER(kw_defaults);
    463 _Py_IDENTIFIER(kwarg);
    464 _Py_IDENTIFIER(defaults);
    465 static char *arguments_fields[]={
    466     "args",
    467     "vararg",
    468     "kwonlyargs",
    469     "kw_defaults",
    470     "kwarg",
    471     "defaults",
    472 };
    473 static PyTypeObject *arg_type;
    474 static PyObject* ast2obj_arg(void*);
    475 static char *arg_attributes[] = {
    476     "lineno",
    477     "col_offset",
    478 };
    479 _Py_IDENTIFIER(arg);
    480 static char *arg_fields[]={
    481     "arg",
    482     "annotation",
    483 };
    484 static PyTypeObject *keyword_type;
    485 static PyObject* ast2obj_keyword(void*);
    486 static char *keyword_fields[]={
    487     "arg",
    488     "value",
    489 };
    490 static PyTypeObject *alias_type;
    491 static PyObject* ast2obj_alias(void*);
    492 _Py_IDENTIFIER(asname);
    493 static char *alias_fields[]={
    494     "name",
    495     "asname",
    496 };
    497 static PyTypeObject *withitem_type;
    498 static PyObject* ast2obj_withitem(void*);
    499 _Py_IDENTIFIER(context_expr);
    500 _Py_IDENTIFIER(optional_vars);
    501 static char *withitem_fields[]={
    502     "context_expr",
    503     "optional_vars",
    504 };
    505 
    506 
    507 typedef struct {
    508     PyObject_HEAD
    509     PyObject *dict;
    510 } AST_object;
    511 
    512 static void
    513 ast_dealloc(AST_object *self)
    514 {
    515     Py_CLEAR(self->dict);
    516     Py_TYPE(self)->tp_free(self);
    517 }
    518 
    519 static int
    520 ast_traverse(AST_object *self, visitproc visit, void *arg)
    521 {
    522     Py_VISIT(self->dict);
    523     return 0;
    524 }
    525 
    526 static void
    527 ast_clear(AST_object *self)
    528 {
    529     Py_CLEAR(self->dict);
    530 }
    531 
    532 static int
    533 ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
    534 {
    535     _Py_IDENTIFIER(_fields);
    536     Py_ssize_t i, numfields = 0;
    537     int res = -1;
    538     PyObject *key, *value, *fields;
    539     fields = _PyObject_GetAttrId((PyObject*)Py_TYPE(self), &PyId__fields);
    540     if (!fields)
    541         PyErr_Clear();
    542     if (fields) {
    543         numfields = PySequence_Size(fields);
    544         if (numfields == -1)
    545             goto cleanup;
    546     }
    547     res = 0; /* if no error occurs, this stays 0 to the end */
    548     if (PyTuple_GET_SIZE(args) > 0) {
    549         if (numfields != PyTuple_GET_SIZE(args)) {
    550             PyErr_Format(PyExc_TypeError, "%.400s constructor takes %s"
    551                          "%zd positional argument%s",
    552                          Py_TYPE(self)->tp_name,
    553                          numfields == 0 ? "" : "either 0 or ",
    554                          numfields, numfields == 1 ? "" : "s");
    555             res = -1;
    556             goto cleanup;
    557         }
    558         for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
    559             /* cannot be reached when fields is NULL */
    560             PyObject *name = PySequence_GetItem(fields, i);
    561             if (!name) {
    562                 res = -1;
    563                 goto cleanup;
    564             }
    565             res = PyObject_SetAttr(self, name, PyTuple_GET_ITEM(args, i));
    566             Py_DECREF(name);
    567             if (res < 0)
    568                 goto cleanup;
    569         }
    570     }
    571     if (kw) {
    572         i = 0;  /* needed by PyDict_Next */
    573         while (PyDict_Next(kw, &i, &key, &value)) {
    574             res = PyObject_SetAttr(self, key, value);
    575             if (res < 0)
    576                 goto cleanup;
    577         }
    578     }
    579   cleanup:
    580     Py_XDECREF(fields);
    581     return res;
    582 }
    583 
    584 /* Pickling support */
    585 static PyObject *
    586 ast_type_reduce(PyObject *self, PyObject *unused)
    587 {
    588     PyObject *res;
    589     _Py_IDENTIFIER(__dict__);
    590     PyObject *dict = _PyObject_GetAttrId(self, &PyId___dict__);
    591     if (dict == NULL) {
    592         if (PyErr_ExceptionMatches(PyExc_AttributeError))
    593             PyErr_Clear();
    594         else
    595             return NULL;
    596     }
    597     if (dict) {
    598         res = Py_BuildValue("O()O", Py_TYPE(self), dict);
    599         Py_DECREF(dict);
    600         return res;
    601     }
    602     return Py_BuildValue("O()", Py_TYPE(self));
    603 }
    604 
    605 static PyMethodDef ast_type_methods[] = {
    606     {"__reduce__", ast_type_reduce, METH_NOARGS, NULL},
    607     {NULL}
    608 };
    609 
    610 static PyGetSetDef ast_type_getsets[] = {
    611     {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},
    612     {NULL}
    613 };
    614 
    615 static PyTypeObject AST_type = {
    616     PyVarObject_HEAD_INIT(&PyType_Type, 0)
    617     "_ast.AST",
    618     sizeof(AST_object),
    619     0,
    620     (destructor)ast_dealloc, /* tp_dealloc */
    621     0,                       /* tp_print */
    622     0,                       /* tp_getattr */
    623     0,                       /* tp_setattr */
    624     0,                       /* tp_reserved */
    625     0,                       /* tp_repr */
    626     0,                       /* tp_as_number */
    627     0,                       /* tp_as_sequence */
    628     0,                       /* tp_as_mapping */
    629     0,                       /* tp_hash */
    630     0,                       /* tp_call */
    631     0,                       /* tp_str */
    632     PyObject_GenericGetAttr, /* tp_getattro */
    633     PyObject_GenericSetAttr, /* tp_setattro */
    634     0,                       /* tp_as_buffer */
    635     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /* tp_flags */
    636     0,                       /* tp_doc */
    637     (traverseproc)ast_traverse, /* tp_traverse */
    638     (inquiry)ast_clear,      /* tp_clear */
    639     0,                       /* tp_richcompare */
    640     0,                       /* tp_weaklistoffset */
    641     0,                       /* tp_iter */
    642     0,                       /* tp_iternext */
    643     ast_type_methods,        /* tp_methods */
    644     0,                       /* tp_members */
    645     ast_type_getsets,        /* tp_getset */
    646     0,                       /* tp_base */
    647     0,                       /* tp_dict */
    648     0,                       /* tp_descr_get */
    649     0,                       /* tp_descr_set */
    650     offsetof(AST_object, dict),/* tp_dictoffset */
    651     (initproc)ast_type_init, /* tp_init */
    652     PyType_GenericAlloc,     /* tp_alloc */
    653     PyType_GenericNew,       /* tp_new */
    654     PyObject_GC_Del,         /* tp_free */
    655 };
    656 
    657 
    658 static PyTypeObject* make_type(char *type, PyTypeObject* base, char**fields, int num_fields)
    659 {
    660     PyObject *fnames, *result;
    661     int i;
    662     fnames = PyTuple_New(num_fields);
    663     if (!fnames) return NULL;
    664     for (i = 0; i < num_fields; i++) {
    665         PyObject *field = PyUnicode_FromString(fields[i]);
    666         if (!field) {
    667             Py_DECREF(fnames);
    668             return NULL;
    669         }
    670         PyTuple_SET_ITEM(fnames, i, field);
    671     }
    672     result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){sOss}",
    673                     type, base, "_fields", fnames, "__module__", "_ast");
    674     Py_DECREF(fnames);
    675     return (PyTypeObject*)result;
    676 }
    677 
    678 static int add_attributes(PyTypeObject* type, char**attrs, int num_fields)
    679 {
    680     int i, result;
    681     _Py_IDENTIFIER(_attributes);
    682     PyObject *s, *l = PyTuple_New(num_fields);
    683     if (!l)
    684         return 0;
    685     for (i = 0; i < num_fields; i++) {
    686         s = PyUnicode_FromString(attrs[i]);
    687         if (!s) {
    688             Py_DECREF(l);
    689             return 0;
    690         }
    691         PyTuple_SET_ITEM(l, i, s);
    692     }
    693     result = _PyObject_SetAttrId((PyObject*)type, &PyId__attributes, l) >= 0;
    694     Py_DECREF(l);
    695     return result;
    696 }
    697 
    698 /* Conversion AST -> Python */
    699 
    700 static PyObject* ast2obj_list(asdl_seq *seq, PyObject* (*func)(void*))
    701 {
    702     Py_ssize_t i, n = asdl_seq_LEN(seq);
    703     PyObject *result = PyList_New(n);
    704     PyObject *value;
    705     if (!result)
    706         return NULL;
    707     for (i = 0; i < n; i++) {
    708         value = func(asdl_seq_GET(seq, i));
    709         if (!value) {
    710             Py_DECREF(result);
    711             return NULL;
    712         }
    713         PyList_SET_ITEM(result, i, value);
    714     }
    715     return result;
    716 }
    717 
    718 static PyObject* ast2obj_object(void *o)
    719 {
    720     if (!o)
    721         o = Py_None;
    722     Py_INCREF((PyObject*)o);
    723     return (PyObject*)o;
    724 }
    725 #define ast2obj_singleton ast2obj_object
    726 #define ast2obj_constant ast2obj_object
    727 #define ast2obj_identifier ast2obj_object
    728 #define ast2obj_string ast2obj_object
    729 #define ast2obj_bytes ast2obj_object
    730 
    731 static PyObject* ast2obj_int(long b)
    732 {
    733     return PyLong_FromLong(b);
    734 }
    735 
    736 /* Conversion Python -> AST */
    737 
    738 static int obj2ast_singleton(PyObject *obj, PyObject** out, PyArena* arena)
    739 {
    740     if (obj != Py_None && obj != Py_True && obj != Py_False) {
    741         PyErr_SetString(PyExc_ValueError,
    742                         "AST singleton must be True, False, or None");
    743         return 1;
    744     }
    745     *out = obj;
    746     return 0;
    747 }
    748 
    749 static int obj2ast_object(PyObject* obj, PyObject** out, PyArena* arena)
    750 {
    751     if (obj == Py_None)
    752         obj = NULL;
    753     if (obj) {
    754         if (PyArena_AddPyObject(arena, obj) < 0) {
    755             *out = NULL;
    756             return -1;
    757         }
    758         Py_INCREF(obj);
    759     }
    760     *out = obj;
    761     return 0;
    762 }
    763 
    764 static int obj2ast_constant(PyObject* obj, PyObject** out, PyArena* arena)
    765 {
    766     if (obj) {
    767         if (PyArena_AddPyObject(arena, obj) < 0) {
    768             *out = NULL;
    769             return -1;
    770         }
    771         Py_INCREF(obj);
    772     }
    773     *out = obj;
    774     return 0;
    775 }
    776 
    777 static int obj2ast_identifier(PyObject* obj, PyObject** out, PyArena* arena)
    778 {
    779     if (!PyUnicode_CheckExact(obj) && obj != Py_None) {
    780         PyErr_SetString(PyExc_TypeError, "AST identifier must be of type str");
    781         return 1;
    782     }
    783     return obj2ast_object(obj, out, arena);
    784 }
    785 
    786 static int obj2ast_string(PyObject* obj, PyObject** out, PyArena* arena)
    787 {
    788     if (!PyUnicode_CheckExact(obj) && !PyBytes_CheckExact(obj)) {
    789         PyErr_SetString(PyExc_TypeError, "AST string must be of type str");
    790         return 1;
    791     }
    792     return obj2ast_object(obj, out, arena);
    793 }
    794 
    795 static int obj2ast_bytes(PyObject* obj, PyObject** out, PyArena* arena)
    796 {
    797     if (!PyBytes_CheckExact(obj)) {
    798         PyErr_SetString(PyExc_TypeError, "AST bytes must be of type bytes");
    799         return 1;
    800     }
    801     return obj2ast_object(obj, out, arena);
    802 }
    803 
    804 static int obj2ast_int(PyObject* obj, int* out, PyArena* arena)
    805 {
    806     int i;
    807     if (!PyLong_Check(obj)) {
    808         PyErr_Format(PyExc_ValueError, "invalid integer value: %R", obj);
    809         return 1;
    810     }
    811 
    812     i = _PyLong_AsInt(obj);
    813     if (i == -1 && PyErr_Occurred())
    814         return 1;
    815     *out = i;
    816     return 0;
    817 }
    818 
    819 static int add_ast_fields(void)
    820 {
    821     PyObject *empty_tuple, *d;
    822     if (PyType_Ready(&AST_type) < 0)
    823         return -1;
    824     d = AST_type.tp_dict;
    825     empty_tuple = PyTuple_New(0);
    826     if (!empty_tuple ||
    827         PyDict_SetItemString(d, "_fields", empty_tuple) < 0 ||
    828         PyDict_SetItemString(d, "_attributes", empty_tuple) < 0) {
    829         Py_XDECREF(empty_tuple);
    830         return -1;
    831     }
    832     Py_DECREF(empty_tuple);
    833     return 0;
    834 }
    835 
    836 static int exists_not_none(PyObject *obj, _Py_Identifier *id)
    837 {
    838     int isnone;
    839     PyObject *attr = _PyObject_GetAttrId(obj, id);
    840     if (!attr) {
    841         PyErr_Clear();
    842         return 0;
    843     }
    844     isnone = attr == Py_None;
    845     Py_DECREF(attr);
    846     return !isnone;
    847 }
    848 
    849 
    850 static int init_types(void)
    851 {
    852     static int initialized;
    853     if (initialized) return 1;
    854     if (add_ast_fields() < 0) return 0;
    855     mod_type = make_type("mod", &AST_type, NULL, 0);
    856     if (!mod_type) return 0;
    857     if (!add_attributes(mod_type, NULL, 0)) return 0;
    858     Module_type = make_type("Module", mod_type, Module_fields, 1);
    859     if (!Module_type) return 0;
    860     Interactive_type = make_type("Interactive", mod_type, Interactive_fields,
    861                                  1);
    862     if (!Interactive_type) return 0;
    863     Expression_type = make_type("Expression", mod_type, Expression_fields, 1);
    864     if (!Expression_type) return 0;
    865     Suite_type = make_type("Suite", mod_type, Suite_fields, 1);
    866     if (!Suite_type) return 0;
    867     stmt_type = make_type("stmt", &AST_type, NULL, 0);
    868     if (!stmt_type) return 0;
    869     if (!add_attributes(stmt_type, stmt_attributes, 2)) return 0;
    870     FunctionDef_type = make_type("FunctionDef", stmt_type, FunctionDef_fields,
    871                                  5);
    872     if (!FunctionDef_type) return 0;
    873     AsyncFunctionDef_type = make_type("AsyncFunctionDef", stmt_type,
    874                                       AsyncFunctionDef_fields, 5);
    875     if (!AsyncFunctionDef_type) return 0;
    876     ClassDef_type = make_type("ClassDef", stmt_type, ClassDef_fields, 5);
    877     if (!ClassDef_type) return 0;
    878     Return_type = make_type("Return", stmt_type, Return_fields, 1);
    879     if (!Return_type) return 0;
    880     Delete_type = make_type("Delete", stmt_type, Delete_fields, 1);
    881     if (!Delete_type) return 0;
    882     Assign_type = make_type("Assign", stmt_type, Assign_fields, 2);
    883     if (!Assign_type) return 0;
    884     AugAssign_type = make_type("AugAssign", stmt_type, AugAssign_fields, 3);
    885     if (!AugAssign_type) return 0;
    886     AnnAssign_type = make_type("AnnAssign", stmt_type, AnnAssign_fields, 4);
    887     if (!AnnAssign_type) return 0;
    888     For_type = make_type("For", stmt_type, For_fields, 4);
    889     if (!For_type) return 0;
    890     AsyncFor_type = make_type("AsyncFor", stmt_type, AsyncFor_fields, 4);
    891     if (!AsyncFor_type) return 0;
    892     While_type = make_type("While", stmt_type, While_fields, 3);
    893     if (!While_type) return 0;
    894     If_type = make_type("If", stmt_type, If_fields, 3);
    895     if (!If_type) return 0;
    896     With_type = make_type("With", stmt_type, With_fields, 2);
    897     if (!With_type) return 0;
    898     AsyncWith_type = make_type("AsyncWith", stmt_type, AsyncWith_fields, 2);
    899     if (!AsyncWith_type) return 0;
    900     Raise_type = make_type("Raise", stmt_type, Raise_fields, 2);
    901     if (!Raise_type) return 0;
    902     Try_type = make_type("Try", stmt_type, Try_fields, 4);
    903     if (!Try_type) return 0;
    904     Assert_type = make_type("Assert", stmt_type, Assert_fields, 2);
    905     if (!Assert_type) return 0;
    906     Import_type = make_type("Import", stmt_type, Import_fields, 1);
    907     if (!Import_type) return 0;
    908     ImportFrom_type = make_type("ImportFrom", stmt_type, ImportFrom_fields, 3);
    909     if (!ImportFrom_type) return 0;
    910     Global_type = make_type("Global", stmt_type, Global_fields, 1);
    911     if (!Global_type) return 0;
    912     Nonlocal_type = make_type("Nonlocal", stmt_type, Nonlocal_fields, 1);
    913     if (!Nonlocal_type) return 0;
    914     Expr_type = make_type("Expr", stmt_type, Expr_fields, 1);
    915     if (!Expr_type) return 0;
    916     Pass_type = make_type("Pass", stmt_type, NULL, 0);
    917     if (!Pass_type) return 0;
    918     Break_type = make_type("Break", stmt_type, NULL, 0);
    919     if (!Break_type) return 0;
    920     Continue_type = make_type("Continue", stmt_type, NULL, 0);
    921     if (!Continue_type) return 0;
    922     expr_type = make_type("expr", &AST_type, NULL, 0);
    923     if (!expr_type) return 0;
    924     if (!add_attributes(expr_type, expr_attributes, 2)) return 0;
    925     BoolOp_type = make_type("BoolOp", expr_type, BoolOp_fields, 2);
    926     if (!BoolOp_type) return 0;
    927     BinOp_type = make_type("BinOp", expr_type, BinOp_fields, 3);
    928     if (!BinOp_type) return 0;
    929     UnaryOp_type = make_type("UnaryOp", expr_type, UnaryOp_fields, 2);
    930     if (!UnaryOp_type) return 0;
    931     Lambda_type = make_type("Lambda", expr_type, Lambda_fields, 2);
    932     if (!Lambda_type) return 0;
    933     IfExp_type = make_type("IfExp", expr_type, IfExp_fields, 3);
    934     if (!IfExp_type) return 0;
    935     Dict_type = make_type("Dict", expr_type, Dict_fields, 2);
    936     if (!Dict_type) return 0;
    937     Set_type = make_type("Set", expr_type, Set_fields, 1);
    938     if (!Set_type) return 0;
    939     ListComp_type = make_type("ListComp", expr_type, ListComp_fields, 2);
    940     if (!ListComp_type) return 0;
    941     SetComp_type = make_type("SetComp", expr_type, SetComp_fields, 2);
    942     if (!SetComp_type) return 0;
    943     DictComp_type = make_type("DictComp", expr_type, DictComp_fields, 3);
    944     if (!DictComp_type) return 0;
    945     GeneratorExp_type = make_type("GeneratorExp", expr_type,
    946                                   GeneratorExp_fields, 2);
    947     if (!GeneratorExp_type) return 0;
    948     Await_type = make_type("Await", expr_type, Await_fields, 1);
    949     if (!Await_type) return 0;
    950     Yield_type = make_type("Yield", expr_type, Yield_fields, 1);
    951     if (!Yield_type) return 0;
    952     YieldFrom_type = make_type("YieldFrom", expr_type, YieldFrom_fields, 1);
    953     if (!YieldFrom_type) return 0;
    954     Compare_type = make_type("Compare", expr_type, Compare_fields, 3);
    955     if (!Compare_type) return 0;
    956     Call_type = make_type("Call", expr_type, Call_fields, 3);
    957     if (!Call_type) return 0;
    958     Num_type = make_type("Num", expr_type, Num_fields, 1);
    959     if (!Num_type) return 0;
    960     Str_type = make_type("Str", expr_type, Str_fields, 1);
    961     if (!Str_type) return 0;
    962     FormattedValue_type = make_type("FormattedValue", expr_type,
    963                                     FormattedValue_fields, 3);
    964     if (!FormattedValue_type) return 0;
    965     JoinedStr_type = make_type("JoinedStr", expr_type, JoinedStr_fields, 1);
    966     if (!JoinedStr_type) return 0;
    967     Bytes_type = make_type("Bytes", expr_type, Bytes_fields, 1);
    968     if (!Bytes_type) return 0;
    969     NameConstant_type = make_type("NameConstant", expr_type,
    970                                   NameConstant_fields, 1);
    971     if (!NameConstant_type) return 0;
    972     Ellipsis_type = make_type("Ellipsis", expr_type, NULL, 0);
    973     if (!Ellipsis_type) return 0;
    974     Constant_type = make_type("Constant", expr_type, Constant_fields, 1);
    975     if (!Constant_type) return 0;
    976     Attribute_type = make_type("Attribute", expr_type, Attribute_fields, 3);
    977     if (!Attribute_type) return 0;
    978     Subscript_type = make_type("Subscript", expr_type, Subscript_fields, 3);
    979     if (!Subscript_type) return 0;
    980     Starred_type = make_type("Starred", expr_type, Starred_fields, 2);
    981     if (!Starred_type) return 0;
    982     Name_type = make_type("Name", expr_type, Name_fields, 2);
    983     if (!Name_type) return 0;
    984     List_type = make_type("List", expr_type, List_fields, 2);
    985     if (!List_type) return 0;
    986     Tuple_type = make_type("Tuple", expr_type, Tuple_fields, 2);
    987     if (!Tuple_type) return 0;
    988     expr_context_type = make_type("expr_context", &AST_type, NULL, 0);
    989     if (!expr_context_type) return 0;
    990     if (!add_attributes(expr_context_type, NULL, 0)) return 0;
    991     Load_type = make_type("Load", expr_context_type, NULL, 0);
    992     if (!Load_type) return 0;
    993     Load_singleton = PyType_GenericNew(Load_type, NULL, NULL);
    994     if (!Load_singleton) return 0;
    995     Store_type = make_type("Store", expr_context_type, NULL, 0);
    996     if (!Store_type) return 0;
    997     Store_singleton = PyType_GenericNew(Store_type, NULL, NULL);
    998     if (!Store_singleton) return 0;
    999     Del_type = make_type("Del", expr_context_type, NULL, 0);
   1000     if (!Del_type) return 0;
   1001     Del_singleton = PyType_GenericNew(Del_type, NULL, NULL);
   1002     if (!Del_singleton) return 0;
   1003     AugLoad_type = make_type("AugLoad", expr_context_type, NULL, 0);
   1004     if (!AugLoad_type) return 0;
   1005     AugLoad_singleton = PyType_GenericNew(AugLoad_type, NULL, NULL);
   1006     if (!AugLoad_singleton) return 0;
   1007     AugStore_type = make_type("AugStore", expr_context_type, NULL, 0);
   1008     if (!AugStore_type) return 0;
   1009     AugStore_singleton = PyType_GenericNew(AugStore_type, NULL, NULL);
   1010     if (!AugStore_singleton) return 0;
   1011     Param_type = make_type("Param", expr_context_type, NULL, 0);
   1012     if (!Param_type) return 0;
   1013     Param_singleton = PyType_GenericNew(Param_type, NULL, NULL);
   1014     if (!Param_singleton) return 0;
   1015     slice_type = make_type("slice", &AST_type, NULL, 0);
   1016     if (!slice_type) return 0;
   1017     if (!add_attributes(slice_type, NULL, 0)) return 0;
   1018     Slice_type = make_type("Slice", slice_type, Slice_fields, 3);
   1019     if (!Slice_type) return 0;
   1020     ExtSlice_type = make_type("ExtSlice", slice_type, ExtSlice_fields, 1);
   1021     if (!ExtSlice_type) return 0;
   1022     Index_type = make_type("Index", slice_type, Index_fields, 1);
   1023     if (!Index_type) return 0;
   1024     boolop_type = make_type("boolop", &AST_type, NULL, 0);
   1025     if (!boolop_type) return 0;
   1026     if (!add_attributes(boolop_type, NULL, 0)) return 0;
   1027     And_type = make_type("And", boolop_type, NULL, 0);
   1028     if (!And_type) return 0;
   1029     And_singleton = PyType_GenericNew(And_type, NULL, NULL);
   1030     if (!And_singleton) return 0;
   1031     Or_type = make_type("Or", boolop_type, NULL, 0);
   1032     if (!Or_type) return 0;
   1033     Or_singleton = PyType_GenericNew(Or_type, NULL, NULL);
   1034     if (!Or_singleton) return 0;
   1035     operator_type = make_type("operator", &AST_type, NULL, 0);
   1036     if (!operator_type) return 0;
   1037     if (!add_attributes(operator_type, NULL, 0)) return 0;
   1038     Add_type = make_type("Add", operator_type, NULL, 0);
   1039     if (!Add_type) return 0;
   1040     Add_singleton = PyType_GenericNew(Add_type, NULL, NULL);
   1041     if (!Add_singleton) return 0;
   1042     Sub_type = make_type("Sub", operator_type, NULL, 0);
   1043     if (!Sub_type) return 0;
   1044     Sub_singleton = PyType_GenericNew(Sub_type, NULL, NULL);
   1045     if (!Sub_singleton) return 0;
   1046     Mult_type = make_type("Mult", operator_type, NULL, 0);
   1047     if (!Mult_type) return 0;
   1048     Mult_singleton = PyType_GenericNew(Mult_type, NULL, NULL);
   1049     if (!Mult_singleton) return 0;
   1050     MatMult_type = make_type("MatMult", operator_type, NULL, 0);
   1051     if (!MatMult_type) return 0;
   1052     MatMult_singleton = PyType_GenericNew(MatMult_type, NULL, NULL);
   1053     if (!MatMult_singleton) return 0;
   1054     Div_type = make_type("Div", operator_type, NULL, 0);
   1055     if (!Div_type) return 0;
   1056     Div_singleton = PyType_GenericNew(Div_type, NULL, NULL);
   1057     if (!Div_singleton) return 0;
   1058     Mod_type = make_type("Mod", operator_type, NULL, 0);
   1059     if (!Mod_type) return 0;
   1060     Mod_singleton = PyType_GenericNew(Mod_type, NULL, NULL);
   1061     if (!Mod_singleton) return 0;
   1062     Pow_type = make_type("Pow", operator_type, NULL, 0);
   1063     if (!Pow_type) return 0;
   1064     Pow_singleton = PyType_GenericNew(Pow_type, NULL, NULL);
   1065     if (!Pow_singleton) return 0;
   1066     LShift_type = make_type("LShift", operator_type, NULL, 0);
   1067     if (!LShift_type) return 0;
   1068     LShift_singleton = PyType_GenericNew(LShift_type, NULL, NULL);
   1069     if (!LShift_singleton) return 0;
   1070     RShift_type = make_type("RShift", operator_type, NULL, 0);
   1071     if (!RShift_type) return 0;
   1072     RShift_singleton = PyType_GenericNew(RShift_type, NULL, NULL);
   1073     if (!RShift_singleton) return 0;
   1074     BitOr_type = make_type("BitOr", operator_type, NULL, 0);
   1075     if (!BitOr_type) return 0;
   1076     BitOr_singleton = PyType_GenericNew(BitOr_type, NULL, NULL);
   1077     if (!BitOr_singleton) return 0;
   1078     BitXor_type = make_type("BitXor", operator_type, NULL, 0);
   1079     if (!BitXor_type) return 0;
   1080     BitXor_singleton = PyType_GenericNew(BitXor_type, NULL, NULL);
   1081     if (!BitXor_singleton) return 0;
   1082     BitAnd_type = make_type("BitAnd", operator_type, NULL, 0);
   1083     if (!BitAnd_type) return 0;
   1084     BitAnd_singleton = PyType_GenericNew(BitAnd_type, NULL, NULL);
   1085     if (!BitAnd_singleton) return 0;
   1086     FloorDiv_type = make_type("FloorDiv", operator_type, NULL, 0);
   1087     if (!FloorDiv_type) return 0;
   1088     FloorDiv_singleton = PyType_GenericNew(FloorDiv_type, NULL, NULL);
   1089     if (!FloorDiv_singleton) return 0;
   1090     unaryop_type = make_type("unaryop", &AST_type, NULL, 0);
   1091     if (!unaryop_type) return 0;
   1092     if (!add_attributes(unaryop_type, NULL, 0)) return 0;
   1093     Invert_type = make_type("Invert", unaryop_type, NULL, 0);
   1094     if (!Invert_type) return 0;
   1095     Invert_singleton = PyType_GenericNew(Invert_type, NULL, NULL);
   1096     if (!Invert_singleton) return 0;
   1097     Not_type = make_type("Not", unaryop_type, NULL, 0);
   1098     if (!Not_type) return 0;
   1099     Not_singleton = PyType_GenericNew(Not_type, NULL, NULL);
   1100     if (!Not_singleton) return 0;
   1101     UAdd_type = make_type("UAdd", unaryop_type, NULL, 0);
   1102     if (!UAdd_type) return 0;
   1103     UAdd_singleton = PyType_GenericNew(UAdd_type, NULL, NULL);
   1104     if (!UAdd_singleton) return 0;
   1105     USub_type = make_type("USub", unaryop_type, NULL, 0);
   1106     if (!USub_type) return 0;
   1107     USub_singleton = PyType_GenericNew(USub_type, NULL, NULL);
   1108     if (!USub_singleton) return 0;
   1109     cmpop_type = make_type("cmpop", &AST_type, NULL, 0);
   1110     if (!cmpop_type) return 0;
   1111     if (!add_attributes(cmpop_type, NULL, 0)) return 0;
   1112     Eq_type = make_type("Eq", cmpop_type, NULL, 0);
   1113     if (!Eq_type) return 0;
   1114     Eq_singleton = PyType_GenericNew(Eq_type, NULL, NULL);
   1115     if (!Eq_singleton) return 0;
   1116     NotEq_type = make_type("NotEq", cmpop_type, NULL, 0);
   1117     if (!NotEq_type) return 0;
   1118     NotEq_singleton = PyType_GenericNew(NotEq_type, NULL, NULL);
   1119     if (!NotEq_singleton) return 0;
   1120     Lt_type = make_type("Lt", cmpop_type, NULL, 0);
   1121     if (!Lt_type) return 0;
   1122     Lt_singleton = PyType_GenericNew(Lt_type, NULL, NULL);
   1123     if (!Lt_singleton) return 0;
   1124     LtE_type = make_type("LtE", cmpop_type, NULL, 0);
   1125     if (!LtE_type) return 0;
   1126     LtE_singleton = PyType_GenericNew(LtE_type, NULL, NULL);
   1127     if (!LtE_singleton) return 0;
   1128     Gt_type = make_type("Gt", cmpop_type, NULL, 0);
   1129     if (!Gt_type) return 0;
   1130     Gt_singleton = PyType_GenericNew(Gt_type, NULL, NULL);
   1131     if (!Gt_singleton) return 0;
   1132     GtE_type = make_type("GtE", cmpop_type, NULL, 0);
   1133     if (!GtE_type) return 0;
   1134     GtE_singleton = PyType_GenericNew(GtE_type, NULL, NULL);
   1135     if (!GtE_singleton) return 0;
   1136     Is_type = make_type("Is", cmpop_type, NULL, 0);
   1137     if (!Is_type) return 0;
   1138     Is_singleton = PyType_GenericNew(Is_type, NULL, NULL);
   1139     if (!Is_singleton) return 0;
   1140     IsNot_type = make_type("IsNot", cmpop_type, NULL, 0);
   1141     if (!IsNot_type) return 0;
   1142     IsNot_singleton = PyType_GenericNew(IsNot_type, NULL, NULL);
   1143     if (!IsNot_singleton) return 0;
   1144     In_type = make_type("In", cmpop_type, NULL, 0);
   1145     if (!In_type) return 0;
   1146     In_singleton = PyType_GenericNew(In_type, NULL, NULL);
   1147     if (!In_singleton) return 0;
   1148     NotIn_type = make_type("NotIn", cmpop_type, NULL, 0);
   1149     if (!NotIn_type) return 0;
   1150     NotIn_singleton = PyType_GenericNew(NotIn_type, NULL, NULL);
   1151     if (!NotIn_singleton) return 0;
   1152     comprehension_type = make_type("comprehension", &AST_type,
   1153                                    comprehension_fields, 4);
   1154     if (!comprehension_type) return 0;
   1155     if (!add_attributes(comprehension_type, NULL, 0)) return 0;
   1156     excepthandler_type = make_type("excepthandler", &AST_type, NULL, 0);
   1157     if (!excepthandler_type) return 0;
   1158     if (!add_attributes(excepthandler_type, excepthandler_attributes, 2))
   1159         return 0;
   1160     ExceptHandler_type = make_type("ExceptHandler", excepthandler_type,
   1161                                    ExceptHandler_fields, 3);
   1162     if (!ExceptHandler_type) return 0;
   1163     arguments_type = make_type("arguments", &AST_type, arguments_fields, 6);
   1164     if (!arguments_type) return 0;
   1165     if (!add_attributes(arguments_type, NULL, 0)) return 0;
   1166     arg_type = make_type("arg", &AST_type, arg_fields, 2);
   1167     if (!arg_type) return 0;
   1168     if (!add_attributes(arg_type, arg_attributes, 2)) return 0;
   1169     keyword_type = make_type("keyword", &AST_type, keyword_fields, 2);
   1170     if (!keyword_type) return 0;
   1171     if (!add_attributes(keyword_type, NULL, 0)) return 0;
   1172     alias_type = make_type("alias", &AST_type, alias_fields, 2);
   1173     if (!alias_type) return 0;
   1174     if (!add_attributes(alias_type, NULL, 0)) return 0;
   1175     withitem_type = make_type("withitem", &AST_type, withitem_fields, 2);
   1176     if (!withitem_type) return 0;
   1177     if (!add_attributes(withitem_type, NULL, 0)) return 0;
   1178     initialized = 1;
   1179     return 1;
   1180 }
   1181 
   1182 static int obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena);
   1183 static int obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena);
   1184 static int obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena);
   1185 static int obj2ast_expr_context(PyObject* obj, expr_context_ty* out, PyArena*
   1186                                 arena);
   1187 static int obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena);
   1188 static int obj2ast_boolop(PyObject* obj, boolop_ty* out, PyArena* arena);
   1189 static int obj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena);
   1190 static int obj2ast_unaryop(PyObject* obj, unaryop_ty* out, PyArena* arena);
   1191 static int obj2ast_cmpop(PyObject* obj, cmpop_ty* out, PyArena* arena);
   1192 static int obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena*
   1193                                  arena);
   1194 static int obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena*
   1195                                  arena);
   1196 static int obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena);
   1197 static int obj2ast_arg(PyObject* obj, arg_ty* out, PyArena* arena);
   1198 static int obj2ast_keyword(PyObject* obj, keyword_ty* out, PyArena* arena);
   1199 static int obj2ast_alias(PyObject* obj, alias_ty* out, PyArena* arena);
   1200 static int obj2ast_withitem(PyObject* obj, withitem_ty* out, PyArena* arena);
   1201 
   1202 mod_ty
   1203 Module(asdl_seq * body, PyArena *arena)
   1204 {
   1205     mod_ty p;
   1206     p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
   1207     if (!p)
   1208         return NULL;
   1209     p->kind = Module_kind;
   1210     p->v.Module.body = body;
   1211     return p;
   1212 }
   1213 
   1214 mod_ty
   1215 Interactive(asdl_seq * body, PyArena *arena)
   1216 {
   1217     mod_ty p;
   1218     p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
   1219     if (!p)
   1220         return NULL;
   1221     p->kind = Interactive_kind;
   1222     p->v.Interactive.body = body;
   1223     return p;
   1224 }
   1225 
   1226 mod_ty
   1227 Expression(expr_ty body, PyArena *arena)
   1228 {
   1229     mod_ty p;
   1230     if (!body) {
   1231         PyErr_SetString(PyExc_ValueError,
   1232                         "field body is required for Expression");
   1233         return NULL;
   1234     }
   1235     p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
   1236     if (!p)
   1237         return NULL;
   1238     p->kind = Expression_kind;
   1239     p->v.Expression.body = body;
   1240     return p;
   1241 }
   1242 
   1243 mod_ty
   1244 Suite(asdl_seq * body, PyArena *arena)
   1245 {
   1246     mod_ty p;
   1247     p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
   1248     if (!p)
   1249         return NULL;
   1250     p->kind = Suite_kind;
   1251     p->v.Suite.body = body;
   1252     return p;
   1253 }
   1254 
   1255 stmt_ty
   1256 FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
   1257             decorator_list, expr_ty returns, int lineno, int col_offset,
   1258             PyArena *arena)
   1259 {
   1260     stmt_ty p;
   1261     if (!name) {
   1262         PyErr_SetString(PyExc_ValueError,
   1263                         "field name is required for FunctionDef");
   1264         return NULL;
   1265     }
   1266     if (!args) {
   1267         PyErr_SetString(PyExc_ValueError,
   1268                         "field args is required for FunctionDef");
   1269         return NULL;
   1270     }
   1271     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1272     if (!p)
   1273         return NULL;
   1274     p->kind = FunctionDef_kind;
   1275     p->v.FunctionDef.name = name;
   1276     p->v.FunctionDef.args = args;
   1277     p->v.FunctionDef.body = body;
   1278     p->v.FunctionDef.decorator_list = decorator_list;
   1279     p->v.FunctionDef.returns = returns;
   1280     p->lineno = lineno;
   1281     p->col_offset = col_offset;
   1282     return p;
   1283 }
   1284 
   1285 stmt_ty
   1286 AsyncFunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq
   1287                  * decorator_list, expr_ty returns, int lineno, int col_offset,
   1288                  PyArena *arena)
   1289 {
   1290     stmt_ty p;
   1291     if (!name) {
   1292         PyErr_SetString(PyExc_ValueError,
   1293                         "field name is required for AsyncFunctionDef");
   1294         return NULL;
   1295     }
   1296     if (!args) {
   1297         PyErr_SetString(PyExc_ValueError,
   1298                         "field args is required for AsyncFunctionDef");
   1299         return NULL;
   1300     }
   1301     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1302     if (!p)
   1303         return NULL;
   1304     p->kind = AsyncFunctionDef_kind;
   1305     p->v.AsyncFunctionDef.name = name;
   1306     p->v.AsyncFunctionDef.args = args;
   1307     p->v.AsyncFunctionDef.body = body;
   1308     p->v.AsyncFunctionDef.decorator_list = decorator_list;
   1309     p->v.AsyncFunctionDef.returns = returns;
   1310     p->lineno = lineno;
   1311     p->col_offset = col_offset;
   1312     return p;
   1313 }
   1314 
   1315 stmt_ty
   1316 ClassDef(identifier name, asdl_seq * bases, asdl_seq * keywords, asdl_seq *
   1317          body, asdl_seq * decorator_list, int lineno, int col_offset, PyArena
   1318          *arena)
   1319 {
   1320     stmt_ty p;
   1321     if (!name) {
   1322         PyErr_SetString(PyExc_ValueError,
   1323                         "field name is required for ClassDef");
   1324         return NULL;
   1325     }
   1326     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1327     if (!p)
   1328         return NULL;
   1329     p->kind = ClassDef_kind;
   1330     p->v.ClassDef.name = name;
   1331     p->v.ClassDef.bases = bases;
   1332     p->v.ClassDef.keywords = keywords;
   1333     p->v.ClassDef.body = body;
   1334     p->v.ClassDef.decorator_list = decorator_list;
   1335     p->lineno = lineno;
   1336     p->col_offset = col_offset;
   1337     return p;
   1338 }
   1339 
   1340 stmt_ty
   1341 Return(expr_ty value, int lineno, int col_offset, PyArena *arena)
   1342 {
   1343     stmt_ty p;
   1344     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1345     if (!p)
   1346         return NULL;
   1347     p->kind = Return_kind;
   1348     p->v.Return.value = value;
   1349     p->lineno = lineno;
   1350     p->col_offset = col_offset;
   1351     return p;
   1352 }
   1353 
   1354 stmt_ty
   1355 Delete(asdl_seq * targets, int lineno, int col_offset, PyArena *arena)
   1356 {
   1357     stmt_ty p;
   1358     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1359     if (!p)
   1360         return NULL;
   1361     p->kind = Delete_kind;
   1362     p->v.Delete.targets = targets;
   1363     p->lineno = lineno;
   1364     p->col_offset = col_offset;
   1365     return p;
   1366 }
   1367 
   1368 stmt_ty
   1369 Assign(asdl_seq * targets, expr_ty value, int lineno, int col_offset, PyArena
   1370        *arena)
   1371 {
   1372     stmt_ty p;
   1373     if (!value) {
   1374         PyErr_SetString(PyExc_ValueError,
   1375                         "field value is required for Assign");
   1376         return NULL;
   1377     }
   1378     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1379     if (!p)
   1380         return NULL;
   1381     p->kind = Assign_kind;
   1382     p->v.Assign.targets = targets;
   1383     p->v.Assign.value = value;
   1384     p->lineno = lineno;
   1385     p->col_offset = col_offset;
   1386     return p;
   1387 }
   1388 
   1389 stmt_ty
   1390 AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int
   1391           col_offset, PyArena *arena)
   1392 {
   1393     stmt_ty p;
   1394     if (!target) {
   1395         PyErr_SetString(PyExc_ValueError,
   1396                         "field target is required for AugAssign");
   1397         return NULL;
   1398     }
   1399     if (!op) {
   1400         PyErr_SetString(PyExc_ValueError,
   1401                         "field op is required for AugAssign");
   1402         return NULL;
   1403     }
   1404     if (!value) {
   1405         PyErr_SetString(PyExc_ValueError,
   1406                         "field value is required for AugAssign");
   1407         return NULL;
   1408     }
   1409     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1410     if (!p)
   1411         return NULL;
   1412     p->kind = AugAssign_kind;
   1413     p->v.AugAssign.target = target;
   1414     p->v.AugAssign.op = op;
   1415     p->v.AugAssign.value = value;
   1416     p->lineno = lineno;
   1417     p->col_offset = col_offset;
   1418     return p;
   1419 }
   1420 
   1421 stmt_ty
   1422 AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int simple, int
   1423           lineno, int col_offset, PyArena *arena)
   1424 {
   1425     stmt_ty p;
   1426     if (!target) {
   1427         PyErr_SetString(PyExc_ValueError,
   1428                         "field target is required for AnnAssign");
   1429         return NULL;
   1430     }
   1431     if (!annotation) {
   1432         PyErr_SetString(PyExc_ValueError,
   1433                         "field annotation is required for AnnAssign");
   1434         return NULL;
   1435     }
   1436     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1437     if (!p)
   1438         return NULL;
   1439     p->kind = AnnAssign_kind;
   1440     p->v.AnnAssign.target = target;
   1441     p->v.AnnAssign.annotation = annotation;
   1442     p->v.AnnAssign.value = value;
   1443     p->v.AnnAssign.simple = simple;
   1444     p->lineno = lineno;
   1445     p->col_offset = col_offset;
   1446     return p;
   1447 }
   1448 
   1449 stmt_ty
   1450 For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse, int
   1451     lineno, int col_offset, PyArena *arena)
   1452 {
   1453     stmt_ty p;
   1454     if (!target) {
   1455         PyErr_SetString(PyExc_ValueError,
   1456                         "field target is required for For");
   1457         return NULL;
   1458     }
   1459     if (!iter) {
   1460         PyErr_SetString(PyExc_ValueError,
   1461                         "field iter is required for For");
   1462         return NULL;
   1463     }
   1464     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1465     if (!p)
   1466         return NULL;
   1467     p->kind = For_kind;
   1468     p->v.For.target = target;
   1469     p->v.For.iter = iter;
   1470     p->v.For.body = body;
   1471     p->v.For.orelse = orelse;
   1472     p->lineno = lineno;
   1473     p->col_offset = col_offset;
   1474     return p;
   1475 }
   1476 
   1477 stmt_ty
   1478 AsyncFor(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse, int
   1479          lineno, int col_offset, PyArena *arena)
   1480 {
   1481     stmt_ty p;
   1482     if (!target) {
   1483         PyErr_SetString(PyExc_ValueError,
   1484                         "field target is required for AsyncFor");
   1485         return NULL;
   1486     }
   1487     if (!iter) {
   1488         PyErr_SetString(PyExc_ValueError,
   1489                         "field iter is required for AsyncFor");
   1490         return NULL;
   1491     }
   1492     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1493     if (!p)
   1494         return NULL;
   1495     p->kind = AsyncFor_kind;
   1496     p->v.AsyncFor.target = target;
   1497     p->v.AsyncFor.iter = iter;
   1498     p->v.AsyncFor.body = body;
   1499     p->v.AsyncFor.orelse = orelse;
   1500     p->lineno = lineno;
   1501     p->col_offset = col_offset;
   1502     return p;
   1503 }
   1504 
   1505 stmt_ty
   1506 While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int
   1507       col_offset, PyArena *arena)
   1508 {
   1509     stmt_ty p;
   1510     if (!test) {
   1511         PyErr_SetString(PyExc_ValueError,
   1512                         "field test is required for While");
   1513         return NULL;
   1514     }
   1515     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1516     if (!p)
   1517         return NULL;
   1518     p->kind = While_kind;
   1519     p->v.While.test = test;
   1520     p->v.While.body = body;
   1521     p->v.While.orelse = orelse;
   1522     p->lineno = lineno;
   1523     p->col_offset = col_offset;
   1524     return p;
   1525 }
   1526 
   1527 stmt_ty
   1528 If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int
   1529    col_offset, PyArena *arena)
   1530 {
   1531     stmt_ty p;
   1532     if (!test) {
   1533         PyErr_SetString(PyExc_ValueError,
   1534                         "field test is required for If");
   1535         return NULL;
   1536     }
   1537     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1538     if (!p)
   1539         return NULL;
   1540     p->kind = If_kind;
   1541     p->v.If.test = test;
   1542     p->v.If.body = body;
   1543     p->v.If.orelse = orelse;
   1544     p->lineno = lineno;
   1545     p->col_offset = col_offset;
   1546     return p;
   1547 }
   1548 
   1549 stmt_ty
   1550 With(asdl_seq * items, asdl_seq * body, int lineno, int col_offset, PyArena
   1551      *arena)
   1552 {
   1553     stmt_ty p;
   1554     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1555     if (!p)
   1556         return NULL;
   1557     p->kind = With_kind;
   1558     p->v.With.items = items;
   1559     p->v.With.body = body;
   1560     p->lineno = lineno;
   1561     p->col_offset = col_offset;
   1562     return p;
   1563 }
   1564 
   1565 stmt_ty
   1566 AsyncWith(asdl_seq * items, asdl_seq * body, int lineno, int col_offset,
   1567           PyArena *arena)
   1568 {
   1569     stmt_ty p;
   1570     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1571     if (!p)
   1572         return NULL;
   1573     p->kind = AsyncWith_kind;
   1574     p->v.AsyncWith.items = items;
   1575     p->v.AsyncWith.body = body;
   1576     p->lineno = lineno;
   1577     p->col_offset = col_offset;
   1578     return p;
   1579 }
   1580 
   1581 stmt_ty
   1582 Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, PyArena *arena)
   1583 {
   1584     stmt_ty p;
   1585     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1586     if (!p)
   1587         return NULL;
   1588     p->kind = Raise_kind;
   1589     p->v.Raise.exc = exc;
   1590     p->v.Raise.cause = cause;
   1591     p->lineno = lineno;
   1592     p->col_offset = col_offset;
   1593     return p;
   1594 }
   1595 
   1596 stmt_ty
   1597 Try(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse, asdl_seq *
   1598     finalbody, int lineno, int col_offset, PyArena *arena)
   1599 {
   1600     stmt_ty p;
   1601     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1602     if (!p)
   1603         return NULL;
   1604     p->kind = Try_kind;
   1605     p->v.Try.body = body;
   1606     p->v.Try.handlers = handlers;
   1607     p->v.Try.orelse = orelse;
   1608     p->v.Try.finalbody = finalbody;
   1609     p->lineno = lineno;
   1610     p->col_offset = col_offset;
   1611     return p;
   1612 }
   1613 
   1614 stmt_ty
   1615 Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, PyArena *arena)
   1616 {
   1617     stmt_ty p;
   1618     if (!test) {
   1619         PyErr_SetString(PyExc_ValueError,
   1620                         "field test is required for Assert");
   1621         return NULL;
   1622     }
   1623     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1624     if (!p)
   1625         return NULL;
   1626     p->kind = Assert_kind;
   1627     p->v.Assert.test = test;
   1628     p->v.Assert.msg = msg;
   1629     p->lineno = lineno;
   1630     p->col_offset = col_offset;
   1631     return p;
   1632 }
   1633 
   1634 stmt_ty
   1635 Import(asdl_seq * names, int lineno, int col_offset, PyArena *arena)
   1636 {
   1637     stmt_ty p;
   1638     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1639     if (!p)
   1640         return NULL;
   1641     p->kind = Import_kind;
   1642     p->v.Import.names = names;
   1643     p->lineno = lineno;
   1644     p->col_offset = col_offset;
   1645     return p;
   1646 }
   1647 
   1648 stmt_ty
   1649 ImportFrom(identifier module, asdl_seq * names, int level, int lineno, int
   1650            col_offset, PyArena *arena)
   1651 {
   1652     stmt_ty p;
   1653     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1654     if (!p)
   1655         return NULL;
   1656     p->kind = ImportFrom_kind;
   1657     p->v.ImportFrom.module = module;
   1658     p->v.ImportFrom.names = names;
   1659     p->v.ImportFrom.level = level;
   1660     p->lineno = lineno;
   1661     p->col_offset = col_offset;
   1662     return p;
   1663 }
   1664 
   1665 stmt_ty
   1666 Global(asdl_seq * names, int lineno, int col_offset, PyArena *arena)
   1667 {
   1668     stmt_ty p;
   1669     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1670     if (!p)
   1671         return NULL;
   1672     p->kind = Global_kind;
   1673     p->v.Global.names = names;
   1674     p->lineno = lineno;
   1675     p->col_offset = col_offset;
   1676     return p;
   1677 }
   1678 
   1679 stmt_ty
   1680 Nonlocal(asdl_seq * names, int lineno, int col_offset, PyArena *arena)
   1681 {
   1682     stmt_ty p;
   1683     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1684     if (!p)
   1685         return NULL;
   1686     p->kind = Nonlocal_kind;
   1687     p->v.Nonlocal.names = names;
   1688     p->lineno = lineno;
   1689     p->col_offset = col_offset;
   1690     return p;
   1691 }
   1692 
   1693 stmt_ty
   1694 Expr(expr_ty value, int lineno, int col_offset, PyArena *arena)
   1695 {
   1696     stmt_ty p;
   1697     if (!value) {
   1698         PyErr_SetString(PyExc_ValueError,
   1699                         "field value is required for Expr");
   1700         return NULL;
   1701     }
   1702     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1703     if (!p)
   1704         return NULL;
   1705     p->kind = Expr_kind;
   1706     p->v.Expr.value = value;
   1707     p->lineno = lineno;
   1708     p->col_offset = col_offset;
   1709     return p;
   1710 }
   1711 
   1712 stmt_ty
   1713 Pass(int lineno, int col_offset, PyArena *arena)
   1714 {
   1715     stmt_ty p;
   1716     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1717     if (!p)
   1718         return NULL;
   1719     p->kind = Pass_kind;
   1720     p->lineno = lineno;
   1721     p->col_offset = col_offset;
   1722     return p;
   1723 }
   1724 
   1725 stmt_ty
   1726 Break(int lineno, int col_offset, PyArena *arena)
   1727 {
   1728     stmt_ty p;
   1729     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1730     if (!p)
   1731         return NULL;
   1732     p->kind = Break_kind;
   1733     p->lineno = lineno;
   1734     p->col_offset = col_offset;
   1735     return p;
   1736 }
   1737 
   1738 stmt_ty
   1739 Continue(int lineno, int col_offset, PyArena *arena)
   1740 {
   1741     stmt_ty p;
   1742     p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
   1743     if (!p)
   1744         return NULL;
   1745     p->kind = Continue_kind;
   1746     p->lineno = lineno;
   1747     p->col_offset = col_offset;
   1748     return p;
   1749 }
   1750 
   1751 expr_ty
   1752 BoolOp(boolop_ty op, asdl_seq * values, int lineno, int col_offset, PyArena
   1753        *arena)
   1754 {
   1755     expr_ty p;
   1756     if (!op) {
   1757         PyErr_SetString(PyExc_ValueError,
   1758                         "field op is required for BoolOp");
   1759         return NULL;
   1760     }
   1761     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   1762     if (!p)
   1763         return NULL;
   1764     p->kind = BoolOp_kind;
   1765     p->v.BoolOp.op = op;
   1766     p->v.BoolOp.values = values;
   1767     p->lineno = lineno;
   1768     p->col_offset = col_offset;
   1769     return p;
   1770 }
   1771 
   1772 expr_ty
   1773 BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int col_offset,
   1774       PyArena *arena)
   1775 {
   1776     expr_ty p;
   1777     if (!left) {
   1778         PyErr_SetString(PyExc_ValueError,
   1779                         "field left is required for BinOp");
   1780         return NULL;
   1781     }
   1782     if (!op) {
   1783         PyErr_SetString(PyExc_ValueError,
   1784                         "field op is required for BinOp");
   1785         return NULL;
   1786     }
   1787     if (!right) {
   1788         PyErr_SetString(PyExc_ValueError,
   1789                         "field right is required for BinOp");
   1790         return NULL;
   1791     }
   1792     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   1793     if (!p)
   1794         return NULL;
   1795     p->kind = BinOp_kind;
   1796     p->v.BinOp.left = left;
   1797     p->v.BinOp.op = op;
   1798     p->v.BinOp.right = right;
   1799     p->lineno = lineno;
   1800     p->col_offset = col_offset;
   1801     return p;
   1802 }
   1803 
   1804 expr_ty
   1805 UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, PyArena
   1806         *arena)
   1807 {
   1808     expr_ty p;
   1809     if (!op) {
   1810         PyErr_SetString(PyExc_ValueError,
   1811                         "field op is required for UnaryOp");
   1812         return NULL;
   1813     }
   1814     if (!operand) {
   1815         PyErr_SetString(PyExc_ValueError,
   1816                         "field operand is required for UnaryOp");
   1817         return NULL;
   1818     }
   1819     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   1820     if (!p)
   1821         return NULL;
   1822     p->kind = UnaryOp_kind;
   1823     p->v.UnaryOp.op = op;
   1824     p->v.UnaryOp.operand = operand;
   1825     p->lineno = lineno;
   1826     p->col_offset = col_offset;
   1827     return p;
   1828 }
   1829 
   1830 expr_ty
   1831 Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, PyArena
   1832        *arena)
   1833 {
   1834     expr_ty p;
   1835     if (!args) {
   1836         PyErr_SetString(PyExc_ValueError,
   1837                         "field args is required for Lambda");
   1838         return NULL;
   1839     }
   1840     if (!body) {
   1841         PyErr_SetString(PyExc_ValueError,
   1842                         "field body is required for Lambda");
   1843         return NULL;
   1844     }
   1845     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   1846     if (!p)
   1847         return NULL;
   1848     p->kind = Lambda_kind;
   1849     p->v.Lambda.args = args;
   1850     p->v.Lambda.body = body;
   1851     p->lineno = lineno;
   1852     p->col_offset = col_offset;
   1853     return p;
   1854 }
   1855 
   1856 expr_ty
   1857 IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int col_offset,
   1858       PyArena *arena)
   1859 {
   1860     expr_ty p;
   1861     if (!test) {
   1862         PyErr_SetString(PyExc_ValueError,
   1863                         "field test is required for IfExp");
   1864         return NULL;
   1865     }
   1866     if (!body) {
   1867         PyErr_SetString(PyExc_ValueError,
   1868                         "field body is required for IfExp");
   1869         return NULL;
   1870     }
   1871     if (!orelse) {
   1872         PyErr_SetString(PyExc_ValueError,
   1873                         "field orelse is required for IfExp");
   1874         return NULL;
   1875     }
   1876     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   1877     if (!p)
   1878         return NULL;
   1879     p->kind = IfExp_kind;
   1880     p->v.IfExp.test = test;
   1881     p->v.IfExp.body = body;
   1882     p->v.IfExp.orelse = orelse;
   1883     p->lineno = lineno;
   1884     p->col_offset = col_offset;
   1885     return p;
   1886 }
   1887 
   1888 expr_ty
   1889 Dict(asdl_seq * keys, asdl_seq * values, int lineno, int col_offset, PyArena
   1890      *arena)
   1891 {
   1892     expr_ty p;
   1893     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   1894     if (!p)
   1895         return NULL;
   1896     p->kind = Dict_kind;
   1897     p->v.Dict.keys = keys;
   1898     p->v.Dict.values = values;
   1899     p->lineno = lineno;
   1900     p->col_offset = col_offset;
   1901     return p;
   1902 }
   1903 
   1904 expr_ty
   1905 Set(asdl_seq * elts, int lineno, int col_offset, PyArena *arena)
   1906 {
   1907     expr_ty p;
   1908     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   1909     if (!p)
   1910         return NULL;
   1911     p->kind = Set_kind;
   1912     p->v.Set.elts = elts;
   1913     p->lineno = lineno;
   1914     p->col_offset = col_offset;
   1915     return p;
   1916 }
   1917 
   1918 expr_ty
   1919 ListComp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset,
   1920          PyArena *arena)
   1921 {
   1922     expr_ty p;
   1923     if (!elt) {
   1924         PyErr_SetString(PyExc_ValueError,
   1925                         "field elt is required for ListComp");
   1926         return NULL;
   1927     }
   1928     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   1929     if (!p)
   1930         return NULL;
   1931     p->kind = ListComp_kind;
   1932     p->v.ListComp.elt = elt;
   1933     p->v.ListComp.generators = generators;
   1934     p->lineno = lineno;
   1935     p->col_offset = col_offset;
   1936     return p;
   1937 }
   1938 
   1939 expr_ty
   1940 SetComp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset, PyArena
   1941         *arena)
   1942 {
   1943     expr_ty p;
   1944     if (!elt) {
   1945         PyErr_SetString(PyExc_ValueError,
   1946                         "field elt is required for SetComp");
   1947         return NULL;
   1948     }
   1949     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   1950     if (!p)
   1951         return NULL;
   1952     p->kind = SetComp_kind;
   1953     p->v.SetComp.elt = elt;
   1954     p->v.SetComp.generators = generators;
   1955     p->lineno = lineno;
   1956     p->col_offset = col_offset;
   1957     return p;
   1958 }
   1959 
   1960 expr_ty
   1961 DictComp(expr_ty key, expr_ty value, asdl_seq * generators, int lineno, int
   1962          col_offset, PyArena *arena)
   1963 {
   1964     expr_ty p;
   1965     if (!key) {
   1966         PyErr_SetString(PyExc_ValueError,
   1967                         "field key is required for DictComp");
   1968         return NULL;
   1969     }
   1970     if (!value) {
   1971         PyErr_SetString(PyExc_ValueError,
   1972                         "field value is required for DictComp");
   1973         return NULL;
   1974     }
   1975     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   1976     if (!p)
   1977         return NULL;
   1978     p->kind = DictComp_kind;
   1979     p->v.DictComp.key = key;
   1980     p->v.DictComp.value = value;
   1981     p->v.DictComp.generators = generators;
   1982     p->lineno = lineno;
   1983     p->col_offset = col_offset;
   1984     return p;
   1985 }
   1986 
   1987 expr_ty
   1988 GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset,
   1989              PyArena *arena)
   1990 {
   1991     expr_ty p;
   1992     if (!elt) {
   1993         PyErr_SetString(PyExc_ValueError,
   1994                         "field elt is required for GeneratorExp");
   1995         return NULL;
   1996     }
   1997     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   1998     if (!p)
   1999         return NULL;
   2000     p->kind = GeneratorExp_kind;
   2001     p->v.GeneratorExp.elt = elt;
   2002     p->v.GeneratorExp.generators = generators;
   2003     p->lineno = lineno;
   2004     p->col_offset = col_offset;
   2005     return p;
   2006 }
   2007 
   2008 expr_ty
   2009 Await(expr_ty value, int lineno, int col_offset, PyArena *arena)
   2010 {
   2011     expr_ty p;
   2012     if (!value) {
   2013         PyErr_SetString(PyExc_ValueError,
   2014                         "field value is required for Await");
   2015         return NULL;
   2016     }
   2017     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2018     if (!p)
   2019         return NULL;
   2020     p->kind = Await_kind;
   2021     p->v.Await.value = value;
   2022     p->lineno = lineno;
   2023     p->col_offset = col_offset;
   2024     return p;
   2025 }
   2026 
   2027 expr_ty
   2028 Yield(expr_ty value, int lineno, int col_offset, PyArena *arena)
   2029 {
   2030     expr_ty p;
   2031     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2032     if (!p)
   2033         return NULL;
   2034     p->kind = Yield_kind;
   2035     p->v.Yield.value = value;
   2036     p->lineno = lineno;
   2037     p->col_offset = col_offset;
   2038     return p;
   2039 }
   2040 
   2041 expr_ty
   2042 YieldFrom(expr_ty value, int lineno, int col_offset, PyArena *arena)
   2043 {
   2044     expr_ty p;
   2045     if (!value) {
   2046         PyErr_SetString(PyExc_ValueError,
   2047                         "field value is required for YieldFrom");
   2048         return NULL;
   2049     }
   2050     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2051     if (!p)
   2052         return NULL;
   2053     p->kind = YieldFrom_kind;
   2054     p->v.YieldFrom.value = value;
   2055     p->lineno = lineno;
   2056     p->col_offset = col_offset;
   2057     return p;
   2058 }
   2059 
   2060 expr_ty
   2061 Compare(expr_ty left, asdl_int_seq * ops, asdl_seq * comparators, int lineno,
   2062         int col_offset, PyArena *arena)
   2063 {
   2064     expr_ty p;
   2065     if (!left) {
   2066         PyErr_SetString(PyExc_ValueError,
   2067                         "field left is required for Compare");
   2068         return NULL;
   2069     }
   2070     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2071     if (!p)
   2072         return NULL;
   2073     p->kind = Compare_kind;
   2074     p->v.Compare.left = left;
   2075     p->v.Compare.ops = ops;
   2076     p->v.Compare.comparators = comparators;
   2077     p->lineno = lineno;
   2078     p->col_offset = col_offset;
   2079     return p;
   2080 }
   2081 
   2082 expr_ty
   2083 Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, int lineno, int
   2084      col_offset, PyArena *arena)
   2085 {
   2086     expr_ty p;
   2087     if (!func) {
   2088         PyErr_SetString(PyExc_ValueError,
   2089                         "field func is required for Call");
   2090         return NULL;
   2091     }
   2092     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2093     if (!p)
   2094         return NULL;
   2095     p->kind = Call_kind;
   2096     p->v.Call.func = func;
   2097     p->v.Call.args = args;
   2098     p->v.Call.keywords = keywords;
   2099     p->lineno = lineno;
   2100     p->col_offset = col_offset;
   2101     return p;
   2102 }
   2103 
   2104 expr_ty
   2105 Num(object n, int lineno, int col_offset, PyArena *arena)
   2106 {
   2107     expr_ty p;
   2108     if (!n) {
   2109         PyErr_SetString(PyExc_ValueError,
   2110                         "field n is required for Num");
   2111         return NULL;
   2112     }
   2113     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2114     if (!p)
   2115         return NULL;
   2116     p->kind = Num_kind;
   2117     p->v.Num.n = n;
   2118     p->lineno = lineno;
   2119     p->col_offset = col_offset;
   2120     return p;
   2121 }
   2122 
   2123 expr_ty
   2124 Str(string s, int lineno, int col_offset, PyArena *arena)
   2125 {
   2126     expr_ty p;
   2127     if (!s) {
   2128         PyErr_SetString(PyExc_ValueError,
   2129                         "field s is required for Str");
   2130         return NULL;
   2131     }
   2132     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2133     if (!p)
   2134         return NULL;
   2135     p->kind = Str_kind;
   2136     p->v.Str.s = s;
   2137     p->lineno = lineno;
   2138     p->col_offset = col_offset;
   2139     return p;
   2140 }
   2141 
   2142 expr_ty
   2143 FormattedValue(expr_ty value, int conversion, expr_ty format_spec, int lineno,
   2144                int col_offset, PyArena *arena)
   2145 {
   2146     expr_ty p;
   2147     if (!value) {
   2148         PyErr_SetString(PyExc_ValueError,
   2149                         "field value is required for FormattedValue");
   2150         return NULL;
   2151     }
   2152     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2153     if (!p)
   2154         return NULL;
   2155     p->kind = FormattedValue_kind;
   2156     p->v.FormattedValue.value = value;
   2157     p->v.FormattedValue.conversion = conversion;
   2158     p->v.FormattedValue.format_spec = format_spec;
   2159     p->lineno = lineno;
   2160     p->col_offset = col_offset;
   2161     return p;
   2162 }
   2163 
   2164 expr_ty
   2165 JoinedStr(asdl_seq * values, int lineno, int col_offset, PyArena *arena)
   2166 {
   2167     expr_ty p;
   2168     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2169     if (!p)
   2170         return NULL;
   2171     p->kind = JoinedStr_kind;
   2172     p->v.JoinedStr.values = values;
   2173     p->lineno = lineno;
   2174     p->col_offset = col_offset;
   2175     return p;
   2176 }
   2177 
   2178 expr_ty
   2179 Bytes(bytes s, int lineno, int col_offset, PyArena *arena)
   2180 {
   2181     expr_ty p;
   2182     if (!s) {
   2183         PyErr_SetString(PyExc_ValueError,
   2184                         "field s is required for Bytes");
   2185         return NULL;
   2186     }
   2187     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2188     if (!p)
   2189         return NULL;
   2190     p->kind = Bytes_kind;
   2191     p->v.Bytes.s = s;
   2192     p->lineno = lineno;
   2193     p->col_offset = col_offset;
   2194     return p;
   2195 }
   2196 
   2197 expr_ty
   2198 NameConstant(singleton value, int lineno, int col_offset, PyArena *arena)
   2199 {
   2200     expr_ty p;
   2201     if (!value) {
   2202         PyErr_SetString(PyExc_ValueError,
   2203                         "field value is required for NameConstant");
   2204         return NULL;
   2205     }
   2206     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2207     if (!p)
   2208         return NULL;
   2209     p->kind = NameConstant_kind;
   2210     p->v.NameConstant.value = value;
   2211     p->lineno = lineno;
   2212     p->col_offset = col_offset;
   2213     return p;
   2214 }
   2215 
   2216 expr_ty
   2217 Ellipsis(int lineno, int col_offset, PyArena *arena)
   2218 {
   2219     expr_ty p;
   2220     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2221     if (!p)
   2222         return NULL;
   2223     p->kind = Ellipsis_kind;
   2224     p->lineno = lineno;
   2225     p->col_offset = col_offset;
   2226     return p;
   2227 }
   2228 
   2229 expr_ty
   2230 Constant(constant value, int lineno, int col_offset, PyArena *arena)
   2231 {
   2232     expr_ty p;
   2233     if (!value) {
   2234         PyErr_SetString(PyExc_ValueError,
   2235                         "field value is required for Constant");
   2236         return NULL;
   2237     }
   2238     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2239     if (!p)
   2240         return NULL;
   2241     p->kind = Constant_kind;
   2242     p->v.Constant.value = value;
   2243     p->lineno = lineno;
   2244     p->col_offset = col_offset;
   2245     return p;
   2246 }
   2247 
   2248 expr_ty
   2249 Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, int
   2250           col_offset, PyArena *arena)
   2251 {
   2252     expr_ty p;
   2253     if (!value) {
   2254         PyErr_SetString(PyExc_ValueError,
   2255                         "field value is required for Attribute");
   2256         return NULL;
   2257     }
   2258     if (!attr) {
   2259         PyErr_SetString(PyExc_ValueError,
   2260                         "field attr is required for Attribute");
   2261         return NULL;
   2262     }
   2263     if (!ctx) {
   2264         PyErr_SetString(PyExc_ValueError,
   2265                         "field ctx is required for Attribute");
   2266         return NULL;
   2267     }
   2268     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2269     if (!p)
   2270         return NULL;
   2271     p->kind = Attribute_kind;
   2272     p->v.Attribute.value = value;
   2273     p->v.Attribute.attr = attr;
   2274     p->v.Attribute.ctx = ctx;
   2275     p->lineno = lineno;
   2276     p->col_offset = col_offset;
   2277     return p;
   2278 }
   2279 
   2280 expr_ty
   2281 Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int lineno, int
   2282           col_offset, PyArena *arena)
   2283 {
   2284     expr_ty p;
   2285     if (!value) {
   2286         PyErr_SetString(PyExc_ValueError,
   2287                         "field value is required for Subscript");
   2288         return NULL;
   2289     }
   2290     if (!slice) {
   2291         PyErr_SetString(PyExc_ValueError,
   2292                         "field slice is required for Subscript");
   2293         return NULL;
   2294     }
   2295     if (!ctx) {
   2296         PyErr_SetString(PyExc_ValueError,
   2297                         "field ctx is required for Subscript");
   2298         return NULL;
   2299     }
   2300     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2301     if (!p)
   2302         return NULL;
   2303     p->kind = Subscript_kind;
   2304     p->v.Subscript.value = value;
   2305     p->v.Subscript.slice = slice;
   2306     p->v.Subscript.ctx = ctx;
   2307     p->lineno = lineno;
   2308     p->col_offset = col_offset;
   2309     return p;
   2310 }
   2311 
   2312 expr_ty
   2313 Starred(expr_ty value, expr_context_ty ctx, int lineno, int col_offset, PyArena
   2314         *arena)
   2315 {
   2316     expr_ty p;
   2317     if (!value) {
   2318         PyErr_SetString(PyExc_ValueError,
   2319                         "field value is required for Starred");
   2320         return NULL;
   2321     }
   2322     if (!ctx) {
   2323         PyErr_SetString(PyExc_ValueError,
   2324                         "field ctx is required for Starred");
   2325         return NULL;
   2326     }
   2327     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2328     if (!p)
   2329         return NULL;
   2330     p->kind = Starred_kind;
   2331     p->v.Starred.value = value;
   2332     p->v.Starred.ctx = ctx;
   2333     p->lineno = lineno;
   2334     p->col_offset = col_offset;
   2335     return p;
   2336 }
   2337 
   2338 expr_ty
   2339 Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, PyArena
   2340      *arena)
   2341 {
   2342     expr_ty p;
   2343     if (!id) {
   2344         PyErr_SetString(PyExc_ValueError,
   2345                         "field id is required for Name");
   2346         return NULL;
   2347     }
   2348     if (!ctx) {
   2349         PyErr_SetString(PyExc_ValueError,
   2350                         "field ctx is required for Name");
   2351         return NULL;
   2352     }
   2353     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2354     if (!p)
   2355         return NULL;
   2356     p->kind = Name_kind;
   2357     p->v.Name.id = id;
   2358     p->v.Name.ctx = ctx;
   2359     p->lineno = lineno;
   2360     p->col_offset = col_offset;
   2361     return p;
   2362 }
   2363 
   2364 expr_ty
   2365 List(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, PyArena
   2366      *arena)
   2367 {
   2368     expr_ty p;
   2369     if (!ctx) {
   2370         PyErr_SetString(PyExc_ValueError,
   2371                         "field ctx is required for List");
   2372         return NULL;
   2373     }
   2374     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2375     if (!p)
   2376         return NULL;
   2377     p->kind = List_kind;
   2378     p->v.List.elts = elts;
   2379     p->v.List.ctx = ctx;
   2380     p->lineno = lineno;
   2381     p->col_offset = col_offset;
   2382     return p;
   2383 }
   2384 
   2385 expr_ty
   2386 Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, PyArena
   2387       *arena)
   2388 {
   2389     expr_ty p;
   2390     if (!ctx) {
   2391         PyErr_SetString(PyExc_ValueError,
   2392                         "field ctx is required for Tuple");
   2393         return NULL;
   2394     }
   2395     p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
   2396     if (!p)
   2397         return NULL;
   2398     p->kind = Tuple_kind;
   2399     p->v.Tuple.elts = elts;
   2400     p->v.Tuple.ctx = ctx;
   2401     p->lineno = lineno;
   2402     p->col_offset = col_offset;
   2403     return p;
   2404 }
   2405 
   2406 slice_ty
   2407 Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena)
   2408 {
   2409     slice_ty p;
   2410     p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
   2411     if (!p)
   2412         return NULL;
   2413     p->kind = Slice_kind;
   2414     p->v.Slice.lower = lower;
   2415     p->v.Slice.upper = upper;
   2416     p->v.Slice.step = step;
   2417     return p;
   2418 }
   2419 
   2420 slice_ty
   2421 ExtSlice(asdl_seq * dims, PyArena *arena)
   2422 {
   2423     slice_ty p;
   2424     p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
   2425     if (!p)
   2426         return NULL;
   2427     p->kind = ExtSlice_kind;
   2428     p->v.ExtSlice.dims = dims;
   2429     return p;
   2430 }
   2431 
   2432 slice_ty
   2433 Index(expr_ty value, PyArena *arena)
   2434 {
   2435     slice_ty p;
   2436     if (!value) {
   2437         PyErr_SetString(PyExc_ValueError,
   2438                         "field value is required for Index");
   2439         return NULL;
   2440     }
   2441     p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
   2442     if (!p)
   2443         return NULL;
   2444     p->kind = Index_kind;
   2445     p->v.Index.value = value;
   2446     return p;
   2447 }
   2448 
   2449 comprehension_ty
   2450 comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs, int is_async,
   2451               PyArena *arena)
   2452 {
   2453     comprehension_ty p;
   2454     if (!target) {
   2455         PyErr_SetString(PyExc_ValueError,
   2456                         "field target is required for comprehension");
   2457         return NULL;
   2458     }
   2459     if (!iter) {
   2460         PyErr_SetString(PyExc_ValueError,
   2461                         "field iter is required for comprehension");
   2462         return NULL;
   2463     }
   2464     p = (comprehension_ty)PyArena_Malloc(arena, sizeof(*p));
   2465     if (!p)
   2466         return NULL;
   2467     p->target = target;
   2468     p->iter = iter;
   2469     p->ifs = ifs;
   2470     p->is_async = is_async;
   2471     return p;
   2472 }
   2473 
   2474 excepthandler_ty
   2475 ExceptHandler(expr_ty type, identifier name, asdl_seq * body, int lineno, int
   2476               col_offset, PyArena *arena)
   2477 {
   2478     excepthandler_ty p;
   2479     p = (excepthandler_ty)PyArena_Malloc(arena, sizeof(*p));
   2480     if (!p)
   2481         return NULL;
   2482     p->kind = ExceptHandler_kind;
   2483     p->v.ExceptHandler.type = type;
   2484     p->v.ExceptHandler.name = name;
   2485     p->v.ExceptHandler.body = body;
   2486     p->lineno = lineno;
   2487     p->col_offset = col_offset;
   2488     return p;
   2489 }
   2490 
   2491 arguments_ty
   2492 arguments(asdl_seq * args, arg_ty vararg, asdl_seq * kwonlyargs, asdl_seq *
   2493           kw_defaults, arg_ty kwarg, asdl_seq * defaults, PyArena *arena)
   2494 {
   2495     arguments_ty p;
   2496     p = (arguments_ty)PyArena_Malloc(arena, sizeof(*p));
   2497     if (!p)
   2498         return NULL;
   2499     p->args = args;
   2500     p->vararg = vararg;
   2501     p->kwonlyargs = kwonlyargs;
   2502     p->kw_defaults = kw_defaults;
   2503     p->kwarg = kwarg;
   2504     p->defaults = defaults;
   2505     return p;
   2506 }
   2507 
   2508 arg_ty
   2509 arg(identifier arg, expr_ty annotation, int lineno, int col_offset, PyArena
   2510     *arena)
   2511 {
   2512     arg_ty p;
   2513     if (!arg) {
   2514         PyErr_SetString(PyExc_ValueError,
   2515                         "field arg is required for arg");
   2516         return NULL;
   2517     }
   2518     p = (arg_ty)PyArena_Malloc(arena, sizeof(*p));
   2519     if (!p)
   2520         return NULL;
   2521     p->arg = arg;
   2522     p->annotation = annotation;
   2523     p->lineno = lineno;
   2524     p->col_offset = col_offset;
   2525     return p;
   2526 }
   2527 
   2528 keyword_ty
   2529 keyword(identifier arg, expr_ty value, PyArena *arena)
   2530 {
   2531     keyword_ty p;
   2532     if (!value) {
   2533         PyErr_SetString(PyExc_ValueError,
   2534                         "field value is required for keyword");
   2535         return NULL;
   2536     }
   2537     p = (keyword_ty)PyArena_Malloc(arena, sizeof(*p));
   2538     if (!p)
   2539         return NULL;
   2540     p->arg = arg;
   2541     p->value = value;
   2542     return p;
   2543 }
   2544 
   2545 alias_ty
   2546 alias(identifier name, identifier asname, PyArena *arena)
   2547 {
   2548     alias_ty p;
   2549     if (!name) {
   2550         PyErr_SetString(PyExc_ValueError,
   2551                         "field name is required for alias");
   2552         return NULL;
   2553     }
   2554     p = (alias_ty)PyArena_Malloc(arena, sizeof(*p));
   2555     if (!p)
   2556         return NULL;
   2557     p->name = name;
   2558     p->asname = asname;
   2559     return p;
   2560 }
   2561 
   2562 withitem_ty
   2563 withitem(expr_ty context_expr, expr_ty optional_vars, PyArena *arena)
   2564 {
   2565     withitem_ty p;
   2566     if (!context_expr) {
   2567         PyErr_SetString(PyExc_ValueError,
   2568                         "field context_expr is required for withitem");
   2569         return NULL;
   2570     }
   2571     p = (withitem_ty)PyArena_Malloc(arena, sizeof(*p));
   2572     if (!p)
   2573         return NULL;
   2574     p->context_expr = context_expr;
   2575     p->optional_vars = optional_vars;
   2576     return p;
   2577 }
   2578 
   2579 
   2580 PyObject*
   2581 ast2obj_mod(void* _o)
   2582 {
   2583     mod_ty o = (mod_ty)_o;
   2584     PyObject *result = NULL, *value = NULL;
   2585     if (!o) {
   2586         Py_INCREF(Py_None);
   2587         return Py_None;
   2588     }
   2589 
   2590     switch (o->kind) {
   2591     case Module_kind:
   2592         result = PyType_GenericNew(Module_type, NULL, NULL);
   2593         if (!result) goto failed;
   2594         value = ast2obj_list(o->v.Module.body, ast2obj_stmt);
   2595         if (!value) goto failed;
   2596         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   2597             goto failed;
   2598         Py_DECREF(value);
   2599         break;
   2600     case Interactive_kind:
   2601         result = PyType_GenericNew(Interactive_type, NULL, NULL);
   2602         if (!result) goto failed;
   2603         value = ast2obj_list(o->v.Interactive.body, ast2obj_stmt);
   2604         if (!value) goto failed;
   2605         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   2606             goto failed;
   2607         Py_DECREF(value);
   2608         break;
   2609     case Expression_kind:
   2610         result = PyType_GenericNew(Expression_type, NULL, NULL);
   2611         if (!result) goto failed;
   2612         value = ast2obj_expr(o->v.Expression.body);
   2613         if (!value) goto failed;
   2614         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   2615             goto failed;
   2616         Py_DECREF(value);
   2617         break;
   2618     case Suite_kind:
   2619         result = PyType_GenericNew(Suite_type, NULL, NULL);
   2620         if (!result) goto failed;
   2621         value = ast2obj_list(o->v.Suite.body, ast2obj_stmt);
   2622         if (!value) goto failed;
   2623         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   2624             goto failed;
   2625         Py_DECREF(value);
   2626         break;
   2627     }
   2628     return result;
   2629 failed:
   2630     Py_XDECREF(value);
   2631     Py_XDECREF(result);
   2632     return NULL;
   2633 }
   2634 
   2635 PyObject*
   2636 ast2obj_stmt(void* _o)
   2637 {
   2638     stmt_ty o = (stmt_ty)_o;
   2639     PyObject *result = NULL, *value = NULL;
   2640     if (!o) {
   2641         Py_INCREF(Py_None);
   2642         return Py_None;
   2643     }
   2644 
   2645     switch (o->kind) {
   2646     case FunctionDef_kind:
   2647         result = PyType_GenericNew(FunctionDef_type, NULL, NULL);
   2648         if (!result) goto failed;
   2649         value = ast2obj_identifier(o->v.FunctionDef.name);
   2650         if (!value) goto failed;
   2651         if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
   2652             goto failed;
   2653         Py_DECREF(value);
   2654         value = ast2obj_arguments(o->v.FunctionDef.args);
   2655         if (!value) goto failed;
   2656         if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
   2657             goto failed;
   2658         Py_DECREF(value);
   2659         value = ast2obj_list(o->v.FunctionDef.body, ast2obj_stmt);
   2660         if (!value) goto failed;
   2661         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   2662             goto failed;
   2663         Py_DECREF(value);
   2664         value = ast2obj_list(o->v.FunctionDef.decorator_list, ast2obj_expr);
   2665         if (!value) goto failed;
   2666         if (_PyObject_SetAttrId(result, &PyId_decorator_list, value) == -1)
   2667             goto failed;
   2668         Py_DECREF(value);
   2669         value = ast2obj_expr(o->v.FunctionDef.returns);
   2670         if (!value) goto failed;
   2671         if (_PyObject_SetAttrId(result, &PyId_returns, value) == -1)
   2672             goto failed;
   2673         Py_DECREF(value);
   2674         break;
   2675     case AsyncFunctionDef_kind:
   2676         result = PyType_GenericNew(AsyncFunctionDef_type, NULL, NULL);
   2677         if (!result) goto failed;
   2678         value = ast2obj_identifier(o->v.AsyncFunctionDef.name);
   2679         if (!value) goto failed;
   2680         if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
   2681             goto failed;
   2682         Py_DECREF(value);
   2683         value = ast2obj_arguments(o->v.AsyncFunctionDef.args);
   2684         if (!value) goto failed;
   2685         if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
   2686             goto failed;
   2687         Py_DECREF(value);
   2688         value = ast2obj_list(o->v.AsyncFunctionDef.body, ast2obj_stmt);
   2689         if (!value) goto failed;
   2690         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   2691             goto failed;
   2692         Py_DECREF(value);
   2693         value = ast2obj_list(o->v.AsyncFunctionDef.decorator_list,
   2694                              ast2obj_expr);
   2695         if (!value) goto failed;
   2696         if (_PyObject_SetAttrId(result, &PyId_decorator_list, value) == -1)
   2697             goto failed;
   2698         Py_DECREF(value);
   2699         value = ast2obj_expr(o->v.AsyncFunctionDef.returns);
   2700         if (!value) goto failed;
   2701         if (_PyObject_SetAttrId(result, &PyId_returns, value) == -1)
   2702             goto failed;
   2703         Py_DECREF(value);
   2704         break;
   2705     case ClassDef_kind:
   2706         result = PyType_GenericNew(ClassDef_type, NULL, NULL);
   2707         if (!result) goto failed;
   2708         value = ast2obj_identifier(o->v.ClassDef.name);
   2709         if (!value) goto failed;
   2710         if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
   2711             goto failed;
   2712         Py_DECREF(value);
   2713         value = ast2obj_list(o->v.ClassDef.bases, ast2obj_expr);
   2714         if (!value) goto failed;
   2715         if (_PyObject_SetAttrId(result, &PyId_bases, value) == -1)
   2716             goto failed;
   2717         Py_DECREF(value);
   2718         value = ast2obj_list(o->v.ClassDef.keywords, ast2obj_keyword);
   2719         if (!value) goto failed;
   2720         if (_PyObject_SetAttrId(result, &PyId_keywords, value) == -1)
   2721             goto failed;
   2722         Py_DECREF(value);
   2723         value = ast2obj_list(o->v.ClassDef.body, ast2obj_stmt);
   2724         if (!value) goto failed;
   2725         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   2726             goto failed;
   2727         Py_DECREF(value);
   2728         value = ast2obj_list(o->v.ClassDef.decorator_list, ast2obj_expr);
   2729         if (!value) goto failed;
   2730         if (_PyObject_SetAttrId(result, &PyId_decorator_list, value) == -1)
   2731             goto failed;
   2732         Py_DECREF(value);
   2733         break;
   2734     case Return_kind:
   2735         result = PyType_GenericNew(Return_type, NULL, NULL);
   2736         if (!result) goto failed;
   2737         value = ast2obj_expr(o->v.Return.value);
   2738         if (!value) goto failed;
   2739         if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   2740             goto failed;
   2741         Py_DECREF(value);
   2742         break;
   2743     case Delete_kind:
   2744         result = PyType_GenericNew(Delete_type, NULL, NULL);
   2745         if (!result) goto failed;
   2746         value = ast2obj_list(o->v.Delete.targets, ast2obj_expr);
   2747         if (!value) goto failed;
   2748         if (_PyObject_SetAttrId(result, &PyId_targets, value) == -1)
   2749             goto failed;
   2750         Py_DECREF(value);
   2751         break;
   2752     case Assign_kind:
   2753         result = PyType_GenericNew(Assign_type, NULL, NULL);
   2754         if (!result) goto failed;
   2755         value = ast2obj_list(o->v.Assign.targets, ast2obj_expr);
   2756         if (!value) goto failed;
   2757         if (_PyObject_SetAttrId(result, &PyId_targets, value) == -1)
   2758             goto failed;
   2759         Py_DECREF(value);
   2760         value = ast2obj_expr(o->v.Assign.value);
   2761         if (!value) goto failed;
   2762         if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   2763             goto failed;
   2764         Py_DECREF(value);
   2765         break;
   2766     case AugAssign_kind:
   2767         result = PyType_GenericNew(AugAssign_type, NULL, NULL);
   2768         if (!result) goto failed;
   2769         value = ast2obj_expr(o->v.AugAssign.target);
   2770         if (!value) goto failed;
   2771         if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
   2772             goto failed;
   2773         Py_DECREF(value);
   2774         value = ast2obj_operator(o->v.AugAssign.op);
   2775         if (!value) goto failed;
   2776         if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
   2777             goto failed;
   2778         Py_DECREF(value);
   2779         value = ast2obj_expr(o->v.AugAssign.value);
   2780         if (!value) goto failed;
   2781         if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   2782             goto failed;
   2783         Py_DECREF(value);
   2784         break;
   2785     case AnnAssign_kind:
   2786         result = PyType_GenericNew(AnnAssign_type, NULL, NULL);
   2787         if (!result) goto failed;
   2788         value = ast2obj_expr(o->v.AnnAssign.target);
   2789         if (!value) goto failed;
   2790         if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
   2791             goto failed;
   2792         Py_DECREF(value);
   2793         value = ast2obj_expr(o->v.AnnAssign.annotation);
   2794         if (!value) goto failed;
   2795         if (_PyObject_SetAttrId(result, &PyId_annotation, value) == -1)
   2796             goto failed;
   2797         Py_DECREF(value);
   2798         value = ast2obj_expr(o->v.AnnAssign.value);
   2799         if (!value) goto failed;
   2800         if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   2801             goto failed;
   2802         Py_DECREF(value);
   2803         value = ast2obj_int(o->v.AnnAssign.simple);
   2804         if (!value) goto failed;
   2805         if (_PyObject_SetAttrId(result, &PyId_simple, value) == -1)
   2806             goto failed;
   2807         Py_DECREF(value);
   2808         break;
   2809     case For_kind:
   2810         result = PyType_GenericNew(For_type, NULL, NULL);
   2811         if (!result) goto failed;
   2812         value = ast2obj_expr(o->v.For.target);
   2813         if (!value) goto failed;
   2814         if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
   2815             goto failed;
   2816         Py_DECREF(value);
   2817         value = ast2obj_expr(o->v.For.iter);
   2818         if (!value) goto failed;
   2819         if (_PyObject_SetAttrId(result, &PyId_iter, value) == -1)
   2820             goto failed;
   2821         Py_DECREF(value);
   2822         value = ast2obj_list(o->v.For.body, ast2obj_stmt);
   2823         if (!value) goto failed;
   2824         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   2825             goto failed;
   2826         Py_DECREF(value);
   2827         value = ast2obj_list(o->v.For.orelse, ast2obj_stmt);
   2828         if (!value) goto failed;
   2829         if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
   2830             goto failed;
   2831         Py_DECREF(value);
   2832         break;
   2833     case AsyncFor_kind:
   2834         result = PyType_GenericNew(AsyncFor_type, NULL, NULL);
   2835         if (!result) goto failed;
   2836         value = ast2obj_expr(o->v.AsyncFor.target);
   2837         if (!value) goto failed;
   2838         if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
   2839             goto failed;
   2840         Py_DECREF(value);
   2841         value = ast2obj_expr(o->v.AsyncFor.iter);
   2842         if (!value) goto failed;
   2843         if (_PyObject_SetAttrId(result, &PyId_iter, value) == -1)
   2844             goto failed;
   2845         Py_DECREF(value);
   2846         value = ast2obj_list(o->v.AsyncFor.body, ast2obj_stmt);
   2847         if (!value) goto failed;
   2848         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   2849             goto failed;
   2850         Py_DECREF(value);
   2851         value = ast2obj_list(o->v.AsyncFor.orelse, ast2obj_stmt);
   2852         if (!value) goto failed;
   2853         if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
   2854             goto failed;
   2855         Py_DECREF(value);
   2856         break;
   2857     case While_kind:
   2858         result = PyType_GenericNew(While_type, NULL, NULL);
   2859         if (!result) goto failed;
   2860         value = ast2obj_expr(o->v.While.test);
   2861         if (!value) goto failed;
   2862         if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
   2863             goto failed;
   2864         Py_DECREF(value);
   2865         value = ast2obj_list(o->v.While.body, ast2obj_stmt);
   2866         if (!value) goto failed;
   2867         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   2868             goto failed;
   2869         Py_DECREF(value);
   2870         value = ast2obj_list(o->v.While.orelse, ast2obj_stmt);
   2871         if (!value) goto failed;
   2872         if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
   2873             goto failed;
   2874         Py_DECREF(value);
   2875         break;
   2876     case If_kind:
   2877         result = PyType_GenericNew(If_type, NULL, NULL);
   2878         if (!result) goto failed;
   2879         value = ast2obj_expr(o->v.If.test);
   2880         if (!value) goto failed;
   2881         if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
   2882             goto failed;
   2883         Py_DECREF(value);
   2884         value = ast2obj_list(o->v.If.body, ast2obj_stmt);
   2885         if (!value) goto failed;
   2886         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   2887             goto failed;
   2888         Py_DECREF(value);
   2889         value = ast2obj_list(o->v.If.orelse, ast2obj_stmt);
   2890         if (!value) goto failed;
   2891         if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
   2892             goto failed;
   2893         Py_DECREF(value);
   2894         break;
   2895     case With_kind:
   2896         result = PyType_GenericNew(With_type, NULL, NULL);
   2897         if (!result) goto failed;
   2898         value = ast2obj_list(o->v.With.items, ast2obj_withitem);
   2899         if (!value) goto failed;
   2900         if (_PyObject_SetAttrId(result, &PyId_items, value) == -1)
   2901             goto failed;
   2902         Py_DECREF(value);
   2903         value = ast2obj_list(o->v.With.body, ast2obj_stmt);
   2904         if (!value) goto failed;
   2905         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   2906             goto failed;
   2907         Py_DECREF(value);
   2908         break;
   2909     case AsyncWith_kind:
   2910         result = PyType_GenericNew(AsyncWith_type, NULL, NULL);
   2911         if (!result) goto failed;
   2912         value = ast2obj_list(o->v.AsyncWith.items, ast2obj_withitem);
   2913         if (!value) goto failed;
   2914         if (_PyObject_SetAttrId(result, &PyId_items, value) == -1)
   2915             goto failed;
   2916         Py_DECREF(value);
   2917         value = ast2obj_list(o->v.AsyncWith.body, ast2obj_stmt);
   2918         if (!value) goto failed;
   2919         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   2920             goto failed;
   2921         Py_DECREF(value);
   2922         break;
   2923     case Raise_kind:
   2924         result = PyType_GenericNew(Raise_type, NULL, NULL);
   2925         if (!result) goto failed;
   2926         value = ast2obj_expr(o->v.Raise.exc);
   2927         if (!value) goto failed;
   2928         if (_PyObject_SetAttrId(result, &PyId_exc, value) == -1)
   2929             goto failed;
   2930         Py_DECREF(value);
   2931         value = ast2obj_expr(o->v.Raise.cause);
   2932         if (!value) goto failed;
   2933         if (_PyObject_SetAttrId(result, &PyId_cause, value) == -1)
   2934             goto failed;
   2935         Py_DECREF(value);
   2936         break;
   2937     case Try_kind:
   2938         result = PyType_GenericNew(Try_type, NULL, NULL);
   2939         if (!result) goto failed;
   2940         value = ast2obj_list(o->v.Try.body, ast2obj_stmt);
   2941         if (!value) goto failed;
   2942         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   2943             goto failed;
   2944         Py_DECREF(value);
   2945         value = ast2obj_list(o->v.Try.handlers, ast2obj_excepthandler);
   2946         if (!value) goto failed;
   2947         if (_PyObject_SetAttrId(result, &PyId_handlers, value) == -1)
   2948             goto failed;
   2949         Py_DECREF(value);
   2950         value = ast2obj_list(o->v.Try.orelse, ast2obj_stmt);
   2951         if (!value) goto failed;
   2952         if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
   2953             goto failed;
   2954         Py_DECREF(value);
   2955         value = ast2obj_list(o->v.Try.finalbody, ast2obj_stmt);
   2956         if (!value) goto failed;
   2957         if (_PyObject_SetAttrId(result, &PyId_finalbody, value) == -1)
   2958             goto failed;
   2959         Py_DECREF(value);
   2960         break;
   2961     case Assert_kind:
   2962         result = PyType_GenericNew(Assert_type, NULL, NULL);
   2963         if (!result) goto failed;
   2964         value = ast2obj_expr(o->v.Assert.test);
   2965         if (!value) goto failed;
   2966         if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
   2967             goto failed;
   2968         Py_DECREF(value);
   2969         value = ast2obj_expr(o->v.Assert.msg);
   2970         if (!value) goto failed;
   2971         if (_PyObject_SetAttrId(result, &PyId_msg, value) == -1)
   2972             goto failed;
   2973         Py_DECREF(value);
   2974         break;
   2975     case Import_kind:
   2976         result = PyType_GenericNew(Import_type, NULL, NULL);
   2977         if (!result) goto failed;
   2978         value = ast2obj_list(o->v.Import.names, ast2obj_alias);
   2979         if (!value) goto failed;
   2980         if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
   2981             goto failed;
   2982         Py_DECREF(value);
   2983         break;
   2984     case ImportFrom_kind:
   2985         result = PyType_GenericNew(ImportFrom_type, NULL, NULL);
   2986         if (!result) goto failed;
   2987         value = ast2obj_identifier(o->v.ImportFrom.module);
   2988         if (!value) goto failed;
   2989         if (_PyObject_SetAttrId(result, &PyId_module, value) == -1)
   2990             goto failed;
   2991         Py_DECREF(value);
   2992         value = ast2obj_list(o->v.ImportFrom.names, ast2obj_alias);
   2993         if (!value) goto failed;
   2994         if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
   2995             goto failed;
   2996         Py_DECREF(value);
   2997         value = ast2obj_int(o->v.ImportFrom.level);
   2998         if (!value) goto failed;
   2999         if (_PyObject_SetAttrId(result, &PyId_level, value) == -1)
   3000             goto failed;
   3001         Py_DECREF(value);
   3002         break;
   3003     case Global_kind:
   3004         result = PyType_GenericNew(Global_type, NULL, NULL);
   3005         if (!result) goto failed;
   3006         value = ast2obj_list(o->v.Global.names, ast2obj_identifier);
   3007         if (!value) goto failed;
   3008         if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
   3009             goto failed;
   3010         Py_DECREF(value);
   3011         break;
   3012     case Nonlocal_kind:
   3013         result = PyType_GenericNew(Nonlocal_type, NULL, NULL);
   3014         if (!result) goto failed;
   3015         value = ast2obj_list(o->v.Nonlocal.names, ast2obj_identifier);
   3016         if (!value) goto failed;
   3017         if (_PyObject_SetAttrId(result, &PyId_names, value) == -1)
   3018             goto failed;
   3019         Py_DECREF(value);
   3020         break;
   3021     case Expr_kind:
   3022         result = PyType_GenericNew(Expr_type, NULL, NULL);
   3023         if (!result) goto failed;
   3024         value = ast2obj_expr(o->v.Expr.value);
   3025         if (!value) goto failed;
   3026         if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   3027             goto failed;
   3028         Py_DECREF(value);
   3029         break;
   3030     case Pass_kind:
   3031         result = PyType_GenericNew(Pass_type, NULL, NULL);
   3032         if (!result) goto failed;
   3033         break;
   3034     case Break_kind:
   3035         result = PyType_GenericNew(Break_type, NULL, NULL);
   3036         if (!result) goto failed;
   3037         break;
   3038     case Continue_kind:
   3039         result = PyType_GenericNew(Continue_type, NULL, NULL);
   3040         if (!result) goto failed;
   3041         break;
   3042     }
   3043     value = ast2obj_int(o->lineno);
   3044     if (!value) goto failed;
   3045     if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
   3046         goto failed;
   3047     Py_DECREF(value);
   3048     value = ast2obj_int(o->col_offset);
   3049     if (!value) goto failed;
   3050     if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
   3051         goto failed;
   3052     Py_DECREF(value);
   3053     return result;
   3054 failed:
   3055     Py_XDECREF(value);
   3056     Py_XDECREF(result);
   3057     return NULL;
   3058 }
   3059 
   3060 PyObject*
   3061 ast2obj_expr(void* _o)
   3062 {
   3063     expr_ty o = (expr_ty)_o;
   3064     PyObject *result = NULL, *value = NULL;
   3065     if (!o) {
   3066         Py_INCREF(Py_None);
   3067         return Py_None;
   3068     }
   3069 
   3070     switch (o->kind) {
   3071     case BoolOp_kind:
   3072         result = PyType_GenericNew(BoolOp_type, NULL, NULL);
   3073         if (!result) goto failed;
   3074         value = ast2obj_boolop(o->v.BoolOp.op);
   3075         if (!value) goto failed;
   3076         if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
   3077             goto failed;
   3078         Py_DECREF(value);
   3079         value = ast2obj_list(o->v.BoolOp.values, ast2obj_expr);
   3080         if (!value) goto failed;
   3081         if (_PyObject_SetAttrId(result, &PyId_values, value) == -1)
   3082             goto failed;
   3083         Py_DECREF(value);
   3084         break;
   3085     case BinOp_kind:
   3086         result = PyType_GenericNew(BinOp_type, NULL, NULL);
   3087         if (!result) goto failed;
   3088         value = ast2obj_expr(o->v.BinOp.left);
   3089         if (!value) goto failed;
   3090         if (_PyObject_SetAttrId(result, &PyId_left, value) == -1)
   3091             goto failed;
   3092         Py_DECREF(value);
   3093         value = ast2obj_operator(o->v.BinOp.op);
   3094         if (!value) goto failed;
   3095         if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
   3096             goto failed;
   3097         Py_DECREF(value);
   3098         value = ast2obj_expr(o->v.BinOp.right);
   3099         if (!value) goto failed;
   3100         if (_PyObject_SetAttrId(result, &PyId_right, value) == -1)
   3101             goto failed;
   3102         Py_DECREF(value);
   3103         break;
   3104     case UnaryOp_kind:
   3105         result = PyType_GenericNew(UnaryOp_type, NULL, NULL);
   3106         if (!result) goto failed;
   3107         value = ast2obj_unaryop(o->v.UnaryOp.op);
   3108         if (!value) goto failed;
   3109         if (_PyObject_SetAttrId(result, &PyId_op, value) == -1)
   3110             goto failed;
   3111         Py_DECREF(value);
   3112         value = ast2obj_expr(o->v.UnaryOp.operand);
   3113         if (!value) goto failed;
   3114         if (_PyObject_SetAttrId(result, &PyId_operand, value) == -1)
   3115             goto failed;
   3116         Py_DECREF(value);
   3117         break;
   3118     case Lambda_kind:
   3119         result = PyType_GenericNew(Lambda_type, NULL, NULL);
   3120         if (!result) goto failed;
   3121         value = ast2obj_arguments(o->v.Lambda.args);
   3122         if (!value) goto failed;
   3123         if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
   3124             goto failed;
   3125         Py_DECREF(value);
   3126         value = ast2obj_expr(o->v.Lambda.body);
   3127         if (!value) goto failed;
   3128         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   3129             goto failed;
   3130         Py_DECREF(value);
   3131         break;
   3132     case IfExp_kind:
   3133         result = PyType_GenericNew(IfExp_type, NULL, NULL);
   3134         if (!result) goto failed;
   3135         value = ast2obj_expr(o->v.IfExp.test);
   3136         if (!value) goto failed;
   3137         if (_PyObject_SetAttrId(result, &PyId_test, value) == -1)
   3138             goto failed;
   3139         Py_DECREF(value);
   3140         value = ast2obj_expr(o->v.IfExp.body);
   3141         if (!value) goto failed;
   3142         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   3143             goto failed;
   3144         Py_DECREF(value);
   3145         value = ast2obj_expr(o->v.IfExp.orelse);
   3146         if (!value) goto failed;
   3147         if (_PyObject_SetAttrId(result, &PyId_orelse, value) == -1)
   3148             goto failed;
   3149         Py_DECREF(value);
   3150         break;
   3151     case Dict_kind:
   3152         result = PyType_GenericNew(Dict_type, NULL, NULL);
   3153         if (!result) goto failed;
   3154         value = ast2obj_list(o->v.Dict.keys, ast2obj_expr);
   3155         if (!value) goto failed;
   3156         if (_PyObject_SetAttrId(result, &PyId_keys, value) == -1)
   3157             goto failed;
   3158         Py_DECREF(value);
   3159         value = ast2obj_list(o->v.Dict.values, ast2obj_expr);
   3160         if (!value) goto failed;
   3161         if (_PyObject_SetAttrId(result, &PyId_values, value) == -1)
   3162             goto failed;
   3163         Py_DECREF(value);
   3164         break;
   3165     case Set_kind:
   3166         result = PyType_GenericNew(Set_type, NULL, NULL);
   3167         if (!result) goto failed;
   3168         value = ast2obj_list(o->v.Set.elts, ast2obj_expr);
   3169         if (!value) goto failed;
   3170         if (_PyObject_SetAttrId(result, &PyId_elts, value) == -1)
   3171             goto failed;
   3172         Py_DECREF(value);
   3173         break;
   3174     case ListComp_kind:
   3175         result = PyType_GenericNew(ListComp_type, NULL, NULL);
   3176         if (!result) goto failed;
   3177         value = ast2obj_expr(o->v.ListComp.elt);
   3178         if (!value) goto failed;
   3179         if (_PyObject_SetAttrId(result, &PyId_elt, value) == -1)
   3180             goto failed;
   3181         Py_DECREF(value);
   3182         value = ast2obj_list(o->v.ListComp.generators, ast2obj_comprehension);
   3183         if (!value) goto failed;
   3184         if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
   3185             goto failed;
   3186         Py_DECREF(value);
   3187         break;
   3188     case SetComp_kind:
   3189         result = PyType_GenericNew(SetComp_type, NULL, NULL);
   3190         if (!result) goto failed;
   3191         value = ast2obj_expr(o->v.SetComp.elt);
   3192         if (!value) goto failed;
   3193         if (_PyObject_SetAttrId(result, &PyId_elt, value) == -1)
   3194             goto failed;
   3195         Py_DECREF(value);
   3196         value = ast2obj_list(o->v.SetComp.generators, ast2obj_comprehension);
   3197         if (!value) goto failed;
   3198         if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
   3199             goto failed;
   3200         Py_DECREF(value);
   3201         break;
   3202     case DictComp_kind:
   3203         result = PyType_GenericNew(DictComp_type, NULL, NULL);
   3204         if (!result) goto failed;
   3205         value = ast2obj_expr(o->v.DictComp.key);
   3206         if (!value) goto failed;
   3207         if (_PyObject_SetAttrId(result, &PyId_key, value) == -1)
   3208             goto failed;
   3209         Py_DECREF(value);
   3210         value = ast2obj_expr(o->v.DictComp.value);
   3211         if (!value) goto failed;
   3212         if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   3213             goto failed;
   3214         Py_DECREF(value);
   3215         value = ast2obj_list(o->v.DictComp.generators, ast2obj_comprehension);
   3216         if (!value) goto failed;
   3217         if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
   3218             goto failed;
   3219         Py_DECREF(value);
   3220         break;
   3221     case GeneratorExp_kind:
   3222         result = PyType_GenericNew(GeneratorExp_type, NULL, NULL);
   3223         if (!result) goto failed;
   3224         value = ast2obj_expr(o->v.GeneratorExp.elt);
   3225         if (!value) goto failed;
   3226         if (_PyObject_SetAttrId(result, &PyId_elt, value) == -1)
   3227             goto failed;
   3228         Py_DECREF(value);
   3229         value = ast2obj_list(o->v.GeneratorExp.generators,
   3230                              ast2obj_comprehension);
   3231         if (!value) goto failed;
   3232         if (_PyObject_SetAttrId(result, &PyId_generators, value) == -1)
   3233             goto failed;
   3234         Py_DECREF(value);
   3235         break;
   3236     case Await_kind:
   3237         result = PyType_GenericNew(Await_type, NULL, NULL);
   3238         if (!result) goto failed;
   3239         value = ast2obj_expr(o->v.Await.value);
   3240         if (!value) goto failed;
   3241         if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   3242             goto failed;
   3243         Py_DECREF(value);
   3244         break;
   3245     case Yield_kind:
   3246         result = PyType_GenericNew(Yield_type, NULL, NULL);
   3247         if (!result) goto failed;
   3248         value = ast2obj_expr(o->v.Yield.value);
   3249         if (!value) goto failed;
   3250         if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   3251             goto failed;
   3252         Py_DECREF(value);
   3253         break;
   3254     case YieldFrom_kind:
   3255         result = PyType_GenericNew(YieldFrom_type, NULL, NULL);
   3256         if (!result) goto failed;
   3257         value = ast2obj_expr(o->v.YieldFrom.value);
   3258         if (!value) goto failed;
   3259         if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   3260             goto failed;
   3261         Py_DECREF(value);
   3262         break;
   3263     case Compare_kind:
   3264         result = PyType_GenericNew(Compare_type, NULL, NULL);
   3265         if (!result) goto failed;
   3266         value = ast2obj_expr(o->v.Compare.left);
   3267         if (!value) goto failed;
   3268         if (_PyObject_SetAttrId(result, &PyId_left, value) == -1)
   3269             goto failed;
   3270         Py_DECREF(value);
   3271         {
   3272             Py_ssize_t i, n = asdl_seq_LEN(o->v.Compare.ops);
   3273             value = PyList_New(n);
   3274             if (!value) goto failed;
   3275             for(i = 0; i < n; i++)
   3276                 PyList_SET_ITEM(value, i, ast2obj_cmpop((cmpop_ty)asdl_seq_GET(o->v.Compare.ops, i)));
   3277         }
   3278         if (!value) goto failed;
   3279         if (_PyObject_SetAttrId(result, &PyId_ops, value) == -1)
   3280             goto failed;
   3281         Py_DECREF(value);
   3282         value = ast2obj_list(o->v.Compare.comparators, ast2obj_expr);
   3283         if (!value) goto failed;
   3284         if (_PyObject_SetAttrId(result, &PyId_comparators, value) == -1)
   3285             goto failed;
   3286         Py_DECREF(value);
   3287         break;
   3288     case Call_kind:
   3289         result = PyType_GenericNew(Call_type, NULL, NULL);
   3290         if (!result) goto failed;
   3291         value = ast2obj_expr(o->v.Call.func);
   3292         if (!value) goto failed;
   3293         if (_PyObject_SetAttrId(result, &PyId_func, value) == -1)
   3294             goto failed;
   3295         Py_DECREF(value);
   3296         value = ast2obj_list(o->v.Call.args, ast2obj_expr);
   3297         if (!value) goto failed;
   3298         if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
   3299             goto failed;
   3300         Py_DECREF(value);
   3301         value = ast2obj_list(o->v.Call.keywords, ast2obj_keyword);
   3302         if (!value) goto failed;
   3303         if (_PyObject_SetAttrId(result, &PyId_keywords, value) == -1)
   3304             goto failed;
   3305         Py_DECREF(value);
   3306         break;
   3307     case Num_kind:
   3308         result = PyType_GenericNew(Num_type, NULL, NULL);
   3309         if (!result) goto failed;
   3310         value = ast2obj_object(o->v.Num.n);
   3311         if (!value) goto failed;
   3312         if (_PyObject_SetAttrId(result, &PyId_n, value) == -1)
   3313             goto failed;
   3314         Py_DECREF(value);
   3315         break;
   3316     case Str_kind:
   3317         result = PyType_GenericNew(Str_type, NULL, NULL);
   3318         if (!result) goto failed;
   3319         value = ast2obj_string(o->v.Str.s);
   3320         if (!value) goto failed;
   3321         if (_PyObject_SetAttrId(result, &PyId_s, value) == -1)
   3322             goto failed;
   3323         Py_DECREF(value);
   3324         break;
   3325     case FormattedValue_kind:
   3326         result = PyType_GenericNew(FormattedValue_type, NULL, NULL);
   3327         if (!result) goto failed;
   3328         value = ast2obj_expr(o->v.FormattedValue.value);
   3329         if (!value) goto failed;
   3330         if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   3331             goto failed;
   3332         Py_DECREF(value);
   3333         value = ast2obj_int(o->v.FormattedValue.conversion);
   3334         if (!value) goto failed;
   3335         if (_PyObject_SetAttrId(result, &PyId_conversion, value) == -1)
   3336             goto failed;
   3337         Py_DECREF(value);
   3338         value = ast2obj_expr(o->v.FormattedValue.format_spec);
   3339         if (!value) goto failed;
   3340         if (_PyObject_SetAttrId(result, &PyId_format_spec, value) == -1)
   3341             goto failed;
   3342         Py_DECREF(value);
   3343         break;
   3344     case JoinedStr_kind:
   3345         result = PyType_GenericNew(JoinedStr_type, NULL, NULL);
   3346         if (!result) goto failed;
   3347         value = ast2obj_list(o->v.JoinedStr.values, ast2obj_expr);
   3348         if (!value) goto failed;
   3349         if (_PyObject_SetAttrId(result, &PyId_values, value) == -1)
   3350             goto failed;
   3351         Py_DECREF(value);
   3352         break;
   3353     case Bytes_kind:
   3354         result = PyType_GenericNew(Bytes_type, NULL, NULL);
   3355         if (!result) goto failed;
   3356         value = ast2obj_bytes(o->v.Bytes.s);
   3357         if (!value) goto failed;
   3358         if (_PyObject_SetAttrId(result, &PyId_s, value) == -1)
   3359             goto failed;
   3360         Py_DECREF(value);
   3361         break;
   3362     case NameConstant_kind:
   3363         result = PyType_GenericNew(NameConstant_type, NULL, NULL);
   3364         if (!result) goto failed;
   3365         value = ast2obj_singleton(o->v.NameConstant.value);
   3366         if (!value) goto failed;
   3367         if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   3368             goto failed;
   3369         Py_DECREF(value);
   3370         break;
   3371     case Ellipsis_kind:
   3372         result = PyType_GenericNew(Ellipsis_type, NULL, NULL);
   3373         if (!result) goto failed;
   3374         break;
   3375     case Constant_kind:
   3376         result = PyType_GenericNew(Constant_type, NULL, NULL);
   3377         if (!result) goto failed;
   3378         value = ast2obj_constant(o->v.Constant.value);
   3379         if (!value) goto failed;
   3380         if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   3381             goto failed;
   3382         Py_DECREF(value);
   3383         break;
   3384     case Attribute_kind:
   3385         result = PyType_GenericNew(Attribute_type, NULL, NULL);
   3386         if (!result) goto failed;
   3387         value = ast2obj_expr(o->v.Attribute.value);
   3388         if (!value) goto failed;
   3389         if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   3390             goto failed;
   3391         Py_DECREF(value);
   3392         value = ast2obj_identifier(o->v.Attribute.attr);
   3393         if (!value) goto failed;
   3394         if (_PyObject_SetAttrId(result, &PyId_attr, value) == -1)
   3395             goto failed;
   3396         Py_DECREF(value);
   3397         value = ast2obj_expr_context(o->v.Attribute.ctx);
   3398         if (!value) goto failed;
   3399         if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
   3400             goto failed;
   3401         Py_DECREF(value);
   3402         break;
   3403     case Subscript_kind:
   3404         result = PyType_GenericNew(Subscript_type, NULL, NULL);
   3405         if (!result) goto failed;
   3406         value = ast2obj_expr(o->v.Subscript.value);
   3407         if (!value) goto failed;
   3408         if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   3409             goto failed;
   3410         Py_DECREF(value);
   3411         value = ast2obj_slice(o->v.Subscript.slice);
   3412         if (!value) goto failed;
   3413         if (_PyObject_SetAttrId(result, &PyId_slice, value) == -1)
   3414             goto failed;
   3415         Py_DECREF(value);
   3416         value = ast2obj_expr_context(o->v.Subscript.ctx);
   3417         if (!value) goto failed;
   3418         if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
   3419             goto failed;
   3420         Py_DECREF(value);
   3421         break;
   3422     case Starred_kind:
   3423         result = PyType_GenericNew(Starred_type, NULL, NULL);
   3424         if (!result) goto failed;
   3425         value = ast2obj_expr(o->v.Starred.value);
   3426         if (!value) goto failed;
   3427         if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   3428             goto failed;
   3429         Py_DECREF(value);
   3430         value = ast2obj_expr_context(o->v.Starred.ctx);
   3431         if (!value) goto failed;
   3432         if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
   3433             goto failed;
   3434         Py_DECREF(value);
   3435         break;
   3436     case Name_kind:
   3437         result = PyType_GenericNew(Name_type, NULL, NULL);
   3438         if (!result) goto failed;
   3439         value = ast2obj_identifier(o->v.Name.id);
   3440         if (!value) goto failed;
   3441         if (_PyObject_SetAttrId(result, &PyId_id, value) == -1)
   3442             goto failed;
   3443         Py_DECREF(value);
   3444         value = ast2obj_expr_context(o->v.Name.ctx);
   3445         if (!value) goto failed;
   3446         if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
   3447             goto failed;
   3448         Py_DECREF(value);
   3449         break;
   3450     case List_kind:
   3451         result = PyType_GenericNew(List_type, NULL, NULL);
   3452         if (!result) goto failed;
   3453         value = ast2obj_list(o->v.List.elts, ast2obj_expr);
   3454         if (!value) goto failed;
   3455         if (_PyObject_SetAttrId(result, &PyId_elts, value) == -1)
   3456             goto failed;
   3457         Py_DECREF(value);
   3458         value = ast2obj_expr_context(o->v.List.ctx);
   3459         if (!value) goto failed;
   3460         if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
   3461             goto failed;
   3462         Py_DECREF(value);
   3463         break;
   3464     case Tuple_kind:
   3465         result = PyType_GenericNew(Tuple_type, NULL, NULL);
   3466         if (!result) goto failed;
   3467         value = ast2obj_list(o->v.Tuple.elts, ast2obj_expr);
   3468         if (!value) goto failed;
   3469         if (_PyObject_SetAttrId(result, &PyId_elts, value) == -1)
   3470             goto failed;
   3471         Py_DECREF(value);
   3472         value = ast2obj_expr_context(o->v.Tuple.ctx);
   3473         if (!value) goto failed;
   3474         if (_PyObject_SetAttrId(result, &PyId_ctx, value) == -1)
   3475             goto failed;
   3476         Py_DECREF(value);
   3477         break;
   3478     }
   3479     value = ast2obj_int(o->lineno);
   3480     if (!value) goto failed;
   3481     if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
   3482         goto failed;
   3483     Py_DECREF(value);
   3484     value = ast2obj_int(o->col_offset);
   3485     if (!value) goto failed;
   3486     if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
   3487         goto failed;
   3488     Py_DECREF(value);
   3489     return result;
   3490 failed:
   3491     Py_XDECREF(value);
   3492     Py_XDECREF(result);
   3493     return NULL;
   3494 }
   3495 
   3496 PyObject* ast2obj_expr_context(expr_context_ty o)
   3497 {
   3498     switch(o) {
   3499         case Load:
   3500             Py_INCREF(Load_singleton);
   3501             return Load_singleton;
   3502         case Store:
   3503             Py_INCREF(Store_singleton);
   3504             return Store_singleton;
   3505         case Del:
   3506             Py_INCREF(Del_singleton);
   3507             return Del_singleton;
   3508         case AugLoad:
   3509             Py_INCREF(AugLoad_singleton);
   3510             return AugLoad_singleton;
   3511         case AugStore:
   3512             Py_INCREF(AugStore_singleton);
   3513             return AugStore_singleton;
   3514         case Param:
   3515             Py_INCREF(Param_singleton);
   3516             return Param_singleton;
   3517         default:
   3518             /* should never happen, but just in case ... */
   3519             PyErr_Format(PyExc_SystemError, "unknown expr_context found");
   3520             return NULL;
   3521     }
   3522 }
   3523 PyObject*
   3524 ast2obj_slice(void* _o)
   3525 {
   3526     slice_ty o = (slice_ty)_o;
   3527     PyObject *result = NULL, *value = NULL;
   3528     if (!o) {
   3529         Py_INCREF(Py_None);
   3530         return Py_None;
   3531     }
   3532 
   3533     switch (o->kind) {
   3534     case Slice_kind:
   3535         result = PyType_GenericNew(Slice_type, NULL, NULL);
   3536         if (!result) goto failed;
   3537         value = ast2obj_expr(o->v.Slice.lower);
   3538         if (!value) goto failed;
   3539         if (_PyObject_SetAttrId(result, &PyId_lower, value) == -1)
   3540             goto failed;
   3541         Py_DECREF(value);
   3542         value = ast2obj_expr(o->v.Slice.upper);
   3543         if (!value) goto failed;
   3544         if (_PyObject_SetAttrId(result, &PyId_upper, value) == -1)
   3545             goto failed;
   3546         Py_DECREF(value);
   3547         value = ast2obj_expr(o->v.Slice.step);
   3548         if (!value) goto failed;
   3549         if (_PyObject_SetAttrId(result, &PyId_step, value) == -1)
   3550             goto failed;
   3551         Py_DECREF(value);
   3552         break;
   3553     case ExtSlice_kind:
   3554         result = PyType_GenericNew(ExtSlice_type, NULL, NULL);
   3555         if (!result) goto failed;
   3556         value = ast2obj_list(o->v.ExtSlice.dims, ast2obj_slice);
   3557         if (!value) goto failed;
   3558         if (_PyObject_SetAttrId(result, &PyId_dims, value) == -1)
   3559             goto failed;
   3560         Py_DECREF(value);
   3561         break;
   3562     case Index_kind:
   3563         result = PyType_GenericNew(Index_type, NULL, NULL);
   3564         if (!result) goto failed;
   3565         value = ast2obj_expr(o->v.Index.value);
   3566         if (!value) goto failed;
   3567         if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   3568             goto failed;
   3569         Py_DECREF(value);
   3570         break;
   3571     }
   3572     return result;
   3573 failed:
   3574     Py_XDECREF(value);
   3575     Py_XDECREF(result);
   3576     return NULL;
   3577 }
   3578 
   3579 PyObject* ast2obj_boolop(boolop_ty o)
   3580 {
   3581     switch(o) {
   3582         case And:
   3583             Py_INCREF(And_singleton);
   3584             return And_singleton;
   3585         case Or:
   3586             Py_INCREF(Or_singleton);
   3587             return Or_singleton;
   3588         default:
   3589             /* should never happen, but just in case ... */
   3590             PyErr_Format(PyExc_SystemError, "unknown boolop found");
   3591             return NULL;
   3592     }
   3593 }
   3594 PyObject* ast2obj_operator(operator_ty o)
   3595 {
   3596     switch(o) {
   3597         case Add:
   3598             Py_INCREF(Add_singleton);
   3599             return Add_singleton;
   3600         case Sub:
   3601             Py_INCREF(Sub_singleton);
   3602             return Sub_singleton;
   3603         case Mult:
   3604             Py_INCREF(Mult_singleton);
   3605             return Mult_singleton;
   3606         case MatMult:
   3607             Py_INCREF(MatMult_singleton);
   3608             return MatMult_singleton;
   3609         case Div:
   3610             Py_INCREF(Div_singleton);
   3611             return Div_singleton;
   3612         case Mod:
   3613             Py_INCREF(Mod_singleton);
   3614             return Mod_singleton;
   3615         case Pow:
   3616             Py_INCREF(Pow_singleton);
   3617             return Pow_singleton;
   3618         case LShift:
   3619             Py_INCREF(LShift_singleton);
   3620             return LShift_singleton;
   3621         case RShift:
   3622             Py_INCREF(RShift_singleton);
   3623             return RShift_singleton;
   3624         case BitOr:
   3625             Py_INCREF(BitOr_singleton);
   3626             return BitOr_singleton;
   3627         case BitXor:
   3628             Py_INCREF(BitXor_singleton);
   3629             return BitXor_singleton;
   3630         case BitAnd:
   3631             Py_INCREF(BitAnd_singleton);
   3632             return BitAnd_singleton;
   3633         case FloorDiv:
   3634             Py_INCREF(FloorDiv_singleton);
   3635             return FloorDiv_singleton;
   3636         default:
   3637             /* should never happen, but just in case ... */
   3638             PyErr_Format(PyExc_SystemError, "unknown operator found");
   3639             return NULL;
   3640     }
   3641 }
   3642 PyObject* ast2obj_unaryop(unaryop_ty o)
   3643 {
   3644     switch(o) {
   3645         case Invert:
   3646             Py_INCREF(Invert_singleton);
   3647             return Invert_singleton;
   3648         case Not:
   3649             Py_INCREF(Not_singleton);
   3650             return Not_singleton;
   3651         case UAdd:
   3652             Py_INCREF(UAdd_singleton);
   3653             return UAdd_singleton;
   3654         case USub:
   3655             Py_INCREF(USub_singleton);
   3656             return USub_singleton;
   3657         default:
   3658             /* should never happen, but just in case ... */
   3659             PyErr_Format(PyExc_SystemError, "unknown unaryop found");
   3660             return NULL;
   3661     }
   3662 }
   3663 PyObject* ast2obj_cmpop(cmpop_ty o)
   3664 {
   3665     switch(o) {
   3666         case Eq:
   3667             Py_INCREF(Eq_singleton);
   3668             return Eq_singleton;
   3669         case NotEq:
   3670             Py_INCREF(NotEq_singleton);
   3671             return NotEq_singleton;
   3672         case Lt:
   3673             Py_INCREF(Lt_singleton);
   3674             return Lt_singleton;
   3675         case LtE:
   3676             Py_INCREF(LtE_singleton);
   3677             return LtE_singleton;
   3678         case Gt:
   3679             Py_INCREF(Gt_singleton);
   3680             return Gt_singleton;
   3681         case GtE:
   3682             Py_INCREF(GtE_singleton);
   3683             return GtE_singleton;
   3684         case Is:
   3685             Py_INCREF(Is_singleton);
   3686             return Is_singleton;
   3687         case IsNot:
   3688             Py_INCREF(IsNot_singleton);
   3689             return IsNot_singleton;
   3690         case In:
   3691             Py_INCREF(In_singleton);
   3692             return In_singleton;
   3693         case NotIn:
   3694             Py_INCREF(NotIn_singleton);
   3695             return NotIn_singleton;
   3696         default:
   3697             /* should never happen, but just in case ... */
   3698             PyErr_Format(PyExc_SystemError, "unknown cmpop found");
   3699             return NULL;
   3700     }
   3701 }
   3702 PyObject*
   3703 ast2obj_comprehension(void* _o)
   3704 {
   3705     comprehension_ty o = (comprehension_ty)_o;
   3706     PyObject *result = NULL, *value = NULL;
   3707     if (!o) {
   3708         Py_INCREF(Py_None);
   3709         return Py_None;
   3710     }
   3711 
   3712     result = PyType_GenericNew(comprehension_type, NULL, NULL);
   3713     if (!result) return NULL;
   3714     value = ast2obj_expr(o->target);
   3715     if (!value) goto failed;
   3716     if (_PyObject_SetAttrId(result, &PyId_target, value) == -1)
   3717         goto failed;
   3718     Py_DECREF(value);
   3719     value = ast2obj_expr(o->iter);
   3720     if (!value) goto failed;
   3721     if (_PyObject_SetAttrId(result, &PyId_iter, value) == -1)
   3722         goto failed;
   3723     Py_DECREF(value);
   3724     value = ast2obj_list(o->ifs, ast2obj_expr);
   3725     if (!value) goto failed;
   3726     if (_PyObject_SetAttrId(result, &PyId_ifs, value) == -1)
   3727         goto failed;
   3728     Py_DECREF(value);
   3729     value = ast2obj_int(o->is_async);
   3730     if (!value) goto failed;
   3731     if (_PyObject_SetAttrId(result, &PyId_is_async, value) == -1)
   3732         goto failed;
   3733     Py_DECREF(value);
   3734     return result;
   3735 failed:
   3736     Py_XDECREF(value);
   3737     Py_XDECREF(result);
   3738     return NULL;
   3739 }
   3740 
   3741 PyObject*
   3742 ast2obj_excepthandler(void* _o)
   3743 {
   3744     excepthandler_ty o = (excepthandler_ty)_o;
   3745     PyObject *result = NULL, *value = NULL;
   3746     if (!o) {
   3747         Py_INCREF(Py_None);
   3748         return Py_None;
   3749     }
   3750 
   3751     switch (o->kind) {
   3752     case ExceptHandler_kind:
   3753         result = PyType_GenericNew(ExceptHandler_type, NULL, NULL);
   3754         if (!result) goto failed;
   3755         value = ast2obj_expr(o->v.ExceptHandler.type);
   3756         if (!value) goto failed;
   3757         if (_PyObject_SetAttrId(result, &PyId_type, value) == -1)
   3758             goto failed;
   3759         Py_DECREF(value);
   3760         value = ast2obj_identifier(o->v.ExceptHandler.name);
   3761         if (!value) goto failed;
   3762         if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
   3763             goto failed;
   3764         Py_DECREF(value);
   3765         value = ast2obj_list(o->v.ExceptHandler.body, ast2obj_stmt);
   3766         if (!value) goto failed;
   3767         if (_PyObject_SetAttrId(result, &PyId_body, value) == -1)
   3768             goto failed;
   3769         Py_DECREF(value);
   3770         break;
   3771     }
   3772     value = ast2obj_int(o->lineno);
   3773     if (!value) goto failed;
   3774     if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
   3775         goto failed;
   3776     Py_DECREF(value);
   3777     value = ast2obj_int(o->col_offset);
   3778     if (!value) goto failed;
   3779     if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
   3780         goto failed;
   3781     Py_DECREF(value);
   3782     return result;
   3783 failed:
   3784     Py_XDECREF(value);
   3785     Py_XDECREF(result);
   3786     return NULL;
   3787 }
   3788 
   3789 PyObject*
   3790 ast2obj_arguments(void* _o)
   3791 {
   3792     arguments_ty o = (arguments_ty)_o;
   3793     PyObject *result = NULL, *value = NULL;
   3794     if (!o) {
   3795         Py_INCREF(Py_None);
   3796         return Py_None;
   3797     }
   3798 
   3799     result = PyType_GenericNew(arguments_type, NULL, NULL);
   3800     if (!result) return NULL;
   3801     value = ast2obj_list(o->args, ast2obj_arg);
   3802     if (!value) goto failed;
   3803     if (_PyObject_SetAttrId(result, &PyId_args, value) == -1)
   3804         goto failed;
   3805     Py_DECREF(value);
   3806     value = ast2obj_arg(o->vararg);
   3807     if (!value) goto failed;
   3808     if (_PyObject_SetAttrId(result, &PyId_vararg, value) == -1)
   3809         goto failed;
   3810     Py_DECREF(value);
   3811     value = ast2obj_list(o->kwonlyargs, ast2obj_arg);
   3812     if (!value) goto failed;
   3813     if (_PyObject_SetAttrId(result, &PyId_kwonlyargs, value) == -1)
   3814         goto failed;
   3815     Py_DECREF(value);
   3816     value = ast2obj_list(o->kw_defaults, ast2obj_expr);
   3817     if (!value) goto failed;
   3818     if (_PyObject_SetAttrId(result, &PyId_kw_defaults, value) == -1)
   3819         goto failed;
   3820     Py_DECREF(value);
   3821     value = ast2obj_arg(o->kwarg);
   3822     if (!value) goto failed;
   3823     if (_PyObject_SetAttrId(result, &PyId_kwarg, value) == -1)
   3824         goto failed;
   3825     Py_DECREF(value);
   3826     value = ast2obj_list(o->defaults, ast2obj_expr);
   3827     if (!value) goto failed;
   3828     if (_PyObject_SetAttrId(result, &PyId_defaults, value) == -1)
   3829         goto failed;
   3830     Py_DECREF(value);
   3831     return result;
   3832 failed:
   3833     Py_XDECREF(value);
   3834     Py_XDECREF(result);
   3835     return NULL;
   3836 }
   3837 
   3838 PyObject*
   3839 ast2obj_arg(void* _o)
   3840 {
   3841     arg_ty o = (arg_ty)_o;
   3842     PyObject *result = NULL, *value = NULL;
   3843     if (!o) {
   3844         Py_INCREF(Py_None);
   3845         return Py_None;
   3846     }
   3847 
   3848     result = PyType_GenericNew(arg_type, NULL, NULL);
   3849     if (!result) return NULL;
   3850     value = ast2obj_identifier(o->arg);
   3851     if (!value) goto failed;
   3852     if (_PyObject_SetAttrId(result, &PyId_arg, value) == -1)
   3853         goto failed;
   3854     Py_DECREF(value);
   3855     value = ast2obj_expr(o->annotation);
   3856     if (!value) goto failed;
   3857     if (_PyObject_SetAttrId(result, &PyId_annotation, value) == -1)
   3858         goto failed;
   3859     Py_DECREF(value);
   3860     value = ast2obj_int(o->lineno);
   3861     if (!value) goto failed;
   3862     if (_PyObject_SetAttrId(result, &PyId_lineno, value) < 0)
   3863         goto failed;
   3864     Py_DECREF(value);
   3865     value = ast2obj_int(o->col_offset);
   3866     if (!value) goto failed;
   3867     if (_PyObject_SetAttrId(result, &PyId_col_offset, value) < 0)
   3868         goto failed;
   3869     Py_DECREF(value);
   3870     return result;
   3871 failed:
   3872     Py_XDECREF(value);
   3873     Py_XDECREF(result);
   3874     return NULL;
   3875 }
   3876 
   3877 PyObject*
   3878 ast2obj_keyword(void* _o)
   3879 {
   3880     keyword_ty o = (keyword_ty)_o;
   3881     PyObject *result = NULL, *value = NULL;
   3882     if (!o) {
   3883         Py_INCREF(Py_None);
   3884         return Py_None;
   3885     }
   3886 
   3887     result = PyType_GenericNew(keyword_type, NULL, NULL);
   3888     if (!result) return NULL;
   3889     value = ast2obj_identifier(o->arg);
   3890     if (!value) goto failed;
   3891     if (_PyObject_SetAttrId(result, &PyId_arg, value) == -1)
   3892         goto failed;
   3893     Py_DECREF(value);
   3894     value = ast2obj_expr(o->value);
   3895     if (!value) goto failed;
   3896     if (_PyObject_SetAttrId(result, &PyId_value, value) == -1)
   3897         goto failed;
   3898     Py_DECREF(value);
   3899     return result;
   3900 failed:
   3901     Py_XDECREF(value);
   3902     Py_XDECREF(result);
   3903     return NULL;
   3904 }
   3905 
   3906 PyObject*
   3907 ast2obj_alias(void* _o)
   3908 {
   3909     alias_ty o = (alias_ty)_o;
   3910     PyObject *result = NULL, *value = NULL;
   3911     if (!o) {
   3912         Py_INCREF(Py_None);
   3913         return Py_None;
   3914     }
   3915 
   3916     result = PyType_GenericNew(alias_type, NULL, NULL);
   3917     if (!result) return NULL;
   3918     value = ast2obj_identifier(o->name);
   3919     if (!value) goto failed;
   3920     if (_PyObject_SetAttrId(result, &PyId_name, value) == -1)
   3921         goto failed;
   3922     Py_DECREF(value);
   3923     value = ast2obj_identifier(o->asname);
   3924     if (!value) goto failed;
   3925     if (_PyObject_SetAttrId(result, &PyId_asname, value) == -1)
   3926         goto failed;
   3927     Py_DECREF(value);
   3928     return result;
   3929 failed:
   3930     Py_XDECREF(value);
   3931     Py_XDECREF(result);
   3932     return NULL;
   3933 }
   3934 
   3935 PyObject*
   3936 ast2obj_withitem(void* _o)
   3937 {
   3938     withitem_ty o = (withitem_ty)_o;
   3939     PyObject *result = NULL, *value = NULL;
   3940     if (!o) {
   3941         Py_INCREF(Py_None);
   3942         return Py_None;
   3943     }
   3944 
   3945     result = PyType_GenericNew(withitem_type, NULL, NULL);
   3946     if (!result) return NULL;
   3947     value = ast2obj_expr(o->context_expr);
   3948     if (!value) goto failed;
   3949     if (_PyObject_SetAttrId(result, &PyId_context_expr, value) == -1)
   3950         goto failed;
   3951     Py_DECREF(value);
   3952     value = ast2obj_expr(o->optional_vars);
   3953     if (!value) goto failed;
   3954     if (_PyObject_SetAttrId(result, &PyId_optional_vars, value) == -1)
   3955         goto failed;
   3956     Py_DECREF(value);
   3957     return result;
   3958 failed:
   3959     Py_XDECREF(value);
   3960     Py_XDECREF(result);
   3961     return NULL;
   3962 }
   3963 
   3964 
   3965 int
   3966 obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena)
   3967 {
   3968     int isinstance;
   3969 
   3970     PyObject *tmp = NULL;
   3971 
   3972     if (obj == Py_None) {
   3973         *out = NULL;
   3974         return 0;
   3975     }
   3976     isinstance = PyObject_IsInstance(obj, (PyObject*)Module_type);
   3977     if (isinstance == -1) {
   3978         return 1;
   3979     }
   3980     if (isinstance) {
   3981         asdl_seq* body;
   3982 
   3983         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   3984             int res;
   3985             Py_ssize_t len;
   3986             Py_ssize_t i;
   3987             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   3988             if (tmp == NULL) goto failed;
   3989             if (!PyList_Check(tmp)) {
   3990                 PyErr_Format(PyExc_TypeError, "Module field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   3991                 goto failed;
   3992             }
   3993             len = PyList_GET_SIZE(tmp);
   3994             body = _Py_asdl_seq_new(len, arena);
   3995             if (body == NULL) goto failed;
   3996             for (i = 0; i < len; i++) {
   3997                 stmt_ty value;
   3998                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   3999                 if (res != 0) goto failed;
   4000                 if (len != PyList_GET_SIZE(tmp)) {
   4001                     PyErr_SetString(PyExc_RuntimeError, "Module field \"body\" changed size during iteration");
   4002                     goto failed;
   4003                 }
   4004                 asdl_seq_SET(body, i, value);
   4005             }
   4006             Py_CLEAR(tmp);
   4007         } else {
   4008             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Module");
   4009             return 1;
   4010         }
   4011         *out = Module(body, arena);
   4012         if (*out == NULL) goto failed;
   4013         return 0;
   4014     }
   4015     isinstance = PyObject_IsInstance(obj, (PyObject*)Interactive_type);
   4016     if (isinstance == -1) {
   4017         return 1;
   4018     }
   4019     if (isinstance) {
   4020         asdl_seq* body;
   4021 
   4022         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   4023             int res;
   4024             Py_ssize_t len;
   4025             Py_ssize_t i;
   4026             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   4027             if (tmp == NULL) goto failed;
   4028             if (!PyList_Check(tmp)) {
   4029                 PyErr_Format(PyExc_TypeError, "Interactive field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4030                 goto failed;
   4031             }
   4032             len = PyList_GET_SIZE(tmp);
   4033             body = _Py_asdl_seq_new(len, arena);
   4034             if (body == NULL) goto failed;
   4035             for (i = 0; i < len; i++) {
   4036                 stmt_ty value;
   4037                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   4038                 if (res != 0) goto failed;
   4039                 if (len != PyList_GET_SIZE(tmp)) {
   4040                     PyErr_SetString(PyExc_RuntimeError, "Interactive field \"body\" changed size during iteration");
   4041                     goto failed;
   4042                 }
   4043                 asdl_seq_SET(body, i, value);
   4044             }
   4045             Py_CLEAR(tmp);
   4046         } else {
   4047             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Interactive");
   4048             return 1;
   4049         }
   4050         *out = Interactive(body, arena);
   4051         if (*out == NULL) goto failed;
   4052         return 0;
   4053     }
   4054     isinstance = PyObject_IsInstance(obj, (PyObject*)Expression_type);
   4055     if (isinstance == -1) {
   4056         return 1;
   4057     }
   4058     if (isinstance) {
   4059         expr_ty body;
   4060 
   4061         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   4062             int res;
   4063             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   4064             if (tmp == NULL) goto failed;
   4065             res = obj2ast_expr(tmp, &body, arena);
   4066             if (res != 0) goto failed;
   4067             Py_CLEAR(tmp);
   4068         } else {
   4069             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Expression");
   4070             return 1;
   4071         }
   4072         *out = Expression(body, arena);
   4073         if (*out == NULL) goto failed;
   4074         return 0;
   4075     }
   4076     isinstance = PyObject_IsInstance(obj, (PyObject*)Suite_type);
   4077     if (isinstance == -1) {
   4078         return 1;
   4079     }
   4080     if (isinstance) {
   4081         asdl_seq* body;
   4082 
   4083         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   4084             int res;
   4085             Py_ssize_t len;
   4086             Py_ssize_t i;
   4087             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   4088             if (tmp == NULL) goto failed;
   4089             if (!PyList_Check(tmp)) {
   4090                 PyErr_Format(PyExc_TypeError, "Suite field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4091                 goto failed;
   4092             }
   4093             len = PyList_GET_SIZE(tmp);
   4094             body = _Py_asdl_seq_new(len, arena);
   4095             if (body == NULL) goto failed;
   4096             for (i = 0; i < len; i++) {
   4097                 stmt_ty value;
   4098                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   4099                 if (res != 0) goto failed;
   4100                 if (len != PyList_GET_SIZE(tmp)) {
   4101                     PyErr_SetString(PyExc_RuntimeError, "Suite field \"body\" changed size during iteration");
   4102                     goto failed;
   4103                 }
   4104                 asdl_seq_SET(body, i, value);
   4105             }
   4106             Py_CLEAR(tmp);
   4107         } else {
   4108             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Suite");
   4109             return 1;
   4110         }
   4111         *out = Suite(body, arena);
   4112         if (*out == NULL) goto failed;
   4113         return 0;
   4114     }
   4115 
   4116     PyErr_Format(PyExc_TypeError, "expected some sort of mod, but got %R", obj);
   4117     failed:
   4118     Py_XDECREF(tmp);
   4119     return 1;
   4120 }
   4121 
   4122 int
   4123 obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena)
   4124 {
   4125     int isinstance;
   4126 
   4127     PyObject *tmp = NULL;
   4128     int lineno;
   4129     int col_offset;
   4130 
   4131     if (obj == Py_None) {
   4132         *out = NULL;
   4133         return 0;
   4134     }
   4135     if (_PyObject_HasAttrId(obj, &PyId_lineno)) {
   4136         int res;
   4137         tmp = _PyObject_GetAttrId(obj, &PyId_lineno);
   4138         if (tmp == NULL) goto failed;
   4139         res = obj2ast_int(tmp, &lineno, arena);
   4140         if (res != 0) goto failed;
   4141         Py_CLEAR(tmp);
   4142     } else {
   4143         PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from stmt");
   4144         return 1;
   4145     }
   4146     if (_PyObject_HasAttrId(obj, &PyId_col_offset)) {
   4147         int res;
   4148         tmp = _PyObject_GetAttrId(obj, &PyId_col_offset);
   4149         if (tmp == NULL) goto failed;
   4150         res = obj2ast_int(tmp, &col_offset, arena);
   4151         if (res != 0) goto failed;
   4152         Py_CLEAR(tmp);
   4153     } else {
   4154         PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from stmt");
   4155         return 1;
   4156     }
   4157     isinstance = PyObject_IsInstance(obj, (PyObject*)FunctionDef_type);
   4158     if (isinstance == -1) {
   4159         return 1;
   4160     }
   4161     if (isinstance) {
   4162         identifier name;
   4163         arguments_ty args;
   4164         asdl_seq* body;
   4165         asdl_seq* decorator_list;
   4166         expr_ty returns;
   4167 
   4168         if (_PyObject_HasAttrId(obj, &PyId_name)) {
   4169             int res;
   4170             tmp = _PyObject_GetAttrId(obj, &PyId_name);
   4171             if (tmp == NULL) goto failed;
   4172             res = obj2ast_identifier(tmp, &name, arena);
   4173             if (res != 0) goto failed;
   4174             Py_CLEAR(tmp);
   4175         } else {
   4176             PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from FunctionDef");
   4177             return 1;
   4178         }
   4179         if (_PyObject_HasAttrId(obj, &PyId_args)) {
   4180             int res;
   4181             tmp = _PyObject_GetAttrId(obj, &PyId_args);
   4182             if (tmp == NULL) goto failed;
   4183             res = obj2ast_arguments(tmp, &args, arena);
   4184             if (res != 0) goto failed;
   4185             Py_CLEAR(tmp);
   4186         } else {
   4187             PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from FunctionDef");
   4188             return 1;
   4189         }
   4190         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   4191             int res;
   4192             Py_ssize_t len;
   4193             Py_ssize_t i;
   4194             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   4195             if (tmp == NULL) goto failed;
   4196             if (!PyList_Check(tmp)) {
   4197                 PyErr_Format(PyExc_TypeError, "FunctionDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4198                 goto failed;
   4199             }
   4200             len = PyList_GET_SIZE(tmp);
   4201             body = _Py_asdl_seq_new(len, arena);
   4202             if (body == NULL) goto failed;
   4203             for (i = 0; i < len; i++) {
   4204                 stmt_ty value;
   4205                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   4206                 if (res != 0) goto failed;
   4207                 if (len != PyList_GET_SIZE(tmp)) {
   4208                     PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"body\" changed size during iteration");
   4209                     goto failed;
   4210                 }
   4211                 asdl_seq_SET(body, i, value);
   4212             }
   4213             Py_CLEAR(tmp);
   4214         } else {
   4215             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from FunctionDef");
   4216             return 1;
   4217         }
   4218         if (_PyObject_HasAttrId(obj, &PyId_decorator_list)) {
   4219             int res;
   4220             Py_ssize_t len;
   4221             Py_ssize_t i;
   4222             tmp = _PyObject_GetAttrId(obj, &PyId_decorator_list);
   4223             if (tmp == NULL) goto failed;
   4224             if (!PyList_Check(tmp)) {
   4225                 PyErr_Format(PyExc_TypeError, "FunctionDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4226                 goto failed;
   4227             }
   4228             len = PyList_GET_SIZE(tmp);
   4229             decorator_list = _Py_asdl_seq_new(len, arena);
   4230             if (decorator_list == NULL) goto failed;
   4231             for (i = 0; i < len; i++) {
   4232                 expr_ty value;
   4233                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   4234                 if (res != 0) goto failed;
   4235                 if (len != PyList_GET_SIZE(tmp)) {
   4236                     PyErr_SetString(PyExc_RuntimeError, "FunctionDef field \"decorator_list\" changed size during iteration");
   4237                     goto failed;
   4238                 }
   4239                 asdl_seq_SET(decorator_list, i, value);
   4240             }
   4241             Py_CLEAR(tmp);
   4242         } else {
   4243             PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from FunctionDef");
   4244             return 1;
   4245         }
   4246         if (exists_not_none(obj, &PyId_returns)) {
   4247             int res;
   4248             tmp = _PyObject_GetAttrId(obj, &PyId_returns);
   4249             if (tmp == NULL) goto failed;
   4250             res = obj2ast_expr(tmp, &returns, arena);
   4251             if (res != 0) goto failed;
   4252             Py_CLEAR(tmp);
   4253         } else {
   4254             returns = NULL;
   4255         }
   4256         *out = FunctionDef(name, args, body, decorator_list, returns, lineno,
   4257                            col_offset, arena);
   4258         if (*out == NULL) goto failed;
   4259         return 0;
   4260     }
   4261     isinstance = PyObject_IsInstance(obj, (PyObject*)AsyncFunctionDef_type);
   4262     if (isinstance == -1) {
   4263         return 1;
   4264     }
   4265     if (isinstance) {
   4266         identifier name;
   4267         arguments_ty args;
   4268         asdl_seq* body;
   4269         asdl_seq* decorator_list;
   4270         expr_ty returns;
   4271 
   4272         if (_PyObject_HasAttrId(obj, &PyId_name)) {
   4273             int res;
   4274             tmp = _PyObject_GetAttrId(obj, &PyId_name);
   4275             if (tmp == NULL) goto failed;
   4276             res = obj2ast_identifier(tmp, &name, arena);
   4277             if (res != 0) goto failed;
   4278             Py_CLEAR(tmp);
   4279         } else {
   4280             PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from AsyncFunctionDef");
   4281             return 1;
   4282         }
   4283         if (_PyObject_HasAttrId(obj, &PyId_args)) {
   4284             int res;
   4285             tmp = _PyObject_GetAttrId(obj, &PyId_args);
   4286             if (tmp == NULL) goto failed;
   4287             res = obj2ast_arguments(tmp, &args, arena);
   4288             if (res != 0) goto failed;
   4289             Py_CLEAR(tmp);
   4290         } else {
   4291             PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from AsyncFunctionDef");
   4292             return 1;
   4293         }
   4294         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   4295             int res;
   4296             Py_ssize_t len;
   4297             Py_ssize_t i;
   4298             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   4299             if (tmp == NULL) goto failed;
   4300             if (!PyList_Check(tmp)) {
   4301                 PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4302                 goto failed;
   4303             }
   4304             len = PyList_GET_SIZE(tmp);
   4305             body = _Py_asdl_seq_new(len, arena);
   4306             if (body == NULL) goto failed;
   4307             for (i = 0; i < len; i++) {
   4308                 stmt_ty value;
   4309                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   4310                 if (res != 0) goto failed;
   4311                 if (len != PyList_GET_SIZE(tmp)) {
   4312                     PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"body\" changed size during iteration");
   4313                     goto failed;
   4314                 }
   4315                 asdl_seq_SET(body, i, value);
   4316             }
   4317             Py_CLEAR(tmp);
   4318         } else {
   4319             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFunctionDef");
   4320             return 1;
   4321         }
   4322         if (_PyObject_HasAttrId(obj, &PyId_decorator_list)) {
   4323             int res;
   4324             Py_ssize_t len;
   4325             Py_ssize_t i;
   4326             tmp = _PyObject_GetAttrId(obj, &PyId_decorator_list);
   4327             if (tmp == NULL) goto failed;
   4328             if (!PyList_Check(tmp)) {
   4329                 PyErr_Format(PyExc_TypeError, "AsyncFunctionDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4330                 goto failed;
   4331             }
   4332             len = PyList_GET_SIZE(tmp);
   4333             decorator_list = _Py_asdl_seq_new(len, arena);
   4334             if (decorator_list == NULL) goto failed;
   4335             for (i = 0; i < len; i++) {
   4336                 expr_ty value;
   4337                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   4338                 if (res != 0) goto failed;
   4339                 if (len != PyList_GET_SIZE(tmp)) {
   4340                     PyErr_SetString(PyExc_RuntimeError, "AsyncFunctionDef field \"decorator_list\" changed size during iteration");
   4341                     goto failed;
   4342                 }
   4343                 asdl_seq_SET(decorator_list, i, value);
   4344             }
   4345             Py_CLEAR(tmp);
   4346         } else {
   4347             PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from AsyncFunctionDef");
   4348             return 1;
   4349         }
   4350         if (exists_not_none(obj, &PyId_returns)) {
   4351             int res;
   4352             tmp = _PyObject_GetAttrId(obj, &PyId_returns);
   4353             if (tmp == NULL) goto failed;
   4354             res = obj2ast_expr(tmp, &returns, arena);
   4355             if (res != 0) goto failed;
   4356             Py_CLEAR(tmp);
   4357         } else {
   4358             returns = NULL;
   4359         }
   4360         *out = AsyncFunctionDef(name, args, body, decorator_list, returns,
   4361                                 lineno, col_offset, arena);
   4362         if (*out == NULL) goto failed;
   4363         return 0;
   4364     }
   4365     isinstance = PyObject_IsInstance(obj, (PyObject*)ClassDef_type);
   4366     if (isinstance == -1) {
   4367         return 1;
   4368     }
   4369     if (isinstance) {
   4370         identifier name;
   4371         asdl_seq* bases;
   4372         asdl_seq* keywords;
   4373         asdl_seq* body;
   4374         asdl_seq* decorator_list;
   4375 
   4376         if (_PyObject_HasAttrId(obj, &PyId_name)) {
   4377             int res;
   4378             tmp = _PyObject_GetAttrId(obj, &PyId_name);
   4379             if (tmp == NULL) goto failed;
   4380             res = obj2ast_identifier(tmp, &name, arena);
   4381             if (res != 0) goto failed;
   4382             Py_CLEAR(tmp);
   4383         } else {
   4384             PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from ClassDef");
   4385             return 1;
   4386         }
   4387         if (_PyObject_HasAttrId(obj, &PyId_bases)) {
   4388             int res;
   4389             Py_ssize_t len;
   4390             Py_ssize_t i;
   4391             tmp = _PyObject_GetAttrId(obj, &PyId_bases);
   4392             if (tmp == NULL) goto failed;
   4393             if (!PyList_Check(tmp)) {
   4394                 PyErr_Format(PyExc_TypeError, "ClassDef field \"bases\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4395                 goto failed;
   4396             }
   4397             len = PyList_GET_SIZE(tmp);
   4398             bases = _Py_asdl_seq_new(len, arena);
   4399             if (bases == NULL) goto failed;
   4400             for (i = 0; i < len; i++) {
   4401                 expr_ty value;
   4402                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   4403                 if (res != 0) goto failed;
   4404                 if (len != PyList_GET_SIZE(tmp)) {
   4405                     PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"bases\" changed size during iteration");
   4406                     goto failed;
   4407                 }
   4408                 asdl_seq_SET(bases, i, value);
   4409             }
   4410             Py_CLEAR(tmp);
   4411         } else {
   4412             PyErr_SetString(PyExc_TypeError, "required field \"bases\" missing from ClassDef");
   4413             return 1;
   4414         }
   4415         if (_PyObject_HasAttrId(obj, &PyId_keywords)) {
   4416             int res;
   4417             Py_ssize_t len;
   4418             Py_ssize_t i;
   4419             tmp = _PyObject_GetAttrId(obj, &PyId_keywords);
   4420             if (tmp == NULL) goto failed;
   4421             if (!PyList_Check(tmp)) {
   4422                 PyErr_Format(PyExc_TypeError, "ClassDef field \"keywords\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4423                 goto failed;
   4424             }
   4425             len = PyList_GET_SIZE(tmp);
   4426             keywords = _Py_asdl_seq_new(len, arena);
   4427             if (keywords == NULL) goto failed;
   4428             for (i = 0; i < len; i++) {
   4429                 keyword_ty value;
   4430                 res = obj2ast_keyword(PyList_GET_ITEM(tmp, i), &value, arena);
   4431                 if (res != 0) goto failed;
   4432                 if (len != PyList_GET_SIZE(tmp)) {
   4433                     PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"keywords\" changed size during iteration");
   4434                     goto failed;
   4435                 }
   4436                 asdl_seq_SET(keywords, i, value);
   4437             }
   4438             Py_CLEAR(tmp);
   4439         } else {
   4440             PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from ClassDef");
   4441             return 1;
   4442         }
   4443         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   4444             int res;
   4445             Py_ssize_t len;
   4446             Py_ssize_t i;
   4447             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   4448             if (tmp == NULL) goto failed;
   4449             if (!PyList_Check(tmp)) {
   4450                 PyErr_Format(PyExc_TypeError, "ClassDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4451                 goto failed;
   4452             }
   4453             len = PyList_GET_SIZE(tmp);
   4454             body = _Py_asdl_seq_new(len, arena);
   4455             if (body == NULL) goto failed;
   4456             for (i = 0; i < len; i++) {
   4457                 stmt_ty value;
   4458                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   4459                 if (res != 0) goto failed;
   4460                 if (len != PyList_GET_SIZE(tmp)) {
   4461                     PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"body\" changed size during iteration");
   4462                     goto failed;
   4463                 }
   4464                 asdl_seq_SET(body, i, value);
   4465             }
   4466             Py_CLEAR(tmp);
   4467         } else {
   4468             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ClassDef");
   4469             return 1;
   4470         }
   4471         if (_PyObject_HasAttrId(obj, &PyId_decorator_list)) {
   4472             int res;
   4473             Py_ssize_t len;
   4474             Py_ssize_t i;
   4475             tmp = _PyObject_GetAttrId(obj, &PyId_decorator_list);
   4476             if (tmp == NULL) goto failed;
   4477             if (!PyList_Check(tmp)) {
   4478                 PyErr_Format(PyExc_TypeError, "ClassDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4479                 goto failed;
   4480             }
   4481             len = PyList_GET_SIZE(tmp);
   4482             decorator_list = _Py_asdl_seq_new(len, arena);
   4483             if (decorator_list == NULL) goto failed;
   4484             for (i = 0; i < len; i++) {
   4485                 expr_ty value;
   4486                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   4487                 if (res != 0) goto failed;
   4488                 if (len != PyList_GET_SIZE(tmp)) {
   4489                     PyErr_SetString(PyExc_RuntimeError, "ClassDef field \"decorator_list\" changed size during iteration");
   4490                     goto failed;
   4491                 }
   4492                 asdl_seq_SET(decorator_list, i, value);
   4493             }
   4494             Py_CLEAR(tmp);
   4495         } else {
   4496             PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from ClassDef");
   4497             return 1;
   4498         }
   4499         *out = ClassDef(name, bases, keywords, body, decorator_list, lineno,
   4500                         col_offset, arena);
   4501         if (*out == NULL) goto failed;
   4502         return 0;
   4503     }
   4504     isinstance = PyObject_IsInstance(obj, (PyObject*)Return_type);
   4505     if (isinstance == -1) {
   4506         return 1;
   4507     }
   4508     if (isinstance) {
   4509         expr_ty value;
   4510 
   4511         if (exists_not_none(obj, &PyId_value)) {
   4512             int res;
   4513             tmp = _PyObject_GetAttrId(obj, &PyId_value);
   4514             if (tmp == NULL) goto failed;
   4515             res = obj2ast_expr(tmp, &value, arena);
   4516             if (res != 0) goto failed;
   4517             Py_CLEAR(tmp);
   4518         } else {
   4519             value = NULL;
   4520         }
   4521         *out = Return(value, lineno, col_offset, arena);
   4522         if (*out == NULL) goto failed;
   4523         return 0;
   4524     }
   4525     isinstance = PyObject_IsInstance(obj, (PyObject*)Delete_type);
   4526     if (isinstance == -1) {
   4527         return 1;
   4528     }
   4529     if (isinstance) {
   4530         asdl_seq* targets;
   4531 
   4532         if (_PyObject_HasAttrId(obj, &PyId_targets)) {
   4533             int res;
   4534             Py_ssize_t len;
   4535             Py_ssize_t i;
   4536             tmp = _PyObject_GetAttrId(obj, &PyId_targets);
   4537             if (tmp == NULL) goto failed;
   4538             if (!PyList_Check(tmp)) {
   4539                 PyErr_Format(PyExc_TypeError, "Delete field \"targets\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4540                 goto failed;
   4541             }
   4542             len = PyList_GET_SIZE(tmp);
   4543             targets = _Py_asdl_seq_new(len, arena);
   4544             if (targets == NULL) goto failed;
   4545             for (i = 0; i < len; i++) {
   4546                 expr_ty value;
   4547                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   4548                 if (res != 0) goto failed;
   4549                 if (len != PyList_GET_SIZE(tmp)) {
   4550                     PyErr_SetString(PyExc_RuntimeError, "Delete field \"targets\" changed size during iteration");
   4551                     goto failed;
   4552                 }
   4553                 asdl_seq_SET(targets, i, value);
   4554             }
   4555             Py_CLEAR(tmp);
   4556         } else {
   4557             PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Delete");
   4558             return 1;
   4559         }
   4560         *out = Delete(targets, lineno, col_offset, arena);
   4561         if (*out == NULL) goto failed;
   4562         return 0;
   4563     }
   4564     isinstance = PyObject_IsInstance(obj, (PyObject*)Assign_type);
   4565     if (isinstance == -1) {
   4566         return 1;
   4567     }
   4568     if (isinstance) {
   4569         asdl_seq* targets;
   4570         expr_ty value;
   4571 
   4572         if (_PyObject_HasAttrId(obj, &PyId_targets)) {
   4573             int res;
   4574             Py_ssize_t len;
   4575             Py_ssize_t i;
   4576             tmp = _PyObject_GetAttrId(obj, &PyId_targets);
   4577             if (tmp == NULL) goto failed;
   4578             if (!PyList_Check(tmp)) {
   4579                 PyErr_Format(PyExc_TypeError, "Assign field \"targets\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4580                 goto failed;
   4581             }
   4582             len = PyList_GET_SIZE(tmp);
   4583             targets = _Py_asdl_seq_new(len, arena);
   4584             if (targets == NULL) goto failed;
   4585             for (i = 0; i < len; i++) {
   4586                 expr_ty value;
   4587                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   4588                 if (res != 0) goto failed;
   4589                 if (len != PyList_GET_SIZE(tmp)) {
   4590                     PyErr_SetString(PyExc_RuntimeError, "Assign field \"targets\" changed size during iteration");
   4591                     goto failed;
   4592                 }
   4593                 asdl_seq_SET(targets, i, value);
   4594             }
   4595             Py_CLEAR(tmp);
   4596         } else {
   4597             PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Assign");
   4598             return 1;
   4599         }
   4600         if (_PyObject_HasAttrId(obj, &PyId_value)) {
   4601             int res;
   4602             tmp = _PyObject_GetAttrId(obj, &PyId_value);
   4603             if (tmp == NULL) goto failed;
   4604             res = obj2ast_expr(tmp, &value, arena);
   4605             if (res != 0) goto failed;
   4606             Py_CLEAR(tmp);
   4607         } else {
   4608             PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Assign");
   4609             return 1;
   4610         }
   4611         *out = Assign(targets, value, lineno, col_offset, arena);
   4612         if (*out == NULL) goto failed;
   4613         return 0;
   4614     }
   4615     isinstance = PyObject_IsInstance(obj, (PyObject*)AugAssign_type);
   4616     if (isinstance == -1) {
   4617         return 1;
   4618     }
   4619     if (isinstance) {
   4620         expr_ty target;
   4621         operator_ty op;
   4622         expr_ty value;
   4623 
   4624         if (_PyObject_HasAttrId(obj, &PyId_target)) {
   4625             int res;
   4626             tmp = _PyObject_GetAttrId(obj, &PyId_target);
   4627             if (tmp == NULL) goto failed;
   4628             res = obj2ast_expr(tmp, &target, arena);
   4629             if (res != 0) goto failed;
   4630             Py_CLEAR(tmp);
   4631         } else {
   4632             PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AugAssign");
   4633             return 1;
   4634         }
   4635         if (_PyObject_HasAttrId(obj, &PyId_op)) {
   4636             int res;
   4637             tmp = _PyObject_GetAttrId(obj, &PyId_op);
   4638             if (tmp == NULL) goto failed;
   4639             res = obj2ast_operator(tmp, &op, arena);
   4640             if (res != 0) goto failed;
   4641             Py_CLEAR(tmp);
   4642         } else {
   4643             PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from AugAssign");
   4644             return 1;
   4645         }
   4646         if (_PyObject_HasAttrId(obj, &PyId_value)) {
   4647             int res;
   4648             tmp = _PyObject_GetAttrId(obj, &PyId_value);
   4649             if (tmp == NULL) goto failed;
   4650             res = obj2ast_expr(tmp, &value, arena);
   4651             if (res != 0) goto failed;
   4652             Py_CLEAR(tmp);
   4653         } else {
   4654             PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from AugAssign");
   4655             return 1;
   4656         }
   4657         *out = AugAssign(target, op, value, lineno, col_offset, arena);
   4658         if (*out == NULL) goto failed;
   4659         return 0;
   4660     }
   4661     isinstance = PyObject_IsInstance(obj, (PyObject*)AnnAssign_type);
   4662     if (isinstance == -1) {
   4663         return 1;
   4664     }
   4665     if (isinstance) {
   4666         expr_ty target;
   4667         expr_ty annotation;
   4668         expr_ty value;
   4669         int simple;
   4670 
   4671         if (_PyObject_HasAttrId(obj, &PyId_target)) {
   4672             int res;
   4673             tmp = _PyObject_GetAttrId(obj, &PyId_target);
   4674             if (tmp == NULL) goto failed;
   4675             res = obj2ast_expr(tmp, &target, arena);
   4676             if (res != 0) goto failed;
   4677             Py_CLEAR(tmp);
   4678         } else {
   4679             PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AnnAssign");
   4680             return 1;
   4681         }
   4682         if (_PyObject_HasAttrId(obj, &PyId_annotation)) {
   4683             int res;
   4684             tmp = _PyObject_GetAttrId(obj, &PyId_annotation);
   4685             if (tmp == NULL) goto failed;
   4686             res = obj2ast_expr(tmp, &annotation, arena);
   4687             if (res != 0) goto failed;
   4688             Py_CLEAR(tmp);
   4689         } else {
   4690             PyErr_SetString(PyExc_TypeError, "required field \"annotation\" missing from AnnAssign");
   4691             return 1;
   4692         }
   4693         if (exists_not_none(obj, &PyId_value)) {
   4694             int res;
   4695             tmp = _PyObject_GetAttrId(obj, &PyId_value);
   4696             if (tmp == NULL) goto failed;
   4697             res = obj2ast_expr(tmp, &value, arena);
   4698             if (res != 0) goto failed;
   4699             Py_CLEAR(tmp);
   4700         } else {
   4701             value = NULL;
   4702         }
   4703         if (_PyObject_HasAttrId(obj, &PyId_simple)) {
   4704             int res;
   4705             tmp = _PyObject_GetAttrId(obj, &PyId_simple);
   4706             if (tmp == NULL) goto failed;
   4707             res = obj2ast_int(tmp, &simple, arena);
   4708             if (res != 0) goto failed;
   4709             Py_CLEAR(tmp);
   4710         } else {
   4711             PyErr_SetString(PyExc_TypeError, "required field \"simple\" missing from AnnAssign");
   4712             return 1;
   4713         }
   4714         *out = AnnAssign(target, annotation, value, simple, lineno, col_offset,
   4715                          arena);
   4716         if (*out == NULL) goto failed;
   4717         return 0;
   4718     }
   4719     isinstance = PyObject_IsInstance(obj, (PyObject*)For_type);
   4720     if (isinstance == -1) {
   4721         return 1;
   4722     }
   4723     if (isinstance) {
   4724         expr_ty target;
   4725         expr_ty iter;
   4726         asdl_seq* body;
   4727         asdl_seq* orelse;
   4728 
   4729         if (_PyObject_HasAttrId(obj, &PyId_target)) {
   4730             int res;
   4731             tmp = _PyObject_GetAttrId(obj, &PyId_target);
   4732             if (tmp == NULL) goto failed;
   4733             res = obj2ast_expr(tmp, &target, arena);
   4734             if (res != 0) goto failed;
   4735             Py_CLEAR(tmp);
   4736         } else {
   4737             PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from For");
   4738             return 1;
   4739         }
   4740         if (_PyObject_HasAttrId(obj, &PyId_iter)) {
   4741             int res;
   4742             tmp = _PyObject_GetAttrId(obj, &PyId_iter);
   4743             if (tmp == NULL) goto failed;
   4744             res = obj2ast_expr(tmp, &iter, arena);
   4745             if (res != 0) goto failed;
   4746             Py_CLEAR(tmp);
   4747         } else {
   4748             PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from For");
   4749             return 1;
   4750         }
   4751         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   4752             int res;
   4753             Py_ssize_t len;
   4754             Py_ssize_t i;
   4755             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   4756             if (tmp == NULL) goto failed;
   4757             if (!PyList_Check(tmp)) {
   4758                 PyErr_Format(PyExc_TypeError, "For field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4759                 goto failed;
   4760             }
   4761             len = PyList_GET_SIZE(tmp);
   4762             body = _Py_asdl_seq_new(len, arena);
   4763             if (body == NULL) goto failed;
   4764             for (i = 0; i < len; i++) {
   4765                 stmt_ty value;
   4766                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   4767                 if (res != 0) goto failed;
   4768                 if (len != PyList_GET_SIZE(tmp)) {
   4769                     PyErr_SetString(PyExc_RuntimeError, "For field \"body\" changed size during iteration");
   4770                     goto failed;
   4771                 }
   4772                 asdl_seq_SET(body, i, value);
   4773             }
   4774             Py_CLEAR(tmp);
   4775         } else {
   4776             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from For");
   4777             return 1;
   4778         }
   4779         if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
   4780             int res;
   4781             Py_ssize_t len;
   4782             Py_ssize_t i;
   4783             tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
   4784             if (tmp == NULL) goto failed;
   4785             if (!PyList_Check(tmp)) {
   4786                 PyErr_Format(PyExc_TypeError, "For field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4787                 goto failed;
   4788             }
   4789             len = PyList_GET_SIZE(tmp);
   4790             orelse = _Py_asdl_seq_new(len, arena);
   4791             if (orelse == NULL) goto failed;
   4792             for (i = 0; i < len; i++) {
   4793                 stmt_ty value;
   4794                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   4795                 if (res != 0) goto failed;
   4796                 if (len != PyList_GET_SIZE(tmp)) {
   4797                     PyErr_SetString(PyExc_RuntimeError, "For field \"orelse\" changed size during iteration");
   4798                     goto failed;
   4799                 }
   4800                 asdl_seq_SET(orelse, i, value);
   4801             }
   4802             Py_CLEAR(tmp);
   4803         } else {
   4804             PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from For");
   4805             return 1;
   4806         }
   4807         *out = For(target, iter, body, orelse, lineno, col_offset, arena);
   4808         if (*out == NULL) goto failed;
   4809         return 0;
   4810     }
   4811     isinstance = PyObject_IsInstance(obj, (PyObject*)AsyncFor_type);
   4812     if (isinstance == -1) {
   4813         return 1;
   4814     }
   4815     if (isinstance) {
   4816         expr_ty target;
   4817         expr_ty iter;
   4818         asdl_seq* body;
   4819         asdl_seq* orelse;
   4820 
   4821         if (_PyObject_HasAttrId(obj, &PyId_target)) {
   4822             int res;
   4823             tmp = _PyObject_GetAttrId(obj, &PyId_target);
   4824             if (tmp == NULL) goto failed;
   4825             res = obj2ast_expr(tmp, &target, arena);
   4826             if (res != 0) goto failed;
   4827             Py_CLEAR(tmp);
   4828         } else {
   4829             PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AsyncFor");
   4830             return 1;
   4831         }
   4832         if (_PyObject_HasAttrId(obj, &PyId_iter)) {
   4833             int res;
   4834             tmp = _PyObject_GetAttrId(obj, &PyId_iter);
   4835             if (tmp == NULL) goto failed;
   4836             res = obj2ast_expr(tmp, &iter, arena);
   4837             if (res != 0) goto failed;
   4838             Py_CLEAR(tmp);
   4839         } else {
   4840             PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from AsyncFor");
   4841             return 1;
   4842         }
   4843         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   4844             int res;
   4845             Py_ssize_t len;
   4846             Py_ssize_t i;
   4847             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   4848             if (tmp == NULL) goto failed;
   4849             if (!PyList_Check(tmp)) {
   4850                 PyErr_Format(PyExc_TypeError, "AsyncFor field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4851                 goto failed;
   4852             }
   4853             len = PyList_GET_SIZE(tmp);
   4854             body = _Py_asdl_seq_new(len, arena);
   4855             if (body == NULL) goto failed;
   4856             for (i = 0; i < len; i++) {
   4857                 stmt_ty value;
   4858                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   4859                 if (res != 0) goto failed;
   4860                 if (len != PyList_GET_SIZE(tmp)) {
   4861                     PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"body\" changed size during iteration");
   4862                     goto failed;
   4863                 }
   4864                 asdl_seq_SET(body, i, value);
   4865             }
   4866             Py_CLEAR(tmp);
   4867         } else {
   4868             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncFor");
   4869             return 1;
   4870         }
   4871         if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
   4872             int res;
   4873             Py_ssize_t len;
   4874             Py_ssize_t i;
   4875             tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
   4876             if (tmp == NULL) goto failed;
   4877             if (!PyList_Check(tmp)) {
   4878                 PyErr_Format(PyExc_TypeError, "AsyncFor field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4879                 goto failed;
   4880             }
   4881             len = PyList_GET_SIZE(tmp);
   4882             orelse = _Py_asdl_seq_new(len, arena);
   4883             if (orelse == NULL) goto failed;
   4884             for (i = 0; i < len; i++) {
   4885                 stmt_ty value;
   4886                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   4887                 if (res != 0) goto failed;
   4888                 if (len != PyList_GET_SIZE(tmp)) {
   4889                     PyErr_SetString(PyExc_RuntimeError, "AsyncFor field \"orelse\" changed size during iteration");
   4890                     goto failed;
   4891                 }
   4892                 asdl_seq_SET(orelse, i, value);
   4893             }
   4894             Py_CLEAR(tmp);
   4895         } else {
   4896             PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from AsyncFor");
   4897             return 1;
   4898         }
   4899         *out = AsyncFor(target, iter, body, orelse, lineno, col_offset, arena);
   4900         if (*out == NULL) goto failed;
   4901         return 0;
   4902     }
   4903     isinstance = PyObject_IsInstance(obj, (PyObject*)While_type);
   4904     if (isinstance == -1) {
   4905         return 1;
   4906     }
   4907     if (isinstance) {
   4908         expr_ty test;
   4909         asdl_seq* body;
   4910         asdl_seq* orelse;
   4911 
   4912         if (_PyObject_HasAttrId(obj, &PyId_test)) {
   4913             int res;
   4914             tmp = _PyObject_GetAttrId(obj, &PyId_test);
   4915             if (tmp == NULL) goto failed;
   4916             res = obj2ast_expr(tmp, &test, arena);
   4917             if (res != 0) goto failed;
   4918             Py_CLEAR(tmp);
   4919         } else {
   4920             PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from While");
   4921             return 1;
   4922         }
   4923         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   4924             int res;
   4925             Py_ssize_t len;
   4926             Py_ssize_t i;
   4927             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   4928             if (tmp == NULL) goto failed;
   4929             if (!PyList_Check(tmp)) {
   4930                 PyErr_Format(PyExc_TypeError, "While field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4931                 goto failed;
   4932             }
   4933             len = PyList_GET_SIZE(tmp);
   4934             body = _Py_asdl_seq_new(len, arena);
   4935             if (body == NULL) goto failed;
   4936             for (i = 0; i < len; i++) {
   4937                 stmt_ty value;
   4938                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   4939                 if (res != 0) goto failed;
   4940                 if (len != PyList_GET_SIZE(tmp)) {
   4941                     PyErr_SetString(PyExc_RuntimeError, "While field \"body\" changed size during iteration");
   4942                     goto failed;
   4943                 }
   4944                 asdl_seq_SET(body, i, value);
   4945             }
   4946             Py_CLEAR(tmp);
   4947         } else {
   4948             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from While");
   4949             return 1;
   4950         }
   4951         if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
   4952             int res;
   4953             Py_ssize_t len;
   4954             Py_ssize_t i;
   4955             tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
   4956             if (tmp == NULL) goto failed;
   4957             if (!PyList_Check(tmp)) {
   4958                 PyErr_Format(PyExc_TypeError, "While field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   4959                 goto failed;
   4960             }
   4961             len = PyList_GET_SIZE(tmp);
   4962             orelse = _Py_asdl_seq_new(len, arena);
   4963             if (orelse == NULL) goto failed;
   4964             for (i = 0; i < len; i++) {
   4965                 stmt_ty value;
   4966                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   4967                 if (res != 0) goto failed;
   4968                 if (len != PyList_GET_SIZE(tmp)) {
   4969                     PyErr_SetString(PyExc_RuntimeError, "While field \"orelse\" changed size during iteration");
   4970                     goto failed;
   4971                 }
   4972                 asdl_seq_SET(orelse, i, value);
   4973             }
   4974             Py_CLEAR(tmp);
   4975         } else {
   4976             PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from While");
   4977             return 1;
   4978         }
   4979         *out = While(test, body, orelse, lineno, col_offset, arena);
   4980         if (*out == NULL) goto failed;
   4981         return 0;
   4982     }
   4983     isinstance = PyObject_IsInstance(obj, (PyObject*)If_type);
   4984     if (isinstance == -1) {
   4985         return 1;
   4986     }
   4987     if (isinstance) {
   4988         expr_ty test;
   4989         asdl_seq* body;
   4990         asdl_seq* orelse;
   4991 
   4992         if (_PyObject_HasAttrId(obj, &PyId_test)) {
   4993             int res;
   4994             tmp = _PyObject_GetAttrId(obj, &PyId_test);
   4995             if (tmp == NULL) goto failed;
   4996             res = obj2ast_expr(tmp, &test, arena);
   4997             if (res != 0) goto failed;
   4998             Py_CLEAR(tmp);
   4999         } else {
   5000             PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from If");
   5001             return 1;
   5002         }
   5003         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   5004             int res;
   5005             Py_ssize_t len;
   5006             Py_ssize_t i;
   5007             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   5008             if (tmp == NULL) goto failed;
   5009             if (!PyList_Check(tmp)) {
   5010                 PyErr_Format(PyExc_TypeError, "If field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5011                 goto failed;
   5012             }
   5013             len = PyList_GET_SIZE(tmp);
   5014             body = _Py_asdl_seq_new(len, arena);
   5015             if (body == NULL) goto failed;
   5016             for (i = 0; i < len; i++) {
   5017                 stmt_ty value;
   5018                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   5019                 if (res != 0) goto failed;
   5020                 if (len != PyList_GET_SIZE(tmp)) {
   5021                     PyErr_SetString(PyExc_RuntimeError, "If field \"body\" changed size during iteration");
   5022                     goto failed;
   5023                 }
   5024                 asdl_seq_SET(body, i, value);
   5025             }
   5026             Py_CLEAR(tmp);
   5027         } else {
   5028             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from If");
   5029             return 1;
   5030         }
   5031         if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
   5032             int res;
   5033             Py_ssize_t len;
   5034             Py_ssize_t i;
   5035             tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
   5036             if (tmp == NULL) goto failed;
   5037             if (!PyList_Check(tmp)) {
   5038                 PyErr_Format(PyExc_TypeError, "If field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5039                 goto failed;
   5040             }
   5041             len = PyList_GET_SIZE(tmp);
   5042             orelse = _Py_asdl_seq_new(len, arena);
   5043             if (orelse == NULL) goto failed;
   5044             for (i = 0; i < len; i++) {
   5045                 stmt_ty value;
   5046                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   5047                 if (res != 0) goto failed;
   5048                 if (len != PyList_GET_SIZE(tmp)) {
   5049                     PyErr_SetString(PyExc_RuntimeError, "If field \"orelse\" changed size during iteration");
   5050                     goto failed;
   5051                 }
   5052                 asdl_seq_SET(orelse, i, value);
   5053             }
   5054             Py_CLEAR(tmp);
   5055         } else {
   5056             PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from If");
   5057             return 1;
   5058         }
   5059         *out = If(test, body, orelse, lineno, col_offset, arena);
   5060         if (*out == NULL) goto failed;
   5061         return 0;
   5062     }
   5063     isinstance = PyObject_IsInstance(obj, (PyObject*)With_type);
   5064     if (isinstance == -1) {
   5065         return 1;
   5066     }
   5067     if (isinstance) {
   5068         asdl_seq* items;
   5069         asdl_seq* body;
   5070 
   5071         if (_PyObject_HasAttrId(obj, &PyId_items)) {
   5072             int res;
   5073             Py_ssize_t len;
   5074             Py_ssize_t i;
   5075             tmp = _PyObject_GetAttrId(obj, &PyId_items);
   5076             if (tmp == NULL) goto failed;
   5077             if (!PyList_Check(tmp)) {
   5078                 PyErr_Format(PyExc_TypeError, "With field \"items\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5079                 goto failed;
   5080             }
   5081             len = PyList_GET_SIZE(tmp);
   5082             items = _Py_asdl_seq_new(len, arena);
   5083             if (items == NULL) goto failed;
   5084             for (i = 0; i < len; i++) {
   5085                 withitem_ty value;
   5086                 res = obj2ast_withitem(PyList_GET_ITEM(tmp, i), &value, arena);
   5087                 if (res != 0) goto failed;
   5088                 if (len != PyList_GET_SIZE(tmp)) {
   5089                     PyErr_SetString(PyExc_RuntimeError, "With field \"items\" changed size during iteration");
   5090                     goto failed;
   5091                 }
   5092                 asdl_seq_SET(items, i, value);
   5093             }
   5094             Py_CLEAR(tmp);
   5095         } else {
   5096             PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from With");
   5097             return 1;
   5098         }
   5099         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   5100             int res;
   5101             Py_ssize_t len;
   5102             Py_ssize_t i;
   5103             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   5104             if (tmp == NULL) goto failed;
   5105             if (!PyList_Check(tmp)) {
   5106                 PyErr_Format(PyExc_TypeError, "With field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5107                 goto failed;
   5108             }
   5109             len = PyList_GET_SIZE(tmp);
   5110             body = _Py_asdl_seq_new(len, arena);
   5111             if (body == NULL) goto failed;
   5112             for (i = 0; i < len; i++) {
   5113                 stmt_ty value;
   5114                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   5115                 if (res != 0) goto failed;
   5116                 if (len != PyList_GET_SIZE(tmp)) {
   5117                     PyErr_SetString(PyExc_RuntimeError, "With field \"body\" changed size during iteration");
   5118                     goto failed;
   5119                 }
   5120                 asdl_seq_SET(body, i, value);
   5121             }
   5122             Py_CLEAR(tmp);
   5123         } else {
   5124             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from With");
   5125             return 1;
   5126         }
   5127         *out = With(items, body, lineno, col_offset, arena);
   5128         if (*out == NULL) goto failed;
   5129         return 0;
   5130     }
   5131     isinstance = PyObject_IsInstance(obj, (PyObject*)AsyncWith_type);
   5132     if (isinstance == -1) {
   5133         return 1;
   5134     }
   5135     if (isinstance) {
   5136         asdl_seq* items;
   5137         asdl_seq* body;
   5138 
   5139         if (_PyObject_HasAttrId(obj, &PyId_items)) {
   5140             int res;
   5141             Py_ssize_t len;
   5142             Py_ssize_t i;
   5143             tmp = _PyObject_GetAttrId(obj, &PyId_items);
   5144             if (tmp == NULL) goto failed;
   5145             if (!PyList_Check(tmp)) {
   5146                 PyErr_Format(PyExc_TypeError, "AsyncWith field \"items\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5147                 goto failed;
   5148             }
   5149             len = PyList_GET_SIZE(tmp);
   5150             items = _Py_asdl_seq_new(len, arena);
   5151             if (items == NULL) goto failed;
   5152             for (i = 0; i < len; i++) {
   5153                 withitem_ty value;
   5154                 res = obj2ast_withitem(PyList_GET_ITEM(tmp, i), &value, arena);
   5155                 if (res != 0) goto failed;
   5156                 if (len != PyList_GET_SIZE(tmp)) {
   5157                     PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"items\" changed size during iteration");
   5158                     goto failed;
   5159                 }
   5160                 asdl_seq_SET(items, i, value);
   5161             }
   5162             Py_CLEAR(tmp);
   5163         } else {
   5164             PyErr_SetString(PyExc_TypeError, "required field \"items\" missing from AsyncWith");
   5165             return 1;
   5166         }
   5167         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   5168             int res;
   5169             Py_ssize_t len;
   5170             Py_ssize_t i;
   5171             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   5172             if (tmp == NULL) goto failed;
   5173             if (!PyList_Check(tmp)) {
   5174                 PyErr_Format(PyExc_TypeError, "AsyncWith field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5175                 goto failed;
   5176             }
   5177             len = PyList_GET_SIZE(tmp);
   5178             body = _Py_asdl_seq_new(len, arena);
   5179             if (body == NULL) goto failed;
   5180             for (i = 0; i < len; i++) {
   5181                 stmt_ty value;
   5182                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   5183                 if (res != 0) goto failed;
   5184                 if (len != PyList_GET_SIZE(tmp)) {
   5185                     PyErr_SetString(PyExc_RuntimeError, "AsyncWith field \"body\" changed size during iteration");
   5186                     goto failed;
   5187                 }
   5188                 asdl_seq_SET(body, i, value);
   5189             }
   5190             Py_CLEAR(tmp);
   5191         } else {
   5192             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from AsyncWith");
   5193             return 1;
   5194         }
   5195         *out = AsyncWith(items, body, lineno, col_offset, arena);
   5196         if (*out == NULL) goto failed;
   5197         return 0;
   5198     }
   5199     isinstance = PyObject_IsInstance(obj, (PyObject*)Raise_type);
   5200     if (isinstance == -1) {
   5201         return 1;
   5202     }
   5203     if (isinstance) {
   5204         expr_ty exc;
   5205         expr_ty cause;
   5206 
   5207         if (exists_not_none(obj, &PyId_exc)) {
   5208             int res;
   5209             tmp = _PyObject_GetAttrId(obj, &PyId_exc);
   5210             if (tmp == NULL) goto failed;
   5211             res = obj2ast_expr(tmp, &exc, arena);
   5212             if (res != 0) goto failed;
   5213             Py_CLEAR(tmp);
   5214         } else {
   5215             exc = NULL;
   5216         }
   5217         if (exists_not_none(obj, &PyId_cause)) {
   5218             int res;
   5219             tmp = _PyObject_GetAttrId(obj, &PyId_cause);
   5220             if (tmp == NULL) goto failed;
   5221             res = obj2ast_expr(tmp, &cause, arena);
   5222             if (res != 0) goto failed;
   5223             Py_CLEAR(tmp);
   5224         } else {
   5225             cause = NULL;
   5226         }
   5227         *out = Raise(exc, cause, lineno, col_offset, arena);
   5228         if (*out == NULL) goto failed;
   5229         return 0;
   5230     }
   5231     isinstance = PyObject_IsInstance(obj, (PyObject*)Try_type);
   5232     if (isinstance == -1) {
   5233         return 1;
   5234     }
   5235     if (isinstance) {
   5236         asdl_seq* body;
   5237         asdl_seq* handlers;
   5238         asdl_seq* orelse;
   5239         asdl_seq* finalbody;
   5240 
   5241         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   5242             int res;
   5243             Py_ssize_t len;
   5244             Py_ssize_t i;
   5245             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   5246             if (tmp == NULL) goto failed;
   5247             if (!PyList_Check(tmp)) {
   5248                 PyErr_Format(PyExc_TypeError, "Try field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5249                 goto failed;
   5250             }
   5251             len = PyList_GET_SIZE(tmp);
   5252             body = _Py_asdl_seq_new(len, arena);
   5253             if (body == NULL) goto failed;
   5254             for (i = 0; i < len; i++) {
   5255                 stmt_ty value;
   5256                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   5257                 if (res != 0) goto failed;
   5258                 if (len != PyList_GET_SIZE(tmp)) {
   5259                     PyErr_SetString(PyExc_RuntimeError, "Try field \"body\" changed size during iteration");
   5260                     goto failed;
   5261                 }
   5262                 asdl_seq_SET(body, i, value);
   5263             }
   5264             Py_CLEAR(tmp);
   5265         } else {
   5266             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Try");
   5267             return 1;
   5268         }
   5269         if (_PyObject_HasAttrId(obj, &PyId_handlers)) {
   5270             int res;
   5271             Py_ssize_t len;
   5272             Py_ssize_t i;
   5273             tmp = _PyObject_GetAttrId(obj, &PyId_handlers);
   5274             if (tmp == NULL) goto failed;
   5275             if (!PyList_Check(tmp)) {
   5276                 PyErr_Format(PyExc_TypeError, "Try field \"handlers\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5277                 goto failed;
   5278             }
   5279             len = PyList_GET_SIZE(tmp);
   5280             handlers = _Py_asdl_seq_new(len, arena);
   5281             if (handlers == NULL) goto failed;
   5282             for (i = 0; i < len; i++) {
   5283                 excepthandler_ty value;
   5284                 res = obj2ast_excepthandler(PyList_GET_ITEM(tmp, i), &value, arena);
   5285                 if (res != 0) goto failed;
   5286                 if (len != PyList_GET_SIZE(tmp)) {
   5287                     PyErr_SetString(PyExc_RuntimeError, "Try field \"handlers\" changed size during iteration");
   5288                     goto failed;
   5289                 }
   5290                 asdl_seq_SET(handlers, i, value);
   5291             }
   5292             Py_CLEAR(tmp);
   5293         } else {
   5294             PyErr_SetString(PyExc_TypeError, "required field \"handlers\" missing from Try");
   5295             return 1;
   5296         }
   5297         if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
   5298             int res;
   5299             Py_ssize_t len;
   5300             Py_ssize_t i;
   5301             tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
   5302             if (tmp == NULL) goto failed;
   5303             if (!PyList_Check(tmp)) {
   5304                 PyErr_Format(PyExc_TypeError, "Try field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5305                 goto failed;
   5306             }
   5307             len = PyList_GET_SIZE(tmp);
   5308             orelse = _Py_asdl_seq_new(len, arena);
   5309             if (orelse == NULL) goto failed;
   5310             for (i = 0; i < len; i++) {
   5311                 stmt_ty value;
   5312                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   5313                 if (res != 0) goto failed;
   5314                 if (len != PyList_GET_SIZE(tmp)) {
   5315                     PyErr_SetString(PyExc_RuntimeError, "Try field \"orelse\" changed size during iteration");
   5316                     goto failed;
   5317                 }
   5318                 asdl_seq_SET(orelse, i, value);
   5319             }
   5320             Py_CLEAR(tmp);
   5321         } else {
   5322             PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from Try");
   5323             return 1;
   5324         }
   5325         if (_PyObject_HasAttrId(obj, &PyId_finalbody)) {
   5326             int res;
   5327             Py_ssize_t len;
   5328             Py_ssize_t i;
   5329             tmp = _PyObject_GetAttrId(obj, &PyId_finalbody);
   5330             if (tmp == NULL) goto failed;
   5331             if (!PyList_Check(tmp)) {
   5332                 PyErr_Format(PyExc_TypeError, "Try field \"finalbody\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5333                 goto failed;
   5334             }
   5335             len = PyList_GET_SIZE(tmp);
   5336             finalbody = _Py_asdl_seq_new(len, arena);
   5337             if (finalbody == NULL) goto failed;
   5338             for (i = 0; i < len; i++) {
   5339                 stmt_ty value;
   5340                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   5341                 if (res != 0) goto failed;
   5342                 if (len != PyList_GET_SIZE(tmp)) {
   5343                     PyErr_SetString(PyExc_RuntimeError, "Try field \"finalbody\" changed size during iteration");
   5344                     goto failed;
   5345                 }
   5346                 asdl_seq_SET(finalbody, i, value);
   5347             }
   5348             Py_CLEAR(tmp);
   5349         } else {
   5350             PyErr_SetString(PyExc_TypeError, "required field \"finalbody\" missing from Try");
   5351             return 1;
   5352         }
   5353         *out = Try(body, handlers, orelse, finalbody, lineno, col_offset,
   5354                    arena);
   5355         if (*out == NULL) goto failed;
   5356         return 0;
   5357     }
   5358     isinstance = PyObject_IsInstance(obj, (PyObject*)Assert_type);
   5359     if (isinstance == -1) {
   5360         return 1;
   5361     }
   5362     if (isinstance) {
   5363         expr_ty test;
   5364         expr_ty msg;
   5365 
   5366         if (_PyObject_HasAttrId(obj, &PyId_test)) {
   5367             int res;
   5368             tmp = _PyObject_GetAttrId(obj, &PyId_test);
   5369             if (tmp == NULL) goto failed;
   5370             res = obj2ast_expr(tmp, &test, arena);
   5371             if (res != 0) goto failed;
   5372             Py_CLEAR(tmp);
   5373         } else {
   5374             PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from Assert");
   5375             return 1;
   5376         }
   5377         if (exists_not_none(obj, &PyId_msg)) {
   5378             int res;
   5379             tmp = _PyObject_GetAttrId(obj, &PyId_msg);
   5380             if (tmp == NULL) goto failed;
   5381             res = obj2ast_expr(tmp, &msg, arena);
   5382             if (res != 0) goto failed;
   5383             Py_CLEAR(tmp);
   5384         } else {
   5385             msg = NULL;
   5386         }
   5387         *out = Assert(test, msg, lineno, col_offset, arena);
   5388         if (*out == NULL) goto failed;
   5389         return 0;
   5390     }
   5391     isinstance = PyObject_IsInstance(obj, (PyObject*)Import_type);
   5392     if (isinstance == -1) {
   5393         return 1;
   5394     }
   5395     if (isinstance) {
   5396         asdl_seq* names;
   5397 
   5398         if (_PyObject_HasAttrId(obj, &PyId_names)) {
   5399             int res;
   5400             Py_ssize_t len;
   5401             Py_ssize_t i;
   5402             tmp = _PyObject_GetAttrId(obj, &PyId_names);
   5403             if (tmp == NULL) goto failed;
   5404             if (!PyList_Check(tmp)) {
   5405                 PyErr_Format(PyExc_TypeError, "Import field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5406                 goto failed;
   5407             }
   5408             len = PyList_GET_SIZE(tmp);
   5409             names = _Py_asdl_seq_new(len, arena);
   5410             if (names == NULL) goto failed;
   5411             for (i = 0; i < len; i++) {
   5412                 alias_ty value;
   5413                 res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &value, arena);
   5414                 if (res != 0) goto failed;
   5415                 if (len != PyList_GET_SIZE(tmp)) {
   5416                     PyErr_SetString(PyExc_RuntimeError, "Import field \"names\" changed size during iteration");
   5417                     goto failed;
   5418                 }
   5419                 asdl_seq_SET(names, i, value);
   5420             }
   5421             Py_CLEAR(tmp);
   5422         } else {
   5423             PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Import");
   5424             return 1;
   5425         }
   5426         *out = Import(names, lineno, col_offset, arena);
   5427         if (*out == NULL) goto failed;
   5428         return 0;
   5429     }
   5430     isinstance = PyObject_IsInstance(obj, (PyObject*)ImportFrom_type);
   5431     if (isinstance == -1) {
   5432         return 1;
   5433     }
   5434     if (isinstance) {
   5435         identifier module;
   5436         asdl_seq* names;
   5437         int level;
   5438 
   5439         if (exists_not_none(obj, &PyId_module)) {
   5440             int res;
   5441             tmp = _PyObject_GetAttrId(obj, &PyId_module);
   5442             if (tmp == NULL) goto failed;
   5443             res = obj2ast_identifier(tmp, &module, arena);
   5444             if (res != 0) goto failed;
   5445             Py_CLEAR(tmp);
   5446         } else {
   5447             module = NULL;
   5448         }
   5449         if (_PyObject_HasAttrId(obj, &PyId_names)) {
   5450             int res;
   5451             Py_ssize_t len;
   5452             Py_ssize_t i;
   5453             tmp = _PyObject_GetAttrId(obj, &PyId_names);
   5454             if (tmp == NULL) goto failed;
   5455             if (!PyList_Check(tmp)) {
   5456                 PyErr_Format(PyExc_TypeError, "ImportFrom field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5457                 goto failed;
   5458             }
   5459             len = PyList_GET_SIZE(tmp);
   5460             names = _Py_asdl_seq_new(len, arena);
   5461             if (names == NULL) goto failed;
   5462             for (i = 0; i < len; i++) {
   5463                 alias_ty value;
   5464                 res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &value, arena);
   5465                 if (res != 0) goto failed;
   5466                 if (len != PyList_GET_SIZE(tmp)) {
   5467                     PyErr_SetString(PyExc_RuntimeError, "ImportFrom field \"names\" changed size during iteration");
   5468                     goto failed;
   5469                 }
   5470                 asdl_seq_SET(names, i, value);
   5471             }
   5472             Py_CLEAR(tmp);
   5473         } else {
   5474             PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from ImportFrom");
   5475             return 1;
   5476         }
   5477         if (exists_not_none(obj, &PyId_level)) {
   5478             int res;
   5479             tmp = _PyObject_GetAttrId(obj, &PyId_level);
   5480             if (tmp == NULL) goto failed;
   5481             res = obj2ast_int(tmp, &level, arena);
   5482             if (res != 0) goto failed;
   5483             Py_CLEAR(tmp);
   5484         } else {
   5485             level = 0;
   5486         }
   5487         *out = ImportFrom(module, names, level, lineno, col_offset, arena);
   5488         if (*out == NULL) goto failed;
   5489         return 0;
   5490     }
   5491     isinstance = PyObject_IsInstance(obj, (PyObject*)Global_type);
   5492     if (isinstance == -1) {
   5493         return 1;
   5494     }
   5495     if (isinstance) {
   5496         asdl_seq* names;
   5497 
   5498         if (_PyObject_HasAttrId(obj, &PyId_names)) {
   5499             int res;
   5500             Py_ssize_t len;
   5501             Py_ssize_t i;
   5502             tmp = _PyObject_GetAttrId(obj, &PyId_names);
   5503             if (tmp == NULL) goto failed;
   5504             if (!PyList_Check(tmp)) {
   5505                 PyErr_Format(PyExc_TypeError, "Global field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5506                 goto failed;
   5507             }
   5508             len = PyList_GET_SIZE(tmp);
   5509             names = _Py_asdl_seq_new(len, arena);
   5510             if (names == NULL) goto failed;
   5511             for (i = 0; i < len; i++) {
   5512                 identifier value;
   5513                 res = obj2ast_identifier(PyList_GET_ITEM(tmp, i), &value, arena);
   5514                 if (res != 0) goto failed;
   5515                 if (len != PyList_GET_SIZE(tmp)) {
   5516                     PyErr_SetString(PyExc_RuntimeError, "Global field \"names\" changed size during iteration");
   5517                     goto failed;
   5518                 }
   5519                 asdl_seq_SET(names, i, value);
   5520             }
   5521             Py_CLEAR(tmp);
   5522         } else {
   5523             PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Global");
   5524             return 1;
   5525         }
   5526         *out = Global(names, lineno, col_offset, arena);
   5527         if (*out == NULL) goto failed;
   5528         return 0;
   5529     }
   5530     isinstance = PyObject_IsInstance(obj, (PyObject*)Nonlocal_type);
   5531     if (isinstance == -1) {
   5532         return 1;
   5533     }
   5534     if (isinstance) {
   5535         asdl_seq* names;
   5536 
   5537         if (_PyObject_HasAttrId(obj, &PyId_names)) {
   5538             int res;
   5539             Py_ssize_t len;
   5540             Py_ssize_t i;
   5541             tmp = _PyObject_GetAttrId(obj, &PyId_names);
   5542             if (tmp == NULL) goto failed;
   5543             if (!PyList_Check(tmp)) {
   5544                 PyErr_Format(PyExc_TypeError, "Nonlocal field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5545                 goto failed;
   5546             }
   5547             len = PyList_GET_SIZE(tmp);
   5548             names = _Py_asdl_seq_new(len, arena);
   5549             if (names == NULL) goto failed;
   5550             for (i = 0; i < len; i++) {
   5551                 identifier value;
   5552                 res = obj2ast_identifier(PyList_GET_ITEM(tmp, i), &value, arena);
   5553                 if (res != 0) goto failed;
   5554                 if (len != PyList_GET_SIZE(tmp)) {
   5555                     PyErr_SetString(PyExc_RuntimeError, "Nonlocal field \"names\" changed size during iteration");
   5556                     goto failed;
   5557                 }
   5558                 asdl_seq_SET(names, i, value);
   5559             }
   5560             Py_CLEAR(tmp);
   5561         } else {
   5562             PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Nonlocal");
   5563             return 1;
   5564         }
   5565         *out = Nonlocal(names, lineno, col_offset, arena);
   5566         if (*out == NULL) goto failed;
   5567         return 0;
   5568     }
   5569     isinstance = PyObject_IsInstance(obj, (PyObject*)Expr_type);
   5570     if (isinstance == -1) {
   5571         return 1;
   5572     }
   5573     if (isinstance) {
   5574         expr_ty value;
   5575 
   5576         if (_PyObject_HasAttrId(obj, &PyId_value)) {
   5577             int res;
   5578             tmp = _PyObject_GetAttrId(obj, &PyId_value);
   5579             if (tmp == NULL) goto failed;
   5580             res = obj2ast_expr(tmp, &value, arena);
   5581             if (res != 0) goto failed;
   5582             Py_CLEAR(tmp);
   5583         } else {
   5584             PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Expr");
   5585             return 1;
   5586         }
   5587         *out = Expr(value, lineno, col_offset, arena);
   5588         if (*out == NULL) goto failed;
   5589         return 0;
   5590     }
   5591     isinstance = PyObject_IsInstance(obj, (PyObject*)Pass_type);
   5592     if (isinstance == -1) {
   5593         return 1;
   5594     }
   5595     if (isinstance) {
   5596 
   5597         *out = Pass(lineno, col_offset, arena);
   5598         if (*out == NULL) goto failed;
   5599         return 0;
   5600     }
   5601     isinstance = PyObject_IsInstance(obj, (PyObject*)Break_type);
   5602     if (isinstance == -1) {
   5603         return 1;
   5604     }
   5605     if (isinstance) {
   5606 
   5607         *out = Break(lineno, col_offset, arena);
   5608         if (*out == NULL) goto failed;
   5609         return 0;
   5610     }
   5611     isinstance = PyObject_IsInstance(obj, (PyObject*)Continue_type);
   5612     if (isinstance == -1) {
   5613         return 1;
   5614     }
   5615     if (isinstance) {
   5616 
   5617         *out = Continue(lineno, col_offset, arena);
   5618         if (*out == NULL) goto failed;
   5619         return 0;
   5620     }
   5621 
   5622     PyErr_Format(PyExc_TypeError, "expected some sort of stmt, but got %R", obj);
   5623     failed:
   5624     Py_XDECREF(tmp);
   5625     return 1;
   5626 }
   5627 
   5628 int
   5629 obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena)
   5630 {
   5631     int isinstance;
   5632 
   5633     PyObject *tmp = NULL;
   5634     int lineno;
   5635     int col_offset;
   5636 
   5637     if (obj == Py_None) {
   5638         *out = NULL;
   5639         return 0;
   5640     }
   5641     if (_PyObject_HasAttrId(obj, &PyId_lineno)) {
   5642         int res;
   5643         tmp = _PyObject_GetAttrId(obj, &PyId_lineno);
   5644         if (tmp == NULL) goto failed;
   5645         res = obj2ast_int(tmp, &lineno, arena);
   5646         if (res != 0) goto failed;
   5647         Py_CLEAR(tmp);
   5648     } else {
   5649         PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from expr");
   5650         return 1;
   5651     }
   5652     if (_PyObject_HasAttrId(obj, &PyId_col_offset)) {
   5653         int res;
   5654         tmp = _PyObject_GetAttrId(obj, &PyId_col_offset);
   5655         if (tmp == NULL) goto failed;
   5656         res = obj2ast_int(tmp, &col_offset, arena);
   5657         if (res != 0) goto failed;
   5658         Py_CLEAR(tmp);
   5659     } else {
   5660         PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from expr");
   5661         return 1;
   5662     }
   5663     isinstance = PyObject_IsInstance(obj, (PyObject*)BoolOp_type);
   5664     if (isinstance == -1) {
   5665         return 1;
   5666     }
   5667     if (isinstance) {
   5668         boolop_ty op;
   5669         asdl_seq* values;
   5670 
   5671         if (_PyObject_HasAttrId(obj, &PyId_op)) {
   5672             int res;
   5673             tmp = _PyObject_GetAttrId(obj, &PyId_op);
   5674             if (tmp == NULL) goto failed;
   5675             res = obj2ast_boolop(tmp, &op, arena);
   5676             if (res != 0) goto failed;
   5677             Py_CLEAR(tmp);
   5678         } else {
   5679             PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BoolOp");
   5680             return 1;
   5681         }
   5682         if (_PyObject_HasAttrId(obj, &PyId_values)) {
   5683             int res;
   5684             Py_ssize_t len;
   5685             Py_ssize_t i;
   5686             tmp = _PyObject_GetAttrId(obj, &PyId_values);
   5687             if (tmp == NULL) goto failed;
   5688             if (!PyList_Check(tmp)) {
   5689                 PyErr_Format(PyExc_TypeError, "BoolOp field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5690                 goto failed;
   5691             }
   5692             len = PyList_GET_SIZE(tmp);
   5693             values = _Py_asdl_seq_new(len, arena);
   5694             if (values == NULL) goto failed;
   5695             for (i = 0; i < len; i++) {
   5696                 expr_ty value;
   5697                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   5698                 if (res != 0) goto failed;
   5699                 if (len != PyList_GET_SIZE(tmp)) {
   5700                     PyErr_SetString(PyExc_RuntimeError, "BoolOp field \"values\" changed size during iteration");
   5701                     goto failed;
   5702                 }
   5703                 asdl_seq_SET(values, i, value);
   5704             }
   5705             Py_CLEAR(tmp);
   5706         } else {
   5707             PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from BoolOp");
   5708             return 1;
   5709         }
   5710         *out = BoolOp(op, values, lineno, col_offset, arena);
   5711         if (*out == NULL) goto failed;
   5712         return 0;
   5713     }
   5714     isinstance = PyObject_IsInstance(obj, (PyObject*)BinOp_type);
   5715     if (isinstance == -1) {
   5716         return 1;
   5717     }
   5718     if (isinstance) {
   5719         expr_ty left;
   5720         operator_ty op;
   5721         expr_ty right;
   5722 
   5723         if (_PyObject_HasAttrId(obj, &PyId_left)) {
   5724             int res;
   5725             tmp = _PyObject_GetAttrId(obj, &PyId_left);
   5726             if (tmp == NULL) goto failed;
   5727             res = obj2ast_expr(tmp, &left, arena);
   5728             if (res != 0) goto failed;
   5729             Py_CLEAR(tmp);
   5730         } else {
   5731             PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from BinOp");
   5732             return 1;
   5733         }
   5734         if (_PyObject_HasAttrId(obj, &PyId_op)) {
   5735             int res;
   5736             tmp = _PyObject_GetAttrId(obj, &PyId_op);
   5737             if (tmp == NULL) goto failed;
   5738             res = obj2ast_operator(tmp, &op, arena);
   5739             if (res != 0) goto failed;
   5740             Py_CLEAR(tmp);
   5741         } else {
   5742             PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BinOp");
   5743             return 1;
   5744         }
   5745         if (_PyObject_HasAttrId(obj, &PyId_right)) {
   5746             int res;
   5747             tmp = _PyObject_GetAttrId(obj, &PyId_right);
   5748             if (tmp == NULL) goto failed;
   5749             res = obj2ast_expr(tmp, &right, arena);
   5750             if (res != 0) goto failed;
   5751             Py_CLEAR(tmp);
   5752         } else {
   5753             PyErr_SetString(PyExc_TypeError, "required field \"right\" missing from BinOp");
   5754             return 1;
   5755         }
   5756         *out = BinOp(left, op, right, lineno, col_offset, arena);
   5757         if (*out == NULL) goto failed;
   5758         return 0;
   5759     }
   5760     isinstance = PyObject_IsInstance(obj, (PyObject*)UnaryOp_type);
   5761     if (isinstance == -1) {
   5762         return 1;
   5763     }
   5764     if (isinstance) {
   5765         unaryop_ty op;
   5766         expr_ty operand;
   5767 
   5768         if (_PyObject_HasAttrId(obj, &PyId_op)) {
   5769             int res;
   5770             tmp = _PyObject_GetAttrId(obj, &PyId_op);
   5771             if (tmp == NULL) goto failed;
   5772             res = obj2ast_unaryop(tmp, &op, arena);
   5773             if (res != 0) goto failed;
   5774             Py_CLEAR(tmp);
   5775         } else {
   5776             PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from UnaryOp");
   5777             return 1;
   5778         }
   5779         if (_PyObject_HasAttrId(obj, &PyId_operand)) {
   5780             int res;
   5781             tmp = _PyObject_GetAttrId(obj, &PyId_operand);
   5782             if (tmp == NULL) goto failed;
   5783             res = obj2ast_expr(tmp, &operand, arena);
   5784             if (res != 0) goto failed;
   5785             Py_CLEAR(tmp);
   5786         } else {
   5787             PyErr_SetString(PyExc_TypeError, "required field \"operand\" missing from UnaryOp");
   5788             return 1;
   5789         }
   5790         *out = UnaryOp(op, operand, lineno, col_offset, arena);
   5791         if (*out == NULL) goto failed;
   5792         return 0;
   5793     }
   5794     isinstance = PyObject_IsInstance(obj, (PyObject*)Lambda_type);
   5795     if (isinstance == -1) {
   5796         return 1;
   5797     }
   5798     if (isinstance) {
   5799         arguments_ty args;
   5800         expr_ty body;
   5801 
   5802         if (_PyObject_HasAttrId(obj, &PyId_args)) {
   5803             int res;
   5804             tmp = _PyObject_GetAttrId(obj, &PyId_args);
   5805             if (tmp == NULL) goto failed;
   5806             res = obj2ast_arguments(tmp, &args, arena);
   5807             if (res != 0) goto failed;
   5808             Py_CLEAR(tmp);
   5809         } else {
   5810             PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Lambda");
   5811             return 1;
   5812         }
   5813         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   5814             int res;
   5815             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   5816             if (tmp == NULL) goto failed;
   5817             res = obj2ast_expr(tmp, &body, arena);
   5818             if (res != 0) goto failed;
   5819             Py_CLEAR(tmp);
   5820         } else {
   5821             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Lambda");
   5822             return 1;
   5823         }
   5824         *out = Lambda(args, body, lineno, col_offset, arena);
   5825         if (*out == NULL) goto failed;
   5826         return 0;
   5827     }
   5828     isinstance = PyObject_IsInstance(obj, (PyObject*)IfExp_type);
   5829     if (isinstance == -1) {
   5830         return 1;
   5831     }
   5832     if (isinstance) {
   5833         expr_ty test;
   5834         expr_ty body;
   5835         expr_ty orelse;
   5836 
   5837         if (_PyObject_HasAttrId(obj, &PyId_test)) {
   5838             int res;
   5839             tmp = _PyObject_GetAttrId(obj, &PyId_test);
   5840             if (tmp == NULL) goto failed;
   5841             res = obj2ast_expr(tmp, &test, arena);
   5842             if (res != 0) goto failed;
   5843             Py_CLEAR(tmp);
   5844         } else {
   5845             PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from IfExp");
   5846             return 1;
   5847         }
   5848         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   5849             int res;
   5850             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   5851             if (tmp == NULL) goto failed;
   5852             res = obj2ast_expr(tmp, &body, arena);
   5853             if (res != 0) goto failed;
   5854             Py_CLEAR(tmp);
   5855         } else {
   5856             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from IfExp");
   5857             return 1;
   5858         }
   5859         if (_PyObject_HasAttrId(obj, &PyId_orelse)) {
   5860             int res;
   5861             tmp = _PyObject_GetAttrId(obj, &PyId_orelse);
   5862             if (tmp == NULL) goto failed;
   5863             res = obj2ast_expr(tmp, &orelse, arena);
   5864             if (res != 0) goto failed;
   5865             Py_CLEAR(tmp);
   5866         } else {
   5867             PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from IfExp");
   5868             return 1;
   5869         }
   5870         *out = IfExp(test, body, orelse, lineno, col_offset, arena);
   5871         if (*out == NULL) goto failed;
   5872         return 0;
   5873     }
   5874     isinstance = PyObject_IsInstance(obj, (PyObject*)Dict_type);
   5875     if (isinstance == -1) {
   5876         return 1;
   5877     }
   5878     if (isinstance) {
   5879         asdl_seq* keys;
   5880         asdl_seq* values;
   5881 
   5882         if (_PyObject_HasAttrId(obj, &PyId_keys)) {
   5883             int res;
   5884             Py_ssize_t len;
   5885             Py_ssize_t i;
   5886             tmp = _PyObject_GetAttrId(obj, &PyId_keys);
   5887             if (tmp == NULL) goto failed;
   5888             if (!PyList_Check(tmp)) {
   5889                 PyErr_Format(PyExc_TypeError, "Dict field \"keys\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5890                 goto failed;
   5891             }
   5892             len = PyList_GET_SIZE(tmp);
   5893             keys = _Py_asdl_seq_new(len, arena);
   5894             if (keys == NULL) goto failed;
   5895             for (i = 0; i < len; i++) {
   5896                 expr_ty value;
   5897                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   5898                 if (res != 0) goto failed;
   5899                 if (len != PyList_GET_SIZE(tmp)) {
   5900                     PyErr_SetString(PyExc_RuntimeError, "Dict field \"keys\" changed size during iteration");
   5901                     goto failed;
   5902                 }
   5903                 asdl_seq_SET(keys, i, value);
   5904             }
   5905             Py_CLEAR(tmp);
   5906         } else {
   5907             PyErr_SetString(PyExc_TypeError, "required field \"keys\" missing from Dict");
   5908             return 1;
   5909         }
   5910         if (_PyObject_HasAttrId(obj, &PyId_values)) {
   5911             int res;
   5912             Py_ssize_t len;
   5913             Py_ssize_t i;
   5914             tmp = _PyObject_GetAttrId(obj, &PyId_values);
   5915             if (tmp == NULL) goto failed;
   5916             if (!PyList_Check(tmp)) {
   5917                 PyErr_Format(PyExc_TypeError, "Dict field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5918                 goto failed;
   5919             }
   5920             len = PyList_GET_SIZE(tmp);
   5921             values = _Py_asdl_seq_new(len, arena);
   5922             if (values == NULL) goto failed;
   5923             for (i = 0; i < len; i++) {
   5924                 expr_ty value;
   5925                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   5926                 if (res != 0) goto failed;
   5927                 if (len != PyList_GET_SIZE(tmp)) {
   5928                     PyErr_SetString(PyExc_RuntimeError, "Dict field \"values\" changed size during iteration");
   5929                     goto failed;
   5930                 }
   5931                 asdl_seq_SET(values, i, value);
   5932             }
   5933             Py_CLEAR(tmp);
   5934         } else {
   5935             PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from Dict");
   5936             return 1;
   5937         }
   5938         *out = Dict(keys, values, lineno, col_offset, arena);
   5939         if (*out == NULL) goto failed;
   5940         return 0;
   5941     }
   5942     isinstance = PyObject_IsInstance(obj, (PyObject*)Set_type);
   5943     if (isinstance == -1) {
   5944         return 1;
   5945     }
   5946     if (isinstance) {
   5947         asdl_seq* elts;
   5948 
   5949         if (_PyObject_HasAttrId(obj, &PyId_elts)) {
   5950             int res;
   5951             Py_ssize_t len;
   5952             Py_ssize_t i;
   5953             tmp = _PyObject_GetAttrId(obj, &PyId_elts);
   5954             if (tmp == NULL) goto failed;
   5955             if (!PyList_Check(tmp)) {
   5956                 PyErr_Format(PyExc_TypeError, "Set field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   5957                 goto failed;
   5958             }
   5959             len = PyList_GET_SIZE(tmp);
   5960             elts = _Py_asdl_seq_new(len, arena);
   5961             if (elts == NULL) goto failed;
   5962             for (i = 0; i < len; i++) {
   5963                 expr_ty value;
   5964                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   5965                 if (res != 0) goto failed;
   5966                 if (len != PyList_GET_SIZE(tmp)) {
   5967                     PyErr_SetString(PyExc_RuntimeError, "Set field \"elts\" changed size during iteration");
   5968                     goto failed;
   5969                 }
   5970                 asdl_seq_SET(elts, i, value);
   5971             }
   5972             Py_CLEAR(tmp);
   5973         } else {
   5974             PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Set");
   5975             return 1;
   5976         }
   5977         *out = Set(elts, lineno, col_offset, arena);
   5978         if (*out == NULL) goto failed;
   5979         return 0;
   5980     }
   5981     isinstance = PyObject_IsInstance(obj, (PyObject*)ListComp_type);
   5982     if (isinstance == -1) {
   5983         return 1;
   5984     }
   5985     if (isinstance) {
   5986         expr_ty elt;
   5987         asdl_seq* generators;
   5988 
   5989         if (_PyObject_HasAttrId(obj, &PyId_elt)) {
   5990             int res;
   5991             tmp = _PyObject_GetAttrId(obj, &PyId_elt);
   5992             if (tmp == NULL) goto failed;
   5993             res = obj2ast_expr(tmp, &elt, arena);
   5994             if (res != 0) goto failed;
   5995             Py_CLEAR(tmp);
   5996         } else {
   5997             PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from ListComp");
   5998             return 1;
   5999         }
   6000         if (_PyObject_HasAttrId(obj, &PyId_generators)) {
   6001             int res;
   6002             Py_ssize_t len;
   6003             Py_ssize_t i;
   6004             tmp = _PyObject_GetAttrId(obj, &PyId_generators);
   6005             if (tmp == NULL) goto failed;
   6006             if (!PyList_Check(tmp)) {
   6007                 PyErr_Format(PyExc_TypeError, "ListComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   6008                 goto failed;
   6009             }
   6010             len = PyList_GET_SIZE(tmp);
   6011             generators = _Py_asdl_seq_new(len, arena);
   6012             if (generators == NULL) goto failed;
   6013             for (i = 0; i < len; i++) {
   6014                 comprehension_ty value;
   6015                 res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
   6016                 if (res != 0) goto failed;
   6017                 if (len != PyList_GET_SIZE(tmp)) {
   6018                     PyErr_SetString(PyExc_RuntimeError, "ListComp field \"generators\" changed size during iteration");
   6019                     goto failed;
   6020                 }
   6021                 asdl_seq_SET(generators, i, value);
   6022             }
   6023             Py_CLEAR(tmp);
   6024         } else {
   6025             PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from ListComp");
   6026             return 1;
   6027         }
   6028         *out = ListComp(elt, generators, lineno, col_offset, arena);
   6029         if (*out == NULL) goto failed;
   6030         return 0;
   6031     }
   6032     isinstance = PyObject_IsInstance(obj, (PyObject*)SetComp_type);
   6033     if (isinstance == -1) {
   6034         return 1;
   6035     }
   6036     if (isinstance) {
   6037         expr_ty elt;
   6038         asdl_seq* generators;
   6039 
   6040         if (_PyObject_HasAttrId(obj, &PyId_elt)) {
   6041             int res;
   6042             tmp = _PyObject_GetAttrId(obj, &PyId_elt);
   6043             if (tmp == NULL) goto failed;
   6044             res = obj2ast_expr(tmp, &elt, arena);
   6045             if (res != 0) goto failed;
   6046             Py_CLEAR(tmp);
   6047         } else {
   6048             PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from SetComp");
   6049             return 1;
   6050         }
   6051         if (_PyObject_HasAttrId(obj, &PyId_generators)) {
   6052             int res;
   6053             Py_ssize_t len;
   6054             Py_ssize_t i;
   6055             tmp = _PyObject_GetAttrId(obj, &PyId_generators);
   6056             if (tmp == NULL) goto failed;
   6057             if (!PyList_Check(tmp)) {
   6058                 PyErr_Format(PyExc_TypeError, "SetComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   6059                 goto failed;
   6060             }
   6061             len = PyList_GET_SIZE(tmp);
   6062             generators = _Py_asdl_seq_new(len, arena);
   6063             if (generators == NULL) goto failed;
   6064             for (i = 0; i < len; i++) {
   6065                 comprehension_ty value;
   6066                 res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
   6067                 if (res != 0) goto failed;
   6068                 if (len != PyList_GET_SIZE(tmp)) {
   6069                     PyErr_SetString(PyExc_RuntimeError, "SetComp field \"generators\" changed size during iteration");
   6070                     goto failed;
   6071                 }
   6072                 asdl_seq_SET(generators, i, value);
   6073             }
   6074             Py_CLEAR(tmp);
   6075         } else {
   6076             PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from SetComp");
   6077             return 1;
   6078         }
   6079         *out = SetComp(elt, generators, lineno, col_offset, arena);
   6080         if (*out == NULL) goto failed;
   6081         return 0;
   6082     }
   6083     isinstance = PyObject_IsInstance(obj, (PyObject*)DictComp_type);
   6084     if (isinstance == -1) {
   6085         return 1;
   6086     }
   6087     if (isinstance) {
   6088         expr_ty key;
   6089         expr_ty value;
   6090         asdl_seq* generators;
   6091 
   6092         if (_PyObject_HasAttrId(obj, &PyId_key)) {
   6093             int res;
   6094             tmp = _PyObject_GetAttrId(obj, &PyId_key);
   6095             if (tmp == NULL) goto failed;
   6096             res = obj2ast_expr(tmp, &key, arena);
   6097             if (res != 0) goto failed;
   6098             Py_CLEAR(tmp);
   6099         } else {
   6100             PyErr_SetString(PyExc_TypeError, "required field \"key\" missing from DictComp");
   6101             return 1;
   6102         }
   6103         if (_PyObject_HasAttrId(obj, &PyId_value)) {
   6104             int res;
   6105             tmp = _PyObject_GetAttrId(obj, &PyId_value);
   6106             if (tmp == NULL) goto failed;
   6107             res = obj2ast_expr(tmp, &value, arena);
   6108             if (res != 0) goto failed;
   6109             Py_CLEAR(tmp);
   6110         } else {
   6111             PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from DictComp");
   6112             return 1;
   6113         }
   6114         if (_PyObject_HasAttrId(obj, &PyId_generators)) {
   6115             int res;
   6116             Py_ssize_t len;
   6117             Py_ssize_t i;
   6118             tmp = _PyObject_GetAttrId(obj, &PyId_generators);
   6119             if (tmp == NULL) goto failed;
   6120             if (!PyList_Check(tmp)) {
   6121                 PyErr_Format(PyExc_TypeError, "DictComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   6122                 goto failed;
   6123             }
   6124             len = PyList_GET_SIZE(tmp);
   6125             generators = _Py_asdl_seq_new(len, arena);
   6126             if (generators == NULL) goto failed;
   6127             for (i = 0; i < len; i++) {
   6128                 comprehension_ty value;
   6129                 res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
   6130                 if (res != 0) goto failed;
   6131                 if (len != PyList_GET_SIZE(tmp)) {
   6132                     PyErr_SetString(PyExc_RuntimeError, "DictComp field \"generators\" changed size during iteration");
   6133                     goto failed;
   6134                 }
   6135                 asdl_seq_SET(generators, i, value);
   6136             }
   6137             Py_CLEAR(tmp);
   6138         } else {
   6139             PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from DictComp");
   6140             return 1;
   6141         }
   6142         *out = DictComp(key, value, generators, lineno, col_offset, arena);
   6143         if (*out == NULL) goto failed;
   6144         return 0;
   6145     }
   6146     isinstance = PyObject_IsInstance(obj, (PyObject*)GeneratorExp_type);
   6147     if (isinstance == -1) {
   6148         return 1;
   6149     }
   6150     if (isinstance) {
   6151         expr_ty elt;
   6152         asdl_seq* generators;
   6153 
   6154         if (_PyObject_HasAttrId(obj, &PyId_elt)) {
   6155             int res;
   6156             tmp = _PyObject_GetAttrId(obj, &PyId_elt);
   6157             if (tmp == NULL) goto failed;
   6158             res = obj2ast_expr(tmp, &elt, arena);
   6159             if (res != 0) goto failed;
   6160             Py_CLEAR(tmp);
   6161         } else {
   6162             PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from GeneratorExp");
   6163             return 1;
   6164         }
   6165         if (_PyObject_HasAttrId(obj, &PyId_generators)) {
   6166             int res;
   6167             Py_ssize_t len;
   6168             Py_ssize_t i;
   6169             tmp = _PyObject_GetAttrId(obj, &PyId_generators);
   6170             if (tmp == NULL) goto failed;
   6171             if (!PyList_Check(tmp)) {
   6172                 PyErr_Format(PyExc_TypeError, "GeneratorExp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   6173                 goto failed;
   6174             }
   6175             len = PyList_GET_SIZE(tmp);
   6176             generators = _Py_asdl_seq_new(len, arena);
   6177             if (generators == NULL) goto failed;
   6178             for (i = 0; i < len; i++) {
   6179                 comprehension_ty value;
   6180                 res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
   6181                 if (res != 0) goto failed;
   6182                 if (len != PyList_GET_SIZE(tmp)) {
   6183                     PyErr_SetString(PyExc_RuntimeError, "GeneratorExp field \"generators\" changed size during iteration");
   6184                     goto failed;
   6185                 }
   6186                 asdl_seq_SET(generators, i, value);
   6187             }
   6188             Py_CLEAR(tmp);
   6189         } else {
   6190             PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from GeneratorExp");
   6191             return 1;
   6192         }
   6193         *out = GeneratorExp(elt, generators, lineno, col_offset, arena);
   6194         if (*out == NULL) goto failed;
   6195         return 0;
   6196     }
   6197     isinstance = PyObject_IsInstance(obj, (PyObject*)Await_type);
   6198     if (isinstance == -1) {
   6199         return 1;
   6200     }
   6201     if (isinstance) {
   6202         expr_ty value;
   6203 
   6204         if (_PyObject_HasAttrId(obj, &PyId_value)) {
   6205             int res;
   6206             tmp = _PyObject_GetAttrId(obj, &PyId_value);
   6207             if (tmp == NULL) goto failed;
   6208             res = obj2ast_expr(tmp, &value, arena);
   6209             if (res != 0) goto failed;
   6210             Py_CLEAR(tmp);
   6211         } else {
   6212             PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Await");
   6213             return 1;
   6214         }
   6215         *out = Await(value, lineno, col_offset, arena);
   6216         if (*out == NULL) goto failed;
   6217         return 0;
   6218     }
   6219     isinstance = PyObject_IsInstance(obj, (PyObject*)Yield_type);
   6220     if (isinstance == -1) {
   6221         return 1;
   6222     }
   6223     if (isinstance) {
   6224         expr_ty value;
   6225 
   6226         if (exists_not_none(obj, &PyId_value)) {
   6227             int res;
   6228             tmp = _PyObject_GetAttrId(obj, &PyId_value);
   6229             if (tmp == NULL) goto failed;
   6230             res = obj2ast_expr(tmp, &value, arena);
   6231             if (res != 0) goto failed;
   6232             Py_CLEAR(tmp);
   6233         } else {
   6234             value = NULL;
   6235         }
   6236         *out = Yield(value, lineno, col_offset, arena);
   6237         if (*out == NULL) goto failed;
   6238         return 0;
   6239     }
   6240     isinstance = PyObject_IsInstance(obj, (PyObject*)YieldFrom_type);
   6241     if (isinstance == -1) {
   6242         return 1;
   6243     }
   6244     if (isinstance) {
   6245         expr_ty value;
   6246 
   6247         if (_PyObject_HasAttrId(obj, &PyId_value)) {
   6248             int res;
   6249             tmp = _PyObject_GetAttrId(obj, &PyId_value);
   6250             if (tmp == NULL) goto failed;
   6251             res = obj2ast_expr(tmp, &value, arena);
   6252             if (res != 0) goto failed;
   6253             Py_CLEAR(tmp);
   6254         } else {
   6255             PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from YieldFrom");
   6256             return 1;
   6257         }
   6258         *out = YieldFrom(value, lineno, col_offset, arena);
   6259         if (*out == NULL) goto failed;
   6260         return 0;
   6261     }
   6262     isinstance = PyObject_IsInstance(obj, (PyObject*)Compare_type);
   6263     if (isinstance == -1) {
   6264         return 1;
   6265     }
   6266     if (isinstance) {
   6267         expr_ty left;
   6268         asdl_int_seq* ops;
   6269         asdl_seq* comparators;
   6270 
   6271         if (_PyObject_HasAttrId(obj, &PyId_left)) {
   6272             int res;
   6273             tmp = _PyObject_GetAttrId(obj, &PyId_left);
   6274             if (tmp == NULL) goto failed;
   6275             res = obj2ast_expr(tmp, &left, arena);
   6276             if (res != 0) goto failed;
   6277             Py_CLEAR(tmp);
   6278         } else {
   6279             PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from Compare");
   6280             return 1;
   6281         }
   6282         if (_PyObject_HasAttrId(obj, &PyId_ops)) {
   6283             int res;
   6284             Py_ssize_t len;
   6285             Py_ssize_t i;
   6286             tmp = _PyObject_GetAttrId(obj, &PyId_ops);
   6287             if (tmp == NULL) goto failed;
   6288             if (!PyList_Check(tmp)) {
   6289                 PyErr_Format(PyExc_TypeError, "Compare field \"ops\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   6290                 goto failed;
   6291             }
   6292             len = PyList_GET_SIZE(tmp);
   6293             ops = _Py_asdl_int_seq_new(len, arena);
   6294             if (ops == NULL) goto failed;
   6295             for (i = 0; i < len; i++) {
   6296                 cmpop_ty value;
   6297                 res = obj2ast_cmpop(PyList_GET_ITEM(tmp, i), &value, arena);
   6298                 if (res != 0) goto failed;
   6299                 if (len != PyList_GET_SIZE(tmp)) {
   6300                     PyErr_SetString(PyExc_RuntimeError, "Compare field \"ops\" changed size during iteration");
   6301                     goto failed;
   6302                 }
   6303                 asdl_seq_SET(ops, i, value);
   6304             }
   6305             Py_CLEAR(tmp);
   6306         } else {
   6307             PyErr_SetString(PyExc_TypeError, "required field \"ops\" missing from Compare");
   6308             return 1;
   6309         }
   6310         if (_PyObject_HasAttrId(obj, &PyId_comparators)) {
   6311             int res;
   6312             Py_ssize_t len;
   6313             Py_ssize_t i;
   6314             tmp = _PyObject_GetAttrId(obj, &PyId_comparators);
   6315             if (tmp == NULL) goto failed;
   6316             if (!PyList_Check(tmp)) {
   6317                 PyErr_Format(PyExc_TypeError, "Compare field \"comparators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   6318                 goto failed;
   6319             }
   6320             len = PyList_GET_SIZE(tmp);
   6321             comparators = _Py_asdl_seq_new(len, arena);
   6322             if (comparators == NULL) goto failed;
   6323             for (i = 0; i < len; i++) {
   6324                 expr_ty value;
   6325                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   6326                 if (res != 0) goto failed;
   6327                 if (len != PyList_GET_SIZE(tmp)) {
   6328                     PyErr_SetString(PyExc_RuntimeError, "Compare field \"comparators\" changed size during iteration");
   6329                     goto failed;
   6330                 }
   6331                 asdl_seq_SET(comparators, i, value);
   6332             }
   6333             Py_CLEAR(tmp);
   6334         } else {
   6335             PyErr_SetString(PyExc_TypeError, "required field \"comparators\" missing from Compare");
   6336             return 1;
   6337         }
   6338         *out = Compare(left, ops, comparators, lineno, col_offset, arena);
   6339         if (*out == NULL) goto failed;
   6340         return 0;
   6341     }
   6342     isinstance = PyObject_IsInstance(obj, (PyObject*)Call_type);
   6343     if (isinstance == -1) {
   6344         return 1;
   6345     }
   6346     if (isinstance) {
   6347         expr_ty func;
   6348         asdl_seq* args;
   6349         asdl_seq* keywords;
   6350 
   6351         if (_PyObject_HasAttrId(obj, &PyId_func)) {
   6352             int res;
   6353             tmp = _PyObject_GetAttrId(obj, &PyId_func);
   6354             if (tmp == NULL) goto failed;
   6355             res = obj2ast_expr(tmp, &func, arena);
   6356             if (res != 0) goto failed;
   6357             Py_CLEAR(tmp);
   6358         } else {
   6359             PyErr_SetString(PyExc_TypeError, "required field \"func\" missing from Call");
   6360             return 1;
   6361         }
   6362         if (_PyObject_HasAttrId(obj, &PyId_args)) {
   6363             int res;
   6364             Py_ssize_t len;
   6365             Py_ssize_t i;
   6366             tmp = _PyObject_GetAttrId(obj, &PyId_args);
   6367             if (tmp == NULL) goto failed;
   6368             if (!PyList_Check(tmp)) {
   6369                 PyErr_Format(PyExc_TypeError, "Call field \"args\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   6370                 goto failed;
   6371             }
   6372             len = PyList_GET_SIZE(tmp);
   6373             args = _Py_asdl_seq_new(len, arena);
   6374             if (args == NULL) goto failed;
   6375             for (i = 0; i < len; i++) {
   6376                 expr_ty value;
   6377                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   6378                 if (res != 0) goto failed;
   6379                 if (len != PyList_GET_SIZE(tmp)) {
   6380                     PyErr_SetString(PyExc_RuntimeError, "Call field \"args\" changed size during iteration");
   6381                     goto failed;
   6382                 }
   6383                 asdl_seq_SET(args, i, value);
   6384             }
   6385             Py_CLEAR(tmp);
   6386         } else {
   6387             PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Call");
   6388             return 1;
   6389         }
   6390         if (_PyObject_HasAttrId(obj, &PyId_keywords)) {
   6391             int res;
   6392             Py_ssize_t len;
   6393             Py_ssize_t i;
   6394             tmp = _PyObject_GetAttrId(obj, &PyId_keywords);
   6395             if (tmp == NULL) goto failed;
   6396             if (!PyList_Check(tmp)) {
   6397                 PyErr_Format(PyExc_TypeError, "Call field \"keywords\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   6398                 goto failed;
   6399             }
   6400             len = PyList_GET_SIZE(tmp);
   6401             keywords = _Py_asdl_seq_new(len, arena);
   6402             if (keywords == NULL) goto failed;
   6403             for (i = 0; i < len; i++) {
   6404                 keyword_ty value;
   6405                 res = obj2ast_keyword(PyList_GET_ITEM(tmp, i), &value, arena);
   6406                 if (res != 0) goto failed;
   6407                 if (len != PyList_GET_SIZE(tmp)) {
   6408                     PyErr_SetString(PyExc_RuntimeError, "Call field \"keywords\" changed size during iteration");
   6409                     goto failed;
   6410                 }
   6411                 asdl_seq_SET(keywords, i, value);
   6412             }
   6413             Py_CLEAR(tmp);
   6414         } else {
   6415             PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from Call");
   6416             return 1;
   6417         }
   6418         *out = Call(func, args, keywords, lineno, col_offset, arena);
   6419         if (*out == NULL) goto failed;
   6420         return 0;
   6421     }
   6422     isinstance = PyObject_IsInstance(obj, (PyObject*)Num_type);
   6423     if (isinstance == -1) {
   6424         return 1;
   6425     }
   6426     if (isinstance) {
   6427         object n;
   6428 
   6429         if (_PyObject_HasAttrId(obj, &PyId_n)) {
   6430             int res;
   6431             tmp = _PyObject_GetAttrId(obj, &PyId_n);
   6432             if (tmp == NULL) goto failed;
   6433             res = obj2ast_object(tmp, &n, arena);
   6434             if (res != 0) goto failed;
   6435             Py_CLEAR(tmp);
   6436         } else {
   6437             PyErr_SetString(PyExc_TypeError, "required field \"n\" missing from Num");
   6438             return 1;
   6439         }
   6440         *out = Num(n, lineno, col_offset, arena);
   6441         if (*out == NULL) goto failed;
   6442         return 0;
   6443     }
   6444     isinstance = PyObject_IsInstance(obj, (PyObject*)Str_type);
   6445     if (isinstance == -1) {
   6446         return 1;
   6447     }
   6448     if (isinstance) {
   6449         string s;
   6450 
   6451         if (_PyObject_HasAttrId(obj, &PyId_s)) {
   6452             int res;
   6453             tmp = _PyObject_GetAttrId(obj, &PyId_s);
   6454             if (tmp == NULL) goto failed;
   6455             res = obj2ast_string(tmp, &s, arena);
   6456             if (res != 0) goto failed;
   6457             Py_CLEAR(tmp);
   6458         } else {
   6459             PyErr_SetString(PyExc_TypeError, "required field \"s\" missing from Str");
   6460             return 1;
   6461         }
   6462         *out = Str(s, lineno, col_offset, arena);
   6463         if (*out == NULL) goto failed;
   6464         return 0;
   6465     }
   6466     isinstance = PyObject_IsInstance(obj, (PyObject*)FormattedValue_type);
   6467     if (isinstance == -1) {
   6468         return 1;
   6469     }
   6470     if (isinstance) {
   6471         expr_ty value;
   6472         int conversion;
   6473         expr_ty format_spec;
   6474 
   6475         if (_PyObject_HasAttrId(obj, &PyId_value)) {
   6476             int res;
   6477             tmp = _PyObject_GetAttrId(obj, &PyId_value);
   6478             if (tmp == NULL) goto failed;
   6479             res = obj2ast_expr(tmp, &value, arena);
   6480             if (res != 0) goto failed;
   6481             Py_CLEAR(tmp);
   6482         } else {
   6483             PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from FormattedValue");
   6484             return 1;
   6485         }
   6486         if (exists_not_none(obj, &PyId_conversion)) {
   6487             int res;
   6488             tmp = _PyObject_GetAttrId(obj, &PyId_conversion);
   6489             if (tmp == NULL) goto failed;
   6490             res = obj2ast_int(tmp, &conversion, arena);
   6491             if (res != 0) goto failed;
   6492             Py_CLEAR(tmp);
   6493         } else {
   6494             conversion = 0;
   6495         }
   6496         if (exists_not_none(obj, &PyId_format_spec)) {
   6497             int res;
   6498             tmp = _PyObject_GetAttrId(obj, &PyId_format_spec);
   6499             if (tmp == NULL) goto failed;
   6500             res = obj2ast_expr(tmp, &format_spec, arena);
   6501             if (res != 0) goto failed;
   6502             Py_CLEAR(tmp);
   6503         } else {
   6504             format_spec = NULL;
   6505         }
   6506         *out = FormattedValue(value, conversion, format_spec, lineno,
   6507                               col_offset, arena);
   6508         if (*out == NULL) goto failed;
   6509         return 0;
   6510     }
   6511     isinstance = PyObject_IsInstance(obj, (PyObject*)JoinedStr_type);
   6512     if (isinstance == -1) {
   6513         return 1;
   6514     }
   6515     if (isinstance) {
   6516         asdl_seq* values;
   6517 
   6518         if (_PyObject_HasAttrId(obj, &PyId_values)) {
   6519             int res;
   6520             Py_ssize_t len;
   6521             Py_ssize_t i;
   6522             tmp = _PyObject_GetAttrId(obj, &PyId_values);
   6523             if (tmp == NULL) goto failed;
   6524             if (!PyList_Check(tmp)) {
   6525                 PyErr_Format(PyExc_TypeError, "JoinedStr field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   6526                 goto failed;
   6527             }
   6528             len = PyList_GET_SIZE(tmp);
   6529             values = _Py_asdl_seq_new(len, arena);
   6530             if (values == NULL) goto failed;
   6531             for (i = 0; i < len; i++) {
   6532                 expr_ty value;
   6533                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   6534                 if (res != 0) goto failed;
   6535                 if (len != PyList_GET_SIZE(tmp)) {
   6536                     PyErr_SetString(PyExc_RuntimeError, "JoinedStr field \"values\" changed size during iteration");
   6537                     goto failed;
   6538                 }
   6539                 asdl_seq_SET(values, i, value);
   6540             }
   6541             Py_CLEAR(tmp);
   6542         } else {
   6543             PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from JoinedStr");
   6544             return 1;
   6545         }
   6546         *out = JoinedStr(values, lineno, col_offset, arena);
   6547         if (*out == NULL) goto failed;
   6548         return 0;
   6549     }
   6550     isinstance = PyObject_IsInstance(obj, (PyObject*)Bytes_type);
   6551     if (isinstance == -1) {
   6552         return 1;
   6553     }
   6554     if (isinstance) {
   6555         bytes s;
   6556 
   6557         if (_PyObject_HasAttrId(obj, &PyId_s)) {
   6558             int res;
   6559             tmp = _PyObject_GetAttrId(obj, &PyId_s);
   6560             if (tmp == NULL) goto failed;
   6561             res = obj2ast_bytes(tmp, &s, arena);
   6562             if (res != 0) goto failed;
   6563             Py_CLEAR(tmp);
   6564         } else {
   6565             PyErr_SetString(PyExc_TypeError, "required field \"s\" missing from Bytes");
   6566             return 1;
   6567         }
   6568         *out = Bytes(s, lineno, col_offset, arena);
   6569         if (*out == NULL) goto failed;
   6570         return 0;
   6571     }
   6572     isinstance = PyObject_IsInstance(obj, (PyObject*)NameConstant_type);
   6573     if (isinstance == -1) {
   6574         return 1;
   6575     }
   6576     if (isinstance) {
   6577         singleton value;
   6578 
   6579         if (_PyObject_HasAttrId(obj, &PyId_value)) {
   6580             int res;
   6581             tmp = _PyObject_GetAttrId(obj, &PyId_value);
   6582             if (tmp == NULL) goto failed;
   6583             res = obj2ast_singleton(tmp, &value, arena);
   6584             if (res != 0) goto failed;
   6585             Py_CLEAR(tmp);
   6586         } else {
   6587             PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from NameConstant");
   6588             return 1;
   6589         }
   6590         *out = NameConstant(value, lineno, col_offset, arena);
   6591         if (*out == NULL) goto failed;
   6592         return 0;
   6593     }
   6594     isinstance = PyObject_IsInstance(obj, (PyObject*)Ellipsis_type);
   6595     if (isinstance == -1) {
   6596         return 1;
   6597     }
   6598     if (isinstance) {
   6599 
   6600         *out = Ellipsis(lineno, col_offset, arena);
   6601         if (*out == NULL) goto failed;
   6602         return 0;
   6603     }
   6604     isinstance = PyObject_IsInstance(obj, (PyObject*)Constant_type);
   6605     if (isinstance == -1) {
   6606         return 1;
   6607     }
   6608     if (isinstance) {
   6609         constant value;
   6610 
   6611         if (_PyObject_HasAttrId(obj, &PyId_value)) {
   6612             int res;
   6613             tmp = _PyObject_GetAttrId(obj, &PyId_value);
   6614             if (tmp == NULL) goto failed;
   6615             res = obj2ast_constant(tmp, &value, arena);
   6616             if (res != 0) goto failed;
   6617             Py_CLEAR(tmp);
   6618         } else {
   6619             PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Constant");
   6620             return 1;
   6621         }
   6622         *out = Constant(value, lineno, col_offset, arena);
   6623         if (*out == NULL) goto failed;
   6624         return 0;
   6625     }
   6626     isinstance = PyObject_IsInstance(obj, (PyObject*)Attribute_type);
   6627     if (isinstance == -1) {
   6628         return 1;
   6629     }
   6630     if (isinstance) {
   6631         expr_ty value;
   6632         identifier attr;
   6633         expr_context_ty ctx;
   6634 
   6635         if (_PyObject_HasAttrId(obj, &PyId_value)) {
   6636             int res;
   6637             tmp = _PyObject_GetAttrId(obj, &PyId_value);
   6638             if (tmp == NULL) goto failed;
   6639             res = obj2ast_expr(tmp, &value, arena);
   6640             if (res != 0) goto failed;
   6641             Py_CLEAR(tmp);
   6642         } else {
   6643             PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Attribute");
   6644             return 1;
   6645         }
   6646         if (_PyObject_HasAttrId(obj, &PyId_attr)) {
   6647             int res;
   6648             tmp = _PyObject_GetAttrId(obj, &PyId_attr);
   6649             if (tmp == NULL) goto failed;
   6650             res = obj2ast_identifier(tmp, &attr, arena);
   6651             if (res != 0) goto failed;
   6652             Py_CLEAR(tmp);
   6653         } else {
   6654             PyErr_SetString(PyExc_TypeError, "required field \"attr\" missing from Attribute");
   6655             return 1;
   6656         }
   6657         if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
   6658             int res;
   6659             tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
   6660             if (tmp == NULL) goto failed;
   6661             res = obj2ast_expr_context(tmp, &ctx, arena);
   6662             if (res != 0) goto failed;
   6663             Py_CLEAR(tmp);
   6664         } else {
   6665             PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Attribute");
   6666             return 1;
   6667         }
   6668         *out = Attribute(value, attr, ctx, lineno, col_offset, arena);
   6669         if (*out == NULL) goto failed;
   6670         return 0;
   6671     }
   6672     isinstance = PyObject_IsInstance(obj, (PyObject*)Subscript_type);
   6673     if (isinstance == -1) {
   6674         return 1;
   6675     }
   6676     if (isinstance) {
   6677         expr_ty value;
   6678         slice_ty slice;
   6679         expr_context_ty ctx;
   6680 
   6681         if (_PyObject_HasAttrId(obj, &PyId_value)) {
   6682             int res;
   6683             tmp = _PyObject_GetAttrId(obj, &PyId_value);
   6684             if (tmp == NULL) goto failed;
   6685             res = obj2ast_expr(tmp, &value, arena);
   6686             if (res != 0) goto failed;
   6687             Py_CLEAR(tmp);
   6688         } else {
   6689             PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Subscript");
   6690             return 1;
   6691         }
   6692         if (_PyObject_HasAttrId(obj, &PyId_slice)) {
   6693             int res;
   6694             tmp = _PyObject_GetAttrId(obj, &PyId_slice);
   6695             if (tmp == NULL) goto failed;
   6696             res = obj2ast_slice(tmp, &slice, arena);
   6697             if (res != 0) goto failed;
   6698             Py_CLEAR(tmp);
   6699         } else {
   6700             PyErr_SetString(PyExc_TypeError, "required field \"slice\" missing from Subscript");
   6701             return 1;
   6702         }
   6703         if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
   6704             int res;
   6705             tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
   6706             if (tmp == NULL) goto failed;
   6707             res = obj2ast_expr_context(tmp, &ctx, arena);
   6708             if (res != 0) goto failed;
   6709             Py_CLEAR(tmp);
   6710         } else {
   6711             PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Subscript");
   6712             return 1;
   6713         }
   6714         *out = Subscript(value, slice, ctx, lineno, col_offset, arena);
   6715         if (*out == NULL) goto failed;
   6716         return 0;
   6717     }
   6718     isinstance = PyObject_IsInstance(obj, (PyObject*)Starred_type);
   6719     if (isinstance == -1) {
   6720         return 1;
   6721     }
   6722     if (isinstance) {
   6723         expr_ty value;
   6724         expr_context_ty ctx;
   6725 
   6726         if (_PyObject_HasAttrId(obj, &PyId_value)) {
   6727             int res;
   6728             tmp = _PyObject_GetAttrId(obj, &PyId_value);
   6729             if (tmp == NULL) goto failed;
   6730             res = obj2ast_expr(tmp, &value, arena);
   6731             if (res != 0) goto failed;
   6732             Py_CLEAR(tmp);
   6733         } else {
   6734             PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Starred");
   6735             return 1;
   6736         }
   6737         if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
   6738             int res;
   6739             tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
   6740             if (tmp == NULL) goto failed;
   6741             res = obj2ast_expr_context(tmp, &ctx, arena);
   6742             if (res != 0) goto failed;
   6743             Py_CLEAR(tmp);
   6744         } else {
   6745             PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Starred");
   6746             return 1;
   6747         }
   6748         *out = Starred(value, ctx, lineno, col_offset, arena);
   6749         if (*out == NULL) goto failed;
   6750         return 0;
   6751     }
   6752     isinstance = PyObject_IsInstance(obj, (PyObject*)Name_type);
   6753     if (isinstance == -1) {
   6754         return 1;
   6755     }
   6756     if (isinstance) {
   6757         identifier id;
   6758         expr_context_ty ctx;
   6759 
   6760         if (_PyObject_HasAttrId(obj, &PyId_id)) {
   6761             int res;
   6762             tmp = _PyObject_GetAttrId(obj, &PyId_id);
   6763             if (tmp == NULL) goto failed;
   6764             res = obj2ast_identifier(tmp, &id, arena);
   6765             if (res != 0) goto failed;
   6766             Py_CLEAR(tmp);
   6767         } else {
   6768             PyErr_SetString(PyExc_TypeError, "required field \"id\" missing from Name");
   6769             return 1;
   6770         }
   6771         if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
   6772             int res;
   6773             tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
   6774             if (tmp == NULL) goto failed;
   6775             res = obj2ast_expr_context(tmp, &ctx, arena);
   6776             if (res != 0) goto failed;
   6777             Py_CLEAR(tmp);
   6778         } else {
   6779             PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Name");
   6780             return 1;
   6781         }
   6782         *out = Name(id, ctx, lineno, col_offset, arena);
   6783         if (*out == NULL) goto failed;
   6784         return 0;
   6785     }
   6786     isinstance = PyObject_IsInstance(obj, (PyObject*)List_type);
   6787     if (isinstance == -1) {
   6788         return 1;
   6789     }
   6790     if (isinstance) {
   6791         asdl_seq* elts;
   6792         expr_context_ty ctx;
   6793 
   6794         if (_PyObject_HasAttrId(obj, &PyId_elts)) {
   6795             int res;
   6796             Py_ssize_t len;
   6797             Py_ssize_t i;
   6798             tmp = _PyObject_GetAttrId(obj, &PyId_elts);
   6799             if (tmp == NULL) goto failed;
   6800             if (!PyList_Check(tmp)) {
   6801                 PyErr_Format(PyExc_TypeError, "List field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   6802                 goto failed;
   6803             }
   6804             len = PyList_GET_SIZE(tmp);
   6805             elts = _Py_asdl_seq_new(len, arena);
   6806             if (elts == NULL) goto failed;
   6807             for (i = 0; i < len; i++) {
   6808                 expr_ty value;
   6809                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   6810                 if (res != 0) goto failed;
   6811                 if (len != PyList_GET_SIZE(tmp)) {
   6812                     PyErr_SetString(PyExc_RuntimeError, "List field \"elts\" changed size during iteration");
   6813                     goto failed;
   6814                 }
   6815                 asdl_seq_SET(elts, i, value);
   6816             }
   6817             Py_CLEAR(tmp);
   6818         } else {
   6819             PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from List");
   6820             return 1;
   6821         }
   6822         if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
   6823             int res;
   6824             tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
   6825             if (tmp == NULL) goto failed;
   6826             res = obj2ast_expr_context(tmp, &ctx, arena);
   6827             if (res != 0) goto failed;
   6828             Py_CLEAR(tmp);
   6829         } else {
   6830             PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from List");
   6831             return 1;
   6832         }
   6833         *out = List(elts, ctx, lineno, col_offset, arena);
   6834         if (*out == NULL) goto failed;
   6835         return 0;
   6836     }
   6837     isinstance = PyObject_IsInstance(obj, (PyObject*)Tuple_type);
   6838     if (isinstance == -1) {
   6839         return 1;
   6840     }
   6841     if (isinstance) {
   6842         asdl_seq* elts;
   6843         expr_context_ty ctx;
   6844 
   6845         if (_PyObject_HasAttrId(obj, &PyId_elts)) {
   6846             int res;
   6847             Py_ssize_t len;
   6848             Py_ssize_t i;
   6849             tmp = _PyObject_GetAttrId(obj, &PyId_elts);
   6850             if (tmp == NULL) goto failed;
   6851             if (!PyList_Check(tmp)) {
   6852                 PyErr_Format(PyExc_TypeError, "Tuple field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   6853                 goto failed;
   6854             }
   6855             len = PyList_GET_SIZE(tmp);
   6856             elts = _Py_asdl_seq_new(len, arena);
   6857             if (elts == NULL) goto failed;
   6858             for (i = 0; i < len; i++) {
   6859                 expr_ty value;
   6860                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   6861                 if (res != 0) goto failed;
   6862                 if (len != PyList_GET_SIZE(tmp)) {
   6863                     PyErr_SetString(PyExc_RuntimeError, "Tuple field \"elts\" changed size during iteration");
   6864                     goto failed;
   6865                 }
   6866                 asdl_seq_SET(elts, i, value);
   6867             }
   6868             Py_CLEAR(tmp);
   6869         } else {
   6870             PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Tuple");
   6871             return 1;
   6872         }
   6873         if (_PyObject_HasAttrId(obj, &PyId_ctx)) {
   6874             int res;
   6875             tmp = _PyObject_GetAttrId(obj, &PyId_ctx);
   6876             if (tmp == NULL) goto failed;
   6877             res = obj2ast_expr_context(tmp, &ctx, arena);
   6878             if (res != 0) goto failed;
   6879             Py_CLEAR(tmp);
   6880         } else {
   6881             PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Tuple");
   6882             return 1;
   6883         }
   6884         *out = Tuple(elts, ctx, lineno, col_offset, arena);
   6885         if (*out == NULL) goto failed;
   6886         return 0;
   6887     }
   6888 
   6889     PyErr_Format(PyExc_TypeError, "expected some sort of expr, but got %R", obj);
   6890     failed:
   6891     Py_XDECREF(tmp);
   6892     return 1;
   6893 }
   6894 
   6895 int
   6896 obj2ast_expr_context(PyObject* obj, expr_context_ty* out, PyArena* arena)
   6897 {
   6898     int isinstance;
   6899 
   6900     isinstance = PyObject_IsInstance(obj, (PyObject *)Load_type);
   6901     if (isinstance == -1) {
   6902         return 1;
   6903     }
   6904     if (isinstance) {
   6905         *out = Load;
   6906         return 0;
   6907     }
   6908     isinstance = PyObject_IsInstance(obj, (PyObject *)Store_type);
   6909     if (isinstance == -1) {
   6910         return 1;
   6911     }
   6912     if (isinstance) {
   6913         *out = Store;
   6914         return 0;
   6915     }
   6916     isinstance = PyObject_IsInstance(obj, (PyObject *)Del_type);
   6917     if (isinstance == -1) {
   6918         return 1;
   6919     }
   6920     if (isinstance) {
   6921         *out = Del;
   6922         return 0;
   6923     }
   6924     isinstance = PyObject_IsInstance(obj, (PyObject *)AugLoad_type);
   6925     if (isinstance == -1) {
   6926         return 1;
   6927     }
   6928     if (isinstance) {
   6929         *out = AugLoad;
   6930         return 0;
   6931     }
   6932     isinstance = PyObject_IsInstance(obj, (PyObject *)AugStore_type);
   6933     if (isinstance == -1) {
   6934         return 1;
   6935     }
   6936     if (isinstance) {
   6937         *out = AugStore;
   6938         return 0;
   6939     }
   6940     isinstance = PyObject_IsInstance(obj, (PyObject *)Param_type);
   6941     if (isinstance == -1) {
   6942         return 1;
   6943     }
   6944     if (isinstance) {
   6945         *out = Param;
   6946         return 0;
   6947     }
   6948 
   6949     PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %R", obj);
   6950     return 1;
   6951 }
   6952 
   6953 int
   6954 obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena)
   6955 {
   6956     int isinstance;
   6957 
   6958     PyObject *tmp = NULL;
   6959 
   6960     if (obj == Py_None) {
   6961         *out = NULL;
   6962         return 0;
   6963     }
   6964     isinstance = PyObject_IsInstance(obj, (PyObject*)Slice_type);
   6965     if (isinstance == -1) {
   6966         return 1;
   6967     }
   6968     if (isinstance) {
   6969         expr_ty lower;
   6970         expr_ty upper;
   6971         expr_ty step;
   6972 
   6973         if (exists_not_none(obj, &PyId_lower)) {
   6974             int res;
   6975             tmp = _PyObject_GetAttrId(obj, &PyId_lower);
   6976             if (tmp == NULL) goto failed;
   6977             res = obj2ast_expr(tmp, &lower, arena);
   6978             if (res != 0) goto failed;
   6979             Py_CLEAR(tmp);
   6980         } else {
   6981             lower = NULL;
   6982         }
   6983         if (exists_not_none(obj, &PyId_upper)) {
   6984             int res;
   6985             tmp = _PyObject_GetAttrId(obj, &PyId_upper);
   6986             if (tmp == NULL) goto failed;
   6987             res = obj2ast_expr(tmp, &upper, arena);
   6988             if (res != 0) goto failed;
   6989             Py_CLEAR(tmp);
   6990         } else {
   6991             upper = NULL;
   6992         }
   6993         if (exists_not_none(obj, &PyId_step)) {
   6994             int res;
   6995             tmp = _PyObject_GetAttrId(obj, &PyId_step);
   6996             if (tmp == NULL) goto failed;
   6997             res = obj2ast_expr(tmp, &step, arena);
   6998             if (res != 0) goto failed;
   6999             Py_CLEAR(tmp);
   7000         } else {
   7001             step = NULL;
   7002         }
   7003         *out = Slice(lower, upper, step, arena);
   7004         if (*out == NULL) goto failed;
   7005         return 0;
   7006     }
   7007     isinstance = PyObject_IsInstance(obj, (PyObject*)ExtSlice_type);
   7008     if (isinstance == -1) {
   7009         return 1;
   7010     }
   7011     if (isinstance) {
   7012         asdl_seq* dims;
   7013 
   7014         if (_PyObject_HasAttrId(obj, &PyId_dims)) {
   7015             int res;
   7016             Py_ssize_t len;
   7017             Py_ssize_t i;
   7018             tmp = _PyObject_GetAttrId(obj, &PyId_dims);
   7019             if (tmp == NULL) goto failed;
   7020             if (!PyList_Check(tmp)) {
   7021                 PyErr_Format(PyExc_TypeError, "ExtSlice field \"dims\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   7022                 goto failed;
   7023             }
   7024             len = PyList_GET_SIZE(tmp);
   7025             dims = _Py_asdl_seq_new(len, arena);
   7026             if (dims == NULL) goto failed;
   7027             for (i = 0; i < len; i++) {
   7028                 slice_ty value;
   7029                 res = obj2ast_slice(PyList_GET_ITEM(tmp, i), &value, arena);
   7030                 if (res != 0) goto failed;
   7031                 if (len != PyList_GET_SIZE(tmp)) {
   7032                     PyErr_SetString(PyExc_RuntimeError, "ExtSlice field \"dims\" changed size during iteration");
   7033                     goto failed;
   7034                 }
   7035                 asdl_seq_SET(dims, i, value);
   7036             }
   7037             Py_CLEAR(tmp);
   7038         } else {
   7039             PyErr_SetString(PyExc_TypeError, "required field \"dims\" missing from ExtSlice");
   7040             return 1;
   7041         }
   7042         *out = ExtSlice(dims, arena);
   7043         if (*out == NULL) goto failed;
   7044         return 0;
   7045     }
   7046     isinstance = PyObject_IsInstance(obj, (PyObject*)Index_type);
   7047     if (isinstance == -1) {
   7048         return 1;
   7049     }
   7050     if (isinstance) {
   7051         expr_ty value;
   7052 
   7053         if (_PyObject_HasAttrId(obj, &PyId_value)) {
   7054             int res;
   7055             tmp = _PyObject_GetAttrId(obj, &PyId_value);
   7056             if (tmp == NULL) goto failed;
   7057             res = obj2ast_expr(tmp, &value, arena);
   7058             if (res != 0) goto failed;
   7059             Py_CLEAR(tmp);
   7060         } else {
   7061             PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Index");
   7062             return 1;
   7063         }
   7064         *out = Index(value, arena);
   7065         if (*out == NULL) goto failed;
   7066         return 0;
   7067     }
   7068 
   7069     PyErr_Format(PyExc_TypeError, "expected some sort of slice, but got %R", obj);
   7070     failed:
   7071     Py_XDECREF(tmp);
   7072     return 1;
   7073 }
   7074 
   7075 int
   7076 obj2ast_boolop(PyObject* obj, boolop_ty* out, PyArena* arena)
   7077 {
   7078     int isinstance;
   7079 
   7080     isinstance = PyObject_IsInstance(obj, (PyObject *)And_type);
   7081     if (isinstance == -1) {
   7082         return 1;
   7083     }
   7084     if (isinstance) {
   7085         *out = And;
   7086         return 0;
   7087     }
   7088     isinstance = PyObject_IsInstance(obj, (PyObject *)Or_type);
   7089     if (isinstance == -1) {
   7090         return 1;
   7091     }
   7092     if (isinstance) {
   7093         *out = Or;
   7094         return 0;
   7095     }
   7096 
   7097     PyErr_Format(PyExc_TypeError, "expected some sort of boolop, but got %R", obj);
   7098     return 1;
   7099 }
   7100 
   7101 int
   7102 obj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena)
   7103 {
   7104     int isinstance;
   7105 
   7106     isinstance = PyObject_IsInstance(obj, (PyObject *)Add_type);
   7107     if (isinstance == -1) {
   7108         return 1;
   7109     }
   7110     if (isinstance) {
   7111         *out = Add;
   7112         return 0;
   7113     }
   7114     isinstance = PyObject_IsInstance(obj, (PyObject *)Sub_type);
   7115     if (isinstance == -1) {
   7116         return 1;
   7117     }
   7118     if (isinstance) {
   7119         *out = Sub;
   7120         return 0;
   7121     }
   7122     isinstance = PyObject_IsInstance(obj, (PyObject *)Mult_type);
   7123     if (isinstance == -1) {
   7124         return 1;
   7125     }
   7126     if (isinstance) {
   7127         *out = Mult;
   7128         return 0;
   7129     }
   7130     isinstance = PyObject_IsInstance(obj, (PyObject *)MatMult_type);
   7131     if (isinstance == -1) {
   7132         return 1;
   7133     }
   7134     if (isinstance) {
   7135         *out = MatMult;
   7136         return 0;
   7137     }
   7138     isinstance = PyObject_IsInstance(obj, (PyObject *)Div_type);
   7139     if (isinstance == -1) {
   7140         return 1;
   7141     }
   7142     if (isinstance) {
   7143         *out = Div;
   7144         return 0;
   7145     }
   7146     isinstance = PyObject_IsInstance(obj, (PyObject *)Mod_type);
   7147     if (isinstance == -1) {
   7148         return 1;
   7149     }
   7150     if (isinstance) {
   7151         *out = Mod;
   7152         return 0;
   7153     }
   7154     isinstance = PyObject_IsInstance(obj, (PyObject *)Pow_type);
   7155     if (isinstance == -1) {
   7156         return 1;
   7157     }
   7158     if (isinstance) {
   7159         *out = Pow;
   7160         return 0;
   7161     }
   7162     isinstance = PyObject_IsInstance(obj, (PyObject *)LShift_type);
   7163     if (isinstance == -1) {
   7164         return 1;
   7165     }
   7166     if (isinstance) {
   7167         *out = LShift;
   7168         return 0;
   7169     }
   7170     isinstance = PyObject_IsInstance(obj, (PyObject *)RShift_type);
   7171     if (isinstance == -1) {
   7172         return 1;
   7173     }
   7174     if (isinstance) {
   7175         *out = RShift;
   7176         return 0;
   7177     }
   7178     isinstance = PyObject_IsInstance(obj, (PyObject *)BitOr_type);
   7179     if (isinstance == -1) {
   7180         return 1;
   7181     }
   7182     if (isinstance) {
   7183         *out = BitOr;
   7184         return 0;
   7185     }
   7186     isinstance = PyObject_IsInstance(obj, (PyObject *)BitXor_type);
   7187     if (isinstance == -1) {
   7188         return 1;
   7189     }
   7190     if (isinstance) {
   7191         *out = BitXor;
   7192         return 0;
   7193     }
   7194     isinstance = PyObject_IsInstance(obj, (PyObject *)BitAnd_type);
   7195     if (isinstance == -1) {
   7196         return 1;
   7197     }
   7198     if (isinstance) {
   7199         *out = BitAnd;
   7200         return 0;
   7201     }
   7202     isinstance = PyObject_IsInstance(obj, (PyObject *)FloorDiv_type);
   7203     if (isinstance == -1) {
   7204         return 1;
   7205     }
   7206     if (isinstance) {
   7207         *out = FloorDiv;
   7208         return 0;
   7209     }
   7210 
   7211     PyErr_Format(PyExc_TypeError, "expected some sort of operator, but got %R", obj);
   7212     return 1;
   7213 }
   7214 
   7215 int
   7216 obj2ast_unaryop(PyObject* obj, unaryop_ty* out, PyArena* arena)
   7217 {
   7218     int isinstance;
   7219 
   7220     isinstance = PyObject_IsInstance(obj, (PyObject *)Invert_type);
   7221     if (isinstance == -1) {
   7222         return 1;
   7223     }
   7224     if (isinstance) {
   7225         *out = Invert;
   7226         return 0;
   7227     }
   7228     isinstance = PyObject_IsInstance(obj, (PyObject *)Not_type);
   7229     if (isinstance == -1) {
   7230         return 1;
   7231     }
   7232     if (isinstance) {
   7233         *out = Not;
   7234         return 0;
   7235     }
   7236     isinstance = PyObject_IsInstance(obj, (PyObject *)UAdd_type);
   7237     if (isinstance == -1) {
   7238         return 1;
   7239     }
   7240     if (isinstance) {
   7241         *out = UAdd;
   7242         return 0;
   7243     }
   7244     isinstance = PyObject_IsInstance(obj, (PyObject *)USub_type);
   7245     if (isinstance == -1) {
   7246         return 1;
   7247     }
   7248     if (isinstance) {
   7249         *out = USub;
   7250         return 0;
   7251     }
   7252 
   7253     PyErr_Format(PyExc_TypeError, "expected some sort of unaryop, but got %R", obj);
   7254     return 1;
   7255 }
   7256 
   7257 int
   7258 obj2ast_cmpop(PyObject* obj, cmpop_ty* out, PyArena* arena)
   7259 {
   7260     int isinstance;
   7261 
   7262     isinstance = PyObject_IsInstance(obj, (PyObject *)Eq_type);
   7263     if (isinstance == -1) {
   7264         return 1;
   7265     }
   7266     if (isinstance) {
   7267         *out = Eq;
   7268         return 0;
   7269     }
   7270     isinstance = PyObject_IsInstance(obj, (PyObject *)NotEq_type);
   7271     if (isinstance == -1) {
   7272         return 1;
   7273     }
   7274     if (isinstance) {
   7275         *out = NotEq;
   7276         return 0;
   7277     }
   7278     isinstance = PyObject_IsInstance(obj, (PyObject *)Lt_type);
   7279     if (isinstance == -1) {
   7280         return 1;
   7281     }
   7282     if (isinstance) {
   7283         *out = Lt;
   7284         return 0;
   7285     }
   7286     isinstance = PyObject_IsInstance(obj, (PyObject *)LtE_type);
   7287     if (isinstance == -1) {
   7288         return 1;
   7289     }
   7290     if (isinstance) {
   7291         *out = LtE;
   7292         return 0;
   7293     }
   7294     isinstance = PyObject_IsInstance(obj, (PyObject *)Gt_type);
   7295     if (isinstance == -1) {
   7296         return 1;
   7297     }
   7298     if (isinstance) {
   7299         *out = Gt;
   7300         return 0;
   7301     }
   7302     isinstance = PyObject_IsInstance(obj, (PyObject *)GtE_type);
   7303     if (isinstance == -1) {
   7304         return 1;
   7305     }
   7306     if (isinstance) {
   7307         *out = GtE;
   7308         return 0;
   7309     }
   7310     isinstance = PyObject_IsInstance(obj, (PyObject *)Is_type);
   7311     if (isinstance == -1) {
   7312         return 1;
   7313     }
   7314     if (isinstance) {
   7315         *out = Is;
   7316         return 0;
   7317     }
   7318     isinstance = PyObject_IsInstance(obj, (PyObject *)IsNot_type);
   7319     if (isinstance == -1) {
   7320         return 1;
   7321     }
   7322     if (isinstance) {
   7323         *out = IsNot;
   7324         return 0;
   7325     }
   7326     isinstance = PyObject_IsInstance(obj, (PyObject *)In_type);
   7327     if (isinstance == -1) {
   7328         return 1;
   7329     }
   7330     if (isinstance) {
   7331         *out = In;
   7332         return 0;
   7333     }
   7334     isinstance = PyObject_IsInstance(obj, (PyObject *)NotIn_type);
   7335     if (isinstance == -1) {
   7336         return 1;
   7337     }
   7338     if (isinstance) {
   7339         *out = NotIn;
   7340         return 0;
   7341     }
   7342 
   7343     PyErr_Format(PyExc_TypeError, "expected some sort of cmpop, but got %R", obj);
   7344     return 1;
   7345 }
   7346 
   7347 int
   7348 obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena* arena)
   7349 {
   7350     PyObject* tmp = NULL;
   7351     expr_ty target;
   7352     expr_ty iter;
   7353     asdl_seq* ifs;
   7354     int is_async;
   7355 
   7356     if (_PyObject_HasAttrId(obj, &PyId_target)) {
   7357         int res;
   7358         tmp = _PyObject_GetAttrId(obj, &PyId_target);
   7359         if (tmp == NULL) goto failed;
   7360         res = obj2ast_expr(tmp, &target, arena);
   7361         if (res != 0) goto failed;
   7362         Py_CLEAR(tmp);
   7363     } else {
   7364         PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from comprehension");
   7365         return 1;
   7366     }
   7367     if (_PyObject_HasAttrId(obj, &PyId_iter)) {
   7368         int res;
   7369         tmp = _PyObject_GetAttrId(obj, &PyId_iter);
   7370         if (tmp == NULL) goto failed;
   7371         res = obj2ast_expr(tmp, &iter, arena);
   7372         if (res != 0) goto failed;
   7373         Py_CLEAR(tmp);
   7374     } else {
   7375         PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from comprehension");
   7376         return 1;
   7377     }
   7378     if (_PyObject_HasAttrId(obj, &PyId_ifs)) {
   7379         int res;
   7380         Py_ssize_t len;
   7381         Py_ssize_t i;
   7382         tmp = _PyObject_GetAttrId(obj, &PyId_ifs);
   7383         if (tmp == NULL) goto failed;
   7384         if (!PyList_Check(tmp)) {
   7385             PyErr_Format(PyExc_TypeError, "comprehension field \"ifs\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   7386             goto failed;
   7387         }
   7388         len = PyList_GET_SIZE(tmp);
   7389         ifs = _Py_asdl_seq_new(len, arena);
   7390         if (ifs == NULL) goto failed;
   7391         for (i = 0; i < len; i++) {
   7392             expr_ty value;
   7393             res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   7394             if (res != 0) goto failed;
   7395             if (len != PyList_GET_SIZE(tmp)) {
   7396                 PyErr_SetString(PyExc_RuntimeError, "comprehension field \"ifs\" changed size during iteration");
   7397                 goto failed;
   7398             }
   7399             asdl_seq_SET(ifs, i, value);
   7400         }
   7401         Py_CLEAR(tmp);
   7402     } else {
   7403         PyErr_SetString(PyExc_TypeError, "required field \"ifs\" missing from comprehension");
   7404         return 1;
   7405     }
   7406     if (_PyObject_HasAttrId(obj, &PyId_is_async)) {
   7407         int res;
   7408         tmp = _PyObject_GetAttrId(obj, &PyId_is_async);
   7409         if (tmp == NULL) goto failed;
   7410         res = obj2ast_int(tmp, &is_async, arena);
   7411         if (res != 0) goto failed;
   7412         Py_CLEAR(tmp);
   7413     } else {
   7414         PyErr_SetString(PyExc_TypeError, "required field \"is_async\" missing from comprehension");
   7415         return 1;
   7416     }
   7417     *out = comprehension(target, iter, ifs, is_async, arena);
   7418     return 0;
   7419 failed:
   7420     Py_XDECREF(tmp);
   7421     return 1;
   7422 }
   7423 
   7424 int
   7425 obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena* arena)
   7426 {
   7427     int isinstance;
   7428 
   7429     PyObject *tmp = NULL;
   7430     int lineno;
   7431     int col_offset;
   7432 
   7433     if (obj == Py_None) {
   7434         *out = NULL;
   7435         return 0;
   7436     }
   7437     if (_PyObject_HasAttrId(obj, &PyId_lineno)) {
   7438         int res;
   7439         tmp = _PyObject_GetAttrId(obj, &PyId_lineno);
   7440         if (tmp == NULL) goto failed;
   7441         res = obj2ast_int(tmp, &lineno, arena);
   7442         if (res != 0) goto failed;
   7443         Py_CLEAR(tmp);
   7444     } else {
   7445         PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from excepthandler");
   7446         return 1;
   7447     }
   7448     if (_PyObject_HasAttrId(obj, &PyId_col_offset)) {
   7449         int res;
   7450         tmp = _PyObject_GetAttrId(obj, &PyId_col_offset);
   7451         if (tmp == NULL) goto failed;
   7452         res = obj2ast_int(tmp, &col_offset, arena);
   7453         if (res != 0) goto failed;
   7454         Py_CLEAR(tmp);
   7455     } else {
   7456         PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from excepthandler");
   7457         return 1;
   7458     }
   7459     isinstance = PyObject_IsInstance(obj, (PyObject*)ExceptHandler_type);
   7460     if (isinstance == -1) {
   7461         return 1;
   7462     }
   7463     if (isinstance) {
   7464         expr_ty type;
   7465         identifier name;
   7466         asdl_seq* body;
   7467 
   7468         if (exists_not_none(obj, &PyId_type)) {
   7469             int res;
   7470             tmp = _PyObject_GetAttrId(obj, &PyId_type);
   7471             if (tmp == NULL) goto failed;
   7472             res = obj2ast_expr(tmp, &type, arena);
   7473             if (res != 0) goto failed;
   7474             Py_CLEAR(tmp);
   7475         } else {
   7476             type = NULL;
   7477         }
   7478         if (exists_not_none(obj, &PyId_name)) {
   7479             int res;
   7480             tmp = _PyObject_GetAttrId(obj, &PyId_name);
   7481             if (tmp == NULL) goto failed;
   7482             res = obj2ast_identifier(tmp, &name, arena);
   7483             if (res != 0) goto failed;
   7484             Py_CLEAR(tmp);
   7485         } else {
   7486             name = NULL;
   7487         }
   7488         if (_PyObject_HasAttrId(obj, &PyId_body)) {
   7489             int res;
   7490             Py_ssize_t len;
   7491             Py_ssize_t i;
   7492             tmp = _PyObject_GetAttrId(obj, &PyId_body);
   7493             if (tmp == NULL) goto failed;
   7494             if (!PyList_Check(tmp)) {
   7495                 PyErr_Format(PyExc_TypeError, "ExceptHandler field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   7496                 goto failed;
   7497             }
   7498             len = PyList_GET_SIZE(tmp);
   7499             body = _Py_asdl_seq_new(len, arena);
   7500             if (body == NULL) goto failed;
   7501             for (i = 0; i < len; i++) {
   7502                 stmt_ty value;
   7503                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
   7504                 if (res != 0) goto failed;
   7505                 if (len != PyList_GET_SIZE(tmp)) {
   7506                     PyErr_SetString(PyExc_RuntimeError, "ExceptHandler field \"body\" changed size during iteration");
   7507                     goto failed;
   7508                 }
   7509                 asdl_seq_SET(body, i, value);
   7510             }
   7511             Py_CLEAR(tmp);
   7512         } else {
   7513             PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ExceptHandler");
   7514             return 1;
   7515         }
   7516         *out = ExceptHandler(type, name, body, lineno, col_offset, arena);
   7517         if (*out == NULL) goto failed;
   7518         return 0;
   7519     }
   7520 
   7521     PyErr_Format(PyExc_TypeError, "expected some sort of excepthandler, but got %R", obj);
   7522     failed:
   7523     Py_XDECREF(tmp);
   7524     return 1;
   7525 }
   7526 
   7527 int
   7528 obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena)
   7529 {
   7530     PyObject* tmp = NULL;
   7531     asdl_seq* args;
   7532     arg_ty vararg;
   7533     asdl_seq* kwonlyargs;
   7534     asdl_seq* kw_defaults;
   7535     arg_ty kwarg;
   7536     asdl_seq* defaults;
   7537 
   7538     if (_PyObject_HasAttrId(obj, &PyId_args)) {
   7539         int res;
   7540         Py_ssize_t len;
   7541         Py_ssize_t i;
   7542         tmp = _PyObject_GetAttrId(obj, &PyId_args);
   7543         if (tmp == NULL) goto failed;
   7544         if (!PyList_Check(tmp)) {
   7545             PyErr_Format(PyExc_TypeError, "arguments field \"args\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   7546             goto failed;
   7547         }
   7548         len = PyList_GET_SIZE(tmp);
   7549         args = _Py_asdl_seq_new(len, arena);
   7550         if (args == NULL) goto failed;
   7551         for (i = 0; i < len; i++) {
   7552             arg_ty value;
   7553             res = obj2ast_arg(PyList_GET_ITEM(tmp, i), &value, arena);
   7554             if (res != 0) goto failed;
   7555             if (len != PyList_GET_SIZE(tmp)) {
   7556                 PyErr_SetString(PyExc_RuntimeError, "arguments field \"args\" changed size during iteration");
   7557                 goto failed;
   7558             }
   7559             asdl_seq_SET(args, i, value);
   7560         }
   7561         Py_CLEAR(tmp);
   7562     } else {
   7563         PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from arguments");
   7564         return 1;
   7565     }
   7566     if (exists_not_none(obj, &PyId_vararg)) {
   7567         int res;
   7568         tmp = _PyObject_GetAttrId(obj, &PyId_vararg);
   7569         if (tmp == NULL) goto failed;
   7570         res = obj2ast_arg(tmp, &vararg, arena);
   7571         if (res != 0) goto failed;
   7572         Py_CLEAR(tmp);
   7573     } else {
   7574         vararg = NULL;
   7575     }
   7576     if (_PyObject_HasAttrId(obj, &PyId_kwonlyargs)) {
   7577         int res;
   7578         Py_ssize_t len;
   7579         Py_ssize_t i;
   7580         tmp = _PyObject_GetAttrId(obj, &PyId_kwonlyargs);
   7581         if (tmp == NULL) goto failed;
   7582         if (!PyList_Check(tmp)) {
   7583             PyErr_Format(PyExc_TypeError, "arguments field \"kwonlyargs\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   7584             goto failed;
   7585         }
   7586         len = PyList_GET_SIZE(tmp);
   7587         kwonlyargs = _Py_asdl_seq_new(len, arena);
   7588         if (kwonlyargs == NULL) goto failed;
   7589         for (i = 0; i < len; i++) {
   7590             arg_ty value;
   7591             res = obj2ast_arg(PyList_GET_ITEM(tmp, i), &value, arena);
   7592             if (res != 0) goto failed;
   7593             if (len != PyList_GET_SIZE(tmp)) {
   7594                 PyErr_SetString(PyExc_RuntimeError, "arguments field \"kwonlyargs\" changed size during iteration");
   7595                 goto failed;
   7596             }
   7597             asdl_seq_SET(kwonlyargs, i, value);
   7598         }
   7599         Py_CLEAR(tmp);
   7600     } else {
   7601         PyErr_SetString(PyExc_TypeError, "required field \"kwonlyargs\" missing from arguments");
   7602         return 1;
   7603     }
   7604     if (_PyObject_HasAttrId(obj, &PyId_kw_defaults)) {
   7605         int res;
   7606         Py_ssize_t len;
   7607         Py_ssize_t i;
   7608         tmp = _PyObject_GetAttrId(obj, &PyId_kw_defaults);
   7609         if (tmp == NULL) goto failed;
   7610         if (!PyList_Check(tmp)) {
   7611             PyErr_Format(PyExc_TypeError, "arguments field \"kw_defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   7612             goto failed;
   7613         }
   7614         len = PyList_GET_SIZE(tmp);
   7615         kw_defaults = _Py_asdl_seq_new(len, arena);
   7616         if (kw_defaults == NULL) goto failed;
   7617         for (i = 0; i < len; i++) {
   7618             expr_ty value;
   7619             res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   7620             if (res != 0) goto failed;
   7621             if (len != PyList_GET_SIZE(tmp)) {
   7622                 PyErr_SetString(PyExc_RuntimeError, "arguments field \"kw_defaults\" changed size during iteration");
   7623                 goto failed;
   7624             }
   7625             asdl_seq_SET(kw_defaults, i, value);
   7626         }
   7627         Py_CLEAR(tmp);
   7628     } else {
   7629         PyErr_SetString(PyExc_TypeError, "required field \"kw_defaults\" missing from arguments");
   7630         return 1;
   7631     }
   7632     if (exists_not_none(obj, &PyId_kwarg)) {
   7633         int res;
   7634         tmp = _PyObject_GetAttrId(obj, &PyId_kwarg);
   7635         if (tmp == NULL) goto failed;
   7636         res = obj2ast_arg(tmp, &kwarg, arena);
   7637         if (res != 0) goto failed;
   7638         Py_CLEAR(tmp);
   7639     } else {
   7640         kwarg = NULL;
   7641     }
   7642     if (_PyObject_HasAttrId(obj, &PyId_defaults)) {
   7643         int res;
   7644         Py_ssize_t len;
   7645         Py_ssize_t i;
   7646         tmp = _PyObject_GetAttrId(obj, &PyId_defaults);
   7647         if (tmp == NULL) goto failed;
   7648         if (!PyList_Check(tmp)) {
   7649             PyErr_Format(PyExc_TypeError, "arguments field \"defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name);
   7650             goto failed;
   7651         }
   7652         len = PyList_GET_SIZE(tmp);
   7653         defaults = _Py_asdl_seq_new(len, arena);
   7654         if (defaults == NULL) goto failed;
   7655         for (i = 0; i < len; i++) {
   7656             expr_ty value;
   7657             res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
   7658             if (res != 0) goto failed;
   7659             if (len != PyList_GET_SIZE(tmp)) {
   7660                 PyErr_SetString(PyExc_RuntimeError, "arguments field \"defaults\" changed size during iteration");
   7661                 goto failed;
   7662             }
   7663             asdl_seq_SET(defaults, i, value);
   7664         }
   7665         Py_CLEAR(tmp);
   7666     } else {
   7667         PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments");
   7668         return 1;
   7669     }
   7670     *out = arguments(args, vararg, kwonlyargs, kw_defaults, kwarg, defaults,
   7671                      arena);
   7672     return 0;
   7673 failed:
   7674     Py_XDECREF(tmp);
   7675     return 1;
   7676 }
   7677 
   7678 int
   7679 obj2ast_arg(PyObject* obj, arg_ty* out, PyArena* arena)
   7680 {
   7681     PyObject* tmp = NULL;
   7682     identifier arg;
   7683     expr_ty annotation;
   7684     int lineno;
   7685     int col_offset;
   7686 
   7687     if (_PyObject_HasAttrId(obj, &PyId_arg)) {
   7688         int res;
   7689         tmp = _PyObject_GetAttrId(obj, &PyId_arg);
   7690         if (tmp == NULL) goto failed;
   7691         res = obj2ast_identifier(tmp, &arg, arena);
   7692         if (res != 0) goto failed;
   7693         Py_CLEAR(tmp);
   7694     } else {
   7695         PyErr_SetString(PyExc_TypeError, "required field \"arg\" missing from arg");
   7696         return 1;
   7697     }
   7698     if (exists_not_none(obj, &PyId_annotation)) {
   7699         int res;
   7700         tmp = _PyObject_GetAttrId(obj, &PyId_annotation);
   7701         if (tmp == NULL) goto failed;
   7702         res = obj2ast_expr(tmp, &annotation, arena);
   7703         if (res != 0) goto failed;
   7704         Py_CLEAR(tmp);
   7705     } else {
   7706         annotation = NULL;
   7707     }
   7708     if (_PyObject_HasAttrId(obj, &PyId_lineno)) {
   7709         int res;
   7710         tmp = _PyObject_GetAttrId(obj, &PyId_lineno);
   7711         if (tmp == NULL) goto failed;
   7712         res = obj2ast_int(tmp, &lineno, arena);
   7713         if (res != 0) goto failed;
   7714         Py_CLEAR(tmp);
   7715     } else {
   7716         PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from arg");
   7717         return 1;
   7718     }
   7719     if (_PyObject_HasAttrId(obj, &PyId_col_offset)) {
   7720         int res;
   7721         tmp = _PyObject_GetAttrId(obj, &PyId_col_offset);
   7722         if (tmp == NULL) goto failed;
   7723         res = obj2ast_int(tmp, &col_offset, arena);
   7724         if (res != 0) goto failed;
   7725         Py_CLEAR(tmp);
   7726     } else {
   7727         PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from arg");
   7728         return 1;
   7729     }
   7730     *out = arg(arg, annotation, lineno, col_offset, arena);
   7731     return 0;
   7732 failed:
   7733     Py_XDECREF(tmp);
   7734     return 1;
   7735 }
   7736 
   7737 int
   7738 obj2ast_keyword(PyObject* obj, keyword_ty* out, PyArena* arena)
   7739 {
   7740     PyObject* tmp = NULL;
   7741     identifier arg;
   7742     expr_ty value;
   7743 
   7744     if (exists_not_none(obj, &PyId_arg)) {
   7745         int res;
   7746         tmp = _PyObject_GetAttrId(obj, &PyId_arg);
   7747         if (tmp == NULL) goto failed;
   7748         res = obj2ast_identifier(tmp, &arg, arena);
   7749         if (res != 0) goto failed;
   7750         Py_CLEAR(tmp);
   7751     } else {
   7752         arg = NULL;
   7753     }
   7754     if (_PyObject_HasAttrId(obj, &PyId_value)) {
   7755         int res;
   7756         tmp = _PyObject_GetAttrId(obj, &PyId_value);
   7757         if (tmp == NULL) goto failed;
   7758         res = obj2ast_expr(tmp, &value, arena);
   7759         if (res != 0) goto failed;
   7760         Py_CLEAR(tmp);
   7761     } else {
   7762         PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from keyword");
   7763         return 1;
   7764     }
   7765     *out = keyword(arg, value, arena);
   7766     return 0;
   7767 failed:
   7768     Py_XDECREF(tmp);
   7769     return 1;
   7770 }
   7771 
   7772 int
   7773 obj2ast_alias(PyObject* obj, alias_ty* out, PyArena* arena)
   7774 {
   7775     PyObject* tmp = NULL;
   7776     identifier name;
   7777     identifier asname;
   7778 
   7779     if (_PyObject_HasAttrId(obj, &PyId_name)) {
   7780         int res;
   7781         tmp = _PyObject_GetAttrId(obj, &PyId_name);
   7782         if (tmp == NULL) goto failed;
   7783         res = obj2ast_identifier(tmp, &name, arena);
   7784         if (res != 0) goto failed;
   7785         Py_CLEAR(tmp);
   7786     } else {
   7787         PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from alias");
   7788         return 1;
   7789     }
   7790     if (exists_not_none(obj, &PyId_asname)) {
   7791         int res;
   7792         tmp = _PyObject_GetAttrId(obj, &PyId_asname);
   7793         if (tmp == NULL) goto failed;
   7794         res = obj2ast_identifier(tmp, &asname, arena);
   7795         if (res != 0) goto failed;
   7796         Py_CLEAR(tmp);
   7797     } else {
   7798         asname = NULL;
   7799     }
   7800     *out = alias(name, asname, arena);
   7801     return 0;
   7802 failed:
   7803     Py_XDECREF(tmp);
   7804     return 1;
   7805 }
   7806 
   7807 int
   7808 obj2ast_withitem(PyObject* obj, withitem_ty* out, PyArena* arena)
   7809 {
   7810     PyObject* tmp = NULL;
   7811     expr_ty context_expr;
   7812     expr_ty optional_vars;
   7813 
   7814     if (_PyObject_HasAttrId(obj, &PyId_context_expr)) {
   7815         int res;
   7816         tmp = _PyObject_GetAttrId(obj, &PyId_context_expr);
   7817         if (tmp == NULL) goto failed;
   7818         res = obj2ast_expr(tmp, &context_expr, arena);
   7819         if (res != 0) goto failed;
   7820         Py_CLEAR(tmp);
   7821     } else {
   7822         PyErr_SetString(PyExc_TypeError, "required field \"context_expr\" missing from withitem");
   7823         return 1;
   7824     }
   7825     if (exists_not_none(obj, &PyId_optional_vars)) {
   7826         int res;
   7827         tmp = _PyObject_GetAttrId(obj, &PyId_optional_vars);
   7828         if (tmp == NULL) goto failed;
   7829         res = obj2ast_expr(tmp, &optional_vars, arena);
   7830         if (res != 0) goto failed;
   7831         Py_CLEAR(tmp);
   7832     } else {
   7833         optional_vars = NULL;
   7834     }
   7835     *out = withitem(context_expr, optional_vars, arena);
   7836     return 0;
   7837 failed:
   7838     Py_XDECREF(tmp);
   7839     return 1;
   7840 }
   7841 
   7842 
   7843 static struct PyModuleDef _astmodule = {
   7844   PyModuleDef_HEAD_INIT, "_ast"
   7845 };
   7846 PyMODINIT_FUNC
   7847 PyInit__ast(void)
   7848 {
   7849     PyObject *m, *d;
   7850     if (!init_types()) return NULL;
   7851     m = PyModule_Create(&_astmodule);
   7852     if (!m) return NULL;
   7853     d = PyModule_GetDict(m);
   7854     if (PyDict_SetItemString(d, "AST", (PyObject*)&AST_type) < 0) return NULL;
   7855     if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0)
   7856         return NULL;
   7857     if (PyDict_SetItemString(d, "mod", (PyObject*)mod_type) < 0) return NULL;
   7858     if (PyDict_SetItemString(d, "Module", (PyObject*)Module_type) < 0) return
   7859         NULL;
   7860     if (PyDict_SetItemString(d, "Interactive", (PyObject*)Interactive_type) <
   7861         0) return NULL;
   7862     if (PyDict_SetItemString(d, "Expression", (PyObject*)Expression_type) < 0)
   7863         return NULL;
   7864     if (PyDict_SetItemString(d, "Suite", (PyObject*)Suite_type) < 0) return
   7865         NULL;
   7866     if (PyDict_SetItemString(d, "stmt", (PyObject*)stmt_type) < 0) return NULL;
   7867     if (PyDict_SetItemString(d, "FunctionDef", (PyObject*)FunctionDef_type) <
   7868         0) return NULL;
   7869     if (PyDict_SetItemString(d, "AsyncFunctionDef",
   7870         (PyObject*)AsyncFunctionDef_type) < 0) return NULL;
   7871     if (PyDict_SetItemString(d, "ClassDef", (PyObject*)ClassDef_type) < 0)
   7872         return NULL;
   7873     if (PyDict_SetItemString(d, "Return", (PyObject*)Return_type) < 0) return
   7874         NULL;
   7875     if (PyDict_SetItemString(d, "Delete", (PyObject*)Delete_type) < 0) return
   7876         NULL;
   7877     if (PyDict_SetItemString(d, "Assign", (PyObject*)Assign_type) < 0) return
   7878         NULL;
   7879     if (PyDict_SetItemString(d, "AugAssign", (PyObject*)AugAssign_type) < 0)
   7880         return NULL;
   7881     if (PyDict_SetItemString(d, "AnnAssign", (PyObject*)AnnAssign_type) < 0)
   7882         return NULL;
   7883     if (PyDict_SetItemString(d, "For", (PyObject*)For_type) < 0) return NULL;
   7884     if (PyDict_SetItemString(d, "AsyncFor", (PyObject*)AsyncFor_type) < 0)
   7885         return NULL;
   7886     if (PyDict_SetItemString(d, "While", (PyObject*)While_type) < 0) return
   7887         NULL;
   7888     if (PyDict_SetItemString(d, "If", (PyObject*)If_type) < 0) return NULL;
   7889     if (PyDict_SetItemString(d, "With", (PyObject*)With_type) < 0) return NULL;
   7890     if (PyDict_SetItemString(d, "AsyncWith", (PyObject*)AsyncWith_type) < 0)
   7891         return NULL;
   7892     if (PyDict_SetItemString(d, "Raise", (PyObject*)Raise_type) < 0) return
   7893         NULL;
   7894     if (PyDict_SetItemString(d, "Try", (PyObject*)Try_type) < 0) return NULL;
   7895     if (PyDict_SetItemString(d, "Assert", (PyObject*)Assert_type) < 0) return
   7896         NULL;
   7897     if (PyDict_SetItemString(d, "Import", (PyObject*)Import_type) < 0) return
   7898         NULL;
   7899     if (PyDict_SetItemString(d, "ImportFrom", (PyObject*)ImportFrom_type) < 0)
   7900         return NULL;
   7901     if (PyDict_SetItemString(d, "Global", (PyObject*)Global_type) < 0) return
   7902         NULL;
   7903     if (PyDict_SetItemString(d, "Nonlocal", (PyObject*)Nonlocal_type) < 0)
   7904         return NULL;
   7905     if (PyDict_SetItemString(d, "Expr", (PyObject*)Expr_type) < 0) return NULL;
   7906     if (PyDict_SetItemString(d, "Pass", (PyObject*)Pass_type) < 0) return NULL;
   7907     if (PyDict_SetItemString(d, "Break", (PyObject*)Break_type) < 0) return
   7908         NULL;
   7909     if (PyDict_SetItemString(d, "Continue", (PyObject*)Continue_type) < 0)
   7910         return NULL;
   7911     if (PyDict_SetItemString(d, "expr", (PyObject*)expr_type) < 0) return NULL;
   7912     if (PyDict_SetItemString(d, "BoolOp", (PyObject*)BoolOp_type) < 0) return
   7913         NULL;
   7914     if (PyDict_SetItemString(d, "BinOp", (PyObject*)BinOp_type) < 0) return
   7915         NULL;
   7916     if (PyDict_SetItemString(d, "UnaryOp", (PyObject*)UnaryOp_type) < 0) return
   7917         NULL;
   7918     if (PyDict_SetItemString(d, "Lambda", (PyObject*)Lambda_type) < 0) return
   7919         NULL;
   7920     if (PyDict_SetItemString(d, "IfExp", (PyObject*)IfExp_type) < 0) return
   7921         NULL;
   7922     if (PyDict_SetItemString(d, "Dict", (PyObject*)Dict_type) < 0) return NULL;
   7923     if (PyDict_SetItemString(d, "Set", (PyObject*)Set_type) < 0) return NULL;
   7924     if (PyDict_SetItemString(d, "ListComp", (PyObject*)ListComp_type) < 0)
   7925         return NULL;
   7926     if (PyDict_SetItemString(d, "SetComp", (PyObject*)SetComp_type) < 0) return
   7927         NULL;
   7928     if (PyDict_SetItemString(d, "DictComp", (PyObject*)DictComp_type) < 0)
   7929         return NULL;
   7930     if (PyDict_SetItemString(d, "GeneratorExp", (PyObject*)GeneratorExp_type) <
   7931         0) return NULL;
   7932     if (PyDict_SetItemString(d, "Await", (PyObject*)Await_type) < 0) return
   7933         NULL;
   7934     if (PyDict_SetItemString(d, "Yield", (PyObject*)Yield_type) < 0) return
   7935         NULL;
   7936     if (PyDict_SetItemString(d, "YieldFrom", (PyObject*)YieldFrom_type) < 0)
   7937         return NULL;
   7938     if (PyDict_SetItemString(d, "Compare", (PyObject*)Compare_type) < 0) return
   7939         NULL;
   7940     if (PyDict_SetItemString(d, "Call", (PyObject*)Call_type) < 0) return NULL;
   7941     if (PyDict_SetItemString(d, "Num", (PyObject*)Num_type) < 0) return NULL;
   7942     if (PyDict_SetItemString(d, "Str", (PyObject*)Str_type) < 0) return NULL;
   7943     if (PyDict_SetItemString(d, "FormattedValue",
   7944         (PyObject*)FormattedValue_type) < 0) return NULL;
   7945     if (PyDict_SetItemString(d, "JoinedStr", (PyObject*)JoinedStr_type) < 0)
   7946         return NULL;
   7947     if (PyDict_SetItemString(d, "Bytes", (PyObject*)Bytes_type) < 0) return
   7948         NULL;
   7949     if (PyDict_SetItemString(d, "NameConstant", (PyObject*)NameConstant_type) <
   7950         0) return NULL;
   7951     if (PyDict_SetItemString(d, "Ellipsis", (PyObject*)Ellipsis_type) < 0)
   7952         return NULL;
   7953     if (PyDict_SetItemString(d, "Constant", (PyObject*)Constant_type) < 0)
   7954         return NULL;
   7955     if (PyDict_SetItemString(d, "Attribute", (PyObject*)Attribute_type) < 0)
   7956         return NULL;
   7957     if (PyDict_SetItemString(d, "Subscript", (PyObject*)Subscript_type) < 0)
   7958         return NULL;
   7959     if (PyDict_SetItemString(d, "Starred", (PyObject*)Starred_type) < 0) return
   7960         NULL;
   7961     if (PyDict_SetItemString(d, "Name", (PyObject*)Name_type) < 0) return NULL;
   7962     if (PyDict_SetItemString(d, "List", (PyObject*)List_type) < 0) return NULL;
   7963     if (PyDict_SetItemString(d, "Tuple", (PyObject*)Tuple_type) < 0) return
   7964         NULL;
   7965     if (PyDict_SetItemString(d, "expr_context", (PyObject*)expr_context_type) <
   7966         0) return NULL;
   7967     if (PyDict_SetItemString(d, "Load", (PyObject*)Load_type) < 0) return NULL;
   7968     if (PyDict_SetItemString(d, "Store", (PyObject*)Store_type) < 0) return
   7969         NULL;
   7970     if (PyDict_SetItemString(d, "Del", (PyObject*)Del_type) < 0) return NULL;
   7971     if (PyDict_SetItemString(d, "AugLoad", (PyObject*)AugLoad_type) < 0) return
   7972         NULL;
   7973     if (PyDict_SetItemString(d, "AugStore", (PyObject*)AugStore_type) < 0)
   7974         return NULL;
   7975     if (PyDict_SetItemString(d, "Param", (PyObject*)Param_type) < 0) return
   7976         NULL;
   7977     if (PyDict_SetItemString(d, "slice", (PyObject*)slice_type) < 0) return
   7978         NULL;
   7979     if (PyDict_SetItemString(d, "Slice", (PyObject*)Slice_type) < 0) return
   7980         NULL;
   7981     if (PyDict_SetItemString(d, "ExtSlice", (PyObject*)ExtSlice_type) < 0)
   7982         return NULL;
   7983     if (PyDict_SetItemString(d, "Index", (PyObject*)Index_type) < 0) return
   7984         NULL;
   7985     if (PyDict_SetItemString(d, "boolop", (PyObject*)boolop_type) < 0) return
   7986         NULL;
   7987     if (PyDict_SetItemString(d, "And", (PyObject*)And_type) < 0) return NULL;
   7988     if (PyDict_SetItemString(d, "Or", (PyObject*)Or_type) < 0) return NULL;
   7989     if (PyDict_SetItemString(d, "operator", (PyObject*)operator_type) < 0)
   7990         return NULL;
   7991     if (PyDict_SetItemString(d, "Add", (PyObject*)Add_type) < 0) return NULL;
   7992     if (PyDict_SetItemString(d, "Sub", (PyObject*)Sub_type) < 0) return NULL;
   7993     if (PyDict_SetItemString(d, "Mult", (PyObject*)Mult_type) < 0) return NULL;
   7994     if (PyDict_SetItemString(d, "MatMult", (PyObject*)MatMult_type) < 0) return
   7995         NULL;
   7996     if (PyDict_SetItemString(d, "Div", (PyObject*)Div_type) < 0) return NULL;
   7997     if (PyDict_SetItemString(d, "Mod", (PyObject*)Mod_type) < 0) return NULL;
   7998     if (PyDict_SetItemString(d, "Pow", (PyObject*)Pow_type) < 0) return NULL;
   7999     if (PyDict_SetItemString(d, "LShift", (PyObject*)LShift_type) < 0) return
   8000         NULL;
   8001     if (PyDict_SetItemString(d, "RShift", (PyObject*)RShift_type) < 0) return
   8002         NULL;
   8003     if (PyDict_SetItemString(d, "BitOr", (PyObject*)BitOr_type) < 0) return
   8004         NULL;
   8005     if (PyDict_SetItemString(d, "BitXor", (PyObject*)BitXor_type) < 0) return
   8006         NULL;
   8007     if (PyDict_SetItemString(d, "BitAnd", (PyObject*)BitAnd_type) < 0) return
   8008         NULL;
   8009     if (PyDict_SetItemString(d, "FloorDiv", (PyObject*)FloorDiv_type) < 0)
   8010         return NULL;
   8011     if (PyDict_SetItemString(d, "unaryop", (PyObject*)unaryop_type) < 0) return
   8012         NULL;
   8013     if (PyDict_SetItemString(d, "Invert", (PyObject*)Invert_type) < 0) return
   8014         NULL;
   8015     if (PyDict_SetItemString(d, "Not", (PyObject*)Not_type) < 0) return NULL;
   8016     if (PyDict_SetItemString(d, "UAdd", (PyObject*)UAdd_type) < 0) return NULL;
   8017     if (PyDict_SetItemString(d, "USub", (PyObject*)USub_type) < 0) return NULL;
   8018     if (PyDict_SetItemString(d, "cmpop", (PyObject*)cmpop_type) < 0) return
   8019         NULL;
   8020     if (PyDict_SetItemString(d, "Eq", (PyObject*)Eq_type) < 0) return NULL;
   8021     if (PyDict_SetItemString(d, "NotEq", (PyObject*)NotEq_type) < 0) return
   8022         NULL;
   8023     if (PyDict_SetItemString(d, "Lt", (PyObject*)Lt_type) < 0) return NULL;
   8024     if (PyDict_SetItemString(d, "LtE", (PyObject*)LtE_type) < 0) return NULL;
   8025     if (PyDict_SetItemString(d, "Gt", (PyObject*)Gt_type) < 0) return NULL;
   8026     if (PyDict_SetItemString(d, "GtE", (PyObject*)GtE_type) < 0) return NULL;
   8027     if (PyDict_SetItemString(d, "Is", (PyObject*)Is_type) < 0) return NULL;
   8028     if (PyDict_SetItemString(d, "IsNot", (PyObject*)IsNot_type) < 0) return
   8029         NULL;
   8030     if (PyDict_SetItemString(d, "In", (PyObject*)In_type) < 0) return NULL;
   8031     if (PyDict_SetItemString(d, "NotIn", (PyObject*)NotIn_type) < 0) return
   8032         NULL;
   8033     if (PyDict_SetItemString(d, "comprehension", (PyObject*)comprehension_type)
   8034         < 0) return NULL;
   8035     if (PyDict_SetItemString(d, "excepthandler", (PyObject*)excepthandler_type)
   8036         < 0) return NULL;
   8037     if (PyDict_SetItemString(d, "ExceptHandler", (PyObject*)ExceptHandler_type)
   8038         < 0) return NULL;
   8039     if (PyDict_SetItemString(d, "arguments", (PyObject*)arguments_type) < 0)
   8040         return NULL;
   8041     if (PyDict_SetItemString(d, "arg", (PyObject*)arg_type) < 0) return NULL;
   8042     if (PyDict_SetItemString(d, "keyword", (PyObject*)keyword_type) < 0) return
   8043         NULL;
   8044     if (PyDict_SetItemString(d, "alias", (PyObject*)alias_type) < 0) return
   8045         NULL;
   8046     if (PyDict_SetItemString(d, "withitem", (PyObject*)withitem_type) < 0)
   8047         return NULL;
   8048     return m;
   8049 }
   8050 
   8051 
   8052 PyObject* PyAST_mod2obj(mod_ty t)
   8053 {
   8054     if (!init_types())
   8055         return NULL;
   8056     return ast2obj_mod(t);
   8057 }
   8058 
   8059 /* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
   8060 mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
   8061 {
   8062     mod_ty res;
   8063     PyObject *req_type[3];
   8064     char *req_name[] = {"Module", "Expression", "Interactive"};
   8065     int isinstance;
   8066 
   8067     req_type[0] = (PyObject*)Module_type;
   8068     req_type[1] = (PyObject*)Expression_type;
   8069     req_type[2] = (PyObject*)Interactive_type;
   8070 
   8071     assert(0 <= mode && mode <= 2);
   8072 
   8073     if (!init_types())
   8074         return NULL;
   8075 
   8076     isinstance = PyObject_IsInstance(ast, req_type[mode]);
   8077     if (isinstance == -1)
   8078         return NULL;
   8079     if (!isinstance) {
   8080         PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s",
   8081                      req_name[mode], Py_TYPE(ast)->tp_name);
   8082         return NULL;
   8083     }
   8084     if (obj2ast_mod(ast, &res, arena) != 0)
   8085         return NULL;
   8086     else
   8087         return res;
   8088 }
   8089 
   8090 int PyAST_Check(PyObject* obj)
   8091 {
   8092     if (!init_types())
   8093         return -1;
   8094     return PyObject_IsInstance(obj, (PyObject*)&AST_type);
   8095 }
   8096 
   8097 
   8098