mirror of
https://github.com/github/codeql.git
synced 2026-05-04 21:25:44 +02:00
C#: Refactor recursive patterns implementation
- Extract names of properties in a propery match, using the `exprorstmt_name` relation. - Simplify extraction of properties by not distinguishing between top-level patterns and nested patterns. - Introduce `PatternExpr` to capture patterns in `is` expressions, `case` statements, and `switch` expression arms. - Generalize `IsTypeExpr`, `IsPatternExpr`, `IsRecursivePatternExpr`, and `IsConstantExpr` to just `IsExpr` with a member predicate `PatternExpr getPattern()`. - Generalize `TypeCase`, `RecursivePatternCase`, and `ConstCase` to just `CaseStmt` with a member predicate `PatternExpr getPattern()`. - Introduce classes `Switch` and `Case` as base classes of switch statements/expressions and case statements/switch expression arms, respectively. - Simplify CFG logic using the generalized classes. - Generalize guards library to cover `switch` expressions tests. - Generalize data flow library to cover `switch` expression assignments.
This commit is contained in:
@@ -15,12 +15,12 @@
|
||||
| patterns.cs:10:9:11:9 | {...} | patterns.cs:13:9:15:9 | if (...) ... | semmle.label | successor |
|
||||
| patterns.cs:13:9:15:9 | if (...) ... | patterns.cs:13:13:13:56 | ... && ... | semmle.label | successor |
|
||||
| patterns.cs:13:13:13:13 | access to local variable o | patterns.cs:13:18:13:40 | MyStruct s | semmle.label | successor |
|
||||
| patterns.cs:13:13:13:40 | ... is { ... } | patterns.cs:13:45:13:45 | access to local variable x | semmle.label | true |
|
||||
| patterns.cs:13:13:13:40 | ... is { ... } | patterns.cs:17:9:19:9 | if (...) ... | semmle.label | false |
|
||||
| patterns.cs:13:13:13:40 | ... is ... | patterns.cs:13:45:13:45 | access to local variable x | semmle.label | true |
|
||||
| patterns.cs:13:13:13:40 | ... is ... | patterns.cs:17:9:19:9 | if (...) ... | semmle.label | false |
|
||||
| patterns.cs:13:13:13:47 | ... && ... | patterns.cs:13:13:13:13 | access to local variable o | semmle.label | successor |
|
||||
| patterns.cs:13:13:13:56 | ... && ... | patterns.cs:13:13:13:47 | ... && ... | semmle.label | successor |
|
||||
| patterns.cs:13:18:13:40 | MyStruct s | patterns.cs:13:32:13:36 | Int32 x | semmle.label | successor |
|
||||
| patterns.cs:13:18:13:40 | { ... } | patterns.cs:13:13:13:40 | ... is { ... } | semmle.label | successor |
|
||||
| patterns.cs:13:18:13:40 | { ... } | patterns.cs:13:13:13:40 | ... is ... | semmle.label | successor |
|
||||
| patterns.cs:13:27:13:38 | { ... } | patterns.cs:13:18:13:40 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:13:32:13:36 | Int32 x | patterns.cs:13:27:13:38 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:13:45:13:45 | access to local variable x | patterns.cs:13:47:13:47 | 4 | semmle.label | successor |
|
||||
@@ -35,17 +35,17 @@
|
||||
| patterns.cs:14:9:15:9 | {...} | patterns.cs:17:9:19:9 | if (...) ... | semmle.label | successor |
|
||||
| patterns.cs:17:9:19:9 | if (...) ... | patterns.cs:17:13:17:13 | access to local variable o | semmle.label | successor |
|
||||
| patterns.cs:17:13:17:13 | access to local variable o | patterns.cs:17:18:17:21 | Object p | semmle.label | successor |
|
||||
| patterns.cs:17:13:17:21 | ... is { ... } | patterns.cs:18:9:19:9 | {...} | semmle.label | true |
|
||||
| patterns.cs:17:13:17:21 | ... is { ... } | patterns.cs:22:9:24:9 | if (...) ... | semmle.label | false |
|
||||
| patterns.cs:17:13:17:21 | ... is ... | patterns.cs:18:9:19:9 | {...} | semmle.label | true |
|
||||
| patterns.cs:17:13:17:21 | ... is ... | patterns.cs:22:9:24:9 | if (...) ... | semmle.label | false |
|
||||
| patterns.cs:17:18:17:19 | { ... } | patterns.cs:17:18:17:21 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:17:18:17:21 | Object p | patterns.cs:17:18:17:19 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:17:18:17:21 | { ... } | patterns.cs:17:13:17:21 | ... is { ... } | semmle.label | successor |
|
||||
| patterns.cs:17:18:17:21 | { ... } | patterns.cs:17:13:17:21 | ... is ... | semmle.label | successor |
|
||||
| patterns.cs:18:9:19:9 | {...} | patterns.cs:22:9:24:9 | if (...) ... | semmle.label | successor |
|
||||
| patterns.cs:22:9:24:9 | if (...) ... | patterns.cs:22:13:22:13 | access to local variable o | semmle.label | successor |
|
||||
| patterns.cs:22:13:22:13 | access to local variable o | patterns.cs:22:31:22:32 | 12 | semmle.label | successor |
|
||||
| patterns.cs:22:13:22:53 | ... is { ... } | patterns.cs:23:9:24:9 | {...} | semmle.label | true |
|
||||
| patterns.cs:22:13:22:53 | ... is { ... } | patterns.cs:27:9:29:9 | if (...) ... | semmle.label | false |
|
||||
| patterns.cs:22:18:22:53 | { ... } | patterns.cs:22:13:22:53 | ... is { ... } | semmle.label | successor |
|
||||
| patterns.cs:22:13:22:53 | ... is ... | patterns.cs:23:9:24:9 | {...} | semmle.label | true |
|
||||
| patterns.cs:22:13:22:53 | ... is ... | patterns.cs:27:9:29:9 | if (...) ... | semmle.label | false |
|
||||
| patterns.cs:22:18:22:53 | { ... } | patterns.cs:22:13:22:53 | ... is ... | semmle.label | successor |
|
||||
| patterns.cs:22:27:22:53 | { ... } | patterns.cs:22:18:22:53 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:22:31:22:32 | 12 | patterns.cs:22:42:22:49 | Int32 subX | semmle.label | successor |
|
||||
| patterns.cs:22:38:22:51 | { ... } | patterns.cs:22:27:22:53 | { ... } | semmle.label | successor |
|
||||
@@ -54,9 +54,9 @@
|
||||
| patterns.cs:23:9:24:9 | {...} | patterns.cs:27:9:29:9 | if (...) ... | semmle.label | successor |
|
||||
| patterns.cs:27:9:29:9 | if (...) ... | patterns.cs:27:13:27:13 | access to local variable o | semmle.label | successor |
|
||||
| patterns.cs:27:13:27:13 | access to local variable o | patterns.cs:27:31:27:32 | 12 | semmle.label | successor |
|
||||
| patterns.cs:27:13:27:58 | ... is { ... } | patterns.cs:5:10:5:19 | exit IsPatterns | semmle.label | false |
|
||||
| patterns.cs:27:13:27:58 | ... is { ... } | patterns.cs:28:9:29:9 | {...} | semmle.label | true |
|
||||
| patterns.cs:27:18:27:58 | { ... } | patterns.cs:27:13:27:58 | ... is { ... } | semmle.label | successor |
|
||||
| patterns.cs:27:13:27:58 | ... is ... | patterns.cs:5:10:5:19 | exit IsPatterns | semmle.label | false |
|
||||
| patterns.cs:27:13:27:58 | ... is ... | patterns.cs:28:9:29:9 | {...} | semmle.label | true |
|
||||
| patterns.cs:27:18:27:58 | { ... } | patterns.cs:27:13:27:58 | ... is ... | semmle.label | successor |
|
||||
| patterns.cs:27:27:27:58 | { ... } | patterns.cs:27:18:27:58 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:27:31:27:32 | 12 | patterns.cs:27:38:27:56 | MyStruct ms | semmle.label | successor |
|
||||
| patterns.cs:27:38:27:56 | MyStruct ms | patterns.cs:27:51:27:51 | _ | semmle.label | successor |
|
||||
|
||||
@@ -120,7 +120,7 @@ class Patterns
|
||||
};
|
||||
}
|
||||
|
||||
void Expressions2()
|
||||
void Expressions2(object o)
|
||||
{
|
||||
var s = new MyStruct { X = 0 };
|
||||
var r = s switch
|
||||
@@ -133,7 +133,7 @@ class Patterns
|
||||
|
||||
try
|
||||
{
|
||||
r = 0 switch
|
||||
r = o switch
|
||||
{
|
||||
1 => throw new ArgumentException(),
|
||||
2 => 3,
|
||||
|
||||
@@ -3,7 +3,7 @@ switchExprs
|
||||
| patterns.cs:108:24:112:9 | ... switch { ... } | patterns.cs:108:24:108:31 | (..., ...) |
|
||||
| patterns.cs:115:20:120:9 | ... switch { ... } | patterns.cs:115:20:115:27 | (..., ...) |
|
||||
| patterns.cs:126:17:132:9 | ... switch { ... } | patterns.cs:126:17:126:17 | access to local variable s |
|
||||
| patterns.cs:136:17:141:13 | ... switch { ... } | patterns.cs:136:17:136:17 | 0 |
|
||||
| patterns.cs:136:17:141:13 | ... switch { ... } | patterns.cs:136:17:136:17 | access to parameter o |
|
||||
switchExprCases
|
||||
| patterns.cs:101:13:101:40 | ... => ... | patterns.cs:101:13:101:17 | Int32 y | patterns.cs:101:34:101:40 | "large" |
|
||||
| patterns.cs:102:13:102:24 | ... => ... | patterns.cs:102:13:102:13 | _ | patterns.cs:102:18:102:24 | "small" |
|
||||
@@ -22,7 +22,7 @@ switchExprCases
|
||||
switchFilters
|
||||
| patterns.cs:101:13:101:40 | ... => ... | patterns.cs:101:24:101:29 | ... > ... |
|
||||
| patterns.cs:128:13:128:49 | ... => ... | patterns.cs:128:40:128:44 | ... > ... |
|
||||
| patterns.cs:140:17:140:42 | ... => ... | patterns.cs:140:31:140:37 | ... is { ... } |
|
||||
| patterns.cs:140:17:140:42 | ... => ... | patterns.cs:140:31:140:37 | ... is ... |
|
||||
propertyPatterns
|
||||
| patterns.cs:13:27:13:38 | { ... } |
|
||||
| patterns.cs:17:18:17:19 | { ... } |
|
||||
@@ -78,40 +78,44 @@ positionalPatterns
|
||||
| patterns.cs:130:13:130:18 | ( ... ) | patterns.cs:130:13:130:18 | { ... } | 0 | patterns.cs:130:14:130:14 | 1 |
|
||||
| patterns.cs:130:13:130:18 | ( ... ) | patterns.cs:130:13:130:18 | { ... } | 1 | patterns.cs:130:17:130:17 | 2 |
|
||||
caseStatements
|
||||
| patterns.cs:38:13:38:47 | case MyStruct ms1: |
|
||||
| patterns.cs:41:13:41:46 | case MyStruct ms2: |
|
||||
| patterns.cs:48:13:48:50 | case { ... }: |
|
||||
| patterns.cs:51:13:51:39 | case { ... }: |
|
||||
| patterns.cs:54:13:54:43 | case { ... }: |
|
||||
| patterns.cs:57:13:57:24 | case { ... }: |
|
||||
| patterns.cs:38:13:38:47 | case ...: |
|
||||
| patterns.cs:41:13:41:46 | case ...: |
|
||||
| patterns.cs:48:13:48:50 | case ...: |
|
||||
| patterns.cs:51:13:51:39 | case ...: |
|
||||
| patterns.cs:54:13:54:43 | case ...: |
|
||||
| patterns.cs:57:13:57:24 | case ...: |
|
||||
| patterns.cs:59:13:59:28 | case ...: |
|
||||
| patterns.cs:61:13:61:20 | default: |
|
||||
| patterns.cs:67:13:67:50 | case { ... }: |
|
||||
| patterns.cs:70:13:70:51 | case { ... }: |
|
||||
| patterns.cs:78:13:78:43 | case { ... }: |
|
||||
| patterns.cs:80:13:80:20 | case { ... }: |
|
||||
| patterns.cs:82:13:82:20 | case { ... }: |
|
||||
| patterns.cs:88:13:88:24 | case { ... }: |
|
||||
| patterns.cs:93:13:93:28 | case { ... }: |
|
||||
| patterns.cs:94:13:94:24 | case { ... }: |
|
||||
| patterns.cs:67:13:67:50 | case ...: |
|
||||
| patterns.cs:70:13:70:51 | case ...: |
|
||||
| patterns.cs:78:13:78:43 | case ...: |
|
||||
| patterns.cs:80:13:80:20 | case ...: |
|
||||
| patterns.cs:82:13:82:20 | case ...: |
|
||||
| patterns.cs:88:13:88:24 | case ...: |
|
||||
| patterns.cs:93:13:93:28 | case ...: |
|
||||
| patterns.cs:94:13:94:24 | case ...: |
|
||||
recursivePatternCases
|
||||
| patterns.cs:48:13:48:50 | case { ... }: | patterns.cs:48:18:48:38 | { ... } |
|
||||
| patterns.cs:51:13:51:39 | case { ... }: | patterns.cs:51:18:51:38 | { ... } |
|
||||
| patterns.cs:54:13:54:43 | case { ... }: | patterns.cs:54:18:54:30 | { ... } |
|
||||
| patterns.cs:57:13:57:24 | case { ... }: | patterns.cs:57:18:57:23 | { ... } |
|
||||
| patterns.cs:67:13:67:50 | case { ... }: | patterns.cs:67:18:67:38 | { ... } |
|
||||
| patterns.cs:70:13:70:51 | case { ... }: | patterns.cs:70:18:70:38 | { ... } |
|
||||
| patterns.cs:78:13:78:43 | case { ... }: | patterns.cs:78:18:78:33 | { ... } |
|
||||
| patterns.cs:80:13:80:20 | case { ... }: | patterns.cs:80:18:80:19 | { ... } |
|
||||
| patterns.cs:82:13:82:20 | case { ... }: | patterns.cs:82:18:82:19 | { ... } |
|
||||
| patterns.cs:88:13:88:24 | case { ... }: | patterns.cs:88:18:88:23 | { ... } |
|
||||
| patterns.cs:93:13:93:28 | case { ... }: | patterns.cs:93:18:93:27 | { ... } |
|
||||
| patterns.cs:94:13:94:24 | case { ... }: | patterns.cs:94:18:94:23 | { ... } |
|
||||
| patterns.cs:48:13:48:50 | case ...: | patterns.cs:48:18:48:38 | { ... } |
|
||||
| patterns.cs:51:13:51:39 | case ...: | patterns.cs:51:18:51:38 | { ... } |
|
||||
| patterns.cs:54:13:54:43 | case ...: | patterns.cs:54:18:54:30 | { ... } |
|
||||
| patterns.cs:57:13:57:24 | case ...: | patterns.cs:57:18:57:23 | { ... } |
|
||||
| patterns.cs:67:13:67:50 | case ...: | patterns.cs:67:18:67:38 | { ... } |
|
||||
| patterns.cs:70:13:70:51 | case ...: | patterns.cs:70:18:70:38 | { ... } |
|
||||
| patterns.cs:78:13:78:43 | case ...: | patterns.cs:78:18:78:33 | { ... } |
|
||||
| patterns.cs:80:13:80:20 | case ...: | patterns.cs:80:18:80:19 | { ... } |
|
||||
| patterns.cs:82:13:82:20 | case ...: | patterns.cs:82:18:82:19 | { ... } |
|
||||
| patterns.cs:88:13:88:24 | case ...: | patterns.cs:88:18:88:23 | { ... } |
|
||||
| patterns.cs:93:13:93:28 | case ...: | patterns.cs:93:18:93:27 | { ... } |
|
||||
| patterns.cs:94:13:94:24 | case ...: | patterns.cs:94:18:94:23 | { ... } |
|
||||
recursiveCasePatternDecl
|
||||
| patterns.cs:51:13:51:39 | case { ... }: | patterns.cs:51:18:51:25 | access to type MyStruct | patterns.cs:51:18:51:38 | MyStruct ms |
|
||||
| patterns.cs:70:13:70:51 | case { ... }: | patterns.cs:70:18:70:25 | access to type MyStruct | patterns.cs:70:18:70:38 | MyStruct ms |
|
||||
| patterns.cs:51:13:51:39 | case ...: | patterns.cs:51:18:51:25 | access to type MyStruct | patterns.cs:51:18:51:38 | MyStruct ms |
|
||||
| patterns.cs:70:13:70:51 | case ...: | patterns.cs:70:18:70:25 | access to type MyStruct | patterns.cs:70:18:70:38 | MyStruct ms |
|
||||
recursivePatternDecl
|
||||
| patterns.cs:13:18:13:40 | { ... } | patterns.cs:13:18:13:40 | MyStruct s |
|
||||
| patterns.cs:17:18:17:21 | { ... } | patterns.cs:17:18:17:21 | Object p |
|
||||
| patterns.cs:27:38:27:56 | { ... } | patterns.cs:27:38:27:56 | MyStruct ms |
|
||||
| patterns.cs:51:18:51:38 | { ... } | patterns.cs:51:18:51:38 | MyStruct ms |
|
||||
| patterns.cs:70:18:70:38 | { ... } | patterns.cs:70:18:70:38 | MyStruct ms |
|
||||
| patterns.cs:129:13:129:33 | { ... } | patterns.cs:129:13:129:33 | MyStruct ms |
|
||||
recursivePatterns
|
||||
| patterns.cs:13:18:13:40 | { ... } |
|
||||
@@ -148,17 +152,32 @@ discards
|
||||
| patterns.cs:131:21:131:21 | _ |
|
||||
isExprs
|
||||
| patterns.cs:9:13:9:29 | ... is ... |
|
||||
| patterns.cs:13:13:13:40 | ... is { ... } |
|
||||
| patterns.cs:17:13:17:21 | ... is { ... } |
|
||||
| patterns.cs:22:13:22:53 | ... is { ... } |
|
||||
| patterns.cs:27:13:27:58 | ... is { ... } |
|
||||
| patterns.cs:140:31:140:37 | ... is { ... } |
|
||||
| patterns.cs:13:13:13:40 | ... is ... |
|
||||
| patterns.cs:17:13:17:21 | ... is ... |
|
||||
| patterns.cs:22:13:22:53 | ... is ... |
|
||||
| patterns.cs:27:13:27:58 | ... is ... |
|
||||
| patterns.cs:140:31:140:37 | ... is ... |
|
||||
isRecursivePatternExpr
|
||||
| patterns.cs:13:13:13:40 | ... is { ... } |
|
||||
| patterns.cs:17:13:17:21 | ... is { ... } |
|
||||
| patterns.cs:22:13:22:53 | ... is { ... } |
|
||||
| patterns.cs:27:13:27:58 | ... is { ... } |
|
||||
| patterns.cs:140:31:140:37 | ... is { ... } |
|
||||
| patterns.cs:13:13:13:40 | ... is ... |
|
||||
| patterns.cs:17:13:17:21 | ... is ... |
|
||||
| patterns.cs:22:13:22:53 | ... is ... |
|
||||
| patterns.cs:27:13:27:58 | ... is ... |
|
||||
| patterns.cs:140:31:140:37 | ... is ... |
|
||||
isRecursivePatternExprWithDecl
|
||||
| patterns.cs:13:13:13:40 | ... is { ... } | patterns.cs:13:18:13:40 | MyStruct s |
|
||||
| patterns.cs:17:13:17:21 | ... is { ... } | patterns.cs:17:18:17:21 | Object p |
|
||||
| patterns.cs:13:13:13:40 | ... is ... | patterns.cs:13:18:13:40 | MyStruct s |
|
||||
| patterns.cs:17:13:17:21 | ... is ... | patterns.cs:17:18:17:21 | Object p |
|
||||
labeledPatternExpr
|
||||
| patterns.cs:13:32:13:36 | Int32 x | X |
|
||||
| patterns.cs:22:31:22:32 | 12 | X |
|
||||
| patterns.cs:22:38:22:51 | { ... } | S |
|
||||
| patterns.cs:22:42:22:49 | Int32 subX | X |
|
||||
| patterns.cs:27:31:27:32 | 12 | X |
|
||||
| patterns.cs:27:38:27:56 | { ... } | S |
|
||||
| patterns.cs:27:51:27:51 | _ | X |
|
||||
| patterns.cs:48:32:48:36 | Int32 x | X |
|
||||
| patterns.cs:51:32:51:33 | 10 | X |
|
||||
| patterns.cs:54:23:54:28 | Int32 x2 | X |
|
||||
| patterns.cs:67:32:67:36 | Int32 x | X |
|
||||
| patterns.cs:70:32:70:33 | 10 | X |
|
||||
| patterns.cs:128:27:128:31 | Int32 x | X |
|
||||
| patterns.cs:129:27:129:28 | 10 | X |
|
||||
|
||||
@@ -3,7 +3,7 @@ import csharp
|
||||
query predicate switchExprs(SwitchExpr switch, Expr e) { e = switch.getExpr() }
|
||||
|
||||
query predicate switchExprCases(SwitchCaseExpr case, Expr pattern, Expr res) {
|
||||
pattern = case.getPattern() and res = case.getResult()
|
||||
pattern = case.getPattern() and res = case.getBody()
|
||||
}
|
||||
|
||||
query predicate switchFilters(SwitchCaseExpr case, Expr when) { when = case.getCondition() }
|
||||
@@ -21,6 +21,14 @@ query predicate positionalPatterns(PositionalPatternExpr pp, Expr parent, int n,
|
||||
|
||||
query predicate caseStatements(CaseStmt case) { any() }
|
||||
|
||||
private class RecursivePatternCase extends CaseStmt {
|
||||
private RecursivePatternExpr p;
|
||||
|
||||
RecursivePatternCase() { p = this.getPattern() }
|
||||
|
||||
RecursivePatternExpr getRecursivePattern() { result = p }
|
||||
}
|
||||
|
||||
query predicate recursivePatternCases(RecursivePatternCase case, RecursivePatternExpr p) {
|
||||
p = case.getRecursivePattern()
|
||||
}
|
||||
@@ -28,7 +36,8 @@ query predicate recursivePatternCases(RecursivePatternCase case, RecursivePatter
|
||||
query predicate recursiveCasePatternDecl(
|
||||
RecursivePatternCase case, TypeAccess ta, LocalVariableDeclExpr decl
|
||||
) {
|
||||
ta = case.getTypeAccess() and decl = case.getVariableDeclExpr()
|
||||
ta = case.getRecursivePattern().getTypeAccess() and
|
||||
decl = case.getRecursivePattern().getVariableDeclExpr()
|
||||
}
|
||||
|
||||
query predicate recursivePatternDecl(RecursivePatternExpr pattern, LocalVariableDeclExpr decl) {
|
||||
@@ -41,10 +50,22 @@ query predicate discards(DiscardExpr discard) { any() }
|
||||
|
||||
query predicate isExprs(IsExpr is) { any() }
|
||||
|
||||
private class IsRecursivePatternExpr extends IsExpr {
|
||||
private RecursivePatternExpr p;
|
||||
|
||||
IsRecursivePatternExpr() { p = this.getPattern() }
|
||||
|
||||
RecursivePatternExpr getRecursivePattern() { result = p }
|
||||
}
|
||||
|
||||
query predicate isRecursivePatternExpr(IsRecursivePatternExpr expr) { any() }
|
||||
|
||||
query predicate isRecursivePatternExprWithDecl(
|
||||
IsRecursivePatternExpr expr, LocalVariableDeclExpr decl
|
||||
) {
|
||||
decl = expr.getVariableDeclExpr()
|
||||
decl = expr.getRecursivePattern().getVariableDeclExpr()
|
||||
}
|
||||
|
||||
query predicate labeledPatternExpr(LabeledPatternExpr e, string s) {
|
||||
s = e.getLabel()
|
||||
}
|
||||
|
||||
@@ -127,8 +127,8 @@
|
||||
| patterns.cs:135:9:142:9 | {...} | patterns.cs:136:13:141:14 | ...; | semmle.label | successor |
|
||||
| patterns.cs:136:13:141:13 | ... = ... | patterns.cs:123:10:123:21 | exit Expressions2 | semmle.label | successor |
|
||||
| patterns.cs:136:13:141:14 | ...; | patterns.cs:136:17:141:13 | ... switch { ... } | semmle.label | successor |
|
||||
| patterns.cs:136:17:136:17 | 0 | patterns.cs:138:17:138:50 | ... => ... | semmle.label | successor |
|
||||
| patterns.cs:136:17:141:13 | ... switch { ... } | patterns.cs:136:17:136:17 | 0 | semmle.label | successor |
|
||||
| patterns.cs:136:17:136:17 | access to parameter o | patterns.cs:138:17:138:50 | ... => ... | semmle.label | successor |
|
||||
| patterns.cs:136:17:141:13 | ... switch { ... } | patterns.cs:136:17:136:17 | access to parameter o | semmle.label | successor |
|
||||
| patterns.cs:138:17:138:17 | 1 | patterns.cs:138:28:138:50 | object creation of type ArgumentException | semmle.label | match |
|
||||
| patterns.cs:138:17:138:17 | 1 | patterns.cs:139:17:139:22 | ... => ... | semmle.label | no-match |
|
||||
| patterns.cs:138:17:138:50 | ... => ... | patterns.cs:138:17:138:17 | 1 | semmle.label | successor |
|
||||
@@ -143,9 +143,9 @@
|
||||
| patterns.cs:140:17:140:24 | Object y | patterns.cs:143:9:146:9 | [exception: InvalidOperationException] catch (...) {...} | semmle.label | exception(InvalidOperationException) |
|
||||
| patterns.cs:140:17:140:42 | ... => ... | patterns.cs:140:17:140:24 | Object y | semmle.label | successor |
|
||||
| patterns.cs:140:31:140:31 | access to local variable y | patterns.cs:140:36:140:37 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:140:31:140:37 | ... is { ... } | patterns.cs:140:42:140:42 | 4 | semmle.label | true |
|
||||
| patterns.cs:140:31:140:37 | ... is { ... } | patterns.cs:143:9:146:9 | [exception: InvalidOperationException] catch (...) {...} | semmle.label | exception(InvalidOperationException) |
|
||||
| patterns.cs:140:36:140:37 | { ... } | patterns.cs:140:31:140:37 | ... is { ... } | semmle.label | successor |
|
||||
| patterns.cs:140:31:140:37 | ... is ... | patterns.cs:140:42:140:42 | 4 | semmle.label | true |
|
||||
| patterns.cs:140:31:140:37 | ... is ... | patterns.cs:143:9:146:9 | [exception: InvalidOperationException] catch (...) {...} | semmle.label | exception(InvalidOperationException) |
|
||||
| patterns.cs:140:36:140:37 | { ... } | patterns.cs:140:31:140:37 | ... is ... | semmle.label | successor |
|
||||
| patterns.cs:140:36:140:37 | { ... } | patterns.cs:140:36:140:37 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:140:42:140:42 | 4 | patterns.cs:136:13:141:13 | ... = ... | semmle.label | successor |
|
||||
| patterns.cs:143:9:146:9 | [exception: ArgumentException] catch (...) {...} | patterns.cs:123:10:123:21 | exit Expressions2 | semmle.label | exception(ArgumentException) |
|
||||
|
||||
@@ -7,24 +7,22 @@
|
||||
| patterns.cs:34:32:34:36 | ... = ... | patterns.cs:34:30:34:38 | { ..., ... } | semmle.label | successor |
|
||||
| patterns.cs:34:36:34:36 | 0 | patterns.cs:34:32:34:36 | ... = ... | semmle.label | successor |
|
||||
| patterns.cs:36:9:44:9 | switch (...) {...} | patterns.cs:36:17:36:17 | access to local variable s | semmle.label | successor |
|
||||
| patterns.cs:36:17:36:17 | access to local variable s | patterns.cs:38:13:38:47 | case MyStruct ms1: | semmle.label | successor |
|
||||
| patterns.cs:38:13:38:47 | case MyStruct ms1: | patterns.cs:38:18:38:25 | access to type MyStruct | semmle.label | successor |
|
||||
| patterns.cs:38:18:38:25 | access to type MyStruct | patterns.cs:38:18:38:29 | MyStruct ms1 | semmle.label | match |
|
||||
| patterns.cs:38:18:38:25 | access to type MyStruct | patterns.cs:41:13:41:46 | case MyStruct ms2: | semmle.label | no-match |
|
||||
| patterns.cs:38:18:38:29 | MyStruct ms1 | patterns.cs:38:36:38:38 | access to local variable ms1 | semmle.label | successor |
|
||||
| patterns.cs:36:17:36:17 | access to local variable s | patterns.cs:38:13:38:47 | case ...: | semmle.label | successor |
|
||||
| patterns.cs:38:13:38:47 | case ...: | patterns.cs:38:18:38:29 | MyStruct ms1 | semmle.label | successor |
|
||||
| patterns.cs:38:18:38:29 | MyStruct ms1 | patterns.cs:38:36:38:38 | access to local variable ms1 | semmle.label | match |
|
||||
| patterns.cs:38:18:38:29 | MyStruct ms1 | patterns.cs:41:13:41:46 | case ...: | semmle.label | no-match |
|
||||
| patterns.cs:38:36:38:38 | access to local variable ms1 | patterns.cs:38:36:38:40 | access to field X | semmle.label | successor |
|
||||
| patterns.cs:38:36:38:40 | access to field X | patterns.cs:38:45:38:46 | 10 | semmle.label | successor |
|
||||
| patterns.cs:38:36:38:46 | ... == ... | patterns.cs:39:17:39:56 | ...; | semmle.label | true |
|
||||
| patterns.cs:38:36:38:46 | ... == ... | patterns.cs:41:13:41:46 | case MyStruct ms2: | semmle.label | false |
|
||||
| patterns.cs:38:36:38:46 | ... == ... | patterns.cs:41:13:41:46 | case ...: | semmle.label | false |
|
||||
| patterns.cs:38:45:38:46 | 10 | patterns.cs:38:36:38:46 | ... == ... | semmle.label | successor |
|
||||
| patterns.cs:39:17:39:55 | call to method WriteLine | patterns.cs:40:17:40:22 | break; | semmle.label | successor |
|
||||
| patterns.cs:39:17:39:56 | ...; | patterns.cs:39:35:39:54 | "Hit the breakpoint" | semmle.label | successor |
|
||||
| patterns.cs:39:35:39:54 | "Hit the breakpoint" | patterns.cs:39:17:39:55 | call to method WriteLine | semmle.label | successor |
|
||||
| patterns.cs:40:17:40:22 | break; | patterns.cs:46:9:63:9 | switch (...) {...} | semmle.label | break |
|
||||
| patterns.cs:41:13:41:46 | case MyStruct ms2: | patterns.cs:41:18:41:25 | access to type MyStruct | semmle.label | successor |
|
||||
| patterns.cs:41:18:41:25 | access to type MyStruct | patterns.cs:41:18:41:29 | MyStruct ms2 | semmle.label | match |
|
||||
| patterns.cs:41:18:41:25 | access to type MyStruct | patterns.cs:46:9:63:9 | switch (...) {...} | semmle.label | no-match |
|
||||
| patterns.cs:41:18:41:29 | MyStruct ms2 | patterns.cs:41:36:41:38 | access to local variable ms2 | semmle.label | successor |
|
||||
| patterns.cs:41:13:41:46 | case ...: | patterns.cs:41:18:41:29 | MyStruct ms2 | semmle.label | successor |
|
||||
| patterns.cs:41:18:41:29 | MyStruct ms2 | patterns.cs:41:36:41:38 | access to local variable ms2 | semmle.label | match |
|
||||
| patterns.cs:41:18:41:29 | MyStruct ms2 | patterns.cs:46:9:63:9 | switch (...) {...} | semmle.label | no-match |
|
||||
| patterns.cs:41:36:41:38 | access to local variable ms2 | patterns.cs:41:36:41:40 | access to field X | semmle.label | successor |
|
||||
| patterns.cs:41:36:41:40 | access to field X | patterns.cs:41:44:41:45 | 10 | semmle.label | successor |
|
||||
| patterns.cs:41:36:41:45 | ... < ... | patterns.cs:42:17:42:59 | ...; | semmle.label | true |
|
||||
@@ -35,48 +33,44 @@
|
||||
| patterns.cs:42:35:42:57 | "Missed the breakpoint" | patterns.cs:42:17:42:58 | call to method WriteLine | semmle.label | successor |
|
||||
| patterns.cs:43:17:43:22 | break; | patterns.cs:46:9:63:9 | switch (...) {...} | semmle.label | break |
|
||||
| patterns.cs:46:9:63:9 | switch (...) {...} | patterns.cs:46:17:46:17 | access to local variable s | semmle.label | successor |
|
||||
| patterns.cs:46:17:46:17 | access to local variable s | patterns.cs:48:13:48:50 | case { ... }: | semmle.label | successor |
|
||||
| patterns.cs:48:13:48:50 | case { ... }: | patterns.cs:48:18:48:25 | access to type MyStruct | semmle.label | successor |
|
||||
| patterns.cs:48:18:48:25 | access to type MyStruct | patterns.cs:48:32:48:36 | Int32 x | semmle.label | match |
|
||||
| patterns.cs:48:18:48:25 | access to type MyStruct | patterns.cs:51:13:51:39 | case { ... }: | semmle.label | no-match |
|
||||
| patterns.cs:46:17:46:17 | access to local variable s | patterns.cs:48:13:48:50 | case ...: | semmle.label | successor |
|
||||
| patterns.cs:48:13:48:50 | case ...: | patterns.cs:48:32:48:36 | Int32 x | semmle.label | successor |
|
||||
| patterns.cs:48:18:48:38 | { ... } | patterns.cs:48:45:48:45 | access to local variable x | semmle.label | match |
|
||||
| patterns.cs:48:18:48:38 | { ... } | patterns.cs:51:13:51:39 | case { ... }: | semmle.label | no-match |
|
||||
| patterns.cs:48:18:48:38 | { ... } | patterns.cs:51:13:51:39 | case ...: | semmle.label | no-match |
|
||||
| patterns.cs:48:27:48:38 | { ... } | patterns.cs:48:18:48:38 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:48:32:48:36 | Int32 x | patterns.cs:48:27:48:38 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:48:45:48:45 | access to local variable x | patterns.cs:48:49:48:49 | 2 | semmle.label | successor |
|
||||
| patterns.cs:48:45:48:49 | ... > ... | patterns.cs:49:17:49:37 | ...; | semmle.label | true |
|
||||
| patterns.cs:48:45:48:49 | ... > ... | patterns.cs:51:13:51:39 | case { ... }: | semmle.label | false |
|
||||
| patterns.cs:48:45:48:49 | ... > ... | patterns.cs:51:13:51:39 | case ...: | semmle.label | false |
|
||||
| patterns.cs:48:49:48:49 | 2 | patterns.cs:48:45:48:49 | ... > ... | semmle.label | successor |
|
||||
| patterns.cs:49:17:49:36 | call to method WriteLine | patterns.cs:50:17:50:22 | break; | semmle.label | successor |
|
||||
| patterns.cs:49:17:49:37 | ...; | patterns.cs:49:35:49:35 | access to local variable x | semmle.label | successor |
|
||||
| patterns.cs:49:35:49:35 | access to local variable x | patterns.cs:49:17:49:36 | call to method WriteLine | semmle.label | successor |
|
||||
| patterns.cs:50:17:50:22 | break; | patterns.cs:65:9:73:9 | switch (...) {...} | semmle.label | break |
|
||||
| patterns.cs:51:13:51:39 | case { ... }: | patterns.cs:51:18:51:25 | access to type MyStruct | semmle.label | successor |
|
||||
| patterns.cs:51:18:51:25 | access to type MyStruct | patterns.cs:51:32:51:33 | 10 | semmle.label | match |
|
||||
| patterns.cs:51:18:51:25 | access to type MyStruct | patterns.cs:54:13:54:43 | case { ... }: | semmle.label | no-match |
|
||||
| patterns.cs:51:18:51:38 | MyStruct ms | patterns.cs:52:17:52:56 | ...; | semmle.label | successor |
|
||||
| patterns.cs:51:18:51:38 | { ... } | patterns.cs:51:18:51:38 | MyStruct ms | semmle.label | match |
|
||||
| patterns.cs:51:18:51:38 | { ... } | patterns.cs:54:13:54:43 | case { ... }: | semmle.label | no-match |
|
||||
| patterns.cs:51:13:51:39 | case ...: | patterns.cs:51:18:51:38 | MyStruct ms | semmle.label | successor |
|
||||
| patterns.cs:51:18:51:38 | MyStruct ms | patterns.cs:51:32:51:33 | 10 | semmle.label | successor |
|
||||
| patterns.cs:51:18:51:38 | { ... } | patterns.cs:52:17:52:56 | ...; | semmle.label | match |
|
||||
| patterns.cs:51:18:51:38 | { ... } | patterns.cs:54:13:54:43 | case ...: | semmle.label | no-match |
|
||||
| patterns.cs:51:27:51:35 | { ... } | patterns.cs:51:18:51:38 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:51:32:51:33 | 10 | patterns.cs:51:27:51:35 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:52:17:52:55 | call to method WriteLine | patterns.cs:53:17:53:22 | break; | semmle.label | successor |
|
||||
| patterns.cs:52:17:52:56 | ...; | patterns.cs:52:35:52:54 | "Hit the breakpoint" | semmle.label | successor |
|
||||
| patterns.cs:52:35:52:54 | "Hit the breakpoint" | patterns.cs:52:17:52:55 | call to method WriteLine | semmle.label | successor |
|
||||
| patterns.cs:53:17:53:22 | break; | patterns.cs:65:9:73:9 | switch (...) {...} | semmle.label | break |
|
||||
| patterns.cs:54:13:54:43 | case { ... }: | patterns.cs:54:23:54:28 | Int32 x2 | semmle.label | successor |
|
||||
| patterns.cs:54:13:54:43 | case ...: | patterns.cs:54:23:54:28 | Int32 x2 | semmle.label | successor |
|
||||
| patterns.cs:54:18:54:30 | { ... } | patterns.cs:54:18:54:30 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:54:18:54:30 | { ... } | patterns.cs:54:37:54:38 | access to local variable x2 | semmle.label | match |
|
||||
| patterns.cs:54:18:54:30 | { ... } | patterns.cs:57:13:57:24 | case { ... }: | semmle.label | no-match |
|
||||
| patterns.cs:54:18:54:30 | { ... } | patterns.cs:57:13:57:24 | case ...: | semmle.label | no-match |
|
||||
| patterns.cs:54:23:54:28 | Int32 x2 | patterns.cs:54:18:54:30 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:54:37:54:38 | access to local variable x2 | patterns.cs:54:42:54:42 | 2 | semmle.label | successor |
|
||||
| patterns.cs:54:37:54:42 | ... > ... | patterns.cs:55:17:55:38 | ...; | semmle.label | true |
|
||||
| patterns.cs:54:37:54:42 | ... > ... | patterns.cs:57:13:57:24 | case { ... }: | semmle.label | false |
|
||||
| patterns.cs:54:37:54:42 | ... > ... | patterns.cs:57:13:57:24 | case ...: | semmle.label | false |
|
||||
| patterns.cs:54:42:54:42 | 2 | patterns.cs:54:37:54:42 | ... > ... | semmle.label | successor |
|
||||
| patterns.cs:55:17:55:37 | call to method WriteLine | patterns.cs:56:17:56:22 | break; | semmle.label | successor |
|
||||
| patterns.cs:55:17:55:38 | ...; | patterns.cs:55:35:55:36 | access to local variable x2 | semmle.label | successor |
|
||||
| patterns.cs:55:35:55:36 | access to local variable x2 | patterns.cs:55:17:55:37 | call to method WriteLine | semmle.label | successor |
|
||||
| patterns.cs:56:17:56:22 | break; | patterns.cs:65:9:73:9 | switch (...) {...} | semmle.label | break |
|
||||
| patterns.cs:57:13:57:24 | case { ... }: | patterns.cs:57:19:57:19 | 1 | semmle.label | successor |
|
||||
| patterns.cs:57:13:57:24 | case ...: | patterns.cs:57:19:57:19 | 1 | semmle.label | successor |
|
||||
| patterns.cs:57:18:57:23 | ( ... ) | patterns.cs:57:18:57:23 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:57:18:57:23 | { ... } | patterns.cs:58:17:58:22 | break; | semmle.label | match |
|
||||
| patterns.cs:57:18:57:23 | { ... } | patterns.cs:59:13:59:28 | case ...: | semmle.label | no-match |
|
||||
@@ -92,27 +86,24 @@
|
||||
| patterns.cs:61:13:61:20 | default: | patterns.cs:62:17:62:22 | break; | semmle.label | successor |
|
||||
| patterns.cs:62:17:62:22 | break; | patterns.cs:65:9:73:9 | switch (...) {...} | semmle.label | break |
|
||||
| patterns.cs:65:9:73:9 | switch (...) {...} | patterns.cs:65:17:65:17 | access to local variable s | semmle.label | successor |
|
||||
| patterns.cs:65:17:65:17 | access to local variable s | patterns.cs:67:13:67:50 | case { ... }: | semmle.label | successor |
|
||||
| patterns.cs:67:13:67:50 | case { ... }: | patterns.cs:67:18:67:25 | access to type MyStruct | semmle.label | successor |
|
||||
| patterns.cs:67:18:67:25 | access to type MyStruct | patterns.cs:67:32:67:36 | Int32 x | semmle.label | match |
|
||||
| patterns.cs:67:18:67:25 | access to type MyStruct | patterns.cs:70:13:70:51 | case { ... }: | semmle.label | no-match |
|
||||
| patterns.cs:65:17:65:17 | access to local variable s | patterns.cs:67:13:67:50 | case ...: | semmle.label | successor |
|
||||
| patterns.cs:67:13:67:50 | case ...: | patterns.cs:67:32:67:36 | Int32 x | semmle.label | successor |
|
||||
| patterns.cs:67:18:67:38 | { ... } | patterns.cs:67:45:67:45 | access to local variable x | semmle.label | match |
|
||||
| patterns.cs:67:18:67:38 | { ... } | patterns.cs:70:13:70:51 | case { ... }: | semmle.label | no-match |
|
||||
| patterns.cs:67:18:67:38 | { ... } | patterns.cs:70:13:70:51 | case ...: | semmle.label | no-match |
|
||||
| patterns.cs:67:27:67:38 | { ... } | patterns.cs:67:18:67:38 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:67:32:67:36 | Int32 x | patterns.cs:67:27:67:38 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:67:45:67:45 | access to local variable x | patterns.cs:67:49:67:49 | 2 | semmle.label | successor |
|
||||
| patterns.cs:67:45:67:49 | ... > ... | patterns.cs:68:17:68:37 | ...; | semmle.label | true |
|
||||
| patterns.cs:67:45:67:49 | ... > ... | patterns.cs:70:13:70:51 | case { ... }: | semmle.label | false |
|
||||
| patterns.cs:67:45:67:49 | ... > ... | patterns.cs:70:13:70:51 | case ...: | semmle.label | false |
|
||||
| patterns.cs:67:49:67:49 | 2 | patterns.cs:67:45:67:49 | ... > ... | semmle.label | successor |
|
||||
| patterns.cs:68:17:68:36 | call to method WriteLine | patterns.cs:69:17:69:22 | break; | semmle.label | successor |
|
||||
| patterns.cs:68:17:68:37 | ...; | patterns.cs:68:35:68:35 | access to local variable x | semmle.label | successor |
|
||||
| patterns.cs:68:35:68:35 | access to local variable x | patterns.cs:68:17:68:36 | call to method WriteLine | semmle.label | successor |
|
||||
| patterns.cs:69:17:69:22 | break; | patterns.cs:76:9:84:9 | switch (...) {...} | semmle.label | break |
|
||||
| patterns.cs:70:13:70:51 | case { ... }: | patterns.cs:70:18:70:25 | access to type MyStruct | semmle.label | successor |
|
||||
| patterns.cs:70:18:70:25 | access to type MyStruct | patterns.cs:70:32:70:33 | 10 | semmle.label | match |
|
||||
| patterns.cs:70:18:70:25 | access to type MyStruct | patterns.cs:76:9:84:9 | switch (...) {...} | semmle.label | no-match |
|
||||
| patterns.cs:70:18:70:38 | MyStruct ms | patterns.cs:70:45:70:45 | access to local variable s | semmle.label | successor |
|
||||
| patterns.cs:70:18:70:38 | { ... } | patterns.cs:70:18:70:38 | MyStruct ms | semmle.label | match |
|
||||
| patterns.cs:70:13:70:51 | case ...: | patterns.cs:70:18:70:38 | MyStruct ms | semmle.label | successor |
|
||||
| patterns.cs:70:18:70:38 | MyStruct ms | patterns.cs:70:32:70:33 | 10 | semmle.label | successor |
|
||||
| patterns.cs:70:18:70:38 | { ... } | patterns.cs:70:45:70:45 | access to local variable s | semmle.label | match |
|
||||
| patterns.cs:70:18:70:38 | { ... } | patterns.cs:76:9:84:9 | switch (...) {...} | semmle.label | no-match |
|
||||
| patterns.cs:70:27:70:35 | { ... } | patterns.cs:70:18:70:38 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:70:32:70:33 | 10 | patterns.cs:70:27:70:35 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:70:45:70:45 | access to local variable s | patterns.cs:70:45:70:47 | access to field X | semmle.label | successor |
|
||||
@@ -125,51 +116,54 @@
|
||||
| patterns.cs:71:35:71:54 | "Hit the breakpoint" | patterns.cs:71:17:71:55 | call to method WriteLine | semmle.label | successor |
|
||||
| patterns.cs:72:17:72:22 | break; | patterns.cs:76:9:84:9 | switch (...) {...} | semmle.label | break |
|
||||
| patterns.cs:76:9:84:9 | switch (...) {...} | patterns.cs:76:17:76:28 | object creation of type Object | semmle.label | successor |
|
||||
| patterns.cs:76:17:76:28 | object creation of type Object | patterns.cs:78:13:78:43 | case { ... }: | semmle.label | successor |
|
||||
| patterns.cs:78:13:78:43 | case { ... }: | patterns.cs:78:19:78:23 | Int32 x | semmle.label | successor |
|
||||
| patterns.cs:76:17:76:28 | object creation of type Object | patterns.cs:78:13:78:43 | case ...: | semmle.label | successor |
|
||||
| patterns.cs:78:13:78:43 | case ...: | patterns.cs:78:19:78:23 | Int32 x | semmle.label | successor |
|
||||
| patterns.cs:78:18:78:33 | ( ... ) | patterns.cs:78:18:78:33 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:78:18:78:33 | { ... } | patterns.cs:78:40:78:40 | access to local variable x | semmle.label | match |
|
||||
| patterns.cs:78:18:78:33 | { ... } | patterns.cs:80:13:80:20 | case { ... }: | semmle.label | no-match |
|
||||
| patterns.cs:78:18:78:33 | { ... } | patterns.cs:80:13:80:20 | case ...: | semmle.label | no-match |
|
||||
| patterns.cs:78:19:78:23 | Int32 x | patterns.cs:78:26:78:32 | Single y | semmle.label | successor |
|
||||
| patterns.cs:78:26:78:32 | Single y | patterns.cs:78:18:78:33 | ( ... ) | semmle.label | successor |
|
||||
| patterns.cs:78:40:78:40 | (...) ... | patterns.cs:78:42:78:42 | access to local variable y | semmle.label | successor |
|
||||
| patterns.cs:78:40:78:40 | access to local variable x | patterns.cs:78:40:78:40 | (...) ... | semmle.label | successor |
|
||||
| patterns.cs:78:40:78:42 | ... < ... | patterns.cs:79:17:79:22 | break; | semmle.label | true |
|
||||
| patterns.cs:78:40:78:42 | ... < ... | patterns.cs:80:13:80:20 | case { ... }: | semmle.label | false |
|
||||
| patterns.cs:78:40:78:42 | ... < ... | patterns.cs:80:13:80:20 | case ...: | semmle.label | false |
|
||||
| patterns.cs:78:42:78:42 | access to local variable y | patterns.cs:78:40:78:42 | ... < ... | semmle.label | successor |
|
||||
| patterns.cs:79:17:79:22 | break; | patterns.cs:86:9:89:9 | switch (...) {...} | semmle.label | break |
|
||||
| patterns.cs:80:13:80:20 | case { ... }: | patterns.cs:80:18:80:19 | ( ... ) | semmle.label | successor |
|
||||
| patterns.cs:80:13:80:20 | case ...: | patterns.cs:80:18:80:19 | ( ... ) | semmle.label | successor |
|
||||
| patterns.cs:80:18:80:19 | ( ... ) | patterns.cs:80:18:80:19 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:80:18:80:19 | { ... } | patterns.cs:81:17:81:22 | break; | semmle.label | match |
|
||||
| patterns.cs:80:18:80:19 | { ... } | patterns.cs:82:13:82:20 | case { ... }: | semmle.label | no-match |
|
||||
| patterns.cs:80:18:80:19 | { ... } | patterns.cs:82:13:82:20 | case ...: | semmle.label | no-match |
|
||||
| patterns.cs:81:17:81:22 | break; | patterns.cs:86:9:89:9 | switch (...) {...} | semmle.label | break |
|
||||
| patterns.cs:82:13:82:20 | case { ... }: | patterns.cs:82:18:82:19 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:82:13:82:20 | case ...: | patterns.cs:82:18:82:19 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:82:18:82:19 | { ... } | patterns.cs:82:18:82:19 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:82:18:82:19 | { ... } | patterns.cs:83:17:83:22 | break; | semmle.label | match |
|
||||
| patterns.cs:82:18:82:19 | { ... } | patterns.cs:86:9:89:9 | switch (...) {...} | semmle.label | no-match |
|
||||
| patterns.cs:83:17:83:22 | break; | patterns.cs:86:9:89:9 | switch (...) {...} | semmle.label | break |
|
||||
| patterns.cs:86:9:89:9 | switch (...) {...} | patterns.cs:86:16:86:16 | 1 | semmle.label | successor |
|
||||
| patterns.cs:86:15:86:19 | (..., ...) | patterns.cs:88:13:88:24 | case { ... }: | semmle.label | successor |
|
||||
| patterns.cs:86:15:86:19 | (..., ...) | patterns.cs:88:13:88:24 | case ...: | semmle.label | successor |
|
||||
| patterns.cs:86:16:86:16 | 1 | patterns.cs:86:18:86:18 | 2 | semmle.label | successor |
|
||||
| patterns.cs:86:18:86:18 | 2 | patterns.cs:86:15:86:19 | (..., ...) | semmle.label | successor |
|
||||
| patterns.cs:88:13:88:24 | case { ... }: | patterns.cs:88:19:88:19 | 1 | semmle.label | successor |
|
||||
| patterns.cs:88:13:88:24 | case ...: | patterns.cs:88:19:88:19 | 1 | semmle.label | successor |
|
||||
| patterns.cs:88:18:88:23 | ( ... ) | patterns.cs:88:18:88:23 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:88:18:88:23 | { ... } | patterns.cs:88:26:88:31 | break; | semmle.label | match |
|
||||
| patterns.cs:88:18:88:23 | { ... } | patterns.cs:91:9:95:9 | switch (...) {...} | semmle.label | no-match |
|
||||
| patterns.cs:88:19:88:19 | 1 | patterns.cs:88:22:88:22 | 2 | semmle.label | successor |
|
||||
| patterns.cs:88:22:88:22 | 2 | patterns.cs:88:18:88:23 | ( ... ) | semmle.label | successor |
|
||||
| patterns.cs:88:26:88:31 | break; | patterns.cs:91:9:95:9 | switch (...) {...} | semmle.label | break |
|
||||
| patterns.cs:91:9:95:9 | switch (...) {...} | patterns.cs:91:17:91:17 | 1 | semmle.label | successor |
|
||||
| patterns.cs:91:16:91:20 | (..., ...) | patterns.cs:93:13:93:28 | case { ... }: | semmle.label | successor |
|
||||
| patterns.cs:91:16:91:20 | (..., ...) | patterns.cs:93:13:93:28 | case ...: | semmle.label | successor |
|
||||
| patterns.cs:91:17:91:17 | 1 | patterns.cs:91:19:91:19 | 2 | semmle.label | successor |
|
||||
| patterns.cs:91:19:91:19 | 2 | patterns.cs:91:16:91:20 | (..., ...) | semmle.label | successor |
|
||||
| patterns.cs:93:13:93:28 | case { ... }: | patterns.cs:93:19:93:19 | 1 | semmle.label | successor |
|
||||
| patterns.cs:93:13:93:28 | case ...: | patterns.cs:93:19:93:19 | 1 | semmle.label | successor |
|
||||
| patterns.cs:93:18:93:27 | ( ... ) | patterns.cs:93:18:93:27 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:93:18:93:27 | { ... } | patterns.cs:93:30:93:35 | break; | semmle.label | match |
|
||||
| patterns.cs:93:18:93:27 | { ... } | patterns.cs:94:13:94:24 | case { ... }: | semmle.label | no-match |
|
||||
| patterns.cs:93:18:93:27 | { ... } | patterns.cs:94:13:94:24 | case ...: | semmle.label | no-match |
|
||||
| patterns.cs:93:19:93:19 | 1 | patterns.cs:93:22:93:26 | Int32 x | semmle.label | successor |
|
||||
| patterns.cs:93:22:93:26 | Int32 x | patterns.cs:93:18:93:27 | ( ... ) | semmle.label | successor |
|
||||
| patterns.cs:93:30:93:35 | break; | patterns.cs:32:10:32:25 | exit SwitchStatements | semmle.label | break |
|
||||
| patterns.cs:94:13:94:24 | case { ... }: | patterns.cs:94:19:94:19 | 2 | semmle.label | successor |
|
||||
| patterns.cs:94:13:94:24 | case ...: | patterns.cs:94:19:94:19 | 2 | semmle.label | successor |
|
||||
| patterns.cs:94:18:94:23 | ( ... ) | patterns.cs:94:18:94:23 | { ... } | semmle.label | successor |
|
||||
| patterns.cs:94:18:94:23 | { ... } | patterns.cs:32:10:32:25 | exit SwitchStatements | semmle.label | no-match |
|
||||
| patterns.cs:94:18:94:23 | { ... } | patterns.cs:94:26:94:31 | break; | semmle.label | match |
|
||||
| patterns.cs:94:19:94:19 | 2 | patterns.cs:94:22:94:22 | _ | semmle.label | successor |
|
||||
| patterns.cs:94:22:94:22 | _ | patterns.cs:94:18:94:23 | ( ... ) | semmle.label | successor |
|
||||
|
||||
Reference in New Issue
Block a user