##// END OF EJS Templates
parsers: simplify error logic in compute_phases_map_sets...
Bryan O'Sullivan -
r27364:ad1cc143 default
parent child Browse files
Show More
@@ -1286,19 +1286,21 b' static PyObject *compute_phases_map_sets'
1286 1286 long phase;
1287 1287
1288 1288 if (!PyArg_ParseTuple(args, "O", &roots))
1289 goto release_none;
1289 goto done;
1290 1290 if (roots == NULL || !PyList_Check(roots))
1291 goto release_none;
1291 goto done;
1292 1292
1293 1293 phases = calloc(len, 1); /* phase per rev: {0: public, 1: draft, 2: secret} */
1294 if (phases == NULL)
1295 goto release_none;
1294 if (phases == NULL) {
1295 PyErr_NoMemory();
1296 goto done;
1297 }
1296 1298 /* Put the phase information of all the roots in phases */
1297 1299 numphase = PyList_GET_SIZE(roots)+1;
1298 1300 minrevallphases = len + 1;
1299 1301 phasessetlist = PyList_New(numphase);
1300 1302 if (phasessetlist == NULL)
1301 goto release_none;
1303 goto done;
1302 1304
1303 1305 PyList_SET_ITEM(phasessetlist, 0, Py_None);
1304 1306 Py_INCREF(Py_None);
@@ -1307,13 +1309,13 b' static PyObject *compute_phases_map_sets'
1307 1309 phaseroots = PyList_GET_ITEM(roots, i);
1308 1310 phaseset = PySet_New(NULL);
1309 1311 if (phaseset == NULL)
1310 goto release_phasesetlist;
1312 goto release;
1311 1313 PyList_SET_ITEM(phasessetlist, i+1, phaseset);
1312 1314 if (!PyList_Check(phaseroots))
1313 goto release_phasesetlist;
1315 goto release;
1314 1316 minrevphase = add_roots_get_min(self, phaseroots, i+1, phases);
1315 1317 if (minrevphase == -2) /* Error from add_roots_get_min */
1316 goto release_phasesetlist;
1318 goto release;
1317 1319 minrevallphases = MIN(minrevallphases, minrevphase);
1318 1320 }
1319 1321 /* Propagate the phase information from the roots to the revs */
@@ -1322,14 +1324,14 b' static PyObject *compute_phases_map_sets'
1322 1324 for (i = minrevallphases; i < len; i++) {
1323 1325 if (index_get_parents(self, i, parents,
1324 1326 (int)len - 1) < 0)
1325 goto release_phasesetlist;
1327 goto release;
1326 1328 set_phase_from_parents(phases, parents[0], parents[1], i);
1327 1329 }
1328 1330 }
1329 1331 /* Transform phase list to a python list */
1330 1332 phaseslist = PyList_New(len);
1331 1333 if (phaseslist == NULL)
1332 goto release_phasesetlist;
1334 goto release;
1333 1335 for (i = 0; i < len; i++) {
1334 1336 phase = phases[i];
1335 1337 /* We only store the sets of phase for non public phase, the public phase
@@ -1344,21 +1346,19 b' static PyObject *compute_phases_map_sets'
1344 1346 }
1345 1347 ret = PyList_New(2);
1346 1348 if (ret == NULL)
1347 goto release_phaseslist;
1349 goto release;
1348 1350
1349 1351 PyList_SET_ITEM(ret, 0, phaseslist);
1350 1352 PyList_SET_ITEM(ret, 1, phasessetlist);
1351 1353 /* We don't release phaseslist and phasessetlist as we return them to
1352 1354 * python */
1353 goto release_phases;
1355 goto done;
1354 1356
1355 release_phaseslist:
1357 release:
1356 1358 Py_XDECREF(phaseslist);
1357 release_phasesetlist:
1358 1359 Py_XDECREF(phasessetlist);
1359 release_phases:
1360 done:
1360 1361 free(phases);
1361 release_none:
1362 1362 return ret;
1363 1363 }
1364 1364
General Comments 0
You need to be logged in to leave comments. Login now