Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion csharp/ql/src/semmle/code/csharp/exprs/Call.qll
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,7 @@ class MutatorOperatorCall extends OperatorCall {
* }
* ```
*/
class DelegateCall extends Call, @delegate_invocation_expr {
class DelegateCall extends Call, QualifiableExpr, @delegate_invocation_expr {
override Callable getTarget() { none() }

/**
Expand Down
3 changes: 2 additions & 1 deletion csharp/ql/src/semmlecode.csharp.dbscheme
Original file line number Diff line number Diff line change
Expand Up @@ -1118,7 +1118,8 @@ dynamic_member_name(

@qualifiable_expr = @member_access_expr
| @method_invocation_expr
| @element_access_expr;
| @element_access_expr
| @delegate_invocation_expr;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess we should add QualifiableExpr as a base class of DelegateCall too then? Even though it may look like an innocent change, simple changes to the type hierarchy have caused performance problems in the past, so we better run a dist comparison.


conditional_access(
unique int id: @qualifiable_expr ref);
Expand Down
4 changes: 2 additions & 2 deletions csharp/ql/test/library-tests/delegates/delegates.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ static void Main()
bool b = pi(3) & ps(""); // generic invocation

System.Threading.ContextCallback d; // assembly delegate
}

cd1?.Invoke(x); // qualifiable delegate invocation expression
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,17 @@
| expressions.cs:173:27:173:30 | access to method M1 | expressions.cs:173:27:173:27 | access to type C |
| expressions.cs:174:21:174:24 | access to method M2 | expressions.cs:174:21:174:21 | access to type C |
| expressions.cs:182:27:182:30 | access to method M3 | expressions.cs:182:27:182:27 | access to local variable c |
| expressions.cs:185:13:185:20 | delegate call | expressions.cs:185:13:185:15 | access to local variable cd1 |
| expressions.cs:187:13:187:23 | delegate call | expressions.cs:187:13:187:15 | access to local variable cd7 |
| expressions.cs:189:52:189:54 | access to method F | expressions.cs:189:52:189:52 | access to type X |
| expressions.cs:190:36:190:38 | access to method G | expressions.cs:190:36:190:36 | access to type X |
| expressions.cs:192:22:192:26 | delegate call | expressions.cs:192:22:192:23 | access to local variable pi |
| expressions.cs:192:30:192:35 | delegate call | expressions.cs:192:30:192:31 | access to local variable ps |
| expressions.cs:197:25:197:37 | access to local function LocalFunction | expressions.cs:197:25:197:37 | this access |
| expressions.cs:198:19:198:31 | access to local function LocalFunction | expressions.cs:198:19:198:31 | this access |
| expressions.cs:233:17:233:21 | access to event Click | expressions.cs:233:17:233:21 | this access |
| expressions.cs:234:17:234:21 | access to event Click | expressions.cs:234:17:234:21 | this access |
| expressions.cs:234:17:234:30 | delegate call | expressions.cs:234:17:234:21 | access to event Click |
| expressions.cs:239:13:239:17 | access to event Click | expressions.cs:239:13:239:17 | this access |
| expressions.cs:251:13:251:20 | access to field OkButton | expressions.cs:251:13:251:20 | this access |
| expressions.cs:252:13:252:20 | access to field OkButton | expressions.cs:252:13:252:20 | this access |
Expand Down
Loading