# HG changeset patch # User Yuya Nishihara # Date 1439685037 -32400 # Node ID 8779ce81ea807839e7bacf7b4a594bf97dbdf232 # Parent e7fe0a12376c6fe072c258c310f2044a4b3abe66 reachableroots: unroll loop that checks if one of parents is reachable The difference is small, but fewer loops should be better in general: revset #0: 0::tip 0) 0.001609 1) 0.001510 93% diff -r e7fe0a12376c -r 8779ce81ea80 mercurial/parsers.c --- a/mercurial/parsers.c Sat Aug 15 19:38:03 2015 +0900 +++ b/mercurial/parsers.c Sun Aug 16 09:30:37 2015 +0900 @@ -1240,18 +1240,17 @@ * index_get_parents */ if (r < 0) goto bail; - for (k = 0; k < 2; k++) { - if ((revstates[parents[k] + 1] & RS_REACHABLE) - && !(revstates[i + 1] & RS_REACHABLE)) { - revstates[i + 1] |= RS_REACHABLE; - val = PyInt_FromLong(i); - if (val == NULL) - goto bail; - r = PyList_Append(reachable, val); - Py_DECREF(val); - if (r < 0) - goto bail; - } + if (((revstates[parents[0] + 1] | + revstates[parents[1] + 1]) & RS_REACHABLE) + && !(revstates[i + 1] & RS_REACHABLE)) { + revstates[i + 1] |= RS_REACHABLE; + val = PyInt_FromLong(i); + if (val == NULL) + goto bail; + r = PyList_Append(reachable, val); + Py_DECREF(val); + if (r < 0) + goto bail; } } }