@@ -65,9 +65,11 @@ abstract class NodeImpl extends Node {
65
65
66
66
private class ExprNodeImpl extends ExprNode , NodeImpl {
67
67
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
+ ]
71
73
}
72
74
73
75
override DotNet:: Type getTypeImpl ( ) {
@@ -852,7 +854,7 @@ class SsaDefinitionNode extends NodeImpl, TSsaDefinitionNode {
852
854
Ssa:: Definition getDefinition ( ) { result = def }
853
855
854
856
override DataFlowCallable getEnclosingCallableImpl ( ) {
855
- result .getUnderlyingCallable ( ) = def .getEnclosingCallable ( )
857
+ result .asCallable ( ) = def .getEnclosingCallable ( )
856
858
}
857
859
858
860
override Type getTypeImpl ( ) { result = def .getSourceVariable ( ) .getType ( ) }
@@ -914,9 +916,7 @@ private module ParameterNodes {
914
916
callable = c .asCallable ( ) and pos .isThisParameter ( )
915
917
}
916
918
917
- override DataFlowCallable getEnclosingCallableImpl ( ) {
918
- result .getUnderlyingCallable ( ) = callable
919
- }
919
+ override DataFlowCallable getEnclosingCallableImpl ( ) { result .asCallable ( ) = callable }
920
920
921
921
override Type getTypeImpl ( ) { result = callable .getDeclaringType ( ) }
922
922
@@ -963,7 +963,7 @@ private module ParameterNodes {
963
963
964
964
override predicate isParameterOf ( DataFlowCallable c , ParameterPosition pos ) {
965
965
pos .isImplicitCapturedParameterPosition ( def .getSourceVariable ( ) .getAssignable ( ) ) and
966
- c .getUnderlyingCallable ( ) = this .getEnclosingCallable ( )
966
+ c .asCallable ( ) = this .getEnclosingCallable ( )
967
967
}
968
968
}
969
969
@@ -1078,7 +1078,7 @@ private module ArgumentNodes {
1078
1078
}
1079
1079
1080
1080
override DataFlowCallable getEnclosingCallableImpl ( ) {
1081
- result .getUnderlyingCallable ( ) = cfn .getEnclosingCallable ( )
1081
+ result .asCallable ( ) = cfn .getEnclosingCallable ( )
1082
1082
}
1083
1083
1084
1084
override Type getTypeImpl ( ) { result = v .getType ( ) }
@@ -1107,7 +1107,7 @@ private module ArgumentNodes {
1107
1107
override ControlFlow:: Node getControlFlowNodeImpl ( ) { result = cfn }
1108
1108
1109
1109
override DataFlowCallable getEnclosingCallableImpl ( ) {
1110
- result .getUnderlyingCallable ( ) = cfn .getEnclosingCallable ( )
1110
+ result .asCallable ( ) = cfn .getEnclosingCallable ( )
1111
1111
}
1112
1112
1113
1113
override Type getTypeImpl ( ) { result = cfn .getElement ( ) .( Expr ) .getType ( ) }
@@ -1146,7 +1146,7 @@ private module ArgumentNodes {
1146
1146
}
1147
1147
1148
1148
override DataFlowCallable getEnclosingCallableImpl ( ) {
1149
- result .getUnderlyingCallable ( ) = callCfn .getEnclosingCallable ( )
1149
+ result .asCallable ( ) = callCfn .getEnclosingCallable ( )
1150
1150
}
1151
1151
1152
1152
override Type getTypeImpl ( ) { result = this .getParameter ( ) .getType ( ) }
@@ -1227,7 +1227,7 @@ private module ReturnNodes {
1227
1227
override NormalReturnKind getKind ( ) { any ( ) }
1228
1228
1229
1229
override DataFlowCallable getEnclosingCallableImpl ( ) {
1230
- result .getUnderlyingCallable ( ) = yrs .getEnclosingCallable ( )
1230
+ result .asCallable ( ) = yrs .getEnclosingCallable ( )
1231
1231
}
1232
1232
1233
1233
override Type getTypeImpl ( ) { result = yrs .getEnclosingCallable ( ) .getReturnType ( ) }
@@ -1253,7 +1253,7 @@ private module ReturnNodes {
1253
1253
override NormalReturnKind getKind ( ) { any ( ) }
1254
1254
1255
1255
override DataFlowCallable getEnclosingCallableImpl ( ) {
1256
- result .getUnderlyingCallable ( ) = expr .getEnclosingCallable ( )
1256
+ result .asCallable ( ) = expr .getEnclosingCallable ( )
1257
1257
}
1258
1258
1259
1259
override Type getTypeImpl ( ) { result = expr .getEnclosingCallable ( ) .getReturnType ( ) }
@@ -1330,9 +1330,10 @@ private module ReturnNodes {
1330
1330
* In this case we adjust it to instead be a return node.
1331
1331
*/
1332
1332
private predicate summaryPostUpdateNodeIsOutOrRef ( SummaryNode n , Parameter p ) {
1333
- exists ( ParameterNode pn |
1333
+ exists ( ParameterNodeImpl pn , DataFlowCallable c , ParameterPosition pos |
1334
1334
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
1336
1337
p .isOutOrRef ( )
1337
1338
)
1338
1339
}
@@ -1903,7 +1904,7 @@ private module PostUpdateNodes {
1903
1904
}
1904
1905
1905
1906
override DataFlowCallable getEnclosingCallableImpl ( ) {
1906
- result .getUnderlyingCallable ( ) = cfn .getEnclosingCallable ( )
1907
+ result .asCallable ( ) = cfn .getEnclosingCallable ( )
1907
1908
}
1908
1909
1909
1910
override DotNet:: Type getTypeImpl ( ) { result = oc .getType ( ) }
@@ -1923,7 +1924,7 @@ private module PostUpdateNodes {
1923
1924
override ExprNode getPreUpdateNode ( ) { cfn = result .getControlFlowNode ( ) }
1924
1925
1925
1926
override DataFlowCallable getEnclosingCallableImpl ( ) {
1926
- result .getUnderlyingCallable ( ) = cfn .getEnclosingCallable ( )
1927
+ result .asCallable ( ) = cfn .getEnclosingCallable ( )
1927
1928
}
1928
1929
1929
1930
override Type getTypeImpl ( ) { result = cfn .getElement ( ) .( Expr ) .getType ( ) }
@@ -2012,12 +2013,11 @@ class LambdaCallKind = Unit;
2012
2013
/** Holds if `creation` is an expression that creates a delegate for `c`. */
2013
2014
predicate lambdaCreation ( ExprNode creation , LambdaCallKind kind , DataFlowCallable c ) {
2014
2015
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
+ ]
2021
2021
) and
2022
2022
kind = TMkUnit ( )
2023
2023
}
0 commit comments