Lines Matching +full:- +full:- +full:depth
28 def reflow_lines(s, depth): argument
29 """Reflow the line s indented depth tabs.
33 exclusively on depth * TABSIZE. All following lines -- these are
34 the reflowed lines generated by this function -- start at the same
38 size = MAX_COL - depth * TABSIZE
48 if i == -1 and 'GeneratorExp' in cur:
50 assert i != -1, "Impossible line %d to reflow: %r" % (size, s)
57 size -= j
63 size -= j
70 def reflow_c_string(s, depth): argument
71 return '"%s"' % s.replace('\n', '\\n"\n%s"' % (' ' * depth * TABSIZE))
119 def emit(self, s, depth, reflow=True): argument
122 lines = reflow_lines(s, depth)
127 line = (" " * TABSIZE * depth) + line
136 def visitType(self, type, depth=0): argument
137 self.visit(type.value, type.name, depth)
139 def visitSum(self, sum, name, depth): argument
141 self.simple_sum(sum, name, depth)
143 self.sum_with_constructors(sum, name, depth)
145 def simple_sum(self, sum, name, depth): argument
153 self.emit(s, depth)
154 self.emit("", depth)
156 def sum_with_constructors(self, sum, name, depth): argument
159 self.emit(s, depth)
160 self.emit("", depth)
162 def visitProduct(self, product, name, depth): argument
165 self.emit(s, depth)
166 self.emit("", depth)
173 def visitType(self, type, depth=0): argument
174 self.visit(type.value, type.name, depth)
176 def visitSum(self, sum, name, depth): argument
179 self.emit_sequence_constructor(name, depth)
181 def emit_sequence_constructor(self, name,depth): argument
187 } asdl_%(name)s_seq;""" % locals(), reflow=False, depth=depth)
188 self.emit("", depth)
189 …"asdl_%(name)s_seq *_Py_asdl_%(name)s_seq_new(Py_ssize_t size, PyArena *arena);" % locals(), depth)
190 self.emit("", depth)
192 def visitProduct(self, product, name, depth): argument
193 self.emit_sequence_constructor(name, depth)
202 def visitType(self, type, depth=0): argument
203 self.visit(type.value, type.name, depth)
205 def visitSum(self, sum, name, depth): argument
207 self.sum_with_constructors(sum, name, depth)
209 def sum_with_constructors(self, sum, name, depth): argument
210 def emit(s, depth=depth): argument
211 self.emit(s % sys._getframe(1).f_locals, depth)
220 emit("enum _%(name)s_kind kind;", depth + 1)
221 emit("union {", depth + 1)
223 self.visit(t, depth + 2)
224 emit("} v;", depth + 1)
229 emit("%s %s;" % (type, field.name), depth + 1);
233 def visitConstructor(self, cons, depth): argument
235 self.emit("struct {", depth)
237 self.visit(f, depth + 1)
238 self.emit("} %s;" % cons.name, depth)
239 self.emit("", depth)
241 def visitField(self, field, depth): argument
248 self.emit("asdl_int_seq *%(name)s;" % locals(), depth)
251 self.emit("asdl_%(_type)s_seq *%(name)s;" % locals(), depth)
253 self.emit("%(ctype)s %(name)s;" % locals(), depth)
255 def visitProduct(self, product, name, depth): argument
256 self.emit("struct _%(name)s {" % locals(), depth)
258 self.visit(f, depth + 1)
263 self.emit("%s %s;" % (type, field.name), depth + 1);
264 self.emit("};", depth)
265 self.emit("", depth)
292 Argument info is 3-tuple of a C type, variable name, and flag
302 name = "name%d" % (c - 1)
343 def emit(s, depth=0, reflow=True): argument
344 self.emit(s, depth, reflow)
377 def emit(s, depth=0, reflow=True): argument
378 self.emit(s, depth, reflow)
379 emit("p->kind = %s_kind;" % name, 1)
381 emit("p->v.%s.%s = %s;" % (name, argname, argname), 1)
383 emit("p->%s = %s;" % (argname, argname), 1)
386 def emit(s, depth=0, reflow=True): argument
387 self.emit(s, depth, reflow)
389 emit("p->%s = %s;" % (argname, argname), 1)
391 emit("p->%s = %s;" % (argname, argname), 1)
458 "state->%s_type);")
460 self.emit("if (isinstance == -1) {", 1)
485 self.visitField(a, name, sum=sum, depth=1)
487 self.emit("tp = state->%s_type;" % (t.name,), 1)
489 self.emit("if (isinstance == -1) {", 1)
494 self.visitFieldDeclaration(f, t.name, sum=sum, depth=2)
497 self.visitField(f, t.name, sum=sum, depth=2)
522 self.visitFieldDeclaration(f, name, prod=prod, depth=1)
524 self.visitFieldDeclaration(a, name, prod=prod, depth=1)
527 self.visitField(f, name, prod=prod, depth=1)
529 self.visitField(a, name, prod=prod, depth=1)
540 def visitFieldDeclaration(self, field, name, sum=None, prod=None, depth=0): argument
544 self.emit("asdl_int_seq* %s;" % field.name, depth)
547 self.emit(f"asdl_{field.type}_seq* {field.name};", depth)
550 self.emit("%s %s;" % (ctype, field.name), depth)
563 def visitField(self, field, name, sum=None, prod=None, depth=0): argument
565 line = "if (_PyObject_LookupAttr(obj, state->%s, &tmp) < 0) {"
566 self.emit(line % field.name, depth)
567 self.emit("return 1;", depth+1)
568 self.emit("}", depth)
570 self.emit("if (tmp == NULL) {", depth)
573 self.emit(format % message, depth+1, reflow=False)
574 self.emit("return 1;", depth+1)
576 self.emit("if (tmp == NULL || tmp == Py_None) {", depth)
577 self.emit("Py_CLEAR(tmp);", depth+1)
579 self.emit("%s = 0;" % field.name, depth+1)
581 self.emit("%s = NULL;" % field.name, depth+1)
584 self.emit("}", depth)
585 self.emit("else {", depth)
587 self.emit("int res;", depth+1)
589 self.emit("Py_ssize_t len;", depth+1)
590 self.emit("Py_ssize_t i;", depth+1)
591 self.emit("if (!PyList_Check(tmp)) {", depth+1)
595 depth+2, reflow=False)
596 self.emit("goto failed;", depth+2)
597 self.emit("}", depth+1)
598 self.emit("len = PyList_GET_SIZE(tmp);", depth+1)
600 self.emit("%s = _Py_asdl_int_seq_new(len, arena);" % field.name, depth+1)
602 … self.emit("%s = _Py_asdl_%s_seq_new(len, arena);" % (field.name, field.type), depth+1)
603 self.emit("if (%s == NULL) goto failed;" % field.name, depth+1)
604 self.emit("for (i = 0; i < len; i++) {", depth+1)
605 self.emit("%s val;" % ctype, depth+2)
606 self.emit("PyObject *tmp2 = PyList_GET_ITEM(tmp, i);", depth+2)
607 self.emit("Py_INCREF(tmp2);", depth+2)
608 with self.recursive_call(name, depth+2):
610 field.type, depth+2, reflow=False)
611 self.emit("Py_DECREF(tmp2);", depth+2)
612 self.emit("if (res != 0) goto failed;", depth+2)
613 self.emit("if (len != PyList_GET_SIZE(tmp)) {", depth+2)
617 depth+3, reflow=False)
618 self.emit("goto failed;", depth+3)
619 self.emit("}", depth+2)
620 self.emit("asdl_seq_SET(%s, i, val);" % field.name, depth+2)
621 self.emit("}", depth+1)
623 with self.recursive_call(name, depth+1):
625 (field.type, field.name), depth+1)
626 self.emit("if (res != 0) goto failed;", depth+1)
628 self.emit("Py_CLEAR(tmp);", depth+1)
629 self.emit("}", depth)
648 self.emit(f"GENERATE_ASDL_SEQ_CONSTRUCTOR({name}, {type})", depth=0)
711 /* bpo-31095: UnTrack is needed before calling any callbacks */
714 Py_CLEAR(self->dict);
725 Py_VISIT(self->dict);
732 Py_CLEAR(self->dict);
741 return -1;
745 int res = -1;
747 if (_PyObject_LookupAttr((PyObject*)Py_TYPE(self), state->_fields, &fields) < 0) {
752 if (numfields == -1) {
763 res = -1;
770 res = -1;
783 if (contains == -1) {
784 res = -1;
788 if (p == -1) {
789 res = -1;
795 Py_TYPE(self)->tp_name, key);
796 res = -1;
821 if (_PyObject_LookupAttr(self, state->__dict__, &dict) < 0) {
887 state->_fields, fnames,
888 state->__match_args__, fnames,
889 state->__module__,
890 state->ast,
891 state->__doc__, doc);
911 result = PyObject_SetAttr(type, state->_attributes, l) >= 0;
916 /* Conversion AST -> Python */
952 /* Conversion Python -> AST */
961 return -1;
973 return -1;
1007 if (i == -1 && PyErr_Occurred())
1018 PyObject_SetAttrString(state->AST_type, "_fields", empty_tuple) < 0 ||
1019 PyObject_SetAttrString(state->AST_type, "__match_args__", empty_tuple) < 0 ||
1020 PyObject_SetAttrString(state->AST_type, "_attributes", empty_tuple) < 0) {
1022 return -1;
1036 assert(state->initialized >= 0);
1038 if (state->initialized) {
1044 state->AST_type = PyType_FromSpec(&AST_type_spec);
1045 if (!state->AST_type) {
1055 state->initialized = 1;
1065 self.emit('state->%s_type = make_type(state, "%s", state->AST_type, %s, %d,' %
1068 self.emit("if (!state->%s_type) return 0;" % name, 1)
1072 self.emit("if (!add_attributes(state, state->%s_type, %s_attributes, %d)) return 0;" %
1075 self.emit("if (!add_attributes(state, state->%s_type, NULL, 0)) return 0;" % name, 1)
1080 self.emit('state->%s_type = make_type(state, "%s", state->AST_type, NULL, 0,' %
1084 self.emit("if (!state->%s_type) return 0;" % name, 1)
1086 self.emit("if (!add_attributes(state, state->%s_type, %s_attributes, %d)) return 0;" %
1089 self.emit("if (!add_attributes(state, state->%s_type, NULL, 0)) return 0;" % name, 1)
1100 self.emit('state->%s_type = make_type(state, "%s", state->%s_type, %s, %d,' %
1103 self.emit("if (!state->%s_type) return 0;" % cons.name, 1)
1107 self.emit("state->%s_singleton = PyType_GenericNew((PyTypeObject *)"
1108 "state->%s_type, NULL, NULL);" %
1110 self.emit("if (!state->%s_singleton) return 0;" % cons.name, 1)
1112 def emit_defaults(self, name, fields, depth): argument
1115 self.emit('if (PyObject_SetAttr(state->%s_type, state->%s, Py_None) == -1)' %
1116 (name, field.name), depth)
1117 self.emit("return 0;", depth+1)
1128 self.emit('return -1;', 2)
1130 self.emit('if (PyModule_AddObjectRef(m, "AST", state->AST_type) < 0) {', 1)
1131 self.emit('return -1;', 2)
1134 self.emit("return -1;", 2)
1137 self.emit("return -1;", 2)
1140 self.emit("return -1;", 2)
1156 // The _ast module uses a per-interpreter state (PyInterpreterState.ast)
1181 "state->%s_type) < 0) {" % (name, name), 1)
1182 self.emit("return -1;", 2)
1221 self.emit("switch (o->kind) {", 1)
1227 self.emit("value = ast2obj_%s(state, o->%s);" % (a.type, a.name), 1)
1229 self.emit('if (PyObject_SetAttr(result, state->%s, value) < 0)' % a.name, 1)
1240 self.emit("Py_INCREF(state->%s_singleton);" % t.name, 3)
1241 self.emit("return state->%s_singleton;" % t.name, 3)
1248 self.emit("tp = (PyTypeObject *)state->%s_type;" % name, 1)
1254 self.emit("value = ast2obj_%s(state, o->%s);" % (a.type, a.name), 1)
1256 self.emit("if (PyObject_SetAttr(result, state->%s, value) < 0)" % a.name, 1)
1263 self.emit("tp = (PyTypeObject *)state->%s_type;" % cons.name, 2)
1270 def visitField(self, field, name, depth, product): argument
1272 self.emit(s, depth + d)
1274 value = "o->%s" % field.name
1276 value = "o->v.%s.%s" % (name, field.name)
1277 self.set(field, value, depth)
1279 emit("if (PyObject_SetAttr(result, state->%s, value) == -1)" % field.name, 0)
1283 def set(self, field, value, depth): argument
1289 self.emit("{", depth)
1290 self.emit("Py_ssize_t i, n = asdl_seq_LEN(%s);" % value, depth+1)
1291 self.emit("value = PyList_New(n);", depth+1)
1292 self.emit("if (!value) goto failed;", depth+1)
1293 self.emit("for(i = 0; i < n; i++)", depth+1)
1296 depth+2, reflow=False)
1297 self.emit("}", depth)
1299 … self.emit("value = ast2obj_list(state, (asdl_seq*)%s, ast2obj_%s);" % (value, field.type), depth)
1301 self.emit("value = ast2obj_%s(state, %s);" % (field.type, value), depth, reflow=False)
1332 req_type[0] = state->Module_type;
1333 req_type[1] = state->Expression_type;
1334 req_type[2] = state->Interactive_type;
1339 if (isinstance == -1)
1358 return -1;
1360 return PyObject_IsInstance(obj, state->AST_type);
1386 struct ast_state *state = &interp->ast;
1390 f.write(" Py_CLEAR(state->" + s + ');\n')
1393 state->initialized = -1;
1395 state->initialized = 0;
1452 struct ast_state *state = &interp->ast;
1465 f.write(' if ((state->' + identifier)
1556 auto_gen_msg = AUTOGEN_MESSAGE.format("/".join(Path(__file__).parts[-2:]))
1581 parser.add_argument("-C", "--c-file", type=Path, required=True)
1582 parser.add_argument("-H", "--h-file", type=Path, required=True)
1583 parser.add_argument("-I", "--internal-h-file", type=Path, required=True)
1584 parser.add_argument("-d", "--dump-module", action="store_true")