phases: move short-lived PyObject pointers to local scope
authorYuya Nishihara <yuya@tcha.org>
Sat, 18 Jul 2020 18:38:46 +0900
changeset 45180 a6fde9d789d9
parent 45179 ba5e4b11d085
child 45181 28163c5de797
child 45228 509f5b6c0b7e
phases: move short-lived PyObject pointers to local scope It helps understand which object should be decrefed on goto release.
mercurial/cext/revlog.c
--- a/mercurial/cext/revlog.c	Sat Jul 18 18:35:17 2020 +0900
+++ b/mercurial/cext/revlog.c	Sat Jul 18 18:38:46 2020 +0900
@@ -791,10 +791,7 @@
 	   96: internal */
 	static const char trackedphases[] = {1, 2, 32, 96};
 	PyObject *roots = Py_None;
-	PyObject *pyphase = NULL;
-	PyObject *pyrev = NULL;
 	PyObject *phasesetsdict = NULL;
-	PyObject *phaseroots = NULL;
 	PyObject *phasesets[4] = {NULL, NULL, NULL, NULL};
 	Py_ssize_t len = index_length(self);
 	char *phases = NULL;
@@ -815,7 +812,8 @@
 	}
 
 	for (i = 0; i < numphases; ++i) {
-		pyphase = PyInt_FromLong(trackedphases[i]);
+		PyObject *pyphase = PyInt_FromLong(trackedphases[i]);
+		PyObject *phaseroots = NULL;
 		if (pyphase == NULL)
 			goto release;
 		phaseroots = PyDict_GetItem(roots, pyphase);
@@ -824,7 +822,6 @@
 			continue;
 		rev = add_roots_get_min(self, phaseroots, phases,
 		                        trackedphases[i]);
-		phaseroots = NULL;
 		if (rev == -2)
 			goto release;
 		if (rev != -1 && (minphaserev == -1 || rev < minphaserev))
@@ -840,6 +837,8 @@
 	if (minphaserev == -1)
 		minphaserev = len;
 	for (rev = minphaserev; rev < len; ++rev) {
+		PyObject *pyphase = NULL;
+		PyObject *pyrev = NULL;
 		int parents[2];
 		/*
 		 * The parent lookup could be skipped for phaseroots, but
@@ -886,7 +885,7 @@
 	if (phasesetsdict == NULL)
 		goto release;
 	for (i = 0; i < numphases; ++i) {
-		pyphase = PyInt_FromLong(trackedphases[i]);
+		PyObject *pyphase = PyInt_FromLong(trackedphases[i]);
 		if (pyphase == NULL)
 			goto release;
 		if (PyDict_SetItem(phasesetsdict, pyphase, phasesets[i]) ==