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;
}