Skip to content

Commit c80365c

Browse files
committed
change join order for API::Impl::useStep
1 parent ebcecca commit c80365c

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

javascript/ql/src/semmle/javascript/ApiGraphs.qll

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -738,25 +738,27 @@ module API {
738738
boundArgs in [0 .. 10]
739739
)
740740
or
741-
exists(StepSummary summary |
742-
t = useStep(nd, promisified, boundArgs, result, summary).append(summary)
743-
)
741+
t = useStep(nd, promisified, boundArgs, result)
744742
}
745743

746744
private import semmle.javascript.dataflow.internal.StepSummary
747745

748746
/**
749747
* Holds if `nd`, which is a use of an API-graph node, flows in zero or more potentially
750748
* inter-procedural steps to some intermediate node, and then from that intermediate node to
751-
* `res` in one step described by `summary`.
749+
* `res` in one step described by the resulting TypeTracker.
752750
*
753751
* This predicate exists solely to enforce a better join order in `trackUseNode` above.
754752
*/
755-
pragma[noinline]
753+
pragma[noopt]
756754
private DataFlow::TypeTracker useStep(
757-
DataFlow::Node nd, boolean promisified, int boundArgs, DataFlow::Node res, StepSummary summary
755+
DataFlow::Node nd, boolean promisified, int boundArgs, DataFlow::Node res
758756
) {
759-
StepSummary::step(trackUseNode(nd, promisified, boundArgs, result), res, summary)
757+
exists(DataFlow::TypeTracker t, StepSummary summary, DataFlow::SourceNode prev |
758+
prev = trackUseNode(nd, promisified, boundArgs, t) and
759+
StepSummary::step(prev, res, summary) and
760+
result = t.append(summary)
761+
)
760762
}
761763

762764
private DataFlow::SourceNode trackUseNode(

0 commit comments

Comments
 (0)