Lines Matching refs:emit

113     def emit(self, s, depth, reflow=True):
219 self.emit(s, depth)
220 self.emit("", depth)
225 self.emit(s, depth)
226 self.emit("", depth)
231 self.emit(s, depth)
232 self.emit("", depth)
249 self.emit("""\
254 self.emit("", depth)
255 self.emit("asdl_%(name)s_seq *_Py_asdl_%(name)s_seq_new(Py_ssize_t size, PyArena *arena);" % locals(), depth)
256 self.emit("", depth)
276 def emit(s, depth=depth):
277 self.emit(s % sys._getframe(1).f_locals, depth)
283 emit("enum _%(name)s_kind {" + ", ".join(enum) + "};")
285 emit("struct _%(name)s {")
286 emit("enum _%(name)s_kind kind;", depth + 1)
287 emit("union {", depth + 1)
290 emit("} v;", depth + 1)
295 emit("%s %s;" % (type, field.name), depth + 1);
296 emit("};")
297 emit("")
301 self.emit("struct {", depth)
304 self.emit("} %s;" % cons.name, depth)
305 self.emit("", depth)
314 self.emit("asdl_int_seq *%(name)s;" % locals(), depth)
317 self.emit("asdl_%(_type)s_seq *%(name)s;" % locals(), depth)
319 self.emit("%(ctype)s %(name)s;" % locals(), depth)
322 self.emit("struct _%(name)s {" % locals(), depth)
329 self.emit("%s %s;" % (type, field.name), depth + 1);
330 self.emit("};", depth)
331 self.emit("", depth)
396 self.emit("%s %s(%s);" % (ctype, ast_func_name(name), argstr), False)
409 def emit(s, depth=0, reflow=True):
410 self.emit(s, depth, reflow)
417 self.emit("%s" % ctype, 0)
418 emit("%s(%s)" % (ast_func_name(name), argstr))
419 emit("{")
420 emit("%s p;" % ctype, 1)
423 emit("if (!%s) {" % argname, 1)
424 emit("PyErr_SetString(PyExc_ValueError,", 2)
426 emit(' "%s");' % msg,
428 emit('return NULL;', 2)
429 emit('}', 1)
431 emit("p = (%s)_PyArena_Malloc(arena, sizeof(*p));" % ctype, 1);
432 emit("if (!p)", 1)
433 emit("return NULL;", 2)
438 emit("return p;", 1)
439 emit("}")
440 emit("")
443 def emit(s, depth=0, reflow=True):
444 self.emit(s, depth, reflow)
445 emit("p->kind = %s_kind;" % name, 1)
447 emit("p->v.%s.%s = %s;" % (name, argname, argname), 1)
449 emit("p->%s = %s;" % (argname, argname), 1)
452 def emit(s, depth=0, reflow=True):
453 self.emit(s, depth, reflow)
455 emit("p->%s = %s;" % (argname, argname), 1)
457 emit("p->%s = %s;" % (argname, argname), 1)
485 self.emit(code % (name, get_c_type(name)), 0)
499 self.emit('if (_Py_EnterRecursiveCall(" while traversing \'%s\' node")) {' % node, level, reflow=False)
500 self.emit('goto failed;', level + 1)
501 self.emit('}', level)
503 self.emit('_Py_LeaveRecursiveCall();', level)
507 self.emit("int", 0)
508 self.emit("obj2ast_%s(struct ast_state *state, PyObject* obj, %s* out, PyArena* arena)" % (name, ctype), 0)
509 self.emit("{", 0)
510 self.emit("int isinstance;", 1)
511 self.emit("", 0)
514 self.emit("", 0)
518 self.emit(format % error, 1, reflow=False)
520 self.emit("failed:", 1)
521 self.emit("Py_XDECREF(tmp);", 1)
522 self.emit("return 1;", 1)
523 self.emit("}", 0)
524 self.emit("", 0)
531 self.emit(line % (t.name,), 1)
532 self.emit("if (isinstance == -1) {", 1)
533 self.emit("return 1;", 2)
534 self.emit("}", 1)
535 self.emit("if (isinstance) {", 1)
536 self.emit("*out = %s;" % t.name, 2)
537 self.emit("return 0;", 2)
538 self.emit("}", 1)
546 self.emit("PyObject *tmp = NULL;", 1)
547 self.emit("PyObject *tp;", 1)
550 self.emit("", 0)
552 self.emit("if (obj == Py_None) {", 1)
553 self.emit("*out = NULL;", 2)
554 self.emit("return 0;", 2)
555 self.emit("}", 1)
559 self.emit("tp = state->%s_type;" % (t.name,), 1)
560 self.emit("isinstance = PyObject_IsInstance(obj, tp);", 1)
561 self.emit("if (isinstance == -1) {", 1)
562 self.emit("return 1;", 2)
563 self.emit("}", 1)
564 self.emit("if (isinstance) {", 1)
567 self.emit("", 0)
571 self.emit("*out = %s(%s);" % (ast_func_name(t.name), self.buildArgs(args)), 2)
572 self.emit("if (*out == NULL) goto failed;", 2)
573 self.emit("return 0;", 2)
574 self.emit("}", 1)
579 self.emit("%s %s;" % (ctype, a.name), 1)
589 self.emit("int", 0)
590 self.emit("obj2ast_%s(struct ast_state *state, PyObject* obj, %s* out, PyArena* arena)" % (name, ctype), 0)
591 self.emit("{", 0)
592 self.emit("PyObject* tmp = NULL;", 1)
597 self.emit("", 0)
604 self.emit("*out = %s(%s);" % (ast_func_name(name), self.buildArgs(args)), 1)
605 self.emit("return 0;", 1)
606 self.emit("failed:", 0)
607 self.emit("Py_XDECREF(tmp);", 1)
608 self.emit("return 1;", 1)
609 self.emit("}", 0)
610 self.emit("", 0)
616 self.emit("asdl_int_seq* %s;" % field.name, depth)
619 self.emit(f"asdl_{field.type}_seq* {field.name};", depth)
622 self.emit("%s %s;" % (ctype, field.name), depth)
633 self.emit(line % field.name, depth)
634 self.emit("return 1;", depth+1)
635 self.emit("}", depth)
637 self.emit("if (tmp == NULL) {", depth)
640 self.emit(format % message, depth+1, reflow=False)
641 self.emit("return 1;", depth+1)
643 self.emit("if (tmp == NULL || tmp == Py_None) {", depth)
644 self.emit("Py_CLEAR(tmp);", depth+1)
647 self.emit(
652 self.emit("%s = 0;" % field.name, depth+1)
654 self.emit("%s = NULL;" % field.name, depth+1)
657 self.emit("}", depth)
658 self.emit("else {", depth)
660 self.emit("int res;", depth+1)
662 self.emit("Py_ssize_t len;", depth+1)
663 self.emit("Py_ssize_t i;", depth+1)
664 self.emit("if (!PyList_Check(tmp)) {", depth+1)
665 self.emit("PyErr_Format(PyExc_TypeError, \"%s field \\\"%s\\\" must "
669 self.emit("goto failed;", depth+2)
670 self.emit("}", depth+1)
671 self.emit("len = PyList_GET_SIZE(tmp);", depth+1)
673 self.emit("%s = _Py_asdl_int_seq_new(len, arena);" % field.name, depth+1)
675 self.emit("%s = _Py_asdl_%s_seq_new(len, arena);" % (field.name, field.type), depth+1)
676 self.emit("if (%s == NULL) goto failed;" % field.name, depth+1)
677 self.emit("for (i = 0; i < len; i++) {", depth+1)
678 self.emit("%s val;" % ctype, depth+2)
679 self.emit("PyObject *tmp2 = PyList_GET_ITEM(tmp, i);", depth+2)
680 self.emit("Py_INCREF(tmp2);", depth+2)
682 self.emit("res = obj2ast_%s(state, tmp2, &val, arena);" %
684 self.emit("Py_DECREF(tmp2);", depth+2)
685 self.emit("if (res != 0) goto failed;", depth+2)
686 self.emit("if (len != PyList_GET_SIZE(tmp)) {", depth+2)
687 self.emit("PyErr_SetString(PyExc_RuntimeError, \"%s field \\\"%s\\\" "
691 self.emit("goto failed;", depth+3)
692 self.emit("}", depth+2)
693 self.emit("asdl_seq_SET(%s, i, val);" % field.name, depth+2)
694 self.emit("}", depth+1)
697 self.emit("res = obj2ast_%s(state, tmp, &%s, arena);" %
699 self.emit("if (res != 0) goto failed;", depth+1)
701 self.emit("Py_CLEAR(tmp);", depth+1)
702 self.emit("}", depth)
721 self.emit(f"GENERATE_ASDL_SEQ_CONSTRUCTOR({name}, {type})", depth=0)
726 self.emit("static PyObject* ast2obj_%s(struct ast_state *state, void*);" % name, 0)
728 self.emit("static const char * const %s_attributes[] = {" % name, 0)
730 self.emit('"%s",' % a.name, 1)
731 self.emit("};", 0)
733 self.emit("static const char * const %s_fields[]={" % name,0)
735 self.emit('"%s",' % f.name, 1)
736 self.emit("};", 0)
740 self.emit("static const char * const %s_attributes[] = {" % name, 0)
742 self.emit('"%s",' % a.name, 1)
743 self.emit("};", 0)
747 self.emit("static PyObject* ast2obj_%s(struct ast_state *state, %s);" % (name, ptype), 0)
753 self.emit("static const char * const %s_fields[]={" % cons.name, 0)
755 self.emit('"%s",' % t.name, 1)
756 self.emit("};",0)
762 self.emit("""
1128 self.emit('state->%s_type = make_type(state, "%s", state->AST_type, %s, %d,' %
1130 self.emit('%s);' % reflow_c_string(asdl_of(name, prod), 2), 2, reflow=False)
1131 self.emit("if (!state->%s_type) return 0;" % name, 1)
1133 self.emit("if (!add_attributes(state, state->%s_type, %s_attributes, %d)) return 0;" %
1136 self.emit("if (!add_attributes(state, state->%s_type, NULL, 0)) return 0;" % name, 1)
1141 self.emit('state->%s_type = make_type(state, "%s", state->AST_type, NULL, 0,' %
1143 self.emit('%s);' % reflow_c_string(asdl_of(name, sum), 2), 2, reflow=False)
1144 self.emit("if (!state->%s_type) return 0;" % name, 1)
1146 self.emit("if (!add_attributes(state, state->%s_type, %s_attributes, %d)) return 0;" %
1149 self.emit("if (!add_attributes(state, state->%s_type, NULL, 0)) return 0;" % name, 1)
1160 self.emit('state->%s_type = make_type(state, "%s", state->%s_type, %s, %d,' %
1162 self.emit('%s);' % reflow_c_string(asdl_of(cons.name, cons), 2), 2, reflow=False)
1163 self.emit("if (!state->%s_type) return 0;" % cons.name, 1)
1166 self.emit("state->%s_singleton = PyType_GenericNew((PyTypeObject *)"
1169 self.emit("if (!state->%s_singleton) return 0;" % cons.name, 1)
1174 self.emit('if (PyObject_SetAttr(state->%s_type, state->%s, Py_None) == -1)' %
1176 self.emit("return 0;", depth+1)
1182 self.emit("static int", 0)
1183 self.emit("astmodule_exec(PyObject *m)", 0)
1184 self.emit("{", 0)
1185 self.emit('struct ast_state *state = get_ast_state();', 1)
1186 self.emit('if (state == NULL) {', 1)
1187 self.emit('return -1;', 2)
1188 self.emit('}', 1)
1189 self.emit('if (PyModule_AddObjectRef(m, "AST", state->AST_type) < 0) {', 1)
1190 self.emit('return -1;', 2)
1191 self.emit('}', 1)
1192 self.emit('if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0) {', 1)
1193 self.emit("return -1;", 2)
1194 self.emit('}', 1)
1195 self.emit('if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0) {', 1)
1196 self.emit("return -1;", 2)
1197 self.emit('}', 1)
1198 self.emit('if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0) {', 1)
1199 self.emit("return -1;", 2)
1200 self.emit('}', 1)
1203 self.emit("return 0;", 1)
1204 self.emit("}", 0)
1205 self.emit("", 0)
1206 self.emit("""
1239 self.emit("if (PyModule_AddObjectRef(m, \"%s\", "
1241 self.emit("return -1;", 2)
1242 self.emit('}', 1)
1246 CODE = '''Very simple, always emit this static code. Override CODE'''
1249 self.emit(self.CODE, 0, reflow=False)
1256 self.emit("PyObject*", 0)
1257 self.emit("ast2obj_%s(struct ast_state *state, void* _o)" % (name), 0)
1258 self.emit("{", 0)
1259 self.emit("%s o = (%s)_o;" % (ctype, ctype), 1)
1260 self.emit("PyObject *result = NULL, *value = NULL;", 1)
1261 self.emit("PyTypeObject *tp;", 1)
1262 self.emit('if (!o) {', 1)
1263 self.emit("Py_RETURN_NONE;", 2)
1264 self.emit("}", 1)
1265 self.emit("if (++state->recursion_depth > state->recursion_limit) {", 1)
1266 self.emit("PyErr_SetString(PyExc_RecursionError,", 2)
1267 self.emit('"maximum recursion depth exceeded during ast construction");', 3)
1268 self.emit("return 0;", 2)
1269 self.emit("}", 1)
1272 self.emit("state->recursion_depth--;", 1)
1273 self.emit("return result;", 1)
1274 self.emit("failed:", 0)
1275 self.emit("Py_XDECREF(value);", 1)
1276 self.emit("Py_XDECREF(result);", 1)
1277 self.emit("return NULL;", 1)
1278 self.emit("}", 0)
1279 self.emit("", 0)
1286 self.emit("switch (o->kind) {", 1)
1290 self.emit("}", 1)
1292 self.emit("value = ast2obj_%s(state, o->%s);" % (a.type, a.name), 1)
1293 self.emit("if (!value) goto failed;", 1)
1294 self.emit('if (PyObject_SetAttr(result, state->%s, value) < 0)' % a.name, 1)
1295 self.emit('goto failed;', 2)
1296 self.emit('Py_DECREF(value);', 1)
1300 self.emit("PyObject* ast2obj_%s(struct ast_state *state, %s_ty o)" % (name, name), 0)
1301 self.emit("{", 0)
1302 self.emit("switch(o) {", 1)
1304 self.emit("case %s:" % t.name, 2)
1305 self.emit("Py_INCREF(state->%s_singleton);" % t.name, 3)
1306 self.emit("return state->%s_singleton;" % t.name, 3)
1307 self.emit("}", 1)
1308 self.emit("Py_UNREACHABLE();", 1);
1309 self.emit("}", 0)
1313 self.emit("tp = (PyTypeObject *)state->%s_type;" % name, 1)
1314 self.emit("result = PyType_GenericNew(tp, NULL, NULL);", 1);
1315 self.emit("if (!result) return NULL;", 1)
1319 self.emit("value = ast2obj_%s(state, o->%s);" % (a.type, a.name), 1)
1320 self.emit("if (!value) goto failed;", 1)
1321 self.emit("if (PyObject_SetAttr(result, state->%s, value) < 0)" % a.name, 1)
1322 self.emit('goto failed;', 2)
1323 self.emit('Py_DECREF(value);', 1)
1327 self.emit("case %s_kind:" % cons.name, 1)
1328 self.emit("tp = (PyTypeObject *)state->%s_type;" % cons.name, 2)
1329 self.emit("result = PyType_GenericNew(tp, NULL, NULL);", 2);
1330 self.emit("if (!result) goto failed;", 2)
1333 self.emit("break;", 2)
1336 def emit(s, d):
1337 self.emit(s, depth + d)
1343 emit("if (!value) goto failed;", 0)
1344 emit("if (PyObject_SetAttr(result, state->%s, value) == -1)" % field.name, 0)
1345 emit("goto failed;", 1)
1346 emit("Py_DECREF(value);", 0)
1353 self.emit("{", depth)
1354 self.emit("Py_ssize_t i, n = asdl_seq_LEN(%s);" % value, depth+1)
1355 self.emit("value = PyList_New(n);", depth+1)
1356 self.emit("if (!value) goto failed;", depth+1)
1357 self.emit("for(i = 0; i < n; i++)", depth+1)
1359 self.emit(
1367 self.emit("}", depth)
1369 self.emit("value = ast2obj_list(state, (asdl_seq*)%s, ast2obj_%s);" % (value, field.type), depth)
1371 self.emit("value = ast2obj_%s(state, %s);" % (field.type, value), depth, reflow=False)
1468 v.emit("", 0)