Skip to content

Commit 89e60dc

Browse files
committed
C#: Simplify CallContext.qll
1 parent a89505b commit 89e60dc

File tree

1 file changed

+11
-15
lines changed

1 file changed

+11
-15
lines changed

csharp/ql/src/semmle/code/csharp/dataflow/CallContext.qll

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@
55
import csharp
66
private import semmle.code.csharp.dataflow.internal.DelegateDataFlow
77
private import semmle.code.csharp.dispatch.Dispatch
8-
private import dotnet
98

109
// Internal representation of call contexts
1110
cached
1211
private newtype TCallContext =
1312
TEmptyCallContext() or
14-
TArgNonDelegateCallContext(DispatchCall dc, int i) { exists(dc.getArgument(i)) } or
13+
TArgNonDelegateCallContext(Expr arg) { exists(DispatchCall dc | arg = dc.getArgument(_)) } or
1514
TArgDelegateCallContext(DelegateCall dc, int i) { exists(dc.getArgument(i)) } or
1615
TDelegateToLibraryCallableArgCallContext(DelegateArgumentToLibraryCallable arg, int i) {
1716
exists(arg.getDelegateType().getParameter(i))
@@ -46,25 +45,22 @@ abstract class ArgumentCallContext extends CallContext {
4645
* Holds if this call context represents the argument at position `i` of the
4746
* call expression `call`.
4847
*/
49-
abstract predicate isArgument(DotNet::Expr call, int i);
48+
abstract predicate isArgument(Expr call, int i);
5049
}
5150

5251
/** An argument of a non-delegate call. */
5352
class NonDelegateCallArgumentCallContext extends ArgumentCallContext, TArgNonDelegateCallContext {
54-
DispatchCall dc;
53+
Expr arg;
5554

56-
int arg;
57-
58-
NonDelegateCallArgumentCallContext() { this = TArgNonDelegateCallContext(dc, arg) }
55+
NonDelegateCallArgumentCallContext() { this = TArgNonDelegateCallContext(arg) }
5956

60-
override predicate isArgument(DotNet::Expr call, int i) {
61-
call = dc.getCall() and
62-
i = arg
57+
override predicate isArgument(Expr call, int i) {
58+
exists(DispatchCall dc | arg = dc.getArgument(i) | call = dc.getCall())
6359
}
6460

65-
override string toString() { result = dc.getArgument(arg).toString() }
61+
override string toString() { result = arg.toString() }
6662

67-
override Location getLocation() { result = dc.getArgument(arg).getLocation() }
63+
override Location getLocation() { result = arg.getLocation() }
6864
}
6965

7066
/** An argument of a delegate call. */
@@ -75,7 +71,7 @@ class DelegateCallArgumentCallContext extends ArgumentCallContext, TArgDelegateC
7571

7672
DelegateCallArgumentCallContext() { this = TArgDelegateCallContext(dc, arg) }
7773

78-
override predicate isArgument(DotNet::Expr call, int i) {
74+
override predicate isArgument(Expr call, int i) {
7975
call = dc and
8076
i = arg
8177
}
@@ -96,15 +92,15 @@ class DelegateCallArgumentCallContext extends ArgumentCallContext, TArgDelegateC
9692
*/
9793
class DelegateArgumentToLibraryCallableArgumentContext extends ArgumentCallContext,
9894
TDelegateToLibraryCallableArgCallContext {
99-
DotNet::Expr delegate;
95+
Expr delegate;
10096

10197
int arg;
10298

10399
DelegateArgumentToLibraryCallableArgumentContext() {
104100
this = TDelegateToLibraryCallableArgCallContext(delegate, arg)
105101
}
106102

107-
override predicate isArgument(DotNet::Expr call, int i) {
103+
override predicate isArgument(Expr call, int i) {
108104
call = delegate and
109105
i = arg
110106
}

0 commit comments

Comments
 (0)