diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py index b71565c53f..7dc9403d59 100755 --- a/Parser/asdl_c.py +++ b/Parser/asdl_c.py @@ -437,7 +437,6 @@ def sumTrailer(self, name, add_label=False): self.emit(format % error, 1, reflow=False) if add_label: self.emit("failed:", 1) - self.emit("Py_XDECREF(tmp);", 1) self.emit("return 1;", 1) self.emit("}", 0) self.emit("", 0) @@ -523,7 +522,6 @@ def visitProduct(self, prod, name): self.emit("*out = %s(%s);" % (ast_func_name(name), self.buildArgs(args)), 1) self.emit("return 0;", 1) self.emit("failed:", 0) - self.emit("Py_XDECREF(tmp);", 1) self.emit("return 1;", 1) self.emit("}", 0) self.emit("", 0) @@ -565,7 +563,6 @@ def visitField(self, field, name, sum=None, prod=None, depth=0): self.emit("return 1;", depth+1) else: self.emit("if (tmp == NULL || tmp == Py_None) {", depth) - self.emit("Py_CLEAR(tmp);", depth+1) if self.isNumeric(field): self.emit("%s = 0;" % field.name, depth+1) elif not self.isSimpleType(field): @@ -614,7 +611,6 @@ def visitField(self, field, name, sum=None, prod=None, depth=0): (field.type, field.name), depth+1) self.emit("if (res != 0) goto failed;", depth+1) - self.emit("Py_CLEAR(tmp);", depth+1) self.emit("}", depth) @@ -946,6 +942,7 @@ def visitModule(self, mod): obj = NULL; if (obj) { if (_PyArena_AddPyObject(arena, obj) < 0) { + Py_DECREF(obj); *out = NULL; return -1; } @@ -958,6 +955,7 @@ def visitModule(self, mod): static int obj2ast_constant(struct ast_state *Py_UNUSED(state), PyObject* obj, PyObject** out, PyArena* arena) { if (_PyArena_AddPyObject(arena, obj) < 0) { + Py_DECREF(obj); *out = NULL; return -1; }