@@ -1636,14 +1636,16 @@ class ParameterNode extends Node {
16361636 this .asInstruction ( ) instanceof InitializeParameterInstruction
16371637 or
16381638 this instanceof IndirectParameterNode
1639+ or
1640+ FlowSummaryImpl:: Private:: summaryParameterNode ( this .( FlowSummaryNode ) .getSummaryNode ( ) , _)
16391641 }
16401642
16411643 /**
16421644 * Holds if this node is the parameter of `f` at the specified position. The
16431645 * implicit `this` parameter is considered to have position `-1`, and
16441646 * pointer-indirection parameters are at further negative positions.
16451647 */
1646- predicate isParameterOf ( Function f , ParameterPosition pos ) { none ( ) } // overridden by subclasses
1648+ predicate isParameterOf ( DataFlowCallable f , ParameterPosition pos ) { none ( ) } // overridden by subclasses
16471649
16481650 /** Gets the `Parameter` associated with this node, if it exists. */
16491651 Parameter getParameter ( ) { none ( ) } // overridden by subclasses
@@ -1665,8 +1667,8 @@ class DirectParameterNode extends InstructionNode {
16651667private class ExplicitParameterNode extends ParameterNode , DirectParameterNode {
16661668 ExplicitParameterNode ( ) { exists ( instr .getParameter ( ) ) }
16671669
1668- override predicate isParameterOf ( Function f , ParameterPosition pos ) {
1669- f .getParameter ( pos .( DirectPosition ) .getIndex ( ) ) = instr .getParameter ( )
1670+ override predicate isParameterOf ( DataFlowCallable f , ParameterPosition pos ) {
1671+ f .asSourceCallable ( ) . ( Function ) . getParameter ( pos .( DirectPosition ) .getIndex ( ) ) = instr .getParameter ( )
16701672 }
16711673
16721674 override string toStringImpl ( ) { result = instr .getParameter ( ) .toString ( ) }
@@ -1678,13 +1680,31 @@ private class ExplicitParameterNode extends ParameterNode, DirectParameterNode {
16781680class ThisParameterNode extends ParameterNode , DirectParameterNode {
16791681 ThisParameterNode ( ) { instr .getIRVariable ( ) instanceof IRThisVariable }
16801682
1681- override predicate isParameterOf ( Function f , ParameterPosition pos ) {
1682- pos .( DirectPosition ) .getIndex ( ) = - 1 and instr .getEnclosingFunction ( ) = f
1683+ override predicate isParameterOf ( DataFlowCallable f , ParameterPosition pos ) {
1684+ pos .( DirectPosition ) .getIndex ( ) = - 1 and instr .getEnclosingFunction ( ) = f . asSourceCallable ( )
16831685 }
16841686
16851687 override string toStringImpl ( ) { result = "this" }
16861688}
16871689
1690+ /**
1691+ * A parameter node that is part of a summary.
1692+ */
1693+ class SummaryParameterNode extends ParameterNode , FlowSummaryNode {
1694+ SummaryParameterNode ( ) {
1695+ FlowSummaryImpl:: Private:: summaryParameterNode ( this .getSummaryNode ( ) , _)
1696+ }
1697+
1698+ private ParameterPosition getPosition ( ) {
1699+ FlowSummaryImpl:: Private:: summaryParameterNode ( this .getSummaryNode ( ) , result )
1700+ }
1701+
1702+ override predicate isParameterOf ( DataFlowCallable c , ParameterPosition p ) {
1703+ c .asSummarizedCallable ( ) = this .getSummarizedCallable ( ) and
1704+ p = this .getPosition ( )
1705+ }
1706+ }
1707+
16881708pragma [ noinline]
16891709private predicate indirectPositionHasArgumentIndexAndIndex (
16901710 IndirectionPosition pos , int argumentIndex , int indirectionIndex
@@ -1703,8 +1723,8 @@ private predicate indirectParameterNodeHasArgumentIndexAndIndex(
17031723
17041724/** A synthetic parameter to model the pointed-to object of a pointer parameter. */
17051725class ParameterIndirectionNode extends ParameterNode instanceof IndirectParameterNode {
1706- override predicate isParameterOf ( Function f , ParameterPosition pos ) {
1707- IndirectParameterNode .super .getEnclosingCallable ( ) . asSourceCallable ( ) = f and
1726+ override predicate isParameterOf ( DataFlowCallable f , ParameterPosition pos ) {
1727+ IndirectParameterNode .super .getEnclosingCallable ( ) = f and
17081728 exists ( int argumentIndex , int indirectionIndex |
17091729 indirectPositionHasArgumentIndexAndIndex ( pos , argumentIndex , indirectionIndex ) and
17101730 indirectParameterNodeHasArgumentIndexAndIndex ( this , argumentIndex , indirectionIndex )
0 commit comments