@@ -65,9 +65,11 @@ abstract class NodeImpl extends Node {
6565
6666private class ExprNodeImpl extends ExprNode , NodeImpl {
6767 override DataFlowCallable getEnclosingCallableImpl ( ) {
68- result .getUnderlyingCallable ( ) = this .getExpr ( ) .( CIL:: Expr ) .getEnclosingCallable ( )
69- or
70- result .getUnderlyingCallable ( ) = this .getControlFlowNodeImpl ( ) .getEnclosingCallable ( )
68+ result .asCallable ( ) =
69+ [
70+ this .getExpr ( ) .( CIL:: Expr ) .getEnclosingCallable ( ) .( DotNet:: Callable ) ,
71+ this .getControlFlowNodeImpl ( ) .getEnclosingCallable ( )
72+ ]
7173 }
7274
7375 override DotNet:: Type getTypeImpl ( ) {
@@ -852,7 +854,7 @@ class SsaDefinitionNode extends NodeImpl, TSsaDefinitionNode {
852854 Ssa:: Definition getDefinition ( ) { result = def }
853855
854856 override DataFlowCallable getEnclosingCallableImpl ( ) {
855- result .getUnderlyingCallable ( ) = def .getEnclosingCallable ( )
857+ result .asCallable ( ) = def .getEnclosingCallable ( )
856858 }
857859
858860 override Type getTypeImpl ( ) { result = def .getSourceVariable ( ) .getType ( ) }
@@ -914,9 +916,7 @@ private module ParameterNodes {
914916 callable = c .asCallable ( ) and pos .isThisParameter ( )
915917 }
916918
917- override DataFlowCallable getEnclosingCallableImpl ( ) {
918- result .getUnderlyingCallable ( ) = callable
919- }
919+ override DataFlowCallable getEnclosingCallableImpl ( ) { result .asCallable ( ) = callable }
920920
921921 override Type getTypeImpl ( ) { result = callable .getDeclaringType ( ) }
922922
@@ -963,7 +963,7 @@ private module ParameterNodes {
963963
964964 override predicate isParameterOf ( DataFlowCallable c , ParameterPosition pos ) {
965965 pos .isImplicitCapturedParameterPosition ( def .getSourceVariable ( ) .getAssignable ( ) ) and
966- c .getUnderlyingCallable ( ) = this .getEnclosingCallable ( )
966+ c .asCallable ( ) = this .getEnclosingCallable ( )
967967 }
968968 }
969969
@@ -1078,7 +1078,7 @@ private module ArgumentNodes {
10781078 }
10791079
10801080 override DataFlowCallable getEnclosingCallableImpl ( ) {
1081- result .getUnderlyingCallable ( ) = cfn .getEnclosingCallable ( )
1081+ result .asCallable ( ) = cfn .getEnclosingCallable ( )
10821082 }
10831083
10841084 override Type getTypeImpl ( ) { result = v .getType ( ) }
@@ -1107,7 +1107,7 @@ private module ArgumentNodes {
11071107 override ControlFlow:: Node getControlFlowNodeImpl ( ) { result = cfn }
11081108
11091109 override DataFlowCallable getEnclosingCallableImpl ( ) {
1110- result .getUnderlyingCallable ( ) = cfn .getEnclosingCallable ( )
1110+ result .asCallable ( ) = cfn .getEnclosingCallable ( )
11111111 }
11121112
11131113 override Type getTypeImpl ( ) { result = cfn .getElement ( ) .( Expr ) .getType ( ) }
@@ -1146,7 +1146,7 @@ private module ArgumentNodes {
11461146 }
11471147
11481148 override DataFlowCallable getEnclosingCallableImpl ( ) {
1149- result .getUnderlyingCallable ( ) = callCfn .getEnclosingCallable ( )
1149+ result .asCallable ( ) = callCfn .getEnclosingCallable ( )
11501150 }
11511151
11521152 override Type getTypeImpl ( ) { result = this .getParameter ( ) .getType ( ) }
@@ -1227,7 +1227,7 @@ private module ReturnNodes {
12271227 override NormalReturnKind getKind ( ) { any ( ) }
12281228
12291229 override DataFlowCallable getEnclosingCallableImpl ( ) {
1230- result .getUnderlyingCallable ( ) = yrs .getEnclosingCallable ( )
1230+ result .asCallable ( ) = yrs .getEnclosingCallable ( )
12311231 }
12321232
12331233 override Type getTypeImpl ( ) { result = yrs .getEnclosingCallable ( ) .getReturnType ( ) }
@@ -1253,7 +1253,7 @@ private module ReturnNodes {
12531253 override NormalReturnKind getKind ( ) { any ( ) }
12541254
12551255 override DataFlowCallable getEnclosingCallableImpl ( ) {
1256- result .getUnderlyingCallable ( ) = expr .getEnclosingCallable ( )
1256+ result .asCallable ( ) = expr .getEnclosingCallable ( )
12571257 }
12581258
12591259 override Type getTypeImpl ( ) { result = expr .getEnclosingCallable ( ) .getReturnType ( ) }
@@ -1330,9 +1330,10 @@ private module ReturnNodes {
13301330 * In this case we adjust it to instead be a return node.
13311331 */
13321332private predicate summaryPostUpdateNodeIsOutOrRef ( SummaryNode n , Parameter p ) {
1333- exists ( ParameterNode pn |
1333+ exists ( ParameterNodeImpl pn , DataFlowCallable c , ParameterPosition pos |
13341334 FlowSummaryImpl:: Private:: summaryPostUpdateNode ( n , pn ) and
1335- pn .getParameter ( ) = p and
1335+ pn .isParameterOf ( c , pos ) and
1336+ p = c .asSummarizedCallable ( ) .getParameter ( pos .getPosition ( ) ) and
13361337 p .isOutOrRef ( )
13371338 )
13381339}
@@ -1903,7 +1904,7 @@ private module PostUpdateNodes {
19031904 }
19041905
19051906 override DataFlowCallable getEnclosingCallableImpl ( ) {
1906- result .getUnderlyingCallable ( ) = cfn .getEnclosingCallable ( )
1907+ result .asCallable ( ) = cfn .getEnclosingCallable ( )
19071908 }
19081909
19091910 override DotNet:: Type getTypeImpl ( ) { result = oc .getType ( ) }
@@ -1923,7 +1924,7 @@ private module PostUpdateNodes {
19231924 override ExprNode getPreUpdateNode ( ) { cfn = result .getControlFlowNode ( ) }
19241925
19251926 override DataFlowCallable getEnclosingCallableImpl ( ) {
1926- result .getUnderlyingCallable ( ) = cfn .getEnclosingCallable ( )
1927+ result .asCallable ( ) = cfn .getEnclosingCallable ( )
19271928 }
19281929
19291930 override Type getTypeImpl ( ) { result = cfn .getElement ( ) .( Expr ) .getType ( ) }
@@ -2012,12 +2013,11 @@ class LambdaCallKind = Unit;
20122013/** Holds if `creation` is an expression that creates a delegate for `c`. */
20132014predicate lambdaCreation ( ExprNode creation , LambdaCallKind kind , DataFlowCallable c ) {
20142015 exists ( Expr e | e = creation .getExpr ( ) |
2015- c .getUnderlyingCallable ( ) = e .( AnonymousFunctionExpr )
2016- or
2017- c .getUnderlyingCallable ( ) = e .( CallableAccess ) .getTarget ( ) .getUnboundDeclaration ( )
2018- or
2019- c .getUnderlyingCallable ( ) =
2020- e .( AddressOfExpr ) .getOperand ( ) .( CallableAccess ) .getTarget ( ) .getUnboundDeclaration ( )
2016+ c .asCallable ( ) =
2017+ [
2018+ e .( AnonymousFunctionExpr ) , e .( CallableAccess ) .getTarget ( ) .getUnboundDeclaration ( ) ,
2019+ e .( AddressOfExpr ) .getOperand ( ) .( CallableAccess ) .getTarget ( ) .getUnboundDeclaration ( )
2020+ ]
20212021 ) and
20222022 kind = TMkUnit ( )
20232023}
0 commit comments