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