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