Skip to content

Commit fd2b8d7

Browse files
committed
MergeFlow
1 parent 54b5fd9 commit fd2b8d7

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

shared/dataflow/codeql/dataflow/DataFlow.qll

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -727,6 +727,35 @@ module DataFlowMake<LocationSig Location, InputSig<Location> Lang> {
727727

728728
import PathGraphSigMod
729729

730+
private module GetPathGraph<GlobalFlowSig Flow> implements PathGraphSig<Flow::PathNode> {
731+
import Flow
732+
}
733+
734+
/**
735+
* Constructs a graph containing the disjoint union of two graphs.
736+
*/
737+
module MergeFlows<GlobalFlowSig Graph1, GlobalFlowSig Graph2> implements GlobalFlowSig {
738+
private module PathGraph1 = GetPathGraph<Graph1>;
739+
740+
private module PathGraph2 = GetPathGraph<Graph2>;
741+
742+
import MergePathGraph<Graph1::PathNode, Graph2::PathNode, PathGraph1, PathGraph2>
743+
import PathGraph
744+
745+
predicate flowPath(PathNode source, PathNode sink) {
746+
Graph1::flowPath(source.asPathNode1(), sink.asPathNode1()) or
747+
Graph2::flowPath(source.asPathNode2(), sink.asPathNode2())
748+
}
749+
750+
predicate flow(Node source, Node sink) {
751+
Graph1::flow(source, sink) or Graph2::flow(source, sink)
752+
}
753+
754+
predicate flowTo(Node sink) { Graph1::flowTo(sink) or Graph2::flowTo(sink) }
755+
756+
predicate flowToExpr(DataFlowExpr sink) { Graph1::flowToExpr(sink) or Graph2::flowToExpr(sink) }
757+
}
758+
730759
/**
731760
* Constructs a `PathGraph` from two `PathGraph`s by disjoint union.
732761
*/

0 commit comments

Comments
 (0)