Lines Matching refs:name
19 def get_c_type(name):
20 """Return a string for the C name of the type.
24 if name in asdl.builtin_types:
25 return name
27 return "%s_ty" % name
89 def asdl_of(name, obj):
94 return "{}{}".format(name, fields)
97 types = " | ".join(type.name for type in obj.types)
99 sep = "\n{}| ".format(" " * (len(name) + 1))
101 asdl_of(type.name, type) for type in obj.types
103 return "{} = {}".format(name, types)
165 self.visit(type.value, type.name)
167 def visitSum(self, sum, name):
168 self.metadata.types.add(name)
172 self.metadata.simple_sums.add(name)
176 self.metadata.singletons.add(constructor.name)
181 self.metadata.types.add(constructor.name)
184 def visitProduct(self, product, name):
185 self.metadata.types.add(name)
194 self.metadata.identifiers.add(field.name)
203 self.visit(type.value, type.name, depth)
205 def visitSum(self, sum, name, depth):
207 self.simple_sum(sum, name, depth)
209 self.sum_with_constructors(sum, name, depth)
211 def simple_sum(self, sum, name, depth):
215 enum.append("%s=%d" % (type.name, i + 1))
217 ctype = get_c_type(name)
218 s = "typedef enum _%s { %s } %s;" % (name, enums, ctype)
222 def sum_with_constructors(self, sum, name, depth):
223 ctype = get_c_type(name)
224 s = "typedef struct _%(name)s *%(ctype)s;" % locals()
228 def visitProduct(self, product, name, depth):
229 ctype = get_c_type(name)
230 s = "typedef struct _%(name)s *%(ctype)s;" % locals()
240 self.visit(type.value, type.name, depth)
242 def visitSum(self, sum, name, depth):
245 self.emit_sequence_constructor(name, depth)
247 def emit_sequence_constructor(self, name,depth):
248 ctype = get_c_type(name)
253 } asdl_%(name)s_seq;""" % locals(), reflow=False, depth=depth)
255 self.emit("asdl_%(name)s_seq *_Py_asdl_%(name)s_seq_new(Py_ssize_t size, PyArena *arena);" % locals(), depth)
258 def visitProduct(self, product, name, depth):
259 self.emit_sequence_constructor(name, depth)
269 self.visit(type.value, type.name, depth)
271 def visitSum(self, sum, name, depth):
273 self.sum_with_constructors(sum, name, depth)
275 def sum_with_constructors(self, sum, name, depth):
281 enum.append("%s_kind=%d" % (type.name, i + 1))
283 emit("enum _%(name)s_kind {" + ", ".join(enum) + "};")
285 emit("struct _%(name)s {")
286 emit("enum _%(name)s_kind kind;", depth + 1)
295 emit("%s %s;" % (type, field.name), depth + 1);
304 self.emit("} %s;" % cons.name, depth)
311 name = field.name
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)
321 def visitProduct(self, product, name, depth):
322 self.emit("struct _%(name)s {" % locals(), depth)
329 self.emit("%s %s;" % (type, field.name), depth + 1);
334 def ast_func_name(name):
335 return f"_PyAST_{name}"
346 self.visit(type.value, type.name)
348 def visitSum(self, sum, name):
353 self.visit(t, name, sum.attributes)
358 Argument info is 3-tuple of a C type, variable name, and flag
364 if f.name is None:
365 name = f.type
366 c = unnamed[name] = unnamed.get(name, 0) + 1
368 name = "name%d" % (c - 1)
370 name = f.name
379 args.append((ctype, name, f.opt or f.seq))
386 self.emit_function(cons.name, ctype, args, attrs)
388 def emit_function(self, name, ctype, args, attrs, union=True):
396 self.emit("%s %s(%s);" % (ctype, ast_func_name(name), argstr), False)
398 def visitProduct(self, prod, name):
399 self.emit_function(name, get_c_type(name),
408 def emit_function(self, name, ctype, args, attrs, union=True):
418 emit("%s(%s)" % (ast_func_name(name), argstr))
425 msg = "field '%s' is required for %s" % (argname, name)
435 self.emit_body_union(name, args, attrs)
437 self.emit_body_struct(name, args, attrs)
442 def emit_body_union(self, name, args, attrs):
445 emit("p->kind = %s_kind;" % name, 1)
447 emit("p->v.%s.%s = %s;" % (name, argname, argname), 1)
451 def emit_body_struct(self, name, args, attrs):
467 self.visit(type.value, type.name)
469 def visitSum(self, sum, name):
472 def visitProduct(self, sum, name):
475 def visitConstructor(self, cons, name):
483 def visitProduct(self, prod, name):
485 self.emit(code % (name, get_c_type(name)), 0)
505 def funcHeader(self, name):
506 ctype = get_c_type(name)
508 self.emit("obj2ast_%s(struct ast_state *state, PyObject* obj, %s* out, PyArena* arena)" % (name, ctype), 0)
513 def sumTrailer(self, name, add_label=False):
516 error = "expected some sort of %s, but got %%R" % name
526 def simpleSum(self, sum, name):
527 self.funcHeader(name)
531 self.emit(line % (t.name,), 1)
536 self.emit("*out = %s;" % t.name, 2)
539 self.sumTrailer(name)
544 def complexSum(self, sum, name):
545 self.funcHeader(name)
549 self.visitAttributeDeclaration(a, name, sum=sum)
557 self.visitField(a, name, sum=sum, depth=1)
559 self.emit("tp = state->%s_type;" % (t.name,), 1)
566 self.visitFieldDeclaration(f, t.name, sum=sum, depth=2)
569 self.visitField(f, t.name, sum=sum, depth=2)
570 args = [f.name for f in t.fields] + [a.name for a in sum.attributes]
571 self.emit("*out = %s(%s);" % (ast_func_name(t.name), self.buildArgs(args)), 2)
575 self.sumTrailer(name, True)
577 def visitAttributeDeclaration(self, a, name, sum=sum):
579 self.emit("%s %s;" % (ctype, a.name), 1)
581 def visitSum(self, sum, name):
583 self.simpleSum(sum, name)
585 self.complexSum(sum, name)
587 def visitProduct(self, prod, name):
588 ctype = get_c_type(name)
590 self.emit("obj2ast_%s(struct ast_state *state, PyObject* obj, %s* out, PyArena* arena)" % (name, ctype), 0)
594 self.visitFieldDeclaration(f, name, prod=prod, depth=1)
596 self.visitFieldDeclaration(a, name, prod=prod, depth=1)
599 self.visitField(f, name, prod=prod, depth=1)
601 self.visitField(a, name, prod=prod, depth=1)
602 args = [f.name for f in prod.fields]
603 args.extend([a.name for a in prod.attributes])
604 self.emit("*out = %s(%s);" % (ast_func_name(name), self.buildArgs(args)), 1)
612 def visitFieldDeclaration(self, field, name, sum=None, prod=None, depth=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)
630 def visitField(self, field, name, sum=None, prod=None, depth=0):
633 self.emit(line % field.name, depth)
638 message = "required field \\\"%s\\\" missing from %s" % (field.name, name)
646 if field.name in self.attribute_special_defaults:
648 "%s = %s;" % (field.name, self.attribute_special_defaults[field.name]),
652 self.emit("%s = 0;" % field.name, depth+1)
654 self.emit("%s = NULL;" % field.name, depth+1)
656 raise TypeError("could not determine the default value for %s" % field.name)
667 (name, field.name),
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)
681 with self.recursive_call(name, depth+2):
689 (name, field.name),
693 self.emit("asdl_seq_SET(%s, i, val);" % field.name, depth+2)
696 with self.recursive_call(name, depth+1):
698 (field.type, field.name), depth+1)
711 self.visit(type.value, type.name)
713 def visitProduct(self, prod, name):
714 self.emit_sequence_constructor(name, get_c_type(name))
716 def visitSum(self, sum, name):
718 self.emit_sequence_constructor(name, get_c_type(name))
720 def emit_sequence_constructor(self, name, type):
721 self.emit(f"GENERATE_ASDL_SEQ_CONSTRUCTOR({name}, {type})", depth=0)
725 def visitProduct(self, prod, name):
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)
733 self.emit("static const char * const %s_fields[]={" % name,0)
735 self.emit('"%s",' % f.name, 1)
738 def visitSum(self, sum, name):
740 self.emit("static const char * const %s_attributes[] = {" % name, 0)
742 self.emit('"%s",' % a.name, 1)
746 ptype = get_c_type(name)
747 self.emit("static PyObject* ast2obj_%s(struct ast_state *state, %s);" % (name, ptype), 0)
749 self.visitConstructor(t, name)
751 def visitConstructor(self, cons, name):
753 self.emit("static const char * const %s_fields[]={" % cons.name, 0)
755 self.emit('"%s",' % t.name, 1)
829 PyObject *name = PySequence_GetItem(fields, i);
830 if (!name) {
834 res = PyObject_SetAttr(self, name, PyTuple_GET_ITEM(args, i));
835 Py_DECREF(name);
1123 def visitProduct(self, prod, name):
1125 fields = name+"_fields"
1129 (name, name, fields, len(prod.fields)), 1)
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)
1134 (name, name, len(prod.attributes)), 1)
1136 self.emit("if (!add_attributes(state, state->%s_type, NULL, 0)) return 0;" % name, 1)
1137 self.emit_defaults(name, prod.fields, 1)
1138 self.emit_defaults(name, prod.attributes, 1)
1140 def visitSum(self, sum, name):
1142 (name, name), 1)
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)
1147 (name, name, len(sum.attributes)), 1)
1149 self.emit("if (!add_attributes(state, state->%s_type, NULL, 0)) return 0;" % name, 1)
1150 self.emit_defaults(name, sum.attributes, 1)
1153 self.visitConstructor(t, name, simple)
1155 def visitConstructor(self, cons, name, simple):
1157 fields = cons.name+"_fields"
1161 (cons.name, cons.name, name, fields, len(cons.fields)), 1)
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)
1164 self.emit_defaults(cons.name, cons.fields, 1)
1168 (cons.name, cons.name), 1)
1169 self.emit("if (!state->%s_singleton) return 0;" % cons.name, 1)
1171 def emit_defaults(self, name, fields, depth):
1175 (name, field.name), depth)
1227 def visitProduct(self, prod, name):
1228 self.addObj(name)
1230 def visitSum(self, sum, name):
1231 self.addObj(name)
1233 self.visitConstructor(t, name)
1235 def visitConstructor(self, cons, name):
1236 self.addObj(cons.name)
1238 def addObj(self, name):
1240 "state->%s_type) < 0) {" % (name, name), 1)
1254 def func_begin(self, name):
1255 ctype = get_c_type(name)
1257 self.emit("ast2obj_%s(struct ast_state *state, void* _o)" % (name), 0)
1281 def visitSum(self, sum, name):
1283 self.simpleSum(sum, name)
1285 self.func_begin(name)
1289 self.visitConstructor(t, i + 1, name)
1292 self.emit("value = ast2obj_%s(state, o->%s);" % (a.type, a.name), 1)
1294 self.emit('if (PyObject_SetAttr(result, state->%s, value) < 0)' % a.name, 1)
1299 def simpleSum(self, sum, name):
1300 self.emit("PyObject* ast2obj_%s(struct ast_state *state, %s_ty o)" % (name, name), 0)
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)
1311 def visitProduct(self, prod, name):
1312 self.func_begin(name)
1313 self.emit("tp = (PyTypeObject *)state->%s_type;" % name, 1)
1317 self.visitField(field, name, 1, True)
1319 self.emit("value = ast2obj_%s(state, o->%s);" % (a.type, a.name), 1)
1321 self.emit("if (PyObject_SetAttr(result, state->%s, value) < 0)" % a.name, 1)
1326 def visitConstructor(self, cons, enum, name):
1327 self.emit("case %s_kind:" % cons.name, 1)
1328 self.emit("tp = (PyTypeObject *)state->%s_type;" % cons.name, 2)
1332 self.visitField(f, cons.name, 2, False)
1335 def visitField(self, field, name, depth, product):
1339 value = "o->%s" % field.name
1341 value = "o->v.%s.%s" % (name, field.name)
1344 emit("if (PyObject_SetAttr(result, state->%s, value) == -1)" % field.name, 0)