summaryrefslogtreecommitdiffstats
path: root/Parser/asdl_c.py
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2023-06-02 02:06:07 (GMT)
committerGitHub <noreply@github.com>2023-06-02 02:06:07 (GMT)
commite6d5e63614684025d4aa09f77a759eb3fc0bd77f (patch)
tree3c4db01fce54a0c8269c6b380af07704fd3e1d44 /Parser/asdl_c.py
parentd57ee813ebd496a3fd8118d7dc057d54c4af847e (diff)
downloadcpython-e6d5e63614684025d4aa09f77a759eb3fc0bd77f.zip
cpython-e6d5e63614684025d4aa09f77a759eb3fc0bd77f.tar.gz
cpython-e6d5e63614684025d4aa09f77a759eb3fc0bd77f.tar.bz2
[3.12] gh-104799: Default missing lists in AST to the empty list (GH-104834) (#105213)
(cherry picked from commit 77d25795862f19c6e3d647b76cfb10d5ce1f149c) Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com> Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Diffstat (limited to 'Parser/asdl_c.py')
-rwxr-xr-xParser/asdl_c.py49
1 files changed, 29 insertions, 20 deletions
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py
index 5d5a05a..cb31279 100755
--- a/Parser/asdl_c.py
+++ b/Parser/asdl_c.py
@@ -632,29 +632,38 @@ class Obj2ModVisitor(PickleVisitor):
self.emit(line % field.name, depth)
self.emit("return 1;", depth+1)
self.emit("}", depth)
- if not field.opt:
+ if field.seq:
self.emit("if (tmp == NULL) {", depth)
- message = "required field \\\"%s\\\" missing from %s" % (field.name, name)
- format = "PyErr_SetString(PyExc_TypeError, \"%s\");"
- self.emit(format % message, depth+1, reflow=False)
- self.emit("return 1;", depth+1)
+ self.emit("tmp = PyList_New(0);", depth+1)
+ self.emit("if (tmp == NULL) {", depth+1)
+ self.emit("return 1;", depth+2)
+ self.emit("}", depth+1)
+ self.emit("}", depth)
+ self.emit("{", depth)
else:
- self.emit("if (tmp == NULL || tmp == Py_None) {", depth)
- self.emit("Py_CLEAR(tmp);", depth+1)
- if self.isNumeric(field):
- if field.name in self.attribute_special_defaults:
- self.emit(
- "%s = %s;" % (field.name, self.attribute_special_defaults[field.name]),
- depth+1,
- )
- else:
- self.emit("%s = 0;" % field.name, depth+1)
- elif not self.isSimpleType(field):
- self.emit("%s = NULL;" % field.name, depth+1)
+ if not field.opt:
+ self.emit("if (tmp == NULL) {", depth)
+ message = "required field \\\"%s\\\" missing from %s" % (field.name, name)
+ format = "PyErr_SetString(PyExc_TypeError, \"%s\");"
+ self.emit(format % message, depth+1, reflow=False)
+ self.emit("return 1;", depth+1)
else:
- raise TypeError("could not determine the default value for %s" % field.name)
- self.emit("}", depth)
- self.emit("else {", depth)
+ self.emit("if (tmp == NULL || tmp == Py_None) {", depth)
+ self.emit("Py_CLEAR(tmp);", depth+1)
+ if self.isNumeric(field):
+ if field.name in self.attribute_special_defaults:
+ self.emit(
+ "%s = %s;" % (field.name, self.attribute_special_defaults[field.name]),
+ depth+1,
+ )
+ else:
+ self.emit("%s = 0;" % field.name, depth+1)
+ elif not self.isSimpleType(field):
+ self.emit("%s = NULL;" % field.name, depth+1)
+ else:
+ raise TypeError("could not determine the default value for %s" % field.name)
+ self.emit("}", depth)
+ self.emit("else {", depth)
self.emit("int res;", depth+1)
if field.seq: