symbian-qemu-0.9.1-12/python-2.6.1/Python/Python-ast.c
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 /* File automatically generated by Parser/asdl_c.py. */
       
     2 
       
     3 
       
     4 /*
       
     5    __version__ 62047.
       
     6 
       
     7    This module must be committed separately after each AST grammar change;
       
     8    The __version__ number is set to the revision number of the commit
       
     9    containing the grammar change.
       
    10 */
       
    11 
       
    12 #include "Python.h"
       
    13 #include "Python-ast.h"
       
    14 
       
    15 static PyTypeObject AST_type;
       
    16 static PyTypeObject *mod_type;
       
    17 static PyObject* ast2obj_mod(void*);
       
    18 static PyTypeObject *Module_type;
       
    19 static char *Module_fields[]={
       
    20         "body",
       
    21 };
       
    22 static PyTypeObject *Interactive_type;
       
    23 static char *Interactive_fields[]={
       
    24         "body",
       
    25 };
       
    26 static PyTypeObject *Expression_type;
       
    27 static char *Expression_fields[]={
       
    28         "body",
       
    29 };
       
    30 static PyTypeObject *Suite_type;
       
    31 static char *Suite_fields[]={
       
    32         "body",
       
    33 };
       
    34 static PyTypeObject *stmt_type;
       
    35 static char *stmt_attributes[] = {
       
    36         "lineno",
       
    37         "col_offset",
       
    38 };
       
    39 static PyObject* ast2obj_stmt(void*);
       
    40 static PyTypeObject *FunctionDef_type;
       
    41 static char *FunctionDef_fields[]={
       
    42         "name",
       
    43         "args",
       
    44         "body",
       
    45         "decorator_list",
       
    46 };
       
    47 static PyTypeObject *ClassDef_type;
       
    48 static char *ClassDef_fields[]={
       
    49         "name",
       
    50         "bases",
       
    51         "body",
       
    52         "decorator_list",
       
    53 };
       
    54 static PyTypeObject *Return_type;
       
    55 static char *Return_fields[]={
       
    56         "value",
       
    57 };
       
    58 static PyTypeObject *Delete_type;
       
    59 static char *Delete_fields[]={
       
    60         "targets",
       
    61 };
       
    62 static PyTypeObject *Assign_type;
       
    63 static char *Assign_fields[]={
       
    64         "targets",
       
    65         "value",
       
    66 };
       
    67 static PyTypeObject *AugAssign_type;
       
    68 static char *AugAssign_fields[]={
       
    69         "target",
       
    70         "op",
       
    71         "value",
       
    72 };
       
    73 static PyTypeObject *Print_type;
       
    74 static char *Print_fields[]={
       
    75         "dest",
       
    76         "values",
       
    77         "nl",
       
    78 };
       
    79 static PyTypeObject *For_type;
       
    80 static char *For_fields[]={
       
    81         "target",
       
    82         "iter",
       
    83         "body",
       
    84         "orelse",
       
    85 };
       
    86 static PyTypeObject *While_type;
       
    87 static char *While_fields[]={
       
    88         "test",
       
    89         "body",
       
    90         "orelse",
       
    91 };
       
    92 static PyTypeObject *If_type;
       
    93 static char *If_fields[]={
       
    94         "test",
       
    95         "body",
       
    96         "orelse",
       
    97 };
       
    98 static PyTypeObject *With_type;
       
    99 static char *With_fields[]={
       
   100         "context_expr",
       
   101         "optional_vars",
       
   102         "body",
       
   103 };
       
   104 static PyTypeObject *Raise_type;
       
   105 static char *Raise_fields[]={
       
   106         "type",
       
   107         "inst",
       
   108         "tback",
       
   109 };
       
   110 static PyTypeObject *TryExcept_type;
       
   111 static char *TryExcept_fields[]={
       
   112         "body",
       
   113         "handlers",
       
   114         "orelse",
       
   115 };
       
   116 static PyTypeObject *TryFinally_type;
       
   117 static char *TryFinally_fields[]={
       
   118         "body",
       
   119         "finalbody",
       
   120 };
       
   121 static PyTypeObject *Assert_type;
       
   122 static char *Assert_fields[]={
       
   123         "test",
       
   124         "msg",
       
   125 };
       
   126 static PyTypeObject *Import_type;
       
   127 static char *Import_fields[]={
       
   128         "names",
       
   129 };
       
   130 static PyTypeObject *ImportFrom_type;
       
   131 static char *ImportFrom_fields[]={
       
   132         "module",
       
   133         "names",
       
   134         "level",
       
   135 };
       
   136 static PyTypeObject *Exec_type;
       
   137 static char *Exec_fields[]={
       
   138         "body",
       
   139         "globals",
       
   140         "locals",
       
   141 };
       
   142 static PyTypeObject *Global_type;
       
   143 static char *Global_fields[]={
       
   144         "names",
       
   145 };
       
   146 static PyTypeObject *Expr_type;
       
   147 static char *Expr_fields[]={
       
   148         "value",
       
   149 };
       
   150 static PyTypeObject *Pass_type;
       
   151 static PyTypeObject *Break_type;
       
   152 static PyTypeObject *Continue_type;
       
   153 static PyTypeObject *expr_type;
       
   154 static char *expr_attributes[] = {
       
   155         "lineno",
       
   156         "col_offset",
       
   157 };
       
   158 static PyObject* ast2obj_expr(void*);
       
   159 static PyTypeObject *BoolOp_type;
       
   160 static char *BoolOp_fields[]={
       
   161         "op",
       
   162         "values",
       
   163 };
       
   164 static PyTypeObject *BinOp_type;
       
   165 static char *BinOp_fields[]={
       
   166         "left",
       
   167         "op",
       
   168         "right",
       
   169 };
       
   170 static PyTypeObject *UnaryOp_type;
       
   171 static char *UnaryOp_fields[]={
       
   172         "op",
       
   173         "operand",
       
   174 };
       
   175 static PyTypeObject *Lambda_type;
       
   176 static char *Lambda_fields[]={
       
   177         "args",
       
   178         "body",
       
   179 };
       
   180 static PyTypeObject *IfExp_type;
       
   181 static char *IfExp_fields[]={
       
   182         "test",
       
   183         "body",
       
   184         "orelse",
       
   185 };
       
   186 static PyTypeObject *Dict_type;
       
   187 static char *Dict_fields[]={
       
   188         "keys",
       
   189         "values",
       
   190 };
       
   191 static PyTypeObject *ListComp_type;
       
   192 static char *ListComp_fields[]={
       
   193         "elt",
       
   194         "generators",
       
   195 };
       
   196 static PyTypeObject *GeneratorExp_type;
       
   197 static char *GeneratorExp_fields[]={
       
   198         "elt",
       
   199         "generators",
       
   200 };
       
   201 static PyTypeObject *Yield_type;
       
   202 static char *Yield_fields[]={
       
   203         "value",
       
   204 };
       
   205 static PyTypeObject *Compare_type;
       
   206 static char *Compare_fields[]={
       
   207         "left",
       
   208         "ops",
       
   209         "comparators",
       
   210 };
       
   211 static PyTypeObject *Call_type;
       
   212 static char *Call_fields[]={
       
   213         "func",
       
   214         "args",
       
   215         "keywords",
       
   216         "starargs",
       
   217         "kwargs",
       
   218 };
       
   219 static PyTypeObject *Repr_type;
       
   220 static char *Repr_fields[]={
       
   221         "value",
       
   222 };
       
   223 static PyTypeObject *Num_type;
       
   224 static char *Num_fields[]={
       
   225         "n",
       
   226 };
       
   227 static PyTypeObject *Str_type;
       
   228 static char *Str_fields[]={
       
   229         "s",
       
   230 };
       
   231 static PyTypeObject *Attribute_type;
       
   232 static char *Attribute_fields[]={
       
   233         "value",
       
   234         "attr",
       
   235         "ctx",
       
   236 };
       
   237 static PyTypeObject *Subscript_type;
       
   238 static char *Subscript_fields[]={
       
   239         "value",
       
   240         "slice",
       
   241         "ctx",
       
   242 };
       
   243 static PyTypeObject *Name_type;
       
   244 static char *Name_fields[]={
       
   245         "id",
       
   246         "ctx",
       
   247 };
       
   248 static PyTypeObject *List_type;
       
   249 static char *List_fields[]={
       
   250         "elts",
       
   251         "ctx",
       
   252 };
       
   253 static PyTypeObject *Tuple_type;
       
   254 static char *Tuple_fields[]={
       
   255         "elts",
       
   256         "ctx",
       
   257 };
       
   258 static PyTypeObject *expr_context_type;
       
   259 static PyObject *Load_singleton, *Store_singleton, *Del_singleton,
       
   260 *AugLoad_singleton, *AugStore_singleton, *Param_singleton;
       
   261 static PyObject* ast2obj_expr_context(expr_context_ty);
       
   262 static PyTypeObject *Load_type;
       
   263 static PyTypeObject *Store_type;
       
   264 static PyTypeObject *Del_type;
       
   265 static PyTypeObject *AugLoad_type;
       
   266 static PyTypeObject *AugStore_type;
       
   267 static PyTypeObject *Param_type;
       
   268 static PyTypeObject *slice_type;
       
   269 static PyObject* ast2obj_slice(void*);
       
   270 static PyTypeObject *Ellipsis_type;
       
   271 static PyTypeObject *Slice_type;
       
   272 static char *Slice_fields[]={
       
   273         "lower",
       
   274         "upper",
       
   275         "step",
       
   276 };
       
   277 static PyTypeObject *ExtSlice_type;
       
   278 static char *ExtSlice_fields[]={
       
   279         "dims",
       
   280 };
       
   281 static PyTypeObject *Index_type;
       
   282 static char *Index_fields[]={
       
   283         "value",
       
   284 };
       
   285 static PyTypeObject *boolop_type;
       
   286 static PyObject *And_singleton, *Or_singleton;
       
   287 static PyObject* ast2obj_boolop(boolop_ty);
       
   288 static PyTypeObject *And_type;
       
   289 static PyTypeObject *Or_type;
       
   290 static PyTypeObject *operator_type;
       
   291 static PyObject *Add_singleton, *Sub_singleton, *Mult_singleton,
       
   292 *Div_singleton, *Mod_singleton, *Pow_singleton, *LShift_singleton,
       
   293 *RShift_singleton, *BitOr_singleton, *BitXor_singleton, *BitAnd_singleton,
       
   294 *FloorDiv_singleton;
       
   295 static PyObject* ast2obj_operator(operator_ty);
       
   296 static PyTypeObject *Add_type;
       
   297 static PyTypeObject *Sub_type;
       
   298 static PyTypeObject *Mult_type;
       
   299 static PyTypeObject *Div_type;
       
   300 static PyTypeObject *Mod_type;
       
   301 static PyTypeObject *Pow_type;
       
   302 static PyTypeObject *LShift_type;
       
   303 static PyTypeObject *RShift_type;
       
   304 static PyTypeObject *BitOr_type;
       
   305 static PyTypeObject *BitXor_type;
       
   306 static PyTypeObject *BitAnd_type;
       
   307 static PyTypeObject *FloorDiv_type;
       
   308 static PyTypeObject *unaryop_type;
       
   309 static PyObject *Invert_singleton, *Not_singleton, *UAdd_singleton,
       
   310 *USub_singleton;
       
   311 static PyObject* ast2obj_unaryop(unaryop_ty);
       
   312 static PyTypeObject *Invert_type;
       
   313 static PyTypeObject *Not_type;
       
   314 static PyTypeObject *UAdd_type;
       
   315 static PyTypeObject *USub_type;
       
   316 static PyTypeObject *cmpop_type;
       
   317 static PyObject *Eq_singleton, *NotEq_singleton, *Lt_singleton, *LtE_singleton,
       
   318 *Gt_singleton, *GtE_singleton, *Is_singleton, *IsNot_singleton, *In_singleton,
       
   319 *NotIn_singleton;
       
   320 static PyObject* ast2obj_cmpop(cmpop_ty);
       
   321 static PyTypeObject *Eq_type;
       
   322 static PyTypeObject *NotEq_type;
       
   323 static PyTypeObject *Lt_type;
       
   324 static PyTypeObject *LtE_type;
       
   325 static PyTypeObject *Gt_type;
       
   326 static PyTypeObject *GtE_type;
       
   327 static PyTypeObject *Is_type;
       
   328 static PyTypeObject *IsNot_type;
       
   329 static PyTypeObject *In_type;
       
   330 static PyTypeObject *NotIn_type;
       
   331 static PyTypeObject *comprehension_type;
       
   332 static PyObject* ast2obj_comprehension(void*);
       
   333 static char *comprehension_fields[]={
       
   334         "target",
       
   335         "iter",
       
   336         "ifs",
       
   337 };
       
   338 static PyTypeObject *excepthandler_type;
       
   339 static char *excepthandler_attributes[] = {
       
   340         "lineno",
       
   341         "col_offset",
       
   342 };
       
   343 static PyObject* ast2obj_excepthandler(void*);
       
   344 static PyTypeObject *ExceptHandler_type;
       
   345 static char *ExceptHandler_fields[]={
       
   346         "type",
       
   347         "name",
       
   348         "body",
       
   349 };
       
   350 static PyTypeObject *arguments_type;
       
   351 static PyObject* ast2obj_arguments(void*);
       
   352 static char *arguments_fields[]={
       
   353         "args",
       
   354         "vararg",
       
   355         "kwarg",
       
   356         "defaults",
       
   357 };
       
   358 static PyTypeObject *keyword_type;
       
   359 static PyObject* ast2obj_keyword(void*);
       
   360 static char *keyword_fields[]={
       
   361         "arg",
       
   362         "value",
       
   363 };
       
   364 static PyTypeObject *alias_type;
       
   365 static PyObject* ast2obj_alias(void*);
       
   366 static char *alias_fields[]={
       
   367         "name",
       
   368         "asname",
       
   369 };
       
   370 
       
   371 
       
   372 static int
       
   373 ast_type_init(PyObject *self, PyObject *args, PyObject *kw)
       
   374 {
       
   375     Py_ssize_t i, numfields = 0;
       
   376     int res = -1;
       
   377     PyObject *key, *value, *fields;
       
   378     fields = PyObject_GetAttrString((PyObject*)Py_TYPE(self), "_fields");
       
   379     if (!fields)
       
   380         PyErr_Clear();
       
   381     if (fields) {
       
   382         numfields = PySequence_Size(fields);
       
   383         if (numfields == -1)
       
   384             goto cleanup;
       
   385     }
       
   386     res = 0; /* if no error occurs, this stays 0 to the end */
       
   387     if (PyTuple_GET_SIZE(args) > 0) {
       
   388         if (numfields != PyTuple_GET_SIZE(args)) {
       
   389             PyErr_Format(PyExc_TypeError, "%.400s constructor takes %s"
       
   390                          "%zd positional argument%s",
       
   391                          Py_TYPE(self)->tp_name,
       
   392                          numfields == 0 ? "" : "either 0 or ",
       
   393                          numfields, numfields == 1 ? "" : "s");
       
   394             res = -1;
       
   395             goto cleanup;
       
   396         }
       
   397         for (i = 0; i < PyTuple_GET_SIZE(args); i++) {
       
   398             /* cannot be reached when fields is NULL */
       
   399             PyObject *name = PySequence_GetItem(fields, i);
       
   400             if (!name) {
       
   401                 res = -1;
       
   402                 goto cleanup;
       
   403             }
       
   404             res = PyObject_SetAttr(self, name, PyTuple_GET_ITEM(args, i));
       
   405             Py_DECREF(name);
       
   406             if (res < 0)
       
   407                 goto cleanup;
       
   408         }
       
   409     }
       
   410     if (kw) {
       
   411         i = 0;  /* needed by PyDict_Next */
       
   412         while (PyDict_Next(kw, &i, &key, &value)) {
       
   413             res = PyObject_SetAttr(self, key, value);
       
   414             if (res < 0)
       
   415                 goto cleanup;
       
   416         }
       
   417     }
       
   418   cleanup:
       
   419     Py_XDECREF(fields);
       
   420     return res;
       
   421 }
       
   422 
       
   423 /* Pickling support */
       
   424 static PyObject *
       
   425 ast_type_reduce(PyObject *self, PyObject *unused)
       
   426 {
       
   427     PyObject *res;
       
   428     PyObject *dict = PyObject_GetAttrString(self, "__dict__");
       
   429     if (dict == NULL) {
       
   430         if (PyErr_ExceptionMatches(PyExc_AttributeError))
       
   431             PyErr_Clear();
       
   432         else
       
   433             return NULL;
       
   434     }
       
   435     if (dict) {
       
   436         res = Py_BuildValue("O()O", Py_TYPE(self), dict);
       
   437         Py_DECREF(dict);
       
   438         return res;
       
   439     }
       
   440     return Py_BuildValue("O()", Py_TYPE(self));
       
   441 }
       
   442 
       
   443 static PyMethodDef ast_type_methods[] = {
       
   444     {"__reduce__", ast_type_reduce, METH_NOARGS, NULL},
       
   445     {NULL}
       
   446 };
       
   447 
       
   448 static PyTypeObject AST_type = {
       
   449     PyVarObject_HEAD_INIT(&PyType_Type, 0)
       
   450     "_ast.AST",
       
   451     sizeof(PyObject),
       
   452     0,
       
   453     0,                       /* tp_dealloc */
       
   454     0,                       /* tp_print */
       
   455     0,                       /* tp_getattr */
       
   456     0,                       /* tp_setattr */
       
   457     0,                       /* tp_compare */
       
   458     0,                       /* tp_repr */
       
   459     0,                       /* tp_as_number */
       
   460     0,                       /* tp_as_sequence */
       
   461     0,                       /* tp_as_mapping */
       
   462     0,                       /* tp_hash */
       
   463     0,                       /* tp_call */
       
   464     0,                       /* tp_str */
       
   465     PyObject_GenericGetAttr, /* tp_getattro */
       
   466     PyObject_GenericSetAttr, /* tp_setattro */
       
   467     0,                       /* tp_as_buffer */
       
   468     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
       
   469     0,                       /* tp_doc */
       
   470     0,                       /* tp_traverse */
       
   471     0,                       /* tp_clear */
       
   472     0,                       /* tp_richcompare */
       
   473     0,                       /* tp_weaklistoffset */
       
   474     0,                       /* tp_iter */
       
   475     0,                       /* tp_iternext */
       
   476     ast_type_methods,        /* tp_methods */
       
   477     0,                       /* tp_members */
       
   478     0,                       /* tp_getset */
       
   479     0,                       /* tp_base */
       
   480     0,                       /* tp_dict */
       
   481     0,                       /* tp_descr_get */
       
   482     0,                       /* tp_descr_set */
       
   483     0,                       /* tp_dictoffset */
       
   484     (initproc)ast_type_init, /* tp_init */
       
   485     PyType_GenericAlloc,     /* tp_alloc */
       
   486     PyType_GenericNew,       /* tp_new */
       
   487     PyObject_Del,            /* tp_free */
       
   488 };
       
   489 
       
   490 
       
   491 static PyTypeObject* make_type(char *type, PyTypeObject* base, char**fields, int num_fields)
       
   492 {
       
   493     PyObject *fnames, *result;
       
   494     int i;
       
   495     fnames = PyTuple_New(num_fields);
       
   496     if (!fnames) return NULL;
       
   497     for (i = 0; i < num_fields; i++) {
       
   498         PyObject *field = PyString_FromString(fields[i]);
       
   499         if (!field) {
       
   500             Py_DECREF(fnames);
       
   501             return NULL;
       
   502         }
       
   503         PyTuple_SET_ITEM(fnames, i, field);
       
   504     }
       
   505     result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){sOss}",
       
   506                     type, base, "_fields", fnames, "__module__", "_ast");
       
   507     Py_DECREF(fnames);
       
   508     return (PyTypeObject*)result;
       
   509 }
       
   510 
       
   511 static int add_attributes(PyTypeObject* type, char**attrs, int num_fields)
       
   512 {
       
   513     int i, result;
       
   514     PyObject *s, *l = PyTuple_New(num_fields);
       
   515     if (!l) return 0;
       
   516     for(i = 0; i < num_fields; i++) {
       
   517         s = PyString_FromString(attrs[i]);
       
   518         if (!s) {
       
   519             Py_DECREF(l);
       
   520             return 0;
       
   521         }
       
   522         PyTuple_SET_ITEM(l, i, s);
       
   523     }
       
   524     result = PyObject_SetAttrString((PyObject*)type, "_attributes", l) >= 0;
       
   525     Py_DECREF(l);
       
   526     return result;
       
   527 }
       
   528 
       
   529 /* Conversion AST -> Python */
       
   530 
       
   531 static PyObject* ast2obj_list(asdl_seq *seq, PyObject* (*func)(void*))
       
   532 {
       
   533     int i, n = asdl_seq_LEN(seq);
       
   534     PyObject *result = PyList_New(n);
       
   535     PyObject *value;
       
   536     if (!result)
       
   537         return NULL;
       
   538     for (i = 0; i < n; i++) {
       
   539         value = func(asdl_seq_GET(seq, i));
       
   540         if (!value) {
       
   541             Py_DECREF(result);
       
   542             return NULL;
       
   543         }
       
   544         PyList_SET_ITEM(result, i, value);
       
   545     }
       
   546     return result;
       
   547 }
       
   548 
       
   549 static PyObject* ast2obj_object(void *o)
       
   550 {
       
   551     if (!o)
       
   552         o = Py_None;
       
   553     Py_INCREF((PyObject*)o);
       
   554     return (PyObject*)o;
       
   555 }
       
   556 #define ast2obj_identifier ast2obj_object
       
   557 #define ast2obj_string ast2obj_object
       
   558 static PyObject* ast2obj_bool(bool b)
       
   559 {
       
   560     return PyBool_FromLong(b);
       
   561 }
       
   562 
       
   563 static PyObject* ast2obj_int(long b)
       
   564 {
       
   565     return PyInt_FromLong(b);
       
   566 }
       
   567 
       
   568 /* Conversion Python -> AST */
       
   569 
       
   570 static int obj2ast_object(PyObject* obj, PyObject** out, PyArena* arena)
       
   571 {
       
   572     if (obj == Py_None)
       
   573         obj = NULL;
       
   574     if (obj)
       
   575         PyArena_AddPyObject(arena, obj);
       
   576     Py_XINCREF(obj);
       
   577     *out = obj;
       
   578     return 0;
       
   579 }
       
   580 
       
   581 #define obj2ast_identifier obj2ast_object
       
   582 #define obj2ast_string obj2ast_object
       
   583 
       
   584 static int obj2ast_int(PyObject* obj, int* out, PyArena* arena)
       
   585 {
       
   586     int i;
       
   587     if (!PyInt_Check(obj) && !PyLong_Check(obj)) {
       
   588         PyObject *s = PyObject_Repr(obj);
       
   589         if (s == NULL) return 1;
       
   590         PyErr_Format(PyExc_ValueError, "invalid integer value: %.400s",
       
   591                      PyString_AS_STRING(s));
       
   592         Py_DECREF(s);
       
   593         return 1;
       
   594     }
       
   595 
       
   596     i = (int)PyLong_AsLong(obj);
       
   597     if (i == -1 && PyErr_Occurred())
       
   598         return 1;
       
   599     *out = i;
       
   600     return 0;
       
   601 }
       
   602 
       
   603 static int obj2ast_bool(PyObject* obj, bool* out, PyArena* arena)
       
   604 {
       
   605     if (!PyBool_Check(obj)) {
       
   606         PyObject *s = PyObject_Repr(obj);
       
   607         if (s == NULL) return 1;
       
   608         PyErr_Format(PyExc_ValueError, "invalid boolean value: %.400s",
       
   609                      PyString_AS_STRING(s));
       
   610         Py_DECREF(s);
       
   611         return 1;
       
   612     }
       
   613 
       
   614     *out = (obj == Py_True);
       
   615     return 0;
       
   616 }
       
   617 
       
   618 static int add_ast_fields(void)
       
   619 {
       
   620     PyObject *empty_tuple, *d;
       
   621     if (PyType_Ready(&AST_type) < 0)
       
   622         return -1;
       
   623     d = AST_type.tp_dict;
       
   624     empty_tuple = PyTuple_New(0);
       
   625     if (!empty_tuple ||
       
   626         PyDict_SetItemString(d, "_fields", empty_tuple) < 0 ||
       
   627         PyDict_SetItemString(d, "_attributes", empty_tuple) < 0) {
       
   628         Py_XDECREF(empty_tuple);
       
   629         return -1;
       
   630     }
       
   631     Py_DECREF(empty_tuple);
       
   632     return 0;
       
   633 }
       
   634 
       
   635 
       
   636 static int init_types(void)
       
   637 {
       
   638         static int initialized;
       
   639         if (initialized) return 1;
       
   640         if (add_ast_fields() < 0) return 0;
       
   641         mod_type = make_type("mod", &AST_type, NULL, 0);
       
   642         if (!mod_type) return 0;
       
   643         if (!add_attributes(mod_type, NULL, 0)) return 0;
       
   644         Module_type = make_type("Module", mod_type, Module_fields, 1);
       
   645         if (!Module_type) return 0;
       
   646         Interactive_type = make_type("Interactive", mod_type,
       
   647                                      Interactive_fields, 1);
       
   648         if (!Interactive_type) return 0;
       
   649         Expression_type = make_type("Expression", mod_type, Expression_fields,
       
   650                                     1);
       
   651         if (!Expression_type) return 0;
       
   652         Suite_type = make_type("Suite", mod_type, Suite_fields, 1);
       
   653         if (!Suite_type) return 0;
       
   654         stmt_type = make_type("stmt", &AST_type, NULL, 0);
       
   655         if (!stmt_type) return 0;
       
   656         if (!add_attributes(stmt_type, stmt_attributes, 2)) return 0;
       
   657         FunctionDef_type = make_type("FunctionDef", stmt_type,
       
   658                                      FunctionDef_fields, 4);
       
   659         if (!FunctionDef_type) return 0;
       
   660         ClassDef_type = make_type("ClassDef", stmt_type, ClassDef_fields, 4);
       
   661         if (!ClassDef_type) return 0;
       
   662         Return_type = make_type("Return", stmt_type, Return_fields, 1);
       
   663         if (!Return_type) return 0;
       
   664         Delete_type = make_type("Delete", stmt_type, Delete_fields, 1);
       
   665         if (!Delete_type) return 0;
       
   666         Assign_type = make_type("Assign", stmt_type, Assign_fields, 2);
       
   667         if (!Assign_type) return 0;
       
   668         AugAssign_type = make_type("AugAssign", stmt_type, AugAssign_fields, 3);
       
   669         if (!AugAssign_type) return 0;
       
   670         Print_type = make_type("Print", stmt_type, Print_fields, 3);
       
   671         if (!Print_type) return 0;
       
   672         For_type = make_type("For", stmt_type, For_fields, 4);
       
   673         if (!For_type) return 0;
       
   674         While_type = make_type("While", stmt_type, While_fields, 3);
       
   675         if (!While_type) return 0;
       
   676         If_type = make_type("If", stmt_type, If_fields, 3);
       
   677         if (!If_type) return 0;
       
   678         With_type = make_type("With", stmt_type, With_fields, 3);
       
   679         if (!With_type) return 0;
       
   680         Raise_type = make_type("Raise", stmt_type, Raise_fields, 3);
       
   681         if (!Raise_type) return 0;
       
   682         TryExcept_type = make_type("TryExcept", stmt_type, TryExcept_fields, 3);
       
   683         if (!TryExcept_type) return 0;
       
   684         TryFinally_type = make_type("TryFinally", stmt_type, TryFinally_fields,
       
   685                                     2);
       
   686         if (!TryFinally_type) return 0;
       
   687         Assert_type = make_type("Assert", stmt_type, Assert_fields, 2);
       
   688         if (!Assert_type) return 0;
       
   689         Import_type = make_type("Import", stmt_type, Import_fields, 1);
       
   690         if (!Import_type) return 0;
       
   691         ImportFrom_type = make_type("ImportFrom", stmt_type, ImportFrom_fields,
       
   692                                     3);
       
   693         if (!ImportFrom_type) return 0;
       
   694         Exec_type = make_type("Exec", stmt_type, Exec_fields, 3);
       
   695         if (!Exec_type) return 0;
       
   696         Global_type = make_type("Global", stmt_type, Global_fields, 1);
       
   697         if (!Global_type) return 0;
       
   698         Expr_type = make_type("Expr", stmt_type, Expr_fields, 1);
       
   699         if (!Expr_type) return 0;
       
   700         Pass_type = make_type("Pass", stmt_type, NULL, 0);
       
   701         if (!Pass_type) return 0;
       
   702         Break_type = make_type("Break", stmt_type, NULL, 0);
       
   703         if (!Break_type) return 0;
       
   704         Continue_type = make_type("Continue", stmt_type, NULL, 0);
       
   705         if (!Continue_type) return 0;
       
   706         expr_type = make_type("expr", &AST_type, NULL, 0);
       
   707         if (!expr_type) return 0;
       
   708         if (!add_attributes(expr_type, expr_attributes, 2)) return 0;
       
   709         BoolOp_type = make_type("BoolOp", expr_type, BoolOp_fields, 2);
       
   710         if (!BoolOp_type) return 0;
       
   711         BinOp_type = make_type("BinOp", expr_type, BinOp_fields, 3);
       
   712         if (!BinOp_type) return 0;
       
   713         UnaryOp_type = make_type("UnaryOp", expr_type, UnaryOp_fields, 2);
       
   714         if (!UnaryOp_type) return 0;
       
   715         Lambda_type = make_type("Lambda", expr_type, Lambda_fields, 2);
       
   716         if (!Lambda_type) return 0;
       
   717         IfExp_type = make_type("IfExp", expr_type, IfExp_fields, 3);
       
   718         if (!IfExp_type) return 0;
       
   719         Dict_type = make_type("Dict", expr_type, Dict_fields, 2);
       
   720         if (!Dict_type) return 0;
       
   721         ListComp_type = make_type("ListComp", expr_type, ListComp_fields, 2);
       
   722         if (!ListComp_type) return 0;
       
   723         GeneratorExp_type = make_type("GeneratorExp", expr_type,
       
   724                                       GeneratorExp_fields, 2);
       
   725         if (!GeneratorExp_type) return 0;
       
   726         Yield_type = make_type("Yield", expr_type, Yield_fields, 1);
       
   727         if (!Yield_type) return 0;
       
   728         Compare_type = make_type("Compare", expr_type, Compare_fields, 3);
       
   729         if (!Compare_type) return 0;
       
   730         Call_type = make_type("Call", expr_type, Call_fields, 5);
       
   731         if (!Call_type) return 0;
       
   732         Repr_type = make_type("Repr", expr_type, Repr_fields, 1);
       
   733         if (!Repr_type) return 0;
       
   734         Num_type = make_type("Num", expr_type, Num_fields, 1);
       
   735         if (!Num_type) return 0;
       
   736         Str_type = make_type("Str", expr_type, Str_fields, 1);
       
   737         if (!Str_type) return 0;
       
   738         Attribute_type = make_type("Attribute", expr_type, Attribute_fields, 3);
       
   739         if (!Attribute_type) return 0;
       
   740         Subscript_type = make_type("Subscript", expr_type, Subscript_fields, 3);
       
   741         if (!Subscript_type) return 0;
       
   742         Name_type = make_type("Name", expr_type, Name_fields, 2);
       
   743         if (!Name_type) return 0;
       
   744         List_type = make_type("List", expr_type, List_fields, 2);
       
   745         if (!List_type) return 0;
       
   746         Tuple_type = make_type("Tuple", expr_type, Tuple_fields, 2);
       
   747         if (!Tuple_type) return 0;
       
   748         expr_context_type = make_type("expr_context", &AST_type, NULL, 0);
       
   749         if (!expr_context_type) return 0;
       
   750         if (!add_attributes(expr_context_type, NULL, 0)) return 0;
       
   751         Load_type = make_type("Load", expr_context_type, NULL, 0);
       
   752         if (!Load_type) return 0;
       
   753         Load_singleton = PyType_GenericNew(Load_type, NULL, NULL);
       
   754         if (!Load_singleton) return 0;
       
   755         Store_type = make_type("Store", expr_context_type, NULL, 0);
       
   756         if (!Store_type) return 0;
       
   757         Store_singleton = PyType_GenericNew(Store_type, NULL, NULL);
       
   758         if (!Store_singleton) return 0;
       
   759         Del_type = make_type("Del", expr_context_type, NULL, 0);
       
   760         if (!Del_type) return 0;
       
   761         Del_singleton = PyType_GenericNew(Del_type, NULL, NULL);
       
   762         if (!Del_singleton) return 0;
       
   763         AugLoad_type = make_type("AugLoad", expr_context_type, NULL, 0);
       
   764         if (!AugLoad_type) return 0;
       
   765         AugLoad_singleton = PyType_GenericNew(AugLoad_type, NULL, NULL);
       
   766         if (!AugLoad_singleton) return 0;
       
   767         AugStore_type = make_type("AugStore", expr_context_type, NULL, 0);
       
   768         if (!AugStore_type) return 0;
       
   769         AugStore_singleton = PyType_GenericNew(AugStore_type, NULL, NULL);
       
   770         if (!AugStore_singleton) return 0;
       
   771         Param_type = make_type("Param", expr_context_type, NULL, 0);
       
   772         if (!Param_type) return 0;
       
   773         Param_singleton = PyType_GenericNew(Param_type, NULL, NULL);
       
   774         if (!Param_singleton) return 0;
       
   775         slice_type = make_type("slice", &AST_type, NULL, 0);
       
   776         if (!slice_type) return 0;
       
   777         if (!add_attributes(slice_type, NULL, 0)) return 0;
       
   778         Ellipsis_type = make_type("Ellipsis", slice_type, NULL, 0);
       
   779         if (!Ellipsis_type) return 0;
       
   780         Slice_type = make_type("Slice", slice_type, Slice_fields, 3);
       
   781         if (!Slice_type) return 0;
       
   782         ExtSlice_type = make_type("ExtSlice", slice_type, ExtSlice_fields, 1);
       
   783         if (!ExtSlice_type) return 0;
       
   784         Index_type = make_type("Index", slice_type, Index_fields, 1);
       
   785         if (!Index_type) return 0;
       
   786         boolop_type = make_type("boolop", &AST_type, NULL, 0);
       
   787         if (!boolop_type) return 0;
       
   788         if (!add_attributes(boolop_type, NULL, 0)) return 0;
       
   789         And_type = make_type("And", boolop_type, NULL, 0);
       
   790         if (!And_type) return 0;
       
   791         And_singleton = PyType_GenericNew(And_type, NULL, NULL);
       
   792         if (!And_singleton) return 0;
       
   793         Or_type = make_type("Or", boolop_type, NULL, 0);
       
   794         if (!Or_type) return 0;
       
   795         Or_singleton = PyType_GenericNew(Or_type, NULL, NULL);
       
   796         if (!Or_singleton) return 0;
       
   797         operator_type = make_type("operator", &AST_type, NULL, 0);
       
   798         if (!operator_type) return 0;
       
   799         if (!add_attributes(operator_type, NULL, 0)) return 0;
       
   800         Add_type = make_type("Add", operator_type, NULL, 0);
       
   801         if (!Add_type) return 0;
       
   802         Add_singleton = PyType_GenericNew(Add_type, NULL, NULL);
       
   803         if (!Add_singleton) return 0;
       
   804         Sub_type = make_type("Sub", operator_type, NULL, 0);
       
   805         if (!Sub_type) return 0;
       
   806         Sub_singleton = PyType_GenericNew(Sub_type, NULL, NULL);
       
   807         if (!Sub_singleton) return 0;
       
   808         Mult_type = make_type("Mult", operator_type, NULL, 0);
       
   809         if (!Mult_type) return 0;
       
   810         Mult_singleton = PyType_GenericNew(Mult_type, NULL, NULL);
       
   811         if (!Mult_singleton) return 0;
       
   812         Div_type = make_type("Div", operator_type, NULL, 0);
       
   813         if (!Div_type) return 0;
       
   814         Div_singleton = PyType_GenericNew(Div_type, NULL, NULL);
       
   815         if (!Div_singleton) return 0;
       
   816         Mod_type = make_type("Mod", operator_type, NULL, 0);
       
   817         if (!Mod_type) return 0;
       
   818         Mod_singleton = PyType_GenericNew(Mod_type, NULL, NULL);
       
   819         if (!Mod_singleton) return 0;
       
   820         Pow_type = make_type("Pow", operator_type, NULL, 0);
       
   821         if (!Pow_type) return 0;
       
   822         Pow_singleton = PyType_GenericNew(Pow_type, NULL, NULL);
       
   823         if (!Pow_singleton) return 0;
       
   824         LShift_type = make_type("LShift", operator_type, NULL, 0);
       
   825         if (!LShift_type) return 0;
       
   826         LShift_singleton = PyType_GenericNew(LShift_type, NULL, NULL);
       
   827         if (!LShift_singleton) return 0;
       
   828         RShift_type = make_type("RShift", operator_type, NULL, 0);
       
   829         if (!RShift_type) return 0;
       
   830         RShift_singleton = PyType_GenericNew(RShift_type, NULL, NULL);
       
   831         if (!RShift_singleton) return 0;
       
   832         BitOr_type = make_type("BitOr", operator_type, NULL, 0);
       
   833         if (!BitOr_type) return 0;
       
   834         BitOr_singleton = PyType_GenericNew(BitOr_type, NULL, NULL);
       
   835         if (!BitOr_singleton) return 0;
       
   836         BitXor_type = make_type("BitXor", operator_type, NULL, 0);
       
   837         if (!BitXor_type) return 0;
       
   838         BitXor_singleton = PyType_GenericNew(BitXor_type, NULL, NULL);
       
   839         if (!BitXor_singleton) return 0;
       
   840         BitAnd_type = make_type("BitAnd", operator_type, NULL, 0);
       
   841         if (!BitAnd_type) return 0;
       
   842         BitAnd_singleton = PyType_GenericNew(BitAnd_type, NULL, NULL);
       
   843         if (!BitAnd_singleton) return 0;
       
   844         FloorDiv_type = make_type("FloorDiv", operator_type, NULL, 0);
       
   845         if (!FloorDiv_type) return 0;
       
   846         FloorDiv_singleton = PyType_GenericNew(FloorDiv_type, NULL, NULL);
       
   847         if (!FloorDiv_singleton) return 0;
       
   848         unaryop_type = make_type("unaryop", &AST_type, NULL, 0);
       
   849         if (!unaryop_type) return 0;
       
   850         if (!add_attributes(unaryop_type, NULL, 0)) return 0;
       
   851         Invert_type = make_type("Invert", unaryop_type, NULL, 0);
       
   852         if (!Invert_type) return 0;
       
   853         Invert_singleton = PyType_GenericNew(Invert_type, NULL, NULL);
       
   854         if (!Invert_singleton) return 0;
       
   855         Not_type = make_type("Not", unaryop_type, NULL, 0);
       
   856         if (!Not_type) return 0;
       
   857         Not_singleton = PyType_GenericNew(Not_type, NULL, NULL);
       
   858         if (!Not_singleton) return 0;
       
   859         UAdd_type = make_type("UAdd", unaryop_type, NULL, 0);
       
   860         if (!UAdd_type) return 0;
       
   861         UAdd_singleton = PyType_GenericNew(UAdd_type, NULL, NULL);
       
   862         if (!UAdd_singleton) return 0;
       
   863         USub_type = make_type("USub", unaryop_type, NULL, 0);
       
   864         if (!USub_type) return 0;
       
   865         USub_singleton = PyType_GenericNew(USub_type, NULL, NULL);
       
   866         if (!USub_singleton) return 0;
       
   867         cmpop_type = make_type("cmpop", &AST_type, NULL, 0);
       
   868         if (!cmpop_type) return 0;
       
   869         if (!add_attributes(cmpop_type, NULL, 0)) return 0;
       
   870         Eq_type = make_type("Eq", cmpop_type, NULL, 0);
       
   871         if (!Eq_type) return 0;
       
   872         Eq_singleton = PyType_GenericNew(Eq_type, NULL, NULL);
       
   873         if (!Eq_singleton) return 0;
       
   874         NotEq_type = make_type("NotEq", cmpop_type, NULL, 0);
       
   875         if (!NotEq_type) return 0;
       
   876         NotEq_singleton = PyType_GenericNew(NotEq_type, NULL, NULL);
       
   877         if (!NotEq_singleton) return 0;
       
   878         Lt_type = make_type("Lt", cmpop_type, NULL, 0);
       
   879         if (!Lt_type) return 0;
       
   880         Lt_singleton = PyType_GenericNew(Lt_type, NULL, NULL);
       
   881         if (!Lt_singleton) return 0;
       
   882         LtE_type = make_type("LtE", cmpop_type, NULL, 0);
       
   883         if (!LtE_type) return 0;
       
   884         LtE_singleton = PyType_GenericNew(LtE_type, NULL, NULL);
       
   885         if (!LtE_singleton) return 0;
       
   886         Gt_type = make_type("Gt", cmpop_type, NULL, 0);
       
   887         if (!Gt_type) return 0;
       
   888         Gt_singleton = PyType_GenericNew(Gt_type, NULL, NULL);
       
   889         if (!Gt_singleton) return 0;
       
   890         GtE_type = make_type("GtE", cmpop_type, NULL, 0);
       
   891         if (!GtE_type) return 0;
       
   892         GtE_singleton = PyType_GenericNew(GtE_type, NULL, NULL);
       
   893         if (!GtE_singleton) return 0;
       
   894         Is_type = make_type("Is", cmpop_type, NULL, 0);
       
   895         if (!Is_type) return 0;
       
   896         Is_singleton = PyType_GenericNew(Is_type, NULL, NULL);
       
   897         if (!Is_singleton) return 0;
       
   898         IsNot_type = make_type("IsNot", cmpop_type, NULL, 0);
       
   899         if (!IsNot_type) return 0;
       
   900         IsNot_singleton = PyType_GenericNew(IsNot_type, NULL, NULL);
       
   901         if (!IsNot_singleton) return 0;
       
   902         In_type = make_type("In", cmpop_type, NULL, 0);
       
   903         if (!In_type) return 0;
       
   904         In_singleton = PyType_GenericNew(In_type, NULL, NULL);
       
   905         if (!In_singleton) return 0;
       
   906         NotIn_type = make_type("NotIn", cmpop_type, NULL, 0);
       
   907         if (!NotIn_type) return 0;
       
   908         NotIn_singleton = PyType_GenericNew(NotIn_type, NULL, NULL);
       
   909         if (!NotIn_singleton) return 0;
       
   910         comprehension_type = make_type("comprehension", &AST_type,
       
   911                                        comprehension_fields, 3);
       
   912         if (!comprehension_type) return 0;
       
   913         excepthandler_type = make_type("excepthandler", &AST_type, NULL, 0);
       
   914         if (!excepthandler_type) return 0;
       
   915         if (!add_attributes(excepthandler_type, excepthandler_attributes, 2))
       
   916             return 0;
       
   917         ExceptHandler_type = make_type("ExceptHandler", excepthandler_type,
       
   918                                        ExceptHandler_fields, 3);
       
   919         if (!ExceptHandler_type) return 0;
       
   920         arguments_type = make_type("arguments", &AST_type, arguments_fields, 4);
       
   921         if (!arguments_type) return 0;
       
   922         keyword_type = make_type("keyword", &AST_type, keyword_fields, 2);
       
   923         if (!keyword_type) return 0;
       
   924         alias_type = make_type("alias", &AST_type, alias_fields, 2);
       
   925         if (!alias_type) return 0;
       
   926         initialized = 1;
       
   927         return 1;
       
   928 }
       
   929 
       
   930 static int obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena);
       
   931 static int obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena);
       
   932 static int obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena);
       
   933 static int obj2ast_expr_context(PyObject* obj, expr_context_ty* out, PyArena*
       
   934                                 arena);
       
   935 static int obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena);
       
   936 static int obj2ast_boolop(PyObject* obj, boolop_ty* out, PyArena* arena);
       
   937 static int obj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena);
       
   938 static int obj2ast_unaryop(PyObject* obj, unaryop_ty* out, PyArena* arena);
       
   939 static int obj2ast_cmpop(PyObject* obj, cmpop_ty* out, PyArena* arena);
       
   940 static int obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena*
       
   941                                  arena);
       
   942 static int obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena*
       
   943                                  arena);
       
   944 static int obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena);
       
   945 static int obj2ast_keyword(PyObject* obj, keyword_ty* out, PyArena* arena);
       
   946 static int obj2ast_alias(PyObject* obj, alias_ty* out, PyArena* arena);
       
   947 
       
   948 mod_ty
       
   949 Module(asdl_seq * body, PyArena *arena)
       
   950 {
       
   951         mod_ty p;
       
   952         p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
       
   953         if (!p)
       
   954                 return NULL;
       
   955         p->kind = Module_kind;
       
   956         p->v.Module.body = body;
       
   957         return p;
       
   958 }
       
   959 
       
   960 mod_ty
       
   961 Interactive(asdl_seq * body, PyArena *arena)
       
   962 {
       
   963         mod_ty p;
       
   964         p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
       
   965         if (!p)
       
   966                 return NULL;
       
   967         p->kind = Interactive_kind;
       
   968         p->v.Interactive.body = body;
       
   969         return p;
       
   970 }
       
   971 
       
   972 mod_ty
       
   973 Expression(expr_ty body, PyArena *arena)
       
   974 {
       
   975         mod_ty p;
       
   976         if (!body) {
       
   977                 PyErr_SetString(PyExc_ValueError,
       
   978                                 "field body is required for Expression");
       
   979                 return NULL;
       
   980         }
       
   981         p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
       
   982         if (!p)
       
   983                 return NULL;
       
   984         p->kind = Expression_kind;
       
   985         p->v.Expression.body = body;
       
   986         return p;
       
   987 }
       
   988 
       
   989 mod_ty
       
   990 Suite(asdl_seq * body, PyArena *arena)
       
   991 {
       
   992         mod_ty p;
       
   993         p = (mod_ty)PyArena_Malloc(arena, sizeof(*p));
       
   994         if (!p)
       
   995                 return NULL;
       
   996         p->kind = Suite_kind;
       
   997         p->v.Suite.body = body;
       
   998         return p;
       
   999 }
       
  1000 
       
  1001 stmt_ty
       
  1002 FunctionDef(identifier name, arguments_ty args, asdl_seq * body, asdl_seq *
       
  1003             decorator_list, int lineno, int col_offset, PyArena *arena)
       
  1004 {
       
  1005         stmt_ty p;
       
  1006         if (!name) {
       
  1007                 PyErr_SetString(PyExc_ValueError,
       
  1008                                 "field name is required for FunctionDef");
       
  1009                 return NULL;
       
  1010         }
       
  1011         if (!args) {
       
  1012                 PyErr_SetString(PyExc_ValueError,
       
  1013                                 "field args is required for FunctionDef");
       
  1014                 return NULL;
       
  1015         }
       
  1016         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1017         if (!p)
       
  1018                 return NULL;
       
  1019         p->kind = FunctionDef_kind;
       
  1020         p->v.FunctionDef.name = name;
       
  1021         p->v.FunctionDef.args = args;
       
  1022         p->v.FunctionDef.body = body;
       
  1023         p->v.FunctionDef.decorator_list = decorator_list;
       
  1024         p->lineno = lineno;
       
  1025         p->col_offset = col_offset;
       
  1026         return p;
       
  1027 }
       
  1028 
       
  1029 stmt_ty
       
  1030 ClassDef(identifier name, asdl_seq * bases, asdl_seq * body, asdl_seq *
       
  1031          decorator_list, int lineno, int col_offset, PyArena *arena)
       
  1032 {
       
  1033         stmt_ty p;
       
  1034         if (!name) {
       
  1035                 PyErr_SetString(PyExc_ValueError,
       
  1036                                 "field name is required for ClassDef");
       
  1037                 return NULL;
       
  1038         }
       
  1039         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1040         if (!p)
       
  1041                 return NULL;
       
  1042         p->kind = ClassDef_kind;
       
  1043         p->v.ClassDef.name = name;
       
  1044         p->v.ClassDef.bases = bases;
       
  1045         p->v.ClassDef.body = body;
       
  1046         p->v.ClassDef.decorator_list = decorator_list;
       
  1047         p->lineno = lineno;
       
  1048         p->col_offset = col_offset;
       
  1049         return p;
       
  1050 }
       
  1051 
       
  1052 stmt_ty
       
  1053 Return(expr_ty value, int lineno, int col_offset, PyArena *arena)
       
  1054 {
       
  1055         stmt_ty p;
       
  1056         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1057         if (!p)
       
  1058                 return NULL;
       
  1059         p->kind = Return_kind;
       
  1060         p->v.Return.value = value;
       
  1061         p->lineno = lineno;
       
  1062         p->col_offset = col_offset;
       
  1063         return p;
       
  1064 }
       
  1065 
       
  1066 stmt_ty
       
  1067 Delete(asdl_seq * targets, int lineno, int col_offset, PyArena *arena)
       
  1068 {
       
  1069         stmt_ty p;
       
  1070         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1071         if (!p)
       
  1072                 return NULL;
       
  1073         p->kind = Delete_kind;
       
  1074         p->v.Delete.targets = targets;
       
  1075         p->lineno = lineno;
       
  1076         p->col_offset = col_offset;
       
  1077         return p;
       
  1078 }
       
  1079 
       
  1080 stmt_ty
       
  1081 Assign(asdl_seq * targets, expr_ty value, int lineno, int col_offset, PyArena
       
  1082        *arena)
       
  1083 {
       
  1084         stmt_ty p;
       
  1085         if (!value) {
       
  1086                 PyErr_SetString(PyExc_ValueError,
       
  1087                                 "field value is required for Assign");
       
  1088                 return NULL;
       
  1089         }
       
  1090         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1091         if (!p)
       
  1092                 return NULL;
       
  1093         p->kind = Assign_kind;
       
  1094         p->v.Assign.targets = targets;
       
  1095         p->v.Assign.value = value;
       
  1096         p->lineno = lineno;
       
  1097         p->col_offset = col_offset;
       
  1098         return p;
       
  1099 }
       
  1100 
       
  1101 stmt_ty
       
  1102 AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int
       
  1103           col_offset, PyArena *arena)
       
  1104 {
       
  1105         stmt_ty p;
       
  1106         if (!target) {
       
  1107                 PyErr_SetString(PyExc_ValueError,
       
  1108                                 "field target is required for AugAssign");
       
  1109                 return NULL;
       
  1110         }
       
  1111         if (!op) {
       
  1112                 PyErr_SetString(PyExc_ValueError,
       
  1113                                 "field op is required for AugAssign");
       
  1114                 return NULL;
       
  1115         }
       
  1116         if (!value) {
       
  1117                 PyErr_SetString(PyExc_ValueError,
       
  1118                                 "field value is required for AugAssign");
       
  1119                 return NULL;
       
  1120         }
       
  1121         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1122         if (!p)
       
  1123                 return NULL;
       
  1124         p->kind = AugAssign_kind;
       
  1125         p->v.AugAssign.target = target;
       
  1126         p->v.AugAssign.op = op;
       
  1127         p->v.AugAssign.value = value;
       
  1128         p->lineno = lineno;
       
  1129         p->col_offset = col_offset;
       
  1130         return p;
       
  1131 }
       
  1132 
       
  1133 stmt_ty
       
  1134 Print(expr_ty dest, asdl_seq * values, bool nl, int lineno, int col_offset,
       
  1135       PyArena *arena)
       
  1136 {
       
  1137         stmt_ty p;
       
  1138         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1139         if (!p)
       
  1140                 return NULL;
       
  1141         p->kind = Print_kind;
       
  1142         p->v.Print.dest = dest;
       
  1143         p->v.Print.values = values;
       
  1144         p->v.Print.nl = nl;
       
  1145         p->lineno = lineno;
       
  1146         p->col_offset = col_offset;
       
  1147         return p;
       
  1148 }
       
  1149 
       
  1150 stmt_ty
       
  1151 For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse, int
       
  1152     lineno, int col_offset, PyArena *arena)
       
  1153 {
       
  1154         stmt_ty p;
       
  1155         if (!target) {
       
  1156                 PyErr_SetString(PyExc_ValueError,
       
  1157                                 "field target is required for For");
       
  1158                 return NULL;
       
  1159         }
       
  1160         if (!iter) {
       
  1161                 PyErr_SetString(PyExc_ValueError,
       
  1162                                 "field iter is required for For");
       
  1163                 return NULL;
       
  1164         }
       
  1165         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1166         if (!p)
       
  1167                 return NULL;
       
  1168         p->kind = For_kind;
       
  1169         p->v.For.target = target;
       
  1170         p->v.For.iter = iter;
       
  1171         p->v.For.body = body;
       
  1172         p->v.For.orelse = orelse;
       
  1173         p->lineno = lineno;
       
  1174         p->col_offset = col_offset;
       
  1175         return p;
       
  1176 }
       
  1177 
       
  1178 stmt_ty
       
  1179 While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int
       
  1180       col_offset, PyArena *arena)
       
  1181 {
       
  1182         stmt_ty p;
       
  1183         if (!test) {
       
  1184                 PyErr_SetString(PyExc_ValueError,
       
  1185                                 "field test is required for While");
       
  1186                 return NULL;
       
  1187         }
       
  1188         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1189         if (!p)
       
  1190                 return NULL;
       
  1191         p->kind = While_kind;
       
  1192         p->v.While.test = test;
       
  1193         p->v.While.body = body;
       
  1194         p->v.While.orelse = orelse;
       
  1195         p->lineno = lineno;
       
  1196         p->col_offset = col_offset;
       
  1197         return p;
       
  1198 }
       
  1199 
       
  1200 stmt_ty
       
  1201 If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, int
       
  1202    col_offset, PyArena *arena)
       
  1203 {
       
  1204         stmt_ty p;
       
  1205         if (!test) {
       
  1206                 PyErr_SetString(PyExc_ValueError,
       
  1207                                 "field test is required for If");
       
  1208                 return NULL;
       
  1209         }
       
  1210         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1211         if (!p)
       
  1212                 return NULL;
       
  1213         p->kind = If_kind;
       
  1214         p->v.If.test = test;
       
  1215         p->v.If.body = body;
       
  1216         p->v.If.orelse = orelse;
       
  1217         p->lineno = lineno;
       
  1218         p->col_offset = col_offset;
       
  1219         return p;
       
  1220 }
       
  1221 
       
  1222 stmt_ty
       
  1223 With(expr_ty context_expr, expr_ty optional_vars, asdl_seq * body, int lineno,
       
  1224      int col_offset, PyArena *arena)
       
  1225 {
       
  1226         stmt_ty p;
       
  1227         if (!context_expr) {
       
  1228                 PyErr_SetString(PyExc_ValueError,
       
  1229                                 "field context_expr is required for With");
       
  1230                 return NULL;
       
  1231         }
       
  1232         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1233         if (!p)
       
  1234                 return NULL;
       
  1235         p->kind = With_kind;
       
  1236         p->v.With.context_expr = context_expr;
       
  1237         p->v.With.optional_vars = optional_vars;
       
  1238         p->v.With.body = body;
       
  1239         p->lineno = lineno;
       
  1240         p->col_offset = col_offset;
       
  1241         return p;
       
  1242 }
       
  1243 
       
  1244 stmt_ty
       
  1245 Raise(expr_ty type, expr_ty inst, expr_ty tback, int lineno, int col_offset,
       
  1246       PyArena *arena)
       
  1247 {
       
  1248         stmt_ty p;
       
  1249         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1250         if (!p)
       
  1251                 return NULL;
       
  1252         p->kind = Raise_kind;
       
  1253         p->v.Raise.type = type;
       
  1254         p->v.Raise.inst = inst;
       
  1255         p->v.Raise.tback = tback;
       
  1256         p->lineno = lineno;
       
  1257         p->col_offset = col_offset;
       
  1258         return p;
       
  1259 }
       
  1260 
       
  1261 stmt_ty
       
  1262 TryExcept(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse, int lineno,
       
  1263           int col_offset, PyArena *arena)
       
  1264 {
       
  1265         stmt_ty p;
       
  1266         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1267         if (!p)
       
  1268                 return NULL;
       
  1269         p->kind = TryExcept_kind;
       
  1270         p->v.TryExcept.body = body;
       
  1271         p->v.TryExcept.handlers = handlers;
       
  1272         p->v.TryExcept.orelse = orelse;
       
  1273         p->lineno = lineno;
       
  1274         p->col_offset = col_offset;
       
  1275         return p;
       
  1276 }
       
  1277 
       
  1278 stmt_ty
       
  1279 TryFinally(asdl_seq * body, asdl_seq * finalbody, int lineno, int col_offset,
       
  1280            PyArena *arena)
       
  1281 {
       
  1282         stmt_ty p;
       
  1283         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1284         if (!p)
       
  1285                 return NULL;
       
  1286         p->kind = TryFinally_kind;
       
  1287         p->v.TryFinally.body = body;
       
  1288         p->v.TryFinally.finalbody = finalbody;
       
  1289         p->lineno = lineno;
       
  1290         p->col_offset = col_offset;
       
  1291         return p;
       
  1292 }
       
  1293 
       
  1294 stmt_ty
       
  1295 Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, PyArena *arena)
       
  1296 {
       
  1297         stmt_ty p;
       
  1298         if (!test) {
       
  1299                 PyErr_SetString(PyExc_ValueError,
       
  1300                                 "field test is required for Assert");
       
  1301                 return NULL;
       
  1302         }
       
  1303         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1304         if (!p)
       
  1305                 return NULL;
       
  1306         p->kind = Assert_kind;
       
  1307         p->v.Assert.test = test;
       
  1308         p->v.Assert.msg = msg;
       
  1309         p->lineno = lineno;
       
  1310         p->col_offset = col_offset;
       
  1311         return p;
       
  1312 }
       
  1313 
       
  1314 stmt_ty
       
  1315 Import(asdl_seq * names, int lineno, int col_offset, PyArena *arena)
       
  1316 {
       
  1317         stmt_ty p;
       
  1318         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1319         if (!p)
       
  1320                 return NULL;
       
  1321         p->kind = Import_kind;
       
  1322         p->v.Import.names = names;
       
  1323         p->lineno = lineno;
       
  1324         p->col_offset = col_offset;
       
  1325         return p;
       
  1326 }
       
  1327 
       
  1328 stmt_ty
       
  1329 ImportFrom(identifier module, asdl_seq * names, int level, int lineno, int
       
  1330            col_offset, PyArena *arena)
       
  1331 {
       
  1332         stmt_ty p;
       
  1333         if (!module) {
       
  1334                 PyErr_SetString(PyExc_ValueError,
       
  1335                                 "field module is required for ImportFrom");
       
  1336                 return NULL;
       
  1337         }
       
  1338         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1339         if (!p)
       
  1340                 return NULL;
       
  1341         p->kind = ImportFrom_kind;
       
  1342         p->v.ImportFrom.module = module;
       
  1343         p->v.ImportFrom.names = names;
       
  1344         p->v.ImportFrom.level = level;
       
  1345         p->lineno = lineno;
       
  1346         p->col_offset = col_offset;
       
  1347         return p;
       
  1348 }
       
  1349 
       
  1350 stmt_ty
       
  1351 Exec(expr_ty body, expr_ty globals, expr_ty locals, int lineno, int col_offset,
       
  1352      PyArena *arena)
       
  1353 {
       
  1354         stmt_ty p;
       
  1355         if (!body) {
       
  1356                 PyErr_SetString(PyExc_ValueError,
       
  1357                                 "field body is required for Exec");
       
  1358                 return NULL;
       
  1359         }
       
  1360         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1361         if (!p)
       
  1362                 return NULL;
       
  1363         p->kind = Exec_kind;
       
  1364         p->v.Exec.body = body;
       
  1365         p->v.Exec.globals = globals;
       
  1366         p->v.Exec.locals = locals;
       
  1367         p->lineno = lineno;
       
  1368         p->col_offset = col_offset;
       
  1369         return p;
       
  1370 }
       
  1371 
       
  1372 stmt_ty
       
  1373 Global(asdl_seq * names, int lineno, int col_offset, PyArena *arena)
       
  1374 {
       
  1375         stmt_ty p;
       
  1376         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1377         if (!p)
       
  1378                 return NULL;
       
  1379         p->kind = Global_kind;
       
  1380         p->v.Global.names = names;
       
  1381         p->lineno = lineno;
       
  1382         p->col_offset = col_offset;
       
  1383         return p;
       
  1384 }
       
  1385 
       
  1386 stmt_ty
       
  1387 Expr(expr_ty value, int lineno, int col_offset, PyArena *arena)
       
  1388 {
       
  1389         stmt_ty p;
       
  1390         if (!value) {
       
  1391                 PyErr_SetString(PyExc_ValueError,
       
  1392                                 "field value is required for Expr");
       
  1393                 return NULL;
       
  1394         }
       
  1395         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1396         if (!p)
       
  1397                 return NULL;
       
  1398         p->kind = Expr_kind;
       
  1399         p->v.Expr.value = value;
       
  1400         p->lineno = lineno;
       
  1401         p->col_offset = col_offset;
       
  1402         return p;
       
  1403 }
       
  1404 
       
  1405 stmt_ty
       
  1406 Pass(int lineno, int col_offset, PyArena *arena)
       
  1407 {
       
  1408         stmt_ty p;
       
  1409         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1410         if (!p)
       
  1411                 return NULL;
       
  1412         p->kind = Pass_kind;
       
  1413         p->lineno = lineno;
       
  1414         p->col_offset = col_offset;
       
  1415         return p;
       
  1416 }
       
  1417 
       
  1418 stmt_ty
       
  1419 Break(int lineno, int col_offset, PyArena *arena)
       
  1420 {
       
  1421         stmt_ty p;
       
  1422         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1423         if (!p)
       
  1424                 return NULL;
       
  1425         p->kind = Break_kind;
       
  1426         p->lineno = lineno;
       
  1427         p->col_offset = col_offset;
       
  1428         return p;
       
  1429 }
       
  1430 
       
  1431 stmt_ty
       
  1432 Continue(int lineno, int col_offset, PyArena *arena)
       
  1433 {
       
  1434         stmt_ty p;
       
  1435         p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1436         if (!p)
       
  1437                 return NULL;
       
  1438         p->kind = Continue_kind;
       
  1439         p->lineno = lineno;
       
  1440         p->col_offset = col_offset;
       
  1441         return p;
       
  1442 }
       
  1443 
       
  1444 expr_ty
       
  1445 BoolOp(boolop_ty op, asdl_seq * values, int lineno, int col_offset, PyArena
       
  1446        *arena)
       
  1447 {
       
  1448         expr_ty p;
       
  1449         if (!op) {
       
  1450                 PyErr_SetString(PyExc_ValueError,
       
  1451                                 "field op is required for BoolOp");
       
  1452                 return NULL;
       
  1453         }
       
  1454         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1455         if (!p)
       
  1456                 return NULL;
       
  1457         p->kind = BoolOp_kind;
       
  1458         p->v.BoolOp.op = op;
       
  1459         p->v.BoolOp.values = values;
       
  1460         p->lineno = lineno;
       
  1461         p->col_offset = col_offset;
       
  1462         return p;
       
  1463 }
       
  1464 
       
  1465 expr_ty
       
  1466 BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int col_offset,
       
  1467       PyArena *arena)
       
  1468 {
       
  1469         expr_ty p;
       
  1470         if (!left) {
       
  1471                 PyErr_SetString(PyExc_ValueError,
       
  1472                                 "field left is required for BinOp");
       
  1473                 return NULL;
       
  1474         }
       
  1475         if (!op) {
       
  1476                 PyErr_SetString(PyExc_ValueError,
       
  1477                                 "field op is required for BinOp");
       
  1478                 return NULL;
       
  1479         }
       
  1480         if (!right) {
       
  1481                 PyErr_SetString(PyExc_ValueError,
       
  1482                                 "field right is required for BinOp");
       
  1483                 return NULL;
       
  1484         }
       
  1485         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1486         if (!p)
       
  1487                 return NULL;
       
  1488         p->kind = BinOp_kind;
       
  1489         p->v.BinOp.left = left;
       
  1490         p->v.BinOp.op = op;
       
  1491         p->v.BinOp.right = right;
       
  1492         p->lineno = lineno;
       
  1493         p->col_offset = col_offset;
       
  1494         return p;
       
  1495 }
       
  1496 
       
  1497 expr_ty
       
  1498 UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, PyArena
       
  1499         *arena)
       
  1500 {
       
  1501         expr_ty p;
       
  1502         if (!op) {
       
  1503                 PyErr_SetString(PyExc_ValueError,
       
  1504                                 "field op is required for UnaryOp");
       
  1505                 return NULL;
       
  1506         }
       
  1507         if (!operand) {
       
  1508                 PyErr_SetString(PyExc_ValueError,
       
  1509                                 "field operand is required for UnaryOp");
       
  1510                 return NULL;
       
  1511         }
       
  1512         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1513         if (!p)
       
  1514                 return NULL;
       
  1515         p->kind = UnaryOp_kind;
       
  1516         p->v.UnaryOp.op = op;
       
  1517         p->v.UnaryOp.operand = operand;
       
  1518         p->lineno = lineno;
       
  1519         p->col_offset = col_offset;
       
  1520         return p;
       
  1521 }
       
  1522 
       
  1523 expr_ty
       
  1524 Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, PyArena
       
  1525        *arena)
       
  1526 {
       
  1527         expr_ty p;
       
  1528         if (!args) {
       
  1529                 PyErr_SetString(PyExc_ValueError,
       
  1530                                 "field args is required for Lambda");
       
  1531                 return NULL;
       
  1532         }
       
  1533         if (!body) {
       
  1534                 PyErr_SetString(PyExc_ValueError,
       
  1535                                 "field body is required for Lambda");
       
  1536                 return NULL;
       
  1537         }
       
  1538         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1539         if (!p)
       
  1540                 return NULL;
       
  1541         p->kind = Lambda_kind;
       
  1542         p->v.Lambda.args = args;
       
  1543         p->v.Lambda.body = body;
       
  1544         p->lineno = lineno;
       
  1545         p->col_offset = col_offset;
       
  1546         return p;
       
  1547 }
       
  1548 
       
  1549 expr_ty
       
  1550 IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int col_offset,
       
  1551       PyArena *arena)
       
  1552 {
       
  1553         expr_ty p;
       
  1554         if (!test) {
       
  1555                 PyErr_SetString(PyExc_ValueError,
       
  1556                                 "field test is required for IfExp");
       
  1557                 return NULL;
       
  1558         }
       
  1559         if (!body) {
       
  1560                 PyErr_SetString(PyExc_ValueError,
       
  1561                                 "field body is required for IfExp");
       
  1562                 return NULL;
       
  1563         }
       
  1564         if (!orelse) {
       
  1565                 PyErr_SetString(PyExc_ValueError,
       
  1566                                 "field orelse is required for IfExp");
       
  1567                 return NULL;
       
  1568         }
       
  1569         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1570         if (!p)
       
  1571                 return NULL;
       
  1572         p->kind = IfExp_kind;
       
  1573         p->v.IfExp.test = test;
       
  1574         p->v.IfExp.body = body;
       
  1575         p->v.IfExp.orelse = orelse;
       
  1576         p->lineno = lineno;
       
  1577         p->col_offset = col_offset;
       
  1578         return p;
       
  1579 }
       
  1580 
       
  1581 expr_ty
       
  1582 Dict(asdl_seq * keys, asdl_seq * values, int lineno, int col_offset, PyArena
       
  1583      *arena)
       
  1584 {
       
  1585         expr_ty p;
       
  1586         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1587         if (!p)
       
  1588                 return NULL;
       
  1589         p->kind = Dict_kind;
       
  1590         p->v.Dict.keys = keys;
       
  1591         p->v.Dict.values = values;
       
  1592         p->lineno = lineno;
       
  1593         p->col_offset = col_offset;
       
  1594         return p;
       
  1595 }
       
  1596 
       
  1597 expr_ty
       
  1598 ListComp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset,
       
  1599          PyArena *arena)
       
  1600 {
       
  1601         expr_ty p;
       
  1602         if (!elt) {
       
  1603                 PyErr_SetString(PyExc_ValueError,
       
  1604                                 "field elt is required for ListComp");
       
  1605                 return NULL;
       
  1606         }
       
  1607         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1608         if (!p)
       
  1609                 return NULL;
       
  1610         p->kind = ListComp_kind;
       
  1611         p->v.ListComp.elt = elt;
       
  1612         p->v.ListComp.generators = generators;
       
  1613         p->lineno = lineno;
       
  1614         p->col_offset = col_offset;
       
  1615         return p;
       
  1616 }
       
  1617 
       
  1618 expr_ty
       
  1619 GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, int col_offset,
       
  1620              PyArena *arena)
       
  1621 {
       
  1622         expr_ty p;
       
  1623         if (!elt) {
       
  1624                 PyErr_SetString(PyExc_ValueError,
       
  1625                                 "field elt is required for GeneratorExp");
       
  1626                 return NULL;
       
  1627         }
       
  1628         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1629         if (!p)
       
  1630                 return NULL;
       
  1631         p->kind = GeneratorExp_kind;
       
  1632         p->v.GeneratorExp.elt = elt;
       
  1633         p->v.GeneratorExp.generators = generators;
       
  1634         p->lineno = lineno;
       
  1635         p->col_offset = col_offset;
       
  1636         return p;
       
  1637 }
       
  1638 
       
  1639 expr_ty
       
  1640 Yield(expr_ty value, int lineno, int col_offset, PyArena *arena)
       
  1641 {
       
  1642         expr_ty p;
       
  1643         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1644         if (!p)
       
  1645                 return NULL;
       
  1646         p->kind = Yield_kind;
       
  1647         p->v.Yield.value = value;
       
  1648         p->lineno = lineno;
       
  1649         p->col_offset = col_offset;
       
  1650         return p;
       
  1651 }
       
  1652 
       
  1653 expr_ty
       
  1654 Compare(expr_ty left, asdl_int_seq * ops, asdl_seq * comparators, int lineno,
       
  1655         int col_offset, PyArena *arena)
       
  1656 {
       
  1657         expr_ty p;
       
  1658         if (!left) {
       
  1659                 PyErr_SetString(PyExc_ValueError,
       
  1660                                 "field left is required for Compare");
       
  1661                 return NULL;
       
  1662         }
       
  1663         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1664         if (!p)
       
  1665                 return NULL;
       
  1666         p->kind = Compare_kind;
       
  1667         p->v.Compare.left = left;
       
  1668         p->v.Compare.ops = ops;
       
  1669         p->v.Compare.comparators = comparators;
       
  1670         p->lineno = lineno;
       
  1671         p->col_offset = col_offset;
       
  1672         return p;
       
  1673 }
       
  1674 
       
  1675 expr_ty
       
  1676 Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, expr_ty starargs,
       
  1677      expr_ty kwargs, int lineno, int col_offset, PyArena *arena)
       
  1678 {
       
  1679         expr_ty p;
       
  1680         if (!func) {
       
  1681                 PyErr_SetString(PyExc_ValueError,
       
  1682                                 "field func is required for Call");
       
  1683                 return NULL;
       
  1684         }
       
  1685         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1686         if (!p)
       
  1687                 return NULL;
       
  1688         p->kind = Call_kind;
       
  1689         p->v.Call.func = func;
       
  1690         p->v.Call.args = args;
       
  1691         p->v.Call.keywords = keywords;
       
  1692         p->v.Call.starargs = starargs;
       
  1693         p->v.Call.kwargs = kwargs;
       
  1694         p->lineno = lineno;
       
  1695         p->col_offset = col_offset;
       
  1696         return p;
       
  1697 }
       
  1698 
       
  1699 expr_ty
       
  1700 Repr(expr_ty value, int lineno, int col_offset, PyArena *arena)
       
  1701 {
       
  1702         expr_ty p;
       
  1703         if (!value) {
       
  1704                 PyErr_SetString(PyExc_ValueError,
       
  1705                                 "field value is required for Repr");
       
  1706                 return NULL;
       
  1707         }
       
  1708         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1709         if (!p)
       
  1710                 return NULL;
       
  1711         p->kind = Repr_kind;
       
  1712         p->v.Repr.value = value;
       
  1713         p->lineno = lineno;
       
  1714         p->col_offset = col_offset;
       
  1715         return p;
       
  1716 }
       
  1717 
       
  1718 expr_ty
       
  1719 Num(object n, int lineno, int col_offset, PyArena *arena)
       
  1720 {
       
  1721         expr_ty p;
       
  1722         if (!n) {
       
  1723                 PyErr_SetString(PyExc_ValueError,
       
  1724                                 "field n is required for Num");
       
  1725                 return NULL;
       
  1726         }
       
  1727         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1728         if (!p)
       
  1729                 return NULL;
       
  1730         p->kind = Num_kind;
       
  1731         p->v.Num.n = n;
       
  1732         p->lineno = lineno;
       
  1733         p->col_offset = col_offset;
       
  1734         return p;
       
  1735 }
       
  1736 
       
  1737 expr_ty
       
  1738 Str(string s, int lineno, int col_offset, PyArena *arena)
       
  1739 {
       
  1740         expr_ty p;
       
  1741         if (!s) {
       
  1742                 PyErr_SetString(PyExc_ValueError,
       
  1743                                 "field s is required for Str");
       
  1744                 return NULL;
       
  1745         }
       
  1746         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1747         if (!p)
       
  1748                 return NULL;
       
  1749         p->kind = Str_kind;
       
  1750         p->v.Str.s = s;
       
  1751         p->lineno = lineno;
       
  1752         p->col_offset = col_offset;
       
  1753         return p;
       
  1754 }
       
  1755 
       
  1756 expr_ty
       
  1757 Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int lineno, int
       
  1758           col_offset, PyArena *arena)
       
  1759 {
       
  1760         expr_ty p;
       
  1761         if (!value) {
       
  1762                 PyErr_SetString(PyExc_ValueError,
       
  1763                                 "field value is required for Attribute");
       
  1764                 return NULL;
       
  1765         }
       
  1766         if (!attr) {
       
  1767                 PyErr_SetString(PyExc_ValueError,
       
  1768                                 "field attr is required for Attribute");
       
  1769                 return NULL;
       
  1770         }
       
  1771         if (!ctx) {
       
  1772                 PyErr_SetString(PyExc_ValueError,
       
  1773                                 "field ctx is required for Attribute");
       
  1774                 return NULL;
       
  1775         }
       
  1776         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1777         if (!p)
       
  1778                 return NULL;
       
  1779         p->kind = Attribute_kind;
       
  1780         p->v.Attribute.value = value;
       
  1781         p->v.Attribute.attr = attr;
       
  1782         p->v.Attribute.ctx = ctx;
       
  1783         p->lineno = lineno;
       
  1784         p->col_offset = col_offset;
       
  1785         return p;
       
  1786 }
       
  1787 
       
  1788 expr_ty
       
  1789 Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int lineno, int
       
  1790           col_offset, PyArena *arena)
       
  1791 {
       
  1792         expr_ty p;
       
  1793         if (!value) {
       
  1794                 PyErr_SetString(PyExc_ValueError,
       
  1795                                 "field value is required for Subscript");
       
  1796                 return NULL;
       
  1797         }
       
  1798         if (!slice) {
       
  1799                 PyErr_SetString(PyExc_ValueError,
       
  1800                                 "field slice is required for Subscript");
       
  1801                 return NULL;
       
  1802         }
       
  1803         if (!ctx) {
       
  1804                 PyErr_SetString(PyExc_ValueError,
       
  1805                                 "field ctx is required for Subscript");
       
  1806                 return NULL;
       
  1807         }
       
  1808         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1809         if (!p)
       
  1810                 return NULL;
       
  1811         p->kind = Subscript_kind;
       
  1812         p->v.Subscript.value = value;
       
  1813         p->v.Subscript.slice = slice;
       
  1814         p->v.Subscript.ctx = ctx;
       
  1815         p->lineno = lineno;
       
  1816         p->col_offset = col_offset;
       
  1817         return p;
       
  1818 }
       
  1819 
       
  1820 expr_ty
       
  1821 Name(identifier id, expr_context_ty ctx, int lineno, int col_offset, PyArena
       
  1822      *arena)
       
  1823 {
       
  1824         expr_ty p;
       
  1825         if (!id) {
       
  1826                 PyErr_SetString(PyExc_ValueError,
       
  1827                                 "field id is required for Name");
       
  1828                 return NULL;
       
  1829         }
       
  1830         if (!ctx) {
       
  1831                 PyErr_SetString(PyExc_ValueError,
       
  1832                                 "field ctx is required for Name");
       
  1833                 return NULL;
       
  1834         }
       
  1835         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1836         if (!p)
       
  1837                 return NULL;
       
  1838         p->kind = Name_kind;
       
  1839         p->v.Name.id = id;
       
  1840         p->v.Name.ctx = ctx;
       
  1841         p->lineno = lineno;
       
  1842         p->col_offset = col_offset;
       
  1843         return p;
       
  1844 }
       
  1845 
       
  1846 expr_ty
       
  1847 List(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, PyArena
       
  1848      *arena)
       
  1849 {
       
  1850         expr_ty p;
       
  1851         if (!ctx) {
       
  1852                 PyErr_SetString(PyExc_ValueError,
       
  1853                                 "field ctx is required for List");
       
  1854                 return NULL;
       
  1855         }
       
  1856         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1857         if (!p)
       
  1858                 return NULL;
       
  1859         p->kind = List_kind;
       
  1860         p->v.List.elts = elts;
       
  1861         p->v.List.ctx = ctx;
       
  1862         p->lineno = lineno;
       
  1863         p->col_offset = col_offset;
       
  1864         return p;
       
  1865 }
       
  1866 
       
  1867 expr_ty
       
  1868 Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int col_offset, PyArena
       
  1869       *arena)
       
  1870 {
       
  1871         expr_ty p;
       
  1872         if (!ctx) {
       
  1873                 PyErr_SetString(PyExc_ValueError,
       
  1874                                 "field ctx is required for Tuple");
       
  1875                 return NULL;
       
  1876         }
       
  1877         p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1878         if (!p)
       
  1879                 return NULL;
       
  1880         p->kind = Tuple_kind;
       
  1881         p->v.Tuple.elts = elts;
       
  1882         p->v.Tuple.ctx = ctx;
       
  1883         p->lineno = lineno;
       
  1884         p->col_offset = col_offset;
       
  1885         return p;
       
  1886 }
       
  1887 
       
  1888 slice_ty
       
  1889 Ellipsis(PyArena *arena)
       
  1890 {
       
  1891         slice_ty p;
       
  1892         p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1893         if (!p)
       
  1894                 return NULL;
       
  1895         p->kind = Ellipsis_kind;
       
  1896         return p;
       
  1897 }
       
  1898 
       
  1899 slice_ty
       
  1900 Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena)
       
  1901 {
       
  1902         slice_ty p;
       
  1903         p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1904         if (!p)
       
  1905                 return NULL;
       
  1906         p->kind = Slice_kind;
       
  1907         p->v.Slice.lower = lower;
       
  1908         p->v.Slice.upper = upper;
       
  1909         p->v.Slice.step = step;
       
  1910         return p;
       
  1911 }
       
  1912 
       
  1913 slice_ty
       
  1914 ExtSlice(asdl_seq * dims, PyArena *arena)
       
  1915 {
       
  1916         slice_ty p;
       
  1917         p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1918         if (!p)
       
  1919                 return NULL;
       
  1920         p->kind = ExtSlice_kind;
       
  1921         p->v.ExtSlice.dims = dims;
       
  1922         return p;
       
  1923 }
       
  1924 
       
  1925 slice_ty
       
  1926 Index(expr_ty value, PyArena *arena)
       
  1927 {
       
  1928         slice_ty p;
       
  1929         if (!value) {
       
  1930                 PyErr_SetString(PyExc_ValueError,
       
  1931                                 "field value is required for Index");
       
  1932                 return NULL;
       
  1933         }
       
  1934         p = (slice_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1935         if (!p)
       
  1936                 return NULL;
       
  1937         p->kind = Index_kind;
       
  1938         p->v.Index.value = value;
       
  1939         return p;
       
  1940 }
       
  1941 
       
  1942 comprehension_ty
       
  1943 comprehension(expr_ty target, expr_ty iter, asdl_seq * ifs, PyArena *arena)
       
  1944 {
       
  1945         comprehension_ty p;
       
  1946         if (!target) {
       
  1947                 PyErr_SetString(PyExc_ValueError,
       
  1948                                 "field target is required for comprehension");
       
  1949                 return NULL;
       
  1950         }
       
  1951         if (!iter) {
       
  1952                 PyErr_SetString(PyExc_ValueError,
       
  1953                                 "field iter is required for comprehension");
       
  1954                 return NULL;
       
  1955         }
       
  1956         p = (comprehension_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1957         if (!p)
       
  1958                 return NULL;
       
  1959         p->target = target;
       
  1960         p->iter = iter;
       
  1961         p->ifs = ifs;
       
  1962         return p;
       
  1963 }
       
  1964 
       
  1965 excepthandler_ty
       
  1966 ExceptHandler(expr_ty type, expr_ty name, asdl_seq * body, int lineno, int
       
  1967               col_offset, PyArena *arena)
       
  1968 {
       
  1969         excepthandler_ty p;
       
  1970         p = (excepthandler_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1971         if (!p)
       
  1972                 return NULL;
       
  1973         p->kind = ExceptHandler_kind;
       
  1974         p->v.ExceptHandler.type = type;
       
  1975         p->v.ExceptHandler.name = name;
       
  1976         p->v.ExceptHandler.body = body;
       
  1977         p->lineno = lineno;
       
  1978         p->col_offset = col_offset;
       
  1979         return p;
       
  1980 }
       
  1981 
       
  1982 arguments_ty
       
  1983 arguments(asdl_seq * args, identifier vararg, identifier kwarg, asdl_seq *
       
  1984           defaults, PyArena *arena)
       
  1985 {
       
  1986         arguments_ty p;
       
  1987         p = (arguments_ty)PyArena_Malloc(arena, sizeof(*p));
       
  1988         if (!p)
       
  1989                 return NULL;
       
  1990         p->args = args;
       
  1991         p->vararg = vararg;
       
  1992         p->kwarg = kwarg;
       
  1993         p->defaults = defaults;
       
  1994         return p;
       
  1995 }
       
  1996 
       
  1997 keyword_ty
       
  1998 keyword(identifier arg, expr_ty value, PyArena *arena)
       
  1999 {
       
  2000         keyword_ty p;
       
  2001         if (!arg) {
       
  2002                 PyErr_SetString(PyExc_ValueError,
       
  2003                                 "field arg is required for keyword");
       
  2004                 return NULL;
       
  2005         }
       
  2006         if (!value) {
       
  2007                 PyErr_SetString(PyExc_ValueError,
       
  2008                                 "field value is required for keyword");
       
  2009                 return NULL;
       
  2010         }
       
  2011         p = (keyword_ty)PyArena_Malloc(arena, sizeof(*p));
       
  2012         if (!p)
       
  2013                 return NULL;
       
  2014         p->arg = arg;
       
  2015         p->value = value;
       
  2016         return p;
       
  2017 }
       
  2018 
       
  2019 alias_ty
       
  2020 alias(identifier name, identifier asname, PyArena *arena)
       
  2021 {
       
  2022         alias_ty p;
       
  2023         if (!name) {
       
  2024                 PyErr_SetString(PyExc_ValueError,
       
  2025                                 "field name is required for alias");
       
  2026                 return NULL;
       
  2027         }
       
  2028         p = (alias_ty)PyArena_Malloc(arena, sizeof(*p));
       
  2029         if (!p)
       
  2030                 return NULL;
       
  2031         p->name = name;
       
  2032         p->asname = asname;
       
  2033         return p;
       
  2034 }
       
  2035 
       
  2036 
       
  2037 PyObject*
       
  2038 ast2obj_mod(void* _o)
       
  2039 {
       
  2040         mod_ty o = (mod_ty)_o;
       
  2041         PyObject *result = NULL, *value = NULL;
       
  2042         if (!o) {
       
  2043                 Py_INCREF(Py_None);
       
  2044                 return Py_None;
       
  2045         }
       
  2046 
       
  2047         switch (o->kind) {
       
  2048         case Module_kind:
       
  2049                 result = PyType_GenericNew(Module_type, NULL, NULL);
       
  2050                 if (!result) goto failed;
       
  2051                 value = ast2obj_list(o->v.Module.body, ast2obj_stmt);
       
  2052                 if (!value) goto failed;
       
  2053                 if (PyObject_SetAttrString(result, "body", value) == -1)
       
  2054                         goto failed;
       
  2055                 Py_DECREF(value);
       
  2056                 break;
       
  2057         case Interactive_kind:
       
  2058                 result = PyType_GenericNew(Interactive_type, NULL, NULL);
       
  2059                 if (!result) goto failed;
       
  2060                 value = ast2obj_list(o->v.Interactive.body, ast2obj_stmt);
       
  2061                 if (!value) goto failed;
       
  2062                 if (PyObject_SetAttrString(result, "body", value) == -1)
       
  2063                         goto failed;
       
  2064                 Py_DECREF(value);
       
  2065                 break;
       
  2066         case Expression_kind:
       
  2067                 result = PyType_GenericNew(Expression_type, NULL, NULL);
       
  2068                 if (!result) goto failed;
       
  2069                 value = ast2obj_expr(o->v.Expression.body);
       
  2070                 if (!value) goto failed;
       
  2071                 if (PyObject_SetAttrString(result, "body", value) == -1)
       
  2072                         goto failed;
       
  2073                 Py_DECREF(value);
       
  2074                 break;
       
  2075         case Suite_kind:
       
  2076                 result = PyType_GenericNew(Suite_type, NULL, NULL);
       
  2077                 if (!result) goto failed;
       
  2078                 value = ast2obj_list(o->v.Suite.body, ast2obj_stmt);
       
  2079                 if (!value) goto failed;
       
  2080                 if (PyObject_SetAttrString(result, "body", value) == -1)
       
  2081                         goto failed;
       
  2082                 Py_DECREF(value);
       
  2083                 break;
       
  2084         }
       
  2085         return result;
       
  2086 failed:
       
  2087         Py_XDECREF(value);
       
  2088         Py_XDECREF(result);
       
  2089         return NULL;
       
  2090 }
       
  2091 
       
  2092 PyObject*
       
  2093 ast2obj_stmt(void* _o)
       
  2094 {
       
  2095         stmt_ty o = (stmt_ty)_o;
       
  2096         PyObject *result = NULL, *value = NULL;
       
  2097         if (!o) {
       
  2098                 Py_INCREF(Py_None);
       
  2099                 return Py_None;
       
  2100         }
       
  2101 
       
  2102         switch (o->kind) {
       
  2103         case FunctionDef_kind:
       
  2104                 result = PyType_GenericNew(FunctionDef_type, NULL, NULL);
       
  2105                 if (!result) goto failed;
       
  2106                 value = ast2obj_identifier(o->v.FunctionDef.name);
       
  2107                 if (!value) goto failed;
       
  2108                 if (PyObject_SetAttrString(result, "name", value) == -1)
       
  2109                         goto failed;
       
  2110                 Py_DECREF(value);
       
  2111                 value = ast2obj_arguments(o->v.FunctionDef.args);
       
  2112                 if (!value) goto failed;
       
  2113                 if (PyObject_SetAttrString(result, "args", value) == -1)
       
  2114                         goto failed;
       
  2115                 Py_DECREF(value);
       
  2116                 value = ast2obj_list(o->v.FunctionDef.body, ast2obj_stmt);
       
  2117                 if (!value) goto failed;
       
  2118                 if (PyObject_SetAttrString(result, "body", value) == -1)
       
  2119                         goto failed;
       
  2120                 Py_DECREF(value);
       
  2121                 value = ast2obj_list(o->v.FunctionDef.decorator_list,
       
  2122                                      ast2obj_expr);
       
  2123                 if (!value) goto failed;
       
  2124                 if (PyObject_SetAttrString(result, "decorator_list", value) ==
       
  2125                     -1)
       
  2126                         goto failed;
       
  2127                 Py_DECREF(value);
       
  2128                 break;
       
  2129         case ClassDef_kind:
       
  2130                 result = PyType_GenericNew(ClassDef_type, NULL, NULL);
       
  2131                 if (!result) goto failed;
       
  2132                 value = ast2obj_identifier(o->v.ClassDef.name);
       
  2133                 if (!value) goto failed;
       
  2134                 if (PyObject_SetAttrString(result, "name", value) == -1)
       
  2135                         goto failed;
       
  2136                 Py_DECREF(value);
       
  2137                 value = ast2obj_list(o->v.ClassDef.bases, ast2obj_expr);
       
  2138                 if (!value) goto failed;
       
  2139                 if (PyObject_SetAttrString(result, "bases", value) == -1)
       
  2140                         goto failed;
       
  2141                 Py_DECREF(value);
       
  2142                 value = ast2obj_list(o->v.ClassDef.body, ast2obj_stmt);
       
  2143                 if (!value) goto failed;
       
  2144                 if (PyObject_SetAttrString(result, "body", value) == -1)
       
  2145                         goto failed;
       
  2146                 Py_DECREF(value);
       
  2147                 value = ast2obj_list(o->v.ClassDef.decorator_list,
       
  2148                                      ast2obj_expr);
       
  2149                 if (!value) goto failed;
       
  2150                 if (PyObject_SetAttrString(result, "decorator_list", value) ==
       
  2151                     -1)
       
  2152                         goto failed;
       
  2153                 Py_DECREF(value);
       
  2154                 break;
       
  2155         case Return_kind:
       
  2156                 result = PyType_GenericNew(Return_type, NULL, NULL);
       
  2157                 if (!result) goto failed;
       
  2158                 value = ast2obj_expr(o->v.Return.value);
       
  2159                 if (!value) goto failed;
       
  2160                 if (PyObject_SetAttrString(result, "value", value) == -1)
       
  2161                         goto failed;
       
  2162                 Py_DECREF(value);
       
  2163                 break;
       
  2164         case Delete_kind:
       
  2165                 result = PyType_GenericNew(Delete_type, NULL, NULL);
       
  2166                 if (!result) goto failed;
       
  2167                 value = ast2obj_list(o->v.Delete.targets, ast2obj_expr);
       
  2168                 if (!value) goto failed;
       
  2169                 if (PyObject_SetAttrString(result, "targets", value) == -1)
       
  2170                         goto failed;
       
  2171                 Py_DECREF(value);
       
  2172                 break;
       
  2173         case Assign_kind:
       
  2174                 result = PyType_GenericNew(Assign_type, NULL, NULL);
       
  2175                 if (!result) goto failed;
       
  2176                 value = ast2obj_list(o->v.Assign.targets, ast2obj_expr);
       
  2177                 if (!value) goto failed;
       
  2178                 if (PyObject_SetAttrString(result, "targets", value) == -1)
       
  2179                         goto failed;
       
  2180                 Py_DECREF(value);
       
  2181                 value = ast2obj_expr(o->v.Assign.value);
       
  2182                 if (!value) goto failed;
       
  2183                 if (PyObject_SetAttrString(result, "value", value) == -1)
       
  2184                         goto failed;
       
  2185                 Py_DECREF(value);
       
  2186                 break;
       
  2187         case AugAssign_kind:
       
  2188                 result = PyType_GenericNew(AugAssign_type, NULL, NULL);
       
  2189                 if (!result) goto failed;
       
  2190                 value = ast2obj_expr(o->v.AugAssign.target);
       
  2191                 if (!value) goto failed;
       
  2192                 if (PyObject_SetAttrString(result, "target", value) == -1)
       
  2193                         goto failed;
       
  2194                 Py_DECREF(value);
       
  2195                 value = ast2obj_operator(o->v.AugAssign.op);
       
  2196                 if (!value) goto failed;
       
  2197                 if (PyObject_SetAttrString(result, "op", value) == -1)
       
  2198                         goto failed;
       
  2199                 Py_DECREF(value);
       
  2200                 value = ast2obj_expr(o->v.AugAssign.value);
       
  2201                 if (!value) goto failed;
       
  2202                 if (PyObject_SetAttrString(result, "value", value) == -1)
       
  2203                         goto failed;
       
  2204                 Py_DECREF(value);
       
  2205                 break;
       
  2206         case Print_kind:
       
  2207                 result = PyType_GenericNew(Print_type, NULL, NULL);
       
  2208                 if (!result) goto failed;
       
  2209                 value = ast2obj_expr(o->v.Print.dest);
       
  2210                 if (!value) goto failed;
       
  2211                 if (PyObject_SetAttrString(result, "dest", value) == -1)
       
  2212                         goto failed;
       
  2213                 Py_DECREF(value);
       
  2214                 value = ast2obj_list(o->v.Print.values, ast2obj_expr);
       
  2215                 if (!value) goto failed;
       
  2216                 if (PyObject_SetAttrString(result, "values", value) == -1)
       
  2217                         goto failed;
       
  2218                 Py_DECREF(value);
       
  2219                 value = ast2obj_bool(o->v.Print.nl);
       
  2220                 if (!value) goto failed;
       
  2221                 if (PyObject_SetAttrString(result, "nl", value) == -1)
       
  2222                         goto failed;
       
  2223                 Py_DECREF(value);
       
  2224                 break;
       
  2225         case For_kind:
       
  2226                 result = PyType_GenericNew(For_type, NULL, NULL);
       
  2227                 if (!result) goto failed;
       
  2228                 value = ast2obj_expr(o->v.For.target);
       
  2229                 if (!value) goto failed;
       
  2230                 if (PyObject_SetAttrString(result, "target", value) == -1)
       
  2231                         goto failed;
       
  2232                 Py_DECREF(value);
       
  2233                 value = ast2obj_expr(o->v.For.iter);
       
  2234                 if (!value) goto failed;
       
  2235                 if (PyObject_SetAttrString(result, "iter", value) == -1)
       
  2236                         goto failed;
       
  2237                 Py_DECREF(value);
       
  2238                 value = ast2obj_list(o->v.For.body, ast2obj_stmt);
       
  2239                 if (!value) goto failed;
       
  2240                 if (PyObject_SetAttrString(result, "body", value) == -1)
       
  2241                         goto failed;
       
  2242                 Py_DECREF(value);
       
  2243                 value = ast2obj_list(o->v.For.orelse, ast2obj_stmt);
       
  2244                 if (!value) goto failed;
       
  2245                 if (PyObject_SetAttrString(result, "orelse", value) == -1)
       
  2246                         goto failed;
       
  2247                 Py_DECREF(value);
       
  2248                 break;
       
  2249         case While_kind:
       
  2250                 result = PyType_GenericNew(While_type, NULL, NULL);
       
  2251                 if (!result) goto failed;
       
  2252                 value = ast2obj_expr(o->v.While.test);
       
  2253                 if (!value) goto failed;
       
  2254                 if (PyObject_SetAttrString(result, "test", value) == -1)
       
  2255                         goto failed;
       
  2256                 Py_DECREF(value);
       
  2257                 value = ast2obj_list(o->v.While.body, ast2obj_stmt);
       
  2258                 if (!value) goto failed;
       
  2259                 if (PyObject_SetAttrString(result, "body", value) == -1)
       
  2260                         goto failed;
       
  2261                 Py_DECREF(value);
       
  2262                 value = ast2obj_list(o->v.While.orelse, ast2obj_stmt);
       
  2263                 if (!value) goto failed;
       
  2264                 if (PyObject_SetAttrString(result, "orelse", value) == -1)
       
  2265                         goto failed;
       
  2266                 Py_DECREF(value);
       
  2267                 break;
       
  2268         case If_kind:
       
  2269                 result = PyType_GenericNew(If_type, NULL, NULL);
       
  2270                 if (!result) goto failed;
       
  2271                 value = ast2obj_expr(o->v.If.test);
       
  2272                 if (!value) goto failed;
       
  2273                 if (PyObject_SetAttrString(result, "test", value) == -1)
       
  2274                         goto failed;
       
  2275                 Py_DECREF(value);
       
  2276                 value = ast2obj_list(o->v.If.body, ast2obj_stmt);
       
  2277                 if (!value) goto failed;
       
  2278                 if (PyObject_SetAttrString(result, "body", value) == -1)
       
  2279                         goto failed;
       
  2280                 Py_DECREF(value);
       
  2281                 value = ast2obj_list(o->v.If.orelse, ast2obj_stmt);
       
  2282                 if (!value) goto failed;
       
  2283                 if (PyObject_SetAttrString(result, "orelse", value) == -1)
       
  2284                         goto failed;
       
  2285                 Py_DECREF(value);
       
  2286                 break;
       
  2287         case With_kind:
       
  2288                 result = PyType_GenericNew(With_type, NULL, NULL);
       
  2289                 if (!result) goto failed;
       
  2290                 value = ast2obj_expr(o->v.With.context_expr);
       
  2291                 if (!value) goto failed;
       
  2292                 if (PyObject_SetAttrString(result, "context_expr", value) == -1)
       
  2293                         goto failed;
       
  2294                 Py_DECREF(value);
       
  2295                 value = ast2obj_expr(o->v.With.optional_vars);
       
  2296                 if (!value) goto failed;
       
  2297                 if (PyObject_SetAttrString(result, "optional_vars", value) ==
       
  2298                     -1)
       
  2299                         goto failed;
       
  2300                 Py_DECREF(value);
       
  2301                 value = ast2obj_list(o->v.With.body, ast2obj_stmt);
       
  2302                 if (!value) goto failed;
       
  2303                 if (PyObject_SetAttrString(result, "body", value) == -1)
       
  2304                         goto failed;
       
  2305                 Py_DECREF(value);
       
  2306                 break;
       
  2307         case Raise_kind:
       
  2308                 result = PyType_GenericNew(Raise_type, NULL, NULL);
       
  2309                 if (!result) goto failed;
       
  2310                 value = ast2obj_expr(o->v.Raise.type);
       
  2311                 if (!value) goto failed;
       
  2312                 if (PyObject_SetAttrString(result, "type", value) == -1)
       
  2313                         goto failed;
       
  2314                 Py_DECREF(value);
       
  2315                 value = ast2obj_expr(o->v.Raise.inst);
       
  2316                 if (!value) goto failed;
       
  2317                 if (PyObject_SetAttrString(result, "inst", value) == -1)
       
  2318                         goto failed;
       
  2319                 Py_DECREF(value);
       
  2320                 value = ast2obj_expr(o->v.Raise.tback);
       
  2321                 if (!value) goto failed;
       
  2322                 if (PyObject_SetAttrString(result, "tback", value) == -1)
       
  2323                         goto failed;
       
  2324                 Py_DECREF(value);
       
  2325                 break;
       
  2326         case TryExcept_kind:
       
  2327                 result = PyType_GenericNew(TryExcept_type, NULL, NULL);
       
  2328                 if (!result) goto failed;
       
  2329                 value = ast2obj_list(o->v.TryExcept.body, ast2obj_stmt);
       
  2330                 if (!value) goto failed;
       
  2331                 if (PyObject_SetAttrString(result, "body", value) == -1)
       
  2332                         goto failed;
       
  2333                 Py_DECREF(value);
       
  2334                 value = ast2obj_list(o->v.TryExcept.handlers,
       
  2335                                      ast2obj_excepthandler);
       
  2336                 if (!value) goto failed;
       
  2337                 if (PyObject_SetAttrString(result, "handlers", value) == -1)
       
  2338                         goto failed;
       
  2339                 Py_DECREF(value);
       
  2340                 value = ast2obj_list(o->v.TryExcept.orelse, ast2obj_stmt);
       
  2341                 if (!value) goto failed;
       
  2342                 if (PyObject_SetAttrString(result, "orelse", value) == -1)
       
  2343                         goto failed;
       
  2344                 Py_DECREF(value);
       
  2345                 break;
       
  2346         case TryFinally_kind:
       
  2347                 result = PyType_GenericNew(TryFinally_type, NULL, NULL);
       
  2348                 if (!result) goto failed;
       
  2349                 value = ast2obj_list(o->v.TryFinally.body, ast2obj_stmt);
       
  2350                 if (!value) goto failed;
       
  2351                 if (PyObject_SetAttrString(result, "body", value) == -1)
       
  2352                         goto failed;
       
  2353                 Py_DECREF(value);
       
  2354                 value = ast2obj_list(o->v.TryFinally.finalbody, ast2obj_stmt);
       
  2355                 if (!value) goto failed;
       
  2356                 if (PyObject_SetAttrString(result, "finalbody", value) == -1)
       
  2357                         goto failed;
       
  2358                 Py_DECREF(value);
       
  2359                 break;
       
  2360         case Assert_kind:
       
  2361                 result = PyType_GenericNew(Assert_type, NULL, NULL);
       
  2362                 if (!result) goto failed;
       
  2363                 value = ast2obj_expr(o->v.Assert.test);
       
  2364                 if (!value) goto failed;
       
  2365                 if (PyObject_SetAttrString(result, "test", value) == -1)
       
  2366                         goto failed;
       
  2367                 Py_DECREF(value);
       
  2368                 value = ast2obj_expr(o->v.Assert.msg);
       
  2369                 if (!value) goto failed;
       
  2370                 if (PyObject_SetAttrString(result, "msg", value) == -1)
       
  2371                         goto failed;
       
  2372                 Py_DECREF(value);
       
  2373                 break;
       
  2374         case Import_kind:
       
  2375                 result = PyType_GenericNew(Import_type, NULL, NULL);
       
  2376                 if (!result) goto failed;
       
  2377                 value = ast2obj_list(o->v.Import.names, ast2obj_alias);
       
  2378                 if (!value) goto failed;
       
  2379                 if (PyObject_SetAttrString(result, "names", value) == -1)
       
  2380                         goto failed;
       
  2381                 Py_DECREF(value);
       
  2382                 break;
       
  2383         case ImportFrom_kind:
       
  2384                 result = PyType_GenericNew(ImportFrom_type, NULL, NULL);
       
  2385                 if (!result) goto failed;
       
  2386                 value = ast2obj_identifier(o->v.ImportFrom.module);
       
  2387                 if (!value) goto failed;
       
  2388                 if (PyObject_SetAttrString(result, "module", value) == -1)
       
  2389                         goto failed;
       
  2390                 Py_DECREF(value);
       
  2391                 value = ast2obj_list(o->v.ImportFrom.names, ast2obj_alias);
       
  2392                 if (!value) goto failed;
       
  2393                 if (PyObject_SetAttrString(result, "names", value) == -1)
       
  2394                         goto failed;
       
  2395                 Py_DECREF(value);
       
  2396                 value = ast2obj_int(o->v.ImportFrom.level);
       
  2397                 if (!value) goto failed;
       
  2398                 if (PyObject_SetAttrString(result, "level", value) == -1)
       
  2399                         goto failed;
       
  2400                 Py_DECREF(value);
       
  2401                 break;
       
  2402         case Exec_kind:
       
  2403                 result = PyType_GenericNew(Exec_type, NULL, NULL);
       
  2404                 if (!result) goto failed;
       
  2405                 value = ast2obj_expr(o->v.Exec.body);
       
  2406                 if (!value) goto failed;
       
  2407                 if (PyObject_SetAttrString(result, "body", value) == -1)
       
  2408                         goto failed;
       
  2409                 Py_DECREF(value);
       
  2410                 value = ast2obj_expr(o->v.Exec.globals);
       
  2411                 if (!value) goto failed;
       
  2412                 if (PyObject_SetAttrString(result, "globals", value) == -1)
       
  2413                         goto failed;
       
  2414                 Py_DECREF(value);
       
  2415                 value = ast2obj_expr(o->v.Exec.locals);
       
  2416                 if (!value) goto failed;
       
  2417                 if (PyObject_SetAttrString(result, "locals", value) == -1)
       
  2418                         goto failed;
       
  2419                 Py_DECREF(value);
       
  2420                 break;
       
  2421         case Global_kind:
       
  2422                 result = PyType_GenericNew(Global_type, NULL, NULL);
       
  2423                 if (!result) goto failed;
       
  2424                 value = ast2obj_list(o->v.Global.names, ast2obj_identifier);
       
  2425                 if (!value) goto failed;
       
  2426                 if (PyObject_SetAttrString(result, "names", value) == -1)
       
  2427                         goto failed;
       
  2428                 Py_DECREF(value);
       
  2429                 break;
       
  2430         case Expr_kind:
       
  2431                 result = PyType_GenericNew(Expr_type, NULL, NULL);
       
  2432                 if (!result) goto failed;
       
  2433                 value = ast2obj_expr(o->v.Expr.value);
       
  2434                 if (!value) goto failed;
       
  2435                 if (PyObject_SetAttrString(result, "value", value) == -1)
       
  2436                         goto failed;
       
  2437                 Py_DECREF(value);
       
  2438                 break;
       
  2439         case Pass_kind:
       
  2440                 result = PyType_GenericNew(Pass_type, NULL, NULL);
       
  2441                 if (!result) goto failed;
       
  2442                 break;
       
  2443         case Break_kind:
       
  2444                 result = PyType_GenericNew(Break_type, NULL, NULL);
       
  2445                 if (!result) goto failed;
       
  2446                 break;
       
  2447         case Continue_kind:
       
  2448                 result = PyType_GenericNew(Continue_type, NULL, NULL);
       
  2449                 if (!result) goto failed;
       
  2450                 break;
       
  2451         }
       
  2452         value = ast2obj_int(o->lineno);
       
  2453         if (!value) goto failed;
       
  2454         if (PyObject_SetAttrString(result, "lineno", value) < 0)
       
  2455                 goto failed;
       
  2456         Py_DECREF(value);
       
  2457         value = ast2obj_int(o->col_offset);
       
  2458         if (!value) goto failed;
       
  2459         if (PyObject_SetAttrString(result, "col_offset", value) < 0)
       
  2460                 goto failed;
       
  2461         Py_DECREF(value);
       
  2462         return result;
       
  2463 failed:
       
  2464         Py_XDECREF(value);
       
  2465         Py_XDECREF(result);
       
  2466         return NULL;
       
  2467 }
       
  2468 
       
  2469 PyObject*
       
  2470 ast2obj_expr(void* _o)
       
  2471 {
       
  2472         expr_ty o = (expr_ty)_o;
       
  2473         PyObject *result = NULL, *value = NULL;
       
  2474         if (!o) {
       
  2475                 Py_INCREF(Py_None);
       
  2476                 return Py_None;
       
  2477         }
       
  2478 
       
  2479         switch (o->kind) {
       
  2480         case BoolOp_kind:
       
  2481                 result = PyType_GenericNew(BoolOp_type, NULL, NULL);
       
  2482                 if (!result) goto failed;
       
  2483                 value = ast2obj_boolop(o->v.BoolOp.op);
       
  2484                 if (!value) goto failed;
       
  2485                 if (PyObject_SetAttrString(result, "op", value) == -1)
       
  2486                         goto failed;
       
  2487                 Py_DECREF(value);
       
  2488                 value = ast2obj_list(o->v.BoolOp.values, ast2obj_expr);
       
  2489                 if (!value) goto failed;
       
  2490                 if (PyObject_SetAttrString(result, "values", value) == -1)
       
  2491                         goto failed;
       
  2492                 Py_DECREF(value);
       
  2493                 break;
       
  2494         case BinOp_kind:
       
  2495                 result = PyType_GenericNew(BinOp_type, NULL, NULL);
       
  2496                 if (!result) goto failed;
       
  2497                 value = ast2obj_expr(o->v.BinOp.left);
       
  2498                 if (!value) goto failed;
       
  2499                 if (PyObject_SetAttrString(result, "left", value) == -1)
       
  2500                         goto failed;
       
  2501                 Py_DECREF(value);
       
  2502                 value = ast2obj_operator(o->v.BinOp.op);
       
  2503                 if (!value) goto failed;
       
  2504                 if (PyObject_SetAttrString(result, "op", value) == -1)
       
  2505                         goto failed;
       
  2506                 Py_DECREF(value);
       
  2507                 value = ast2obj_expr(o->v.BinOp.right);
       
  2508                 if (!value) goto failed;
       
  2509                 if (PyObject_SetAttrString(result, "right", value) == -1)
       
  2510                         goto failed;
       
  2511                 Py_DECREF(value);
       
  2512                 break;
       
  2513         case UnaryOp_kind:
       
  2514                 result = PyType_GenericNew(UnaryOp_type, NULL, NULL);
       
  2515                 if (!result) goto failed;
       
  2516                 value = ast2obj_unaryop(o->v.UnaryOp.op);
       
  2517                 if (!value) goto failed;
       
  2518                 if (PyObject_SetAttrString(result, "op", value) == -1)
       
  2519                         goto failed;
       
  2520                 Py_DECREF(value);
       
  2521                 value = ast2obj_expr(o->v.UnaryOp.operand);
       
  2522                 if (!value) goto failed;
       
  2523                 if (PyObject_SetAttrString(result, "operand", value) == -1)
       
  2524                         goto failed;
       
  2525                 Py_DECREF(value);
       
  2526                 break;
       
  2527         case Lambda_kind:
       
  2528                 result = PyType_GenericNew(Lambda_type, NULL, NULL);
       
  2529                 if (!result) goto failed;
       
  2530                 value = ast2obj_arguments(o->v.Lambda.args);
       
  2531                 if (!value) goto failed;
       
  2532                 if (PyObject_SetAttrString(result, "args", value) == -1)
       
  2533                         goto failed;
       
  2534                 Py_DECREF(value);
       
  2535                 value = ast2obj_expr(o->v.Lambda.body);
       
  2536                 if (!value) goto failed;
       
  2537                 if (PyObject_SetAttrString(result, "body", value) == -1)
       
  2538                         goto failed;
       
  2539                 Py_DECREF(value);
       
  2540                 break;
       
  2541         case IfExp_kind:
       
  2542                 result = PyType_GenericNew(IfExp_type, NULL, NULL);
       
  2543                 if (!result) goto failed;
       
  2544                 value = ast2obj_expr(o->v.IfExp.test);
       
  2545                 if (!value) goto failed;
       
  2546                 if (PyObject_SetAttrString(result, "test", value) == -1)
       
  2547                         goto failed;
       
  2548                 Py_DECREF(value);
       
  2549                 value = ast2obj_expr(o->v.IfExp.body);
       
  2550                 if (!value) goto failed;
       
  2551                 if (PyObject_SetAttrString(result, "body", value) == -1)
       
  2552                         goto failed;
       
  2553                 Py_DECREF(value);
       
  2554                 value = ast2obj_expr(o->v.IfExp.orelse);
       
  2555                 if (!value) goto failed;
       
  2556                 if (PyObject_SetAttrString(result, "orelse", value) == -1)
       
  2557                         goto failed;
       
  2558                 Py_DECREF(value);
       
  2559                 break;
       
  2560         case Dict_kind:
       
  2561                 result = PyType_GenericNew(Dict_type, NULL, NULL);
       
  2562                 if (!result) goto failed;
       
  2563                 value = ast2obj_list(o->v.Dict.keys, ast2obj_expr);
       
  2564                 if (!value) goto failed;
       
  2565                 if (PyObject_SetAttrString(result, "keys", value) == -1)
       
  2566                         goto failed;
       
  2567                 Py_DECREF(value);
       
  2568                 value = ast2obj_list(o->v.Dict.values, ast2obj_expr);
       
  2569                 if (!value) goto failed;
       
  2570                 if (PyObject_SetAttrString(result, "values", value) == -1)
       
  2571                         goto failed;
       
  2572                 Py_DECREF(value);
       
  2573                 break;
       
  2574         case ListComp_kind:
       
  2575                 result = PyType_GenericNew(ListComp_type, NULL, NULL);
       
  2576                 if (!result) goto failed;
       
  2577                 value = ast2obj_expr(o->v.ListComp.elt);
       
  2578                 if (!value) goto failed;
       
  2579                 if (PyObject_SetAttrString(result, "elt", value) == -1)
       
  2580                         goto failed;
       
  2581                 Py_DECREF(value);
       
  2582                 value = ast2obj_list(o->v.ListComp.generators,
       
  2583                                      ast2obj_comprehension);
       
  2584                 if (!value) goto failed;
       
  2585                 if (PyObject_SetAttrString(result, "generators", value) == -1)
       
  2586                         goto failed;
       
  2587                 Py_DECREF(value);
       
  2588                 break;
       
  2589         case GeneratorExp_kind:
       
  2590                 result = PyType_GenericNew(GeneratorExp_type, NULL, NULL);
       
  2591                 if (!result) goto failed;
       
  2592                 value = ast2obj_expr(o->v.GeneratorExp.elt);
       
  2593                 if (!value) goto failed;
       
  2594                 if (PyObject_SetAttrString(result, "elt", value) == -1)
       
  2595                         goto failed;
       
  2596                 Py_DECREF(value);
       
  2597                 value = ast2obj_list(o->v.GeneratorExp.generators,
       
  2598                                      ast2obj_comprehension);
       
  2599                 if (!value) goto failed;
       
  2600                 if (PyObject_SetAttrString(result, "generators", value) == -1)
       
  2601                         goto failed;
       
  2602                 Py_DECREF(value);
       
  2603                 break;
       
  2604         case Yield_kind:
       
  2605                 result = PyType_GenericNew(Yield_type, NULL, NULL);
       
  2606                 if (!result) goto failed;
       
  2607                 value = ast2obj_expr(o->v.Yield.value);
       
  2608                 if (!value) goto failed;
       
  2609                 if (PyObject_SetAttrString(result, "value", value) == -1)
       
  2610                         goto failed;
       
  2611                 Py_DECREF(value);
       
  2612                 break;
       
  2613         case Compare_kind:
       
  2614                 result = PyType_GenericNew(Compare_type, NULL, NULL);
       
  2615                 if (!result) goto failed;
       
  2616                 value = ast2obj_expr(o->v.Compare.left);
       
  2617                 if (!value) goto failed;
       
  2618                 if (PyObject_SetAttrString(result, "left", value) == -1)
       
  2619                         goto failed;
       
  2620                 Py_DECREF(value);
       
  2621                 {
       
  2622                         int i, n = asdl_seq_LEN(o->v.Compare.ops);
       
  2623                         value = PyList_New(n);
       
  2624                         if (!value) goto failed;
       
  2625                         for(i = 0; i < n; i++)
       
  2626                                 PyList_SET_ITEM(value, i, ast2obj_cmpop((cmpop_ty)asdl_seq_GET(o->v.Compare.ops, i)));
       
  2627                 }
       
  2628                 if (!value) goto failed;
       
  2629                 if (PyObject_SetAttrString(result, "ops", value) == -1)
       
  2630                         goto failed;
       
  2631                 Py_DECREF(value);
       
  2632                 value = ast2obj_list(o->v.Compare.comparators, ast2obj_expr);
       
  2633                 if (!value) goto failed;
       
  2634                 if (PyObject_SetAttrString(result, "comparators", value) == -1)
       
  2635                         goto failed;
       
  2636                 Py_DECREF(value);
       
  2637                 break;
       
  2638         case Call_kind:
       
  2639                 result = PyType_GenericNew(Call_type, NULL, NULL);
       
  2640                 if (!result) goto failed;
       
  2641                 value = ast2obj_expr(o->v.Call.func);
       
  2642                 if (!value) goto failed;
       
  2643                 if (PyObject_SetAttrString(result, "func", value) == -1)
       
  2644                         goto failed;
       
  2645                 Py_DECREF(value);
       
  2646                 value = ast2obj_list(o->v.Call.args, ast2obj_expr);
       
  2647                 if (!value) goto failed;
       
  2648                 if (PyObject_SetAttrString(result, "args", value) == -1)
       
  2649                         goto failed;
       
  2650                 Py_DECREF(value);
       
  2651                 value = ast2obj_list(o->v.Call.keywords, ast2obj_keyword);
       
  2652                 if (!value) goto failed;
       
  2653                 if (PyObject_SetAttrString(result, "keywords", value) == -1)
       
  2654                         goto failed;
       
  2655                 Py_DECREF(value);
       
  2656                 value = ast2obj_expr(o->v.Call.starargs);
       
  2657                 if (!value) goto failed;
       
  2658                 if (PyObject_SetAttrString(result, "starargs", value) == -1)
       
  2659                         goto failed;
       
  2660                 Py_DECREF(value);
       
  2661                 value = ast2obj_expr(o->v.Call.kwargs);
       
  2662                 if (!value) goto failed;
       
  2663                 if (PyObject_SetAttrString(result, "kwargs", value) == -1)
       
  2664                         goto failed;
       
  2665                 Py_DECREF(value);
       
  2666                 break;
       
  2667         case Repr_kind:
       
  2668                 result = PyType_GenericNew(Repr_type, NULL, NULL);
       
  2669                 if (!result) goto failed;
       
  2670                 value = ast2obj_expr(o->v.Repr.value);
       
  2671                 if (!value) goto failed;
       
  2672                 if (PyObject_SetAttrString(result, "value", value) == -1)
       
  2673                         goto failed;
       
  2674                 Py_DECREF(value);
       
  2675                 break;
       
  2676         case Num_kind:
       
  2677                 result = PyType_GenericNew(Num_type, NULL, NULL);
       
  2678                 if (!result) goto failed;
       
  2679                 value = ast2obj_object(o->v.Num.n);
       
  2680                 if (!value) goto failed;
       
  2681                 if (PyObject_SetAttrString(result, "n", value) == -1)
       
  2682                         goto failed;
       
  2683                 Py_DECREF(value);
       
  2684                 break;
       
  2685         case Str_kind:
       
  2686                 result = PyType_GenericNew(Str_type, NULL, NULL);
       
  2687                 if (!result) goto failed;
       
  2688                 value = ast2obj_string(o->v.Str.s);
       
  2689                 if (!value) goto failed;
       
  2690                 if (PyObject_SetAttrString(result, "s", value) == -1)
       
  2691                         goto failed;
       
  2692                 Py_DECREF(value);
       
  2693                 break;
       
  2694         case Attribute_kind:
       
  2695                 result = PyType_GenericNew(Attribute_type, NULL, NULL);
       
  2696                 if (!result) goto failed;
       
  2697                 value = ast2obj_expr(o->v.Attribute.value);
       
  2698                 if (!value) goto failed;
       
  2699                 if (PyObject_SetAttrString(result, "value", value) == -1)
       
  2700                         goto failed;
       
  2701                 Py_DECREF(value);
       
  2702                 value = ast2obj_identifier(o->v.Attribute.attr);
       
  2703                 if (!value) goto failed;
       
  2704                 if (PyObject_SetAttrString(result, "attr", value) == -1)
       
  2705                         goto failed;
       
  2706                 Py_DECREF(value);
       
  2707                 value = ast2obj_expr_context(o->v.Attribute.ctx);
       
  2708                 if (!value) goto failed;
       
  2709                 if (PyObject_SetAttrString(result, "ctx", value) == -1)
       
  2710                         goto failed;
       
  2711                 Py_DECREF(value);
       
  2712                 break;
       
  2713         case Subscript_kind:
       
  2714                 result = PyType_GenericNew(Subscript_type, NULL, NULL);
       
  2715                 if (!result) goto failed;
       
  2716                 value = ast2obj_expr(o->v.Subscript.value);
       
  2717                 if (!value) goto failed;
       
  2718                 if (PyObject_SetAttrString(result, "value", value) == -1)
       
  2719                         goto failed;
       
  2720                 Py_DECREF(value);
       
  2721                 value = ast2obj_slice(o->v.Subscript.slice);
       
  2722                 if (!value) goto failed;
       
  2723                 if (PyObject_SetAttrString(result, "slice", value) == -1)
       
  2724                         goto failed;
       
  2725                 Py_DECREF(value);
       
  2726                 value = ast2obj_expr_context(o->v.Subscript.ctx);
       
  2727                 if (!value) goto failed;
       
  2728                 if (PyObject_SetAttrString(result, "ctx", value) == -1)
       
  2729                         goto failed;
       
  2730                 Py_DECREF(value);
       
  2731                 break;
       
  2732         case Name_kind:
       
  2733                 result = PyType_GenericNew(Name_type, NULL, NULL);
       
  2734                 if (!result) goto failed;
       
  2735                 value = ast2obj_identifier(o->v.Name.id);
       
  2736                 if (!value) goto failed;
       
  2737                 if (PyObject_SetAttrString(result, "id", value) == -1)
       
  2738                         goto failed;
       
  2739                 Py_DECREF(value);
       
  2740                 value = ast2obj_expr_context(o->v.Name.ctx);
       
  2741                 if (!value) goto failed;
       
  2742                 if (PyObject_SetAttrString(result, "ctx", value) == -1)
       
  2743                         goto failed;
       
  2744                 Py_DECREF(value);
       
  2745                 break;
       
  2746         case List_kind:
       
  2747                 result = PyType_GenericNew(List_type, NULL, NULL);
       
  2748                 if (!result) goto failed;
       
  2749                 value = ast2obj_list(o->v.List.elts, ast2obj_expr);
       
  2750                 if (!value) goto failed;
       
  2751                 if (PyObject_SetAttrString(result, "elts", value) == -1)
       
  2752                         goto failed;
       
  2753                 Py_DECREF(value);
       
  2754                 value = ast2obj_expr_context(o->v.List.ctx);
       
  2755                 if (!value) goto failed;
       
  2756                 if (PyObject_SetAttrString(result, "ctx", value) == -1)
       
  2757                         goto failed;
       
  2758                 Py_DECREF(value);
       
  2759                 break;
       
  2760         case Tuple_kind:
       
  2761                 result = PyType_GenericNew(Tuple_type, NULL, NULL);
       
  2762                 if (!result) goto failed;
       
  2763                 value = ast2obj_list(o->v.Tuple.elts, ast2obj_expr);
       
  2764                 if (!value) goto failed;
       
  2765                 if (PyObject_SetAttrString(result, "elts", value) == -1)
       
  2766                         goto failed;
       
  2767                 Py_DECREF(value);
       
  2768                 value = ast2obj_expr_context(o->v.Tuple.ctx);
       
  2769                 if (!value) goto failed;
       
  2770                 if (PyObject_SetAttrString(result, "ctx", value) == -1)
       
  2771                         goto failed;
       
  2772                 Py_DECREF(value);
       
  2773                 break;
       
  2774         }
       
  2775         value = ast2obj_int(o->lineno);
       
  2776         if (!value) goto failed;
       
  2777         if (PyObject_SetAttrString(result, "lineno", value) < 0)
       
  2778                 goto failed;
       
  2779         Py_DECREF(value);
       
  2780         value = ast2obj_int(o->col_offset);
       
  2781         if (!value) goto failed;
       
  2782         if (PyObject_SetAttrString(result, "col_offset", value) < 0)
       
  2783                 goto failed;
       
  2784         Py_DECREF(value);
       
  2785         return result;
       
  2786 failed:
       
  2787         Py_XDECREF(value);
       
  2788         Py_XDECREF(result);
       
  2789         return NULL;
       
  2790 }
       
  2791 
       
  2792 PyObject* ast2obj_expr_context(expr_context_ty o)
       
  2793 {
       
  2794         switch(o) {
       
  2795                 case Load:
       
  2796                         Py_INCREF(Load_singleton);
       
  2797                         return Load_singleton;
       
  2798                 case Store:
       
  2799                         Py_INCREF(Store_singleton);
       
  2800                         return Store_singleton;
       
  2801                 case Del:
       
  2802                         Py_INCREF(Del_singleton);
       
  2803                         return Del_singleton;
       
  2804                 case AugLoad:
       
  2805                         Py_INCREF(AugLoad_singleton);
       
  2806                         return AugLoad_singleton;
       
  2807                 case AugStore:
       
  2808                         Py_INCREF(AugStore_singleton);
       
  2809                         return AugStore_singleton;
       
  2810                 case Param:
       
  2811                         Py_INCREF(Param_singleton);
       
  2812                         return Param_singleton;
       
  2813                 default:
       
  2814                         /* should never happen, but just in case ... */
       
  2815                         PyErr_Format(PyExc_SystemError, "unknown expr_context found");
       
  2816                         return NULL;
       
  2817         }
       
  2818 }
       
  2819 PyObject*
       
  2820 ast2obj_slice(void* _o)
       
  2821 {
       
  2822         slice_ty o = (slice_ty)_o;
       
  2823         PyObject *result = NULL, *value = NULL;
       
  2824         if (!o) {
       
  2825                 Py_INCREF(Py_None);
       
  2826                 return Py_None;
       
  2827         }
       
  2828 
       
  2829         switch (o->kind) {
       
  2830         case Ellipsis_kind:
       
  2831                 result = PyType_GenericNew(Ellipsis_type, NULL, NULL);
       
  2832                 if (!result) goto failed;
       
  2833                 break;
       
  2834         case Slice_kind:
       
  2835                 result = PyType_GenericNew(Slice_type, NULL, NULL);
       
  2836                 if (!result) goto failed;
       
  2837                 value = ast2obj_expr(o->v.Slice.lower);
       
  2838                 if (!value) goto failed;
       
  2839                 if (PyObject_SetAttrString(result, "lower", value) == -1)
       
  2840                         goto failed;
       
  2841                 Py_DECREF(value);
       
  2842                 value = ast2obj_expr(o->v.Slice.upper);
       
  2843                 if (!value) goto failed;
       
  2844                 if (PyObject_SetAttrString(result, "upper", value) == -1)
       
  2845                         goto failed;
       
  2846                 Py_DECREF(value);
       
  2847                 value = ast2obj_expr(o->v.Slice.step);
       
  2848                 if (!value) goto failed;
       
  2849                 if (PyObject_SetAttrString(result, "step", value) == -1)
       
  2850                         goto failed;
       
  2851                 Py_DECREF(value);
       
  2852                 break;
       
  2853         case ExtSlice_kind:
       
  2854                 result = PyType_GenericNew(ExtSlice_type, NULL, NULL);
       
  2855                 if (!result) goto failed;
       
  2856                 value = ast2obj_list(o->v.ExtSlice.dims, ast2obj_slice);
       
  2857                 if (!value) goto failed;
       
  2858                 if (PyObject_SetAttrString(result, "dims", value) == -1)
       
  2859                         goto failed;
       
  2860                 Py_DECREF(value);
       
  2861                 break;
       
  2862         case Index_kind:
       
  2863                 result = PyType_GenericNew(Index_type, NULL, NULL);
       
  2864                 if (!result) goto failed;
       
  2865                 value = ast2obj_expr(o->v.Index.value);
       
  2866                 if (!value) goto failed;
       
  2867                 if (PyObject_SetAttrString(result, "value", value) == -1)
       
  2868                         goto failed;
       
  2869                 Py_DECREF(value);
       
  2870                 break;
       
  2871         }
       
  2872         return result;
       
  2873 failed:
       
  2874         Py_XDECREF(value);
       
  2875         Py_XDECREF(result);
       
  2876         return NULL;
       
  2877 }
       
  2878 
       
  2879 PyObject* ast2obj_boolop(boolop_ty o)
       
  2880 {
       
  2881         switch(o) {
       
  2882                 case And:
       
  2883                         Py_INCREF(And_singleton);
       
  2884                         return And_singleton;
       
  2885                 case Or:
       
  2886                         Py_INCREF(Or_singleton);
       
  2887                         return Or_singleton;
       
  2888                 default:
       
  2889                         /* should never happen, but just in case ... */
       
  2890                         PyErr_Format(PyExc_SystemError, "unknown boolop found");
       
  2891                         return NULL;
       
  2892         }
       
  2893 }
       
  2894 PyObject* ast2obj_operator(operator_ty o)
       
  2895 {
       
  2896         switch(o) {
       
  2897                 case Add:
       
  2898                         Py_INCREF(Add_singleton);
       
  2899                         return Add_singleton;
       
  2900                 case Sub:
       
  2901                         Py_INCREF(Sub_singleton);
       
  2902                         return Sub_singleton;
       
  2903                 case Mult:
       
  2904                         Py_INCREF(Mult_singleton);
       
  2905                         return Mult_singleton;
       
  2906                 case Div:
       
  2907                         Py_INCREF(Div_singleton);
       
  2908                         return Div_singleton;
       
  2909                 case Mod:
       
  2910                         Py_INCREF(Mod_singleton);
       
  2911                         return Mod_singleton;
       
  2912                 case Pow:
       
  2913                         Py_INCREF(Pow_singleton);
       
  2914                         return Pow_singleton;
       
  2915                 case LShift:
       
  2916                         Py_INCREF(LShift_singleton);
       
  2917                         return LShift_singleton;
       
  2918                 case RShift:
       
  2919                         Py_INCREF(RShift_singleton);
       
  2920                         return RShift_singleton;
       
  2921                 case BitOr:
       
  2922                         Py_INCREF(BitOr_singleton);
       
  2923                         return BitOr_singleton;
       
  2924                 case BitXor:
       
  2925                         Py_INCREF(BitXor_singleton);
       
  2926                         return BitXor_singleton;
       
  2927                 case BitAnd:
       
  2928                         Py_INCREF(BitAnd_singleton);
       
  2929                         return BitAnd_singleton;
       
  2930                 case FloorDiv:
       
  2931                         Py_INCREF(FloorDiv_singleton);
       
  2932                         return FloorDiv_singleton;
       
  2933                 default:
       
  2934                         /* should never happen, but just in case ... */
       
  2935                         PyErr_Format(PyExc_SystemError, "unknown operator found");
       
  2936                         return NULL;
       
  2937         }
       
  2938 }
       
  2939 PyObject* ast2obj_unaryop(unaryop_ty o)
       
  2940 {
       
  2941         switch(o) {
       
  2942                 case Invert:
       
  2943                         Py_INCREF(Invert_singleton);
       
  2944                         return Invert_singleton;
       
  2945                 case Not:
       
  2946                         Py_INCREF(Not_singleton);
       
  2947                         return Not_singleton;
       
  2948                 case UAdd:
       
  2949                         Py_INCREF(UAdd_singleton);
       
  2950                         return UAdd_singleton;
       
  2951                 case USub:
       
  2952                         Py_INCREF(USub_singleton);
       
  2953                         return USub_singleton;
       
  2954                 default:
       
  2955                         /* should never happen, but just in case ... */
       
  2956                         PyErr_Format(PyExc_SystemError, "unknown unaryop found");
       
  2957                         return NULL;
       
  2958         }
       
  2959 }
       
  2960 PyObject* ast2obj_cmpop(cmpop_ty o)
       
  2961 {
       
  2962         switch(o) {
       
  2963                 case Eq:
       
  2964                         Py_INCREF(Eq_singleton);
       
  2965                         return Eq_singleton;
       
  2966                 case NotEq:
       
  2967                         Py_INCREF(NotEq_singleton);
       
  2968                         return NotEq_singleton;
       
  2969                 case Lt:
       
  2970                         Py_INCREF(Lt_singleton);
       
  2971                         return Lt_singleton;
       
  2972                 case LtE:
       
  2973                         Py_INCREF(LtE_singleton);
       
  2974                         return LtE_singleton;
       
  2975                 case Gt:
       
  2976                         Py_INCREF(Gt_singleton);
       
  2977                         return Gt_singleton;
       
  2978                 case GtE:
       
  2979                         Py_INCREF(GtE_singleton);
       
  2980                         return GtE_singleton;
       
  2981                 case Is:
       
  2982                         Py_INCREF(Is_singleton);
       
  2983                         return Is_singleton;
       
  2984                 case IsNot:
       
  2985                         Py_INCREF(IsNot_singleton);
       
  2986                         return IsNot_singleton;
       
  2987                 case In:
       
  2988                         Py_INCREF(In_singleton);
       
  2989                         return In_singleton;
       
  2990                 case NotIn:
       
  2991                         Py_INCREF(NotIn_singleton);
       
  2992                         return NotIn_singleton;
       
  2993                 default:
       
  2994                         /* should never happen, but just in case ... */
       
  2995                         PyErr_Format(PyExc_SystemError, "unknown cmpop found");
       
  2996                         return NULL;
       
  2997         }
       
  2998 }
       
  2999 PyObject*
       
  3000 ast2obj_comprehension(void* _o)
       
  3001 {
       
  3002         comprehension_ty o = (comprehension_ty)_o;
       
  3003         PyObject *result = NULL, *value = NULL;
       
  3004         if (!o) {
       
  3005                 Py_INCREF(Py_None);
       
  3006                 return Py_None;
       
  3007         }
       
  3008 
       
  3009         result = PyType_GenericNew(comprehension_type, NULL, NULL);
       
  3010         if (!result) return NULL;
       
  3011         value = ast2obj_expr(o->target);
       
  3012         if (!value) goto failed;
       
  3013         if (PyObject_SetAttrString(result, "target", value) == -1)
       
  3014                 goto failed;
       
  3015         Py_DECREF(value);
       
  3016         value = ast2obj_expr(o->iter);
       
  3017         if (!value) goto failed;
       
  3018         if (PyObject_SetAttrString(result, "iter", value) == -1)
       
  3019                 goto failed;
       
  3020         Py_DECREF(value);
       
  3021         value = ast2obj_list(o->ifs, ast2obj_expr);
       
  3022         if (!value) goto failed;
       
  3023         if (PyObject_SetAttrString(result, "ifs", value) == -1)
       
  3024                 goto failed;
       
  3025         Py_DECREF(value);
       
  3026         return result;
       
  3027 failed:
       
  3028         Py_XDECREF(value);
       
  3029         Py_XDECREF(result);
       
  3030         return NULL;
       
  3031 }
       
  3032 
       
  3033 PyObject*
       
  3034 ast2obj_excepthandler(void* _o)
       
  3035 {
       
  3036         excepthandler_ty o = (excepthandler_ty)_o;
       
  3037         PyObject *result = NULL, *value = NULL;
       
  3038         if (!o) {
       
  3039                 Py_INCREF(Py_None);
       
  3040                 return Py_None;
       
  3041         }
       
  3042 
       
  3043         switch (o->kind) {
       
  3044         case ExceptHandler_kind:
       
  3045                 result = PyType_GenericNew(ExceptHandler_type, NULL, NULL);
       
  3046                 if (!result) goto failed;
       
  3047                 value = ast2obj_expr(o->v.ExceptHandler.type);
       
  3048                 if (!value) goto failed;
       
  3049                 if (PyObject_SetAttrString(result, "type", value) == -1)
       
  3050                         goto failed;
       
  3051                 Py_DECREF(value);
       
  3052                 value = ast2obj_expr(o->v.ExceptHandler.name);
       
  3053                 if (!value) goto failed;
       
  3054                 if (PyObject_SetAttrString(result, "name", value) == -1)
       
  3055                         goto failed;
       
  3056                 Py_DECREF(value);
       
  3057                 value = ast2obj_list(o->v.ExceptHandler.body, ast2obj_stmt);
       
  3058                 if (!value) goto failed;
       
  3059                 if (PyObject_SetAttrString(result, "body", value) == -1)
       
  3060                         goto failed;
       
  3061                 Py_DECREF(value);
       
  3062                 break;
       
  3063         }
       
  3064         value = ast2obj_int(o->lineno);
       
  3065         if (!value) goto failed;
       
  3066         if (PyObject_SetAttrString(result, "lineno", value) < 0)
       
  3067                 goto failed;
       
  3068         Py_DECREF(value);
       
  3069         value = ast2obj_int(o->col_offset);
       
  3070         if (!value) goto failed;
       
  3071         if (PyObject_SetAttrString(result, "col_offset", value) < 0)
       
  3072                 goto failed;
       
  3073         Py_DECREF(value);
       
  3074         return result;
       
  3075 failed:
       
  3076         Py_XDECREF(value);
       
  3077         Py_XDECREF(result);
       
  3078         return NULL;
       
  3079 }
       
  3080 
       
  3081 PyObject*
       
  3082 ast2obj_arguments(void* _o)
       
  3083 {
       
  3084         arguments_ty o = (arguments_ty)_o;
       
  3085         PyObject *result = NULL, *value = NULL;
       
  3086         if (!o) {
       
  3087                 Py_INCREF(Py_None);
       
  3088                 return Py_None;
       
  3089         }
       
  3090 
       
  3091         result = PyType_GenericNew(arguments_type, NULL, NULL);
       
  3092         if (!result) return NULL;
       
  3093         value = ast2obj_list(o->args, ast2obj_expr);
       
  3094         if (!value) goto failed;
       
  3095         if (PyObject_SetAttrString(result, "args", value) == -1)
       
  3096                 goto failed;
       
  3097         Py_DECREF(value);
       
  3098         value = ast2obj_identifier(o->vararg);
       
  3099         if (!value) goto failed;
       
  3100         if (PyObject_SetAttrString(result, "vararg", value) == -1)
       
  3101                 goto failed;
       
  3102         Py_DECREF(value);
       
  3103         value = ast2obj_identifier(o->kwarg);
       
  3104         if (!value) goto failed;
       
  3105         if (PyObject_SetAttrString(result, "kwarg", value) == -1)
       
  3106                 goto failed;
       
  3107         Py_DECREF(value);
       
  3108         value = ast2obj_list(o->defaults, ast2obj_expr);
       
  3109         if (!value) goto failed;
       
  3110         if (PyObject_SetAttrString(result, "defaults", value) == -1)
       
  3111                 goto failed;
       
  3112         Py_DECREF(value);
       
  3113         return result;
       
  3114 failed:
       
  3115         Py_XDECREF(value);
       
  3116         Py_XDECREF(result);
       
  3117         return NULL;
       
  3118 }
       
  3119 
       
  3120 PyObject*
       
  3121 ast2obj_keyword(void* _o)
       
  3122 {
       
  3123         keyword_ty o = (keyword_ty)_o;
       
  3124         PyObject *result = NULL, *value = NULL;
       
  3125         if (!o) {
       
  3126                 Py_INCREF(Py_None);
       
  3127                 return Py_None;
       
  3128         }
       
  3129 
       
  3130         result = PyType_GenericNew(keyword_type, NULL, NULL);
       
  3131         if (!result) return NULL;
       
  3132         value = ast2obj_identifier(o->arg);
       
  3133         if (!value) goto failed;
       
  3134         if (PyObject_SetAttrString(result, "arg", value) == -1)
       
  3135                 goto failed;
       
  3136         Py_DECREF(value);
       
  3137         value = ast2obj_expr(o->value);
       
  3138         if (!value) goto failed;
       
  3139         if (PyObject_SetAttrString(result, "value", value) == -1)
       
  3140                 goto failed;
       
  3141         Py_DECREF(value);
       
  3142         return result;
       
  3143 failed:
       
  3144         Py_XDECREF(value);
       
  3145         Py_XDECREF(result);
       
  3146         return NULL;
       
  3147 }
       
  3148 
       
  3149 PyObject*
       
  3150 ast2obj_alias(void* _o)
       
  3151 {
       
  3152         alias_ty o = (alias_ty)_o;
       
  3153         PyObject *result = NULL, *value = NULL;
       
  3154         if (!o) {
       
  3155                 Py_INCREF(Py_None);
       
  3156                 return Py_None;
       
  3157         }
       
  3158 
       
  3159         result = PyType_GenericNew(alias_type, NULL, NULL);
       
  3160         if (!result) return NULL;
       
  3161         value = ast2obj_identifier(o->name);
       
  3162         if (!value) goto failed;
       
  3163         if (PyObject_SetAttrString(result, "name", value) == -1)
       
  3164                 goto failed;
       
  3165         Py_DECREF(value);
       
  3166         value = ast2obj_identifier(o->asname);
       
  3167         if (!value) goto failed;
       
  3168         if (PyObject_SetAttrString(result, "asname", value) == -1)
       
  3169                 goto failed;
       
  3170         Py_DECREF(value);
       
  3171         return result;
       
  3172 failed:
       
  3173         Py_XDECREF(value);
       
  3174         Py_XDECREF(result);
       
  3175         return NULL;
       
  3176 }
       
  3177 
       
  3178 
       
  3179 int
       
  3180 obj2ast_mod(PyObject* obj, mod_ty* out, PyArena* arena)
       
  3181 {
       
  3182         PyObject* tmp = NULL;
       
  3183 
       
  3184 
       
  3185         if (obj == Py_None) {
       
  3186                 *out = NULL;
       
  3187                 return 0;
       
  3188         }
       
  3189         if (PyObject_IsInstance(obj, (PyObject*)Module_type)) {
       
  3190                 asdl_seq* body;
       
  3191 
       
  3192                 if (PyObject_HasAttrString(obj, "body")) {
       
  3193                         int res;
       
  3194                         Py_ssize_t len;
       
  3195                         Py_ssize_t i;
       
  3196                         tmp = PyObject_GetAttrString(obj, "body");
       
  3197                         if (tmp == NULL) goto failed;
       
  3198                         if (!PyList_Check(tmp)) {
       
  3199                                 PyErr_Format(PyExc_TypeError, "Module field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3200                                 goto failed;
       
  3201                         }
       
  3202                         len = PyList_GET_SIZE(tmp);
       
  3203                         body = asdl_seq_new(len, arena);
       
  3204                         if (body == NULL) goto failed;
       
  3205                         for (i = 0; i < len; i++) {
       
  3206                                 stmt_ty value;
       
  3207                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3208                                 if (res != 0) goto failed;
       
  3209                                 asdl_seq_SET(body, i, value);
       
  3210                         }
       
  3211                         Py_XDECREF(tmp);
       
  3212                         tmp = NULL;
       
  3213                 } else {
       
  3214                         PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Module");
       
  3215                         return 1;
       
  3216                 }
       
  3217                 *out = Module(body, arena);
       
  3218                 if (*out == NULL) goto failed;
       
  3219                 return 0;
       
  3220         }
       
  3221         if (PyObject_IsInstance(obj, (PyObject*)Interactive_type)) {
       
  3222                 asdl_seq* body;
       
  3223 
       
  3224                 if (PyObject_HasAttrString(obj, "body")) {
       
  3225                         int res;
       
  3226                         Py_ssize_t len;
       
  3227                         Py_ssize_t i;
       
  3228                         tmp = PyObject_GetAttrString(obj, "body");
       
  3229                         if (tmp == NULL) goto failed;
       
  3230                         if (!PyList_Check(tmp)) {
       
  3231                                 PyErr_Format(PyExc_TypeError, "Interactive field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3232                                 goto failed;
       
  3233                         }
       
  3234                         len = PyList_GET_SIZE(tmp);
       
  3235                         body = asdl_seq_new(len, arena);
       
  3236                         if (body == NULL) goto failed;
       
  3237                         for (i = 0; i < len; i++) {
       
  3238                                 stmt_ty value;
       
  3239                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3240                                 if (res != 0) goto failed;
       
  3241                                 asdl_seq_SET(body, i, value);
       
  3242                         }
       
  3243                         Py_XDECREF(tmp);
       
  3244                         tmp = NULL;
       
  3245                 } else {
       
  3246                         PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Interactive");
       
  3247                         return 1;
       
  3248                 }
       
  3249                 *out = Interactive(body, arena);
       
  3250                 if (*out == NULL) goto failed;
       
  3251                 return 0;
       
  3252         }
       
  3253         if (PyObject_IsInstance(obj, (PyObject*)Expression_type)) {
       
  3254                 expr_ty body;
       
  3255 
       
  3256                 if (PyObject_HasAttrString(obj, "body")) {
       
  3257                         int res;
       
  3258                         tmp = PyObject_GetAttrString(obj, "body");
       
  3259                         if (tmp == NULL) goto failed;
       
  3260                         res = obj2ast_expr(tmp, &body, arena);
       
  3261                         if (res != 0) goto failed;
       
  3262                         Py_XDECREF(tmp);
       
  3263                         tmp = NULL;
       
  3264                 } else {
       
  3265                         PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Expression");
       
  3266                         return 1;
       
  3267                 }
       
  3268                 *out = Expression(body, arena);
       
  3269                 if (*out == NULL) goto failed;
       
  3270                 return 0;
       
  3271         }
       
  3272         if (PyObject_IsInstance(obj, (PyObject*)Suite_type)) {
       
  3273                 asdl_seq* body;
       
  3274 
       
  3275                 if (PyObject_HasAttrString(obj, "body")) {
       
  3276                         int res;
       
  3277                         Py_ssize_t len;
       
  3278                         Py_ssize_t i;
       
  3279                         tmp = PyObject_GetAttrString(obj, "body");
       
  3280                         if (tmp == NULL) goto failed;
       
  3281                         if (!PyList_Check(tmp)) {
       
  3282                                 PyErr_Format(PyExc_TypeError, "Suite field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3283                                 goto failed;
       
  3284                         }
       
  3285                         len = PyList_GET_SIZE(tmp);
       
  3286                         body = asdl_seq_new(len, arena);
       
  3287                         if (body == NULL) goto failed;
       
  3288                         for (i = 0; i < len; i++) {
       
  3289                                 stmt_ty value;
       
  3290                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3291                                 if (res != 0) goto failed;
       
  3292                                 asdl_seq_SET(body, i, value);
       
  3293                         }
       
  3294                         Py_XDECREF(tmp);
       
  3295                         tmp = NULL;
       
  3296                 } else {
       
  3297                         PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Suite");
       
  3298                         return 1;
       
  3299                 }
       
  3300                 *out = Suite(body, arena);
       
  3301                 if (*out == NULL) goto failed;
       
  3302                 return 0;
       
  3303         }
       
  3304 
       
  3305         tmp = PyObject_Repr(obj);
       
  3306         if (tmp == NULL) goto failed;
       
  3307         PyErr_Format(PyExc_TypeError, "expected some sort of mod, but got %.400s", PyString_AS_STRING(tmp));
       
  3308 failed:
       
  3309         Py_XDECREF(tmp);
       
  3310         return 1;
       
  3311 }
       
  3312 
       
  3313 int
       
  3314 obj2ast_stmt(PyObject* obj, stmt_ty* out, PyArena* arena)
       
  3315 {
       
  3316         PyObject* tmp = NULL;
       
  3317 
       
  3318         int lineno;
       
  3319         int col_offset;
       
  3320 
       
  3321         if (obj == Py_None) {
       
  3322                 *out = NULL;
       
  3323                 return 0;
       
  3324         }
       
  3325         if (PyObject_HasAttrString(obj, "lineno")) {
       
  3326                 int res;
       
  3327                 tmp = PyObject_GetAttrString(obj, "lineno");
       
  3328                 if (tmp == NULL) goto failed;
       
  3329                 res = obj2ast_int(tmp, &lineno, arena);
       
  3330                 if (res != 0) goto failed;
       
  3331                 Py_XDECREF(tmp);
       
  3332                 tmp = NULL;
       
  3333         } else {
       
  3334                 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from stmt");
       
  3335                 return 1;
       
  3336         }
       
  3337         if (PyObject_HasAttrString(obj, "col_offset")) {
       
  3338                 int res;
       
  3339                 tmp = PyObject_GetAttrString(obj, "col_offset");
       
  3340                 if (tmp == NULL) goto failed;
       
  3341                 res = obj2ast_int(tmp, &col_offset, arena);
       
  3342                 if (res != 0) goto failed;
       
  3343                 Py_XDECREF(tmp);
       
  3344                 tmp = NULL;
       
  3345         } else {
       
  3346                 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from stmt");
       
  3347                 return 1;
       
  3348         }
       
  3349         if (PyObject_IsInstance(obj, (PyObject*)FunctionDef_type)) {
       
  3350                 identifier name;
       
  3351                 arguments_ty args;
       
  3352                 asdl_seq* body;
       
  3353                 asdl_seq* decorator_list;
       
  3354 
       
  3355                 if (PyObject_HasAttrString(obj, "name")) {
       
  3356                         int res;
       
  3357                         tmp = PyObject_GetAttrString(obj, "name");
       
  3358                         if (tmp == NULL) goto failed;
       
  3359                         res = obj2ast_identifier(tmp, &name, arena);
       
  3360                         if (res != 0) goto failed;
       
  3361                         Py_XDECREF(tmp);
       
  3362                         tmp = NULL;
       
  3363                 } else {
       
  3364                         PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from FunctionDef");
       
  3365                         return 1;
       
  3366                 }
       
  3367                 if (PyObject_HasAttrString(obj, "args")) {
       
  3368                         int res;
       
  3369                         tmp = PyObject_GetAttrString(obj, "args");
       
  3370                         if (tmp == NULL) goto failed;
       
  3371                         res = obj2ast_arguments(tmp, &args, arena);
       
  3372                         if (res != 0) goto failed;
       
  3373                         Py_XDECREF(tmp);
       
  3374                         tmp = NULL;
       
  3375                 } else {
       
  3376                         PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from FunctionDef");
       
  3377                         return 1;
       
  3378                 }
       
  3379                 if (PyObject_HasAttrString(obj, "body")) {
       
  3380                         int res;
       
  3381                         Py_ssize_t len;
       
  3382                         Py_ssize_t i;
       
  3383                         tmp = PyObject_GetAttrString(obj, "body");
       
  3384                         if (tmp == NULL) goto failed;
       
  3385                         if (!PyList_Check(tmp)) {
       
  3386                                 PyErr_Format(PyExc_TypeError, "FunctionDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3387                                 goto failed;
       
  3388                         }
       
  3389                         len = PyList_GET_SIZE(tmp);
       
  3390                         body = asdl_seq_new(len, arena);
       
  3391                         if (body == NULL) goto failed;
       
  3392                         for (i = 0; i < len; i++) {
       
  3393                                 stmt_ty value;
       
  3394                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3395                                 if (res != 0) goto failed;
       
  3396                                 asdl_seq_SET(body, i, value);
       
  3397                         }
       
  3398                         Py_XDECREF(tmp);
       
  3399                         tmp = NULL;
       
  3400                 } else {
       
  3401                         PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from FunctionDef");
       
  3402                         return 1;
       
  3403                 }
       
  3404                 if (PyObject_HasAttrString(obj, "decorator_list")) {
       
  3405                         int res;
       
  3406                         Py_ssize_t len;
       
  3407                         Py_ssize_t i;
       
  3408                         tmp = PyObject_GetAttrString(obj, "decorator_list");
       
  3409                         if (tmp == NULL) goto failed;
       
  3410                         if (!PyList_Check(tmp)) {
       
  3411                                 PyErr_Format(PyExc_TypeError, "FunctionDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3412                                 goto failed;
       
  3413                         }
       
  3414                         len = PyList_GET_SIZE(tmp);
       
  3415                         decorator_list = asdl_seq_new(len, arena);
       
  3416                         if (decorator_list == NULL) goto failed;
       
  3417                         for (i = 0; i < len; i++) {
       
  3418                                 expr_ty value;
       
  3419                                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3420                                 if (res != 0) goto failed;
       
  3421                                 asdl_seq_SET(decorator_list, i, value);
       
  3422                         }
       
  3423                         Py_XDECREF(tmp);
       
  3424                         tmp = NULL;
       
  3425                 } else {
       
  3426                         PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from FunctionDef");
       
  3427                         return 1;
       
  3428                 }
       
  3429                 *out = FunctionDef(name, args, body, decorator_list, lineno,
       
  3430                                    col_offset, arena);
       
  3431                 if (*out == NULL) goto failed;
       
  3432                 return 0;
       
  3433         }
       
  3434         if (PyObject_IsInstance(obj, (PyObject*)ClassDef_type)) {
       
  3435                 identifier name;
       
  3436                 asdl_seq* bases;
       
  3437                 asdl_seq* body;
       
  3438                 asdl_seq* decorator_list;
       
  3439 
       
  3440                 if (PyObject_HasAttrString(obj, "name")) {
       
  3441                         int res;
       
  3442                         tmp = PyObject_GetAttrString(obj, "name");
       
  3443                         if (tmp == NULL) goto failed;
       
  3444                         res = obj2ast_identifier(tmp, &name, arena);
       
  3445                         if (res != 0) goto failed;
       
  3446                         Py_XDECREF(tmp);
       
  3447                         tmp = NULL;
       
  3448                 } else {
       
  3449                         PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from ClassDef");
       
  3450                         return 1;
       
  3451                 }
       
  3452                 if (PyObject_HasAttrString(obj, "bases")) {
       
  3453                         int res;
       
  3454                         Py_ssize_t len;
       
  3455                         Py_ssize_t i;
       
  3456                         tmp = PyObject_GetAttrString(obj, "bases");
       
  3457                         if (tmp == NULL) goto failed;
       
  3458                         if (!PyList_Check(tmp)) {
       
  3459                                 PyErr_Format(PyExc_TypeError, "ClassDef field \"bases\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3460                                 goto failed;
       
  3461                         }
       
  3462                         len = PyList_GET_SIZE(tmp);
       
  3463                         bases = asdl_seq_new(len, arena);
       
  3464                         if (bases == NULL) goto failed;
       
  3465                         for (i = 0; i < len; i++) {
       
  3466                                 expr_ty value;
       
  3467                                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3468                                 if (res != 0) goto failed;
       
  3469                                 asdl_seq_SET(bases, i, value);
       
  3470                         }
       
  3471                         Py_XDECREF(tmp);
       
  3472                         tmp = NULL;
       
  3473                 } else {
       
  3474                         PyErr_SetString(PyExc_TypeError, "required field \"bases\" missing from ClassDef");
       
  3475                         return 1;
       
  3476                 }
       
  3477                 if (PyObject_HasAttrString(obj, "body")) {
       
  3478                         int res;
       
  3479                         Py_ssize_t len;
       
  3480                         Py_ssize_t i;
       
  3481                         tmp = PyObject_GetAttrString(obj, "body");
       
  3482                         if (tmp == NULL) goto failed;
       
  3483                         if (!PyList_Check(tmp)) {
       
  3484                                 PyErr_Format(PyExc_TypeError, "ClassDef field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3485                                 goto failed;
       
  3486                         }
       
  3487                         len = PyList_GET_SIZE(tmp);
       
  3488                         body = asdl_seq_new(len, arena);
       
  3489                         if (body == NULL) goto failed;
       
  3490                         for (i = 0; i < len; i++) {
       
  3491                                 stmt_ty value;
       
  3492                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3493                                 if (res != 0) goto failed;
       
  3494                                 asdl_seq_SET(body, i, value);
       
  3495                         }
       
  3496                         Py_XDECREF(tmp);
       
  3497                         tmp = NULL;
       
  3498                 } else {
       
  3499                         PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ClassDef");
       
  3500                         return 1;
       
  3501                 }
       
  3502                 if (PyObject_HasAttrString(obj, "decorator_list")) {
       
  3503                         int res;
       
  3504                         Py_ssize_t len;
       
  3505                         Py_ssize_t i;
       
  3506                         tmp = PyObject_GetAttrString(obj, "decorator_list");
       
  3507                         if (tmp == NULL) goto failed;
       
  3508                         if (!PyList_Check(tmp)) {
       
  3509                                 PyErr_Format(PyExc_TypeError, "ClassDef field \"decorator_list\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3510                                 goto failed;
       
  3511                         }
       
  3512                         len = PyList_GET_SIZE(tmp);
       
  3513                         decorator_list = asdl_seq_new(len, arena);
       
  3514                         if (decorator_list == NULL) goto failed;
       
  3515                         for (i = 0; i < len; i++) {
       
  3516                                 expr_ty value;
       
  3517                                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3518                                 if (res != 0) goto failed;
       
  3519                                 asdl_seq_SET(decorator_list, i, value);
       
  3520                         }
       
  3521                         Py_XDECREF(tmp);
       
  3522                         tmp = NULL;
       
  3523                 } else {
       
  3524                         PyErr_SetString(PyExc_TypeError, "required field \"decorator_list\" missing from ClassDef");
       
  3525                         return 1;
       
  3526                 }
       
  3527                 *out = ClassDef(name, bases, body, decorator_list, lineno,
       
  3528                                 col_offset, arena);
       
  3529                 if (*out == NULL) goto failed;
       
  3530                 return 0;
       
  3531         }
       
  3532         if (PyObject_IsInstance(obj, (PyObject*)Return_type)) {
       
  3533                 expr_ty value;
       
  3534 
       
  3535                 if (PyObject_HasAttrString(obj, "value")) {
       
  3536                         int res;
       
  3537                         tmp = PyObject_GetAttrString(obj, "value");
       
  3538                         if (tmp == NULL) goto failed;
       
  3539                         res = obj2ast_expr(tmp, &value, arena);
       
  3540                         if (res != 0) goto failed;
       
  3541                         Py_XDECREF(tmp);
       
  3542                         tmp = NULL;
       
  3543                 } else {
       
  3544                         value = NULL;
       
  3545                 }
       
  3546                 *out = Return(value, lineno, col_offset, arena);
       
  3547                 if (*out == NULL) goto failed;
       
  3548                 return 0;
       
  3549         }
       
  3550         if (PyObject_IsInstance(obj, (PyObject*)Delete_type)) {
       
  3551                 asdl_seq* targets;
       
  3552 
       
  3553                 if (PyObject_HasAttrString(obj, "targets")) {
       
  3554                         int res;
       
  3555                         Py_ssize_t len;
       
  3556                         Py_ssize_t i;
       
  3557                         tmp = PyObject_GetAttrString(obj, "targets");
       
  3558                         if (tmp == NULL) goto failed;
       
  3559                         if (!PyList_Check(tmp)) {
       
  3560                                 PyErr_Format(PyExc_TypeError, "Delete field \"targets\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3561                                 goto failed;
       
  3562                         }
       
  3563                         len = PyList_GET_SIZE(tmp);
       
  3564                         targets = asdl_seq_new(len, arena);
       
  3565                         if (targets == NULL) goto failed;
       
  3566                         for (i = 0; i < len; i++) {
       
  3567                                 expr_ty value;
       
  3568                                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3569                                 if (res != 0) goto failed;
       
  3570                                 asdl_seq_SET(targets, i, value);
       
  3571                         }
       
  3572                         Py_XDECREF(tmp);
       
  3573                         tmp = NULL;
       
  3574                 } else {
       
  3575                         PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Delete");
       
  3576                         return 1;
       
  3577                 }
       
  3578                 *out = Delete(targets, lineno, col_offset, arena);
       
  3579                 if (*out == NULL) goto failed;
       
  3580                 return 0;
       
  3581         }
       
  3582         if (PyObject_IsInstance(obj, (PyObject*)Assign_type)) {
       
  3583                 asdl_seq* targets;
       
  3584                 expr_ty value;
       
  3585 
       
  3586                 if (PyObject_HasAttrString(obj, "targets")) {
       
  3587                         int res;
       
  3588                         Py_ssize_t len;
       
  3589                         Py_ssize_t i;
       
  3590                         tmp = PyObject_GetAttrString(obj, "targets");
       
  3591                         if (tmp == NULL) goto failed;
       
  3592                         if (!PyList_Check(tmp)) {
       
  3593                                 PyErr_Format(PyExc_TypeError, "Assign field \"targets\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3594                                 goto failed;
       
  3595                         }
       
  3596                         len = PyList_GET_SIZE(tmp);
       
  3597                         targets = asdl_seq_new(len, arena);
       
  3598                         if (targets == NULL) goto failed;
       
  3599                         for (i = 0; i < len; i++) {
       
  3600                                 expr_ty value;
       
  3601                                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3602                                 if (res != 0) goto failed;
       
  3603                                 asdl_seq_SET(targets, i, value);
       
  3604                         }
       
  3605                         Py_XDECREF(tmp);
       
  3606                         tmp = NULL;
       
  3607                 } else {
       
  3608                         PyErr_SetString(PyExc_TypeError, "required field \"targets\" missing from Assign");
       
  3609                         return 1;
       
  3610                 }
       
  3611                 if (PyObject_HasAttrString(obj, "value")) {
       
  3612                         int res;
       
  3613                         tmp = PyObject_GetAttrString(obj, "value");
       
  3614                         if (tmp == NULL) goto failed;
       
  3615                         res = obj2ast_expr(tmp, &value, arena);
       
  3616                         if (res != 0) goto failed;
       
  3617                         Py_XDECREF(tmp);
       
  3618                         tmp = NULL;
       
  3619                 } else {
       
  3620                         PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Assign");
       
  3621                         return 1;
       
  3622                 }
       
  3623                 *out = Assign(targets, value, lineno, col_offset, arena);
       
  3624                 if (*out == NULL) goto failed;
       
  3625                 return 0;
       
  3626         }
       
  3627         if (PyObject_IsInstance(obj, (PyObject*)AugAssign_type)) {
       
  3628                 expr_ty target;
       
  3629                 operator_ty op;
       
  3630                 expr_ty value;
       
  3631 
       
  3632                 if (PyObject_HasAttrString(obj, "target")) {
       
  3633                         int res;
       
  3634                         tmp = PyObject_GetAttrString(obj, "target");
       
  3635                         if (tmp == NULL) goto failed;
       
  3636                         res = obj2ast_expr(tmp, &target, arena);
       
  3637                         if (res != 0) goto failed;
       
  3638                         Py_XDECREF(tmp);
       
  3639                         tmp = NULL;
       
  3640                 } else {
       
  3641                         PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from AugAssign");
       
  3642                         return 1;
       
  3643                 }
       
  3644                 if (PyObject_HasAttrString(obj, "op")) {
       
  3645                         int res;
       
  3646                         tmp = PyObject_GetAttrString(obj, "op");
       
  3647                         if (tmp == NULL) goto failed;
       
  3648                         res = obj2ast_operator(tmp, &op, arena);
       
  3649                         if (res != 0) goto failed;
       
  3650                         Py_XDECREF(tmp);
       
  3651                         tmp = NULL;
       
  3652                 } else {
       
  3653                         PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from AugAssign");
       
  3654                         return 1;
       
  3655                 }
       
  3656                 if (PyObject_HasAttrString(obj, "value")) {
       
  3657                         int res;
       
  3658                         tmp = PyObject_GetAttrString(obj, "value");
       
  3659                         if (tmp == NULL) goto failed;
       
  3660                         res = obj2ast_expr(tmp, &value, arena);
       
  3661                         if (res != 0) goto failed;
       
  3662                         Py_XDECREF(tmp);
       
  3663                         tmp = NULL;
       
  3664                 } else {
       
  3665                         PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from AugAssign");
       
  3666                         return 1;
       
  3667                 }
       
  3668                 *out = AugAssign(target, op, value, lineno, col_offset, arena);
       
  3669                 if (*out == NULL) goto failed;
       
  3670                 return 0;
       
  3671         }
       
  3672         if (PyObject_IsInstance(obj, (PyObject*)Print_type)) {
       
  3673                 expr_ty dest;
       
  3674                 asdl_seq* values;
       
  3675                 bool nl;
       
  3676 
       
  3677                 if (PyObject_HasAttrString(obj, "dest")) {
       
  3678                         int res;
       
  3679                         tmp = PyObject_GetAttrString(obj, "dest");
       
  3680                         if (tmp == NULL) goto failed;
       
  3681                         res = obj2ast_expr(tmp, &dest, arena);
       
  3682                         if (res != 0) goto failed;
       
  3683                         Py_XDECREF(tmp);
       
  3684                         tmp = NULL;
       
  3685                 } else {
       
  3686                         dest = NULL;
       
  3687                 }
       
  3688                 if (PyObject_HasAttrString(obj, "values")) {
       
  3689                         int res;
       
  3690                         Py_ssize_t len;
       
  3691                         Py_ssize_t i;
       
  3692                         tmp = PyObject_GetAttrString(obj, "values");
       
  3693                         if (tmp == NULL) goto failed;
       
  3694                         if (!PyList_Check(tmp)) {
       
  3695                                 PyErr_Format(PyExc_TypeError, "Print field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3696                                 goto failed;
       
  3697                         }
       
  3698                         len = PyList_GET_SIZE(tmp);
       
  3699                         values = asdl_seq_new(len, arena);
       
  3700                         if (values == NULL) goto failed;
       
  3701                         for (i = 0; i < len; i++) {
       
  3702                                 expr_ty value;
       
  3703                                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3704                                 if (res != 0) goto failed;
       
  3705                                 asdl_seq_SET(values, i, value);
       
  3706                         }
       
  3707                         Py_XDECREF(tmp);
       
  3708                         tmp = NULL;
       
  3709                 } else {
       
  3710                         PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from Print");
       
  3711                         return 1;
       
  3712                 }
       
  3713                 if (PyObject_HasAttrString(obj, "nl")) {
       
  3714                         int res;
       
  3715                         tmp = PyObject_GetAttrString(obj, "nl");
       
  3716                         if (tmp == NULL) goto failed;
       
  3717                         res = obj2ast_bool(tmp, &nl, arena);
       
  3718                         if (res != 0) goto failed;
       
  3719                         Py_XDECREF(tmp);
       
  3720                         tmp = NULL;
       
  3721                 } else {
       
  3722                         PyErr_SetString(PyExc_TypeError, "required field \"nl\" missing from Print");
       
  3723                         return 1;
       
  3724                 }
       
  3725                 *out = Print(dest, values, nl, lineno, col_offset, arena);
       
  3726                 if (*out == NULL) goto failed;
       
  3727                 return 0;
       
  3728         }
       
  3729         if (PyObject_IsInstance(obj, (PyObject*)For_type)) {
       
  3730                 expr_ty target;
       
  3731                 expr_ty iter;
       
  3732                 asdl_seq* body;
       
  3733                 asdl_seq* orelse;
       
  3734 
       
  3735                 if (PyObject_HasAttrString(obj, "target")) {
       
  3736                         int res;
       
  3737                         tmp = PyObject_GetAttrString(obj, "target");
       
  3738                         if (tmp == NULL) goto failed;
       
  3739                         res = obj2ast_expr(tmp, &target, arena);
       
  3740                         if (res != 0) goto failed;
       
  3741                         Py_XDECREF(tmp);
       
  3742                         tmp = NULL;
       
  3743                 } else {
       
  3744                         PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from For");
       
  3745                         return 1;
       
  3746                 }
       
  3747                 if (PyObject_HasAttrString(obj, "iter")) {
       
  3748                         int res;
       
  3749                         tmp = PyObject_GetAttrString(obj, "iter");
       
  3750                         if (tmp == NULL) goto failed;
       
  3751                         res = obj2ast_expr(tmp, &iter, arena);
       
  3752                         if (res != 0) goto failed;
       
  3753                         Py_XDECREF(tmp);
       
  3754                         tmp = NULL;
       
  3755                 } else {
       
  3756                         PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from For");
       
  3757                         return 1;
       
  3758                 }
       
  3759                 if (PyObject_HasAttrString(obj, "body")) {
       
  3760                         int res;
       
  3761                         Py_ssize_t len;
       
  3762                         Py_ssize_t i;
       
  3763                         tmp = PyObject_GetAttrString(obj, "body");
       
  3764                         if (tmp == NULL) goto failed;
       
  3765                         if (!PyList_Check(tmp)) {
       
  3766                                 PyErr_Format(PyExc_TypeError, "For field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3767                                 goto failed;
       
  3768                         }
       
  3769                         len = PyList_GET_SIZE(tmp);
       
  3770                         body = asdl_seq_new(len, arena);
       
  3771                         if (body == NULL) goto failed;
       
  3772                         for (i = 0; i < len; i++) {
       
  3773                                 stmt_ty value;
       
  3774                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3775                                 if (res != 0) goto failed;
       
  3776                                 asdl_seq_SET(body, i, value);
       
  3777                         }
       
  3778                         Py_XDECREF(tmp);
       
  3779                         tmp = NULL;
       
  3780                 } else {
       
  3781                         PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from For");
       
  3782                         return 1;
       
  3783                 }
       
  3784                 if (PyObject_HasAttrString(obj, "orelse")) {
       
  3785                         int res;
       
  3786                         Py_ssize_t len;
       
  3787                         Py_ssize_t i;
       
  3788                         tmp = PyObject_GetAttrString(obj, "orelse");
       
  3789                         if (tmp == NULL) goto failed;
       
  3790                         if (!PyList_Check(tmp)) {
       
  3791                                 PyErr_Format(PyExc_TypeError, "For field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3792                                 goto failed;
       
  3793                         }
       
  3794                         len = PyList_GET_SIZE(tmp);
       
  3795                         orelse = asdl_seq_new(len, arena);
       
  3796                         if (orelse == NULL) goto failed;
       
  3797                         for (i = 0; i < len; i++) {
       
  3798                                 stmt_ty value;
       
  3799                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3800                                 if (res != 0) goto failed;
       
  3801                                 asdl_seq_SET(orelse, i, value);
       
  3802                         }
       
  3803                         Py_XDECREF(tmp);
       
  3804                         tmp = NULL;
       
  3805                 } else {
       
  3806                         PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from For");
       
  3807                         return 1;
       
  3808                 }
       
  3809                 *out = For(target, iter, body, orelse, lineno, col_offset,
       
  3810                            arena);
       
  3811                 if (*out == NULL) goto failed;
       
  3812                 return 0;
       
  3813         }
       
  3814         if (PyObject_IsInstance(obj, (PyObject*)While_type)) {
       
  3815                 expr_ty test;
       
  3816                 asdl_seq* body;
       
  3817                 asdl_seq* orelse;
       
  3818 
       
  3819                 if (PyObject_HasAttrString(obj, "test")) {
       
  3820                         int res;
       
  3821                         tmp = PyObject_GetAttrString(obj, "test");
       
  3822                         if (tmp == NULL) goto failed;
       
  3823                         res = obj2ast_expr(tmp, &test, arena);
       
  3824                         if (res != 0) goto failed;
       
  3825                         Py_XDECREF(tmp);
       
  3826                         tmp = NULL;
       
  3827                 } else {
       
  3828                         PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from While");
       
  3829                         return 1;
       
  3830                 }
       
  3831                 if (PyObject_HasAttrString(obj, "body")) {
       
  3832                         int res;
       
  3833                         Py_ssize_t len;
       
  3834                         Py_ssize_t i;
       
  3835                         tmp = PyObject_GetAttrString(obj, "body");
       
  3836                         if (tmp == NULL) goto failed;
       
  3837                         if (!PyList_Check(tmp)) {
       
  3838                                 PyErr_Format(PyExc_TypeError, "While field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3839                                 goto failed;
       
  3840                         }
       
  3841                         len = PyList_GET_SIZE(tmp);
       
  3842                         body = asdl_seq_new(len, arena);
       
  3843                         if (body == NULL) goto failed;
       
  3844                         for (i = 0; i < len; i++) {
       
  3845                                 stmt_ty value;
       
  3846                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3847                                 if (res != 0) goto failed;
       
  3848                                 asdl_seq_SET(body, i, value);
       
  3849                         }
       
  3850                         Py_XDECREF(tmp);
       
  3851                         tmp = NULL;
       
  3852                 } else {
       
  3853                         PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from While");
       
  3854                         return 1;
       
  3855                 }
       
  3856                 if (PyObject_HasAttrString(obj, "orelse")) {
       
  3857                         int res;
       
  3858                         Py_ssize_t len;
       
  3859                         Py_ssize_t i;
       
  3860                         tmp = PyObject_GetAttrString(obj, "orelse");
       
  3861                         if (tmp == NULL) goto failed;
       
  3862                         if (!PyList_Check(tmp)) {
       
  3863                                 PyErr_Format(PyExc_TypeError, "While field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3864                                 goto failed;
       
  3865                         }
       
  3866                         len = PyList_GET_SIZE(tmp);
       
  3867                         orelse = asdl_seq_new(len, arena);
       
  3868                         if (orelse == NULL) goto failed;
       
  3869                         for (i = 0; i < len; i++) {
       
  3870                                 stmt_ty value;
       
  3871                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3872                                 if (res != 0) goto failed;
       
  3873                                 asdl_seq_SET(orelse, i, value);
       
  3874                         }
       
  3875                         Py_XDECREF(tmp);
       
  3876                         tmp = NULL;
       
  3877                 } else {
       
  3878                         PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from While");
       
  3879                         return 1;
       
  3880                 }
       
  3881                 *out = While(test, body, orelse, lineno, col_offset, arena);
       
  3882                 if (*out == NULL) goto failed;
       
  3883                 return 0;
       
  3884         }
       
  3885         if (PyObject_IsInstance(obj, (PyObject*)If_type)) {
       
  3886                 expr_ty test;
       
  3887                 asdl_seq* body;
       
  3888                 asdl_seq* orelse;
       
  3889 
       
  3890                 if (PyObject_HasAttrString(obj, "test")) {
       
  3891                         int res;
       
  3892                         tmp = PyObject_GetAttrString(obj, "test");
       
  3893                         if (tmp == NULL) goto failed;
       
  3894                         res = obj2ast_expr(tmp, &test, arena);
       
  3895                         if (res != 0) goto failed;
       
  3896                         Py_XDECREF(tmp);
       
  3897                         tmp = NULL;
       
  3898                 } else {
       
  3899                         PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from If");
       
  3900                         return 1;
       
  3901                 }
       
  3902                 if (PyObject_HasAttrString(obj, "body")) {
       
  3903                         int res;
       
  3904                         Py_ssize_t len;
       
  3905                         Py_ssize_t i;
       
  3906                         tmp = PyObject_GetAttrString(obj, "body");
       
  3907                         if (tmp == NULL) goto failed;
       
  3908                         if (!PyList_Check(tmp)) {
       
  3909                                 PyErr_Format(PyExc_TypeError, "If field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3910                                 goto failed;
       
  3911                         }
       
  3912                         len = PyList_GET_SIZE(tmp);
       
  3913                         body = asdl_seq_new(len, arena);
       
  3914                         if (body == NULL) goto failed;
       
  3915                         for (i = 0; i < len; i++) {
       
  3916                                 stmt_ty value;
       
  3917                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3918                                 if (res != 0) goto failed;
       
  3919                                 asdl_seq_SET(body, i, value);
       
  3920                         }
       
  3921                         Py_XDECREF(tmp);
       
  3922                         tmp = NULL;
       
  3923                 } else {
       
  3924                         PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from If");
       
  3925                         return 1;
       
  3926                 }
       
  3927                 if (PyObject_HasAttrString(obj, "orelse")) {
       
  3928                         int res;
       
  3929                         Py_ssize_t len;
       
  3930                         Py_ssize_t i;
       
  3931                         tmp = PyObject_GetAttrString(obj, "orelse");
       
  3932                         if (tmp == NULL) goto failed;
       
  3933                         if (!PyList_Check(tmp)) {
       
  3934                                 PyErr_Format(PyExc_TypeError, "If field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3935                                 goto failed;
       
  3936                         }
       
  3937                         len = PyList_GET_SIZE(tmp);
       
  3938                         orelse = asdl_seq_new(len, arena);
       
  3939                         if (orelse == NULL) goto failed;
       
  3940                         for (i = 0; i < len; i++) {
       
  3941                                 stmt_ty value;
       
  3942                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  3943                                 if (res != 0) goto failed;
       
  3944                                 asdl_seq_SET(orelse, i, value);
       
  3945                         }
       
  3946                         Py_XDECREF(tmp);
       
  3947                         tmp = NULL;
       
  3948                 } else {
       
  3949                         PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from If");
       
  3950                         return 1;
       
  3951                 }
       
  3952                 *out = If(test, body, orelse, lineno, col_offset, arena);
       
  3953                 if (*out == NULL) goto failed;
       
  3954                 return 0;
       
  3955         }
       
  3956         if (PyObject_IsInstance(obj, (PyObject*)With_type)) {
       
  3957                 expr_ty context_expr;
       
  3958                 expr_ty optional_vars;
       
  3959                 asdl_seq* body;
       
  3960 
       
  3961                 if (PyObject_HasAttrString(obj, "context_expr")) {
       
  3962                         int res;
       
  3963                         tmp = PyObject_GetAttrString(obj, "context_expr");
       
  3964                         if (tmp == NULL) goto failed;
       
  3965                         res = obj2ast_expr(tmp, &context_expr, arena);
       
  3966                         if (res != 0) goto failed;
       
  3967                         Py_XDECREF(tmp);
       
  3968                         tmp = NULL;
       
  3969                 } else {
       
  3970                         PyErr_SetString(PyExc_TypeError, "required field \"context_expr\" missing from With");
       
  3971                         return 1;
       
  3972                 }
       
  3973                 if (PyObject_HasAttrString(obj, "optional_vars")) {
       
  3974                         int res;
       
  3975                         tmp = PyObject_GetAttrString(obj, "optional_vars");
       
  3976                         if (tmp == NULL) goto failed;
       
  3977                         res = obj2ast_expr(tmp, &optional_vars, arena);
       
  3978                         if (res != 0) goto failed;
       
  3979                         Py_XDECREF(tmp);
       
  3980                         tmp = NULL;
       
  3981                 } else {
       
  3982                         optional_vars = NULL;
       
  3983                 }
       
  3984                 if (PyObject_HasAttrString(obj, "body")) {
       
  3985                         int res;
       
  3986                         Py_ssize_t len;
       
  3987                         Py_ssize_t i;
       
  3988                         tmp = PyObject_GetAttrString(obj, "body");
       
  3989                         if (tmp == NULL) goto failed;
       
  3990                         if (!PyList_Check(tmp)) {
       
  3991                                 PyErr_Format(PyExc_TypeError, "With field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  3992                                 goto failed;
       
  3993                         }
       
  3994                         len = PyList_GET_SIZE(tmp);
       
  3995                         body = asdl_seq_new(len, arena);
       
  3996                         if (body == NULL) goto failed;
       
  3997                         for (i = 0; i < len; i++) {
       
  3998                                 stmt_ty value;
       
  3999                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4000                                 if (res != 0) goto failed;
       
  4001                                 asdl_seq_SET(body, i, value);
       
  4002                         }
       
  4003                         Py_XDECREF(tmp);
       
  4004                         tmp = NULL;
       
  4005                 } else {
       
  4006                         PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from With");
       
  4007                         return 1;
       
  4008                 }
       
  4009                 *out = With(context_expr, optional_vars, body, lineno,
       
  4010                             col_offset, arena);
       
  4011                 if (*out == NULL) goto failed;
       
  4012                 return 0;
       
  4013         }
       
  4014         if (PyObject_IsInstance(obj, (PyObject*)Raise_type)) {
       
  4015                 expr_ty type;
       
  4016                 expr_ty inst;
       
  4017                 expr_ty tback;
       
  4018 
       
  4019                 if (PyObject_HasAttrString(obj, "type")) {
       
  4020                         int res;
       
  4021                         tmp = PyObject_GetAttrString(obj, "type");
       
  4022                         if (tmp == NULL) goto failed;
       
  4023                         res = obj2ast_expr(tmp, &type, arena);
       
  4024                         if (res != 0) goto failed;
       
  4025                         Py_XDECREF(tmp);
       
  4026                         tmp = NULL;
       
  4027                 } else {
       
  4028                         type = NULL;
       
  4029                 }
       
  4030                 if (PyObject_HasAttrString(obj, "inst")) {
       
  4031                         int res;
       
  4032                         tmp = PyObject_GetAttrString(obj, "inst");
       
  4033                         if (tmp == NULL) goto failed;
       
  4034                         res = obj2ast_expr(tmp, &inst, arena);
       
  4035                         if (res != 0) goto failed;
       
  4036                         Py_XDECREF(tmp);
       
  4037                         tmp = NULL;
       
  4038                 } else {
       
  4039                         inst = NULL;
       
  4040                 }
       
  4041                 if (PyObject_HasAttrString(obj, "tback")) {
       
  4042                         int res;
       
  4043                         tmp = PyObject_GetAttrString(obj, "tback");
       
  4044                         if (tmp == NULL) goto failed;
       
  4045                         res = obj2ast_expr(tmp, &tback, arena);
       
  4046                         if (res != 0) goto failed;
       
  4047                         Py_XDECREF(tmp);
       
  4048                         tmp = NULL;
       
  4049                 } else {
       
  4050                         tback = NULL;
       
  4051                 }
       
  4052                 *out = Raise(type, inst, tback, lineno, col_offset, arena);
       
  4053                 if (*out == NULL) goto failed;
       
  4054                 return 0;
       
  4055         }
       
  4056         if (PyObject_IsInstance(obj, (PyObject*)TryExcept_type)) {
       
  4057                 asdl_seq* body;
       
  4058                 asdl_seq* handlers;
       
  4059                 asdl_seq* orelse;
       
  4060 
       
  4061                 if (PyObject_HasAttrString(obj, "body")) {
       
  4062                         int res;
       
  4063                         Py_ssize_t len;
       
  4064                         Py_ssize_t i;
       
  4065                         tmp = PyObject_GetAttrString(obj, "body");
       
  4066                         if (tmp == NULL) goto failed;
       
  4067                         if (!PyList_Check(tmp)) {
       
  4068                                 PyErr_Format(PyExc_TypeError, "TryExcept field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4069                                 goto failed;
       
  4070                         }
       
  4071                         len = PyList_GET_SIZE(tmp);
       
  4072                         body = asdl_seq_new(len, arena);
       
  4073                         if (body == NULL) goto failed;
       
  4074                         for (i = 0; i < len; i++) {
       
  4075                                 stmt_ty value;
       
  4076                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4077                                 if (res != 0) goto failed;
       
  4078                                 asdl_seq_SET(body, i, value);
       
  4079                         }
       
  4080                         Py_XDECREF(tmp);
       
  4081                         tmp = NULL;
       
  4082                 } else {
       
  4083                         PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from TryExcept");
       
  4084                         return 1;
       
  4085                 }
       
  4086                 if (PyObject_HasAttrString(obj, "handlers")) {
       
  4087                         int res;
       
  4088                         Py_ssize_t len;
       
  4089                         Py_ssize_t i;
       
  4090                         tmp = PyObject_GetAttrString(obj, "handlers");
       
  4091                         if (tmp == NULL) goto failed;
       
  4092                         if (!PyList_Check(tmp)) {
       
  4093                                 PyErr_Format(PyExc_TypeError, "TryExcept field \"handlers\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4094                                 goto failed;
       
  4095                         }
       
  4096                         len = PyList_GET_SIZE(tmp);
       
  4097                         handlers = asdl_seq_new(len, arena);
       
  4098                         if (handlers == NULL) goto failed;
       
  4099                         for (i = 0; i < len; i++) {
       
  4100                                 excepthandler_ty value;
       
  4101                                 res = obj2ast_excepthandler(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4102                                 if (res != 0) goto failed;
       
  4103                                 asdl_seq_SET(handlers, i, value);
       
  4104                         }
       
  4105                         Py_XDECREF(tmp);
       
  4106                         tmp = NULL;
       
  4107                 } else {
       
  4108                         PyErr_SetString(PyExc_TypeError, "required field \"handlers\" missing from TryExcept");
       
  4109                         return 1;
       
  4110                 }
       
  4111                 if (PyObject_HasAttrString(obj, "orelse")) {
       
  4112                         int res;
       
  4113                         Py_ssize_t len;
       
  4114                         Py_ssize_t i;
       
  4115                         tmp = PyObject_GetAttrString(obj, "orelse");
       
  4116                         if (tmp == NULL) goto failed;
       
  4117                         if (!PyList_Check(tmp)) {
       
  4118                                 PyErr_Format(PyExc_TypeError, "TryExcept field \"orelse\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4119                                 goto failed;
       
  4120                         }
       
  4121                         len = PyList_GET_SIZE(tmp);
       
  4122                         orelse = asdl_seq_new(len, arena);
       
  4123                         if (orelse == NULL) goto failed;
       
  4124                         for (i = 0; i < len; i++) {
       
  4125                                 stmt_ty value;
       
  4126                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4127                                 if (res != 0) goto failed;
       
  4128                                 asdl_seq_SET(orelse, i, value);
       
  4129                         }
       
  4130                         Py_XDECREF(tmp);
       
  4131                         tmp = NULL;
       
  4132                 } else {
       
  4133                         PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from TryExcept");
       
  4134                         return 1;
       
  4135                 }
       
  4136                 *out = TryExcept(body, handlers, orelse, lineno, col_offset,
       
  4137                                  arena);
       
  4138                 if (*out == NULL) goto failed;
       
  4139                 return 0;
       
  4140         }
       
  4141         if (PyObject_IsInstance(obj, (PyObject*)TryFinally_type)) {
       
  4142                 asdl_seq* body;
       
  4143                 asdl_seq* finalbody;
       
  4144 
       
  4145                 if (PyObject_HasAttrString(obj, "body")) {
       
  4146                         int res;
       
  4147                         Py_ssize_t len;
       
  4148                         Py_ssize_t i;
       
  4149                         tmp = PyObject_GetAttrString(obj, "body");
       
  4150                         if (tmp == NULL) goto failed;
       
  4151                         if (!PyList_Check(tmp)) {
       
  4152                                 PyErr_Format(PyExc_TypeError, "TryFinally field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4153                                 goto failed;
       
  4154                         }
       
  4155                         len = PyList_GET_SIZE(tmp);
       
  4156                         body = asdl_seq_new(len, arena);
       
  4157                         if (body == NULL) goto failed;
       
  4158                         for (i = 0; i < len; i++) {
       
  4159                                 stmt_ty value;
       
  4160                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4161                                 if (res != 0) goto failed;
       
  4162                                 asdl_seq_SET(body, i, value);
       
  4163                         }
       
  4164                         Py_XDECREF(tmp);
       
  4165                         tmp = NULL;
       
  4166                 } else {
       
  4167                         PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from TryFinally");
       
  4168                         return 1;
       
  4169                 }
       
  4170                 if (PyObject_HasAttrString(obj, "finalbody")) {
       
  4171                         int res;
       
  4172                         Py_ssize_t len;
       
  4173                         Py_ssize_t i;
       
  4174                         tmp = PyObject_GetAttrString(obj, "finalbody");
       
  4175                         if (tmp == NULL) goto failed;
       
  4176                         if (!PyList_Check(tmp)) {
       
  4177                                 PyErr_Format(PyExc_TypeError, "TryFinally field \"finalbody\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4178                                 goto failed;
       
  4179                         }
       
  4180                         len = PyList_GET_SIZE(tmp);
       
  4181                         finalbody = asdl_seq_new(len, arena);
       
  4182                         if (finalbody == NULL) goto failed;
       
  4183                         for (i = 0; i < len; i++) {
       
  4184                                 stmt_ty value;
       
  4185                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4186                                 if (res != 0) goto failed;
       
  4187                                 asdl_seq_SET(finalbody, i, value);
       
  4188                         }
       
  4189                         Py_XDECREF(tmp);
       
  4190                         tmp = NULL;
       
  4191                 } else {
       
  4192                         PyErr_SetString(PyExc_TypeError, "required field \"finalbody\" missing from TryFinally");
       
  4193                         return 1;
       
  4194                 }
       
  4195                 *out = TryFinally(body, finalbody, lineno, col_offset, arena);
       
  4196                 if (*out == NULL) goto failed;
       
  4197                 return 0;
       
  4198         }
       
  4199         if (PyObject_IsInstance(obj, (PyObject*)Assert_type)) {
       
  4200                 expr_ty test;
       
  4201                 expr_ty msg;
       
  4202 
       
  4203                 if (PyObject_HasAttrString(obj, "test")) {
       
  4204                         int res;
       
  4205                         tmp = PyObject_GetAttrString(obj, "test");
       
  4206                         if (tmp == NULL) goto failed;
       
  4207                         res = obj2ast_expr(tmp, &test, arena);
       
  4208                         if (res != 0) goto failed;
       
  4209                         Py_XDECREF(tmp);
       
  4210                         tmp = NULL;
       
  4211                 } else {
       
  4212                         PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from Assert");
       
  4213                         return 1;
       
  4214                 }
       
  4215                 if (PyObject_HasAttrString(obj, "msg")) {
       
  4216                         int res;
       
  4217                         tmp = PyObject_GetAttrString(obj, "msg");
       
  4218                         if (tmp == NULL) goto failed;
       
  4219                         res = obj2ast_expr(tmp, &msg, arena);
       
  4220                         if (res != 0) goto failed;
       
  4221                         Py_XDECREF(tmp);
       
  4222                         tmp = NULL;
       
  4223                 } else {
       
  4224                         msg = NULL;
       
  4225                 }
       
  4226                 *out = Assert(test, msg, lineno, col_offset, arena);
       
  4227                 if (*out == NULL) goto failed;
       
  4228                 return 0;
       
  4229         }
       
  4230         if (PyObject_IsInstance(obj, (PyObject*)Import_type)) {
       
  4231                 asdl_seq* names;
       
  4232 
       
  4233                 if (PyObject_HasAttrString(obj, "names")) {
       
  4234                         int res;
       
  4235                         Py_ssize_t len;
       
  4236                         Py_ssize_t i;
       
  4237                         tmp = PyObject_GetAttrString(obj, "names");
       
  4238                         if (tmp == NULL) goto failed;
       
  4239                         if (!PyList_Check(tmp)) {
       
  4240                                 PyErr_Format(PyExc_TypeError, "Import field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4241                                 goto failed;
       
  4242                         }
       
  4243                         len = PyList_GET_SIZE(tmp);
       
  4244                         names = asdl_seq_new(len, arena);
       
  4245                         if (names == NULL) goto failed;
       
  4246                         for (i = 0; i < len; i++) {
       
  4247                                 alias_ty value;
       
  4248                                 res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4249                                 if (res != 0) goto failed;
       
  4250                                 asdl_seq_SET(names, i, value);
       
  4251                         }
       
  4252                         Py_XDECREF(tmp);
       
  4253                         tmp = NULL;
       
  4254                 } else {
       
  4255                         PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Import");
       
  4256                         return 1;
       
  4257                 }
       
  4258                 *out = Import(names, lineno, col_offset, arena);
       
  4259                 if (*out == NULL) goto failed;
       
  4260                 return 0;
       
  4261         }
       
  4262         if (PyObject_IsInstance(obj, (PyObject*)ImportFrom_type)) {
       
  4263                 identifier module;
       
  4264                 asdl_seq* names;
       
  4265                 int level;
       
  4266 
       
  4267                 if (PyObject_HasAttrString(obj, "module")) {
       
  4268                         int res;
       
  4269                         tmp = PyObject_GetAttrString(obj, "module");
       
  4270                         if (tmp == NULL) goto failed;
       
  4271                         res = obj2ast_identifier(tmp, &module, arena);
       
  4272                         if (res != 0) goto failed;
       
  4273                         Py_XDECREF(tmp);
       
  4274                         tmp = NULL;
       
  4275                 } else {
       
  4276                         PyErr_SetString(PyExc_TypeError, "required field \"module\" missing from ImportFrom");
       
  4277                         return 1;
       
  4278                 }
       
  4279                 if (PyObject_HasAttrString(obj, "names")) {
       
  4280                         int res;
       
  4281                         Py_ssize_t len;
       
  4282                         Py_ssize_t i;
       
  4283                         tmp = PyObject_GetAttrString(obj, "names");
       
  4284                         if (tmp == NULL) goto failed;
       
  4285                         if (!PyList_Check(tmp)) {
       
  4286                                 PyErr_Format(PyExc_TypeError, "ImportFrom field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4287                                 goto failed;
       
  4288                         }
       
  4289                         len = PyList_GET_SIZE(tmp);
       
  4290                         names = asdl_seq_new(len, arena);
       
  4291                         if (names == NULL) goto failed;
       
  4292                         for (i = 0; i < len; i++) {
       
  4293                                 alias_ty value;
       
  4294                                 res = obj2ast_alias(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4295                                 if (res != 0) goto failed;
       
  4296                                 asdl_seq_SET(names, i, value);
       
  4297                         }
       
  4298                         Py_XDECREF(tmp);
       
  4299                         tmp = NULL;
       
  4300                 } else {
       
  4301                         PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from ImportFrom");
       
  4302                         return 1;
       
  4303                 }
       
  4304                 if (PyObject_HasAttrString(obj, "level")) {
       
  4305                         int res;
       
  4306                         tmp = PyObject_GetAttrString(obj, "level");
       
  4307                         if (tmp == NULL) goto failed;
       
  4308                         res = obj2ast_int(tmp, &level, arena);
       
  4309                         if (res != 0) goto failed;
       
  4310                         Py_XDECREF(tmp);
       
  4311                         tmp = NULL;
       
  4312                 } else {
       
  4313                         level = 0;
       
  4314                 }
       
  4315                 *out = ImportFrom(module, names, level, lineno, col_offset,
       
  4316                                   arena);
       
  4317                 if (*out == NULL) goto failed;
       
  4318                 return 0;
       
  4319         }
       
  4320         if (PyObject_IsInstance(obj, (PyObject*)Exec_type)) {
       
  4321                 expr_ty body;
       
  4322                 expr_ty globals;
       
  4323                 expr_ty locals;
       
  4324 
       
  4325                 if (PyObject_HasAttrString(obj, "body")) {
       
  4326                         int res;
       
  4327                         tmp = PyObject_GetAttrString(obj, "body");
       
  4328                         if (tmp == NULL) goto failed;
       
  4329                         res = obj2ast_expr(tmp, &body, arena);
       
  4330                         if (res != 0) goto failed;
       
  4331                         Py_XDECREF(tmp);
       
  4332                         tmp = NULL;
       
  4333                 } else {
       
  4334                         PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Exec");
       
  4335                         return 1;
       
  4336                 }
       
  4337                 if (PyObject_HasAttrString(obj, "globals")) {
       
  4338                         int res;
       
  4339                         tmp = PyObject_GetAttrString(obj, "globals");
       
  4340                         if (tmp == NULL) goto failed;
       
  4341                         res = obj2ast_expr(tmp, &globals, arena);
       
  4342                         if (res != 0) goto failed;
       
  4343                         Py_XDECREF(tmp);
       
  4344                         tmp = NULL;
       
  4345                 } else {
       
  4346                         globals = NULL;
       
  4347                 }
       
  4348                 if (PyObject_HasAttrString(obj, "locals")) {
       
  4349                         int res;
       
  4350                         tmp = PyObject_GetAttrString(obj, "locals");
       
  4351                         if (tmp == NULL) goto failed;
       
  4352                         res = obj2ast_expr(tmp, &locals, arena);
       
  4353                         if (res != 0) goto failed;
       
  4354                         Py_XDECREF(tmp);
       
  4355                         tmp = NULL;
       
  4356                 } else {
       
  4357                         locals = NULL;
       
  4358                 }
       
  4359                 *out = Exec(body, globals, locals, lineno, col_offset, arena);
       
  4360                 if (*out == NULL) goto failed;
       
  4361                 return 0;
       
  4362         }
       
  4363         if (PyObject_IsInstance(obj, (PyObject*)Global_type)) {
       
  4364                 asdl_seq* names;
       
  4365 
       
  4366                 if (PyObject_HasAttrString(obj, "names")) {
       
  4367                         int res;
       
  4368                         Py_ssize_t len;
       
  4369                         Py_ssize_t i;
       
  4370                         tmp = PyObject_GetAttrString(obj, "names");
       
  4371                         if (tmp == NULL) goto failed;
       
  4372                         if (!PyList_Check(tmp)) {
       
  4373                                 PyErr_Format(PyExc_TypeError, "Global field \"names\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4374                                 goto failed;
       
  4375                         }
       
  4376                         len = PyList_GET_SIZE(tmp);
       
  4377                         names = asdl_seq_new(len, arena);
       
  4378                         if (names == NULL) goto failed;
       
  4379                         for (i = 0; i < len; i++) {
       
  4380                                 identifier value;
       
  4381                                 res = obj2ast_identifier(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4382                                 if (res != 0) goto failed;
       
  4383                                 asdl_seq_SET(names, i, value);
       
  4384                         }
       
  4385                         Py_XDECREF(tmp);
       
  4386                         tmp = NULL;
       
  4387                 } else {
       
  4388                         PyErr_SetString(PyExc_TypeError, "required field \"names\" missing from Global");
       
  4389                         return 1;
       
  4390                 }
       
  4391                 *out = Global(names, lineno, col_offset, arena);
       
  4392                 if (*out == NULL) goto failed;
       
  4393                 return 0;
       
  4394         }
       
  4395         if (PyObject_IsInstance(obj, (PyObject*)Expr_type)) {
       
  4396                 expr_ty value;
       
  4397 
       
  4398                 if (PyObject_HasAttrString(obj, "value")) {
       
  4399                         int res;
       
  4400                         tmp = PyObject_GetAttrString(obj, "value");
       
  4401                         if (tmp == NULL) goto failed;
       
  4402                         res = obj2ast_expr(tmp, &value, arena);
       
  4403                         if (res != 0) goto failed;
       
  4404                         Py_XDECREF(tmp);
       
  4405                         tmp = NULL;
       
  4406                 } else {
       
  4407                         PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Expr");
       
  4408                         return 1;
       
  4409                 }
       
  4410                 *out = Expr(value, lineno, col_offset, arena);
       
  4411                 if (*out == NULL) goto failed;
       
  4412                 return 0;
       
  4413         }
       
  4414         if (PyObject_IsInstance(obj, (PyObject*)Pass_type)) {
       
  4415 
       
  4416                 *out = Pass(lineno, col_offset, arena);
       
  4417                 if (*out == NULL) goto failed;
       
  4418                 return 0;
       
  4419         }
       
  4420         if (PyObject_IsInstance(obj, (PyObject*)Break_type)) {
       
  4421 
       
  4422                 *out = Break(lineno, col_offset, arena);
       
  4423                 if (*out == NULL) goto failed;
       
  4424                 return 0;
       
  4425         }
       
  4426         if (PyObject_IsInstance(obj, (PyObject*)Continue_type)) {
       
  4427 
       
  4428                 *out = Continue(lineno, col_offset, arena);
       
  4429                 if (*out == NULL) goto failed;
       
  4430                 return 0;
       
  4431         }
       
  4432 
       
  4433         tmp = PyObject_Repr(obj);
       
  4434         if (tmp == NULL) goto failed;
       
  4435         PyErr_Format(PyExc_TypeError, "expected some sort of stmt, but got %.400s", PyString_AS_STRING(tmp));
       
  4436 failed:
       
  4437         Py_XDECREF(tmp);
       
  4438         return 1;
       
  4439 }
       
  4440 
       
  4441 int
       
  4442 obj2ast_expr(PyObject* obj, expr_ty* out, PyArena* arena)
       
  4443 {
       
  4444         PyObject* tmp = NULL;
       
  4445 
       
  4446         int lineno;
       
  4447         int col_offset;
       
  4448 
       
  4449         if (obj == Py_None) {
       
  4450                 *out = NULL;
       
  4451                 return 0;
       
  4452         }
       
  4453         if (PyObject_HasAttrString(obj, "lineno")) {
       
  4454                 int res;
       
  4455                 tmp = PyObject_GetAttrString(obj, "lineno");
       
  4456                 if (tmp == NULL) goto failed;
       
  4457                 res = obj2ast_int(tmp, &lineno, arena);
       
  4458                 if (res != 0) goto failed;
       
  4459                 Py_XDECREF(tmp);
       
  4460                 tmp = NULL;
       
  4461         } else {
       
  4462                 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from expr");
       
  4463                 return 1;
       
  4464         }
       
  4465         if (PyObject_HasAttrString(obj, "col_offset")) {
       
  4466                 int res;
       
  4467                 tmp = PyObject_GetAttrString(obj, "col_offset");
       
  4468                 if (tmp == NULL) goto failed;
       
  4469                 res = obj2ast_int(tmp, &col_offset, arena);
       
  4470                 if (res != 0) goto failed;
       
  4471                 Py_XDECREF(tmp);
       
  4472                 tmp = NULL;
       
  4473         } else {
       
  4474                 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from expr");
       
  4475                 return 1;
       
  4476         }
       
  4477         if (PyObject_IsInstance(obj, (PyObject*)BoolOp_type)) {
       
  4478                 boolop_ty op;
       
  4479                 asdl_seq* values;
       
  4480 
       
  4481                 if (PyObject_HasAttrString(obj, "op")) {
       
  4482                         int res;
       
  4483                         tmp = PyObject_GetAttrString(obj, "op");
       
  4484                         if (tmp == NULL) goto failed;
       
  4485                         res = obj2ast_boolop(tmp, &op, arena);
       
  4486                         if (res != 0) goto failed;
       
  4487                         Py_XDECREF(tmp);
       
  4488                         tmp = NULL;
       
  4489                 } else {
       
  4490                         PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BoolOp");
       
  4491                         return 1;
       
  4492                 }
       
  4493                 if (PyObject_HasAttrString(obj, "values")) {
       
  4494                         int res;
       
  4495                         Py_ssize_t len;
       
  4496                         Py_ssize_t i;
       
  4497                         tmp = PyObject_GetAttrString(obj, "values");
       
  4498                         if (tmp == NULL) goto failed;
       
  4499                         if (!PyList_Check(tmp)) {
       
  4500                                 PyErr_Format(PyExc_TypeError, "BoolOp field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4501                                 goto failed;
       
  4502                         }
       
  4503                         len = PyList_GET_SIZE(tmp);
       
  4504                         values = asdl_seq_new(len, arena);
       
  4505                         if (values == NULL) goto failed;
       
  4506                         for (i = 0; i < len; i++) {
       
  4507                                 expr_ty value;
       
  4508                                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4509                                 if (res != 0) goto failed;
       
  4510                                 asdl_seq_SET(values, i, value);
       
  4511                         }
       
  4512                         Py_XDECREF(tmp);
       
  4513                         tmp = NULL;
       
  4514                 } else {
       
  4515                         PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from BoolOp");
       
  4516                         return 1;
       
  4517                 }
       
  4518                 *out = BoolOp(op, values, lineno, col_offset, arena);
       
  4519                 if (*out == NULL) goto failed;
       
  4520                 return 0;
       
  4521         }
       
  4522         if (PyObject_IsInstance(obj, (PyObject*)BinOp_type)) {
       
  4523                 expr_ty left;
       
  4524                 operator_ty op;
       
  4525                 expr_ty right;
       
  4526 
       
  4527                 if (PyObject_HasAttrString(obj, "left")) {
       
  4528                         int res;
       
  4529                         tmp = PyObject_GetAttrString(obj, "left");
       
  4530                         if (tmp == NULL) goto failed;
       
  4531                         res = obj2ast_expr(tmp, &left, arena);
       
  4532                         if (res != 0) goto failed;
       
  4533                         Py_XDECREF(tmp);
       
  4534                         tmp = NULL;
       
  4535                 } else {
       
  4536                         PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from BinOp");
       
  4537                         return 1;
       
  4538                 }
       
  4539                 if (PyObject_HasAttrString(obj, "op")) {
       
  4540                         int res;
       
  4541                         tmp = PyObject_GetAttrString(obj, "op");
       
  4542                         if (tmp == NULL) goto failed;
       
  4543                         res = obj2ast_operator(tmp, &op, arena);
       
  4544                         if (res != 0) goto failed;
       
  4545                         Py_XDECREF(tmp);
       
  4546                         tmp = NULL;
       
  4547                 } else {
       
  4548                         PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from BinOp");
       
  4549                         return 1;
       
  4550                 }
       
  4551                 if (PyObject_HasAttrString(obj, "right")) {
       
  4552                         int res;
       
  4553                         tmp = PyObject_GetAttrString(obj, "right");
       
  4554                         if (tmp == NULL) goto failed;
       
  4555                         res = obj2ast_expr(tmp, &right, arena);
       
  4556                         if (res != 0) goto failed;
       
  4557                         Py_XDECREF(tmp);
       
  4558                         tmp = NULL;
       
  4559                 } else {
       
  4560                         PyErr_SetString(PyExc_TypeError, "required field \"right\" missing from BinOp");
       
  4561                         return 1;
       
  4562                 }
       
  4563                 *out = BinOp(left, op, right, lineno, col_offset, arena);
       
  4564                 if (*out == NULL) goto failed;
       
  4565                 return 0;
       
  4566         }
       
  4567         if (PyObject_IsInstance(obj, (PyObject*)UnaryOp_type)) {
       
  4568                 unaryop_ty op;
       
  4569                 expr_ty operand;
       
  4570 
       
  4571                 if (PyObject_HasAttrString(obj, "op")) {
       
  4572                         int res;
       
  4573                         tmp = PyObject_GetAttrString(obj, "op");
       
  4574                         if (tmp == NULL) goto failed;
       
  4575                         res = obj2ast_unaryop(tmp, &op, arena);
       
  4576                         if (res != 0) goto failed;
       
  4577                         Py_XDECREF(tmp);
       
  4578                         tmp = NULL;
       
  4579                 } else {
       
  4580                         PyErr_SetString(PyExc_TypeError, "required field \"op\" missing from UnaryOp");
       
  4581                         return 1;
       
  4582                 }
       
  4583                 if (PyObject_HasAttrString(obj, "operand")) {
       
  4584                         int res;
       
  4585                         tmp = PyObject_GetAttrString(obj, "operand");
       
  4586                         if (tmp == NULL) goto failed;
       
  4587                         res = obj2ast_expr(tmp, &operand, arena);
       
  4588                         if (res != 0) goto failed;
       
  4589                         Py_XDECREF(tmp);
       
  4590                         tmp = NULL;
       
  4591                 } else {
       
  4592                         PyErr_SetString(PyExc_TypeError, "required field \"operand\" missing from UnaryOp");
       
  4593                         return 1;
       
  4594                 }
       
  4595                 *out = UnaryOp(op, operand, lineno, col_offset, arena);
       
  4596                 if (*out == NULL) goto failed;
       
  4597                 return 0;
       
  4598         }
       
  4599         if (PyObject_IsInstance(obj, (PyObject*)Lambda_type)) {
       
  4600                 arguments_ty args;
       
  4601                 expr_ty body;
       
  4602 
       
  4603                 if (PyObject_HasAttrString(obj, "args")) {
       
  4604                         int res;
       
  4605                         tmp = PyObject_GetAttrString(obj, "args");
       
  4606                         if (tmp == NULL) goto failed;
       
  4607                         res = obj2ast_arguments(tmp, &args, arena);
       
  4608                         if (res != 0) goto failed;
       
  4609                         Py_XDECREF(tmp);
       
  4610                         tmp = NULL;
       
  4611                 } else {
       
  4612                         PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Lambda");
       
  4613                         return 1;
       
  4614                 }
       
  4615                 if (PyObject_HasAttrString(obj, "body")) {
       
  4616                         int res;
       
  4617                         tmp = PyObject_GetAttrString(obj, "body");
       
  4618                         if (tmp == NULL) goto failed;
       
  4619                         res = obj2ast_expr(tmp, &body, arena);
       
  4620                         if (res != 0) goto failed;
       
  4621                         Py_XDECREF(tmp);
       
  4622                         tmp = NULL;
       
  4623                 } else {
       
  4624                         PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from Lambda");
       
  4625                         return 1;
       
  4626                 }
       
  4627                 *out = Lambda(args, body, lineno, col_offset, arena);
       
  4628                 if (*out == NULL) goto failed;
       
  4629                 return 0;
       
  4630         }
       
  4631         if (PyObject_IsInstance(obj, (PyObject*)IfExp_type)) {
       
  4632                 expr_ty test;
       
  4633                 expr_ty body;
       
  4634                 expr_ty orelse;
       
  4635 
       
  4636                 if (PyObject_HasAttrString(obj, "test")) {
       
  4637                         int res;
       
  4638                         tmp = PyObject_GetAttrString(obj, "test");
       
  4639                         if (tmp == NULL) goto failed;
       
  4640                         res = obj2ast_expr(tmp, &test, arena);
       
  4641                         if (res != 0) goto failed;
       
  4642                         Py_XDECREF(tmp);
       
  4643                         tmp = NULL;
       
  4644                 } else {
       
  4645                         PyErr_SetString(PyExc_TypeError, "required field \"test\" missing from IfExp");
       
  4646                         return 1;
       
  4647                 }
       
  4648                 if (PyObject_HasAttrString(obj, "body")) {
       
  4649                         int res;
       
  4650                         tmp = PyObject_GetAttrString(obj, "body");
       
  4651                         if (tmp == NULL) goto failed;
       
  4652                         res = obj2ast_expr(tmp, &body, arena);
       
  4653                         if (res != 0) goto failed;
       
  4654                         Py_XDECREF(tmp);
       
  4655                         tmp = NULL;
       
  4656                 } else {
       
  4657                         PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from IfExp");
       
  4658                         return 1;
       
  4659                 }
       
  4660                 if (PyObject_HasAttrString(obj, "orelse")) {
       
  4661                         int res;
       
  4662                         tmp = PyObject_GetAttrString(obj, "orelse");
       
  4663                         if (tmp == NULL) goto failed;
       
  4664                         res = obj2ast_expr(tmp, &orelse, arena);
       
  4665                         if (res != 0) goto failed;
       
  4666                         Py_XDECREF(tmp);
       
  4667                         tmp = NULL;
       
  4668                 } else {
       
  4669                         PyErr_SetString(PyExc_TypeError, "required field \"orelse\" missing from IfExp");
       
  4670                         return 1;
       
  4671                 }
       
  4672                 *out = IfExp(test, body, orelse, lineno, col_offset, arena);
       
  4673                 if (*out == NULL) goto failed;
       
  4674                 return 0;
       
  4675         }
       
  4676         if (PyObject_IsInstance(obj, (PyObject*)Dict_type)) {
       
  4677                 asdl_seq* keys;
       
  4678                 asdl_seq* values;
       
  4679 
       
  4680                 if (PyObject_HasAttrString(obj, "keys")) {
       
  4681                         int res;
       
  4682                         Py_ssize_t len;
       
  4683                         Py_ssize_t i;
       
  4684                         tmp = PyObject_GetAttrString(obj, "keys");
       
  4685                         if (tmp == NULL) goto failed;
       
  4686                         if (!PyList_Check(tmp)) {
       
  4687                                 PyErr_Format(PyExc_TypeError, "Dict field \"keys\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4688                                 goto failed;
       
  4689                         }
       
  4690                         len = PyList_GET_SIZE(tmp);
       
  4691                         keys = asdl_seq_new(len, arena);
       
  4692                         if (keys == NULL) goto failed;
       
  4693                         for (i = 0; i < len; i++) {
       
  4694                                 expr_ty value;
       
  4695                                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4696                                 if (res != 0) goto failed;
       
  4697                                 asdl_seq_SET(keys, i, value);
       
  4698                         }
       
  4699                         Py_XDECREF(tmp);
       
  4700                         tmp = NULL;
       
  4701                 } else {
       
  4702                         PyErr_SetString(PyExc_TypeError, "required field \"keys\" missing from Dict");
       
  4703                         return 1;
       
  4704                 }
       
  4705                 if (PyObject_HasAttrString(obj, "values")) {
       
  4706                         int res;
       
  4707                         Py_ssize_t len;
       
  4708                         Py_ssize_t i;
       
  4709                         tmp = PyObject_GetAttrString(obj, "values");
       
  4710                         if (tmp == NULL) goto failed;
       
  4711                         if (!PyList_Check(tmp)) {
       
  4712                                 PyErr_Format(PyExc_TypeError, "Dict field \"values\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4713                                 goto failed;
       
  4714                         }
       
  4715                         len = PyList_GET_SIZE(tmp);
       
  4716                         values = asdl_seq_new(len, arena);
       
  4717                         if (values == NULL) goto failed;
       
  4718                         for (i = 0; i < len; i++) {
       
  4719                                 expr_ty value;
       
  4720                                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4721                                 if (res != 0) goto failed;
       
  4722                                 asdl_seq_SET(values, i, value);
       
  4723                         }
       
  4724                         Py_XDECREF(tmp);
       
  4725                         tmp = NULL;
       
  4726                 } else {
       
  4727                         PyErr_SetString(PyExc_TypeError, "required field \"values\" missing from Dict");
       
  4728                         return 1;
       
  4729                 }
       
  4730                 *out = Dict(keys, values, lineno, col_offset, arena);
       
  4731                 if (*out == NULL) goto failed;
       
  4732                 return 0;
       
  4733         }
       
  4734         if (PyObject_IsInstance(obj, (PyObject*)ListComp_type)) {
       
  4735                 expr_ty elt;
       
  4736                 asdl_seq* generators;
       
  4737 
       
  4738                 if (PyObject_HasAttrString(obj, "elt")) {
       
  4739                         int res;
       
  4740                         tmp = PyObject_GetAttrString(obj, "elt");
       
  4741                         if (tmp == NULL) goto failed;
       
  4742                         res = obj2ast_expr(tmp, &elt, arena);
       
  4743                         if (res != 0) goto failed;
       
  4744                         Py_XDECREF(tmp);
       
  4745                         tmp = NULL;
       
  4746                 } else {
       
  4747                         PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from ListComp");
       
  4748                         return 1;
       
  4749                 }
       
  4750                 if (PyObject_HasAttrString(obj, "generators")) {
       
  4751                         int res;
       
  4752                         Py_ssize_t len;
       
  4753                         Py_ssize_t i;
       
  4754                         tmp = PyObject_GetAttrString(obj, "generators");
       
  4755                         if (tmp == NULL) goto failed;
       
  4756                         if (!PyList_Check(tmp)) {
       
  4757                                 PyErr_Format(PyExc_TypeError, "ListComp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4758                                 goto failed;
       
  4759                         }
       
  4760                         len = PyList_GET_SIZE(tmp);
       
  4761                         generators = asdl_seq_new(len, arena);
       
  4762                         if (generators == NULL) goto failed;
       
  4763                         for (i = 0; i < len; i++) {
       
  4764                                 comprehension_ty value;
       
  4765                                 res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4766                                 if (res != 0) goto failed;
       
  4767                                 asdl_seq_SET(generators, i, value);
       
  4768                         }
       
  4769                         Py_XDECREF(tmp);
       
  4770                         tmp = NULL;
       
  4771                 } else {
       
  4772                         PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from ListComp");
       
  4773                         return 1;
       
  4774                 }
       
  4775                 *out = ListComp(elt, generators, lineno, col_offset, arena);
       
  4776                 if (*out == NULL) goto failed;
       
  4777                 return 0;
       
  4778         }
       
  4779         if (PyObject_IsInstance(obj, (PyObject*)GeneratorExp_type)) {
       
  4780                 expr_ty elt;
       
  4781                 asdl_seq* generators;
       
  4782 
       
  4783                 if (PyObject_HasAttrString(obj, "elt")) {
       
  4784                         int res;
       
  4785                         tmp = PyObject_GetAttrString(obj, "elt");
       
  4786                         if (tmp == NULL) goto failed;
       
  4787                         res = obj2ast_expr(tmp, &elt, arena);
       
  4788                         if (res != 0) goto failed;
       
  4789                         Py_XDECREF(tmp);
       
  4790                         tmp = NULL;
       
  4791                 } else {
       
  4792                         PyErr_SetString(PyExc_TypeError, "required field \"elt\" missing from GeneratorExp");
       
  4793                         return 1;
       
  4794                 }
       
  4795                 if (PyObject_HasAttrString(obj, "generators")) {
       
  4796                         int res;
       
  4797                         Py_ssize_t len;
       
  4798                         Py_ssize_t i;
       
  4799                         tmp = PyObject_GetAttrString(obj, "generators");
       
  4800                         if (tmp == NULL) goto failed;
       
  4801                         if (!PyList_Check(tmp)) {
       
  4802                                 PyErr_Format(PyExc_TypeError, "GeneratorExp field \"generators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4803                                 goto failed;
       
  4804                         }
       
  4805                         len = PyList_GET_SIZE(tmp);
       
  4806                         generators = asdl_seq_new(len, arena);
       
  4807                         if (generators == NULL) goto failed;
       
  4808                         for (i = 0; i < len; i++) {
       
  4809                                 comprehension_ty value;
       
  4810                                 res = obj2ast_comprehension(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4811                                 if (res != 0) goto failed;
       
  4812                                 asdl_seq_SET(generators, i, value);
       
  4813                         }
       
  4814                         Py_XDECREF(tmp);
       
  4815                         tmp = NULL;
       
  4816                 } else {
       
  4817                         PyErr_SetString(PyExc_TypeError, "required field \"generators\" missing from GeneratorExp");
       
  4818                         return 1;
       
  4819                 }
       
  4820                 *out = GeneratorExp(elt, generators, lineno, col_offset, arena);
       
  4821                 if (*out == NULL) goto failed;
       
  4822                 return 0;
       
  4823         }
       
  4824         if (PyObject_IsInstance(obj, (PyObject*)Yield_type)) {
       
  4825                 expr_ty value;
       
  4826 
       
  4827                 if (PyObject_HasAttrString(obj, "value")) {
       
  4828                         int res;
       
  4829                         tmp = PyObject_GetAttrString(obj, "value");
       
  4830                         if (tmp == NULL) goto failed;
       
  4831                         res = obj2ast_expr(tmp, &value, arena);
       
  4832                         if (res != 0) goto failed;
       
  4833                         Py_XDECREF(tmp);
       
  4834                         tmp = NULL;
       
  4835                 } else {
       
  4836                         value = NULL;
       
  4837                 }
       
  4838                 *out = Yield(value, lineno, col_offset, arena);
       
  4839                 if (*out == NULL) goto failed;
       
  4840                 return 0;
       
  4841         }
       
  4842         if (PyObject_IsInstance(obj, (PyObject*)Compare_type)) {
       
  4843                 expr_ty left;
       
  4844                 asdl_int_seq* ops;
       
  4845                 asdl_seq* comparators;
       
  4846 
       
  4847                 if (PyObject_HasAttrString(obj, "left")) {
       
  4848                         int res;
       
  4849                         tmp = PyObject_GetAttrString(obj, "left");
       
  4850                         if (tmp == NULL) goto failed;
       
  4851                         res = obj2ast_expr(tmp, &left, arena);
       
  4852                         if (res != 0) goto failed;
       
  4853                         Py_XDECREF(tmp);
       
  4854                         tmp = NULL;
       
  4855                 } else {
       
  4856                         PyErr_SetString(PyExc_TypeError, "required field \"left\" missing from Compare");
       
  4857                         return 1;
       
  4858                 }
       
  4859                 if (PyObject_HasAttrString(obj, "ops")) {
       
  4860                         int res;
       
  4861                         Py_ssize_t len;
       
  4862                         Py_ssize_t i;
       
  4863                         tmp = PyObject_GetAttrString(obj, "ops");
       
  4864                         if (tmp == NULL) goto failed;
       
  4865                         if (!PyList_Check(tmp)) {
       
  4866                                 PyErr_Format(PyExc_TypeError, "Compare field \"ops\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4867                                 goto failed;
       
  4868                         }
       
  4869                         len = PyList_GET_SIZE(tmp);
       
  4870                         ops = asdl_int_seq_new(len, arena);
       
  4871                         if (ops == NULL) goto failed;
       
  4872                         for (i = 0; i < len; i++) {
       
  4873                                 cmpop_ty value;
       
  4874                                 res = obj2ast_cmpop(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4875                                 if (res != 0) goto failed;
       
  4876                                 asdl_seq_SET(ops, i, value);
       
  4877                         }
       
  4878                         Py_XDECREF(tmp);
       
  4879                         tmp = NULL;
       
  4880                 } else {
       
  4881                         PyErr_SetString(PyExc_TypeError, "required field \"ops\" missing from Compare");
       
  4882                         return 1;
       
  4883                 }
       
  4884                 if (PyObject_HasAttrString(obj, "comparators")) {
       
  4885                         int res;
       
  4886                         Py_ssize_t len;
       
  4887                         Py_ssize_t i;
       
  4888                         tmp = PyObject_GetAttrString(obj, "comparators");
       
  4889                         if (tmp == NULL) goto failed;
       
  4890                         if (!PyList_Check(tmp)) {
       
  4891                                 PyErr_Format(PyExc_TypeError, "Compare field \"comparators\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4892                                 goto failed;
       
  4893                         }
       
  4894                         len = PyList_GET_SIZE(tmp);
       
  4895                         comparators = asdl_seq_new(len, arena);
       
  4896                         if (comparators == NULL) goto failed;
       
  4897                         for (i = 0; i < len; i++) {
       
  4898                                 expr_ty value;
       
  4899                                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4900                                 if (res != 0) goto failed;
       
  4901                                 asdl_seq_SET(comparators, i, value);
       
  4902                         }
       
  4903                         Py_XDECREF(tmp);
       
  4904                         tmp = NULL;
       
  4905                 } else {
       
  4906                         PyErr_SetString(PyExc_TypeError, "required field \"comparators\" missing from Compare");
       
  4907                         return 1;
       
  4908                 }
       
  4909                 *out = Compare(left, ops, comparators, lineno, col_offset,
       
  4910                                arena);
       
  4911                 if (*out == NULL) goto failed;
       
  4912                 return 0;
       
  4913         }
       
  4914         if (PyObject_IsInstance(obj, (PyObject*)Call_type)) {
       
  4915                 expr_ty func;
       
  4916                 asdl_seq* args;
       
  4917                 asdl_seq* keywords;
       
  4918                 expr_ty starargs;
       
  4919                 expr_ty kwargs;
       
  4920 
       
  4921                 if (PyObject_HasAttrString(obj, "func")) {
       
  4922                         int res;
       
  4923                         tmp = PyObject_GetAttrString(obj, "func");
       
  4924                         if (tmp == NULL) goto failed;
       
  4925                         res = obj2ast_expr(tmp, &func, arena);
       
  4926                         if (res != 0) goto failed;
       
  4927                         Py_XDECREF(tmp);
       
  4928                         tmp = NULL;
       
  4929                 } else {
       
  4930                         PyErr_SetString(PyExc_TypeError, "required field \"func\" missing from Call");
       
  4931                         return 1;
       
  4932                 }
       
  4933                 if (PyObject_HasAttrString(obj, "args")) {
       
  4934                         int res;
       
  4935                         Py_ssize_t len;
       
  4936                         Py_ssize_t i;
       
  4937                         tmp = PyObject_GetAttrString(obj, "args");
       
  4938                         if (tmp == NULL) goto failed;
       
  4939                         if (!PyList_Check(tmp)) {
       
  4940                                 PyErr_Format(PyExc_TypeError, "Call field \"args\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4941                                 goto failed;
       
  4942                         }
       
  4943                         len = PyList_GET_SIZE(tmp);
       
  4944                         args = asdl_seq_new(len, arena);
       
  4945                         if (args == NULL) goto failed;
       
  4946                         for (i = 0; i < len; i++) {
       
  4947                                 expr_ty value;
       
  4948                                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4949                                 if (res != 0) goto failed;
       
  4950                                 asdl_seq_SET(args, i, value);
       
  4951                         }
       
  4952                         Py_XDECREF(tmp);
       
  4953                         tmp = NULL;
       
  4954                 } else {
       
  4955                         PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from Call");
       
  4956                         return 1;
       
  4957                 }
       
  4958                 if (PyObject_HasAttrString(obj, "keywords")) {
       
  4959                         int res;
       
  4960                         Py_ssize_t len;
       
  4961                         Py_ssize_t i;
       
  4962                         tmp = PyObject_GetAttrString(obj, "keywords");
       
  4963                         if (tmp == NULL) goto failed;
       
  4964                         if (!PyList_Check(tmp)) {
       
  4965                                 PyErr_Format(PyExc_TypeError, "Call field \"keywords\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  4966                                 goto failed;
       
  4967                         }
       
  4968                         len = PyList_GET_SIZE(tmp);
       
  4969                         keywords = asdl_seq_new(len, arena);
       
  4970                         if (keywords == NULL) goto failed;
       
  4971                         for (i = 0; i < len; i++) {
       
  4972                                 keyword_ty value;
       
  4973                                 res = obj2ast_keyword(PyList_GET_ITEM(tmp, i), &value, arena);
       
  4974                                 if (res != 0) goto failed;
       
  4975                                 asdl_seq_SET(keywords, i, value);
       
  4976                         }
       
  4977                         Py_XDECREF(tmp);
       
  4978                         tmp = NULL;
       
  4979                 } else {
       
  4980                         PyErr_SetString(PyExc_TypeError, "required field \"keywords\" missing from Call");
       
  4981                         return 1;
       
  4982                 }
       
  4983                 if (PyObject_HasAttrString(obj, "starargs")) {
       
  4984                         int res;
       
  4985                         tmp = PyObject_GetAttrString(obj, "starargs");
       
  4986                         if (tmp == NULL) goto failed;
       
  4987                         res = obj2ast_expr(tmp, &starargs, arena);
       
  4988                         if (res != 0) goto failed;
       
  4989                         Py_XDECREF(tmp);
       
  4990                         tmp = NULL;
       
  4991                 } else {
       
  4992                         starargs = NULL;
       
  4993                 }
       
  4994                 if (PyObject_HasAttrString(obj, "kwargs")) {
       
  4995                         int res;
       
  4996                         tmp = PyObject_GetAttrString(obj, "kwargs");
       
  4997                         if (tmp == NULL) goto failed;
       
  4998                         res = obj2ast_expr(tmp, &kwargs, arena);
       
  4999                         if (res != 0) goto failed;
       
  5000                         Py_XDECREF(tmp);
       
  5001                         tmp = NULL;
       
  5002                 } else {
       
  5003                         kwargs = NULL;
       
  5004                 }
       
  5005                 *out = Call(func, args, keywords, starargs, kwargs, lineno,
       
  5006                             col_offset, arena);
       
  5007                 if (*out == NULL) goto failed;
       
  5008                 return 0;
       
  5009         }
       
  5010         if (PyObject_IsInstance(obj, (PyObject*)Repr_type)) {
       
  5011                 expr_ty value;
       
  5012 
       
  5013                 if (PyObject_HasAttrString(obj, "value")) {
       
  5014                         int res;
       
  5015                         tmp = PyObject_GetAttrString(obj, "value");
       
  5016                         if (tmp == NULL) goto failed;
       
  5017                         res = obj2ast_expr(tmp, &value, arena);
       
  5018                         if (res != 0) goto failed;
       
  5019                         Py_XDECREF(tmp);
       
  5020                         tmp = NULL;
       
  5021                 } else {
       
  5022                         PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Repr");
       
  5023                         return 1;
       
  5024                 }
       
  5025                 *out = Repr(value, lineno, col_offset, arena);
       
  5026                 if (*out == NULL) goto failed;
       
  5027                 return 0;
       
  5028         }
       
  5029         if (PyObject_IsInstance(obj, (PyObject*)Num_type)) {
       
  5030                 object n;
       
  5031 
       
  5032                 if (PyObject_HasAttrString(obj, "n")) {
       
  5033                         int res;
       
  5034                         tmp = PyObject_GetAttrString(obj, "n");
       
  5035                         if (tmp == NULL) goto failed;
       
  5036                         res = obj2ast_object(tmp, &n, arena);
       
  5037                         if (res != 0) goto failed;
       
  5038                         Py_XDECREF(tmp);
       
  5039                         tmp = NULL;
       
  5040                 } else {
       
  5041                         PyErr_SetString(PyExc_TypeError, "required field \"n\" missing from Num");
       
  5042                         return 1;
       
  5043                 }
       
  5044                 *out = Num(n, lineno, col_offset, arena);
       
  5045                 if (*out == NULL) goto failed;
       
  5046                 return 0;
       
  5047         }
       
  5048         if (PyObject_IsInstance(obj, (PyObject*)Str_type)) {
       
  5049                 string s;
       
  5050 
       
  5051                 if (PyObject_HasAttrString(obj, "s")) {
       
  5052                         int res;
       
  5053                         tmp = PyObject_GetAttrString(obj, "s");
       
  5054                         if (tmp == NULL) goto failed;
       
  5055                         res = obj2ast_string(tmp, &s, arena);
       
  5056                         if (res != 0) goto failed;
       
  5057                         Py_XDECREF(tmp);
       
  5058                         tmp = NULL;
       
  5059                 } else {
       
  5060                         PyErr_SetString(PyExc_TypeError, "required field \"s\" missing from Str");
       
  5061                         return 1;
       
  5062                 }
       
  5063                 *out = Str(s, lineno, col_offset, arena);
       
  5064                 if (*out == NULL) goto failed;
       
  5065                 return 0;
       
  5066         }
       
  5067         if (PyObject_IsInstance(obj, (PyObject*)Attribute_type)) {
       
  5068                 expr_ty value;
       
  5069                 identifier attr;
       
  5070                 expr_context_ty ctx;
       
  5071 
       
  5072                 if (PyObject_HasAttrString(obj, "value")) {
       
  5073                         int res;
       
  5074                         tmp = PyObject_GetAttrString(obj, "value");
       
  5075                         if (tmp == NULL) goto failed;
       
  5076                         res = obj2ast_expr(tmp, &value, arena);
       
  5077                         if (res != 0) goto failed;
       
  5078                         Py_XDECREF(tmp);
       
  5079                         tmp = NULL;
       
  5080                 } else {
       
  5081                         PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Attribute");
       
  5082                         return 1;
       
  5083                 }
       
  5084                 if (PyObject_HasAttrString(obj, "attr")) {
       
  5085                         int res;
       
  5086                         tmp = PyObject_GetAttrString(obj, "attr");
       
  5087                         if (tmp == NULL) goto failed;
       
  5088                         res = obj2ast_identifier(tmp, &attr, arena);
       
  5089                         if (res != 0) goto failed;
       
  5090                         Py_XDECREF(tmp);
       
  5091                         tmp = NULL;
       
  5092                 } else {
       
  5093                         PyErr_SetString(PyExc_TypeError, "required field \"attr\" missing from Attribute");
       
  5094                         return 1;
       
  5095                 }
       
  5096                 if (PyObject_HasAttrString(obj, "ctx")) {
       
  5097                         int res;
       
  5098                         tmp = PyObject_GetAttrString(obj, "ctx");
       
  5099                         if (tmp == NULL) goto failed;
       
  5100                         res = obj2ast_expr_context(tmp, &ctx, arena);
       
  5101                         if (res != 0) goto failed;
       
  5102                         Py_XDECREF(tmp);
       
  5103                         tmp = NULL;
       
  5104                 } else {
       
  5105                         PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Attribute");
       
  5106                         return 1;
       
  5107                 }
       
  5108                 *out = Attribute(value, attr, ctx, lineno, col_offset, arena);
       
  5109                 if (*out == NULL) goto failed;
       
  5110                 return 0;
       
  5111         }
       
  5112         if (PyObject_IsInstance(obj, (PyObject*)Subscript_type)) {
       
  5113                 expr_ty value;
       
  5114                 slice_ty slice;
       
  5115                 expr_context_ty ctx;
       
  5116 
       
  5117                 if (PyObject_HasAttrString(obj, "value")) {
       
  5118                         int res;
       
  5119                         tmp = PyObject_GetAttrString(obj, "value");
       
  5120                         if (tmp == NULL) goto failed;
       
  5121                         res = obj2ast_expr(tmp, &value, arena);
       
  5122                         if (res != 0) goto failed;
       
  5123                         Py_XDECREF(tmp);
       
  5124                         tmp = NULL;
       
  5125                 } else {
       
  5126                         PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Subscript");
       
  5127                         return 1;
       
  5128                 }
       
  5129                 if (PyObject_HasAttrString(obj, "slice")) {
       
  5130                         int res;
       
  5131                         tmp = PyObject_GetAttrString(obj, "slice");
       
  5132                         if (tmp == NULL) goto failed;
       
  5133                         res = obj2ast_slice(tmp, &slice, arena);
       
  5134                         if (res != 0) goto failed;
       
  5135                         Py_XDECREF(tmp);
       
  5136                         tmp = NULL;
       
  5137                 } else {
       
  5138                         PyErr_SetString(PyExc_TypeError, "required field \"slice\" missing from Subscript");
       
  5139                         return 1;
       
  5140                 }
       
  5141                 if (PyObject_HasAttrString(obj, "ctx")) {
       
  5142                         int res;
       
  5143                         tmp = PyObject_GetAttrString(obj, "ctx");
       
  5144                         if (tmp == NULL) goto failed;
       
  5145                         res = obj2ast_expr_context(tmp, &ctx, arena);
       
  5146                         if (res != 0) goto failed;
       
  5147                         Py_XDECREF(tmp);
       
  5148                         tmp = NULL;
       
  5149                 } else {
       
  5150                         PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Subscript");
       
  5151                         return 1;
       
  5152                 }
       
  5153                 *out = Subscript(value, slice, ctx, lineno, col_offset, arena);
       
  5154                 if (*out == NULL) goto failed;
       
  5155                 return 0;
       
  5156         }
       
  5157         if (PyObject_IsInstance(obj, (PyObject*)Name_type)) {
       
  5158                 identifier id;
       
  5159                 expr_context_ty ctx;
       
  5160 
       
  5161                 if (PyObject_HasAttrString(obj, "id")) {
       
  5162                         int res;
       
  5163                         tmp = PyObject_GetAttrString(obj, "id");
       
  5164                         if (tmp == NULL) goto failed;
       
  5165                         res = obj2ast_identifier(tmp, &id, arena);
       
  5166                         if (res != 0) goto failed;
       
  5167                         Py_XDECREF(tmp);
       
  5168                         tmp = NULL;
       
  5169                 } else {
       
  5170                         PyErr_SetString(PyExc_TypeError, "required field \"id\" missing from Name");
       
  5171                         return 1;
       
  5172                 }
       
  5173                 if (PyObject_HasAttrString(obj, "ctx")) {
       
  5174                         int res;
       
  5175                         tmp = PyObject_GetAttrString(obj, "ctx");
       
  5176                         if (tmp == NULL) goto failed;
       
  5177                         res = obj2ast_expr_context(tmp, &ctx, arena);
       
  5178                         if (res != 0) goto failed;
       
  5179                         Py_XDECREF(tmp);
       
  5180                         tmp = NULL;
       
  5181                 } else {
       
  5182                         PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Name");
       
  5183                         return 1;
       
  5184                 }
       
  5185                 *out = Name(id, ctx, lineno, col_offset, arena);
       
  5186                 if (*out == NULL) goto failed;
       
  5187                 return 0;
       
  5188         }
       
  5189         if (PyObject_IsInstance(obj, (PyObject*)List_type)) {
       
  5190                 asdl_seq* elts;
       
  5191                 expr_context_ty ctx;
       
  5192 
       
  5193                 if (PyObject_HasAttrString(obj, "elts")) {
       
  5194                         int res;
       
  5195                         Py_ssize_t len;
       
  5196                         Py_ssize_t i;
       
  5197                         tmp = PyObject_GetAttrString(obj, "elts");
       
  5198                         if (tmp == NULL) goto failed;
       
  5199                         if (!PyList_Check(tmp)) {
       
  5200                                 PyErr_Format(PyExc_TypeError, "List field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  5201                                 goto failed;
       
  5202                         }
       
  5203                         len = PyList_GET_SIZE(tmp);
       
  5204                         elts = asdl_seq_new(len, arena);
       
  5205                         if (elts == NULL) goto failed;
       
  5206                         for (i = 0; i < len; i++) {
       
  5207                                 expr_ty value;
       
  5208                                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
       
  5209                                 if (res != 0) goto failed;
       
  5210                                 asdl_seq_SET(elts, i, value);
       
  5211                         }
       
  5212                         Py_XDECREF(tmp);
       
  5213                         tmp = NULL;
       
  5214                 } else {
       
  5215                         PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from List");
       
  5216                         return 1;
       
  5217                 }
       
  5218                 if (PyObject_HasAttrString(obj, "ctx")) {
       
  5219                         int res;
       
  5220                         tmp = PyObject_GetAttrString(obj, "ctx");
       
  5221                         if (tmp == NULL) goto failed;
       
  5222                         res = obj2ast_expr_context(tmp, &ctx, arena);
       
  5223                         if (res != 0) goto failed;
       
  5224                         Py_XDECREF(tmp);
       
  5225                         tmp = NULL;
       
  5226                 } else {
       
  5227                         PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from List");
       
  5228                         return 1;
       
  5229                 }
       
  5230                 *out = List(elts, ctx, lineno, col_offset, arena);
       
  5231                 if (*out == NULL) goto failed;
       
  5232                 return 0;
       
  5233         }
       
  5234         if (PyObject_IsInstance(obj, (PyObject*)Tuple_type)) {
       
  5235                 asdl_seq* elts;
       
  5236                 expr_context_ty ctx;
       
  5237 
       
  5238                 if (PyObject_HasAttrString(obj, "elts")) {
       
  5239                         int res;
       
  5240                         Py_ssize_t len;
       
  5241                         Py_ssize_t i;
       
  5242                         tmp = PyObject_GetAttrString(obj, "elts");
       
  5243                         if (tmp == NULL) goto failed;
       
  5244                         if (!PyList_Check(tmp)) {
       
  5245                                 PyErr_Format(PyExc_TypeError, "Tuple field \"elts\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  5246                                 goto failed;
       
  5247                         }
       
  5248                         len = PyList_GET_SIZE(tmp);
       
  5249                         elts = asdl_seq_new(len, arena);
       
  5250                         if (elts == NULL) goto failed;
       
  5251                         for (i = 0; i < len; i++) {
       
  5252                                 expr_ty value;
       
  5253                                 res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
       
  5254                                 if (res != 0) goto failed;
       
  5255                                 asdl_seq_SET(elts, i, value);
       
  5256                         }
       
  5257                         Py_XDECREF(tmp);
       
  5258                         tmp = NULL;
       
  5259                 } else {
       
  5260                         PyErr_SetString(PyExc_TypeError, "required field \"elts\" missing from Tuple");
       
  5261                         return 1;
       
  5262                 }
       
  5263                 if (PyObject_HasAttrString(obj, "ctx")) {
       
  5264                         int res;
       
  5265                         tmp = PyObject_GetAttrString(obj, "ctx");
       
  5266                         if (tmp == NULL) goto failed;
       
  5267                         res = obj2ast_expr_context(tmp, &ctx, arena);
       
  5268                         if (res != 0) goto failed;
       
  5269                         Py_XDECREF(tmp);
       
  5270                         tmp = NULL;
       
  5271                 } else {
       
  5272                         PyErr_SetString(PyExc_TypeError, "required field \"ctx\" missing from Tuple");
       
  5273                         return 1;
       
  5274                 }
       
  5275                 *out = Tuple(elts, ctx, lineno, col_offset, arena);
       
  5276                 if (*out == NULL) goto failed;
       
  5277                 return 0;
       
  5278         }
       
  5279 
       
  5280         tmp = PyObject_Repr(obj);
       
  5281         if (tmp == NULL) goto failed;
       
  5282         PyErr_Format(PyExc_TypeError, "expected some sort of expr, but got %.400s", PyString_AS_STRING(tmp));
       
  5283 failed:
       
  5284         Py_XDECREF(tmp);
       
  5285         return 1;
       
  5286 }
       
  5287 
       
  5288 int
       
  5289 obj2ast_expr_context(PyObject* obj, expr_context_ty* out, PyArena* arena)
       
  5290 {
       
  5291         PyObject* tmp = NULL;
       
  5292 
       
  5293         if (PyObject_IsInstance(obj, (PyObject*)Load_type)) {
       
  5294                 *out = Load;
       
  5295                 return 0;
       
  5296         }
       
  5297         if (PyObject_IsInstance(obj, (PyObject*)Store_type)) {
       
  5298                 *out = Store;
       
  5299                 return 0;
       
  5300         }
       
  5301         if (PyObject_IsInstance(obj, (PyObject*)Del_type)) {
       
  5302                 *out = Del;
       
  5303                 return 0;
       
  5304         }
       
  5305         if (PyObject_IsInstance(obj, (PyObject*)AugLoad_type)) {
       
  5306                 *out = AugLoad;
       
  5307                 return 0;
       
  5308         }
       
  5309         if (PyObject_IsInstance(obj, (PyObject*)AugStore_type)) {
       
  5310                 *out = AugStore;
       
  5311                 return 0;
       
  5312         }
       
  5313         if (PyObject_IsInstance(obj, (PyObject*)Param_type)) {
       
  5314                 *out = Param;
       
  5315                 return 0;
       
  5316         }
       
  5317 
       
  5318         tmp = PyObject_Repr(obj);
       
  5319         if (tmp == NULL) goto failed;
       
  5320         PyErr_Format(PyExc_TypeError, "expected some sort of expr_context, but got %.400s", PyString_AS_STRING(tmp));
       
  5321 failed:
       
  5322         Py_XDECREF(tmp);
       
  5323         return 1;
       
  5324 }
       
  5325 
       
  5326 int
       
  5327 obj2ast_slice(PyObject* obj, slice_ty* out, PyArena* arena)
       
  5328 {
       
  5329         PyObject* tmp = NULL;
       
  5330 
       
  5331 
       
  5332         if (obj == Py_None) {
       
  5333                 *out = NULL;
       
  5334                 return 0;
       
  5335         }
       
  5336         if (PyObject_IsInstance(obj, (PyObject*)Ellipsis_type)) {
       
  5337 
       
  5338                 *out = Ellipsis(arena);
       
  5339                 if (*out == NULL) goto failed;
       
  5340                 return 0;
       
  5341         }
       
  5342         if (PyObject_IsInstance(obj, (PyObject*)Slice_type)) {
       
  5343                 expr_ty lower;
       
  5344                 expr_ty upper;
       
  5345                 expr_ty step;
       
  5346 
       
  5347                 if (PyObject_HasAttrString(obj, "lower")) {
       
  5348                         int res;
       
  5349                         tmp = PyObject_GetAttrString(obj, "lower");
       
  5350                         if (tmp == NULL) goto failed;
       
  5351                         res = obj2ast_expr(tmp, &lower, arena);
       
  5352                         if (res != 0) goto failed;
       
  5353                         Py_XDECREF(tmp);
       
  5354                         tmp = NULL;
       
  5355                 } else {
       
  5356                         lower = NULL;
       
  5357                 }
       
  5358                 if (PyObject_HasAttrString(obj, "upper")) {
       
  5359                         int res;
       
  5360                         tmp = PyObject_GetAttrString(obj, "upper");
       
  5361                         if (tmp == NULL) goto failed;
       
  5362                         res = obj2ast_expr(tmp, &upper, arena);
       
  5363                         if (res != 0) goto failed;
       
  5364                         Py_XDECREF(tmp);
       
  5365                         tmp = NULL;
       
  5366                 } else {
       
  5367                         upper = NULL;
       
  5368                 }
       
  5369                 if (PyObject_HasAttrString(obj, "step")) {
       
  5370                         int res;
       
  5371                         tmp = PyObject_GetAttrString(obj, "step");
       
  5372                         if (tmp == NULL) goto failed;
       
  5373                         res = obj2ast_expr(tmp, &step, arena);
       
  5374                         if (res != 0) goto failed;
       
  5375                         Py_XDECREF(tmp);
       
  5376                         tmp = NULL;
       
  5377                 } else {
       
  5378                         step = NULL;
       
  5379                 }
       
  5380                 *out = Slice(lower, upper, step, arena);
       
  5381                 if (*out == NULL) goto failed;
       
  5382                 return 0;
       
  5383         }
       
  5384         if (PyObject_IsInstance(obj, (PyObject*)ExtSlice_type)) {
       
  5385                 asdl_seq* dims;
       
  5386 
       
  5387                 if (PyObject_HasAttrString(obj, "dims")) {
       
  5388                         int res;
       
  5389                         Py_ssize_t len;
       
  5390                         Py_ssize_t i;
       
  5391                         tmp = PyObject_GetAttrString(obj, "dims");
       
  5392                         if (tmp == NULL) goto failed;
       
  5393                         if (!PyList_Check(tmp)) {
       
  5394                                 PyErr_Format(PyExc_TypeError, "ExtSlice field \"dims\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  5395                                 goto failed;
       
  5396                         }
       
  5397                         len = PyList_GET_SIZE(tmp);
       
  5398                         dims = asdl_seq_new(len, arena);
       
  5399                         if (dims == NULL) goto failed;
       
  5400                         for (i = 0; i < len; i++) {
       
  5401                                 slice_ty value;
       
  5402                                 res = obj2ast_slice(PyList_GET_ITEM(tmp, i), &value, arena);
       
  5403                                 if (res != 0) goto failed;
       
  5404                                 asdl_seq_SET(dims, i, value);
       
  5405                         }
       
  5406                         Py_XDECREF(tmp);
       
  5407                         tmp = NULL;
       
  5408                 } else {
       
  5409                         PyErr_SetString(PyExc_TypeError, "required field \"dims\" missing from ExtSlice");
       
  5410                         return 1;
       
  5411                 }
       
  5412                 *out = ExtSlice(dims, arena);
       
  5413                 if (*out == NULL) goto failed;
       
  5414                 return 0;
       
  5415         }
       
  5416         if (PyObject_IsInstance(obj, (PyObject*)Index_type)) {
       
  5417                 expr_ty value;
       
  5418 
       
  5419                 if (PyObject_HasAttrString(obj, "value")) {
       
  5420                         int res;
       
  5421                         tmp = PyObject_GetAttrString(obj, "value");
       
  5422                         if (tmp == NULL) goto failed;
       
  5423                         res = obj2ast_expr(tmp, &value, arena);
       
  5424                         if (res != 0) goto failed;
       
  5425                         Py_XDECREF(tmp);
       
  5426                         tmp = NULL;
       
  5427                 } else {
       
  5428                         PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from Index");
       
  5429                         return 1;
       
  5430                 }
       
  5431                 *out = Index(value, arena);
       
  5432                 if (*out == NULL) goto failed;
       
  5433                 return 0;
       
  5434         }
       
  5435 
       
  5436         tmp = PyObject_Repr(obj);
       
  5437         if (tmp == NULL) goto failed;
       
  5438         PyErr_Format(PyExc_TypeError, "expected some sort of slice, but got %.400s", PyString_AS_STRING(tmp));
       
  5439 failed:
       
  5440         Py_XDECREF(tmp);
       
  5441         return 1;
       
  5442 }
       
  5443 
       
  5444 int
       
  5445 obj2ast_boolop(PyObject* obj, boolop_ty* out, PyArena* arena)
       
  5446 {
       
  5447         PyObject* tmp = NULL;
       
  5448 
       
  5449         if (PyObject_IsInstance(obj, (PyObject*)And_type)) {
       
  5450                 *out = And;
       
  5451                 return 0;
       
  5452         }
       
  5453         if (PyObject_IsInstance(obj, (PyObject*)Or_type)) {
       
  5454                 *out = Or;
       
  5455                 return 0;
       
  5456         }
       
  5457 
       
  5458         tmp = PyObject_Repr(obj);
       
  5459         if (tmp == NULL) goto failed;
       
  5460         PyErr_Format(PyExc_TypeError, "expected some sort of boolop, but got %.400s", PyString_AS_STRING(tmp));
       
  5461 failed:
       
  5462         Py_XDECREF(tmp);
       
  5463         return 1;
       
  5464 }
       
  5465 
       
  5466 int
       
  5467 obj2ast_operator(PyObject* obj, operator_ty* out, PyArena* arena)
       
  5468 {
       
  5469         PyObject* tmp = NULL;
       
  5470 
       
  5471         if (PyObject_IsInstance(obj, (PyObject*)Add_type)) {
       
  5472                 *out = Add;
       
  5473                 return 0;
       
  5474         }
       
  5475         if (PyObject_IsInstance(obj, (PyObject*)Sub_type)) {
       
  5476                 *out = Sub;
       
  5477                 return 0;
       
  5478         }
       
  5479         if (PyObject_IsInstance(obj, (PyObject*)Mult_type)) {
       
  5480                 *out = Mult;
       
  5481                 return 0;
       
  5482         }
       
  5483         if (PyObject_IsInstance(obj, (PyObject*)Div_type)) {
       
  5484                 *out = Div;
       
  5485                 return 0;
       
  5486         }
       
  5487         if (PyObject_IsInstance(obj, (PyObject*)Mod_type)) {
       
  5488                 *out = Mod;
       
  5489                 return 0;
       
  5490         }
       
  5491         if (PyObject_IsInstance(obj, (PyObject*)Pow_type)) {
       
  5492                 *out = Pow;
       
  5493                 return 0;
       
  5494         }
       
  5495         if (PyObject_IsInstance(obj, (PyObject*)LShift_type)) {
       
  5496                 *out = LShift;
       
  5497                 return 0;
       
  5498         }
       
  5499         if (PyObject_IsInstance(obj, (PyObject*)RShift_type)) {
       
  5500                 *out = RShift;
       
  5501                 return 0;
       
  5502         }
       
  5503         if (PyObject_IsInstance(obj, (PyObject*)BitOr_type)) {
       
  5504                 *out = BitOr;
       
  5505                 return 0;
       
  5506         }
       
  5507         if (PyObject_IsInstance(obj, (PyObject*)BitXor_type)) {
       
  5508                 *out = BitXor;
       
  5509                 return 0;
       
  5510         }
       
  5511         if (PyObject_IsInstance(obj, (PyObject*)BitAnd_type)) {
       
  5512                 *out = BitAnd;
       
  5513                 return 0;
       
  5514         }
       
  5515         if (PyObject_IsInstance(obj, (PyObject*)FloorDiv_type)) {
       
  5516                 *out = FloorDiv;
       
  5517                 return 0;
       
  5518         }
       
  5519 
       
  5520         tmp = PyObject_Repr(obj);
       
  5521         if (tmp == NULL) goto failed;
       
  5522         PyErr_Format(PyExc_TypeError, "expected some sort of operator, but got %.400s", PyString_AS_STRING(tmp));
       
  5523 failed:
       
  5524         Py_XDECREF(tmp);
       
  5525         return 1;
       
  5526 }
       
  5527 
       
  5528 int
       
  5529 obj2ast_unaryop(PyObject* obj, unaryop_ty* out, PyArena* arena)
       
  5530 {
       
  5531         PyObject* tmp = NULL;
       
  5532 
       
  5533         if (PyObject_IsInstance(obj, (PyObject*)Invert_type)) {
       
  5534                 *out = Invert;
       
  5535                 return 0;
       
  5536         }
       
  5537         if (PyObject_IsInstance(obj, (PyObject*)Not_type)) {
       
  5538                 *out = Not;
       
  5539                 return 0;
       
  5540         }
       
  5541         if (PyObject_IsInstance(obj, (PyObject*)UAdd_type)) {
       
  5542                 *out = UAdd;
       
  5543                 return 0;
       
  5544         }
       
  5545         if (PyObject_IsInstance(obj, (PyObject*)USub_type)) {
       
  5546                 *out = USub;
       
  5547                 return 0;
       
  5548         }
       
  5549 
       
  5550         tmp = PyObject_Repr(obj);
       
  5551         if (tmp == NULL) goto failed;
       
  5552         PyErr_Format(PyExc_TypeError, "expected some sort of unaryop, but got %.400s", PyString_AS_STRING(tmp));
       
  5553 failed:
       
  5554         Py_XDECREF(tmp);
       
  5555         return 1;
       
  5556 }
       
  5557 
       
  5558 int
       
  5559 obj2ast_cmpop(PyObject* obj, cmpop_ty* out, PyArena* arena)
       
  5560 {
       
  5561         PyObject* tmp = NULL;
       
  5562 
       
  5563         if (PyObject_IsInstance(obj, (PyObject*)Eq_type)) {
       
  5564                 *out = Eq;
       
  5565                 return 0;
       
  5566         }
       
  5567         if (PyObject_IsInstance(obj, (PyObject*)NotEq_type)) {
       
  5568                 *out = NotEq;
       
  5569                 return 0;
       
  5570         }
       
  5571         if (PyObject_IsInstance(obj, (PyObject*)Lt_type)) {
       
  5572                 *out = Lt;
       
  5573                 return 0;
       
  5574         }
       
  5575         if (PyObject_IsInstance(obj, (PyObject*)LtE_type)) {
       
  5576                 *out = LtE;
       
  5577                 return 0;
       
  5578         }
       
  5579         if (PyObject_IsInstance(obj, (PyObject*)Gt_type)) {
       
  5580                 *out = Gt;
       
  5581                 return 0;
       
  5582         }
       
  5583         if (PyObject_IsInstance(obj, (PyObject*)GtE_type)) {
       
  5584                 *out = GtE;
       
  5585                 return 0;
       
  5586         }
       
  5587         if (PyObject_IsInstance(obj, (PyObject*)Is_type)) {
       
  5588                 *out = Is;
       
  5589                 return 0;
       
  5590         }
       
  5591         if (PyObject_IsInstance(obj, (PyObject*)IsNot_type)) {
       
  5592                 *out = IsNot;
       
  5593                 return 0;
       
  5594         }
       
  5595         if (PyObject_IsInstance(obj, (PyObject*)In_type)) {
       
  5596                 *out = In;
       
  5597                 return 0;
       
  5598         }
       
  5599         if (PyObject_IsInstance(obj, (PyObject*)NotIn_type)) {
       
  5600                 *out = NotIn;
       
  5601                 return 0;
       
  5602         }
       
  5603 
       
  5604         tmp = PyObject_Repr(obj);
       
  5605         if (tmp == NULL) goto failed;
       
  5606         PyErr_Format(PyExc_TypeError, "expected some sort of cmpop, but got %.400s", PyString_AS_STRING(tmp));
       
  5607 failed:
       
  5608         Py_XDECREF(tmp);
       
  5609         return 1;
       
  5610 }
       
  5611 
       
  5612 int
       
  5613 obj2ast_comprehension(PyObject* obj, comprehension_ty* out, PyArena* arena)
       
  5614 {
       
  5615         PyObject* tmp = NULL;
       
  5616         expr_ty target;
       
  5617         expr_ty iter;
       
  5618         asdl_seq* ifs;
       
  5619 
       
  5620         if (PyObject_HasAttrString(obj, "target")) {
       
  5621                 int res;
       
  5622                 tmp = PyObject_GetAttrString(obj, "target");
       
  5623                 if (tmp == NULL) goto failed;
       
  5624                 res = obj2ast_expr(tmp, &target, arena);
       
  5625                 if (res != 0) goto failed;
       
  5626                 Py_XDECREF(tmp);
       
  5627                 tmp = NULL;
       
  5628         } else {
       
  5629                 PyErr_SetString(PyExc_TypeError, "required field \"target\" missing from comprehension");
       
  5630                 return 1;
       
  5631         }
       
  5632         if (PyObject_HasAttrString(obj, "iter")) {
       
  5633                 int res;
       
  5634                 tmp = PyObject_GetAttrString(obj, "iter");
       
  5635                 if (tmp == NULL) goto failed;
       
  5636                 res = obj2ast_expr(tmp, &iter, arena);
       
  5637                 if (res != 0) goto failed;
       
  5638                 Py_XDECREF(tmp);
       
  5639                 tmp = NULL;
       
  5640         } else {
       
  5641                 PyErr_SetString(PyExc_TypeError, "required field \"iter\" missing from comprehension");
       
  5642                 return 1;
       
  5643         }
       
  5644         if (PyObject_HasAttrString(obj, "ifs")) {
       
  5645                 int res;
       
  5646                 Py_ssize_t len;
       
  5647                 Py_ssize_t i;
       
  5648                 tmp = PyObject_GetAttrString(obj, "ifs");
       
  5649                 if (tmp == NULL) goto failed;
       
  5650                 if (!PyList_Check(tmp)) {
       
  5651                         PyErr_Format(PyExc_TypeError, "comprehension field \"ifs\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  5652                         goto failed;
       
  5653                 }
       
  5654                 len = PyList_GET_SIZE(tmp);
       
  5655                 ifs = asdl_seq_new(len, arena);
       
  5656                 if (ifs == NULL) goto failed;
       
  5657                 for (i = 0; i < len; i++) {
       
  5658                         expr_ty value;
       
  5659                         res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
       
  5660                         if (res != 0) goto failed;
       
  5661                         asdl_seq_SET(ifs, i, value);
       
  5662                 }
       
  5663                 Py_XDECREF(tmp);
       
  5664                 tmp = NULL;
       
  5665         } else {
       
  5666                 PyErr_SetString(PyExc_TypeError, "required field \"ifs\" missing from comprehension");
       
  5667                 return 1;
       
  5668         }
       
  5669         *out = comprehension(target, iter, ifs, arena);
       
  5670         return 0;
       
  5671 failed:
       
  5672         Py_XDECREF(tmp);
       
  5673         return 1;
       
  5674 }
       
  5675 
       
  5676 int
       
  5677 obj2ast_excepthandler(PyObject* obj, excepthandler_ty* out, PyArena* arena)
       
  5678 {
       
  5679         PyObject* tmp = NULL;
       
  5680 
       
  5681         int lineno;
       
  5682         int col_offset;
       
  5683 
       
  5684         if (obj == Py_None) {
       
  5685                 *out = NULL;
       
  5686                 return 0;
       
  5687         }
       
  5688         if (PyObject_HasAttrString(obj, "lineno")) {
       
  5689                 int res;
       
  5690                 tmp = PyObject_GetAttrString(obj, "lineno");
       
  5691                 if (tmp == NULL) goto failed;
       
  5692                 res = obj2ast_int(tmp, &lineno, arena);
       
  5693                 if (res != 0) goto failed;
       
  5694                 Py_XDECREF(tmp);
       
  5695                 tmp = NULL;
       
  5696         } else {
       
  5697                 PyErr_SetString(PyExc_TypeError, "required field \"lineno\" missing from excepthandler");
       
  5698                 return 1;
       
  5699         }
       
  5700         if (PyObject_HasAttrString(obj, "col_offset")) {
       
  5701                 int res;
       
  5702                 tmp = PyObject_GetAttrString(obj, "col_offset");
       
  5703                 if (tmp == NULL) goto failed;
       
  5704                 res = obj2ast_int(tmp, &col_offset, arena);
       
  5705                 if (res != 0) goto failed;
       
  5706                 Py_XDECREF(tmp);
       
  5707                 tmp = NULL;
       
  5708         } else {
       
  5709                 PyErr_SetString(PyExc_TypeError, "required field \"col_offset\" missing from excepthandler");
       
  5710                 return 1;
       
  5711         }
       
  5712         if (PyObject_IsInstance(obj, (PyObject*)ExceptHandler_type)) {
       
  5713                 expr_ty type;
       
  5714                 expr_ty name;
       
  5715                 asdl_seq* body;
       
  5716 
       
  5717                 if (PyObject_HasAttrString(obj, "type")) {
       
  5718                         int res;
       
  5719                         tmp = PyObject_GetAttrString(obj, "type");
       
  5720                         if (tmp == NULL) goto failed;
       
  5721                         res = obj2ast_expr(tmp, &type, arena);
       
  5722                         if (res != 0) goto failed;
       
  5723                         Py_XDECREF(tmp);
       
  5724                         tmp = NULL;
       
  5725                 } else {
       
  5726                         type = NULL;
       
  5727                 }
       
  5728                 if (PyObject_HasAttrString(obj, "name")) {
       
  5729                         int res;
       
  5730                         tmp = PyObject_GetAttrString(obj, "name");
       
  5731                         if (tmp == NULL) goto failed;
       
  5732                         res = obj2ast_expr(tmp, &name, arena);
       
  5733                         if (res != 0) goto failed;
       
  5734                         Py_XDECREF(tmp);
       
  5735                         tmp = NULL;
       
  5736                 } else {
       
  5737                         name = NULL;
       
  5738                 }
       
  5739                 if (PyObject_HasAttrString(obj, "body")) {
       
  5740                         int res;
       
  5741                         Py_ssize_t len;
       
  5742                         Py_ssize_t i;
       
  5743                         tmp = PyObject_GetAttrString(obj, "body");
       
  5744                         if (tmp == NULL) goto failed;
       
  5745                         if (!PyList_Check(tmp)) {
       
  5746                                 PyErr_Format(PyExc_TypeError, "ExceptHandler field \"body\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  5747                                 goto failed;
       
  5748                         }
       
  5749                         len = PyList_GET_SIZE(tmp);
       
  5750                         body = asdl_seq_new(len, arena);
       
  5751                         if (body == NULL) goto failed;
       
  5752                         for (i = 0; i < len; i++) {
       
  5753                                 stmt_ty value;
       
  5754                                 res = obj2ast_stmt(PyList_GET_ITEM(tmp, i), &value, arena);
       
  5755                                 if (res != 0) goto failed;
       
  5756                                 asdl_seq_SET(body, i, value);
       
  5757                         }
       
  5758                         Py_XDECREF(tmp);
       
  5759                         tmp = NULL;
       
  5760                 } else {
       
  5761                         PyErr_SetString(PyExc_TypeError, "required field \"body\" missing from ExceptHandler");
       
  5762                         return 1;
       
  5763                 }
       
  5764                 *out = ExceptHandler(type, name, body, lineno, col_offset,
       
  5765                                      arena);
       
  5766                 if (*out == NULL) goto failed;
       
  5767                 return 0;
       
  5768         }
       
  5769 
       
  5770         tmp = PyObject_Repr(obj);
       
  5771         if (tmp == NULL) goto failed;
       
  5772         PyErr_Format(PyExc_TypeError, "expected some sort of excepthandler, but got %.400s", PyString_AS_STRING(tmp));
       
  5773 failed:
       
  5774         Py_XDECREF(tmp);
       
  5775         return 1;
       
  5776 }
       
  5777 
       
  5778 int
       
  5779 obj2ast_arguments(PyObject* obj, arguments_ty* out, PyArena* arena)
       
  5780 {
       
  5781         PyObject* tmp = NULL;
       
  5782         asdl_seq* args;
       
  5783         identifier vararg;
       
  5784         identifier kwarg;
       
  5785         asdl_seq* defaults;
       
  5786 
       
  5787         if (PyObject_HasAttrString(obj, "args")) {
       
  5788                 int res;
       
  5789                 Py_ssize_t len;
       
  5790                 Py_ssize_t i;
       
  5791                 tmp = PyObject_GetAttrString(obj, "args");
       
  5792                 if (tmp == NULL) goto failed;
       
  5793                 if (!PyList_Check(tmp)) {
       
  5794                         PyErr_Format(PyExc_TypeError, "arguments field \"args\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  5795                         goto failed;
       
  5796                 }
       
  5797                 len = PyList_GET_SIZE(tmp);
       
  5798                 args = asdl_seq_new(len, arena);
       
  5799                 if (args == NULL) goto failed;
       
  5800                 for (i = 0; i < len; i++) {
       
  5801                         expr_ty value;
       
  5802                         res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
       
  5803                         if (res != 0) goto failed;
       
  5804                         asdl_seq_SET(args, i, value);
       
  5805                 }
       
  5806                 Py_XDECREF(tmp);
       
  5807                 tmp = NULL;
       
  5808         } else {
       
  5809                 PyErr_SetString(PyExc_TypeError, "required field \"args\" missing from arguments");
       
  5810                 return 1;
       
  5811         }
       
  5812         if (PyObject_HasAttrString(obj, "vararg")) {
       
  5813                 int res;
       
  5814                 tmp = PyObject_GetAttrString(obj, "vararg");
       
  5815                 if (tmp == NULL) goto failed;
       
  5816                 res = obj2ast_identifier(tmp, &vararg, arena);
       
  5817                 if (res != 0) goto failed;
       
  5818                 Py_XDECREF(tmp);
       
  5819                 tmp = NULL;
       
  5820         } else {
       
  5821                 vararg = NULL;
       
  5822         }
       
  5823         if (PyObject_HasAttrString(obj, "kwarg")) {
       
  5824                 int res;
       
  5825                 tmp = PyObject_GetAttrString(obj, "kwarg");
       
  5826                 if (tmp == NULL) goto failed;
       
  5827                 res = obj2ast_identifier(tmp, &kwarg, arena);
       
  5828                 if (res != 0) goto failed;
       
  5829                 Py_XDECREF(tmp);
       
  5830                 tmp = NULL;
       
  5831         } else {
       
  5832                 kwarg = NULL;
       
  5833         }
       
  5834         if (PyObject_HasAttrString(obj, "defaults")) {
       
  5835                 int res;
       
  5836                 Py_ssize_t len;
       
  5837                 Py_ssize_t i;
       
  5838                 tmp = PyObject_GetAttrString(obj, "defaults");
       
  5839                 if (tmp == NULL) goto failed;
       
  5840                 if (!PyList_Check(tmp)) {
       
  5841                         PyErr_Format(PyExc_TypeError, "arguments field \"defaults\" must be a list, not a %.200s", tmp->ob_type->tp_name);
       
  5842                         goto failed;
       
  5843                 }
       
  5844                 len = PyList_GET_SIZE(tmp);
       
  5845                 defaults = asdl_seq_new(len, arena);
       
  5846                 if (defaults == NULL) goto failed;
       
  5847                 for (i = 0; i < len; i++) {
       
  5848                         expr_ty value;
       
  5849                         res = obj2ast_expr(PyList_GET_ITEM(tmp, i), &value, arena);
       
  5850                         if (res != 0) goto failed;
       
  5851                         asdl_seq_SET(defaults, i, value);
       
  5852                 }
       
  5853                 Py_XDECREF(tmp);
       
  5854                 tmp = NULL;
       
  5855         } else {
       
  5856                 PyErr_SetString(PyExc_TypeError, "required field \"defaults\" missing from arguments");
       
  5857                 return 1;
       
  5858         }
       
  5859         *out = arguments(args, vararg, kwarg, defaults, arena);
       
  5860         return 0;
       
  5861 failed:
       
  5862         Py_XDECREF(tmp);
       
  5863         return 1;
       
  5864 }
       
  5865 
       
  5866 int
       
  5867 obj2ast_keyword(PyObject* obj, keyword_ty* out, PyArena* arena)
       
  5868 {
       
  5869         PyObject* tmp = NULL;
       
  5870         identifier arg;
       
  5871         expr_ty value;
       
  5872 
       
  5873         if (PyObject_HasAttrString(obj, "arg")) {
       
  5874                 int res;
       
  5875                 tmp = PyObject_GetAttrString(obj, "arg");
       
  5876                 if (tmp == NULL) goto failed;
       
  5877                 res = obj2ast_identifier(tmp, &arg, arena);
       
  5878                 if (res != 0) goto failed;
       
  5879                 Py_XDECREF(tmp);
       
  5880                 tmp = NULL;
       
  5881         } else {
       
  5882                 PyErr_SetString(PyExc_TypeError, "required field \"arg\" missing from keyword");
       
  5883                 return 1;
       
  5884         }
       
  5885         if (PyObject_HasAttrString(obj, "value")) {
       
  5886                 int res;
       
  5887                 tmp = PyObject_GetAttrString(obj, "value");
       
  5888                 if (tmp == NULL) goto failed;
       
  5889                 res = obj2ast_expr(tmp, &value, arena);
       
  5890                 if (res != 0) goto failed;
       
  5891                 Py_XDECREF(tmp);
       
  5892                 tmp = NULL;
       
  5893         } else {
       
  5894                 PyErr_SetString(PyExc_TypeError, "required field \"value\" missing from keyword");
       
  5895                 return 1;
       
  5896         }
       
  5897         *out = keyword(arg, value, arena);
       
  5898         return 0;
       
  5899 failed:
       
  5900         Py_XDECREF(tmp);
       
  5901         return 1;
       
  5902 }
       
  5903 
       
  5904 int
       
  5905 obj2ast_alias(PyObject* obj, alias_ty* out, PyArena* arena)
       
  5906 {
       
  5907         PyObject* tmp = NULL;
       
  5908         identifier name;
       
  5909         identifier asname;
       
  5910 
       
  5911         if (PyObject_HasAttrString(obj, "name")) {
       
  5912                 int res;
       
  5913                 tmp = PyObject_GetAttrString(obj, "name");
       
  5914                 if (tmp == NULL) goto failed;
       
  5915                 res = obj2ast_identifier(tmp, &name, arena);
       
  5916                 if (res != 0) goto failed;
       
  5917                 Py_XDECREF(tmp);
       
  5918                 tmp = NULL;
       
  5919         } else {
       
  5920                 PyErr_SetString(PyExc_TypeError, "required field \"name\" missing from alias");
       
  5921                 return 1;
       
  5922         }
       
  5923         if (PyObject_HasAttrString(obj, "asname")) {
       
  5924                 int res;
       
  5925                 tmp = PyObject_GetAttrString(obj, "asname");
       
  5926                 if (tmp == NULL) goto failed;
       
  5927                 res = obj2ast_identifier(tmp, &asname, arena);
       
  5928                 if (res != 0) goto failed;
       
  5929                 Py_XDECREF(tmp);
       
  5930                 tmp = NULL;
       
  5931         } else {
       
  5932                 asname = NULL;
       
  5933         }
       
  5934         *out = alias(name, asname, arena);
       
  5935         return 0;
       
  5936 failed:
       
  5937         Py_XDECREF(tmp);
       
  5938         return 1;
       
  5939 }
       
  5940 
       
  5941 
       
  5942 PyMODINIT_FUNC
       
  5943 init_ast(void)
       
  5944 {
       
  5945         PyObject *m, *d;
       
  5946         if (!init_types()) return;
       
  5947         m = Py_InitModule3("_ast", NULL, NULL);
       
  5948         if (!m) return;
       
  5949         d = PyModule_GetDict(m);
       
  5950         if (PyDict_SetItemString(d, "AST", (PyObject*)&AST_type) < 0) return;
       
  5951         if (PyModule_AddIntConstant(m, "PyCF_ONLY_AST", PyCF_ONLY_AST) < 0)
       
  5952                 return;
       
  5953         if (PyModule_AddStringConstant(m, "__version__", "62047") < 0)
       
  5954                 return;
       
  5955         if (PyDict_SetItemString(d, "mod", (PyObject*)mod_type) < 0) return;
       
  5956         if (PyDict_SetItemString(d, "Module", (PyObject*)Module_type) < 0)
       
  5957             return;
       
  5958         if (PyDict_SetItemString(d, "Interactive", (PyObject*)Interactive_type)
       
  5959             < 0) return;
       
  5960         if (PyDict_SetItemString(d, "Expression", (PyObject*)Expression_type) <
       
  5961             0) return;
       
  5962         if (PyDict_SetItemString(d, "Suite", (PyObject*)Suite_type) < 0) return;
       
  5963         if (PyDict_SetItemString(d, "stmt", (PyObject*)stmt_type) < 0) return;
       
  5964         if (PyDict_SetItemString(d, "FunctionDef", (PyObject*)FunctionDef_type)
       
  5965             < 0) return;
       
  5966         if (PyDict_SetItemString(d, "ClassDef", (PyObject*)ClassDef_type) < 0)
       
  5967             return;
       
  5968         if (PyDict_SetItemString(d, "Return", (PyObject*)Return_type) < 0)
       
  5969             return;
       
  5970         if (PyDict_SetItemString(d, "Delete", (PyObject*)Delete_type) < 0)
       
  5971             return;
       
  5972         if (PyDict_SetItemString(d, "Assign", (PyObject*)Assign_type) < 0)
       
  5973             return;
       
  5974         if (PyDict_SetItemString(d, "AugAssign", (PyObject*)AugAssign_type) <
       
  5975             0) return;
       
  5976         if (PyDict_SetItemString(d, "Print", (PyObject*)Print_type) < 0) return;
       
  5977         if (PyDict_SetItemString(d, "For", (PyObject*)For_type) < 0) return;
       
  5978         if (PyDict_SetItemString(d, "While", (PyObject*)While_type) < 0) return;
       
  5979         if (PyDict_SetItemString(d, "If", (PyObject*)If_type) < 0) return;
       
  5980         if (PyDict_SetItemString(d, "With", (PyObject*)With_type) < 0) return;
       
  5981         if (PyDict_SetItemString(d, "Raise", (PyObject*)Raise_type) < 0) return;
       
  5982         if (PyDict_SetItemString(d, "TryExcept", (PyObject*)TryExcept_type) <
       
  5983             0) return;
       
  5984         if (PyDict_SetItemString(d, "TryFinally", (PyObject*)TryFinally_type) <
       
  5985             0) return;
       
  5986         if (PyDict_SetItemString(d, "Assert", (PyObject*)Assert_type) < 0)
       
  5987             return;
       
  5988         if (PyDict_SetItemString(d, "Import", (PyObject*)Import_type) < 0)
       
  5989             return;
       
  5990         if (PyDict_SetItemString(d, "ImportFrom", (PyObject*)ImportFrom_type) <
       
  5991             0) return;
       
  5992         if (PyDict_SetItemString(d, "Exec", (PyObject*)Exec_type) < 0) return;
       
  5993         if (PyDict_SetItemString(d, "Global", (PyObject*)Global_type) < 0)
       
  5994             return;
       
  5995         if (PyDict_SetItemString(d, "Expr", (PyObject*)Expr_type) < 0) return;
       
  5996         if (PyDict_SetItemString(d, "Pass", (PyObject*)Pass_type) < 0) return;
       
  5997         if (PyDict_SetItemString(d, "Break", (PyObject*)Break_type) < 0) return;
       
  5998         if (PyDict_SetItemString(d, "Continue", (PyObject*)Continue_type) < 0)
       
  5999             return;
       
  6000         if (PyDict_SetItemString(d, "expr", (PyObject*)expr_type) < 0) return;
       
  6001         if (PyDict_SetItemString(d, "BoolOp", (PyObject*)BoolOp_type) < 0)
       
  6002             return;
       
  6003         if (PyDict_SetItemString(d, "BinOp", (PyObject*)BinOp_type) < 0) return;
       
  6004         if (PyDict_SetItemString(d, "UnaryOp", (PyObject*)UnaryOp_type) < 0)
       
  6005             return;
       
  6006         if (PyDict_SetItemString(d, "Lambda", (PyObject*)Lambda_type) < 0)
       
  6007             return;
       
  6008         if (PyDict_SetItemString(d, "IfExp", (PyObject*)IfExp_type) < 0) return;
       
  6009         if (PyDict_SetItemString(d, "Dict", (PyObject*)Dict_type) < 0) return;
       
  6010         if (PyDict_SetItemString(d, "ListComp", (PyObject*)ListComp_type) < 0)
       
  6011             return;
       
  6012         if (PyDict_SetItemString(d, "GeneratorExp",
       
  6013             (PyObject*)GeneratorExp_type) < 0) return;
       
  6014         if (PyDict_SetItemString(d, "Yield", (PyObject*)Yield_type) < 0) return;
       
  6015         if (PyDict_SetItemString(d, "Compare", (PyObject*)Compare_type) < 0)
       
  6016             return;
       
  6017         if (PyDict_SetItemString(d, "Call", (PyObject*)Call_type) < 0) return;
       
  6018         if (PyDict_SetItemString(d, "Repr", (PyObject*)Repr_type) < 0) return;
       
  6019         if (PyDict_SetItemString(d, "Num", (PyObject*)Num_type) < 0) return;
       
  6020         if (PyDict_SetItemString(d, "Str", (PyObject*)Str_type) < 0) return;
       
  6021         if (PyDict_SetItemString(d, "Attribute", (PyObject*)Attribute_type) <
       
  6022             0) return;
       
  6023         if (PyDict_SetItemString(d, "Subscript", (PyObject*)Subscript_type) <
       
  6024             0) return;
       
  6025         if (PyDict_SetItemString(d, "Name", (PyObject*)Name_type) < 0) return;
       
  6026         if (PyDict_SetItemString(d, "List", (PyObject*)List_type) < 0) return;
       
  6027         if (PyDict_SetItemString(d, "Tuple", (PyObject*)Tuple_type) < 0) return;
       
  6028         if (PyDict_SetItemString(d, "expr_context",
       
  6029             (PyObject*)expr_context_type) < 0) return;
       
  6030         if (PyDict_SetItemString(d, "Load", (PyObject*)Load_type) < 0) return;
       
  6031         if (PyDict_SetItemString(d, "Store", (PyObject*)Store_type) < 0) return;
       
  6032         if (PyDict_SetItemString(d, "Del", (PyObject*)Del_type) < 0) return;
       
  6033         if (PyDict_SetItemString(d, "AugLoad", (PyObject*)AugLoad_type) < 0)
       
  6034             return;
       
  6035         if (PyDict_SetItemString(d, "AugStore", (PyObject*)AugStore_type) < 0)
       
  6036             return;
       
  6037         if (PyDict_SetItemString(d, "Param", (PyObject*)Param_type) < 0) return;
       
  6038         if (PyDict_SetItemString(d, "slice", (PyObject*)slice_type) < 0) return;
       
  6039         if (PyDict_SetItemString(d, "Ellipsis", (PyObject*)Ellipsis_type) < 0)
       
  6040             return;
       
  6041         if (PyDict_SetItemString(d, "Slice", (PyObject*)Slice_type) < 0) return;
       
  6042         if (PyDict_SetItemString(d, "ExtSlice", (PyObject*)ExtSlice_type) < 0)
       
  6043             return;
       
  6044         if (PyDict_SetItemString(d, "Index", (PyObject*)Index_type) < 0) return;
       
  6045         if (PyDict_SetItemString(d, "boolop", (PyObject*)boolop_type) < 0)
       
  6046             return;
       
  6047         if (PyDict_SetItemString(d, "And", (PyObject*)And_type) < 0) return;
       
  6048         if (PyDict_SetItemString(d, "Or", (PyObject*)Or_type) < 0) return;
       
  6049         if (PyDict_SetItemString(d, "operator", (PyObject*)operator_type) < 0)
       
  6050             return;
       
  6051         if (PyDict_SetItemString(d, "Add", (PyObject*)Add_type) < 0) return;
       
  6052         if (PyDict_SetItemString(d, "Sub", (PyObject*)Sub_type) < 0) return;
       
  6053         if (PyDict_SetItemString(d, "Mult", (PyObject*)Mult_type) < 0) return;
       
  6054         if (PyDict_SetItemString(d, "Div", (PyObject*)Div_type) < 0) return;
       
  6055         if (PyDict_SetItemString(d, "Mod", (PyObject*)Mod_type) < 0) return;
       
  6056         if (PyDict_SetItemString(d, "Pow", (PyObject*)Pow_type) < 0) return;
       
  6057         if (PyDict_SetItemString(d, "LShift", (PyObject*)LShift_type) < 0)
       
  6058             return;
       
  6059         if (PyDict_SetItemString(d, "RShift", (PyObject*)RShift_type) < 0)
       
  6060             return;
       
  6061         if (PyDict_SetItemString(d, "BitOr", (PyObject*)BitOr_type) < 0) return;
       
  6062         if (PyDict_SetItemString(d, "BitXor", (PyObject*)BitXor_type) < 0)
       
  6063             return;
       
  6064         if (PyDict_SetItemString(d, "BitAnd", (PyObject*)BitAnd_type) < 0)
       
  6065             return;
       
  6066         if (PyDict_SetItemString(d, "FloorDiv", (PyObject*)FloorDiv_type) < 0)
       
  6067             return;
       
  6068         if (PyDict_SetItemString(d, "unaryop", (PyObject*)unaryop_type) < 0)
       
  6069             return;
       
  6070         if (PyDict_SetItemString(d, "Invert", (PyObject*)Invert_type) < 0)
       
  6071             return;
       
  6072         if (PyDict_SetItemString(d, "Not", (PyObject*)Not_type) < 0) return;
       
  6073         if (PyDict_SetItemString(d, "UAdd", (PyObject*)UAdd_type) < 0) return;
       
  6074         if (PyDict_SetItemString(d, "USub", (PyObject*)USub_type) < 0) return;
       
  6075         if (PyDict_SetItemString(d, "cmpop", (PyObject*)cmpop_type) < 0) return;
       
  6076         if (PyDict_SetItemString(d, "Eq", (PyObject*)Eq_type) < 0) return;
       
  6077         if (PyDict_SetItemString(d, "NotEq", (PyObject*)NotEq_type) < 0) return;
       
  6078         if (PyDict_SetItemString(d, "Lt", (PyObject*)Lt_type) < 0) return;
       
  6079         if (PyDict_SetItemString(d, "LtE", (PyObject*)LtE_type) < 0) return;
       
  6080         if (PyDict_SetItemString(d, "Gt", (PyObject*)Gt_type) < 0) return;
       
  6081         if (PyDict_SetItemString(d, "GtE", (PyObject*)GtE_type) < 0) return;
       
  6082         if (PyDict_SetItemString(d, "Is", (PyObject*)Is_type) < 0) return;
       
  6083         if (PyDict_SetItemString(d, "IsNot", (PyObject*)IsNot_type) < 0) return;
       
  6084         if (PyDict_SetItemString(d, "In", (PyObject*)In_type) < 0) return;
       
  6085         if (PyDict_SetItemString(d, "NotIn", (PyObject*)NotIn_type) < 0) return;
       
  6086         if (PyDict_SetItemString(d, "comprehension",
       
  6087             (PyObject*)comprehension_type) < 0) return;
       
  6088         if (PyDict_SetItemString(d, "excepthandler",
       
  6089             (PyObject*)excepthandler_type) < 0) return;
       
  6090         if (PyDict_SetItemString(d, "ExceptHandler",
       
  6091             (PyObject*)ExceptHandler_type) < 0) return;
       
  6092         if (PyDict_SetItemString(d, "arguments", (PyObject*)arguments_type) <
       
  6093             0) return;
       
  6094         if (PyDict_SetItemString(d, "keyword", (PyObject*)keyword_type) < 0)
       
  6095             return;
       
  6096         if (PyDict_SetItemString(d, "alias", (PyObject*)alias_type) < 0) return;
       
  6097 }
       
  6098 
       
  6099 
       
  6100 PyObject* PyAST_mod2obj(mod_ty t)
       
  6101 {
       
  6102     init_types();
       
  6103     return ast2obj_mod(t);
       
  6104 }
       
  6105 
       
  6106 /* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
       
  6107 mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
       
  6108 {
       
  6109     mod_ty res;
       
  6110     PyObject *req_type[] = {(PyObject*)Module_type, (PyObject*)Expression_type,
       
  6111                             (PyObject*)Interactive_type};
       
  6112     char *req_name[] = {"Module", "Expression", "Interactive"};
       
  6113     assert(0 <= mode && mode <= 2);
       
  6114 
       
  6115     init_types();
       
  6116 
       
  6117     if (!PyObject_IsInstance(ast, req_type[mode])) {
       
  6118         PyErr_Format(PyExc_TypeError, "expected %s node, got %.400s",
       
  6119                      req_name[mode], Py_TYPE(ast)->tp_name);
       
  6120         return NULL;
       
  6121     }
       
  6122     if (obj2ast_mod(ast, &res, arena) != 0)
       
  6123         return NULL;
       
  6124     else
       
  6125         return res;
       
  6126 }
       
  6127 
       
  6128 int PyAST_Check(PyObject* obj)
       
  6129 {
       
  6130     init_types();
       
  6131     return PyObject_IsInstance(obj, (PyObject*)&AST_type);
       
  6132 }
       
  6133 
       
  6134