@@ -827,7 +827,8 @@ private predicate straightLineDense(Node scope, int rnk, Node nrnk, Spec spec) {
827827 * but most cases should be handled through one of the convenience predicates
828828 * as outlined in the comment at the top of this file.
829829 */
830- private predicate subEdge ( Node n1 , Pos p1 , Node n2 , Pos p2 ) {
830+ // The parameters are ordered this way for performance.
831+ private predicate subEdge ( Pos p1 , Node n1 , Node n2 , Pos p2 ) {
831832 exists ( Node scope , int rnk , Spec spec1 , Spec spec2 |
832833 straightLineDense ( scope , rnk , n1 , spec1 ) and
833834 straightLineDense ( scope , rnk + 1 , n2 , spec2 ) and
@@ -997,13 +998,13 @@ private predicate subEdge(Node n1, Pos p1, Node n2, Pos p2) {
997998 * predicate includes all sub-edges except those with true/false labels (see
998999 * `conditionJumps`).
9991000 */
1000- private predicate subEdgeIncludingDestructors ( Node n1 , Pos p1 , Node n2 , Pos p2 ) {
1001- subEdge ( n1 , p1 , n2 , p2 )
1001+ private predicate subEdgeIncludingDestructors ( Pos p1 , Node n1 , Node n2 , Pos p2 ) {
1002+ subEdge ( p1 , n1 , n2 , p2 )
10021003 or
10031004 // If `n1` has sub-nodes to accomodate destructors, but there are none to be
10041005 // called, connect the "before destructors" node directly to the "after
10051006 // destructors" node. For performance, only do this when the nodes exist.
1006- exists ( Pos afterDtors | afterDtors .isAfterDestructors ( ) | subEdge ( n1 , afterDtors , _, _) ) and
1007+ exists ( Pos afterDtors | afterDtors .isAfterDestructors ( ) | subEdge ( afterDtors , n1 , _, _) ) and
10071008 not exists ( getDestructorCallAfterNode ( n1 , 0 ) ) and
10081009 p1 .nodeBeforeDestructors ( n1 , n1 ) and
10091010 p2 .nodeAfterDestructors ( n2 , n1 )
@@ -1301,7 +1302,7 @@ private predicate normalGroupMember(Node memberNode, Pos memberPos, Node atNode)
13011302 exists ( Node succNode , Pos succPos |
13021303 normalGroupMember ( succNode , succPos , atNode ) and
13031304 not memberPos .isAt ( ) and
1304- subEdgeIncludingDestructors ( memberNode , memberPos , succNode , succPos )
1305+ subEdgeIncludingDestructors ( memberPos , memberNode , succNode , succPos )
13051306 )
13061307}
13071308
@@ -1317,7 +1318,7 @@ private predicate precedesCondition(Node memberNode, Pos memberPos, Node test) {
13171318 or
13181319 exists ( Node succNode , Pos succPos |
13191320 precedesCondition ( succNode , succPos , test ) and
1320- subEdgeIncludingDestructors ( memberNode , memberPos , succNode , succPos ) and
1321+ subEdgeIncludingDestructors ( memberPos , memberNode , succNode , succPos ) and
13211322 // Unlike the similar TC in normalGroupMember we're here including the
13221323 // At-node in the group. This should generalize better to the case where
13231324 // the base case isn't always an After-node.
@@ -1355,7 +1356,7 @@ private module Cached {
13551356 cached
13561357 predicate qlCFGSuccessor ( Node n1 , Node n2 ) {
13571358 exists ( Node memberNode , Pos memberPos |
1358- subEdgeIncludingDestructors ( n1 , any ( Pos at | at .isAt ( ) ) , memberNode , memberPos ) and
1359+ subEdgeIncludingDestructors ( any ( Pos at | at .isAt ( ) ) , n1 , memberNode , memberPos ) and
13591360 normalGroupMember ( memberNode , memberPos , n2 )
13601361 )
13611362 or
0 commit comments