From 020ee664aa5671b2ad12f80a7fcc9586c541b06a Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 28 Apr 2026 10:45:53 +0200 Subject: [PATCH 1/8] C#: Remove unintended CP --- .../code/csharp/dataflow/internal/DataFlowPrivate.qll | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index 5b3bf5f2dae0..67901fdb4b21 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -918,8 +918,6 @@ private Gvn::GvnType getANonTypeParameterSubTypeRestricted(RelevantGvnType t) { /** A callable with an implicit `this` parameter. */ private class InstanceCallable extends Callable { - private Location l; - InstanceCallable() { not this.(Modifiable).isStatic() and // local functions and delegate capture `this` and should therefore @@ -927,8 +925,6 @@ private class InstanceCallable extends Callable { not this instanceof LocalFunction and not this instanceof AnonymousFunctionExpr } - - Location getARelevantLocation() { result = l } } /** @@ -1019,8 +1015,7 @@ private module Cached { } or TInstanceParameterNode(InstanceCallable c, Location l) { c = any(DataFlowCallable dfc).asCallable(l) and - c instanceof CallableUsedInSource and - l = c.getARelevantLocation() + c instanceof CallableUsedInSource } or TDelegateSelfReferenceNode(Callable c) { lambdaCreationExpr(_, c) } or TLocalFunctionCreationNode(ControlFlowNodes::ElementNode cfn, Boolean isPostUpdate) { From e4d5dbea1ee0bae3c5a521e341f2eb60b24a1d74 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 21 Apr 2026 13:42:33 +0200 Subject: [PATCH 2/8] C#: Add tests for methods with default parameters --- .../controlflow/graph/BasicBlock.expected | 2 + .../controlflow/graph/DefaultParam.cs | 7 ++ .../controlflow/graph/Dominance.expected | 64 +++++++++++++++++++ .../graph/EnclosingCallable.expected | 34 ++++++++++ .../controlflow/graph/EntryElement.expected | 13 ++++ .../controlflow/graph/NodeGraph.expected | 30 +++++++++ .../controlflow/graph/Nodes.expected | 1 + .../dataflow/local/DataFlowStep.expected | 2 + .../dataflow/local/LocalDataFlow.cs | 5 ++ .../dataflow/local/TaintTrackingStep.expected | 2 + .../dataflow/ssa/DefAdjacentRead.expected | 3 + .../dataflow/ssa/DefaultParam.cs | 7 ++ .../dataflow/ssa/SsaDef.expected | 3 + .../dataflow/ssa/SsaDefElement.expected | 3 + .../ssa/SsaImplicitParameterDef.expected | 3 + .../dataflow/ssa/SsaRead.expected | 3 + .../dataflow/ssa/SsaUltimateDef.expected | 3 + 17 files changed, 185 insertions(+) create mode 100644 csharp/ql/test/library-tests/controlflow/graph/DefaultParam.cs create mode 100644 csharp/ql/test/library-tests/dataflow/ssa/DefaultParam.cs diff --git a/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected b/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected index 19aa44a84477..e9a7cae7a564 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected @@ -433,6 +433,8 @@ | Conditions.cs:146:9:149:49 | After if (...) ... | Conditions.cs:143:10:143:12 | Exit | 4 | | Conditions.cs:146:13:146:13 | After access to parameter b [false] | Conditions.cs:149:13:149:49 | After ...; | 14 | | Conditions.cs:146:13:146:13 | After access to parameter b [true] | Conditions.cs:147:13:147:49 | After ...; | 14 | +| DefaultParam.cs:1:7:1:18 | Entry | DefaultParam.cs:1:7:1:18 | Exit | 11 | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:12:3:13 | Exit | 21 | | ExitMethods.cs:6:7:6:17 | Entry | ExitMethods.cs:6:7:6:17 | Exit | 11 | | ExitMethods.cs:8:10:8:11 | Entry | ExitMethods.cs:8:10:8:11 | Exit | 12 | | ExitMethods.cs:14:10:14:11 | Entry | ExitMethods.cs:14:10:14:11 | Exit | 12 | diff --git a/csharp/ql/test/library-tests/controlflow/graph/DefaultParam.cs b/csharp/ql/test/library-tests/controlflow/graph/DefaultParam.cs new file mode 100644 index 000000000000..6ef844582e58 --- /dev/null +++ b/csharp/ql/test/library-tests/controlflow/graph/DefaultParam.cs @@ -0,0 +1,7 @@ +class DefaultParam +{ + string M1(bool b, string s = "", int i = 0) + { + return b + s + i; + } +} diff --git a/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected b/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected index 127e4b61b633..f942240086ae 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected @@ -2642,6 +2642,36 @@ dominance | Conditions.cs:149:44:149:46 | Before {...} | Conditions.cs:149:45:149:45 | access to local variable s | | Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:44:149:46 | After {...} | | Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:44:149:46 | {...} | +| DefaultParam.cs:1:7:1:18 | After call to constructor Object | DefaultParam.cs:1:7:1:18 | {...} | +| DefaultParam.cs:1:7:1:18 | After call to method | DefaultParam.cs:1:7:1:18 | Before call to constructor Object | +| DefaultParam.cs:1:7:1:18 | Before call to constructor Object | DefaultParam.cs:1:7:1:18 | call to constructor Object | +| DefaultParam.cs:1:7:1:18 | Before call to method | DefaultParam.cs:1:7:1:18 | this access | +| DefaultParam.cs:1:7:1:18 | Entry | DefaultParam.cs:1:7:1:18 | Before call to method | +| DefaultParam.cs:1:7:1:18 | Normal Exit | DefaultParam.cs:1:7:1:18 | Exit | +| DefaultParam.cs:1:7:1:18 | call to constructor Object | DefaultParam.cs:1:7:1:18 | After call to constructor Object | +| DefaultParam.cs:1:7:1:18 | call to method | DefaultParam.cs:1:7:1:18 | After call to method | +| DefaultParam.cs:1:7:1:18 | this access | DefaultParam.cs:1:7:1:18 | call to method | +| DefaultParam.cs:1:7:1:18 | {...} | DefaultParam.cs:1:7:1:18 | Normal Exit | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:4:5:6:5 | {...} | +| DefaultParam.cs:3:12:3:13 | Normal Exit | DefaultParam.cs:3:12:3:13 | Exit | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:5:9:5:25 | Before return ...; | +| DefaultParam.cs:5:9:5:25 | Before return ...; | DefaultParam.cs:5:16:5:24 | Before ... + ... | +| DefaultParam.cs:5:9:5:25 | return ...; | DefaultParam.cs:3:12:3:13 | Normal Exit | +| DefaultParam.cs:5:16:5:16 | (...) ... | DefaultParam.cs:5:16:5:16 | After (...) ... | +| DefaultParam.cs:5:16:5:16 | After (...) ... | DefaultParam.cs:5:20:5:20 | access to parameter s | +| DefaultParam.cs:5:16:5:16 | Before (...) ... | DefaultParam.cs:5:16:5:16 | access to parameter b | +| DefaultParam.cs:5:16:5:16 | access to parameter b | DefaultParam.cs:5:16:5:16 | (...) ... | +| DefaultParam.cs:5:16:5:20 | ... + ... | DefaultParam.cs:5:16:5:20 | After ... + ... | +| DefaultParam.cs:5:16:5:20 | After ... + ... | DefaultParam.cs:5:24:5:24 | Before (...) ... | +| DefaultParam.cs:5:16:5:20 | Before ... + ... | DefaultParam.cs:5:16:5:16 | Before (...) ... | +| DefaultParam.cs:5:16:5:24 | ... + ... | DefaultParam.cs:5:16:5:24 | After ... + ... | +| DefaultParam.cs:5:16:5:24 | After ... + ... | DefaultParam.cs:5:9:5:25 | return ...; | +| DefaultParam.cs:5:16:5:24 | Before ... + ... | DefaultParam.cs:5:16:5:20 | Before ... + ... | +| DefaultParam.cs:5:20:5:20 | access to parameter s | DefaultParam.cs:5:16:5:20 | ... + ... | +| DefaultParam.cs:5:24:5:24 | (...) ... | DefaultParam.cs:5:24:5:24 | After (...) ... | +| DefaultParam.cs:5:24:5:24 | After (...) ... | DefaultParam.cs:5:16:5:24 | ... + ... | +| DefaultParam.cs:5:24:5:24 | Before (...) ... | DefaultParam.cs:5:24:5:24 | access to parameter i | +| DefaultParam.cs:5:24:5:24 | access to parameter i | DefaultParam.cs:5:24:5:24 | (...) ... | | ExitMethods.cs:6:7:6:17 | After call to constructor Object | ExitMethods.cs:6:7:6:17 | {...} | | ExitMethods.cs:6:7:6:17 | After call to method | ExitMethods.cs:6:7:6:17 | Before call to constructor Object | | ExitMethods.cs:6:7:6:17 | Before call to constructor Object | ExitMethods.cs:6:7:6:17 | call to constructor Object | @@ -10119,6 +10149,36 @@ postDominance | Conditions.cs:149:44:149:46 | Before {...} | Conditions.cs:149:40:149:43 | "b = " | | Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:45:149:45 | access to local variable s | | Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:44:149:46 | Before {...} | +| DefaultParam.cs:1:7:1:18 | After call to constructor Object | DefaultParam.cs:1:7:1:18 | call to constructor Object | +| DefaultParam.cs:1:7:1:18 | After call to method | DefaultParam.cs:1:7:1:18 | call to method | +| DefaultParam.cs:1:7:1:18 | Before call to constructor Object | DefaultParam.cs:1:7:1:18 | After call to method | +| DefaultParam.cs:1:7:1:18 | Before call to method | DefaultParam.cs:1:7:1:18 | Entry | +| DefaultParam.cs:1:7:1:18 | Exit | DefaultParam.cs:1:7:1:18 | Normal Exit | +| DefaultParam.cs:1:7:1:18 | Normal Exit | DefaultParam.cs:1:7:1:18 | {...} | +| DefaultParam.cs:1:7:1:18 | call to constructor Object | DefaultParam.cs:1:7:1:18 | Before call to constructor Object | +| DefaultParam.cs:1:7:1:18 | call to method | DefaultParam.cs:1:7:1:18 | this access | +| DefaultParam.cs:1:7:1:18 | this access | DefaultParam.cs:1:7:1:18 | Before call to method | +| DefaultParam.cs:1:7:1:18 | {...} | DefaultParam.cs:1:7:1:18 | After call to constructor Object | +| DefaultParam.cs:3:12:3:13 | Exit | DefaultParam.cs:3:12:3:13 | Normal Exit | +| DefaultParam.cs:3:12:3:13 | Normal Exit | DefaultParam.cs:5:9:5:25 | return ...; | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:3:12:3:13 | Entry | +| DefaultParam.cs:5:9:5:25 | Before return ...; | DefaultParam.cs:4:5:6:5 | {...} | +| DefaultParam.cs:5:9:5:25 | return ...; | DefaultParam.cs:5:16:5:24 | After ... + ... | +| DefaultParam.cs:5:16:5:16 | (...) ... | DefaultParam.cs:5:16:5:16 | access to parameter b | +| DefaultParam.cs:5:16:5:16 | After (...) ... | DefaultParam.cs:5:16:5:16 | (...) ... | +| DefaultParam.cs:5:16:5:16 | Before (...) ... | DefaultParam.cs:5:16:5:20 | Before ... + ... | +| DefaultParam.cs:5:16:5:16 | access to parameter b | DefaultParam.cs:5:16:5:16 | Before (...) ... | +| DefaultParam.cs:5:16:5:20 | ... + ... | DefaultParam.cs:5:20:5:20 | access to parameter s | +| DefaultParam.cs:5:16:5:20 | After ... + ... | DefaultParam.cs:5:16:5:20 | ... + ... | +| DefaultParam.cs:5:16:5:20 | Before ... + ... | DefaultParam.cs:5:16:5:24 | Before ... + ... | +| DefaultParam.cs:5:16:5:24 | ... + ... | DefaultParam.cs:5:24:5:24 | After (...) ... | +| DefaultParam.cs:5:16:5:24 | After ... + ... | DefaultParam.cs:5:16:5:24 | ... + ... | +| DefaultParam.cs:5:16:5:24 | Before ... + ... | DefaultParam.cs:5:9:5:25 | Before return ...; | +| DefaultParam.cs:5:20:5:20 | access to parameter s | DefaultParam.cs:5:16:5:16 | After (...) ... | +| DefaultParam.cs:5:24:5:24 | (...) ... | DefaultParam.cs:5:24:5:24 | access to parameter i | +| DefaultParam.cs:5:24:5:24 | After (...) ... | DefaultParam.cs:5:24:5:24 | (...) ... | +| DefaultParam.cs:5:24:5:24 | Before (...) ... | DefaultParam.cs:5:16:5:20 | After ... + ... | +| DefaultParam.cs:5:24:5:24 | access to parameter i | DefaultParam.cs:5:24:5:24 | Before (...) ... | | ExitMethods.cs:6:7:6:17 | After call to constructor Object | ExitMethods.cs:6:7:6:17 | call to constructor Object | | ExitMethods.cs:6:7:6:17 | After call to method | ExitMethods.cs:6:7:6:17 | call to method | | ExitMethods.cs:6:7:6:17 | Before call to constructor Object | ExitMethods.cs:6:7:6:17 | After call to method | @@ -16742,6 +16802,8 @@ blockDominance | Conditions.cs:146:9:149:49 | After if (...) ... | Conditions.cs:146:9:149:49 | After if (...) ... | | Conditions.cs:146:13:146:13 | After access to parameter b [false] | Conditions.cs:146:13:146:13 | After access to parameter b [false] | | Conditions.cs:146:13:146:13 | After access to parameter b [true] | Conditions.cs:146:13:146:13 | After access to parameter b [true] | +| DefaultParam.cs:1:7:1:18 | Entry | DefaultParam.cs:1:7:1:18 | Entry | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:12:3:13 | Entry | | ExitMethods.cs:6:7:6:17 | Entry | ExitMethods.cs:6:7:6:17 | Entry | | ExitMethods.cs:8:10:8:11 | Entry | ExitMethods.cs:8:10:8:11 | Entry | | ExitMethods.cs:14:10:14:11 | Entry | ExitMethods.cs:14:10:14:11 | Entry | @@ -20977,6 +21039,8 @@ postBlockDominance | Conditions.cs:146:9:149:49 | After if (...) ... | Conditions.cs:146:13:146:13 | After access to parameter b [true] | | Conditions.cs:146:13:146:13 | After access to parameter b [false] | Conditions.cs:146:13:146:13 | After access to parameter b [false] | | Conditions.cs:146:13:146:13 | After access to parameter b [true] | Conditions.cs:146:13:146:13 | After access to parameter b [true] | +| DefaultParam.cs:1:7:1:18 | Entry | DefaultParam.cs:1:7:1:18 | Entry | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:12:3:13 | Entry | | ExitMethods.cs:6:7:6:17 | Entry | ExitMethods.cs:6:7:6:17 | Entry | | ExitMethods.cs:8:10:8:11 | Entry | ExitMethods.cs:8:10:8:11 | Entry | | ExitMethods.cs:14:10:14:11 | Entry | ExitMethods.cs:14:10:14:11 | Entry | diff --git a/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected b/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected index 34f56adc0295..2df18eac6cb5 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected @@ -2829,6 +2829,38 @@ nodeEnclosing | Conditions.cs:149:44:149:46 | Before {...} | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:149:44:149:46 | {...} | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:143:10:143:12 | M11 | +| DefaultParam.cs:1:7:1:18 | After call to constructor Object | DefaultParam.cs:1:7:1:18 | DefaultParam | +| DefaultParam.cs:1:7:1:18 | After call to method | DefaultParam.cs:1:7:1:18 | DefaultParam | +| DefaultParam.cs:1:7:1:18 | Before call to constructor Object | DefaultParam.cs:1:7:1:18 | DefaultParam | +| DefaultParam.cs:1:7:1:18 | Before call to method | DefaultParam.cs:1:7:1:18 | DefaultParam | +| DefaultParam.cs:1:7:1:18 | Entry | DefaultParam.cs:1:7:1:18 | DefaultParam | +| DefaultParam.cs:1:7:1:18 | Exit | DefaultParam.cs:1:7:1:18 | DefaultParam | +| DefaultParam.cs:1:7:1:18 | Normal Exit | DefaultParam.cs:1:7:1:18 | DefaultParam | +| DefaultParam.cs:1:7:1:18 | call to constructor Object | DefaultParam.cs:1:7:1:18 | DefaultParam | +| DefaultParam.cs:1:7:1:18 | call to method | DefaultParam.cs:1:7:1:18 | DefaultParam | +| DefaultParam.cs:1:7:1:18 | this access | DefaultParam.cs:1:7:1:18 | DefaultParam | +| DefaultParam.cs:1:7:1:18 | {...} | DefaultParam.cs:1:7:1:18 | DefaultParam | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:3:12:3:13 | Exit | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:3:12:3:13 | Normal Exit | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:9:5:25 | Before return ...; | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:9:5:25 | return ...; | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:16:5:16 | (...) ... | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:16:5:16 | After (...) ... | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:16:5:16 | Before (...) ... | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:16:5:16 | access to parameter b | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:16:5:20 | ... + ... | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:16:5:20 | After ... + ... | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:16:5:20 | Before ... + ... | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:16:5:24 | ... + ... | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:16:5:24 | After ... + ... | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:16:5:24 | Before ... + ... | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:20:5:20 | access to parameter s | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:24:5:24 | (...) ... | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:24:5:24 | After (...) ... | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:24:5:24 | Before (...) ... | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:5:24:5:24 | access to parameter i | DefaultParam.cs:3:12:3:13 | M1 | | ExitMethods.cs:6:7:6:17 | After call to constructor Object | ExitMethods.cs:6:7:6:17 | ExitMethods | | ExitMethods.cs:6:7:6:17 | After call to method | ExitMethods.cs:6:7:6:17 | ExitMethods | | ExitMethods.cs:6:7:6:17 | Before call to constructor Object | ExitMethods.cs:6:7:6:17 | ExitMethods | @@ -8487,6 +8519,8 @@ blockEnclosing | Conditions.cs:146:9:149:49 | After if (...) ... | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:146:13:146:13 | After access to parameter b [false] | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:146:13:146:13 | After access to parameter b [true] | Conditions.cs:143:10:143:12 | M11 | +| DefaultParam.cs:1:7:1:18 | Entry | DefaultParam.cs:1:7:1:18 | DefaultParam | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:12:3:13 | M1 | | ExitMethods.cs:6:7:6:17 | Entry | ExitMethods.cs:6:7:6:17 | ExitMethods | | ExitMethods.cs:8:10:8:11 | Entry | ExitMethods.cs:8:10:8:11 | M1 | | ExitMethods.cs:14:10:14:11 | Entry | ExitMethods.cs:14:10:14:11 | M2 | diff --git a/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected b/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected index ea8c1df43634..4451a8fb1aa7 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected @@ -1271,6 +1271,19 @@ | Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:149:40:149:43 | "b = " | | Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:45:149:45 | access to local variable s | | Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:45:149:45 | access to local variable s | +| DefaultParam.cs:1:7:1:18 | call to constructor Object | DefaultParam.cs:1:7:1:18 | call to constructor Object | +| DefaultParam.cs:1:7:1:18 | call to method | DefaultParam.cs:1:7:1:18 | this access | +| DefaultParam.cs:1:7:1:18 | this access | DefaultParam.cs:1:7:1:18 | this access | +| DefaultParam.cs:1:7:1:18 | {...} | DefaultParam.cs:1:7:1:18 | {...} | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:4:5:6:5 | {...} | +| DefaultParam.cs:5:9:5:25 | return ...; | DefaultParam.cs:5:16:5:16 | access to parameter b | +| DefaultParam.cs:5:16:5:16 | (...) ... | DefaultParam.cs:5:16:5:16 | access to parameter b | +| DefaultParam.cs:5:16:5:16 | access to parameter b | DefaultParam.cs:5:16:5:16 | access to parameter b | +| DefaultParam.cs:5:16:5:20 | ... + ... | DefaultParam.cs:5:16:5:16 | access to parameter b | +| DefaultParam.cs:5:16:5:24 | ... + ... | DefaultParam.cs:5:16:5:16 | access to parameter b | +| DefaultParam.cs:5:20:5:20 | access to parameter s | DefaultParam.cs:5:20:5:20 | access to parameter s | +| DefaultParam.cs:5:24:5:24 | (...) ... | DefaultParam.cs:5:24:5:24 | access to parameter i | +| DefaultParam.cs:5:24:5:24 | access to parameter i | DefaultParam.cs:5:24:5:24 | access to parameter i | | ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | call to constructor Object | | ExitMethods.cs:6:7:6:17 | call to method | ExitMethods.cs:6:7:6:17 | this access | | ExitMethods.cs:6:7:6:17 | this access | ExitMethods.cs:6:7:6:17 | this access | diff --git a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected index f555d3a24e27..7c138f5c38fc 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected @@ -2882,6 +2882,36 @@ | Conditions.cs:149:44:149:46 | Before {...} | Conditions.cs:149:45:149:45 | access to local variable s | | | Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:44:149:46 | After {...} | | | Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:44:149:46 | {...} | | +| DefaultParam.cs:1:7:1:18 | After call to constructor Object | DefaultParam.cs:1:7:1:18 | {...} | | +| DefaultParam.cs:1:7:1:18 | After call to method | DefaultParam.cs:1:7:1:18 | Before call to constructor Object | | +| DefaultParam.cs:1:7:1:18 | Before call to constructor Object | DefaultParam.cs:1:7:1:18 | call to constructor Object | | +| DefaultParam.cs:1:7:1:18 | Before call to method | DefaultParam.cs:1:7:1:18 | this access | | +| DefaultParam.cs:1:7:1:18 | Entry | DefaultParam.cs:1:7:1:18 | Before call to method | | +| DefaultParam.cs:1:7:1:18 | Normal Exit | DefaultParam.cs:1:7:1:18 | Exit | | +| DefaultParam.cs:1:7:1:18 | call to constructor Object | DefaultParam.cs:1:7:1:18 | After call to constructor Object | | +| DefaultParam.cs:1:7:1:18 | call to method | DefaultParam.cs:1:7:1:18 | After call to method | | +| DefaultParam.cs:1:7:1:18 | this access | DefaultParam.cs:1:7:1:18 | call to method | | +| DefaultParam.cs:1:7:1:18 | {...} | DefaultParam.cs:1:7:1:18 | Normal Exit | | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:4:5:6:5 | {...} | | +| DefaultParam.cs:3:12:3:13 | Normal Exit | DefaultParam.cs:3:12:3:13 | Exit | | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:5:9:5:25 | Before return ...; | | +| DefaultParam.cs:5:9:5:25 | Before return ...; | DefaultParam.cs:5:16:5:24 | Before ... + ... | | +| DefaultParam.cs:5:9:5:25 | return ...; | DefaultParam.cs:3:12:3:13 | Normal Exit | return | +| DefaultParam.cs:5:16:5:16 | (...) ... | DefaultParam.cs:5:16:5:16 | After (...) ... | | +| DefaultParam.cs:5:16:5:16 | After (...) ... | DefaultParam.cs:5:20:5:20 | access to parameter s | | +| DefaultParam.cs:5:16:5:16 | Before (...) ... | DefaultParam.cs:5:16:5:16 | access to parameter b | | +| DefaultParam.cs:5:16:5:16 | access to parameter b | DefaultParam.cs:5:16:5:16 | (...) ... | | +| DefaultParam.cs:5:16:5:20 | ... + ... | DefaultParam.cs:5:16:5:20 | After ... + ... | | +| DefaultParam.cs:5:16:5:20 | After ... + ... | DefaultParam.cs:5:24:5:24 | Before (...) ... | | +| DefaultParam.cs:5:16:5:20 | Before ... + ... | DefaultParam.cs:5:16:5:16 | Before (...) ... | | +| DefaultParam.cs:5:16:5:24 | ... + ... | DefaultParam.cs:5:16:5:24 | After ... + ... | | +| DefaultParam.cs:5:16:5:24 | After ... + ... | DefaultParam.cs:5:9:5:25 | return ...; | | +| DefaultParam.cs:5:16:5:24 | Before ... + ... | DefaultParam.cs:5:16:5:20 | Before ... + ... | | +| DefaultParam.cs:5:20:5:20 | access to parameter s | DefaultParam.cs:5:16:5:20 | ... + ... | | +| DefaultParam.cs:5:24:5:24 | (...) ... | DefaultParam.cs:5:24:5:24 | After (...) ... | | +| DefaultParam.cs:5:24:5:24 | After (...) ... | DefaultParam.cs:5:16:5:24 | ... + ... | | +| DefaultParam.cs:5:24:5:24 | Before (...) ... | DefaultParam.cs:5:24:5:24 | access to parameter i | | +| DefaultParam.cs:5:24:5:24 | access to parameter i | DefaultParam.cs:5:24:5:24 | (...) ... | | | ExitMethods.cs:6:7:6:17 | After call to constructor Object | ExitMethods.cs:6:7:6:17 | {...} | | | ExitMethods.cs:6:7:6:17 | After call to method | ExitMethods.cs:6:7:6:17 | Before call to constructor Object | | | ExitMethods.cs:6:7:6:17 | Before call to constructor Object | ExitMethods.cs:6:7:6:17 | call to constructor Object | | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected b/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected index 896b4cb0613c..f64038d21588 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected @@ -59,6 +59,7 @@ | Conditions.cs:113:10:113:11 | M9 | Conditions.cs:114:5:124:5 | {...} | | Conditions.cs:129:10:129:12 | M10 | Conditions.cs:130:5:141:5 | {...} | | Conditions.cs:143:10:143:12 | M11 | Conditions.cs:144:5:150:5 | {...} | +| DefaultParam.cs:3:12:3:13 | M1 | DefaultParam.cs:4:5:6:5 | {...} | | ExitMethods.cs:8:10:8:11 | M1 | ExitMethods.cs:9:5:12:5 | {...} | | ExitMethods.cs:14:10:14:11 | M2 | ExitMethods.cs:15:5:18:5 | {...} | | ExitMethods.cs:20:10:20:11 | M3 | ExitMethods.cs:21:5:24:5 | {...} | diff --git a/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected index 8dcf5e1778cc..a22e56b0dd82 100644 --- a/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -527,6 +527,8 @@ | LocalDataFlow.cs:381:13:381:13 | access to local variable x | LocalDataFlow.cs:381:13:381:29 | SSA def(x) | | LocalDataFlow.cs:381:13:381:29 | SSA def(x) | LocalDataFlow.cs:382:15:382:15 | access to local variable x | | LocalDataFlow.cs:381:17:381:29 | "not tainted" | LocalDataFlow.cs:381:13:381:13 | access to local variable x | +| LocalDataFlow.cs:385:34:385:34 | SSA param(s) | LocalDataFlow.cs:387:15:387:15 | access to parameter s | +| LocalDataFlow.cs:385:34:385:34 | s | LocalDataFlow.cs:385:34:385:34 | SSA param(s) | | SSA.cs:3:14:3:16 | this | SSA.cs:3:14:3:16 | this access | | SSA.cs:5:17:5:17 | SSA entry def(this.S) | SSA.cs:67:9:67:14 | access to field S | | SSA.cs:5:17:5:17 | this | SSA.cs:67:9:67:12 | this access | diff --git a/csharp/ql/test/library-tests/dataflow/local/LocalDataFlow.cs b/csharp/ql/test/library-tests/dataflow/local/LocalDataFlow.cs index 53b6165dd754..34f471e522fe 100644 --- a/csharp/ql/test/library-tests/dataflow/local/LocalDataFlow.cs +++ b/csharp/ql/test/library-tests/dataflow/local/LocalDataFlow.cs @@ -381,4 +381,9 @@ void PhiFlow(bool b1, bool b2) x = "not tainted"; Check(x); } + + void DefaultParamFlow(string s = "taint source") + { + Check(s); + } } diff --git a/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected b/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected index 56621390ff31..87cd14bd25b2 100644 --- a/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected +++ b/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected @@ -639,6 +639,8 @@ | LocalDataFlow.cs:381:13:381:13 | access to local variable x | LocalDataFlow.cs:381:13:381:29 | SSA def(x) | | LocalDataFlow.cs:381:13:381:29 | SSA def(x) | LocalDataFlow.cs:382:15:382:15 | access to local variable x | | LocalDataFlow.cs:381:17:381:29 | "not tainted" | LocalDataFlow.cs:381:13:381:13 | access to local variable x | +| LocalDataFlow.cs:385:34:385:34 | SSA param(s) | LocalDataFlow.cs:387:15:387:15 | access to parameter s | +| LocalDataFlow.cs:385:34:385:34 | s | LocalDataFlow.cs:385:34:385:34 | SSA param(s) | | SSA.cs:3:14:3:16 | this | SSA.cs:3:14:3:16 | this access | | SSA.cs:5:17:5:17 | SSA entry def(this.S) | SSA.cs:67:9:67:14 | access to field S | | SSA.cs:5:17:5:17 | this | SSA.cs:67:9:67:12 | this access | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/DefAdjacentRead.expected b/csharp/ql/test/library-tests/dataflow/ssa/DefAdjacentRead.expected index 9246392b6621..a6833b789f78 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/DefAdjacentRead.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/DefAdjacentRead.expected @@ -61,6 +61,9 @@ | DefUse.cs:166:9:166:14 | Field5 | DefUse.cs:188:13:188:22 | ... = ... | DefUse.cs:189:17:189:22 | access to field Field5 | | DefUse.cs:171:23:171:23 | a | DefUse.cs:171:23:180:9 | Action a = ... | DefUse.cs:181:9:181:9 | access to local variable a | | DefUse.cs:171:23:171:23 | a | DefUse.cs:186:9:190:9 | ... = ... | DefUse.cs:191:9:191:9 | access to local variable a | +| DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:5:16:5:16 | access to parameter b | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:5:20:5:20 | access to parameter s | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:5:24:5:24 | access to parameter i | | Example.cs:4:9:4:13 | Field | Example.cs:8:9:8:22 | ... = ... | Example.cs:9:13:9:22 | access to field Field | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | i | Example.cs:8:22:8:22 | access to parameter i | | Example.cs:18:16:18:16 | p | Example.cs:18:16:18:16 | p | Example.cs:22:17:22:17 | access to parameter p | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/DefaultParam.cs b/csharp/ql/test/library-tests/dataflow/ssa/DefaultParam.cs new file mode 100644 index 000000000000..6ef844582e58 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/ssa/DefaultParam.cs @@ -0,0 +1,7 @@ +class DefaultParam +{ + string M1(bool b, string s = "", int i = 0) + { + return b + s + i; + } +} diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected index 9fe8df76f181..8f4af9a3aac2 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected @@ -93,6 +93,9 @@ | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:184:9:184:18 | SSA def(this.Field5) | | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | | DefUse.cs:188:13:188:18 | this.Field5 | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | +| DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:3:20:3:20 | SSA param(b) | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:30:3:30 | SSA param(s) | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | SSA param(i) | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | | Example.cs:8:9:8:18 | this.Field | Example.cs:8:9:8:22 | SSA def(this.Field) | | Example.cs:8:9:8:18 | this.Field | Example.cs:10:9:13:24 | SSA phi(this.Field) | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected index 874b9aecfb52..d0e2984050d1 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected @@ -88,6 +88,9 @@ | DefUse.cs:186:9:190:9 | SSA def(a) | DefUse.cs:186:9:190:9 | ... = ... | | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | DefUse.cs:188:13:188:22 | ... = ... | | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | DefUse.cs:191:9:191:11 | delegate call | +| DefaultParam.cs:3:20:3:20 | SSA param(b) | DefaultParam.cs:3:20:3:20 | b | +| DefaultParam.cs:3:30:3:30 | SSA param(s) | DefaultParam.cs:3:30:3:30 | s | +| DefaultParam.cs:3:42:3:42 | SSA param(i) | DefaultParam.cs:3:42:3:42 | i | | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:6:23:6:23 | i | | Example.cs:8:9:8:22 | SSA def(this.Field) | Example.cs:8:9:8:22 | ... = ... | | Example.cs:11:13:11:30 | SSA def(this.Field) | Example.cs:11:13:11:30 | ... = ... | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitParameterDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitParameterDef.expected index 3ba88d1dd175..db7e7e4ae223 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitParameterDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitParameterDef.expected @@ -15,6 +15,9 @@ | DefUse.cs:128:19:128:19 | i | DefUse.cs:128:19:128:19 | SSA param(i) | DefUse.cs:128:19:128:19 | i | | DefUse.cs:134:22:134:22 | d | DefUse.cs:134:22:134:22 | SSA param(d) | DefUse.cs:134:22:134:22 | d | | DefUse.cs:142:68:142:69 | ie | DefUse.cs:142:68:142:69 | SSA param(ie) | DefUse.cs:142:68:142:69 | ie | +| DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:3:20:3:20 | SSA param(b) | DefaultParam.cs:3:20:3:20 | b | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:30:3:30 | SSA param(s) | DefaultParam.cs:3:30:3:30 | s | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | SSA param(i) | DefaultParam.cs:3:42:3:42 | i | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:6:23:6:23 | i | | Example.cs:18:16:18:16 | p | Example.cs:18:16:18:16 | SSA param(p) | Example.cs:18:16:18:16 | p | | Example.cs:18:24:18:24 | b | Example.cs:18:24:18:24 | SSA param(b) | Example.cs:18:24:18:24 | b | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected index 625ce3c79a35..96ae63b34fb6 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected @@ -99,6 +99,9 @@ | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:184:9:184:18 | SSA def(this.Field5) | DefUse.cs:185:13:185:18 | access to field Field5 | | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | DefUse.cs:192:13:192:18 | access to field Field5 | | DefUse.cs:188:13:188:18 | this.Field5 | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | DefUse.cs:189:17:189:22 | access to field Field5 | +| DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:3:20:3:20 | SSA param(b) | DefaultParam.cs:5:16:5:16 | access to parameter b | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:30:3:30 | SSA param(s) | DefaultParam.cs:5:20:5:20 | access to parameter s | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | SSA param(i) | DefaultParam.cs:5:24:5:24 | access to parameter i | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:8:22:8:22 | access to parameter i | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:10:13:10:13 | access to parameter i | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:11:26:11:26 | access to parameter i | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected index 75ad81d4ef1a..c3ccef11a447 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected @@ -99,6 +99,9 @@ | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | DefUse.cs:184:9:184:18 | SSA def(this.Field5) | | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | | DefUse.cs:188:13:188:18 | this.Field5 | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | +| DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:3:20:3:20 | SSA param(b) | DefaultParam.cs:3:20:3:20 | SSA param(b) | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:30:3:30 | SSA param(s) | DefaultParam.cs:3:30:3:30 | SSA param(s) | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | SSA param(i) | DefaultParam.cs:3:42:3:42 | SSA param(i) | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:6:23:6:23 | SSA param(i) | | Example.cs:8:9:8:18 | this.Field | Example.cs:8:9:8:22 | SSA def(this.Field) | Example.cs:8:9:8:22 | SSA def(this.Field) | | Example.cs:8:9:8:18 | this.Field | Example.cs:10:9:13:24 | SSA phi(this.Field) | Example.cs:8:9:8:22 | SSA def(this.Field) | From 91750e828b711fd2f91d59ca5bc4a3444e1a2c7a Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 28 Apr 2026 10:45:47 +0200 Subject: [PATCH 3/8] C#: Include parameters and their defaults in the CFG --- csharp/ql/lib/printCfg.ql | 4 +- .../semmle/code/csharp/ExprOrStmtParent.qll | 10 +- csharp/ql/lib/semmle/code/csharp/PrintAst.qll | 4 +- csharp/ql/lib/semmle/code/csharp/Variable.qll | 4 +- .../csharp/controlflow/ControlFlowGraph.qll | 59 +- .../dataflow/internal/DataFlowPrivate.qll | 44 +- .../code/csharp/dataflow/internal/SsaImpl.qll | 35 +- csharp/ql/lib/semmlecode.csharp.dbscheme | 2 +- .../controlflow/graph/BasicBlock.expected | 302 ++--- .../controlflow/graph/Condition.expected | 4 + .../controlflow/graph/Dominance.expected | 1020 ++++++++++++----- .../graph/EnclosingCallable.expected | 202 ++++ .../controlflow/graph/EntryElement.expected | 192 ++++ .../controlflow/graph/NodeGraph.expected | 508 +++++--- .../controlflow/graph/Nodes.expected | 279 ++--- .../csharp8/switchexprcontrolflow.expected | 6 +- .../dataflow/defuse/defUseEquivalence.ql | 7 +- .../test/library-tests/obinit/ObInit.expected | 37 +- .../codeql/controlflow/ControlFlowGraph.qll | 137 ++- 19 files changed, 2032 insertions(+), 824 deletions(-) diff --git a/csharp/ql/lib/printCfg.ql b/csharp/ql/lib/printCfg.ql index c418446b2164..c80b9b84ee05 100644 --- a/csharp/ql/lib/printCfg.ql +++ b/csharp/ql/lib/printCfg.ql @@ -22,6 +22,8 @@ external int selectedSourceColumn(); private predicate selectedSourceColumnAlias = selectedSourceColumn/0; module ViewCfgQueryInput implements ControlFlow::ViewCfgQueryInputSig { + private import semmle.code.csharp.controlflow.ControlFlowGraph + predicate selectedSourceFile = selectedSourceFileAlias/0; predicate selectedSourceLine = selectedSourceLineAlias/0; @@ -29,7 +31,7 @@ module ViewCfgQueryInput implements ControlFlow::ViewCfgQueryInputSig { predicate selectedSourceColumn = selectedSourceColumnAlias/0; predicate cfgScopeSpan( - Callable scope, File file, int startLine, int startColumn, int endLine, int endColumn + Ast::Callable scope, File file, int startLine, int startColumn, int endLine, int endColumn ) { file = scope.getFile() and scope.getLocation().getStartLine() = startLine and diff --git a/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll b/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll index 1aa558194e3a..2cf09707459d 100644 --- a/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll +++ b/csharp/ql/lib/semmle/code/csharp/ExprOrStmtParent.qll @@ -13,7 +13,7 @@ private import internal.Location * An element that can have a child statement or expression. */ class ExprOrStmtParent extends Element, @exprorstmt_parent { - final override ControlFlowElement getChild(int i) { + override ControlFlowElement getChild(int i) { result = this.getChildExpr(i) or result = this.getChildStmt(i) } @@ -42,14 +42,8 @@ class ExprOrStmtParent extends Element, @exprorstmt_parent { * * An element that can have a child top-level expression. */ -class TopLevelExprParent extends Element, @top_level_expr_parent { +class TopLevelExprParent extends ExprOrStmtParent, @top_level_expr_parent { final override Expr getChild(int i) { result = this.getChildExpr(i) } - - /** Gets the `i`th child expression of this element (zero-based). */ - final Expr getChildExpr(int i) { expr_parent_top_level_adjusted(result, i, this) } - - /** Gets a child expression of this element, if any. */ - final Expr getAChildExpr() { result = this.getChildExpr(_) } } /** INTERNAL: Do not use. */ diff --git a/csharp/ql/lib/semmle/code/csharp/PrintAst.qll b/csharp/ql/lib/semmle/code/csharp/PrintAst.qll index 1fab6b0f8c45..3b328c8393e6 100644 --- a/csharp/ql/lib/semmle/code/csharp/PrintAst.qll +++ b/csharp/ql/lib/semmle/code/csharp/PrintAst.qll @@ -299,7 +299,9 @@ class ControlFlowElementNode extends ElementNode { not isNotNeeded(element.getParent+()) and // LambdaExpr is both a Callable and a ControlFlowElement, // print it with the more specific CallableNode - not element instanceof Callable + not element instanceof Callable and + // Handled in `ParameterNode` + not element instanceof Parameter } override PrintAstNode getChild(int childIndex) { diff --git a/csharp/ql/lib/semmle/code/csharp/Variable.qll b/csharp/ql/lib/semmle/code/csharp/Variable.qll index 6d59816373d2..2d4cf578436d 100644 --- a/csharp/ql/lib/semmle/code/csharp/Variable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Variable.qll @@ -87,7 +87,9 @@ class LocalScopeVariable extends Variable, @local_scope_variable { * } * ``` */ -class Parameter extends LocalScopeVariable, Attributable, TopLevelExprParent, @parameter { +class Parameter extends LocalScopeVariable, Attributable, TopLevelExprParent, ControlFlowElement, + @parameter +{ /** Gets the raw position of this parameter, including the `this` parameter at index 0. */ final int getRawPosition() { this = this.getDeclaringElement().getRawParameter(result) } diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowGraph.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowGraph.qll index 09f65034f6d6..f2ed17187150 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowGraph.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowGraph.qll @@ -19,8 +19,12 @@ private import Cfg1 private import Cfg2 import Public -/** Provides an implementation of the AST signature for C#. */ -private module Ast implements AstSig { +/** + * INTERNAL: Do not use. + * + * Provides an implementation of the AST signature for C#. + */ +module Ast implements AstSig { private import csharp as CS class AstNode = ControlFlowElementOrCallable; @@ -73,18 +77,41 @@ private module Ast implements AstSig { private AstNode getParent(AstNode n) { n = getChild(result, _) } Callable getEnclosingCallable(AstNode node) { - result = node.(ControlFlowElement).getEnclosingCallable() or - result.(ObjectInitMethod).initializes(getParent*(node)) or + result = node.(ControlFlowElement).getEnclosingCallable() + or + result.(ObjectInitMethod).initializes(getParent*(node)) + or Initializers::staticMemberInitializer(result, getParent*(node)) + or + result = node.(Parameter).getCallable() + or + not skipControlFlow(node) and + getParent*(node) = any(Parameter p | result = p.getCallable()).getDefaultValue() } - class Callable = CS::Callable; + class Callable extends CS::Callable { + Callable() { this.isUnboundDeclaration() } + } AstNode callableGetBody(Callable c) { not skipControlFlow(result) and result = c.getBody() } + final private class ParameterFinal = CS::Parameter; + + class Parameter extends ParameterFinal { + Expr getDefaultValue() { + // Avoid combinatorial explosions for callables with multiple bodies + result = unique( | | super.getDefaultValue()) + } + } + + Parameter callableGetParameter(Callable c, int i) { + not skipControlFlow(result) and + result = c.getParameter(i) + } + class Stmt = CS::Stmt; class Expr = CS::Expr; @@ -232,9 +259,11 @@ private class CompilationExt extends TCompilationExt { } /** Gets the compilation that source file `f` belongs to. */ -private CompilationExt getCompilation(File f) { +bindingset[e] +pragma[inline_late] +private CompilationExt getCompilation(Element e) { exists(Compilation c | - f = c.getAFileCompiled() and + e.getALocation().getFile() = c.getAFileCompiled() and result = TCompilation(c) ) or @@ -415,12 +444,12 @@ private module Input implements InputSig1, InputSig2 { l = TLblGoto(n.(LabelStmt).getLabel()) } - class CallableBodyPartContext = CompilationExt; + class CallableContext = CompilationExt; pragma[nomagic] - Ast::AstNode callableGetBodyPart(Callable c, CallableBodyPartContext ctx, int index) { + Ast::AstNode callableGetBodyPart(Ast::Callable c, CallableContext ctx, int index) { not Ast::skipControlFlow(result) and - ctx = getCompilation(result.getFile()) and + ctx = getCompilation(result) and ( result = Initializers::initializedInstanceMemberOrder(c, index) or @@ -437,9 +466,19 @@ private module Input implements InputSig1, InputSig2 { or i = 2 and result = ctor.getBody() ) + or + not c instanceof Constructor and + result = c.getBody() and + index = 0 ) } + pragma[nomagic] + Ast::Parameter callableGetParameter(Ast::Callable c, CallableContext ctx, int index) { + result = Ast::callableGetParameter(c, index) and + ctx = getCompilation(result) + } + private Expr getQualifier(QualifiableExpr qe) { result = qe.getQualifier() or result = qe.(ExtensionMethodCall).getArgument(0) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index 67901fdb4b21..1352f6e9f9f3 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -175,6 +175,18 @@ private module ThisFlow { result = strictcount(int primaryParamPos | primaryConstructorThisAccess(_, bb, primaryParamPos)) } + private module BodyNearestLocationInput implements NearestLocationInputSig { + class C = ControlFlowElement; + + predicate relevantLocations(ControlFlowElement body, Location l1, Location l2) { + exists(DataFlowCallable c | + any(InstanceParameterNode p).isParameterOf(c, _) and + body = c.asCallable(l1).getBody() and + l2 = body.getLocation() + ) + } + } + private predicate thisAccess(Node n, BasicBlock bb, int i) { thisAccess(n, bb.getNode(i)) or @@ -183,21 +195,29 @@ private module ThisFlow { i = ppos - numberOfPrimaryConstructorParameters(bb) ) or - exists(DataFlowCallable c, EntryBasicBlock entry | - n.(InstanceParameterNode).isParameterOf(c, _) and - exists(ControlFlowNode succ | - succ = c.getAControlFlowNode() and - succ = entry.getFirstNode().getASuccessor() and + exists(Callable c, InstanceParameterNode p, Location l | + p = n and + c = p.getCallable(l) and + ( // In case `c` has multiple bodies, we want each body to gets its own implicit - // entry definition. In case `c` doesn't have multiple bodies, the line below - // is simply the same as `bb = entry`, because `entry.getFirstNode().getASuccessor()` - // will be in the entry block. - bb = succ.getBasicBlock() - | - i = -1 - numberOfPrimaryConstructorParameters(bb) + // entry definition. + exists(ControlFlowElement body | + body = c.getBody() and + bb.getANode().isBefore(body) and + NearestLocation::nearestLocation(body, l, _) + ) or - not exists(numberOfPrimaryConstructorParameters(bb)) and i = -1 + not c.hasBody() and + exists(EntryBasicBlock entry, ControlFlowNode succ | + succ = p.getEnclosingCallableImpl().getAControlFlowNode() and + succ = entry.getFirstNode().getASuccessor() and + bb = succ.getBasicBlock() + ) ) + | + i = -1 - numberOfPrimaryConstructorParameters(bb) + or + not exists(numberOfPrimaryConstructorParameters(bb)) and i = -1 ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll index 6e933c6a8e0c..b2c445985245 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll @@ -753,26 +753,25 @@ private module Cached { cached predicate implicitEntryDefinition(BasicBlock bb, Ssa::SourceVariable v) { - exists(EntryBasicBlock entry, Callable c | - c = entry.getEnclosingCallable() and - // In case `c` has multiple bodies, we want each body to get its own implicit - // entry definition. In case `c` doesn't have multiple bodies, the line below - // is simply the same as `bb = entry`, because `entry.getFirstNode().getASuccessor()` - // will be in the entry block. - bb = entry.getFirstNode().getASuccessor().getBasicBlock() and - c = v.getEnclosingCallable() - | - // Captured variable - exists(LocalScopeVariable lsv | - v = any(LocalScopeSourceVariable lv | lsv = lv.getAssignable()) - | - lsv.getCallable() != c + exists(Callable c | c = v.getEnclosingCallable() | + c = bb.(EntryBasicBlock).getEnclosingCallable() and + ( + // Captured variable + exists(LocalScopeVariable lsv | + v = any(LocalScopeSourceVariable lv | lsv = lv.getAssignable()) + | + lsv.getCallable() != c + ) + or + // Each tracked field and property has an implicit entry definition + v instanceof PlainFieldOrPropSourceVariable ) or - // Each tracked field and property has an implicit entry definition - v instanceof PlainFieldOrPropSourceVariable - or - v.getAssignable() instanceof Parameter + // In case `c` has multiple bodies, we want each body to get its own implicit + // entry definition, so we use the basic block containing the body instead of + // the entry block. + v.getAssignable() instanceof Parameter and + bb.getANode().isBefore(c.getBody()) ) } diff --git a/csharp/ql/lib/semmlecode.csharp.dbscheme b/csharp/ql/lib/semmlecode.csharp.dbscheme index 19b8cc3e2dc7..a5765bf26f38 100644 --- a/csharp/ql/lib/semmlecode.csharp.dbscheme +++ b/csharp/ql/lib/semmlecode.csharp.dbscheme @@ -1362,7 +1362,7 @@ compiler_generated(unique int id: @element ref); /** CONTROL/DATA FLOW **/ -@control_flow_element = @stmt | @expr; +@control_flow_element = @stmt | @expr | @parameter; /* XML Files */ diff --git a/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected b/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected index e9a7cae7a564..50fb2c695313 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected @@ -1,73 +1,73 @@ | AccessorCalls.cs:1:7:1:19 | Entry | AccessorCalls.cs:1:7:1:19 | Exit | 11 | -| AccessorCalls.cs:5:23:5:25 | Entry | AccessorCalls.cs:5:23:5:25 | Exit | 4 | -| AccessorCalls.cs:5:33:5:35 | Entry | AccessorCalls.cs:5:33:5:35 | Exit | 4 | -| AccessorCalls.cs:7:32:7:34 | Entry | AccessorCalls.cs:7:32:7:34 | Exit | 4 | -| AccessorCalls.cs:7:40:7:45 | Entry | AccessorCalls.cs:7:40:7:45 | Exit | 4 | -| AccessorCalls.cs:10:10:10:11 | Entry | AccessorCalls.cs:10:10:10:11 | Exit | 66 | -| AccessorCalls.cs:19:10:19:11 | Entry | AccessorCalls.cs:19:10:19:11 | Exit | 90 | +| AccessorCalls.cs:5:23:5:25 | Entry | AccessorCalls.cs:5:23:5:25 | Exit | 5 | +| AccessorCalls.cs:5:33:5:35 | Entry | AccessorCalls.cs:5:33:5:35 | Exit | 6 | +| AccessorCalls.cs:7:32:7:34 | Entry | AccessorCalls.cs:7:32:7:34 | Exit | 5 | +| AccessorCalls.cs:7:40:7:45 | Entry | AccessorCalls.cs:7:40:7:45 | Exit | 5 | +| AccessorCalls.cs:10:10:10:11 | Entry | AccessorCalls.cs:10:10:10:11 | Exit | 67 | +| AccessorCalls.cs:19:10:19:11 | Entry | AccessorCalls.cs:19:10:19:11 | Exit | 91 | | AccessorCalls.cs:28:10:28:11 | Entry | AccessorCalls.cs:28:10:28:11 | Exit | 33 | | AccessorCalls.cs:35:10:35:11 | Entry | AccessorCalls.cs:35:10:35:11 | Exit | 42 | | AccessorCalls.cs:42:10:42:11 | Entry | AccessorCalls.cs:42:10:42:11 | Exit | 46 | | AccessorCalls.cs:49:10:49:11 | Entry | AccessorCalls.cs:49:10:49:11 | Exit | 64 | -| AccessorCalls.cs:56:10:56:11 | Entry | AccessorCalls.cs:56:10:56:11 | Exit | 50 | -| AccessorCalls.cs:61:10:61:11 | Entry | AccessorCalls.cs:61:10:61:11 | Exit | 68 | -| AccessorCalls.cs:66:10:66:11 | Entry | AccessorCalls.cs:66:10:66:11 | Exit | 104 | +| AccessorCalls.cs:56:10:56:11 | Entry | AccessorCalls.cs:56:10:56:11 | Exit | 51 | +| AccessorCalls.cs:61:10:61:11 | Entry | AccessorCalls.cs:61:10:61:11 | Exit | 69 | +| AccessorCalls.cs:66:10:66:11 | Entry | AccessorCalls.cs:66:10:66:11 | Exit | 107 | | ArrayCreation.cs:1:7:1:19 | Entry | ArrayCreation.cs:1:7:1:19 | Exit | 11 | | ArrayCreation.cs:3:11:3:12 | Entry | ArrayCreation.cs:3:11:3:12 | Exit | 7 | | ArrayCreation.cs:5:12:5:13 | Entry | ArrayCreation.cs:5:12:5:13 | Exit | 8 | | ArrayCreation.cs:7:11:7:12 | Entry | ArrayCreation.cs:7:11:7:12 | Exit | 12 | | ArrayCreation.cs:9:12:9:13 | Entry | ArrayCreation.cs:9:12:9:13 | Exit | 21 | | Assert.cs:5:7:5:17 | Entry | Assert.cs:5:7:5:17 | Exit | 11 | -| Assert.cs:7:10:7:11 | Entry | Assert.cs:9:20:9:20 | access to parameter b | 7 | +| Assert.cs:7:10:7:11 | Entry | Assert.cs:9:20:9:20 | access to parameter b | 8 | | Assert.cs:7:10:7:11 | Exceptional Exit | Assert.cs:7:10:7:11 | Exceptional Exit | 1 | | Assert.cs:7:10:7:11 | Exit | Assert.cs:7:10:7:11 | Exit | 1 | | Assert.cs:9:20:9:20 | After access to parameter b [false] | Assert.cs:9:31:9:32 | "" | 2 | | Assert.cs:9:20:9:20 | After access to parameter b [true] | Assert.cs:9:24:9:27 | null | 2 | | Assert.cs:9:20:9:32 | After ... ? ... : ... | Assert.cs:10:9:10:31 | call to method Assert | 12 | | Assert.cs:10:9:10:31 | After call to method Assert | Assert.cs:7:10:7:11 | Normal Exit | 13 | -| Assert.cs:14:10:14:11 | Entry | Assert.cs:16:20:16:20 | access to parameter b | 7 | +| Assert.cs:14:10:14:11 | Entry | Assert.cs:16:20:16:20 | access to parameter b | 8 | | Assert.cs:14:10:14:11 | Exceptional Exit | Assert.cs:14:10:14:11 | Exceptional Exit | 1 | | Assert.cs:14:10:14:11 | Exit | Assert.cs:14:10:14:11 | Exit | 1 | | Assert.cs:16:20:16:20 | After access to parameter b [false] | Assert.cs:16:31:16:32 | "" | 2 | | Assert.cs:16:20:16:20 | After access to parameter b [true] | Assert.cs:16:24:16:27 | null | 2 | | Assert.cs:16:20:16:32 | After ... ? ... : ... | Assert.cs:17:9:17:24 | call to method IsNull | 8 | | Assert.cs:17:9:17:24 | After call to method IsNull | Assert.cs:14:10:14:11 | Normal Exit | 13 | -| Assert.cs:21:10:21:11 | Entry | Assert.cs:23:20:23:20 | access to parameter b | 7 | +| Assert.cs:21:10:21:11 | Entry | Assert.cs:23:20:23:20 | access to parameter b | 8 | | Assert.cs:21:10:21:11 | Exceptional Exit | Assert.cs:21:10:21:11 | Exceptional Exit | 1 | | Assert.cs:21:10:21:11 | Exit | Assert.cs:21:10:21:11 | Exit | 1 | | Assert.cs:23:20:23:20 | After access to parameter b [false] | Assert.cs:23:31:23:32 | "" | 2 | | Assert.cs:23:20:23:20 | After access to parameter b [true] | Assert.cs:23:24:23:27 | null | 2 | | Assert.cs:23:20:23:32 | After ... ? ... : ... | Assert.cs:24:9:24:27 | call to method IsNotNull | 8 | | Assert.cs:24:9:24:27 | After call to method IsNotNull | Assert.cs:21:10:21:11 | Normal Exit | 13 | -| Assert.cs:28:10:28:11 | Entry | Assert.cs:30:20:30:20 | access to parameter b | 7 | +| Assert.cs:28:10:28:11 | Entry | Assert.cs:30:20:30:20 | access to parameter b | 8 | | Assert.cs:28:10:28:11 | Exceptional Exit | Assert.cs:28:10:28:11 | Exceptional Exit | 1 | | Assert.cs:28:10:28:11 | Exit | Assert.cs:28:10:28:11 | Exit | 1 | | Assert.cs:30:20:30:20 | After access to parameter b [false] | Assert.cs:30:31:30:32 | "" | 2 | | Assert.cs:30:20:30:20 | After access to parameter b [true] | Assert.cs:30:24:30:27 | null | 2 | | Assert.cs:30:20:30:32 | After ... ? ... : ... | Assert.cs:31:9:31:32 | call to method IsTrue | 12 | | Assert.cs:31:9:31:32 | After call to method IsTrue | Assert.cs:28:10:28:11 | Normal Exit | 13 | -| Assert.cs:35:10:35:11 | Entry | Assert.cs:37:20:37:20 | access to parameter b | 7 | +| Assert.cs:35:10:35:11 | Entry | Assert.cs:37:20:37:20 | access to parameter b | 8 | | Assert.cs:35:10:35:11 | Exceptional Exit | Assert.cs:35:10:35:11 | Exceptional Exit | 1 | | Assert.cs:35:10:35:11 | Exit | Assert.cs:35:10:35:11 | Exit | 1 | | Assert.cs:37:20:37:20 | After access to parameter b [false] | Assert.cs:37:31:37:32 | "" | 2 | | Assert.cs:37:20:37:20 | After access to parameter b [true] | Assert.cs:37:24:37:27 | null | 2 | | Assert.cs:37:20:37:32 | After ... ? ... : ... | Assert.cs:38:9:38:32 | call to method IsTrue | 12 | | Assert.cs:38:9:38:32 | After call to method IsTrue | Assert.cs:35:10:35:11 | Normal Exit | 13 | -| Assert.cs:42:10:42:11 | Entry | Assert.cs:44:20:44:20 | access to parameter b | 7 | +| Assert.cs:42:10:42:11 | Entry | Assert.cs:44:20:44:20 | access to parameter b | 8 | | Assert.cs:42:10:42:11 | Exceptional Exit | Assert.cs:42:10:42:11 | Exceptional Exit | 1 | | Assert.cs:42:10:42:11 | Exit | Assert.cs:42:10:42:11 | Exit | 1 | | Assert.cs:44:20:44:20 | After access to parameter b [false] | Assert.cs:44:31:44:32 | "" | 2 | | Assert.cs:44:20:44:20 | After access to parameter b [true] | Assert.cs:44:24:44:27 | null | 2 | | Assert.cs:44:20:44:32 | After ... ? ... : ... | Assert.cs:45:9:45:33 | call to method IsFalse | 12 | | Assert.cs:45:9:45:33 | After call to method IsFalse | Assert.cs:42:10:42:11 | Normal Exit | 13 | -| Assert.cs:49:10:49:11 | Entry | Assert.cs:51:20:51:20 | access to parameter b | 7 | +| Assert.cs:49:10:49:11 | Entry | Assert.cs:51:20:51:20 | access to parameter b | 8 | | Assert.cs:49:10:49:11 | Exceptional Exit | Assert.cs:49:10:49:11 | Exceptional Exit | 1 | | Assert.cs:49:10:49:11 | Exit | Assert.cs:49:10:49:11 | Exit | 1 | | Assert.cs:51:20:51:20 | After access to parameter b [false] | Assert.cs:51:31:51:32 | "" | 2 | | Assert.cs:51:20:51:20 | After access to parameter b [true] | Assert.cs:51:24:51:27 | null | 2 | | Assert.cs:51:20:51:32 | After ... ? ... : ... | Assert.cs:52:9:52:33 | call to method IsFalse | 12 | | Assert.cs:52:9:52:33 | After call to method IsFalse | Assert.cs:49:10:49:11 | Normal Exit | 13 | -| Assert.cs:56:10:56:11 | Entry | Assert.cs:58:20:58:20 | access to parameter b | 7 | +| Assert.cs:56:10:56:11 | Entry | Assert.cs:58:20:58:20 | access to parameter b | 8 | | Assert.cs:56:10:56:11 | Exceptional Exit | Assert.cs:56:10:56:11 | Exceptional Exit | 1 | | Assert.cs:56:10:56:11 | Exit | Assert.cs:56:10:56:11 | Exit | 1 | | Assert.cs:58:20:58:20 | After access to parameter b [false] | Assert.cs:58:31:58:32 | "" | 2 | @@ -77,7 +77,7 @@ | Assert.cs:59:23:59:31 | After ... != ... [false] | Assert.cs:59:23:59:31 | After ... != ... [false] | 1 | | Assert.cs:59:23:59:31 | After ... != ... [true] | Assert.cs:59:36:59:36 | access to parameter b | 2 | | Assert.cs:59:23:59:36 | After ... && ... | Assert.cs:59:9:59:37 | call to method IsTrue | 2 | -| Assert.cs:63:10:63:11 | Entry | Assert.cs:65:20:65:20 | access to parameter b | 7 | +| Assert.cs:63:10:63:11 | Entry | Assert.cs:65:20:65:20 | access to parameter b | 8 | | Assert.cs:63:10:63:11 | Exceptional Exit | Assert.cs:63:10:63:11 | Exceptional Exit | 1 | | Assert.cs:63:10:63:11 | Exit | Assert.cs:63:10:63:11 | Exit | 1 | | Assert.cs:65:20:65:20 | After access to parameter b [false] | Assert.cs:65:31:65:32 | "" | 2 | @@ -87,7 +87,7 @@ | Assert.cs:66:24:66:32 | After ... == ... [false] | Assert.cs:66:37:66:37 | access to parameter b | 2 | | Assert.cs:66:24:66:32 | After ... == ... [true] | Assert.cs:66:24:66:32 | After ... == ... [true] | 1 | | Assert.cs:66:24:66:37 | After ... \|\| ... | Assert.cs:66:9:66:38 | call to method IsFalse | 2 | -| Assert.cs:70:10:70:12 | Entry | Assert.cs:72:20:72:20 | access to parameter b | 7 | +| Assert.cs:70:10:70:12 | Entry | Assert.cs:72:20:72:20 | access to parameter b | 8 | | Assert.cs:70:10:70:12 | Exceptional Exit | Assert.cs:70:10:70:12 | Exceptional Exit | 1 | | Assert.cs:70:10:70:12 | Exit | Assert.cs:70:10:70:12 | Exit | 1 | | Assert.cs:72:20:72:20 | After access to parameter b [false] | Assert.cs:72:31:72:32 | "" | 2 | @@ -97,7 +97,7 @@ | Assert.cs:73:23:73:31 | After ... == ... [false] | Assert.cs:73:23:73:31 | After ... == ... [false] | 1 | | Assert.cs:73:23:73:31 | After ... == ... [true] | Assert.cs:73:36:73:36 | access to parameter b | 2 | | Assert.cs:73:23:73:36 | After ... && ... | Assert.cs:73:9:73:37 | call to method IsTrue | 2 | -| Assert.cs:77:10:77:12 | Entry | Assert.cs:79:20:79:20 | access to parameter b | 7 | +| Assert.cs:77:10:77:12 | Entry | Assert.cs:79:20:79:20 | access to parameter b | 8 | | Assert.cs:77:10:77:12 | Exceptional Exit | Assert.cs:77:10:77:12 | Exceptional Exit | 1 | | Assert.cs:77:10:77:12 | Exit | Assert.cs:77:10:77:12 | Exit | 1 | | Assert.cs:79:20:79:20 | After access to parameter b [false] | Assert.cs:79:31:79:32 | "" | 2 | @@ -107,7 +107,7 @@ | Assert.cs:80:24:80:32 | After ... != ... [false] | Assert.cs:80:37:80:37 | access to parameter b | 2 | | Assert.cs:80:24:80:32 | After ... != ... [true] | Assert.cs:80:24:80:32 | After ... != ... [true] | 1 | | Assert.cs:80:24:80:37 | After ... \|\| ... | Assert.cs:80:9:80:38 | call to method IsFalse | 2 | -| Assert.cs:84:10:84:12 | Entry | Assert.cs:86:20:86:20 | access to parameter b | 7 | +| Assert.cs:84:10:84:12 | Entry | Assert.cs:86:20:86:20 | access to parameter b | 8 | | Assert.cs:84:10:84:12 | Exceptional Exit | Assert.cs:84:10:84:12 | Exceptional Exit | 1 | | Assert.cs:84:10:84:12 | Exit | Assert.cs:84:10:84:12 | Exit | 1 | | Assert.cs:86:20:86:20 | After access to parameter b [false] | Assert.cs:86:31:86:32 | "" | 2 | @@ -166,20 +166,20 @@ | Assert.cs:127:24:127:32 | After ... != ... [false] | Assert.cs:127:37:127:38 | After !... | 4 | | Assert.cs:127:24:127:32 | After ... != ... [true] | Assert.cs:127:24:127:32 | After ... != ... [true] | 1 | | Assert.cs:127:24:127:38 | After ... \|\| ... | Assert.cs:127:9:127:39 | call to method IsFalse | 2 | -| Assert.cs:131:18:131:32 | Entry | Assert.cs:131:18:131:32 | Exit | 4 | -| Assert.cs:138:10:138:12 | Entry | Assert.cs:140:9:140:35 | call to method AssertTrueFalse | 9 | +| Assert.cs:131:18:131:32 | Entry | Assert.cs:131:18:131:32 | Exit | 7 | +| Assert.cs:138:10:138:12 | Entry | Assert.cs:140:9:140:35 | call to method AssertTrueFalse | 12 | | Assert.cs:138:10:138:12 | Exceptional Exit | Assert.cs:138:10:138:12 | Exceptional Exit | 1 | | Assert.cs:138:10:138:12 | Exit | Assert.cs:138:10:138:12 | Exit | 1 | | Assert.cs:140:9:140:35 | After call to method AssertTrueFalse | Assert.cs:138:10:138:12 | Normal Exit | 5 | | Assignments.cs:1:7:1:17 | Entry | Assignments.cs:1:7:1:17 | Exit | 11 | | Assignments.cs:3:10:3:10 | Entry | Assignments.cs:3:10:3:10 | Exit | 62 | -| Assignments.cs:14:18:14:35 | Entry | Assignments.cs:14:18:14:35 | Exit | 4 | -| Assignments.cs:17:40:17:40 | Entry | Assignments.cs:17:40:17:40 | Exit | 7 | -| Assignments.cs:27:10:27:23 | Entry | Assignments.cs:27:10:27:23 | Exit | 12 | -| Assignments.cs:32:10:32:22 | Entry | Assignments.cs:32:10:32:22 | Exit | 19 | +| Assignments.cs:14:18:14:35 | Entry | Assignments.cs:14:18:14:35 | Exit | 6 | +| Assignments.cs:17:40:17:40 | Entry | Assignments.cs:17:40:17:40 | Exit | 9 | +| Assignments.cs:27:10:27:23 | Entry | Assignments.cs:27:10:27:23 | Exit | 13 | +| Assignments.cs:32:10:32:22 | Entry | Assignments.cs:32:10:32:22 | Exit | 22 | | Assignments.cs:38:10:38:11 | Entry | Assignments.cs:38:10:38:11 | Exit | 52 | | BreakInTry.cs:1:7:1:16 | Entry | BreakInTry.cs:1:7:1:16 | Exit | 11 | -| BreakInTry.cs:3:10:3:11 | Entry | BreakInTry.cs:7:33:7:36 | access to parameter args | 6 | +| BreakInTry.cs:3:10:3:11 | Entry | BreakInTry.cs:7:33:7:36 | access to parameter args | 7 | | BreakInTry.cs:7:13:11:13 | After foreach (... ... in ...) ... | BreakInTry.cs:15:17:15:28 | ... == ... | 8 | | BreakInTry.cs:7:26:7:28 | String arg | BreakInTry.cs:9:21:9:31 | ... == ... | 7 | | BreakInTry.cs:7:33:7:36 | After access to parameter args [empty] | BreakInTry.cs:7:33:7:36 | After access to parameter args [empty] | 1 | @@ -189,7 +189,7 @@ | BreakInTry.cs:15:13:16:17 | After if (...) ... | BreakInTry.cs:3:10:3:11 | Exit | 6 | | BreakInTry.cs:15:17:15:28 | After ... == ... [false] | BreakInTry.cs:15:17:15:28 | After ... == ... [false] | 1 | | BreakInTry.cs:15:17:15:28 | After ... == ... [true] | BreakInTry.cs:16:17:16:17 | ; | 2 | -| BreakInTry.cs:20:10:20:11 | Entry | BreakInTry.cs:22:29:22:32 | access to parameter args | 4 | +| BreakInTry.cs:20:10:20:11 | Entry | BreakInTry.cs:22:29:22:32 | access to parameter args | 5 | | BreakInTry.cs:22:9:34:9 | After foreach (... ... in ...) ... | BreakInTry.cs:20:10:20:11 | Exit | 5 | | BreakInTry.cs:22:22:22:24 | String arg | BreakInTry.cs:26:21:26:31 | ... == ... | 9 | | BreakInTry.cs:22:29:22:32 | After access to parameter args [empty] | BreakInTry.cs:22:29:22:32 | After access to parameter args [empty] | 1 | @@ -201,7 +201,7 @@ | BreakInTry.cs:31:17:32:21 | After if (...) ... | BreakInTry.cs:30:13:33:13 | After {...} | 2 | | BreakInTry.cs:31:21:31:32 | After ... == ... [false] | BreakInTry.cs:31:21:31:32 | After ... == ... [false] | 1 | | BreakInTry.cs:31:21:31:32 | After ... == ... [true] | BreakInTry.cs:32:21:32:21 | ; | 2 | -| BreakInTry.cs:38:10:38:11 | Entry | BreakInTry.cs:42:17:42:28 | ... == ... | 9 | +| BreakInTry.cs:38:10:38:11 | Entry | BreakInTry.cs:42:17:42:28 | ... == ... | 10 | | BreakInTry.cs:38:10:38:11 | Normal Exit | BreakInTry.cs:38:10:38:11 | Exit | 2 | | BreakInTry.cs:40:9:52:9 | After try {...} ... | BreakInTry.cs:39:5:54:5 | After {...} | 3 | | BreakInTry.cs:42:17:42:28 | After ... == ... [false] | BreakInTry.cs:41:9:44:9 | After {...} | 3 | @@ -213,7 +213,7 @@ | BreakInTry.cs:47:33:47:36 | After access to parameter args [non-empty] | BreakInTry.cs:47:33:47:36 | After access to parameter args [non-empty] | 1 | | BreakInTry.cs:49:21:49:31 | After ... == ... [false] | BreakInTry.cs:47:13:51:13 | [LoopHeader] foreach (... ... in ...) ... | 4 | | BreakInTry.cs:49:21:49:31 | After ... == ... [true] | BreakInTry.cs:50:21:50:26 | break; | 3 | -| BreakInTry.cs:56:10:56:11 | Entry | BreakInTry.cs:60:17:60:28 | ... == ... | 9 | +| BreakInTry.cs:56:10:56:11 | Entry | BreakInTry.cs:60:17:60:28 | ... == ... | 10 | | BreakInTry.cs:56:10:56:11 | Normal Exit | BreakInTry.cs:56:10:56:11 | Exit | 2 | | BreakInTry.cs:58:9:70:9 | After try {...} ... | BreakInTry.cs:57:5:71:5 | After {...} | 2 | | BreakInTry.cs:60:17:60:28 | After ... == ... [false] | BreakInTry.cs:59:9:62:9 | After {...} | 3 | @@ -229,7 +229,7 @@ | CompileTimeOperators.cs:5:9:5:15 | Entry | CompileTimeOperators.cs:5:9:5:15 | Exit | 7 | | CompileTimeOperators.cs:10:9:10:14 | Entry | CompileTimeOperators.cs:10:9:10:14 | Exit | 7 | | CompileTimeOperators.cs:15:10:15:15 | Entry | CompileTimeOperators.cs:15:10:15:15 | Exit | 7 | -| CompileTimeOperators.cs:20:12:20:17 | Entry | CompileTimeOperators.cs:20:12:20:17 | Exit | 7 | +| CompileTimeOperators.cs:20:12:20:17 | Entry | CompileTimeOperators.cs:20:12:20:17 | Exit | 8 | | CompileTimeOperators.cs:26:7:26:22 | Entry | CompileTimeOperators.cs:26:7:26:22 | Exit | 11 | | CompileTimeOperators.cs:28:10:28:10 | Entry | CompileTimeOperators.cs:36:9:38:9 | After {...} | 14 | | CompileTimeOperators.cs:28:10:28:10 | Exceptional Exit | CompileTimeOperators.cs:28:10:28:10 | Exceptional Exit | 1 | @@ -237,41 +237,41 @@ | CompileTimeOperators.cs:30:9:38:9 | After try {...} ... | CompileTimeOperators.cs:39:9:39:34 | After ...; | 7 | | CompileTimeOperators.cs:40:9:40:11 | End: | CompileTimeOperators.cs:28:10:28:10 | Normal Exit | 9 | | ConditionalAccess.cs:1:7:1:23 | Entry | ConditionalAccess.cs:1:7:1:23 | Exit | 11 | -| ConditionalAccess.cs:3:12:3:13 | Entry | ConditionalAccess.cs:3:26:3:26 | access to parameter i | 4 | +| ConditionalAccess.cs:3:12:3:13 | Entry | ConditionalAccess.cs:3:26:3:26 | access to parameter i | 5 | | ConditionalAccess.cs:3:26:3:26 | After access to parameter i [non-null] | ConditionalAccess.cs:3:26:3:38 | call to method ToString | 2 | | ConditionalAccess.cs:3:26:3:26 | After access to parameter i [null] | ConditionalAccess.cs:3:26:3:26 | After access to parameter i [null] | 1 | | ConditionalAccess.cs:3:26:3:38 | After call to method ToString [non-null] | ConditionalAccess.cs:3:26:3:49 | call to method ToLower | 2 | | ConditionalAccess.cs:3:26:3:38 | After call to method ToString [null] | ConditionalAccess.cs:3:26:3:38 | After call to method ToString [null] | 1 | | ConditionalAccess.cs:3:26:3:49 | After call to method ToLower | ConditionalAccess.cs:3:12:3:13 | Exit | 3 | -| ConditionalAccess.cs:5:10:5:11 | Entry | ConditionalAccess.cs:5:26:5:26 | access to parameter s | 3 | +| ConditionalAccess.cs:5:10:5:11 | Entry | ConditionalAccess.cs:5:26:5:26 | access to parameter s | 4 | | ConditionalAccess.cs:5:26:5:26 | After access to parameter s [non-null] | ConditionalAccess.cs:5:26:5:34 | access to property Length | 2 | | ConditionalAccess.cs:5:26:5:26 | After access to parameter s [null] | ConditionalAccess.cs:5:26:5:26 | After access to parameter s [null] | 1 | | ConditionalAccess.cs:5:26:5:34 | After access to property Length | ConditionalAccess.cs:5:10:5:11 | Exit | 3 | -| ConditionalAccess.cs:7:10:7:11 | Entry | ConditionalAccess.cs:7:39:7:40 | access to parameter s1 | 4 | +| ConditionalAccess.cs:7:10:7:11 | Entry | ConditionalAccess.cs:7:39:7:40 | access to parameter s1 | 6 | | ConditionalAccess.cs:7:38:7:55 | After access to property Length | ConditionalAccess.cs:7:10:7:11 | Exit | 3 | | ConditionalAccess.cs:7:39:7:40 | After access to parameter s1 [non-null] | ConditionalAccess.cs:7:39:7:40 | After access to parameter s1 [non-null] | 1 | | ConditionalAccess.cs:7:39:7:40 | After access to parameter s1 [null] | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | 2 | | ConditionalAccess.cs:7:39:7:46 | After ... ?? ... [non-null] | ConditionalAccess.cs:7:38:7:55 | access to property Length | 2 | | ConditionalAccess.cs:7:45:7:46 | After access to parameter s2 [non-null] | ConditionalAccess.cs:7:45:7:46 | After access to parameter s2 [non-null] | 1 | | ConditionalAccess.cs:7:45:7:46 | After access to parameter s2 [null] | ConditionalAccess.cs:7:39:7:46 | After ... ?? ... [null] | 2 | -| ConditionalAccess.cs:9:9:9:10 | Entry | ConditionalAccess.cs:9:25:9:25 | access to parameter s | 4 | +| ConditionalAccess.cs:9:9:9:10 | Entry | ConditionalAccess.cs:9:25:9:25 | access to parameter s | 5 | | ConditionalAccess.cs:9:25:9:25 | After access to parameter s [non-null] | ConditionalAccess.cs:9:25:9:33 | access to property Length | 2 | | ConditionalAccess.cs:9:25:9:25 | After access to parameter s [null] | ConditionalAccess.cs:9:25:9:25 | After access to parameter s [null] | 1 | | ConditionalAccess.cs:9:25:9:33 | After access to property Length [non-null] | ConditionalAccess.cs:9:25:9:33 | After access to property Length [non-null] | 1 | | ConditionalAccess.cs:9:25:9:33 | After access to property Length [null] | ConditionalAccess.cs:9:38:9:38 | 0 | 2 | | ConditionalAccess.cs:9:25:9:38 | After ... ?? ... | ConditionalAccess.cs:9:9:9:10 | Exit | 3 | -| ConditionalAccess.cs:11:9:11:10 | Entry | ConditionalAccess.cs:13:13:13:13 | access to parameter s | 6 | +| ConditionalAccess.cs:11:9:11:10 | Entry | ConditionalAccess.cs:13:13:13:13 | access to parameter s | 7 | | ConditionalAccess.cs:11:9:11:10 | Normal Exit | ConditionalAccess.cs:11:9:11:10 | Exit | 2 | | ConditionalAccess.cs:13:13:13:13 | After access to parameter s [non-null] | ConditionalAccess.cs:13:13:13:21 | access to property Length | 2 | | ConditionalAccess.cs:13:13:13:13 | After access to parameter s [null] | ConditionalAccess.cs:13:13:13:13 | After access to parameter s [null] | 1 | | ConditionalAccess.cs:13:13:13:21 | After access to property Length | ConditionalAccess.cs:13:13:13:25 | ... > ... | 6 | | ConditionalAccess.cs:13:13:13:25 | After ... > ... [false] | ConditionalAccess.cs:16:13:16:21 | return ...; | 4 | | ConditionalAccess.cs:13:13:13:25 | After ... > ... [true] | ConditionalAccess.cs:14:13:14:21 | return ...; | 4 | -| ConditionalAccess.cs:19:12:19:13 | Entry | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | 3 | +| ConditionalAccess.cs:19:12:19:13 | Entry | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | 5 | | ConditionalAccess.cs:19:40:19:41 | After access to parameter s1 [non-null] | ConditionalAccess.cs:19:40:19:60 | call to method CommaJoinWith | 3 | | ConditionalAccess.cs:19:40:19:41 | After access to parameter s1 [null] | ConditionalAccess.cs:19:40:19:41 | After access to parameter s1 [null] | 1 | | ConditionalAccess.cs:19:40:19:60 | After call to method CommaJoinWith | ConditionalAccess.cs:19:12:19:13 | Exit | 3 | -| ConditionalAccess.cs:21:10:21:11 | Entry | ConditionalAccess.cs:23:18:23:29 | (...) ... | 9 | +| ConditionalAccess.cs:21:10:21:11 | Entry | ConditionalAccess.cs:23:18:23:29 | (...) ... | 10 | | ConditionalAccess.cs:23:17:23:38 | After access to property Length | ConditionalAccess.cs:24:18:24:24 | (...) ... | 11 | | ConditionalAccess.cs:23:18:23:29 | After (...) ... [non-null] | ConditionalAccess.cs:23:17:23:38 | access to property Length | 2 | | ConditionalAccess.cs:23:18:23:29 | After (...) ... [null] | ConditionalAccess.cs:23:18:23:29 | After (...) ... [null] | 1 | @@ -281,14 +281,14 @@ | ConditionalAccess.cs:25:13:25:14 | After "" [non-null] | ConditionalAccess.cs:25:13:25:32 | call to method CommaJoinWith | 3 | | ConditionalAccess.cs:25:13:25:14 | After "" [null] | ConditionalAccess.cs:25:13:25:14 | After "" [null] | 1 | | ConditionalAccess.cs:25:13:25:32 | After call to method CommaJoinWith | ConditionalAccess.cs:21:10:21:11 | Exit | 7 | -| ConditionalAccess.cs:30:10:30:12 | Entry | ConditionalAccess.cs:30:10:30:12 | Exit | 8 | -| ConditionalAccess.cs:32:10:32:11 | Entry | ConditionalAccess.cs:35:9:35:12 | access to property Prop | 14 | +| ConditionalAccess.cs:30:10:30:12 | Entry | ConditionalAccess.cs:30:10:30:12 | Exit | 9 | +| ConditionalAccess.cs:32:10:32:11 | Entry | ConditionalAccess.cs:35:9:35:12 | access to property Prop | 16 | | ConditionalAccess.cs:35:9:35:12 | After access to property Prop [non-null] | ConditionalAccess.cs:35:9:35:24 | call to method Out | 3 | | ConditionalAccess.cs:35:9:35:12 | After access to property Prop [null] | ConditionalAccess.cs:35:9:35:12 | After access to property Prop [null] | 1 | | ConditionalAccess.cs:35:9:35:24 | After call to method Out | ConditionalAccess.cs:32:10:32:11 | Exit | 5 | -| ConditionalAccess.cs:42:9:42:11 | Entry | ConditionalAccess.cs:42:9:42:11 | Exit | 7 | -| ConditionalAccess.cs:43:9:43:11 | Entry | ConditionalAccess.cs:43:9:43:11 | Exit | 4 | -| ConditionalAccess.cs:46:10:46:11 | Entry | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | 6 | +| ConditionalAccess.cs:42:9:42:11 | Entry | ConditionalAccess.cs:42:9:42:11 | Exit | 8 | +| ConditionalAccess.cs:43:9:43:11 | Entry | ConditionalAccess.cs:43:9:43:11 | Exit | 6 | +| ConditionalAccess.cs:46:10:46:11 | Entry | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | 7 | | ConditionalAccess.cs:48:9:48:10 | After access to parameter ca [non-null] | ConditionalAccess.cs:48:12:48:25 | ... = ... | 5 | | ConditionalAccess.cs:48:9:48:10 | After access to parameter ca [null] | ConditionalAccess.cs:48:9:48:10 | After access to parameter ca [null] | 1 | | ConditionalAccess.cs:48:12:48:25 | After ... = ... | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | 6 | @@ -314,16 +314,16 @@ | ConditionalAccess.cs:54:9:54:10 | After access to parameter ca [non-null] | ConditionalAccess.cs:54:12:54:29 | ... += ... | 5 | | ConditionalAccess.cs:54:9:54:10 | After access to parameter ca [null] | ConditionalAccess.cs:54:9:54:10 | After access to parameter ca [null] | 1 | | ConditionalAccess.cs:54:12:54:29 | After ... += ... | ConditionalAccess.cs:46:10:46:11 | Exit | 5 | -| ConditionalAccess.cs:60:26:60:38 | Entry | ConditionalAccess.cs:60:26:60:38 | Exit | 12 | +| ConditionalAccess.cs:60:26:60:38 | Entry | ConditionalAccess.cs:60:26:60:38 | Exit | 14 | | Conditions.cs:1:7:1:16 | Entry | Conditions.cs:1:7:1:16 | Exit | 11 | -| Conditions.cs:3:10:3:19 | Entry | Conditions.cs:5:13:5:15 | access to parameter inc | 4 | +| Conditions.cs:3:10:3:19 | Entry | Conditions.cs:5:13:5:15 | access to parameter inc | 6 | | Conditions.cs:5:9:6:16 | After if (...) ... | Conditions.cs:7:14:7:16 | access to parameter inc | 4 | | Conditions.cs:5:13:5:15 | After access to parameter inc [false] | Conditions.cs:5:13:5:15 | After access to parameter inc [false] | 1 | | Conditions.cs:5:13:5:15 | After access to parameter inc [true] | Conditions.cs:6:13:6:16 | After ...; | 7 | | Conditions.cs:7:9:8:16 | After if (...) ... | Conditions.cs:3:10:3:19 | Exit | 4 | | Conditions.cs:7:14:7:16 | After access to parameter inc [false] | Conditions.cs:8:13:8:16 | After ...; | 8 | | Conditions.cs:7:14:7:16 | After access to parameter inc [true] | Conditions.cs:7:13:7:16 | After !... [false] | 2 | -| Conditions.cs:11:9:11:10 | Entry | Conditions.cs:14:13:14:13 | access to parameter b | 11 | +| Conditions.cs:11:9:11:10 | Entry | Conditions.cs:14:13:14:13 | access to parameter b | 12 | | Conditions.cs:14:9:15:16 | After if (...) ... | Conditions.cs:16:13:16:17 | ... > ... | 6 | | Conditions.cs:14:13:14:13 | After access to parameter b [false] | Conditions.cs:14:13:14:13 | After access to parameter b [false] | 1 | | Conditions.cs:14:13:14:13 | After access to parameter b [true] | Conditions.cs:15:13:15:16 | After ...; | 7 | @@ -333,7 +333,7 @@ | Conditions.cs:17:13:18:20 | After if (...) ... | Conditions.cs:17:13:18:20 | After if (...) ... | 1 | | Conditions.cs:17:18:17:18 | After access to parameter b [false] | Conditions.cs:18:17:18:20 | After ...; | 8 | | Conditions.cs:17:18:17:18 | After access to parameter b [true] | Conditions.cs:17:17:17:18 | After !... [false] | 2 | -| Conditions.cs:22:9:22:10 | Entry | Conditions.cs:25:13:25:14 | access to parameter b1 | 11 | +| Conditions.cs:22:9:22:10 | Entry | Conditions.cs:25:13:25:14 | access to parameter b1 | 13 | | Conditions.cs:25:9:27:20 | After if (...) ... | Conditions.cs:28:13:28:14 | access to parameter b2 | 3 | | Conditions.cs:25:13:25:14 | After access to parameter b1 [false] | Conditions.cs:25:13:25:14 | After access to parameter b1 [false] | 1 | | Conditions.cs:25:13:25:14 | After access to parameter b1 [true] | Conditions.cs:26:17:26:18 | access to parameter b2 | 3 | @@ -343,7 +343,7 @@ | Conditions.cs:28:9:29:16 | After if (...) ... | Conditions.cs:22:9:22:10 | Exit | 6 | | Conditions.cs:28:13:28:14 | After access to parameter b2 [false] | Conditions.cs:28:13:28:14 | After access to parameter b2 [false] | 1 | | Conditions.cs:28:13:28:14 | After access to parameter b2 [true] | Conditions.cs:29:13:29:16 | After ...; | 7 | -| Conditions.cs:33:9:33:10 | Entry | Conditions.cs:37:13:37:14 | access to parameter b1 | 18 | +| Conditions.cs:33:9:33:10 | Entry | Conditions.cs:37:13:37:14 | access to parameter b1 | 19 | | Conditions.cs:37:9:38:20 | After if (...) ... | Conditions.cs:39:13:39:14 | access to local variable b2 | 3 | | Conditions.cs:37:13:37:14 | After access to parameter b1 [false] | Conditions.cs:37:13:37:14 | After access to parameter b1 [false] | 1 | | Conditions.cs:37:13:37:14 | After access to parameter b1 [true] | Conditions.cs:38:13:38:20 | After ...; | 8 | @@ -353,14 +353,14 @@ | Conditions.cs:41:9:42:16 | After if (...) ... | Conditions.cs:33:9:33:10 | Exit | 6 | | Conditions.cs:41:13:41:14 | After access to local variable b2 [false] | Conditions.cs:41:13:41:14 | After access to local variable b2 [false] | 1 | | Conditions.cs:41:13:41:14 | After access to local variable b2 [true] | Conditions.cs:42:13:42:16 | After ...; | 7 | -| Conditions.cs:46:9:46:10 | Entry | Conditions.cs:49:9:53:9 | while (...) ... | 10 | +| Conditions.cs:46:9:46:10 | Entry | Conditions.cs:49:9:53:9 | while (...) ... | 12 | | Conditions.cs:49:9:53:9 | [LoopHeader] while (...) ... | Conditions.cs:49:16:49:22 | ... > ... | 8 | | Conditions.cs:49:16:49:22 | After ... > ... [false] | Conditions.cs:46:9:46:10 | Exit | 7 | | Conditions.cs:49:16:49:22 | After ... > ... [true] | Conditions.cs:51:17:51:17 | access to parameter b | 4 | | Conditions.cs:51:13:52:20 | After if (...) ... | Conditions.cs:50:9:53:9 | After {...} | 2 | | Conditions.cs:51:17:51:17 | After access to parameter b [false] | Conditions.cs:51:17:51:17 | After access to parameter b [false] | 1 | | Conditions.cs:51:17:51:17 | After access to parameter b [true] | Conditions.cs:52:17:52:20 | After ...; | 7 | -| Conditions.cs:57:9:57:10 | Entry | Conditions.cs:60:9:64:9 | while (...) ... | 10 | +| Conditions.cs:57:9:57:10 | Entry | Conditions.cs:60:9:64:9 | while (...) ... | 12 | | Conditions.cs:60:9:64:9 | [LoopHeader] while (...) ... | Conditions.cs:60:16:60:22 | ... > ... | 8 | | Conditions.cs:60:16:60:22 | After ... > ... [false] | Conditions.cs:65:13:65:13 | access to parameter b | 4 | | Conditions.cs:60:16:60:22 | After ... > ... [true] | Conditions.cs:62:17:62:17 | access to parameter b | 4 | @@ -370,7 +370,7 @@ | Conditions.cs:65:9:66:16 | After if (...) ... | Conditions.cs:57:9:57:10 | Exit | 6 | | Conditions.cs:65:13:65:13 | After access to parameter b [false] | Conditions.cs:65:13:65:13 | After access to parameter b [false] | 1 | | Conditions.cs:65:13:65:13 | After access to parameter b [true] | Conditions.cs:66:13:66:16 | After ...; | 7 | -| Conditions.cs:70:9:70:10 | Entry | Conditions.cs:74:27:74:28 | access to parameter ss | 25 | +| Conditions.cs:70:9:70:10 | Entry | Conditions.cs:74:27:74:28 | access to parameter ss | 26 | | Conditions.cs:74:9:80:9 | After foreach (... ... in ...) ... | Conditions.cs:81:13:81:13 | access to local variable b | 3 | | Conditions.cs:74:22:74:22 | String _ | Conditions.cs:76:17:76:17 | access to local variable b | 4 | | Conditions.cs:74:27:74:28 | After access to parameter ss [empty] | Conditions.cs:74:27:74:28 | After access to parameter ss [empty] | 1 | @@ -384,7 +384,7 @@ | Conditions.cs:81:9:82:16 | After if (...) ... | Conditions.cs:70:9:70:10 | Exit | 6 | | Conditions.cs:81:13:81:13 | After access to local variable b [false] | Conditions.cs:81:13:81:13 | After access to local variable b [false] | 1 | | Conditions.cs:81:13:81:13 | After access to local variable b [true] | Conditions.cs:82:13:82:16 | After ...; | 7 | -| Conditions.cs:86:9:86:10 | Entry | Conditions.cs:90:27:90:28 | access to parameter ss | 25 | +| Conditions.cs:86:9:86:10 | Entry | Conditions.cs:90:27:90:28 | access to parameter ss | 26 | | Conditions.cs:90:9:98:9 | After foreach (... ... in ...) ... | Conditions.cs:86:9:86:10 | Exit | 6 | | Conditions.cs:90:22:90:22 | String _ | Conditions.cs:92:17:92:17 | access to local variable b | 4 | | Conditions.cs:90:27:90:28 | After access to parameter ss [empty] | Conditions.cs:90:27:90:28 | After access to parameter ss [empty] | 1 | @@ -398,7 +398,7 @@ | Conditions.cs:96:13:97:20 | After if (...) ... | Conditions.cs:90:9:98:9 | [LoopHeader] foreach (... ... in ...) ... | 3 | | Conditions.cs:96:17:96:17 | After access to local variable b [false] | Conditions.cs:96:17:96:17 | After access to local variable b [false] | 1 | | Conditions.cs:96:17:96:17 | After access to local variable b [true] | Conditions.cs:97:17:97:20 | After ...; | 7 | -| Conditions.cs:102:12:102:13 | Entry | Conditions.cs:105:13:105:13 | access to parameter b | 14 | +| Conditions.cs:102:12:102:13 | Entry | Conditions.cs:105:13:105:13 | access to parameter b | 15 | | Conditions.cs:105:9:106:20 | After if (...) ... | Conditions.cs:107:13:107:24 | ... > ... | 9 | | Conditions.cs:105:13:105:13 | After access to parameter b [false] | Conditions.cs:105:13:105:13 | After access to parameter b [false] | 1 | | Conditions.cs:105:13:105:13 | After access to parameter b [true] | Conditions.cs:106:13:106:20 | After ...; | 8 | @@ -408,7 +408,7 @@ | Conditions.cs:108:13:109:24 | After if (...) ... | Conditions.cs:108:13:109:24 | After if (...) ... | 1 | | Conditions.cs:108:18:108:18 | After access to parameter b [false] | Conditions.cs:109:17:109:24 | After ...; | 9 | | Conditions.cs:108:18:108:18 | After access to parameter b [true] | Conditions.cs:108:17:108:18 | After !... [false] | 2 | -| Conditions.cs:113:10:113:11 | Entry | Conditions.cs:116:18:116:22 | After Int32 i = ... | 15 | +| Conditions.cs:113:10:113:11 | Entry | Conditions.cs:116:18:116:22 | After Int32 i = ... | 16 | | Conditions.cs:116:25:116:39 | After ... < ... [false] | Conditions.cs:113:10:113:11 | Exit | 5 | | Conditions.cs:116:25:116:39 | After ... < ... [true] | Conditions.cs:119:18:119:21 | access to local variable last | 23 | | Conditions.cs:116:25:116:39 | Before ... < ... | Conditions.cs:116:25:116:39 | ... < ... | 7 | @@ -426,7 +426,7 @@ | Conditions.cs:135:17:138:17 | After if (...) ... | Conditions.cs:134:13:139:13 | After {...} | 2 | | Conditions.cs:135:21:135:26 | After access to field Field2 [false] | Conditions.cs:135:21:135:26 | After access to field Field2 [false] | 1 | | Conditions.cs:135:21:135:26 | After access to field Field2 [true] | Conditions.cs:136:17:138:17 | After {...} | 12 | -| Conditions.cs:143:10:143:12 | Entry | Conditions.cs:145:17:145:17 | access to parameter b | 7 | +| Conditions.cs:143:10:143:12 | Entry | Conditions.cs:145:17:145:17 | access to parameter b | 8 | | Conditions.cs:145:17:145:17 | After access to parameter b [false] | Conditions.cs:145:27:145:29 | "b" | 2 | | Conditions.cs:145:17:145:17 | After access to parameter b [true] | Conditions.cs:145:21:145:23 | "a" | 2 | | Conditions.cs:145:17:145:29 | After ... ? ... : ... | Conditions.cs:146:13:146:13 | access to parameter b | 6 | @@ -434,7 +434,13 @@ | Conditions.cs:146:13:146:13 | After access to parameter b [false] | Conditions.cs:149:13:149:49 | After ...; | 14 | | Conditions.cs:146:13:146:13 | After access to parameter b [true] | Conditions.cs:147:13:147:49 | After ...; | 14 | | DefaultParam.cs:1:7:1:18 | Entry | DefaultParam.cs:1:7:1:18 | Exit | 11 | -| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:12:3:13 | Exit | 21 | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:30:3:30 | s | 3 | +| DefaultParam.cs:3:30:3:30 | After s [match] | DefaultParam.cs:3:30:3:30 | After s [match] | 1 | +| DefaultParam.cs:3:30:3:30 | After s [no-match] | DefaultParam.cs:3:34:3:35 | "" | 2 | +| DefaultParam.cs:3:42:3:42 | After i [match] | DefaultParam.cs:3:42:3:42 | After i [match] | 1 | +| DefaultParam.cs:3:42:3:42 | After i [no-match] | DefaultParam.cs:3:46:3:46 | 0 | 2 | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | i | 1 | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:3:12:3:13 | Exit | 20 | | ExitMethods.cs:6:7:6:17 | Entry | ExitMethods.cs:6:7:6:17 | Exit | 11 | | ExitMethods.cs:8:10:8:11 | Entry | ExitMethods.cs:8:10:8:11 | Exit | 12 | | ExitMethods.cs:14:10:14:11 | Entry | ExitMethods.cs:14:10:14:11 | Exit | 12 | @@ -450,11 +456,11 @@ | ExitMethods.cs:48:9:51:9 | After catch (...) {...} [no-match] | ExitMethods.cs:38:10:38:11 | Exceptional Exit | 2 | | ExitMethods.cs:54:10:54:11 | Entry | ExitMethods.cs:54:10:54:11 | Exit | 7 | | ExitMethods.cs:60:10:60:11 | Entry | ExitMethods.cs:60:10:60:11 | Exit | 7 | -| ExitMethods.cs:66:17:66:26 | Entry | ExitMethods.cs:68:13:68:13 | access to parameter b | 4 | +| ExitMethods.cs:66:17:66:26 | Entry | ExitMethods.cs:68:13:68:13 | access to parameter b | 5 | | ExitMethods.cs:66:17:66:26 | Exit | ExitMethods.cs:66:17:66:26 | Exit | 1 | | ExitMethods.cs:68:13:68:13 | After access to parameter b [false] | ExitMethods.cs:66:17:66:26 | Normal Exit | 4 | | ExitMethods.cs:68:13:68:13 | After access to parameter b [true] | ExitMethods.cs:66:17:66:26 | Exceptional Exit | 7 | -| ExitMethods.cs:72:17:72:27 | Entry | ExitMethods.cs:74:13:74:13 | access to parameter b | 4 | +| ExitMethods.cs:72:17:72:27 | Entry | ExitMethods.cs:74:13:74:13 | access to parameter b | 5 | | ExitMethods.cs:72:17:72:27 | Exceptional Exit | ExitMethods.cs:72:17:72:27 | Exit | 2 | | ExitMethods.cs:74:13:74:13 | After access to parameter b [false] | ExitMethods.cs:77:13:77:45 | throw ...; | 7 | | ExitMethods.cs:74:13:74:13 | After access to parameter b [true] | ExitMethods.cs:75:13:75:34 | throw ...; | 6 | @@ -466,29 +472,29 @@ | ExitMethods.cs:92:10:92:18 | Exit | ExitMethods.cs:92:10:92:18 | Exit | 1 | | ExitMethods.cs:94:9:102:9 | After try {...} ... | ExitMethods.cs:92:10:92:18 | Normal Exit | 3 | | ExitMethods.cs:105:10:105:24 | Entry | ExitMethods.cs:105:10:105:24 | Exit | 7 | -| ExitMethods.cs:110:13:110:21 | Entry | ExitMethods.cs:112:16:112:25 | ... != ... | 11 | +| ExitMethods.cs:110:13:110:21 | Entry | ExitMethods.cs:112:16:112:25 | ... != ... | 12 | | ExitMethods.cs:110:13:110:21 | Exit | ExitMethods.cs:110:13:110:21 | Exit | 1 | | ExitMethods.cs:112:16:112:25 | After ... != ... [false] | ExitMethods.cs:110:13:110:21 | Exceptional Exit | 8 | | ExitMethods.cs:112:16:112:25 | After ... != ... [true] | ExitMethods.cs:110:13:110:21 | Normal Exit | 12 | -| ExitMethods.cs:115:16:115:34 | Entry | ExitMethods.cs:117:16:117:30 | call to method Contains | 8 | +| ExitMethods.cs:115:16:115:34 | Entry | ExitMethods.cs:117:16:117:30 | call to method Contains | 9 | | ExitMethods.cs:117:16:117:30 | After call to method Contains [false] | ExitMethods.cs:117:38:117:38 | 1 | 2 | | ExitMethods.cs:117:16:117:30 | After call to method Contains [true] | ExitMethods.cs:117:34:117:34 | 0 | 2 | | ExitMethods.cs:117:16:117:38 | After ... ? ... : ... | ExitMethods.cs:115:16:115:34 | Exit | 4 | | ExitMethods.cs:120:17:120:32 | Entry | ExitMethods.cs:120:17:120:32 | Exit | 8 | | ExitMethods.cs:126:17:126:33 | Entry | ExitMethods.cs:126:17:126:33 | Exit | 8 | -| ExitMethods.cs:132:10:132:20 | Entry | ExitMethods.cs:132:33:132:49 | call to method IsFalse | 4 | +| ExitMethods.cs:132:10:132:20 | Entry | ExitMethods.cs:132:33:132:49 | call to method IsFalse | 5 | | ExitMethods.cs:132:10:132:20 | Exceptional Exit | ExitMethods.cs:132:10:132:20 | Exceptional Exit | 1 | | ExitMethods.cs:132:10:132:20 | Exit | ExitMethods.cs:132:10:132:20 | Exit | 1 | | ExitMethods.cs:132:33:132:49 | After call to method IsFalse | ExitMethods.cs:132:10:132:20 | Normal Exit | 2 | | ExitMethods.cs:134:17:134:33 | Entry | ExitMethods.cs:134:17:134:33 | Exit | 9 | -| ExitMethods.cs:140:17:140:42 | Entry | ExitMethods.cs:142:13:142:13 | access to parameter b | 4 | +| ExitMethods.cs:140:17:140:42 | Entry | ExitMethods.cs:142:13:142:13 | access to parameter b | 6 | | ExitMethods.cs:140:17:140:42 | Exceptional Exit | ExitMethods.cs:140:17:140:42 | Exit | 2 | | ExitMethods.cs:142:13:142:13 | After access to parameter b [false] | ExitMethods.cs:145:13:145:52 | call to method Throw | 8 | | ExitMethods.cs:142:13:142:13 | After access to parameter b [true] | ExitMethods.cs:143:13:143:42 | call to method Throw | 5 | -| Extensions.cs:5:23:5:29 | Entry | Extensions.cs:5:23:5:29 | Exit | 10 | -| Extensions.cs:10:24:10:29 | Entry | Extensions.cs:10:24:10:29 | Exit | 11 | +| Extensions.cs:5:23:5:29 | Entry | Extensions.cs:5:23:5:29 | Exit | 11 | +| Extensions.cs:10:24:10:29 | Entry | Extensions.cs:10:24:10:29 | Exit | 13 | | Extensions.cs:15:23:15:33 | Entry | Extensions.cs:15:23:15:33 | Exit | 7 | -| Extensions.cs:20:17:20:20 | Entry | Extensions.cs:20:17:20:20 | Exit | 37 | +| Extensions.cs:20:17:20:20 | Entry | Extensions.cs:20:17:20:20 | Exit | 38 | | Finally.cs:3:14:3:20 | Entry | Finally.cs:3:14:3:20 | Exit | 11 | | Finally.cs:7:10:7:11 | Entry | Finally.cs:11:13:11:37 | call to method WriteLine | 8 | | Finally.cs:7:10:7:11 | Exceptional Exit | Finally.cs:7:10:7:11 | Exceptional Exit | 1 | @@ -570,7 +576,7 @@ | Finally.cs:133:10:133:11 | Entry | Finally.cs:137:13:137:36 | call to method WriteLine | 8 | | Finally.cs:137:13:137:36 | After call to method WriteLine | Finally.cs:136:9:138:9 | After {...} | 3 | | Finally.cs:140:9:143:9 | {...} | Finally.cs:133:10:133:11 | Exit | 9 | -| Finally.cs:147:10:147:11 | Entry | Finally.cs:151:17:151:28 | ... == ... | 9 | +| Finally.cs:147:10:147:11 | Entry | Finally.cs:151:17:151:28 | ... == ... | 10 | | Finally.cs:147:10:147:11 | Exceptional Exit | Finally.cs:147:10:147:11 | Exceptional Exit | 1 | | Finally.cs:147:10:147:11 | Exit | Finally.cs:147:10:147:11 | Exit | 1 | | Finally.cs:149:9:169:9 | After try {...} ... | Finally.cs:147:10:147:11 | Normal Exit | 3 | @@ -591,7 +597,7 @@ | Finally.cs:172:11:172:20 | Entry | Finally.cs:172:11:172:20 | Exit | 11 | | Finally.cs:173:11:173:20 | Entry | Finally.cs:173:11:173:20 | Exit | 11 | | Finally.cs:174:11:174:20 | Entry | Finally.cs:174:11:174:20 | Exit | 11 | -| Finally.cs:176:10:176:11 | Entry | Finally.cs:180:17:180:18 | access to parameter b1 | 6 | +| Finally.cs:176:10:176:11 | Entry | Finally.cs:180:17:180:18 | access to parameter b1 | 8 | | Finally.cs:176:10:176:11 | Exceptional Exit | Finally.cs:176:10:176:11 | Exceptional Exit | 1 | | Finally.cs:176:10:176:11 | Exit | Finally.cs:176:10:176:11 | Exit | 1 | | Finally.cs:178:9:192:9 | After try {...} ... | Finally.cs:176:10:176:11 | Normal Exit | 3 | @@ -610,7 +616,7 @@ | Finally.cs:188:38:188:39 | After access to parameter b2 [true] | Finally.cs:190:21:190:22 | access to parameter b1 | 4 | | Finally.cs:190:21:190:22 | After access to parameter b1 [false] | Finally.cs:189:13:191:13 | After {...} | 3 | | Finally.cs:190:21:190:22 | After access to parameter b1 [true] | Finally.cs:190:25:190:47 | throw ...; | 6 | -| Finally.cs:195:10:195:12 | Entry | Finally.cs:199:17:199:18 | access to parameter b1 | 6 | +| Finally.cs:195:10:195:12 | Entry | Finally.cs:199:17:199:18 | access to parameter b1 | 9 | | Finally.cs:195:10:195:12 | Exceptional Exit | Finally.cs:195:10:195:12 | Exceptional Exit | 1 | | Finally.cs:195:10:195:12 | Exit | Finally.cs:195:10:195:12 | Exit | 1 | | Finally.cs:197:9:212:9 | After try {...} ... | Finally.cs:195:10:195:12 | Normal Exit | 13 | @@ -629,7 +635,7 @@ | Finally.cs:220:13:220:36 | After call to method WriteLine | Finally.cs:219:9:221:9 | After {...} | 3 | | Finally.cs:222:9:225:9 | catch {...} | Finally.cs:223:9:225:9 | After {...} | 10 | | Finally.cs:227:9:229:9 | {...} | Finally.cs:216:10:216:12 | Exit | 18 | -| Finally.cs:233:10:233:12 | Entry | Finally.cs:239:21:239:22 | access to parameter b1 | 8 | +| Finally.cs:233:10:233:12 | Entry | Finally.cs:239:21:239:22 | access to parameter b1 | 10 | | Finally.cs:233:10:233:12 | Exceptional Exit | Finally.cs:233:10:233:12 | Exceptional Exit | 1 | | Finally.cs:233:10:233:12 | Exit | Finally.cs:233:10:233:12 | Exit | 1 | | Finally.cs:235:9:259:9 | After try {...} ... | Finally.cs:233:10:233:12 | Normal Exit | 9 | @@ -645,24 +651,24 @@ | Finally.cs:250:17:252:17 | {...} | Finally.cs:250:17:252:17 | After {...} | 8 | | Finally.cs:254:13:254:44 | After call to method WriteLine | Finally.cs:236:9:255:9 | After {...} | 3 | | Finally.cs:257:9:259:9 | {...} | Finally.cs:257:9:259:9 | After {...} | 8 | -| Finally.cs:263:10:263:12 | Entry | Finally.cs:267:13:267:34 | call to method WriteLine | 8 | +| Finally.cs:263:10:263:12 | Entry | Finally.cs:267:13:267:34 | call to method WriteLine | 9 | | Finally.cs:263:10:263:12 | Exceptional Exit | Finally.cs:263:10:263:12 | Exceptional Exit | 1 | | Finally.cs:263:10:263:12 | Exit | Finally.cs:263:10:263:12 | Exit | 1 | | Finally.cs:265:9:273:9 | After try {...} ... | Finally.cs:263:10:263:12 | Normal Exit | 3 | | Finally.cs:267:13:267:34 | After call to method WriteLine | Finally.cs:266:9:268:9 | After {...} | 3 | | Finally.cs:270:9:273:9 | {...} | Finally.cs:270:9:273:9 | After {...} | 15 | | Foreach.cs:4:7:4:13 | Entry | Foreach.cs:4:7:4:13 | Exit | 11 | -| Foreach.cs:6:10:6:11 | Entry | Foreach.cs:8:29:8:32 | access to parameter args | 4 | +| Foreach.cs:6:10:6:11 | Entry | Foreach.cs:8:29:8:32 | access to parameter args | 5 | | Foreach.cs:8:9:9:13 | After foreach (... ... in ...) ... | Foreach.cs:6:10:6:11 | Exit | 4 | | Foreach.cs:8:22:8:24 | String arg | Foreach.cs:8:9:9:13 | [LoopHeader] foreach (... ... in ...) ... | 3 | | Foreach.cs:8:29:8:32 | After access to parameter args [empty] | Foreach.cs:8:29:8:32 | After access to parameter args [empty] | 1 | | Foreach.cs:8:29:8:32 | After access to parameter args [non-empty] | Foreach.cs:8:29:8:32 | After access to parameter args [non-empty] | 1 | -| Foreach.cs:12:10:12:11 | Entry | Foreach.cs:14:27:14:30 | access to parameter args | 4 | +| Foreach.cs:12:10:12:11 | Entry | Foreach.cs:14:27:14:30 | access to parameter args | 5 | | Foreach.cs:14:9:15:13 | After foreach (... ... in ...) ... | Foreach.cs:12:10:12:11 | Exit | 4 | | Foreach.cs:14:22:14:22 | String _ | Foreach.cs:14:9:15:13 | [LoopHeader] foreach (... ... in ...) ... | 3 | | Foreach.cs:14:27:14:30 | After access to parameter args [empty] | Foreach.cs:14:27:14:30 | After access to parameter args [empty] | 1 | | Foreach.cs:14:27:14:30 | After access to parameter args [non-empty] | Foreach.cs:14:27:14:30 | After access to parameter args [non-empty] | 1 | -| Foreach.cs:18:10:18:11 | Entry | Foreach.cs:20:27:20:27 | access to parameter e | 6 | +| Foreach.cs:18:10:18:11 | Entry | Foreach.cs:20:27:20:27 | access to parameter e | 7 | | Foreach.cs:20:9:21:11 | After foreach (... ... in ...) ... | Foreach.cs:18:10:18:11 | Exit | 4 | | Foreach.cs:20:22:20:22 | String x | Foreach.cs:20:9:21:11 | [LoopHeader] foreach (... ... in ...) ... | 3 | | Foreach.cs:20:27:20:27 | After access to parameter e [non-null] | Foreach.cs:20:27:20:38 | call to method ToArray | 2 | @@ -673,17 +679,17 @@ | Foreach.cs:20:27:20:68 | After ... ?? ... [non-empty] | Foreach.cs:20:27:20:68 | After ... ?? ... [non-empty] | 1 | | Foreach.cs:20:43:20:68 | After call to method Empty [empty] | Foreach.cs:20:43:20:68 | After call to method Empty [empty] | 1 | | Foreach.cs:20:43:20:68 | After call to method Empty [non-empty] | Foreach.cs:20:43:20:68 | After call to method Empty [non-empty] | 1 | -| Foreach.cs:24:10:24:11 | Entry | Foreach.cs:26:36:26:39 | access to parameter args | 4 | +| Foreach.cs:24:10:24:11 | Entry | Foreach.cs:26:36:26:39 | access to parameter args | 5 | | Foreach.cs:26:9:27:11 | After foreach (... ... in ...) ... | Foreach.cs:24:10:24:11 | Exit | 4 | | Foreach.cs:26:18:26:31 | Before (..., ...) | Foreach.cs:26:9:27:11 | [LoopHeader] foreach (... ... in ...) ... | 7 | | Foreach.cs:26:36:26:39 | After access to parameter args [empty] | Foreach.cs:26:36:26:39 | After access to parameter args [empty] | 1 | | Foreach.cs:26:36:26:39 | After access to parameter args [non-empty] | Foreach.cs:26:36:26:39 | After access to parameter args [non-empty] | 1 | -| Foreach.cs:30:10:30:11 | Entry | Foreach.cs:32:32:32:35 | access to parameter args | 4 | +| Foreach.cs:30:10:30:11 | Entry | Foreach.cs:32:32:32:35 | access to parameter args | 5 | | Foreach.cs:32:9:33:11 | After foreach (... ... in ...) ... | Foreach.cs:30:10:30:11 | Exit | 4 | | Foreach.cs:32:18:32:27 | Before (..., ...) | Foreach.cs:32:9:33:11 | [LoopHeader] foreach (... ... in ...) ... | 7 | | Foreach.cs:32:32:32:35 | After access to parameter args [empty] | Foreach.cs:32:32:32:35 | After access to parameter args [empty] | 1 | | Foreach.cs:32:32:32:35 | After access to parameter args [non-empty] | Foreach.cs:32:32:32:35 | After access to parameter args [non-empty] | 1 | -| Foreach.cs:36:10:36:11 | Entry | Foreach.cs:38:39:38:42 | access to parameter args | 4 | +| Foreach.cs:36:10:36:11 | Entry | Foreach.cs:38:39:38:42 | access to parameter args | 5 | | Foreach.cs:38:9:39:11 | After foreach (... ... in ...) ... | Foreach.cs:36:10:36:11 | Exit | 4 | | Foreach.cs:38:18:38:34 | Before (..., ...) | Foreach.cs:38:9:39:11 | [LoopHeader] foreach (... ... in ...) ... | 7 | | Foreach.cs:38:39:38:42 | After access to parameter args [empty] | Foreach.cs:38:39:38:42 | After access to parameter args [empty] | 1 | @@ -691,19 +697,19 @@ | Initializers.cs:3:7:3:18 | Entry | Initializers.cs:3:7:3:18 | Exit | 9 | | Initializers.cs:3:7:3:18 | Entry | Initializers.cs:3:7:3:18 | Exit | 27 | | Initializers.cs:8:5:8:16 | Entry | Initializers.cs:8:5:8:16 | Exit | 11 | -| Initializers.cs:10:5:10:16 | Entry | Initializers.cs:10:5:10:16 | Exit | 11 | +| Initializers.cs:10:5:10:16 | Entry | Initializers.cs:10:5:10:16 | Exit | 12 | | Initializers.cs:12:10:12:10 | Entry | Initializers.cs:12:10:12:10 | Exit | 48 | | Initializers.cs:20:11:20:23 | Entry | Initializers.cs:20:11:20:23 | Exit | 11 | | Initializers.cs:20:11:20:23 | Entry | Initializers.cs:20:11:20:23 | Exit | 19 | | Initializers.cs:26:11:26:13 | Entry | Initializers.cs:26:11:26:13 | Exit | 11 | | Initializers.cs:31:9:31:11 | Entry | Initializers.cs:31:9:31:11 | Exit | 22 | -| Initializers.cs:33:9:33:11 | Entry | Initializers.cs:33:9:33:11 | Exit | 18 | -| Initializers.cs:35:9:35:11 | Entry | Initializers.cs:35:9:35:11 | Exit | 26 | +| Initializers.cs:33:9:33:11 | Entry | Initializers.cs:33:9:33:11 | Exit | 19 | +| Initializers.cs:35:9:35:11 | Entry | Initializers.cs:35:9:35:11 | Exit | 28 | | Initializers.cs:39:7:39:23 | Entry | Initializers.cs:39:7:39:23 | Exit | 11 | | Initializers.cs:41:11:41:18 | Entry | Initializers.cs:41:11:41:18 | Exit | 11 | -| Initializers.cs:51:10:51:13 | Entry | Initializers.cs:51:10:51:13 | Exit | 245 | +| Initializers.cs:51:10:51:13 | Entry | Initializers.cs:51:10:51:13 | Exit | 246 | | LoopUnrolling.cs:5:7:5:19 | Entry | LoopUnrolling.cs:5:7:5:19 | Exit | 11 | -| LoopUnrolling.cs:7:10:7:11 | Entry | LoopUnrolling.cs:9:13:9:28 | ... == ... | 10 | +| LoopUnrolling.cs:7:10:7:11 | Entry | LoopUnrolling.cs:9:13:9:28 | ... == ... | 11 | | LoopUnrolling.cs:7:10:7:11 | Normal Exit | LoopUnrolling.cs:7:10:7:11 | Exit | 2 | | LoopUnrolling.cs:9:13:9:28 | After ... == ... [false] | LoopUnrolling.cs:11:29:11:32 | access to parameter args | 4 | | LoopUnrolling.cs:9:13:9:28 | After ... == ... [true] | LoopUnrolling.cs:10:13:10:19 | return ...; | 3 | @@ -716,7 +722,7 @@ | LoopUnrolling.cs:18:22:18:22 | String x | LoopUnrolling.cs:18:9:19:33 | [LoopHeader] foreach (... ... in ...) ... | 8 | | LoopUnrolling.cs:18:27:18:28 | After access to local variable xs [empty] | LoopUnrolling.cs:18:27:18:28 | After access to local variable xs [empty] | 1 | | LoopUnrolling.cs:18:27:18:28 | After access to local variable xs [non-empty] | LoopUnrolling.cs:18:27:18:28 | After access to local variable xs [non-empty] | 1 | -| LoopUnrolling.cs:22:10:22:11 | Entry | LoopUnrolling.cs:24:29:24:32 | access to parameter args | 4 | +| LoopUnrolling.cs:22:10:22:11 | Entry | LoopUnrolling.cs:24:29:24:32 | access to parameter args | 5 | | LoopUnrolling.cs:24:9:26:40 | After foreach (... ... in ...) ... | LoopUnrolling.cs:22:10:22:11 | Exit | 4 | | LoopUnrolling.cs:24:22:24:24 | Char arg | LoopUnrolling.cs:25:34:25:37 | access to parameter args | 3 | | LoopUnrolling.cs:24:29:24:32 | After access to parameter args [empty] | LoopUnrolling.cs:24:29:24:32 | After access to parameter args [empty] | 1 | @@ -743,7 +749,7 @@ | LoopUnrolling.cs:48:27:48:28 | After access to local variable xs [empty] | LoopUnrolling.cs:45:10:45:11 | Exit | 5 | | LoopUnrolling.cs:48:27:48:28 | After access to local variable xs [non-empty] | LoopUnrolling.cs:49:9:52:9 | {...} | 3 | | LoopUnrolling.cs:50:9:50:13 | Label: | LoopUnrolling.cs:51:13:51:23 | goto ...; | 9 | -| LoopUnrolling.cs:55:10:55:11 | Entry | LoopUnrolling.cs:58:27:58:28 | access to local variable xs | 20 | +| LoopUnrolling.cs:55:10:55:11 | Entry | LoopUnrolling.cs:58:27:58:28 | access to local variable xs | 21 | | LoopUnrolling.cs:58:9:64:9 | After foreach (... ... in ...) ... | LoopUnrolling.cs:55:10:55:11 | Exit | 4 | | LoopUnrolling.cs:58:22:58:22 | String x | LoopUnrolling.cs:60:17:60:17 | access to parameter b | 4 | | LoopUnrolling.cs:58:27:58:28 | After access to local variable xs [empty] | LoopUnrolling.cs:58:27:58:28 | After access to local variable xs [empty] | 1 | @@ -754,7 +760,7 @@ | LoopUnrolling.cs:62:13:63:37 | After if (...) ... | LoopUnrolling.cs:58:9:64:9 | [LoopHeader] foreach (... ... in ...) ... | 3 | | LoopUnrolling.cs:62:17:62:17 | After access to parameter b [false] | LoopUnrolling.cs:62:17:62:17 | After access to parameter b [false] | 1 | | LoopUnrolling.cs:62:17:62:17 | After access to parameter b [true] | LoopUnrolling.cs:63:17:63:37 | After ...; | 7 | -| LoopUnrolling.cs:67:10:67:11 | Entry | LoopUnrolling.cs:69:14:69:23 | call to method Any | 7 | +| LoopUnrolling.cs:67:10:67:11 | Entry | LoopUnrolling.cs:69:14:69:23 | call to method Any | 8 | | LoopUnrolling.cs:67:10:67:11 | Normal Exit | LoopUnrolling.cs:67:10:67:11 | Exit | 2 | | LoopUnrolling.cs:69:14:69:23 | After call to method Any [false] | LoopUnrolling.cs:70:13:70:19 | return ...; | 4 | | LoopUnrolling.cs:69:14:69:23 | After call to method Any [true] | LoopUnrolling.cs:72:29:72:32 | access to parameter args | 11 | @@ -786,7 +792,7 @@ | MultiImplementationA.cs:7:21:7:23 | Entry | MultiImplementationA.cs:7:21:7:23 | Entry | 1 | | MultiImplementationA.cs:7:21:7:23 | Exit | MultiImplementationA.cs:7:21:7:23 | Exit | 1 | | MultiImplementationA.cs:7:25:7:39 | {...} | MultiImplementationA.cs:7:21:7:23 | Exceptional Exit | 5 | -| MultiImplementationA.cs:7:41:7:43 | Entry | MultiImplementationA.cs:7:41:7:43 | Entry | 1 | +| MultiImplementationA.cs:7:41:7:43 | Entry | MultiImplementationA.cs:7:41:7:43 | value | 2 | | MultiImplementationA.cs:7:41:7:43 | Exit | MultiImplementationA.cs:7:41:7:43 | Exit | 1 | | MultiImplementationA.cs:7:45:7:59 | {...} | MultiImplementationA.cs:7:41:7:43 | Exceptional Exit | 5 | | MultiImplementationA.cs:8:16:8:16 | Entry | MultiImplementationA.cs:8:16:8:16 | Entry | 1 | @@ -795,21 +801,21 @@ | MultiImplementationA.cs:11:7:11:8 | Entry | MultiImplementationA.cs:11:7:11:8 | Entry | 1 | | MultiImplementationA.cs:11:7:11:8 | Normal Exit | MultiImplementationA.cs:11:7:11:8 | Exit | 2 | | MultiImplementationA.cs:13:16:13:20 | Before ... = ... | MultiImplementationA.cs:24:32:24:34 | After ... = ... | 16 | -| MultiImplementationA.cs:14:31:14:31 | Entry | MultiImplementationA.cs:14:31:14:31 | Entry | 1 | +| MultiImplementationA.cs:14:31:14:31 | Entry | MultiImplementationA.cs:14:25:14:25 | i | 2 | | MultiImplementationA.cs:14:31:14:31 | Exit | MultiImplementationA.cs:14:31:14:31 | Exit | 1 | | MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | Normal Exit | 2 | -| MultiImplementationA.cs:15:36:15:38 | Entry | MultiImplementationA.cs:15:36:15:38 | Entry | 1 | +| MultiImplementationA.cs:15:36:15:38 | Entry | MultiImplementationA.cs:15:31:15:31 | s | 2 | | MultiImplementationA.cs:15:36:15:38 | Exit | MultiImplementationA.cs:15:36:15:38 | Exit | 1 | | MultiImplementationA.cs:15:40:15:52 | {...} | MultiImplementationA.cs:15:36:15:38 | Normal Exit | 5 | -| MultiImplementationA.cs:15:54:15:56 | Entry | MultiImplementationA.cs:15:54:15:56 | Entry | 1 | +| MultiImplementationA.cs:15:54:15:56 | Entry | MultiImplementationA.cs:15:54:15:56 | value | 3 | | MultiImplementationA.cs:15:54:15:56 | Normal Exit | MultiImplementationA.cs:15:54:15:56 | Exit | 2 | | MultiImplementationA.cs:15:58:15:60 | {...} | MultiImplementationA.cs:15:58:15:60 | {...} | 1 | -| MultiImplementationA.cs:16:17:16:18 | Entry | MultiImplementationA.cs:16:17:16:18 | Entry | 1 | +| MultiImplementationA.cs:16:17:16:18 | Entry | MultiImplementationA.cs:16:24:16:24 | i | 2 | | MultiImplementationA.cs:16:17:16:18 | Normal Exit | MultiImplementationA.cs:16:17:16:18 | Exit | 2 | | MultiImplementationA.cs:17:5:19:5 | {...} | MultiImplementationA.cs:17:5:19:5 | After {...} | 3 | | MultiImplementationA.cs:18:9:18:22 | Entry | MultiImplementationA.cs:18:9:18:22 | Exit | 4 | | MultiImplementationA.cs:20:12:20:13 | Before call to method | MultiImplementationA.cs:20:12:20:13 | Normal Exit | 20 | -| MultiImplementationA.cs:20:12:20:13 | Entry | MultiImplementationA.cs:20:12:20:13 | Entry | 1 | +| MultiImplementationA.cs:20:12:20:13 | Entry | MultiImplementationA.cs:20:19:20:19 | i | 2 | | MultiImplementationA.cs:20:12:20:13 | Exit | MultiImplementationA.cs:20:12:20:13 | Exit | 1 | | MultiImplementationA.cs:21:12:21:13 | Entry | MultiImplementationA.cs:21:12:21:13 | Entry | 1 | | MultiImplementationA.cs:21:12:21:13 | Normal Exit | MultiImplementationA.cs:21:12:21:13 | Exit | 2 | @@ -817,7 +823,7 @@ | MultiImplementationA.cs:22:6:22:7 | Entry | MultiImplementationA.cs:22:6:22:7 | Entry | 1 | | MultiImplementationA.cs:22:6:22:7 | Exit | MultiImplementationA.cs:22:6:22:7 | Exit | 1 | | MultiImplementationA.cs:22:11:22:13 | {...} | MultiImplementationA.cs:22:6:22:7 | Normal Exit | 2 | -| MultiImplementationA.cs:23:28:23:35 | Entry | MultiImplementationA.cs:23:28:23:35 | Entry | 1 | +| MultiImplementationA.cs:23:28:23:35 | Entry | MultiImplementationA.cs:23:44:23:44 | i | 2 | | MultiImplementationA.cs:23:28:23:35 | Exit | MultiImplementationA.cs:23:28:23:35 | Exit | 1 | | MultiImplementationA.cs:23:50:23:53 | null | MultiImplementationA.cs:23:28:23:35 | Normal Exit | 2 | | MultiImplementationA.cs:28:7:28:8 | Before call to method | MultiImplementationA.cs:28:7:28:8 | {...} | 8 | @@ -850,24 +856,24 @@ | MultiImplementationB.cs:30:15:30:16 | Before call to method | MultiImplementationB.cs:30:15:30:16 | {...} | 8 | | MultiImplementationB.cs:32:17:32:17 | 0 | MultiImplementationA.cs:36:9:36:10 | Normal Exit | 2 | | NullCoalescing.cs:1:7:1:20 | Entry | NullCoalescing.cs:1:7:1:20 | Exit | 11 | -| NullCoalescing.cs:3:9:3:10 | Entry | NullCoalescing.cs:3:23:3:23 | access to parameter i | 3 | +| NullCoalescing.cs:3:9:3:10 | Entry | NullCoalescing.cs:3:23:3:23 | access to parameter i | 4 | | NullCoalescing.cs:3:23:3:23 | After access to parameter i [non-null] | NullCoalescing.cs:3:23:3:23 | After access to parameter i [non-null] | 1 | | NullCoalescing.cs:3:23:3:23 | After access to parameter i [null] | NullCoalescing.cs:3:28:3:28 | 0 | 2 | | NullCoalescing.cs:3:23:3:28 | After ... ?? ... | NullCoalescing.cs:3:9:3:10 | Exit | 3 | -| NullCoalescing.cs:5:9:5:10 | Entry | NullCoalescing.cs:5:25:5:25 | access to parameter b | 4 | +| NullCoalescing.cs:5:9:5:10 | Entry | NullCoalescing.cs:5:25:5:25 | access to parameter b | 5 | | NullCoalescing.cs:5:24:5:43 | After ... ? ... : ... | NullCoalescing.cs:5:9:5:10 | Exit | 3 | | NullCoalescing.cs:5:25:5:25 | After access to parameter b [non-null] | NullCoalescing.cs:5:25:5:25 | After access to parameter b [non-null] | 1 | | NullCoalescing.cs:5:25:5:25 | After access to parameter b [null] | NullCoalescing.cs:5:30:5:34 | After false [false] | 3 | | NullCoalescing.cs:5:25:5:34 | After ... ?? ... [false] | NullCoalescing.cs:5:43:5:43 | 1 | 2 | | NullCoalescing.cs:5:25:5:34 | After ... ?? ... [true] | NullCoalescing.cs:5:39:5:39 | 0 | 2 | -| NullCoalescing.cs:7:12:7:13 | Entry | NullCoalescing.cs:7:40:7:41 | access to parameter s1 | 3 | +| NullCoalescing.cs:7:12:7:13 | Entry | NullCoalescing.cs:7:40:7:41 | access to parameter s1 | 5 | | NullCoalescing.cs:7:40:7:41 | After access to parameter s1 [non-null] | NullCoalescing.cs:7:40:7:41 | After access to parameter s1 [non-null] | 1 | | NullCoalescing.cs:7:40:7:41 | After access to parameter s1 [null] | NullCoalescing.cs:7:46:7:47 | access to parameter s2 | 3 | | NullCoalescing.cs:7:40:7:53 | After ... ?? ... | NullCoalescing.cs:7:12:7:13 | Exit | 3 | | NullCoalescing.cs:7:46:7:47 | After access to parameter s2 [non-null] | NullCoalescing.cs:7:46:7:47 | After access to parameter s2 [non-null] | 1 | | NullCoalescing.cs:7:46:7:47 | After access to parameter s2 [null] | NullCoalescing.cs:7:52:7:53 | "" | 2 | | NullCoalescing.cs:7:46:7:53 | After ... ?? ... | NullCoalescing.cs:7:46:7:53 | After ... ?? ... | 1 | -| NullCoalescing.cs:9:12:9:13 | Entry | NullCoalescing.cs:9:37:9:37 | access to parameter b | 4 | +| NullCoalescing.cs:9:12:9:13 | Entry | NullCoalescing.cs:9:37:9:37 | access to parameter b | 6 | | NullCoalescing.cs:9:36:9:58 | After ... ?? ... | NullCoalescing.cs:9:12:9:13 | Exit | 3 | | NullCoalescing.cs:9:37:9:37 | After access to parameter b [false] | NullCoalescing.cs:9:45:9:45 | access to parameter s | 2 | | NullCoalescing.cs:9:37:9:37 | After access to parameter b [true] | NullCoalescing.cs:9:41:9:41 | access to parameter s | 2 | @@ -880,7 +886,7 @@ | NullCoalescing.cs:9:51:9:52 | After "" [non-null] | NullCoalescing.cs:9:51:9:52 | After "" [non-null] | 1 | | NullCoalescing.cs:9:51:9:52 | After "" [null] | NullCoalescing.cs:9:57:9:58 | "" | 2 | | NullCoalescing.cs:9:51:9:58 | After ... ?? ... | NullCoalescing.cs:9:51:9:58 | After ... ?? ... | 1 | -| NullCoalescing.cs:11:9:11:10 | Entry | NullCoalescing.cs:11:44:11:45 | access to parameter b1 | 4 | +| NullCoalescing.cs:11:9:11:10 | Entry | NullCoalescing.cs:11:44:11:45 | access to parameter b1 | 7 | | NullCoalescing.cs:11:43:11:68 | After ... ? ... : ... | NullCoalescing.cs:11:9:11:10 | Exit | 3 | | NullCoalescing.cs:11:44:11:45 | After access to parameter b1 [non-null] | NullCoalescing.cs:11:44:11:45 | After access to parameter b1 [non-null] | 1 | | NullCoalescing.cs:11:44:11:45 | After access to parameter b1 [null] | NullCoalescing.cs:11:51:11:52 | access to parameter b2 | 3 | @@ -891,7 +897,7 @@ | NullCoalescing.cs:11:51:11:58 | After ... && ... [false] | NullCoalescing.cs:11:51:11:58 | After ... && ... [false] | 1 | | NullCoalescing.cs:11:57:11:58 | After access to parameter b3 [false] | NullCoalescing.cs:11:57:11:58 | After access to parameter b3 [false] | 1 | | NullCoalescing.cs:11:57:11:58 | After access to parameter b3 [true] | NullCoalescing.cs:11:51:11:58 | After ... && ... [true] | 2 | -| NullCoalescing.cs:13:10:13:11 | Entry | NullCoalescing.cs:15:17:15:26 | (...) ... | 9 | +| NullCoalescing.cs:13:10:13:11 | Entry | NullCoalescing.cs:15:17:15:26 | (...) ... | 10 | | NullCoalescing.cs:15:17:15:26 | After (...) ... [non-null] | NullCoalescing.cs:15:17:15:26 | After (...) ... [non-null] | 1 | | NullCoalescing.cs:15:17:15:26 | After (...) ... [null] | NullCoalescing.cs:15:31:15:31 | 0 | 2 | | NullCoalescing.cs:15:17:15:31 | After ... ?? ... | NullCoalescing.cs:16:17:16:18 | "" | 9 | @@ -902,7 +908,7 @@ | NullCoalescing.cs:17:13:17:19 | After (...) ... [null] | NullCoalescing.cs:17:24:17:24 | 1 | 2 | | NullCoalescing.cs:17:13:17:24 | After ... ?? ... | NullCoalescing.cs:13:10:13:11 | Exit | 7 | | PartialImplementationA.cs:1:15:1:21 | Entry | PartialImplementationA.cs:1:15:1:21 | Exit | 19 | -| PartialImplementationA.cs:3:12:3:18 | Entry | PartialImplementationA.cs:3:12:3:18 | Exit | 11 | +| PartialImplementationA.cs:3:12:3:18 | Entry | PartialImplementationA.cs:3:12:3:18 | Exit | 12 | | PartialImplementationB.cs:4:12:4:18 | Entry | PartialImplementationB.cs:4:12:4:18 | Exit | 11 | | Patterns.cs:3:7:3:14 | Entry | Patterns.cs:3:7:3:14 | Exit | 11 | | Patterns.cs:5:10:5:11 | Entry | Patterns.cs:8:13:8:23 | ... is ... | 13 | @@ -929,10 +935,10 @@ | Patterns.cs:30:13:30:27 | After case ...: [no-match] | Patterns.cs:33:13:33:24 | case ...: | 2 | | Patterns.cs:33:13:33:24 | After case ...: [match] | Patterns.cs:34:17:34:22 | break; | 4 | | Patterns.cs:33:13:33:24 | After case ...: [no-match] | Patterns.cs:37:17:37:22 | break; | 11 | -| Patterns.cs:47:24:47:25 | Entry | Patterns.cs:48:9:48:20 | ... is ... | 4 | +| Patterns.cs:47:24:47:25 | Entry | Patterns.cs:48:9:48:20 | ... is ... | 5 | | Patterns.cs:48:9:48:20 | After ... is ... | Patterns.cs:47:24:47:25 | Exit | 3 | | Patterns.cs:48:9:48:20 | [MatchTrue] ... is ... | Patterns.cs:48:14:48:20 | After not ... | 5 | -| Patterns.cs:50:24:50:25 | Entry | Patterns.cs:51:9:51:21 | ... is ... | 5 | +| Patterns.cs:50:24:50:25 | Entry | Patterns.cs:51:9:51:21 | ... is ... | 6 | | Patterns.cs:51:9:51:21 | After ... is ... [false] | Patterns.cs:51:34:51:39 | ... is ... | 4 | | Patterns.cs:51:9:51:21 | [MatchTrue] ... is ... | Patterns.cs:51:25:51:30 | ... is ... | 9 | | Patterns.cs:51:9:51:39 | After ... ? ... : ... | Patterns.cs:50:24:50:25 | Exit | 3 | @@ -940,10 +946,10 @@ | Patterns.cs:51:25:51:30 | [MatchTrue] ... is ... | Patterns.cs:51:30:51:30 | 1 | 2 | | Patterns.cs:51:34:51:39 | After ... is ... | Patterns.cs:51:34:51:39 | After ... is ... | 1 | | Patterns.cs:51:34:51:39 | [MatchTrue] ... is ... | Patterns.cs:51:39:51:39 | 2 | 2 | -| Patterns.cs:53:24:53:25 | Entry | Patterns.cs:54:9:54:37 | ... is ... | 4 | +| Patterns.cs:53:24:53:25 | Entry | Patterns.cs:54:9:54:37 | ... is ... | 5 | | Patterns.cs:54:9:54:37 | After ... is ... | Patterns.cs:53:24:53:25 | Exit | 3 | | Patterns.cs:54:9:54:37 | [MatchTrue] ... is ... | Patterns.cs:54:14:54:37 | After not ... | 13 | -| Patterns.cs:56:26:56:27 | Entry | Patterns.cs:60:13:60:28 | ... => ... | 6 | +| Patterns.cs:56:26:56:27 | Entry | Patterns.cs:60:13:60:28 | ... => ... | 7 | | Patterns.cs:58:16:62:9 | After ... switch { ... } | Patterns.cs:56:26:56:27 | Exit | 4 | | Patterns.cs:60:13:60:28 | After ... => ... [match] | Patterns.cs:60:22:60:28 | "not 1" | 6 | | Patterns.cs:60:13:60:28 | After ... => ... [no-match] | Patterns.cs:61:18:61:24 | "other" | 5 | @@ -953,7 +959,7 @@ | Patterns.cs:69:13:69:33 | After ... => ... [no-match] | Patterns.cs:70:13:70:27 | ... => ... | 2 | | Patterns.cs:70:13:70:27 | After ... => ... [match] | Patterns.cs:70:18:70:27 | "possible" | 3 | | Patterns.cs:70:13:70:27 | After ... => ... [no-match] | Patterns.cs:70:13:70:27 | After ... => ... [no-match] | 1 | -| Patterns.cs:74:26:74:27 | Entry | Patterns.cs:78:13:78:24 | ... => ... | 6 | +| Patterns.cs:74:26:74:27 | Entry | Patterns.cs:78:13:78:24 | ... => ... | 7 | | Patterns.cs:76:16:82:9 | After ... switch { ... } | Patterns.cs:74:26:74:27 | Exit | 4 | | Patterns.cs:78:13:78:24 | After ... => ... [match] | Patterns.cs:78:20:78:24 | "> 1" | 6 | | Patterns.cs:78:13:78:24 | After ... => ... [no-match] | Patterns.cs:79:13:79:24 | ... => ... | 2 | @@ -961,11 +967,11 @@ | Patterns.cs:79:13:79:24 | After ... => ... [no-match] | Patterns.cs:80:13:80:20 | ... => ... | 2 | | Patterns.cs:80:13:80:20 | After ... => ... [match] | Patterns.cs:80:18:80:20 | "1" | 3 | | Patterns.cs:80:13:80:20 | After ... => ... [no-match] | Patterns.cs:81:18:81:20 | "0" | 5 | -| Patterns.cs:85:26:85:27 | Entry | Patterns.cs:85:39:85:53 | ... is ... | 5 | +| Patterns.cs:85:26:85:27 | Entry | Patterns.cs:85:39:85:53 | ... is ... | 6 | | Patterns.cs:85:39:85:53 | After ... is ... [false] | Patterns.cs:85:67:85:69 | "2" | 2 | | Patterns.cs:85:39:85:53 | [MatchTrue] ... is ... | Patterns.cs:85:57:85:63 | "not 2" | 11 | | Patterns.cs:85:39:85:69 | After ... ? ... : ... | Patterns.cs:85:26:85:27 | Exit | 3 | -| Patterns.cs:87:26:87:27 | Entry | Patterns.cs:87:39:87:54 | ... is ... | 5 | +| Patterns.cs:87:26:87:27 | Entry | Patterns.cs:87:39:87:54 | ... is ... | 6 | | Patterns.cs:87:39:87:54 | After ... is ... [false] | Patterns.cs:87:64:87:70 | "not 1" | 2 | | Patterns.cs:87:39:87:54 | [MatchTrue] ... is ... | Patterns.cs:87:58:87:60 | "1" | 11 | | Patterns.cs:87:39:87:70 | After ... ? ... : ... | Patterns.cs:87:26:87:27 | Exit | 3 | @@ -974,12 +980,12 @@ | Patterns.cs:95:13:95:40 | After ... is ... [false] | Patterns.cs:95:13:95:40 | After ... is ... [false] | 1 | | Patterns.cs:95:13:95:40 | [MatchTrue] ... is ... | Patterns.cs:96:9:98:9 | After {...} | 21 | | PostDominance.cs:3:7:3:19 | Entry | PostDominance.cs:3:7:3:19 | Exit | 11 | -| PostDominance.cs:5:10:5:11 | Entry | PostDominance.cs:5:10:5:11 | Exit | 11 | -| PostDominance.cs:10:10:10:11 | Entry | PostDominance.cs:12:13:12:21 | ... is ... | 6 | +| PostDominance.cs:5:10:5:11 | Entry | PostDominance.cs:5:10:5:11 | Exit | 12 | +| PostDominance.cs:10:10:10:11 | Entry | PostDominance.cs:12:13:12:21 | ... is ... | 7 | | PostDominance.cs:10:10:10:11 | Normal Exit | PostDominance.cs:10:10:10:11 | Exit | 2 | | PostDominance.cs:12:13:12:21 | After ... is ... [false] | PostDominance.cs:11:5:15:5 | After {...} | 9 | | PostDominance.cs:12:13:12:21 | [MatchTrue] ... is ... | PostDominance.cs:13:13:13:19 | return ...; | 5 | -| PostDominance.cs:17:10:17:11 | Entry | PostDominance.cs:19:13:19:21 | ... is ... | 6 | +| PostDominance.cs:17:10:17:11 | Entry | PostDominance.cs:19:13:19:21 | ... is ... | 7 | | PostDominance.cs:17:10:17:11 | Exit | PostDominance.cs:17:10:17:11 | Exit | 1 | | PostDominance.cs:19:13:19:21 | After ... is ... [false] | PostDominance.cs:17:10:17:11 | Normal Exit | 10 | | PostDominance.cs:19:13:19:21 | [MatchTrue] ... is ... | PostDominance.cs:17:10:17:11 | Exceptional Exit | 10 | @@ -988,8 +994,8 @@ | Qualifiers.cs:8:23:8:34 | Entry | Qualifiers.cs:8:23:8:34 | Exit | 4 | | Qualifiers.cs:10:10:10:10 | Entry | Qualifiers.cs:10:10:10:10 | Exit | 149 | | Switch.cs:3:7:3:12 | Entry | Switch.cs:3:7:3:12 | Exit | 11 | -| Switch.cs:5:10:5:11 | Entry | Switch.cs:5:10:5:11 | Exit | 8 | -| Switch.cs:10:10:10:11 | Entry | Switch.cs:14:13:14:21 | case ...: | 5 | +| Switch.cs:5:10:5:11 | Entry | Switch.cs:5:10:5:11 | Exit | 9 | +| Switch.cs:10:10:10:11 | Entry | Switch.cs:14:13:14:21 | case ...: | 6 | | Switch.cs:10:10:10:11 | Exceptional Exit | Switch.cs:10:10:10:11 | Exceptional Exit | 1 | | Switch.cs:10:10:10:11 | Exit | Switch.cs:10:10:10:11 | Exit | 1 | | Switch.cs:10:10:10:11 | Normal Exit | Switch.cs:10:10:10:11 | Normal Exit | 1 | @@ -1015,7 +1021,7 @@ | Switch.cs:27:13:27:39 | case ...: | Switch.cs:27:13:27:39 | case ...: | 1 | | Switch.cs:30:13:30:20 | After default: [match] | Switch.cs:29:17:29:23 | return ...; | 6 | | Switch.cs:35:10:35:11 | Entry | Switch.cs:35:10:35:11 | Exit | 7 | -| Switch.cs:44:10:44:11 | Entry | Switch.cs:48:13:48:23 | case ...: | 5 | +| Switch.cs:44:10:44:11 | Entry | Switch.cs:48:13:48:23 | case ...: | 6 | | Switch.cs:46:9:52:9 | After switch (...) {...} | Switch.cs:44:10:44:11 | Exit | 4 | | Switch.cs:48:13:48:23 | After case ...: [match] | Switch.cs:49:17:49:22 | break; | 4 | | Switch.cs:48:13:48:23 | After case ...: [no-match] | Switch.cs:50:13:50:39 | case ...: | 2 | @@ -1029,13 +1035,13 @@ | Switch.cs:59:13:59:19 | After case ...: [no-match] | Switch.cs:61:13:61:19 | case ...: | 2 | | Switch.cs:61:13:61:19 | After case ...: [match] | Switch.cs:62:17:62:22 | break; | 4 | | Switch.cs:61:13:61:19 | After case ...: [no-match] | Switch.cs:61:13:61:19 | After case ...: [no-match] | 1 | -| Switch.cs:66:10:66:11 | Entry | Switch.cs:70:13:70:23 | case ...: | 8 | +| Switch.cs:66:10:66:11 | Entry | Switch.cs:70:13:70:23 | case ...: | 9 | | Switch.cs:68:9:74:9 | After switch (...) {...} | Switch.cs:66:10:66:11 | Exit | 4 | | Switch.cs:70:13:70:23 | After case ...: [match] | Switch.cs:71:17:71:22 | break; | 4 | | Switch.cs:70:13:70:23 | After case ...: [no-match] | Switch.cs:72:13:72:20 | case ...: | 2 | | Switch.cs:72:13:72:20 | After case ...: [match] | Switch.cs:73:17:73:22 | break; | 4 | | Switch.cs:72:13:72:20 | After case ...: [no-match] | Switch.cs:72:13:72:20 | After case ...: [no-match] | 1 | -| Switch.cs:77:10:77:11 | Entry | Switch.cs:81:13:81:19 | case ...: | 5 | +| Switch.cs:77:10:77:11 | Entry | Switch.cs:81:13:81:19 | case ...: | 7 | | Switch.cs:77:10:77:11 | Normal Exit | Switch.cs:77:10:77:11 | Exit | 2 | | Switch.cs:79:9:87:9 | After switch (...) {...} | Switch.cs:88:9:88:21 | return ...; | 4 | | Switch.cs:81:13:81:19 | After case ...: [match] | Switch.cs:82:17:82:28 | return ...; | 5 | @@ -1044,11 +1050,11 @@ | Switch.cs:83:13:83:19 | After case ...: [no-match] | Switch.cs:83:13:83:19 | After case ...: [no-match] | 1 | | Switch.cs:84:21:84:25 | After ... > ... [false] | Switch.cs:86:17:86:28 | return ...; | 5 | | Switch.cs:84:21:84:25 | After ... > ... [true] | Switch.cs:85:21:85:26 | break; | 3 | -| Switch.cs:91:10:91:11 | Entry | Switch.cs:95:13:95:23 | case ...: | 5 | +| Switch.cs:91:10:91:11 | Entry | Switch.cs:95:13:95:23 | case ...: | 6 | | Switch.cs:91:10:91:11 | Normal Exit | Switch.cs:91:10:91:11 | Exit | 2 | | Switch.cs:95:13:95:23 | After case ...: [match] | Switch.cs:96:17:96:28 | return ...; | 5 | | Switch.cs:95:13:95:23 | After case ...: [no-match] | Switch.cs:98:9:98:21 | return ...; | 5 | -| Switch.cs:101:9:101:10 | Entry | Switch.cs:103:17:103:17 | access to parameter s | 5 | +| Switch.cs:101:9:101:10 | Entry | Switch.cs:103:17:103:17 | access to parameter s | 6 | | Switch.cs:101:9:101:10 | Normal Exit | Switch.cs:101:9:101:10 | Exit | 2 | | Switch.cs:103:17:103:17 | After access to parameter s [non-null] | Switch.cs:103:17:103:25 | access to property Length | 2 | | Switch.cs:103:17:103:17 | After access to parameter s [null] | Switch.cs:103:17:103:17 | After access to parameter s [null] | 1 | @@ -1058,7 +1064,7 @@ | Switch.cs:106:13:106:19 | After case ...: [match] | Switch.cs:106:21:106:29 | return ...; | 5 | | Switch.cs:106:13:106:19 | After case ...: [no-match] | Switch.cs:108:9:108:18 | return ...; | 8 | | Switch.cs:111:17:111:21 | Entry | Switch.cs:111:17:111:21 | Exit | 8 | -| Switch.cs:113:9:113:11 | Entry | Switch.cs:117:13:117:35 | case ...: | 8 | +| Switch.cs:113:9:113:11 | Entry | Switch.cs:117:13:117:35 | case ...: | 9 | | Switch.cs:113:9:113:11 | Normal Exit | Switch.cs:113:9:113:11 | Exit | 2 | | Switch.cs:115:9:119:9 | After switch (...) {...} | Switch.cs:120:9:120:18 | return ...; | 7 | | Switch.cs:117:13:117:35 | After case ...: [match] | Switch.cs:117:25:117:34 | ... == ... | 6 | @@ -1070,31 +1076,31 @@ | Switch.cs:118:13:118:34 | case ...: | Switch.cs:118:13:118:34 | case ...: | 1 | | Switch.cs:118:25:118:33 | After ... == ... [false] | Switch.cs:118:25:118:33 | After ... == ... [false] | 1 | | Switch.cs:118:25:118:33 | After ... == ... [true] | Switch.cs:118:36:118:44 | return ...; | 4 | -| Switch.cs:123:10:123:12 | Entry | Switch.cs:125:24:125:34 | ... => ... | 6 | +| Switch.cs:123:10:123:12 | Entry | Switch.cs:125:24:125:34 | ... => ... | 7 | | Switch.cs:123:10:123:12 | Normal Exit | Switch.cs:123:10:123:12 | Exit | 2 | | Switch.cs:125:13:125:48 | After ... switch { ... } [false] | Switch.cs:124:5:127:5 | After {...} | 3 | | Switch.cs:125:13:125:48 | After ... switch { ... } [true] | Switch.cs:126:13:126:19 | return ...; | 3 | | Switch.cs:125:24:125:34 | After ... => ... [match] | Switch.cs:125:34:125:34 | access to local variable b | 3 | | Switch.cs:125:24:125:34 | After ... => ... [no-match] | Switch.cs:125:42:125:46 | false | 5 | -| Switch.cs:129:12:129:14 | Entry | Switch.cs:131:28:131:40 | ... => ... | 7 | +| Switch.cs:129:12:129:14 | Entry | Switch.cs:131:28:131:40 | ... => ... | 8 | | Switch.cs:131:16:131:66 | After call to method ToString | Switch.cs:129:12:129:14 | Exit | 4 | | Switch.cs:131:17:131:53 | After ... switch { ... } [non-null] | Switch.cs:131:16:131:66 | call to method ToString | 2 | | Switch.cs:131:17:131:53 | After ... switch { ... } [null] | Switch.cs:131:17:131:53 | After ... switch { ... } [null] | 1 | | Switch.cs:131:28:131:40 | After ... => ... [match] | Switch.cs:131:40:131:40 | access to local variable s | 3 | | Switch.cs:131:28:131:40 | After ... => ... [no-match] | Switch.cs:131:48:131:51 | null | 5 | -| Switch.cs:134:9:134:11 | Entry | Switch.cs:139:13:139:19 | case ...: | 5 | +| Switch.cs:134:9:134:11 | Entry | Switch.cs:139:13:139:19 | case ...: | 6 | | Switch.cs:134:9:134:11 | Normal Exit | Switch.cs:134:9:134:11 | Exit | 2 | | Switch.cs:139:13:139:19 | After case ...: [match] | Switch.cs:139:21:139:29 | return ...; | 5 | | Switch.cs:139:13:139:19 | After case ...: [no-match] | Switch.cs:140:13:140:19 | case ...: | 2 | | Switch.cs:140:13:140:19 | After case ...: [match] | Switch.cs:140:21:140:29 | return ...; | 5 | | Switch.cs:140:13:140:19 | After case ...: [no-match] | Switch.cs:138:22:138:31 | return ...; | 9 | -| Switch.cs:144:9:144:11 | Entry | Switch.cs:148:13:148:19 | case ...: | 5 | +| Switch.cs:144:9:144:11 | Entry | Switch.cs:148:13:148:19 | case ...: | 6 | | Switch.cs:144:9:144:11 | Normal Exit | Switch.cs:144:9:144:11 | Exit | 2 | | Switch.cs:148:13:148:19 | After case ...: [match] | Switch.cs:148:21:148:29 | return ...; | 5 | | Switch.cs:148:13:148:19 | After case ...: [no-match] | Switch.cs:150:13:150:19 | case ...: | 2 | | Switch.cs:150:13:150:19 | After case ...: [match] | Switch.cs:150:21:150:29 | return ...; | 5 | | Switch.cs:150:13:150:19 | After case ...: [no-match] | Switch.cs:149:22:149:31 | return ...; | 9 | -| Switch.cs:154:10:154:12 | Entry | Switch.cs:156:28:156:38 | ... => ... | 8 | +| Switch.cs:154:10:154:12 | Entry | Switch.cs:156:28:156:38 | ... => ... | 9 | | Switch.cs:156:17:156:54 | After ... switch { ... } | Switch.cs:157:13:157:13 | access to parameter b | 6 | | Switch.cs:156:28:156:38 | After ... => ... [match] | Switch.cs:156:36:156:38 | "a" | 3 | | Switch.cs:156:28:156:38 | After ... => ... [no-match] | Switch.cs:156:41:156:52 | ... => ... | 2 | @@ -1103,7 +1109,7 @@ | Switch.cs:157:9:160:49 | After if (...) ... | Switch.cs:154:10:154:12 | Exit | 4 | | Switch.cs:157:13:157:13 | After access to parameter b [false] | Switch.cs:160:13:160:49 | After ...; | 14 | | Switch.cs:157:13:157:13 | After access to parameter b [true] | Switch.cs:158:13:158:49 | After ...; | 14 | -| Switch.cs:163:10:163:12 | Entry | Switch.cs:167:13:167:19 | case ...: | 5 | +| Switch.cs:163:10:163:12 | Entry | Switch.cs:167:13:167:19 | case ...: | 6 | | Switch.cs:165:9:177:9 | After switch (...) {...} | Switch.cs:163:10:163:12 | Exit | 4 | | Switch.cs:167:13:167:19 | After case ...: [match] | Switch.cs:167:18:167:18 | 1 | 2 | | Switch.cs:167:13:167:19 | After case ...: [no-match] | Switch.cs:168:13:168:19 | case ...: | 2 | @@ -1113,20 +1119,20 @@ | Switch.cs:171:13:171:19 | After case ...: [match] | Switch.cs:173:17:173:22 | break; | 10 | | Switch.cs:171:13:171:19 | After case ...: [no-match] | Switch.cs:176:17:176:22 | break; | 11 | | TypeAccesses.cs:1:7:1:18 | Entry | TypeAccesses.cs:1:7:1:18 | Exit | 11 | -| TypeAccesses.cs:3:10:3:10 | Entry | TypeAccesses.cs:7:13:7:22 | ... is ... | 26 | +| TypeAccesses.cs:3:10:3:10 | Entry | TypeAccesses.cs:7:13:7:22 | ... is ... | 27 | | TypeAccesses.cs:7:9:7:25 | After if (...) ... | TypeAccesses.cs:3:10:3:10 | Exit | 11 | | TypeAccesses.cs:7:13:7:22 | After ... is ... [false] | TypeAccesses.cs:7:13:7:22 | After ... is ... [false] | 1 | | TypeAccesses.cs:7:13:7:22 | [MatchTrue] ... is ... | TypeAccesses.cs:7:25:7:25 | ; | 4 | | VarDecls.cs:3:7:3:14 | Entry | VarDecls.cs:3:7:3:14 | Exit | 11 | -| VarDecls.cs:5:18:5:19 | Entry | VarDecls.cs:5:18:5:19 | Exit | 36 | -| VarDecls.cs:13:12:13:13 | Entry | VarDecls.cs:13:12:13:13 | Exit | 23 | -| VarDecls.cs:19:7:19:8 | Entry | VarDecls.cs:25:20:25:20 | access to parameter b | 26 | +| VarDecls.cs:5:18:5:19 | Entry | VarDecls.cs:5:18:5:19 | Exit | 37 | +| VarDecls.cs:13:12:13:13 | Entry | VarDecls.cs:13:12:13:13 | Exit | 24 | +| VarDecls.cs:19:7:19:8 | Entry | VarDecls.cs:25:20:25:20 | access to parameter b | 27 | | VarDecls.cs:25:20:25:20 | After access to parameter b [false] | VarDecls.cs:25:28:25:28 | access to local variable y | 2 | | VarDecls.cs:25:20:25:20 | After access to parameter b [true] | VarDecls.cs:25:24:25:24 | access to local variable x | 2 | | VarDecls.cs:25:20:25:28 | After ... ? ... : ... | VarDecls.cs:19:7:19:8 | Exit | 4 | | VarDecls.cs:28:11:28:11 | Entry | VarDecls.cs:28:11:28:11 | Exit | 11 | | VarDecls.cs:28:41:28:47 | Entry | VarDecls.cs:28:41:28:47 | Exit | 4 | -| cflow.cs:5:17:5:20 | Entry | cflow.cs:11:13:11:17 | ... > ... | 30 | +| cflow.cs:5:17:5:20 | Entry | cflow.cs:11:13:11:17 | ... > ... | 31 | | cflow.cs:11:9:12:49 | After if (...) ... | cflow.cs:14:9:17:9 | while (...) ... | 2 | | cflow.cs:11:13:11:17 | After ... > ... [false] | cflow.cs:11:13:11:17 | After ... > ... [false] | 1 | | cflow.cs:11:13:11:17 | After ... > ... [true] | cflow.cs:12:13:12:49 | After ...; | 7 | @@ -1151,7 +1157,7 @@ | cflow.cs:30:18:33:37 | After if (...) ... | cflow.cs:30:18:33:37 | After if (...) ... | 1 | | cflow.cs:30:22:30:31 | After ... == ... [false] | cflow.cs:33:17:33:37 | After ...; | 7 | | cflow.cs:30:22:30:31 | After ... == ... [true] | cflow.cs:31:17:31:42 | After ...; | 7 | -| cflow.cs:37:17:37:22 | Entry | cflow.cs:41:13:41:19 | case ...: | 5 | +| cflow.cs:37:17:37:22 | Entry | cflow.cs:41:13:41:19 | case ...: | 6 | | cflow.cs:37:17:37:22 | Exit | cflow.cs:37:17:37:22 | Exit | 1 | | cflow.cs:39:9:50:9 | After switch (...) {...} | cflow.cs:53:13:53:20 | case ...: | 4 | | cflow.cs:41:13:41:19 | After case ...: [match] | cflow.cs:43:17:43:28 | goto case ...; | 11 | @@ -1168,21 +1174,21 @@ | cflow.cs:62:13:62:19 | After case ...: [no-match] | cflow.cs:62:13:62:19 | After case ...: [no-match] | 1 | | cflow.cs:63:23:63:33 | After ... == ... [false] | cflow.cs:37:17:37:22 | Exceptional Exit | 8 | | cflow.cs:63:23:63:33 | After ... == ... [true] | cflow.cs:65:17:65:22 | break; | 5 | -| cflow.cs:70:18:70:18 | Entry | cflow.cs:72:13:72:21 | ... == ... | 7 | +| cflow.cs:70:18:70:18 | Entry | cflow.cs:72:13:72:21 | ... == ... | 8 | | cflow.cs:70:18:70:18 | Normal Exit | cflow.cs:70:18:70:18 | Exit | 2 | | cflow.cs:72:13:72:21 | After ... == ... [false] | cflow.cs:74:13:74:24 | ... > ... | 10 | | cflow.cs:72:13:72:21 | After ... == ... [true] | cflow.cs:73:13:73:19 | return ...; | 3 | | cflow.cs:74:9:81:9 | After if (...) ... | cflow.cs:71:5:82:5 | After {...} | 2 | | cflow.cs:74:13:74:24 | After ... > ... [false] | cflow.cs:79:9:81:9 | After {...} | 9 | | cflow.cs:74:13:74:24 | After ... > ... [true] | cflow.cs:75:9:77:9 | After {...} | 9 | -| cflow.cs:84:18:84:19 | Entry | cflow.cs:86:13:86:21 | ... != ... | 8 | +| cflow.cs:84:18:84:19 | Entry | cflow.cs:86:13:86:21 | ... != ... | 9 | | cflow.cs:86:9:87:33 | After if (...) ... | cflow.cs:84:18:84:19 | Exit | 4 | | cflow.cs:86:13:86:21 | After ... != ... [false] | cflow.cs:86:13:86:21 | After ... != ... [false] | 1 | | cflow.cs:86:13:86:21 | After ... != ... [true] | cflow.cs:86:26:86:37 | ... > ... | 8 | | cflow.cs:86:13:86:37 | After ... && ... [false] | cflow.cs:86:13:86:37 | After ... && ... [false] | 1 | | cflow.cs:86:26:86:37 | After ... > ... [false] | cflow.cs:86:26:86:37 | After ... > ... [false] | 1 | | cflow.cs:86:26:86:37 | After ... > ... [true] | cflow.cs:87:13:87:33 | After ...; | 8 | -| cflow.cs:90:18:90:19 | Entry | cflow.cs:92:13:92:27 | call to method Equals | 7 | +| cflow.cs:90:18:90:19 | Entry | cflow.cs:92:13:92:27 | call to method Equals | 8 | | cflow.cs:90:18:90:19 | Exit | cflow.cs:90:18:90:19 | Exit | 1 | | cflow.cs:92:13:92:27 | After call to method Equals [false] | cflow.cs:96:13:96:25 | ... != ... | 16 | | cflow.cs:92:13:92:27 | After call to method Equals [true] | cflow.cs:90:18:90:19 | Exceptional Exit | 8 | @@ -1195,22 +1201,22 @@ | cflow.cs:102:9:103:36 | After if (...) ... | cflow.cs:90:18:90:19 | Normal Exit | 3 | | cflow.cs:102:13:102:29 | After ... != ... [false] | cflow.cs:102:13:102:29 | After ... != ... [false] | 1 | | cflow.cs:102:13:102:29 | After ... != ... [true] | cflow.cs:103:13:103:36 | After ...; | 10 | -| cflow.cs:106:18:106:19 | Entry | cflow.cs:108:13:108:21 | ... != ... | 7 | +| cflow.cs:106:18:106:19 | Entry | cflow.cs:108:13:108:21 | ... != ... | 8 | | cflow.cs:108:13:108:21 | After ... != ... [false] | cflow.cs:106:18:106:19 | Exit | 11 | | cflow.cs:108:13:108:21 | After ... != ... [true] | cflow.cs:110:13:113:13 | while (...) ... | 3 | | cflow.cs:110:13:113:13 | [LoopHeader] while (...) ... | cflow.cs:111:13:113:13 | After {...} | 11 | -| cflow.cs:119:20:119:21 | Entry | cflow.cs:119:20:119:21 | Exit | 25 | +| cflow.cs:119:20:119:21 | Entry | cflow.cs:119:20:119:21 | Exit | 26 | | cflow.cs:127:19:127:21 | Entry | cflow.cs:127:32:127:44 | ... == ... | 11 | | cflow.cs:127:32:127:44 | After ... == ... [false] | cflow.cs:127:53:127:57 | After access to field Field | 5 | | cflow.cs:127:32:127:44 | After ... == ... [true] | cflow.cs:127:48:127:49 | "" | 2 | | cflow.cs:127:32:127:57 | After ... ? ... : ... | cflow.cs:127:19:127:21 | Exit | 4 | -| cflow.cs:127:62:127:64 | Entry | cflow.cs:127:62:127:64 | Exit | 15 | -| cflow.cs:129:5:129:15 | Entry | cflow.cs:129:5:129:15 | Exit | 22 | -| cflow.cs:134:5:134:15 | Entry | cflow.cs:134:5:134:15 | Exit | 15 | +| cflow.cs:127:62:127:64 | Entry | cflow.cs:127:62:127:64 | Exit | 16 | +| cflow.cs:129:5:129:15 | Entry | cflow.cs:129:5:129:15 | Exit | 23 | +| cflow.cs:134:5:134:15 | Entry | cflow.cs:134:5:134:15 | Exit | 16 | | cflow.cs:136:12:136:22 | Entry | cflow.cs:136:12:136:22 | Exit | 12 | -| cflow.cs:138:40:138:40 | Entry | cflow.cs:138:40:138:40 | Exit | 13 | -| cflow.cs:144:33:144:35 | Entry | cflow.cs:144:33:144:35 | Exit | 14 | -| cflow.cs:144:56:144:58 | Entry | cflow.cs:144:56:144:58 | Exit | 4 | +| cflow.cs:138:40:138:40 | Entry | cflow.cs:138:40:138:40 | Exit | 15 | +| cflow.cs:144:33:144:35 | Entry | cflow.cs:144:33:144:35 | Exit | 15 | +| cflow.cs:144:56:144:58 | Entry | cflow.cs:144:56:144:58 | Exit | 6 | | cflow.cs:146:10:146:12 | Entry | cflow.cs:149:9:150:33 | for (...;...;...) ... | 10 | | cflow.cs:149:16:149:21 | After ... < ... [false] | cflow.cs:152:9:157:9 | for (...;...;...) ... | 3 | | cflow.cs:149:16:149:21 | After ... < ... [true] | cflow.cs:149:24:149:26 | After ++... | 12 | @@ -1228,8 +1234,8 @@ | cflow.cs:173:32:173:41 | After ... < ... [true] | cflow.cs:173:49:173:51 | After ...++ | 22 | | cflow.cs:173:32:173:41 | Before ... < ... | cflow.cs:173:32:173:41 | ... < ... | 8 | | cflow.cs:179:10:179:16 | Entry | cflow.cs:179:10:179:16 | Exit | 19 | -| cflow.cs:181:28:181:37 | Entry | cflow.cs:181:28:181:37 | Exit | 8 | -| cflow.cs:182:28:182:61 | Entry | cflow.cs:182:28:182:61 | Exit | 11 | +| cflow.cs:181:28:181:37 | Entry | cflow.cs:181:28:181:37 | Exit | 9 | +| cflow.cs:182:28:182:61 | Entry | cflow.cs:182:28:182:61 | Exit | 12 | | cflow.cs:185:10:185:18 | Entry | cflow.cs:187:13:187:18 | ... == ... | 9 | | cflow.cs:187:9:190:52 | After if (...) ... | cflow.cs:185:10:185:18 | Exit | 4 | | cflow.cs:187:13:187:18 | After ... == ... [false] | cflow.cs:187:23:187:28 | ... == ... | 5 | @@ -1306,15 +1312,15 @@ | cflow.cs:264:25:264:30 | Before ... < ... | cflow.cs:264:25:264:30 | ... < ... | 4 | | cflow.cs:268:9:276:9 | After try {...} ... | cflow.cs:262:5:277:5 | After {...} | 2 | | cflow.cs:282:5:282:18 | Entry | cflow.cs:282:5:282:18 | Exit | 11 | -| cflow.cs:284:5:284:18 | Entry | cflow.cs:284:5:284:18 | Exit | 7 | -| cflow.cs:286:5:286:18 | Entry | cflow.cs:286:5:286:18 | Exit | 11 | +| cflow.cs:284:5:284:18 | Entry | cflow.cs:284:5:284:18 | Exit | 8 | +| cflow.cs:286:5:286:18 | Entry | cflow.cs:286:5:286:18 | Exit | 12 | | cflow.cs:289:7:289:18 | Entry | cflow.cs:289:7:289:18 | Exit | 11 | -| cflow.cs:291:12:291:12 | Entry | cflow.cs:291:12:291:12 | Exit | 8 | -| cflow.cs:296:5:296:25 | Entry | cflow.cs:296:5:296:25 | Exit | 11 | -| cflow.cs:298:10:298:10 | Entry | cflow.cs:300:46:300:50 | ... > ... | 11 | +| cflow.cs:291:12:291:12 | Entry | cflow.cs:291:12:291:12 | Exit | 9 | +| cflow.cs:296:5:296:25 | Entry | cflow.cs:296:5:296:25 | Exit | 14 | +| cflow.cs:298:10:298:10 | Entry | cflow.cs:300:46:300:50 | ... > ... | 14 | | cflow.cs:300:44:300:64 | After ... && ... | cflow.cs:298:10:298:10 | Exit | 8 | | cflow.cs:300:46:300:50 | After ... > ... [false] | cflow.cs:300:56:300:64 | After ... != ... | 7 | | cflow.cs:300:46:300:50 | After ... > ... [true] | cflow.cs:300:44:300:51 | After !... [false] | 2 | | cflow.cs:304:7:304:18 | Entry | cflow.cs:304:7:304:18 | Exit | 11 | | cflow.cs:306:60:310:5 | Entry | cflow.cs:306:60:310:5 | Exit | 4 | -| cflow.cs:306:60:310:5 | Entry | cflow.cs:306:60:310:5 | Exit | 14 | +| cflow.cs:306:60:310:5 | Entry | cflow.cs:306:60:310:5 | Exit | 16 | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Condition.expected b/csharp/ql/test/library-tests/controlflow/graph/Condition.expected index 0e5259f89a0a..94ae54555176 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Condition.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Condition.expected @@ -260,6 +260,10 @@ conditionBlock | Conditions.cs:143:10:143:12 | Entry | Conditions.cs:145:17:145:17 | After access to parameter b [true] | true | | Conditions.cs:145:17:145:29 | After ... ? ... : ... | Conditions.cs:146:13:146:13 | After access to parameter b [false] | false | | Conditions.cs:145:17:145:29 | After ... ? ... : ... | Conditions.cs:146:13:146:13 | After access to parameter b [true] | true | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:30:3:30 | After s [match] | true | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:30:3:30 | After s [no-match] | false | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | After i [match] | true | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | After i [no-match] | false | | ExitMethods.cs:38:10:38:11 | Entry | ExitMethods.cs:44:9:47:9 | After catch (...) {...} [match] | true | | ExitMethods.cs:38:10:38:11 | Entry | ExitMethods.cs:44:9:47:9 | After catch (...) {...} [no-match] | false | | ExitMethods.cs:38:10:38:11 | Entry | ExitMethods.cs:48:9:51:9 | After catch (...) {...} [match] | false | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected b/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected index f942240086ae..51d4721caeac 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected @@ -9,20 +9,26 @@ dominance | AccessorCalls.cs:1:7:1:19 | call to method | AccessorCalls.cs:1:7:1:19 | After call to method | | AccessorCalls.cs:1:7:1:19 | this access | AccessorCalls.cs:1:7:1:19 | call to method | | AccessorCalls.cs:1:7:1:19 | {...} | AccessorCalls.cs:1:7:1:19 | Normal Exit | -| AccessorCalls.cs:5:23:5:25 | Entry | AccessorCalls.cs:5:30:5:30 | access to parameter i | +| AccessorCalls.cs:5:18:5:18 | i | AccessorCalls.cs:5:30:5:30 | access to parameter i | +| AccessorCalls.cs:5:18:5:18 | i | AccessorCalls.cs:5:33:5:35 | value | +| AccessorCalls.cs:5:23:5:25 | Entry | AccessorCalls.cs:5:18:5:18 | i | | AccessorCalls.cs:5:23:5:25 | Normal Exit | AccessorCalls.cs:5:23:5:25 | Exit | | AccessorCalls.cs:5:30:5:30 | access to parameter i | AccessorCalls.cs:5:23:5:25 | Normal Exit | -| AccessorCalls.cs:5:33:5:35 | Entry | AccessorCalls.cs:5:37:5:39 | {...} | +| AccessorCalls.cs:5:33:5:35 | Entry | AccessorCalls.cs:5:18:5:18 | i | | AccessorCalls.cs:5:33:5:35 | Normal Exit | AccessorCalls.cs:5:33:5:35 | Exit | +| AccessorCalls.cs:5:33:5:35 | value | AccessorCalls.cs:5:37:5:39 | {...} | | AccessorCalls.cs:5:37:5:39 | {...} | AccessorCalls.cs:5:33:5:35 | Normal Exit | -| AccessorCalls.cs:7:32:7:34 | Entry | AccessorCalls.cs:7:36:7:38 | {...} | +| AccessorCalls.cs:7:32:7:34 | Entry | AccessorCalls.cs:7:32:7:34 | value | | AccessorCalls.cs:7:32:7:34 | Normal Exit | AccessorCalls.cs:7:32:7:34 | Exit | +| AccessorCalls.cs:7:32:7:34 | value | AccessorCalls.cs:7:36:7:38 | {...} | | AccessorCalls.cs:7:36:7:38 | {...} | AccessorCalls.cs:7:32:7:34 | Normal Exit | -| AccessorCalls.cs:7:40:7:45 | Entry | AccessorCalls.cs:7:47:7:49 | {...} | +| AccessorCalls.cs:7:40:7:45 | Entry | AccessorCalls.cs:7:40:7:45 | value | | AccessorCalls.cs:7:40:7:45 | Normal Exit | AccessorCalls.cs:7:40:7:45 | Exit | +| AccessorCalls.cs:7:40:7:45 | value | AccessorCalls.cs:7:47:7:49 | {...} | | AccessorCalls.cs:7:47:7:49 | {...} | AccessorCalls.cs:7:40:7:45 | Normal Exit | -| AccessorCalls.cs:10:10:10:11 | Entry | AccessorCalls.cs:11:5:17:5 | {...} | +| AccessorCalls.cs:10:10:10:11 | Entry | AccessorCalls.cs:10:26:10:26 | e | | AccessorCalls.cs:10:10:10:11 | Normal Exit | AccessorCalls.cs:10:10:10:11 | Exit | +| AccessorCalls.cs:10:26:10:26 | e | AccessorCalls.cs:11:5:17:5 | {...} | | AccessorCalls.cs:11:5:17:5 | After {...} | AccessorCalls.cs:10:10:10:11 | Normal Exit | | AccessorCalls.cs:11:5:17:5 | {...} | AccessorCalls.cs:12:9:12:32 | ...; | | AccessorCalls.cs:12:9:12:12 | this access | AccessorCalls.cs:12:9:12:18 | access to field Field | @@ -86,8 +92,9 @@ dominance | AccessorCalls.cs:16:9:16:24 | ...; | AccessorCalls.cs:16:9:16:23 | Before ... -= ... | | AccessorCalls.cs:16:9:16:24 | After ...; | AccessorCalls.cs:11:5:17:5 | After {...} | | AccessorCalls.cs:16:23:16:23 | access to parameter e | AccessorCalls.cs:16:9:16:23 | ... -= ... | -| AccessorCalls.cs:19:10:19:11 | Entry | AccessorCalls.cs:20:5:26:5 | {...} | +| AccessorCalls.cs:19:10:19:11 | Entry | AccessorCalls.cs:19:26:19:26 | e | | AccessorCalls.cs:19:10:19:11 | Normal Exit | AccessorCalls.cs:19:10:19:11 | Exit | +| AccessorCalls.cs:19:26:19:26 | e | AccessorCalls.cs:20:5:26:5 | {...} | | AccessorCalls.cs:20:5:26:5 | After {...} | AccessorCalls.cs:19:10:19:11 | Normal Exit | | AccessorCalls.cs:20:5:26:5 | {...} | AccessorCalls.cs:21:9:21:36 | ...; | | AccessorCalls.cs:21:9:21:12 | this access | AccessorCalls.cs:21:9:21:14 | access to field x | @@ -356,8 +363,9 @@ dominance | AccessorCalls.cs:53:22:53:30 | Before access to indexer | AccessorCalls.cs:53:22:53:27 | Before access to field x | | AccessorCalls.cs:53:22:53:30 | access to indexer | AccessorCalls.cs:53:22:53:30 | After access to indexer | | AccessorCalls.cs:53:29:53:29 | 0 | AccessorCalls.cs:53:22:53:30 | access to indexer | -| AccessorCalls.cs:56:10:56:11 | Entry | AccessorCalls.cs:57:5:59:5 | {...} | +| AccessorCalls.cs:56:10:56:11 | Entry | AccessorCalls.cs:56:17:56:17 | i | | AccessorCalls.cs:56:10:56:11 | Normal Exit | AccessorCalls.cs:56:10:56:11 | Exit | +| AccessorCalls.cs:56:17:56:17 | i | AccessorCalls.cs:57:5:59:5 | {...} | | AccessorCalls.cs:57:5:59:5 | After {...} | AccessorCalls.cs:56:10:56:11 | Normal Exit | | AccessorCalls.cs:57:5:59:5 | {...} | AccessorCalls.cs:58:9:58:86 | ...; | | AccessorCalls.cs:58:9:58:45 | (..., ...) | AccessorCalls.cs:58:9:58:45 | After (..., ...) | @@ -405,8 +413,9 @@ dominance | AccessorCalls.cs:58:77:58:83 | Before access to indexer | AccessorCalls.cs:58:77:58:80 | this access | | AccessorCalls.cs:58:77:58:83 | access to indexer | AccessorCalls.cs:58:77:58:83 | After access to indexer | | AccessorCalls.cs:58:82:58:82 | 1 | AccessorCalls.cs:58:77:58:83 | access to indexer | -| AccessorCalls.cs:61:10:61:11 | Entry | AccessorCalls.cs:62:5:64:5 | {...} | +| AccessorCalls.cs:61:10:61:11 | Entry | AccessorCalls.cs:61:17:61:17 | i | | AccessorCalls.cs:61:10:61:11 | Normal Exit | AccessorCalls.cs:61:10:61:11 | Exit | +| AccessorCalls.cs:61:17:61:17 | i | AccessorCalls.cs:62:5:64:5 | {...} | | AccessorCalls.cs:62:5:64:5 | After {...} | AccessorCalls.cs:61:10:61:11 | Normal Exit | | AccessorCalls.cs:62:5:64:5 | {...} | AccessorCalls.cs:63:9:63:98 | ...; | | AccessorCalls.cs:63:9:63:51 | (..., ...) | AccessorCalls.cs:63:9:63:51 | After (..., ...) | @@ -472,8 +481,11 @@ dominance | AccessorCalls.cs:63:87:63:95 | Before access to indexer | AccessorCalls.cs:63:87:63:92 | Before access to field x | | AccessorCalls.cs:63:87:63:95 | access to indexer | AccessorCalls.cs:63:87:63:95 | After access to indexer | | AccessorCalls.cs:63:94:63:94 | 1 | AccessorCalls.cs:63:87:63:95 | access to indexer | -| AccessorCalls.cs:66:10:66:11 | Entry | AccessorCalls.cs:67:5:74:5 | {...} | +| AccessorCalls.cs:66:10:66:11 | Entry | AccessorCalls.cs:66:20:66:20 | o | | AccessorCalls.cs:66:10:66:11 | Normal Exit | AccessorCalls.cs:66:10:66:11 | Exit | +| AccessorCalls.cs:66:20:66:20 | o | AccessorCalls.cs:66:27:66:27 | i | +| AccessorCalls.cs:66:27:66:27 | i | AccessorCalls.cs:66:43:66:43 | e | +| AccessorCalls.cs:66:43:66:43 | e | AccessorCalls.cs:67:5:74:5 | {...} | | AccessorCalls.cs:67:5:74:5 | After {...} | AccessorCalls.cs:66:10:66:11 | Normal Exit | | AccessorCalls.cs:67:5:74:5 | {...} | AccessorCalls.cs:68:9:68:22 | ... ...; | | AccessorCalls.cs:68:9:68:22 | ... ...; | AccessorCalls.cs:68:17:68:21 | Before dynamic d = ... | @@ -639,7 +651,8 @@ dominance | Assert.cs:5:7:5:17 | call to method | Assert.cs:5:7:5:17 | After call to method | | Assert.cs:5:7:5:17 | this access | Assert.cs:5:7:5:17 | call to method | | Assert.cs:5:7:5:17 | {...} | Assert.cs:5:7:5:17 | Normal Exit | -| Assert.cs:7:10:7:11 | Entry | Assert.cs:8:5:12:5 | {...} | +| Assert.cs:7:10:7:11 | Entry | Assert.cs:7:18:7:18 | b | +| Assert.cs:7:18:7:18 | b | Assert.cs:8:5:12:5 | {...} | | Assert.cs:8:5:12:5 | After {...} | Assert.cs:7:10:7:11 | Normal Exit | | Assert.cs:8:5:12:5 | {...} | Assert.cs:9:9:9:33 | ... ...; | | Assert.cs:9:9:9:33 | ... ...; | Assert.cs:9:16:9:32 | Before String s = ... | @@ -674,7 +687,8 @@ dominance | Assert.cs:11:27:11:34 | After access to property Length | Assert.cs:11:9:11:35 | call to method WriteLine | | Assert.cs:11:27:11:34 | Before access to property Length | Assert.cs:11:27:11:27 | access to local variable s | | Assert.cs:11:27:11:34 | access to property Length | Assert.cs:11:27:11:34 | After access to property Length | -| Assert.cs:14:10:14:11 | Entry | Assert.cs:15:5:19:5 | {...} | +| Assert.cs:14:10:14:11 | Entry | Assert.cs:14:18:14:18 | b | +| Assert.cs:14:18:14:18 | b | Assert.cs:15:5:19:5 | {...} | | Assert.cs:15:5:19:5 | After {...} | Assert.cs:14:10:14:11 | Normal Exit | | Assert.cs:15:5:19:5 | {...} | Assert.cs:16:9:16:33 | ... ...; | | Assert.cs:16:9:16:33 | ... ...; | Assert.cs:16:16:16:32 | Before String s = ... | @@ -705,7 +719,8 @@ dominance | Assert.cs:18:27:18:34 | After access to property Length | Assert.cs:18:9:18:35 | call to method WriteLine | | Assert.cs:18:27:18:34 | Before access to property Length | Assert.cs:18:27:18:27 | access to local variable s | | Assert.cs:18:27:18:34 | access to property Length | Assert.cs:18:27:18:34 | After access to property Length | -| Assert.cs:21:10:21:11 | Entry | Assert.cs:22:5:26:5 | {...} | +| Assert.cs:21:10:21:11 | Entry | Assert.cs:21:18:21:18 | b | +| Assert.cs:21:18:21:18 | b | Assert.cs:22:5:26:5 | {...} | | Assert.cs:22:5:26:5 | After {...} | Assert.cs:21:10:21:11 | Normal Exit | | Assert.cs:22:5:26:5 | {...} | Assert.cs:23:9:23:33 | ... ...; | | Assert.cs:23:9:23:33 | ... ...; | Assert.cs:23:16:23:32 | Before String s = ... | @@ -736,7 +751,8 @@ dominance | Assert.cs:25:27:25:34 | After access to property Length | Assert.cs:25:9:25:35 | call to method WriteLine | | Assert.cs:25:27:25:34 | Before access to property Length | Assert.cs:25:27:25:27 | access to local variable s | | Assert.cs:25:27:25:34 | access to property Length | Assert.cs:25:27:25:34 | After access to property Length | -| Assert.cs:28:10:28:11 | Entry | Assert.cs:29:5:33:5 | {...} | +| Assert.cs:28:10:28:11 | Entry | Assert.cs:28:18:28:18 | b | +| Assert.cs:28:18:28:18 | b | Assert.cs:29:5:33:5 | {...} | | Assert.cs:29:5:33:5 | After {...} | Assert.cs:28:10:28:11 | Normal Exit | | Assert.cs:29:5:33:5 | {...} | Assert.cs:30:9:30:33 | ... ...; | | Assert.cs:30:9:30:33 | ... ...; | Assert.cs:30:16:30:32 | Before String s = ... | @@ -771,7 +787,8 @@ dominance | Assert.cs:32:27:32:34 | After access to property Length | Assert.cs:32:9:32:35 | call to method WriteLine | | Assert.cs:32:27:32:34 | Before access to property Length | Assert.cs:32:27:32:27 | access to local variable s | | Assert.cs:32:27:32:34 | access to property Length | Assert.cs:32:27:32:34 | After access to property Length | -| Assert.cs:35:10:35:11 | Entry | Assert.cs:36:5:40:5 | {...} | +| Assert.cs:35:10:35:11 | Entry | Assert.cs:35:18:35:18 | b | +| Assert.cs:35:18:35:18 | b | Assert.cs:36:5:40:5 | {...} | | Assert.cs:36:5:40:5 | After {...} | Assert.cs:35:10:35:11 | Normal Exit | | Assert.cs:36:5:40:5 | {...} | Assert.cs:37:9:37:33 | ... ...; | | Assert.cs:37:9:37:33 | ... ...; | Assert.cs:37:16:37:32 | Before String s = ... | @@ -806,7 +823,8 @@ dominance | Assert.cs:39:27:39:34 | After access to property Length | Assert.cs:39:9:39:35 | call to method WriteLine | | Assert.cs:39:27:39:34 | Before access to property Length | Assert.cs:39:27:39:27 | access to local variable s | | Assert.cs:39:27:39:34 | access to property Length | Assert.cs:39:27:39:34 | After access to property Length | -| Assert.cs:42:10:42:11 | Entry | Assert.cs:43:5:47:5 | {...} | +| Assert.cs:42:10:42:11 | Entry | Assert.cs:42:18:42:18 | b | +| Assert.cs:42:18:42:18 | b | Assert.cs:43:5:47:5 | {...} | | Assert.cs:43:5:47:5 | After {...} | Assert.cs:42:10:42:11 | Normal Exit | | Assert.cs:43:5:47:5 | {...} | Assert.cs:44:9:44:33 | ... ...; | | Assert.cs:44:9:44:33 | ... ...; | Assert.cs:44:16:44:32 | Before String s = ... | @@ -841,7 +859,8 @@ dominance | Assert.cs:46:27:46:34 | After access to property Length | Assert.cs:46:9:46:35 | call to method WriteLine | | Assert.cs:46:27:46:34 | Before access to property Length | Assert.cs:46:27:46:27 | access to local variable s | | Assert.cs:46:27:46:34 | access to property Length | Assert.cs:46:27:46:34 | After access to property Length | -| Assert.cs:49:10:49:11 | Entry | Assert.cs:50:5:54:5 | {...} | +| Assert.cs:49:10:49:11 | Entry | Assert.cs:49:18:49:18 | b | +| Assert.cs:49:18:49:18 | b | Assert.cs:50:5:54:5 | {...} | | Assert.cs:50:5:54:5 | After {...} | Assert.cs:49:10:49:11 | Normal Exit | | Assert.cs:50:5:54:5 | {...} | Assert.cs:51:9:51:33 | ... ...; | | Assert.cs:51:9:51:33 | ... ...; | Assert.cs:51:16:51:32 | Before String s = ... | @@ -876,7 +895,8 @@ dominance | Assert.cs:53:27:53:34 | After access to property Length | Assert.cs:53:9:53:35 | call to method WriteLine | | Assert.cs:53:27:53:34 | Before access to property Length | Assert.cs:53:27:53:27 | access to local variable s | | Assert.cs:53:27:53:34 | access to property Length | Assert.cs:53:27:53:34 | After access to property Length | -| Assert.cs:56:10:56:11 | Entry | Assert.cs:57:5:61:5 | {...} | +| Assert.cs:56:10:56:11 | Entry | Assert.cs:56:18:56:18 | b | +| Assert.cs:56:18:56:18 | b | Assert.cs:57:5:61:5 | {...} | | Assert.cs:57:5:61:5 | After {...} | Assert.cs:56:10:56:11 | Normal Exit | | Assert.cs:57:5:61:5 | {...} | Assert.cs:58:9:58:33 | ... ...; | | Assert.cs:58:9:58:33 | ... ...; | Assert.cs:58:16:58:32 | Before String s = ... | @@ -914,7 +934,8 @@ dominance | Assert.cs:60:27:60:34 | After access to property Length | Assert.cs:60:9:60:35 | call to method WriteLine | | Assert.cs:60:27:60:34 | Before access to property Length | Assert.cs:60:27:60:27 | access to local variable s | | Assert.cs:60:27:60:34 | access to property Length | Assert.cs:60:27:60:34 | After access to property Length | -| Assert.cs:63:10:63:11 | Entry | Assert.cs:64:5:68:5 | {...} | +| Assert.cs:63:10:63:11 | Entry | Assert.cs:63:18:63:18 | b | +| Assert.cs:63:18:63:18 | b | Assert.cs:64:5:68:5 | {...} | | Assert.cs:64:5:68:5 | After {...} | Assert.cs:63:10:63:11 | Normal Exit | | Assert.cs:64:5:68:5 | {...} | Assert.cs:65:9:65:33 | ... ...; | | Assert.cs:65:9:65:33 | ... ...; | Assert.cs:65:16:65:32 | Before String s = ... | @@ -952,7 +973,8 @@ dominance | Assert.cs:67:27:67:34 | After access to property Length | Assert.cs:67:9:67:35 | call to method WriteLine | | Assert.cs:67:27:67:34 | Before access to property Length | Assert.cs:67:27:67:27 | access to local variable s | | Assert.cs:67:27:67:34 | access to property Length | Assert.cs:67:27:67:34 | After access to property Length | -| Assert.cs:70:10:70:12 | Entry | Assert.cs:71:5:75:5 | {...} | +| Assert.cs:70:10:70:12 | Entry | Assert.cs:70:19:70:19 | b | +| Assert.cs:70:19:70:19 | b | Assert.cs:71:5:75:5 | {...} | | Assert.cs:71:5:75:5 | After {...} | Assert.cs:70:10:70:12 | Normal Exit | | Assert.cs:71:5:75:5 | {...} | Assert.cs:72:9:72:33 | ... ...; | | Assert.cs:72:9:72:33 | ... ...; | Assert.cs:72:16:72:32 | Before String s = ... | @@ -990,7 +1012,8 @@ dominance | Assert.cs:74:27:74:34 | After access to property Length | Assert.cs:74:9:74:35 | call to method WriteLine | | Assert.cs:74:27:74:34 | Before access to property Length | Assert.cs:74:27:74:27 | access to local variable s | | Assert.cs:74:27:74:34 | access to property Length | Assert.cs:74:27:74:34 | After access to property Length | -| Assert.cs:77:10:77:12 | Entry | Assert.cs:78:5:82:5 | {...} | +| Assert.cs:77:10:77:12 | Entry | Assert.cs:77:19:77:19 | b | +| Assert.cs:77:19:77:19 | b | Assert.cs:78:5:82:5 | {...} | | Assert.cs:78:5:82:5 | After {...} | Assert.cs:77:10:77:12 | Normal Exit | | Assert.cs:78:5:82:5 | {...} | Assert.cs:79:9:79:33 | ... ...; | | Assert.cs:79:9:79:33 | ... ...; | Assert.cs:79:16:79:32 | Before String s = ... | @@ -1028,7 +1051,8 @@ dominance | Assert.cs:81:27:81:34 | After access to property Length | Assert.cs:81:9:81:35 | call to method WriteLine | | Assert.cs:81:27:81:34 | Before access to property Length | Assert.cs:81:27:81:27 | access to local variable s | | Assert.cs:81:27:81:34 | access to property Length | Assert.cs:81:27:81:34 | After access to property Length | -| Assert.cs:84:10:84:12 | Entry | Assert.cs:85:5:129:5 | {...} | +| Assert.cs:84:10:84:12 | Entry | Assert.cs:84:19:84:19 | b | +| Assert.cs:84:19:84:19 | b | Assert.cs:85:5:129:5 | {...} | | Assert.cs:85:5:129:5 | After {...} | Assert.cs:84:10:84:12 | Normal Exit | | Assert.cs:85:5:129:5 | {...} | Assert.cs:86:9:86:33 | ... ...; | | Assert.cs:86:9:86:33 | ... ...; | Assert.cs:86:16:86:32 | Before String s = ... | @@ -1381,10 +1405,16 @@ dominance | Assert.cs:128:27:128:34 | After access to property Length | Assert.cs:128:9:128:35 | call to method WriteLine | | Assert.cs:128:27:128:34 | Before access to property Length | Assert.cs:128:27:128:27 | access to local variable s | | Assert.cs:128:27:128:34 | access to property Length | Assert.cs:128:27:128:34 | After access to property Length | -| Assert.cs:131:18:131:32 | Entry | Assert.cs:135:5:136:5 | {...} | +| Assert.cs:131:18:131:32 | Entry | Assert.cs:132:74:132:83 | condition1 | | Assert.cs:131:18:131:32 | Normal Exit | Assert.cs:131:18:131:32 | Exit | +| Assert.cs:132:74:132:83 | condition1 | Assert.cs:133:73:133:82 | condition2 | +| Assert.cs:133:73:133:82 | condition2 | Assert.cs:134:17:134:28 | nonCondition | +| Assert.cs:134:17:134:28 | nonCondition | Assert.cs:135:5:136:5 | {...} | | Assert.cs:135:5:136:5 | {...} | Assert.cs:131:18:131:32 | Normal Exit | -| Assert.cs:138:10:138:12 | Entry | Assert.cs:139:5:142:5 | {...} | +| Assert.cs:138:10:138:12 | Entry | Assert.cs:138:19:138:20 | b1 | +| Assert.cs:138:19:138:20 | b1 | Assert.cs:138:28:138:29 | b2 | +| Assert.cs:138:28:138:29 | b2 | Assert.cs:138:37:138:38 | b3 | +| Assert.cs:138:37:138:38 | b3 | Assert.cs:139:5:142:5 | {...} | | Assert.cs:139:5:142:5 | {...} | Assert.cs:140:9:140:36 | ...; | | Assert.cs:140:9:140:35 | After call to method AssertTrueFalse | Assert.cs:140:9:140:36 | After ...; | | Assert.cs:140:9:140:35 | Before call to method AssertTrueFalse | Assert.cs:140:9:140:35 | this access | @@ -1469,17 +1499,22 @@ dominance | Assignments.cs:14:9:14:36 | ...; | Assignments.cs:14:9:14:35 | Before ... += ... | | Assignments.cs:14:9:14:36 | After ...; | Assignments.cs:4:5:15:5 | After {...} | | Assignments.cs:14:18:14:35 | (...) => ... | Assignments.cs:14:9:14:35 | ... += ... | -| Assignments.cs:14:18:14:35 | Entry | Assignments.cs:14:33:14:35 | {...} | +| Assignments.cs:14:18:14:35 | Entry | Assignments.cs:14:19:14:24 | sender | | Assignments.cs:14:18:14:35 | Normal Exit | Assignments.cs:14:18:14:35 | Exit | +| Assignments.cs:14:19:14:24 | sender | Assignments.cs:14:27:14:27 | e | +| Assignments.cs:14:27:14:27 | e | Assignments.cs:14:33:14:35 | {...} | | Assignments.cs:14:33:14:35 | {...} | Assignments.cs:14:18:14:35 | Normal Exit | -| Assignments.cs:17:40:17:40 | Entry | Assignments.cs:18:5:20:5 | {...} | +| Assignments.cs:17:40:17:40 | Entry | Assignments.cs:17:54:17:54 | x | | Assignments.cs:17:40:17:40 | Normal Exit | Assignments.cs:17:40:17:40 | Exit | +| Assignments.cs:17:54:17:54 | x | Assignments.cs:17:69:17:69 | y | +| Assignments.cs:17:69:17:69 | y | Assignments.cs:18:5:20:5 | {...} | | Assignments.cs:18:5:20:5 | {...} | Assignments.cs:19:9:19:17 | Before return ...; | | Assignments.cs:19:9:19:17 | Before return ...; | Assignments.cs:19:16:19:16 | access to parameter x | | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:17:40:17:40 | Normal Exit | | Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:19:9:19:17 | return ...; | -| Assignments.cs:27:10:27:23 | Entry | Assignments.cs:28:5:30:5 | {...} | +| Assignments.cs:27:10:27:23 | Entry | Assignments.cs:27:33:27:33 | x | | Assignments.cs:27:10:27:23 | Normal Exit | Assignments.cs:27:10:27:23 | Exit | +| Assignments.cs:27:33:27:33 | x | Assignments.cs:28:5:30:5 | {...} | | Assignments.cs:28:5:30:5 | After {...} | Assignments.cs:27:10:27:23 | Normal Exit | | Assignments.cs:28:5:30:5 | {...} | Assignments.cs:29:9:29:15 | ...; | | Assignments.cs:29:9:29:9 | access to parameter x | Assignments.cs:29:13:29:14 | 42 | @@ -1489,8 +1524,11 @@ dominance | Assignments.cs:29:9:29:15 | ...; | Assignments.cs:29:9:29:14 | Before ... = ... | | Assignments.cs:29:9:29:15 | After ...; | Assignments.cs:28:5:30:5 | After {...} | | Assignments.cs:29:13:29:14 | 42 | Assignments.cs:29:9:29:14 | ... = ... | -| Assignments.cs:32:10:32:22 | Entry | Assignments.cs:33:5:36:5 | {...} | +| Assignments.cs:32:10:32:22 | Entry | Assignments.cs:32:32:32:32 | x | | Assignments.cs:32:10:32:22 | Normal Exit | Assignments.cs:32:10:32:22 | Exit | +| Assignments.cs:32:32:32:32 | x | Assignments.cs:32:42:32:42 | o | +| Assignments.cs:32:42:32:42 | o | Assignments.cs:32:56:32:56 | y | +| Assignments.cs:32:56:32:56 | y | Assignments.cs:33:5:36:5 | {...} | | Assignments.cs:33:5:36:5 | After {...} | Assignments.cs:32:10:32:22 | Normal Exit | | Assignments.cs:33:5:36:5 | {...} | Assignments.cs:34:9:34:15 | ...; | | Assignments.cs:34:9:34:9 | access to parameter x | Assignments.cs:34:13:34:14 | 42 | @@ -1568,8 +1606,9 @@ dominance | BreakInTry.cs:1:7:1:16 | call to method | BreakInTry.cs:1:7:1:16 | After call to method | | BreakInTry.cs:1:7:1:16 | this access | BreakInTry.cs:1:7:1:16 | call to method | | BreakInTry.cs:1:7:1:16 | {...} | BreakInTry.cs:1:7:1:16 | Normal Exit | -| BreakInTry.cs:3:10:3:11 | Entry | BreakInTry.cs:4:5:18:5 | {...} | +| BreakInTry.cs:3:10:3:11 | Entry | BreakInTry.cs:3:22:3:25 | args | | BreakInTry.cs:3:10:3:11 | Normal Exit | BreakInTry.cs:3:10:3:11 | Exit | +| BreakInTry.cs:3:22:3:25 | args | BreakInTry.cs:4:5:18:5 | {...} | | BreakInTry.cs:4:5:18:5 | After {...} | BreakInTry.cs:3:10:3:11 | Normal Exit | | BreakInTry.cs:4:5:18:5 | {...} | BreakInTry.cs:5:9:17:9 | try {...} ... | | BreakInTry.cs:5:9:17:9 | After try {...} ... | BreakInTry.cs:4:5:18:5 | After {...} | @@ -1604,8 +1643,9 @@ dominance | BreakInTry.cs:15:17:15:28 | After ... == ... [true] | BreakInTry.cs:16:17:16:17 | ; | | BreakInTry.cs:15:17:15:28 | Before ... == ... | BreakInTry.cs:15:17:15:20 | access to parameter args | | BreakInTry.cs:15:25:15:28 | null | BreakInTry.cs:15:17:15:28 | ... == ... | -| BreakInTry.cs:20:10:20:11 | Entry | BreakInTry.cs:21:5:36:5 | {...} | +| BreakInTry.cs:20:10:20:11 | Entry | BreakInTry.cs:20:22:20:25 | args | | BreakInTry.cs:20:10:20:11 | Normal Exit | BreakInTry.cs:20:10:20:11 | Exit | +| BreakInTry.cs:20:22:20:25 | args | BreakInTry.cs:21:5:36:5 | {...} | | BreakInTry.cs:21:5:36:5 | After {...} | BreakInTry.cs:20:10:20:11 | Normal Exit | | BreakInTry.cs:21:5:36:5 | {...} | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | | BreakInTry.cs:22:9:34:9 | After foreach (... ... in ...) ... | BreakInTry.cs:35:7:35:7 | ; | @@ -1640,8 +1680,9 @@ dominance | BreakInTry.cs:31:21:31:32 | Before ... == ... | BreakInTry.cs:31:21:31:24 | access to parameter args | | BreakInTry.cs:31:29:31:32 | null | BreakInTry.cs:31:21:31:32 | ... == ... | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:21:5:36:5 | After {...} | -| BreakInTry.cs:38:10:38:11 | Entry | BreakInTry.cs:39:5:54:5 | {...} | +| BreakInTry.cs:38:10:38:11 | Entry | BreakInTry.cs:38:22:38:25 | args | | BreakInTry.cs:38:10:38:11 | Normal Exit | BreakInTry.cs:38:10:38:11 | Exit | +| BreakInTry.cs:38:22:38:25 | args | BreakInTry.cs:39:5:54:5 | {...} | | BreakInTry.cs:39:5:54:5 | {...} | BreakInTry.cs:40:9:52:9 | try {...} ... | | BreakInTry.cs:40:9:52:9 | After try {...} ... | BreakInTry.cs:53:7:53:7 | ; | | BreakInTry.cs:40:9:52:9 | try {...} ... | BreakInTry.cs:41:9:44:9 | {...} | @@ -1678,8 +1719,9 @@ dominance | BreakInTry.cs:49:28:49:31 | null | BreakInTry.cs:49:21:49:31 | ... == ... | | BreakInTry.cs:50:21:50:26 | Before break; | BreakInTry.cs:50:21:50:26 | break; | | BreakInTry.cs:53:7:53:7 | ; | BreakInTry.cs:39:5:54:5 | After {...} | -| BreakInTry.cs:56:10:56:11 | Entry | BreakInTry.cs:57:5:71:5 | {...} | +| BreakInTry.cs:56:10:56:11 | Entry | BreakInTry.cs:56:22:56:25 | args | | BreakInTry.cs:56:10:56:11 | Normal Exit | BreakInTry.cs:56:10:56:11 | Exit | +| BreakInTry.cs:56:22:56:25 | args | BreakInTry.cs:57:5:71:5 | {...} | | BreakInTry.cs:57:5:71:5 | {...} | BreakInTry.cs:58:9:70:9 | try {...} ... | | BreakInTry.cs:58:9:70:9 | After try {...} ... | BreakInTry.cs:57:5:71:5 | After {...} | | BreakInTry.cs:58:9:70:9 | try {...} ... | BreakInTry.cs:59:9:62:9 | {...} | @@ -1743,8 +1785,9 @@ dominance | CompileTimeOperators.cs:17:9:17:27 | Before return ...; | CompileTimeOperators.cs:17:16:17:26 | typeof(...) | | CompileTimeOperators.cs:17:9:17:27 | return ...; | CompileTimeOperators.cs:15:10:15:15 | Normal Exit | | CompileTimeOperators.cs:17:16:17:26 | typeof(...) | CompileTimeOperators.cs:17:9:17:27 | return ...; | -| CompileTimeOperators.cs:20:12:20:17 | Entry | CompileTimeOperators.cs:21:5:23:5 | {...} | +| CompileTimeOperators.cs:20:12:20:17 | Entry | CompileTimeOperators.cs:20:23:20:23 | i | | CompileTimeOperators.cs:20:12:20:17 | Normal Exit | CompileTimeOperators.cs:20:12:20:17 | Exit | +| CompileTimeOperators.cs:20:23:20:23 | i | CompileTimeOperators.cs:21:5:23:5 | {...} | | CompileTimeOperators.cs:21:5:23:5 | {...} | CompileTimeOperators.cs:22:9:22:25 | Before return ...; | | CompileTimeOperators.cs:22:9:22:25 | Before return ...; | CompileTimeOperators.cs:22:16:22:24 | nameof(...) | | CompileTimeOperators.cs:22:9:22:25 | return ...; | CompileTimeOperators.cs:20:12:20:17 | Normal Exit | @@ -1799,8 +1842,9 @@ dominance | ConditionalAccess.cs:1:7:1:23 | call to method | ConditionalAccess.cs:1:7:1:23 | After call to method | | ConditionalAccess.cs:1:7:1:23 | this access | ConditionalAccess.cs:1:7:1:23 | call to method | | ConditionalAccess.cs:1:7:1:23 | {...} | ConditionalAccess.cs:1:7:1:23 | Normal Exit | -| ConditionalAccess.cs:3:12:3:13 | Entry | ConditionalAccess.cs:3:26:3:49 | Before call to method ToLower | +| ConditionalAccess.cs:3:12:3:13 | Entry | ConditionalAccess.cs:3:20:3:20 | i | | ConditionalAccess.cs:3:12:3:13 | Normal Exit | ConditionalAccess.cs:3:12:3:13 | Exit | +| ConditionalAccess.cs:3:20:3:20 | i | ConditionalAccess.cs:3:26:3:49 | Before call to method ToLower | | ConditionalAccess.cs:3:26:3:26 | After access to parameter i [non-null] | ConditionalAccess.cs:3:26:3:38 | call to method ToString | | ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:26:3:26 | After access to parameter i [non-null] | | ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:26:3:26 | After access to parameter i [null] | @@ -1809,15 +1853,18 @@ dominance | ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:38 | After call to method ToString [non-null] | | ConditionalAccess.cs:3:26:3:49 | After call to method ToLower | ConditionalAccess.cs:3:12:3:13 | Normal Exit | | ConditionalAccess.cs:3:26:3:49 | Before call to method ToLower | ConditionalAccess.cs:3:26:3:38 | Before call to method ToString | -| ConditionalAccess.cs:5:10:5:11 | Entry | ConditionalAccess.cs:5:26:5:34 | Before access to property Length | +| ConditionalAccess.cs:5:10:5:11 | Entry | ConditionalAccess.cs:5:20:5:20 | s | | ConditionalAccess.cs:5:10:5:11 | Normal Exit | ConditionalAccess.cs:5:10:5:11 | Exit | +| ConditionalAccess.cs:5:20:5:20 | s | ConditionalAccess.cs:5:26:5:34 | Before access to property Length | | ConditionalAccess.cs:5:26:5:26 | After access to parameter s [non-null] | ConditionalAccess.cs:5:26:5:34 | access to property Length | | ConditionalAccess.cs:5:26:5:26 | access to parameter s | ConditionalAccess.cs:5:26:5:26 | After access to parameter s [non-null] | | ConditionalAccess.cs:5:26:5:26 | access to parameter s | ConditionalAccess.cs:5:26:5:26 | After access to parameter s [null] | | ConditionalAccess.cs:5:26:5:34 | After access to property Length | ConditionalAccess.cs:5:10:5:11 | Normal Exit | | ConditionalAccess.cs:5:26:5:34 | Before access to property Length | ConditionalAccess.cs:5:26:5:26 | access to parameter s | -| ConditionalAccess.cs:7:10:7:11 | Entry | ConditionalAccess.cs:7:38:7:55 | Before access to property Length | +| ConditionalAccess.cs:7:10:7:11 | Entry | ConditionalAccess.cs:7:20:7:21 | s1 | | ConditionalAccess.cs:7:10:7:11 | Normal Exit | ConditionalAccess.cs:7:10:7:11 | Exit | +| ConditionalAccess.cs:7:20:7:21 | s1 | ConditionalAccess.cs:7:31:7:32 | s2 | +| ConditionalAccess.cs:7:31:7:32 | s2 | ConditionalAccess.cs:7:38:7:55 | Before access to property Length | | ConditionalAccess.cs:7:38:7:55 | After access to property Length | ConditionalAccess.cs:7:10:7:11 | Normal Exit | | ConditionalAccess.cs:7:38:7:55 | Before access to property Length | ConditionalAccess.cs:7:39:7:46 | ... ?? ... | | ConditionalAccess.cs:7:39:7:40 | After access to parameter s1 [null] | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | @@ -1828,8 +1875,9 @@ dominance | ConditionalAccess.cs:7:45:7:46 | After access to parameter s2 [null] | ConditionalAccess.cs:7:39:7:46 | After ... ?? ... [null] | | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:45:7:46 | After access to parameter s2 [non-null] | | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:45:7:46 | After access to parameter s2 [null] | -| ConditionalAccess.cs:9:9:9:10 | Entry | ConditionalAccess.cs:9:25:9:38 | ... ?? ... | +| ConditionalAccess.cs:9:9:9:10 | Entry | ConditionalAccess.cs:9:19:9:19 | s | | ConditionalAccess.cs:9:9:9:10 | Normal Exit | ConditionalAccess.cs:9:9:9:10 | Exit | +| ConditionalAccess.cs:9:19:9:19 | s | ConditionalAccess.cs:9:25:9:38 | ... ?? ... | | ConditionalAccess.cs:9:25:9:25 | After access to parameter s [non-null] | ConditionalAccess.cs:9:25:9:33 | access to property Length | | ConditionalAccess.cs:9:25:9:25 | access to parameter s | ConditionalAccess.cs:9:25:9:25 | After access to parameter s [non-null] | | ConditionalAccess.cs:9:25:9:25 | access to parameter s | ConditionalAccess.cs:9:25:9:25 | After access to parameter s [null] | @@ -1838,8 +1886,9 @@ dominance | ConditionalAccess.cs:9:25:9:33 | access to property Length | ConditionalAccess.cs:9:25:9:33 | After access to property Length [non-null] | | ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:25:9:33 | Before access to property Length | | ConditionalAccess.cs:9:25:9:38 | After ... ?? ... | ConditionalAccess.cs:9:9:9:10 | Normal Exit | -| ConditionalAccess.cs:11:9:11:10 | Entry | ConditionalAccess.cs:12:5:17:5 | {...} | +| ConditionalAccess.cs:11:9:11:10 | Entry | ConditionalAccess.cs:11:19:11:19 | s | | ConditionalAccess.cs:11:9:11:10 | Normal Exit | ConditionalAccess.cs:11:9:11:10 | Exit | +| ConditionalAccess.cs:11:19:11:19 | s | ConditionalAccess.cs:12:5:17:5 | {...} | | ConditionalAccess.cs:12:5:17:5 | {...} | ConditionalAccess.cs:13:9:16:21 | if (...) ... | | ConditionalAccess.cs:13:9:16:21 | if (...) ... | ConditionalAccess.cs:13:13:13:25 | Before ... > ... | | ConditionalAccess.cs:13:13:13:13 | After access to parameter s [non-null] | ConditionalAccess.cs:13:13:13:21 | access to property Length | @@ -1860,16 +1909,19 @@ dominance | ConditionalAccess.cs:14:20:14:20 | 0 | ConditionalAccess.cs:14:13:14:21 | return ...; | | ConditionalAccess.cs:16:13:16:21 | Before return ...; | ConditionalAccess.cs:16:20:16:20 | 1 | | ConditionalAccess.cs:16:20:16:20 | 1 | ConditionalAccess.cs:16:13:16:21 | return ...; | -| ConditionalAccess.cs:19:12:19:13 | Entry | ConditionalAccess.cs:19:40:19:60 | Before call to method CommaJoinWith | +| ConditionalAccess.cs:19:12:19:13 | Entry | ConditionalAccess.cs:19:22:19:23 | s1 | | ConditionalAccess.cs:19:12:19:13 | Normal Exit | ConditionalAccess.cs:19:12:19:13 | Exit | +| ConditionalAccess.cs:19:22:19:23 | s1 | ConditionalAccess.cs:19:33:19:34 | s2 | +| ConditionalAccess.cs:19:33:19:34 | s2 | ConditionalAccess.cs:19:40:19:60 | Before call to method CommaJoinWith | | ConditionalAccess.cs:19:40:19:41 | After access to parameter s1 [non-null] | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:40:19:41 | After access to parameter s1 [non-null] | | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:40:19:41 | After access to parameter s1 [null] | | ConditionalAccess.cs:19:40:19:60 | After call to method CommaJoinWith | ConditionalAccess.cs:19:12:19:13 | Normal Exit | | ConditionalAccess.cs:19:40:19:60 | Before call to method CommaJoinWith | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:40:19:60 | call to method CommaJoinWith | -| ConditionalAccess.cs:21:10:21:11 | Entry | ConditionalAccess.cs:22:5:26:5 | {...} | +| ConditionalAccess.cs:21:10:21:11 | Entry | ConditionalAccess.cs:21:17:21:17 | i | | ConditionalAccess.cs:21:10:21:11 | Normal Exit | ConditionalAccess.cs:21:10:21:11 | Exit | +| ConditionalAccess.cs:21:17:21:17 | i | ConditionalAccess.cs:22:5:26:5 | {...} | | ConditionalAccess.cs:22:5:26:5 | After {...} | ConditionalAccess.cs:21:10:21:11 | Normal Exit | | ConditionalAccess.cs:22:5:26:5 | {...} | ConditionalAccess.cs:23:9:23:39 | ... ...; | | ConditionalAccess.cs:23:9:23:39 | ... ...; | ConditionalAccess.cs:23:13:23:38 | Before Nullable j = ... | @@ -1910,15 +1962,18 @@ dominance | ConditionalAccess.cs:25:13:25:32 | After call to method CommaJoinWith | ConditionalAccess.cs:25:9:25:32 | ... = ... | | ConditionalAccess.cs:25:13:25:32 | Before call to method CommaJoinWith | ConditionalAccess.cs:25:13:25:14 | "" | | ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:13:25:32 | call to method CommaJoinWith | -| ConditionalAccess.cs:30:10:30:12 | Entry | ConditionalAccess.cs:30:28:30:32 | Before ... = ... | +| ConditionalAccess.cs:30:10:30:12 | Entry | ConditionalAccess.cs:30:22:30:22 | i | | ConditionalAccess.cs:30:10:30:12 | Normal Exit | ConditionalAccess.cs:30:10:30:12 | Exit | +| ConditionalAccess.cs:30:22:30:22 | i | ConditionalAccess.cs:30:28:30:32 | Before ... = ... | | ConditionalAccess.cs:30:28:30:28 | access to parameter i | ConditionalAccess.cs:30:32:30:32 | 0 | | ConditionalAccess.cs:30:28:30:32 | ... = ... | ConditionalAccess.cs:30:28:30:32 | After ... = ... | | ConditionalAccess.cs:30:28:30:32 | After ... = ... | ConditionalAccess.cs:30:10:30:12 | Normal Exit | | ConditionalAccess.cs:30:28:30:32 | Before ... = ... | ConditionalAccess.cs:30:28:30:28 | access to parameter i | | ConditionalAccess.cs:30:32:30:32 | 0 | ConditionalAccess.cs:30:28:30:32 | ... = ... | -| ConditionalAccess.cs:32:10:32:11 | Entry | ConditionalAccess.cs:33:5:36:5 | {...} | +| ConditionalAccess.cs:32:10:32:11 | Entry | ConditionalAccess.cs:32:18:32:18 | b | | ConditionalAccess.cs:32:10:32:11 | Normal Exit | ConditionalAccess.cs:32:10:32:11 | Exit | +| ConditionalAccess.cs:32:18:32:18 | b | ConditionalAccess.cs:32:29:32:29 | i | +| ConditionalAccess.cs:32:29:32:29 | i | ConditionalAccess.cs:33:5:36:5 | {...} | | ConditionalAccess.cs:33:5:36:5 | After {...} | ConditionalAccess.cs:32:10:32:11 | Normal Exit | | ConditionalAccess.cs:33:5:36:5 | {...} | ConditionalAccess.cs:34:9:34:14 | ...; | | ConditionalAccess.cs:34:9:34:9 | access to parameter i | ConditionalAccess.cs:34:13:34:13 | 0 | @@ -1938,17 +1993,21 @@ dominance | ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:9:35:24 | Before call to method Out | | ConditionalAccess.cs:35:9:35:25 | After ...; | ConditionalAccess.cs:33:5:36:5 | After {...} | | ConditionalAccess.cs:35:23:35:23 | access to parameter i | ConditionalAccess.cs:35:9:35:24 | call to method Out | -| ConditionalAccess.cs:42:9:42:11 | Entry | ConditionalAccess.cs:42:13:42:28 | {...} | +| ConditionalAccess.cs:40:21:40:25 | index | ConditionalAccess.cs:42:13:42:28 | {...} | +| ConditionalAccess.cs:40:21:40:25 | index | ConditionalAccess.cs:43:9:43:11 | value | +| ConditionalAccess.cs:42:9:42:11 | Entry | ConditionalAccess.cs:40:21:40:25 | index | | ConditionalAccess.cs:42:9:42:11 | Normal Exit | ConditionalAccess.cs:42:9:42:11 | Exit | | ConditionalAccess.cs:42:13:42:28 | {...} | ConditionalAccess.cs:42:15:42:26 | Before return ...; | | ConditionalAccess.cs:42:15:42:26 | Before return ...; | ConditionalAccess.cs:42:22:42:25 | null | | ConditionalAccess.cs:42:15:42:26 | return ...; | ConditionalAccess.cs:42:9:42:11 | Normal Exit | | ConditionalAccess.cs:42:22:42:25 | null | ConditionalAccess.cs:42:15:42:26 | return ...; | -| ConditionalAccess.cs:43:9:43:11 | Entry | ConditionalAccess.cs:43:13:43:15 | {...} | +| ConditionalAccess.cs:43:9:43:11 | Entry | ConditionalAccess.cs:40:21:40:25 | index | | ConditionalAccess.cs:43:9:43:11 | Normal Exit | ConditionalAccess.cs:43:9:43:11 | Exit | +| ConditionalAccess.cs:43:9:43:11 | value | ConditionalAccess.cs:43:13:43:15 | {...} | | ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:9:43:11 | Normal Exit | -| ConditionalAccess.cs:46:10:46:11 | Entry | ConditionalAccess.cs:47:5:55:5 | {...} | +| ConditionalAccess.cs:46:10:46:11 | Entry | ConditionalAccess.cs:46:31:46:32 | ca | | ConditionalAccess.cs:46:10:46:11 | Normal Exit | ConditionalAccess.cs:46:10:46:11 | Exit | +| ConditionalAccess.cs:46:31:46:32 | ca | ConditionalAccess.cs:47:5:55:5 | {...} | | ConditionalAccess.cs:47:5:55:5 | After {...} | ConditionalAccess.cs:46:10:46:11 | Normal Exit | | ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:48:9:48:26 | ...; | | ConditionalAccess.cs:48:9:48:10 | After access to parameter ca [non-null] | ConditionalAccess.cs:48:9:48:20 | access to field IntField | @@ -2035,8 +2094,10 @@ dominance | ConditionalAccess.cs:54:12:54:29 | After ... += ... | ConditionalAccess.cs:54:9:54:30 | After ...; | | ConditionalAccess.cs:54:12:54:29 | Before ... += ... | ConditionalAccess.cs:54:9:54:22 | Before access to property StringProp | | ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:12:54:29 | ... += ... | -| ConditionalAccess.cs:60:26:60:38 | Entry | ConditionalAccess.cs:60:70:60:83 | Before ... + ... | +| ConditionalAccess.cs:60:26:60:38 | Entry | ConditionalAccess.cs:60:52:60:53 | s1 | | ConditionalAccess.cs:60:26:60:38 | Normal Exit | ConditionalAccess.cs:60:26:60:38 | Exit | +| ConditionalAccess.cs:60:52:60:53 | s1 | ConditionalAccess.cs:60:63:60:64 | s2 | +| ConditionalAccess.cs:60:63:60:64 | s2 | ConditionalAccess.cs:60:70:60:83 | Before ... + ... | | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:75:60:78 | ", " | | ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:70:60:78 | After ... + ... | | ConditionalAccess.cs:60:70:60:78 | After ... + ... | ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | @@ -2056,8 +2117,10 @@ dominance | Conditions.cs:1:7:1:16 | call to method | Conditions.cs:1:7:1:16 | After call to method | | Conditions.cs:1:7:1:16 | this access | Conditions.cs:1:7:1:16 | call to method | | Conditions.cs:1:7:1:16 | {...} | Conditions.cs:1:7:1:16 | Normal Exit | -| Conditions.cs:3:10:3:19 | Entry | Conditions.cs:4:5:9:5 | {...} | +| Conditions.cs:3:10:3:19 | Entry | Conditions.cs:3:26:3:28 | inc | | Conditions.cs:3:10:3:19 | Normal Exit | Conditions.cs:3:10:3:19 | Exit | +| Conditions.cs:3:26:3:28 | inc | Conditions.cs:3:39:3:39 | x | +| Conditions.cs:3:39:3:39 | x | Conditions.cs:4:5:9:5 | {...} | | Conditions.cs:4:5:9:5 | After {...} | Conditions.cs:3:10:3:19 | Normal Exit | | Conditions.cs:4:5:9:5 | {...} | Conditions.cs:5:9:6:16 | if (...) ... | | Conditions.cs:5:9:6:16 | After if (...) ... | Conditions.cs:7:9:8:16 | if (...) ... | @@ -2083,8 +2146,9 @@ dominance | Conditions.cs:8:13:8:15 | After ...-- | Conditions.cs:8:13:8:16 | After ...; | | Conditions.cs:8:13:8:15 | Before ...-- | Conditions.cs:8:13:8:13 | access to parameter x | | Conditions.cs:8:13:8:16 | ...; | Conditions.cs:8:13:8:15 | Before ...-- | -| Conditions.cs:11:9:11:10 | Entry | Conditions.cs:12:5:20:5 | {...} | +| Conditions.cs:11:9:11:10 | Entry | Conditions.cs:11:17:11:17 | b | | Conditions.cs:11:9:11:10 | Normal Exit | Conditions.cs:11:9:11:10 | Exit | +| Conditions.cs:11:17:11:17 | b | Conditions.cs:12:5:20:5 | {...} | | Conditions.cs:12:5:20:5 | {...} | Conditions.cs:13:9:13:18 | ... ...; | | Conditions.cs:13:9:13:18 | ... ...; | Conditions.cs:13:13:13:17 | Before Int32 x = ... | | Conditions.cs:13:9:13:18 | After ... ...; | Conditions.cs:14:9:15:16 | if (...) ... | @@ -2126,8 +2190,10 @@ dominance | Conditions.cs:19:9:19:17 | Before return ...; | Conditions.cs:19:16:19:16 | access to local variable x | | Conditions.cs:19:9:19:17 | return ...; | Conditions.cs:11:9:11:10 | Normal Exit | | Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:19:9:19:17 | return ...; | -| Conditions.cs:22:9:22:10 | Entry | Conditions.cs:23:5:31:5 | {...} | +| Conditions.cs:22:9:22:10 | Entry | Conditions.cs:22:17:22:18 | b1 | | Conditions.cs:22:9:22:10 | Normal Exit | Conditions.cs:22:9:22:10 | Exit | +| Conditions.cs:22:17:22:18 | b1 | Conditions.cs:22:26:22:27 | b2 | +| Conditions.cs:22:26:22:27 | b2 | Conditions.cs:23:5:31:5 | {...} | | Conditions.cs:23:5:31:5 | {...} | Conditions.cs:24:9:24:18 | ... ...; | | Conditions.cs:24:9:24:18 | ... ...; | Conditions.cs:24:13:24:17 | Before Int32 x = ... | | Conditions.cs:24:9:24:18 | After ... ...; | Conditions.cs:25:9:27:20 | if (...) ... | @@ -2163,8 +2229,9 @@ dominance | Conditions.cs:30:9:30:17 | Before return ...; | Conditions.cs:30:16:30:16 | access to local variable x | | Conditions.cs:30:9:30:17 | return ...; | Conditions.cs:22:9:22:10 | Normal Exit | | Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:30:9:30:17 | return ...; | -| Conditions.cs:33:9:33:10 | Entry | Conditions.cs:34:5:44:5 | {...} | +| Conditions.cs:33:9:33:10 | Entry | Conditions.cs:33:17:33:18 | b1 | | Conditions.cs:33:9:33:10 | Normal Exit | Conditions.cs:33:9:33:10 | Exit | +| Conditions.cs:33:17:33:18 | b1 | Conditions.cs:34:5:44:5 | {...} | | Conditions.cs:34:5:44:5 | {...} | Conditions.cs:35:9:35:18 | ... ...; | | Conditions.cs:35:9:35:18 | ... ...; | Conditions.cs:35:13:35:17 | Before Int32 x = ... | | Conditions.cs:35:9:35:18 | After ... ...; | Conditions.cs:36:9:36:23 | ... ...; | @@ -2214,8 +2281,10 @@ dominance | Conditions.cs:43:9:43:17 | Before return ...; | Conditions.cs:43:16:43:16 | access to local variable x | | Conditions.cs:43:9:43:17 | return ...; | Conditions.cs:33:9:33:10 | Normal Exit | | Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:43:9:43:17 | return ...; | -| Conditions.cs:46:9:46:10 | Entry | Conditions.cs:47:5:55:5 | {...} | +| Conditions.cs:46:9:46:10 | Entry | Conditions.cs:46:17:46:17 | b | | Conditions.cs:46:9:46:10 | Normal Exit | Conditions.cs:46:9:46:10 | Exit | +| Conditions.cs:46:17:46:17 | b | Conditions.cs:46:24:46:24 | x | +| Conditions.cs:46:24:46:24 | x | Conditions.cs:47:5:55:5 | {...} | | Conditions.cs:47:5:55:5 | {...} | Conditions.cs:48:9:48:18 | ... ...; | | Conditions.cs:48:9:48:18 | ... ...; | Conditions.cs:48:13:48:17 | Before Int32 y = ... | | Conditions.cs:48:9:48:18 | After ... ...; | Conditions.cs:49:9:53:9 | while (...) ... | @@ -2251,8 +2320,10 @@ dominance | Conditions.cs:54:9:54:17 | Before return ...; | Conditions.cs:54:16:54:16 | access to local variable y | | Conditions.cs:54:9:54:17 | return ...; | Conditions.cs:46:9:46:10 | Normal Exit | | Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:54:9:54:17 | return ...; | -| Conditions.cs:57:9:57:10 | Entry | Conditions.cs:58:5:68:5 | {...} | +| Conditions.cs:57:9:57:10 | Entry | Conditions.cs:57:17:57:17 | b | | Conditions.cs:57:9:57:10 | Normal Exit | Conditions.cs:57:9:57:10 | Exit | +| Conditions.cs:57:17:57:17 | b | Conditions.cs:57:24:57:24 | x | +| Conditions.cs:57:24:57:24 | x | Conditions.cs:58:5:68:5 | {...} | | Conditions.cs:58:5:68:5 | {...} | Conditions.cs:59:9:59:18 | ... ...; | | Conditions.cs:59:9:59:18 | ... ...; | Conditions.cs:59:13:59:17 | Before Int32 y = ... | | Conditions.cs:59:9:59:18 | After ... ...; | Conditions.cs:60:9:64:9 | while (...) ... | @@ -2298,8 +2369,9 @@ dominance | Conditions.cs:67:9:67:17 | Before return ...; | Conditions.cs:67:16:67:16 | access to local variable y | | Conditions.cs:67:9:67:17 | return ...; | Conditions.cs:57:9:57:10 | Normal Exit | | Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:67:9:67:17 | return ...; | -| Conditions.cs:70:9:70:10 | Entry | Conditions.cs:71:5:84:5 | {...} | +| Conditions.cs:70:9:70:10 | Entry | Conditions.cs:70:21:70:22 | ss | | Conditions.cs:70:9:70:10 | Normal Exit | Conditions.cs:70:9:70:10 | Exit | +| Conditions.cs:70:21:70:22 | ss | Conditions.cs:71:5:84:5 | {...} | | Conditions.cs:71:5:84:5 | {...} | Conditions.cs:72:9:72:30 | ... ...; | | Conditions.cs:72:9:72:30 | ... ...; | Conditions.cs:72:13:72:29 | Before Boolean b = ... | | Conditions.cs:72:9:72:30 | After ... ...; | Conditions.cs:73:9:73:18 | ... ...; | @@ -2367,8 +2439,9 @@ dominance | Conditions.cs:83:9:83:17 | Before return ...; | Conditions.cs:83:16:83:16 | access to local variable x | | Conditions.cs:83:9:83:17 | return ...; | Conditions.cs:70:9:70:10 | Normal Exit | | Conditions.cs:83:16:83:16 | access to local variable x | Conditions.cs:83:9:83:17 | return ...; | -| Conditions.cs:86:9:86:10 | Entry | Conditions.cs:87:5:100:5 | {...} | +| Conditions.cs:86:9:86:10 | Entry | Conditions.cs:86:21:86:22 | ss | | Conditions.cs:86:9:86:10 | Normal Exit | Conditions.cs:86:9:86:10 | Exit | +| Conditions.cs:86:21:86:22 | ss | Conditions.cs:87:5:100:5 | {...} | | Conditions.cs:87:5:100:5 | {...} | Conditions.cs:88:9:88:30 | ... ...; | | Conditions.cs:88:9:88:30 | ... ...; | Conditions.cs:88:13:88:29 | Before Boolean b = ... | | Conditions.cs:88:9:88:30 | After ... ...; | Conditions.cs:89:9:89:18 | ... ...; | @@ -2436,8 +2509,9 @@ dominance | Conditions.cs:99:9:99:17 | Before return ...; | Conditions.cs:99:16:99:16 | access to local variable x | | Conditions.cs:99:9:99:17 | return ...; | Conditions.cs:86:9:86:10 | Normal Exit | | Conditions.cs:99:16:99:16 | access to local variable x | Conditions.cs:99:9:99:17 | return ...; | -| Conditions.cs:102:12:102:13 | Entry | Conditions.cs:103:5:111:5 | {...} | +| Conditions.cs:102:12:102:13 | Entry | Conditions.cs:102:20:102:20 | b | | Conditions.cs:102:12:102:13 | Normal Exit | Conditions.cs:102:12:102:13 | Exit | +| Conditions.cs:102:20:102:20 | b | Conditions.cs:103:5:111:5 | {...} | | Conditions.cs:103:5:111:5 | {...} | Conditions.cs:104:9:104:29 | ... ...; | | Conditions.cs:104:9:104:29 | ... ...; | Conditions.cs:104:13:104:28 | Before String x = ... | | Conditions.cs:104:9:104:29 | After ... ...; | Conditions.cs:105:9:106:20 | if (...) ... | @@ -2487,8 +2561,9 @@ dominance | Conditions.cs:110:9:110:17 | Before return ...; | Conditions.cs:110:16:110:16 | access to local variable x | | Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:102:12:102:13 | Normal Exit | | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:9:110:17 | return ...; | -| Conditions.cs:113:10:113:11 | Entry | Conditions.cs:114:5:124:5 | {...} | +| Conditions.cs:113:10:113:11 | Entry | Conditions.cs:113:22:113:25 | args | | Conditions.cs:113:10:113:11 | Normal Exit | Conditions.cs:113:10:113:11 | Exit | +| Conditions.cs:113:22:113:25 | args | Conditions.cs:114:5:124:5 | {...} | | Conditions.cs:114:5:124:5 | After {...} | Conditions.cs:113:10:113:11 | Normal Exit | | Conditions.cs:114:5:124:5 | {...} | Conditions.cs:115:9:115:24 | ... ...; | | Conditions.cs:115:9:115:24 | ... ...; | Conditions.cs:115:16:115:23 | Before String s = ... | @@ -2596,8 +2671,9 @@ dominance | Conditions.cs:137:21:137:37 | call to method ToString | Conditions.cs:137:21:137:37 | After call to method ToString | | Conditions.cs:137:21:137:38 | ...; | Conditions.cs:137:21:137:37 | Before call to method ToString | | Conditions.cs:137:21:137:38 | After ...; | Conditions.cs:136:17:138:17 | After {...} | -| Conditions.cs:143:10:143:12 | Entry | Conditions.cs:144:5:150:5 | {...} | +| Conditions.cs:143:10:143:12 | Entry | Conditions.cs:143:19:143:19 | b | | Conditions.cs:143:10:143:12 | Normal Exit | Conditions.cs:143:10:143:12 | Exit | +| Conditions.cs:143:19:143:19 | b | Conditions.cs:144:5:150:5 | {...} | | Conditions.cs:144:5:150:5 | After {...} | Conditions.cs:143:10:143:12 | Normal Exit | | Conditions.cs:144:5:150:5 | {...} | Conditions.cs:145:9:145:30 | ... ...; | | Conditions.cs:145:9:145:30 | ... ...; | Conditions.cs:145:13:145:29 | Before String s = ... | @@ -2652,8 +2728,15 @@ dominance | DefaultParam.cs:1:7:1:18 | call to method | DefaultParam.cs:1:7:1:18 | After call to method | | DefaultParam.cs:1:7:1:18 | this access | DefaultParam.cs:1:7:1:18 | call to method | | DefaultParam.cs:1:7:1:18 | {...} | DefaultParam.cs:1:7:1:18 | Normal Exit | -| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:4:5:6:5 | {...} | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:20:3:20 | b | | DefaultParam.cs:3:12:3:13 | Normal Exit | DefaultParam.cs:3:12:3:13 | Exit | +| DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:3:30:3:30 | s | +| DefaultParam.cs:3:30:3:30 | After s [no-match] | DefaultParam.cs:3:34:3:35 | "" | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:30:3:30 | After s [match] | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:30:3:30 | After s [no-match] | +| DefaultParam.cs:3:42:3:42 | After i [no-match] | DefaultParam.cs:3:46:3:46 | 0 | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | After i [match] | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | After i [no-match] | | DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:5:9:5:25 | Before return ...; | | DefaultParam.cs:5:9:5:25 | Before return ...; | DefaultParam.cs:5:16:5:24 | Before ... + ... | | DefaultParam.cs:5:9:5:25 | return ...; | DefaultParam.cs:3:12:3:13 | Normal Exit | @@ -2757,7 +2840,8 @@ dominance | ExitMethods.cs:62:9:62:22 | Before call to method ErrorAlways3 | ExitMethods.cs:62:9:62:22 | call to method ErrorAlways3 | | ExitMethods.cs:62:9:62:22 | call to method ErrorAlways3 | ExitMethods.cs:60:10:60:11 | Exceptional Exit | | ExitMethods.cs:62:9:62:23 | ...; | ExitMethods.cs:62:9:62:22 | Before call to method ErrorAlways3 | -| ExitMethods.cs:66:17:66:26 | Entry | ExitMethods.cs:67:5:70:5 | {...} | +| ExitMethods.cs:66:17:66:26 | Entry | ExitMethods.cs:66:33:66:33 | b | +| ExitMethods.cs:66:33:66:33 | b | ExitMethods.cs:67:5:70:5 | {...} | | ExitMethods.cs:67:5:70:5 | After {...} | ExitMethods.cs:66:17:66:26 | Normal Exit | | ExitMethods.cs:67:5:70:5 | {...} | ExitMethods.cs:68:9:69:34 | if (...) ... | | ExitMethods.cs:68:9:69:34 | After if (...) ... | ExitMethods.cs:67:5:70:5 | After {...} | @@ -2771,8 +2855,9 @@ dominance | ExitMethods.cs:69:19:69:33 | After object creation of type Exception | ExitMethods.cs:69:13:69:34 | throw ...; | | ExitMethods.cs:69:19:69:33 | Before object creation of type Exception | ExitMethods.cs:69:19:69:33 | object creation of type Exception | | ExitMethods.cs:69:19:69:33 | object creation of type Exception | ExitMethods.cs:69:19:69:33 | After object creation of type Exception | -| ExitMethods.cs:72:17:72:27 | Entry | ExitMethods.cs:73:5:78:5 | {...} | +| ExitMethods.cs:72:17:72:27 | Entry | ExitMethods.cs:72:34:72:34 | b | | ExitMethods.cs:72:17:72:27 | Exceptional Exit | ExitMethods.cs:72:17:72:27 | Exit | +| ExitMethods.cs:72:34:72:34 | b | ExitMethods.cs:73:5:78:5 | {...} | | ExitMethods.cs:73:5:78:5 | {...} | ExitMethods.cs:74:9:77:45 | if (...) ... | | ExitMethods.cs:74:9:77:45 | if (...) ... | ExitMethods.cs:74:13:74:13 | access to parameter b | | ExitMethods.cs:74:13:74:13 | After access to parameter b [false] | ExitMethods.cs:77:13:77:45 | Before throw ...; | @@ -2835,7 +2920,8 @@ dominance | ExitMethods.cs:107:9:107:47 | Before call to method Exit | ExitMethods.cs:107:9:107:47 | call to method Exit | | ExitMethods.cs:107:9:107:47 | call to method Exit | ExitMethods.cs:105:10:105:24 | Exceptional Exit | | ExitMethods.cs:107:9:107:48 | ...; | ExitMethods.cs:107:9:107:47 | Before call to method Exit | -| ExitMethods.cs:110:13:110:21 | Entry | ExitMethods.cs:111:5:113:5 | {...} | +| ExitMethods.cs:110:13:110:21 | Entry | ExitMethods.cs:110:31:110:35 | input | +| ExitMethods.cs:110:31:110:35 | input | ExitMethods.cs:111:5:113:5 | {...} | | ExitMethods.cs:111:5:113:5 | {...} | ExitMethods.cs:112:9:112:77 | Before return ...; | | ExitMethods.cs:112:9:112:77 | Before return ...; | ExitMethods.cs:112:16:112:76 | ... ? ... : ... | | ExitMethods.cs:112:9:112:77 | return ...; | ExitMethods.cs:110:13:110:21 | Normal Exit | @@ -2865,8 +2951,9 @@ dominance | ExitMethods.cs:112:47:112:76 | Before object creation of type ArgumentException | ExitMethods.cs:112:69:112:75 | "input" | | ExitMethods.cs:112:47:112:76 | object creation of type ArgumentException | ExitMethods.cs:112:47:112:76 | After object creation of type ArgumentException | | ExitMethods.cs:112:69:112:75 | "input" | ExitMethods.cs:112:47:112:76 | object creation of type ArgumentException | -| ExitMethods.cs:115:16:115:34 | Entry | ExitMethods.cs:116:5:118:5 | {...} | +| ExitMethods.cs:115:16:115:34 | Entry | ExitMethods.cs:115:43:115:43 | s | | ExitMethods.cs:115:16:115:34 | Normal Exit | ExitMethods.cs:115:16:115:34 | Exit | +| ExitMethods.cs:115:43:115:43 | s | ExitMethods.cs:116:5:118:5 | {...} | | ExitMethods.cs:116:5:118:5 | {...} | ExitMethods.cs:117:9:117:39 | Before return ...; | | ExitMethods.cs:117:9:117:39 | Before return ...; | ExitMethods.cs:117:16:117:38 | ... ? ... : ... | | ExitMethods.cs:117:9:117:39 | return ...; | ExitMethods.cs:115:16:115:34 | Normal Exit | @@ -2893,7 +2980,8 @@ dominance | ExitMethods.cs:128:9:128:26 | call to method FailingAssertion | ExitMethods.cs:126:17:126:33 | Exceptional Exit | | ExitMethods.cs:128:9:128:26 | this access | ExitMethods.cs:128:9:128:26 | call to method FailingAssertion | | ExitMethods.cs:128:9:128:27 | ...; | ExitMethods.cs:128:9:128:26 | Before call to method FailingAssertion | -| ExitMethods.cs:132:10:132:20 | Entry | ExitMethods.cs:132:33:132:49 | Before call to method IsFalse | +| ExitMethods.cs:132:10:132:20 | Entry | ExitMethods.cs:132:27:132:27 | b | +| ExitMethods.cs:132:27:132:27 | b | ExitMethods.cs:132:33:132:49 | Before call to method IsFalse | | ExitMethods.cs:132:33:132:49 | After call to method IsFalse | ExitMethods.cs:132:10:132:20 | Normal Exit | | ExitMethods.cs:132:33:132:49 | Before call to method IsFalse | ExitMethods.cs:132:48:132:48 | access to parameter b | | ExitMethods.cs:132:33:132:49 | call to method IsFalse | ExitMethods.cs:132:10:132:20 | Exceptional Exit | @@ -2907,8 +2995,10 @@ dominance | ExitMethods.cs:136:9:136:25 | this access | ExitMethods.cs:136:21:136:24 | true | | ExitMethods.cs:136:9:136:26 | ...; | ExitMethods.cs:136:9:136:25 | Before call to method AssertFalse | | ExitMethods.cs:136:21:136:24 | true | ExitMethods.cs:136:9:136:25 | call to method AssertFalse | -| ExitMethods.cs:140:17:140:42 | Entry | ExitMethods.cs:141:5:147:5 | {...} | +| ExitMethods.cs:140:17:140:42 | Entry | ExitMethods.cs:140:49:140:49 | b | | ExitMethods.cs:140:17:140:42 | Exceptional Exit | ExitMethods.cs:140:17:140:42 | Exit | +| ExitMethods.cs:140:49:140:49 | b | ExitMethods.cs:140:70:140:70 | e | +| ExitMethods.cs:140:70:140:70 | e | ExitMethods.cs:141:5:147:5 | {...} | | ExitMethods.cs:141:5:147:5 | {...} | ExitMethods.cs:142:9:145:53 | if (...) ... | | ExitMethods.cs:142:9:145:53 | if (...) ... | ExitMethods.cs:142:13:142:13 | access to parameter b | | ExitMethods.cs:142:13:142:13 | After access to parameter b [false] | ExitMethods.cs:145:13:145:53 | ...; | @@ -2924,8 +3014,9 @@ dominance | ExitMethods.cs:145:13:145:52 | Before call to method Throw | ExitMethods.cs:145:13:145:44 | Before call to method Capture | | ExitMethods.cs:145:13:145:53 | ...; | ExitMethods.cs:145:13:145:52 | Before call to method Throw | | ExitMethods.cs:145:43:145:43 | access to parameter e | ExitMethods.cs:145:13:145:44 | call to method Capture | -| Extensions.cs:5:23:5:29 | Entry | Extensions.cs:6:5:8:5 | {...} | +| Extensions.cs:5:23:5:29 | Entry | Extensions.cs:5:43:5:43 | s | | Extensions.cs:5:23:5:29 | Normal Exit | Extensions.cs:5:23:5:29 | Exit | +| Extensions.cs:5:43:5:43 | s | Extensions.cs:6:5:8:5 | {...} | | Extensions.cs:6:5:8:5 | {...} | Extensions.cs:7:9:7:30 | Before return ...; | | Extensions.cs:7:9:7:30 | Before return ...; | Extensions.cs:7:16:7:29 | Before call to method Parse | | Extensions.cs:7:9:7:30 | return ...; | Extensions.cs:5:23:5:29 | Normal Exit | @@ -2933,8 +3024,10 @@ dominance | Extensions.cs:7:16:7:29 | Before call to method Parse | Extensions.cs:7:28:7:28 | access to parameter s | | Extensions.cs:7:16:7:29 | call to method Parse | Extensions.cs:7:16:7:29 | After call to method Parse | | Extensions.cs:7:28:7:28 | access to parameter s | Extensions.cs:7:16:7:29 | call to method Parse | -| Extensions.cs:10:24:10:29 | Entry | Extensions.cs:11:5:13:5 | {...} | +| Extensions.cs:10:24:10:29 | Entry | Extensions.cs:10:43:10:43 | s | | Extensions.cs:10:24:10:29 | Normal Exit | Extensions.cs:10:24:10:29 | Exit | +| Extensions.cs:10:43:10:43 | s | Extensions.cs:10:65:10:65 | f | +| Extensions.cs:10:65:10:65 | f | Extensions.cs:11:5:13:5 | {...} | | Extensions.cs:11:5:13:5 | {...} | Extensions.cs:12:9:12:20 | Before return ...; | | Extensions.cs:12:9:12:20 | Before return ...; | Extensions.cs:12:16:12:19 | Before delegate call | | Extensions.cs:12:9:12:20 | return ...; | Extensions.cs:10:24:10:29 | Normal Exit | @@ -2949,8 +3042,9 @@ dominance | Extensions.cs:15:40:15:51 | Before call to method ToInt32 | Extensions.cs:15:48:15:50 | "0" | | Extensions.cs:15:40:15:51 | call to method ToInt32 | Extensions.cs:15:40:15:51 | After call to method ToInt32 | | Extensions.cs:15:48:15:50 | "0" | Extensions.cs:15:40:15:51 | call to method ToInt32 | -| Extensions.cs:20:17:20:20 | Entry | Extensions.cs:21:5:26:5 | {...} | +| Extensions.cs:20:17:20:20 | Entry | Extensions.cs:20:29:20:29 | s | | Extensions.cs:20:17:20:20 | Normal Exit | Extensions.cs:20:17:20:20 | Exit | +| Extensions.cs:20:29:20:29 | s | Extensions.cs:21:5:26:5 | {...} | | Extensions.cs:21:5:26:5 | After {...} | Extensions.cs:20:17:20:20 | Normal Exit | | Extensions.cs:21:5:26:5 | {...} | Extensions.cs:22:9:22:20 | ...; | | Extensions.cs:22:9:22:9 | access to parameter s | Extensions.cs:22:9:22:19 | call to method ToInt32 | @@ -3330,7 +3424,8 @@ dominance | Finally.cs:141:19:141:43 | Before object creation of type ArgumentException | Finally.cs:141:41:141:42 | "" | | Finally.cs:141:19:141:43 | object creation of type ArgumentException | Finally.cs:141:19:141:43 | After object creation of type ArgumentException | | Finally.cs:141:41:141:42 | "" | Finally.cs:141:19:141:43 | object creation of type ArgumentException | -| Finally.cs:147:10:147:11 | Entry | Finally.cs:148:5:170:5 | {...} | +| Finally.cs:147:10:147:11 | Entry | Finally.cs:147:22:147:25 | args | +| Finally.cs:147:22:147:25 | args | Finally.cs:148:5:170:5 | {...} | | Finally.cs:148:5:170:5 | After {...} | Finally.cs:147:10:147:11 | Normal Exit | | Finally.cs:148:5:170:5 | {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:149:9:169:9 | After try {...} ... | Finally.cs:148:5:170:5 | After {...} | @@ -3437,7 +3532,9 @@ dominance | Finally.cs:174:11:174:20 | call to method | Finally.cs:174:11:174:20 | After call to method | | Finally.cs:174:11:174:20 | this access | Finally.cs:174:11:174:20 | call to method | | Finally.cs:174:11:174:20 | {...} | Finally.cs:174:11:174:20 | Normal Exit | -| Finally.cs:176:10:176:11 | Entry | Finally.cs:177:5:193:5 | {...} | +| Finally.cs:176:10:176:11 | Entry | Finally.cs:176:18:176:19 | b1 | +| Finally.cs:176:18:176:19 | b1 | Finally.cs:176:27:176:28 | b2 | +| Finally.cs:176:27:176:28 | b2 | Finally.cs:177:5:193:5 | {...} | | Finally.cs:177:5:193:5 | After {...} | Finally.cs:176:10:176:11 | Normal Exit | | Finally.cs:177:5:193:5 | {...} | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:178:9:192:9 | After try {...} ... | Finally.cs:177:5:193:5 | After {...} | @@ -3486,7 +3583,10 @@ dominance | Finally.cs:190:31:190:46 | After object creation of type ExceptionC | Finally.cs:190:25:190:47 | throw ...; | | Finally.cs:190:31:190:46 | Before object creation of type ExceptionC | Finally.cs:190:31:190:46 | object creation of type ExceptionC | | Finally.cs:190:31:190:46 | object creation of type ExceptionC | Finally.cs:190:31:190:46 | After object creation of type ExceptionC | -| Finally.cs:195:10:195:12 | Entry | Finally.cs:196:5:214:5 | {...} | +| Finally.cs:195:10:195:12 | Entry | Finally.cs:195:19:195:20 | b1 | +| Finally.cs:195:19:195:20 | b1 | Finally.cs:195:28:195:29 | b2 | +| Finally.cs:195:28:195:29 | b2 | Finally.cs:195:37:195:38 | b3 | +| Finally.cs:195:37:195:38 | b3 | Finally.cs:196:5:214:5 | {...} | | Finally.cs:196:5:214:5 | After {...} | Finally.cs:195:10:195:12 | Normal Exit | | Finally.cs:196:5:214:5 | {...} | Finally.cs:197:9:212:9 | try {...} ... | | Finally.cs:197:9:212:9 | After try {...} ... | Finally.cs:213:9:213:25 | ...; | @@ -3586,7 +3686,9 @@ dominance | Finally.cs:230:9:230:34 | ...; | Finally.cs:230:9:230:33 | Before call to method WriteLine | | Finally.cs:230:9:230:34 | After ...; | Finally.cs:217:5:231:5 | After {...} | | Finally.cs:230:27:230:32 | "Done" | Finally.cs:230:9:230:33 | call to method WriteLine | -| Finally.cs:233:10:233:12 | Entry | Finally.cs:234:5:261:5 | {...} | +| Finally.cs:233:10:233:12 | Entry | Finally.cs:233:19:233:20 | b1 | +| Finally.cs:233:19:233:20 | b1 | Finally.cs:233:28:233:29 | b2 | +| Finally.cs:233:28:233:29 | b2 | Finally.cs:234:5:261:5 | {...} | | Finally.cs:234:5:261:5 | After {...} | Finally.cs:233:10:233:12 | Normal Exit | | Finally.cs:234:5:261:5 | {...} | Finally.cs:235:9:259:9 | try {...} ... | | Finally.cs:235:9:259:9 | After try {...} ... | Finally.cs:260:9:260:34 | ...; | @@ -3650,7 +3752,8 @@ dominance | Finally.cs:260:9:260:34 | ...; | Finally.cs:260:9:260:33 | Before call to method WriteLine | | Finally.cs:260:9:260:34 | After ...; | Finally.cs:234:5:261:5 | After {...} | | Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:9:260:33 | call to method WriteLine | -| Finally.cs:263:10:263:12 | Entry | Finally.cs:264:5:274:5 | {...} | +| Finally.cs:263:10:263:12 | Entry | Finally.cs:263:18:263:18 | i | +| Finally.cs:263:18:263:18 | i | Finally.cs:264:5:274:5 | {...} | | Finally.cs:264:5:274:5 | After {...} | Finally.cs:263:10:263:12 | Normal Exit | | Finally.cs:264:5:274:5 | {...} | Finally.cs:265:9:273:9 | try {...} ... | | Finally.cs:265:9:273:9 | After try {...} ... | Finally.cs:264:5:274:5 | After {...} | @@ -3689,8 +3792,9 @@ dominance | Foreach.cs:4:7:4:13 | call to method | Foreach.cs:4:7:4:13 | After call to method | | Foreach.cs:4:7:4:13 | this access | Foreach.cs:4:7:4:13 | call to method | | Foreach.cs:4:7:4:13 | {...} | Foreach.cs:4:7:4:13 | Normal Exit | -| Foreach.cs:6:10:6:11 | Entry | Foreach.cs:7:5:10:5 | {...} | +| Foreach.cs:6:10:6:11 | Entry | Foreach.cs:6:22:6:25 | args | | Foreach.cs:6:10:6:11 | Normal Exit | Foreach.cs:6:10:6:11 | Exit | +| Foreach.cs:6:22:6:25 | args | Foreach.cs:7:5:10:5 | {...} | | Foreach.cs:7:5:10:5 | After {...} | Foreach.cs:6:10:6:11 | Normal Exit | | Foreach.cs:7:5:10:5 | {...} | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | | Foreach.cs:8:9:9:13 | After foreach (... ... in ...) ... | Foreach.cs:7:5:10:5 | After {...} | @@ -3700,8 +3804,9 @@ dominance | Foreach.cs:8:29:8:32 | access to parameter args | Foreach.cs:8:29:8:32 | After access to parameter args [empty] | | Foreach.cs:8:29:8:32 | access to parameter args | Foreach.cs:8:29:8:32 | After access to parameter args [non-empty] | | Foreach.cs:9:13:9:13 | ; | Foreach.cs:8:9:9:13 | [LoopHeader] foreach (... ... in ...) ... | -| Foreach.cs:12:10:12:11 | Entry | Foreach.cs:13:5:16:5 | {...} | +| Foreach.cs:12:10:12:11 | Entry | Foreach.cs:12:22:12:25 | args | | Foreach.cs:12:10:12:11 | Normal Exit | Foreach.cs:12:10:12:11 | Exit | +| Foreach.cs:12:22:12:25 | args | Foreach.cs:13:5:16:5 | {...} | | Foreach.cs:13:5:16:5 | After {...} | Foreach.cs:12:10:12:11 | Normal Exit | | Foreach.cs:13:5:16:5 | {...} | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | | Foreach.cs:14:9:15:13 | After foreach (... ... in ...) ... | Foreach.cs:13:5:16:5 | After {...} | @@ -3711,8 +3816,9 @@ dominance | Foreach.cs:14:27:14:30 | access to parameter args | Foreach.cs:14:27:14:30 | After access to parameter args [empty] | | Foreach.cs:14:27:14:30 | access to parameter args | Foreach.cs:14:27:14:30 | After access to parameter args [non-empty] | | Foreach.cs:15:13:15:13 | ; | Foreach.cs:14:9:15:13 | [LoopHeader] foreach (... ... in ...) ... | -| Foreach.cs:18:10:18:11 | Entry | Foreach.cs:19:5:22:5 | {...} | +| Foreach.cs:18:10:18:11 | Entry | Foreach.cs:18:33:18:33 | e | | Foreach.cs:18:10:18:11 | Normal Exit | Foreach.cs:18:10:18:11 | Exit | +| Foreach.cs:18:33:18:33 | e | Foreach.cs:19:5:22:5 | {...} | | Foreach.cs:19:5:22:5 | After {...} | Foreach.cs:18:10:18:11 | Normal Exit | | Foreach.cs:19:5:22:5 | {...} | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | | Foreach.cs:20:9:21:11 | After foreach (... ... in ...) ... | Foreach.cs:19:5:22:5 | After {...} | @@ -3730,8 +3836,9 @@ dominance | Foreach.cs:20:43:20:68 | call to method Empty | Foreach.cs:20:43:20:68 | After call to method Empty [empty] | | Foreach.cs:20:43:20:68 | call to method Empty | Foreach.cs:20:43:20:68 | After call to method Empty [non-empty] | | Foreach.cs:21:11:21:11 | ; | Foreach.cs:20:9:21:11 | [LoopHeader] foreach (... ... in ...) ... | -| Foreach.cs:24:10:24:11 | Entry | Foreach.cs:25:5:28:5 | {...} | +| Foreach.cs:24:10:24:11 | Entry | Foreach.cs:24:40:24:43 | args | | Foreach.cs:24:10:24:11 | Normal Exit | Foreach.cs:24:10:24:11 | Exit | +| Foreach.cs:24:40:24:43 | args | Foreach.cs:25:5:28:5 | {...} | | Foreach.cs:25:5:28:5 | After {...} | Foreach.cs:24:10:24:11 | Normal Exit | | Foreach.cs:25:5:28:5 | {...} | Foreach.cs:26:9:27:11 | foreach (... ... in ...) ... | | Foreach.cs:26:9:27:11 | After foreach (... ... in ...) ... | Foreach.cs:25:5:28:5 | After {...} | @@ -3745,8 +3852,9 @@ dominance | Foreach.cs:26:36:26:39 | access to parameter args | Foreach.cs:26:36:26:39 | After access to parameter args [empty] | | Foreach.cs:26:36:26:39 | access to parameter args | Foreach.cs:26:36:26:39 | After access to parameter args [non-empty] | | Foreach.cs:27:11:27:11 | ; | Foreach.cs:26:9:27:11 | [LoopHeader] foreach (... ... in ...) ... | -| Foreach.cs:30:10:30:11 | Entry | Foreach.cs:31:5:34:5 | {...} | +| Foreach.cs:30:10:30:11 | Entry | Foreach.cs:30:40:30:43 | args | | Foreach.cs:30:10:30:11 | Normal Exit | Foreach.cs:30:10:30:11 | Exit | +| Foreach.cs:30:40:30:43 | args | Foreach.cs:31:5:34:5 | {...} | | Foreach.cs:31:5:34:5 | After {...} | Foreach.cs:30:10:30:11 | Normal Exit | | Foreach.cs:31:5:34:5 | {...} | Foreach.cs:32:9:33:11 | foreach (... ... in ...) ... | | Foreach.cs:32:9:33:11 | After foreach (... ... in ...) ... | Foreach.cs:31:5:34:5 | After {...} | @@ -3760,8 +3868,9 @@ dominance | Foreach.cs:32:32:32:35 | access to parameter args | Foreach.cs:32:32:32:35 | After access to parameter args [empty] | | Foreach.cs:32:32:32:35 | access to parameter args | Foreach.cs:32:32:32:35 | After access to parameter args [non-empty] | | Foreach.cs:33:11:33:11 | ; | Foreach.cs:32:9:33:11 | [LoopHeader] foreach (... ... in ...) ... | -| Foreach.cs:36:10:36:11 | Entry | Foreach.cs:37:5:40:5 | {...} | +| Foreach.cs:36:10:36:11 | Entry | Foreach.cs:36:40:36:43 | args | | Foreach.cs:36:10:36:11 | Normal Exit | Foreach.cs:36:10:36:11 | Exit | +| Foreach.cs:36:40:36:43 | args | Foreach.cs:37:5:40:5 | {...} | | Foreach.cs:37:5:40:5 | After {...} | Foreach.cs:36:10:36:11 | Normal Exit | | Foreach.cs:37:5:40:5 | {...} | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | | Foreach.cs:38:9:39:11 | After foreach (... ... in ...) ... | Foreach.cs:37:5:40:5 | After {...} | @@ -3818,11 +3927,12 @@ dominance | Initializers.cs:10:5:10:16 | After call to method | Initializers.cs:10:5:10:16 | Before call to constructor Object | | Initializers.cs:10:5:10:16 | Before call to constructor Object | Initializers.cs:10:5:10:16 | call to constructor Object | | Initializers.cs:10:5:10:16 | Before call to method | Initializers.cs:10:5:10:16 | this access | -| Initializers.cs:10:5:10:16 | Entry | Initializers.cs:10:5:10:16 | Before call to method | +| Initializers.cs:10:5:10:16 | Entry | Initializers.cs:10:25:10:25 | s | | Initializers.cs:10:5:10:16 | Normal Exit | Initializers.cs:10:5:10:16 | Exit | | Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:10:5:10:16 | After call to constructor Object | | Initializers.cs:10:5:10:16 | call to method | Initializers.cs:10:5:10:16 | After call to method | | Initializers.cs:10:5:10:16 | this access | Initializers.cs:10:5:10:16 | call to method | +| Initializers.cs:10:25:10:25 | s | Initializers.cs:10:5:10:16 | Before call to method | | Initializers.cs:10:28:10:30 | {...} | Initializers.cs:10:5:10:16 | Normal Exit | | Initializers.cs:12:10:12:10 | Entry | Initializers.cs:13:5:16:5 | {...} | | Initializers.cs:12:10:12:10 | Normal Exit | Initializers.cs:12:10:12:10 | Exit | @@ -3935,8 +4045,9 @@ dominance | Initializers.cs:31:26:31:31 | ...; | Initializers.cs:31:26:31:30 | Before ... = ... | | Initializers.cs:31:26:31:31 | After ...; | Initializers.cs:31:24:31:33 | After {...} | | Initializers.cs:31:30:31:30 | 3 | Initializers.cs:31:26:31:30 | ... = ... | -| Initializers.cs:33:9:33:11 | Entry | Initializers.cs:33:22:33:25 | Before call to constructor Sub | +| Initializers.cs:33:9:33:11 | Entry | Initializers.cs:33:17:33:17 | i | | Initializers.cs:33:9:33:11 | Normal Exit | Initializers.cs:33:9:33:11 | Exit | +| Initializers.cs:33:17:33:17 | i | Initializers.cs:33:22:33:25 | Before call to constructor Sub | | Initializers.cs:33:22:33:25 | After call to constructor Sub | Initializers.cs:33:29:33:38 | {...} | | Initializers.cs:33:22:33:25 | Before call to constructor Sub | Initializers.cs:33:22:33:25 | call to constructor Sub | | Initializers.cs:33:22:33:25 | call to constructor Sub | Initializers.cs:33:22:33:25 | After call to constructor Sub | @@ -3956,11 +4067,13 @@ dominance | Initializers.cs:35:9:35:11 | After call to method | Initializers.cs:35:9:35:11 | Before call to constructor NoConstructor | | Initializers.cs:35:9:35:11 | Before call to constructor NoConstructor | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | | Initializers.cs:35:9:35:11 | Before call to method | Initializers.cs:35:9:35:11 | this access | -| Initializers.cs:35:9:35:11 | Entry | Initializers.cs:35:9:35:11 | Before call to method | +| Initializers.cs:35:9:35:11 | Entry | Initializers.cs:35:17:35:17 | i | | Initializers.cs:35:9:35:11 | Normal Exit | Initializers.cs:35:9:35:11 | Exit | | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:9:35:11 | After call to constructor NoConstructor | | Initializers.cs:35:9:35:11 | call to method | Initializers.cs:35:9:35:11 | After call to method | | Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | call to method | +| Initializers.cs:35:17:35:17 | i | Initializers.cs:35:24:35:24 | j | +| Initializers.cs:35:24:35:24 | j | Initializers.cs:35:9:35:11 | Before call to method | | Initializers.cs:35:27:35:40 | After {...} | Initializers.cs:35:9:35:11 | Normal Exit | | Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:29:35:38 | ...; | | Initializers.cs:35:29:35:29 | After access to field I | Initializers.cs:35:33:35:37 | Before ... + ... | @@ -3997,8 +4110,9 @@ dominance | Initializers.cs:41:11:41:18 | call to method | Initializers.cs:41:11:41:18 | After call to method | | Initializers.cs:41:11:41:18 | this access | Initializers.cs:41:11:41:18 | call to method | | Initializers.cs:41:11:41:18 | {...} | Initializers.cs:41:11:41:18 | Normal Exit | -| Initializers.cs:51:10:51:13 | Entry | Initializers.cs:52:5:66:5 | {...} | +| Initializers.cs:51:10:51:13 | Entry | Initializers.cs:51:19:51:19 | i | | Initializers.cs:51:10:51:13 | Normal Exit | Initializers.cs:51:10:51:13 | Exit | +| Initializers.cs:51:19:51:19 | i | Initializers.cs:52:5:66:5 | {...} | | Initializers.cs:52:5:66:5 | After {...} | Initializers.cs:51:10:51:13 | Normal Exit | | Initializers.cs:52:5:66:5 | {...} | Initializers.cs:54:9:54:96 | ... ...; | | Initializers.cs:54:9:54:96 | ... ...; | Initializers.cs:54:13:54:95 | Before Dictionary dict = ... | @@ -4251,8 +4365,9 @@ dominance | LoopUnrolling.cs:5:7:5:19 | call to method | LoopUnrolling.cs:5:7:5:19 | After call to method | | LoopUnrolling.cs:5:7:5:19 | this access | LoopUnrolling.cs:5:7:5:19 | call to method | | LoopUnrolling.cs:5:7:5:19 | {...} | LoopUnrolling.cs:5:7:5:19 | Normal Exit | -| LoopUnrolling.cs:7:10:7:11 | Entry | LoopUnrolling.cs:8:5:13:5 | {...} | +| LoopUnrolling.cs:7:10:7:11 | Entry | LoopUnrolling.cs:7:22:7:25 | args | | LoopUnrolling.cs:7:10:7:11 | Normal Exit | LoopUnrolling.cs:7:10:7:11 | Exit | +| LoopUnrolling.cs:7:22:7:25 | args | LoopUnrolling.cs:8:5:13:5 | {...} | | LoopUnrolling.cs:8:5:13:5 | {...} | LoopUnrolling.cs:9:9:10:19 | if (...) ... | | LoopUnrolling.cs:9:9:10:19 | After if (...) ... | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | | LoopUnrolling.cs:9:9:10:19 | if (...) ... | LoopUnrolling.cs:9:13:9:28 | Before ... == ... | @@ -4311,8 +4426,9 @@ dominance | LoopUnrolling.cs:19:13:19:33 | ...; | LoopUnrolling.cs:19:13:19:32 | Before call to method WriteLine | | LoopUnrolling.cs:19:13:19:33 | After ...; | LoopUnrolling.cs:18:9:19:33 | [LoopHeader] foreach (... ... in ...) ... | | LoopUnrolling.cs:19:31:19:31 | access to local variable x | LoopUnrolling.cs:19:13:19:32 | call to method WriteLine | -| LoopUnrolling.cs:22:10:22:11 | Entry | LoopUnrolling.cs:23:5:27:5 | {...} | +| LoopUnrolling.cs:22:10:22:11 | Entry | LoopUnrolling.cs:22:20:22:23 | args | | LoopUnrolling.cs:22:10:22:11 | Normal Exit | LoopUnrolling.cs:22:10:22:11 | Exit | +| LoopUnrolling.cs:22:20:22:23 | args | LoopUnrolling.cs:23:5:27:5 | {...} | | LoopUnrolling.cs:23:5:27:5 | After {...} | LoopUnrolling.cs:22:10:22:11 | Normal Exit | | LoopUnrolling.cs:23:5:27:5 | {...} | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | | LoopUnrolling.cs:24:9:26:40 | After foreach (... ... in ...) ... | LoopUnrolling.cs:23:5:27:5 | After {...} | @@ -4453,8 +4569,9 @@ dominance | LoopUnrolling.cs:50:16:50:36 | After ...; | LoopUnrolling.cs:51:13:51:23 | Before goto ...; | | LoopUnrolling.cs:50:34:50:34 | access to local variable x | LoopUnrolling.cs:50:16:50:35 | call to method WriteLine | | LoopUnrolling.cs:51:13:51:23 | Before goto ...; | LoopUnrolling.cs:51:13:51:23 | goto ...; | -| LoopUnrolling.cs:55:10:55:11 | Entry | LoopUnrolling.cs:56:5:65:5 | {...} | +| LoopUnrolling.cs:55:10:55:11 | Entry | LoopUnrolling.cs:55:18:55:18 | b | | LoopUnrolling.cs:55:10:55:11 | Normal Exit | LoopUnrolling.cs:55:10:55:11 | Exit | +| LoopUnrolling.cs:55:18:55:18 | b | LoopUnrolling.cs:56:5:65:5 | {...} | | LoopUnrolling.cs:56:5:65:5 | After {...} | LoopUnrolling.cs:55:10:55:11 | Normal Exit | | LoopUnrolling.cs:56:5:65:5 | {...} | LoopUnrolling.cs:57:9:57:48 | ... ...; | | LoopUnrolling.cs:57:9:57:48 | ... ...; | LoopUnrolling.cs:57:13:57:47 | Before String[] xs = ... | @@ -4501,8 +4618,9 @@ dominance | LoopUnrolling.cs:63:17:63:36 | call to method WriteLine | LoopUnrolling.cs:63:17:63:36 | After call to method WriteLine | | LoopUnrolling.cs:63:17:63:37 | ...; | LoopUnrolling.cs:63:17:63:36 | Before call to method WriteLine | | LoopUnrolling.cs:63:35:63:35 | access to local variable x | LoopUnrolling.cs:63:17:63:36 | call to method WriteLine | -| LoopUnrolling.cs:67:10:67:11 | Entry | LoopUnrolling.cs:68:5:74:5 | {...} | +| LoopUnrolling.cs:67:10:67:11 | Entry | LoopUnrolling.cs:67:26:67:29 | args | | LoopUnrolling.cs:67:10:67:11 | Normal Exit | LoopUnrolling.cs:67:10:67:11 | Exit | +| LoopUnrolling.cs:67:26:67:29 | args | LoopUnrolling.cs:68:5:74:5 | {...} | | LoopUnrolling.cs:68:5:74:5 | {...} | LoopUnrolling.cs:69:9:70:19 | if (...) ... | | LoopUnrolling.cs:69:9:70:19 | After if (...) ... | LoopUnrolling.cs:71:9:71:21 | ...; | | LoopUnrolling.cs:69:9:70:19 | if (...) ... | LoopUnrolling.cs:69:13:69:23 | !... | @@ -4642,8 +4760,9 @@ dominance | MultiImplementationA.cs:7:27:7:37 | Before throw ...; | MultiImplementationA.cs:7:33:7:36 | null | | MultiImplementationA.cs:7:27:7:37 | throw ...; | MultiImplementationA.cs:7:21:7:23 | Exceptional Exit | | MultiImplementationA.cs:7:33:7:36 | null | MultiImplementationA.cs:7:27:7:37 | throw ...; | -| MultiImplementationA.cs:7:41:7:43 | Entry | MultiImplementationA.cs:7:45:7:59 | {...} | -| MultiImplementationA.cs:7:41:7:43 | Entry | MultiImplementationB.cs:4:43:4:45 | {...} | +| MultiImplementationA.cs:7:41:7:43 | Entry | MultiImplementationA.cs:7:41:7:43 | value | +| MultiImplementationA.cs:7:41:7:43 | value | MultiImplementationA.cs:7:45:7:59 | {...} | +| MultiImplementationA.cs:7:41:7:43 | value | MultiImplementationB.cs:4:43:4:45 | {...} | | MultiImplementationA.cs:7:45:7:59 | {...} | MultiImplementationA.cs:7:47:7:57 | Before throw ...; | | MultiImplementationA.cs:7:47:7:57 | Before throw ...; | MultiImplementationA.cs:7:53:7:56 | null | | MultiImplementationA.cs:7:47:7:57 | throw ...; | MultiImplementationA.cs:7:41:7:43 | Exceptional Exit | @@ -4664,21 +4783,26 @@ dominance | MultiImplementationA.cs:13:16:13:20 | After ... = ... | MultiImplementationA.cs:24:32:24:34 | Before ... = ... | | MultiImplementationA.cs:13:16:13:20 | Before ... = ... | MultiImplementationA.cs:13:16:13:16 | Before access to field F | | MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:13:16:13:20 | ... = ... | -| MultiImplementationA.cs:14:31:14:31 | Entry | MultiImplementationA.cs:14:31:14:31 | access to parameter i | -| MultiImplementationA.cs:14:31:14:31 | Entry | MultiImplementationB.cs:12:31:12:40 | Before throw ... | +| MultiImplementationA.cs:14:25:14:25 | i | MultiImplementationA.cs:14:31:14:31 | access to parameter i | +| MultiImplementationA.cs:14:25:14:25 | i | MultiImplementationB.cs:12:31:12:40 | Before throw ... | +| MultiImplementationA.cs:14:31:14:31 | Entry | MultiImplementationA.cs:14:25:14:25 | i | | MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | Normal Exit | -| MultiImplementationA.cs:15:36:15:38 | Entry | MultiImplementationA.cs:15:40:15:52 | {...} | -| MultiImplementationA.cs:15:36:15:38 | Entry | MultiImplementationB.cs:13:40:13:54 | {...} | +| MultiImplementationA.cs:15:31:15:31 | s | MultiImplementationA.cs:15:40:15:52 | {...} | +| MultiImplementationA.cs:15:31:15:31 | s | MultiImplementationA.cs:15:54:15:56 | value | +| MultiImplementationA.cs:15:31:15:31 | s | MultiImplementationB.cs:13:40:13:54 | {...} | +| MultiImplementationA.cs:15:36:15:38 | Entry | MultiImplementationA.cs:15:31:15:31 | s | | MultiImplementationA.cs:15:40:15:52 | {...} | MultiImplementationA.cs:15:42:15:50 | Before return ...; | | MultiImplementationA.cs:15:42:15:50 | Before return ...; | MultiImplementationA.cs:15:49:15:49 | access to parameter s | | MultiImplementationA.cs:15:42:15:50 | return ...; | MultiImplementationA.cs:15:36:15:38 | Normal Exit | | MultiImplementationA.cs:15:49:15:49 | access to parameter s | MultiImplementationA.cs:15:42:15:50 | return ...; | -| MultiImplementationA.cs:15:54:15:56 | Entry | MultiImplementationA.cs:15:58:15:60 | {...} | -| MultiImplementationA.cs:15:54:15:56 | Entry | MultiImplementationB.cs:13:60:13:62 | {...} | +| MultiImplementationA.cs:15:54:15:56 | Entry | MultiImplementationA.cs:15:31:15:31 | s | | MultiImplementationA.cs:15:54:15:56 | Normal Exit | MultiImplementationA.cs:15:54:15:56 | Exit | -| MultiImplementationA.cs:16:17:16:18 | Entry | MultiImplementationA.cs:17:5:19:5 | {...} | -| MultiImplementationA.cs:16:17:16:18 | Entry | MultiImplementationB.cs:15:5:17:5 | {...} | +| MultiImplementationA.cs:15:54:15:56 | value | MultiImplementationA.cs:15:58:15:60 | {...} | +| MultiImplementationA.cs:15:54:15:56 | value | MultiImplementationB.cs:13:60:13:62 | {...} | +| MultiImplementationA.cs:16:17:16:18 | Entry | MultiImplementationA.cs:16:24:16:24 | i | | MultiImplementationA.cs:16:17:16:18 | Normal Exit | MultiImplementationA.cs:16:17:16:18 | Exit | +| MultiImplementationA.cs:16:24:16:24 | i | MultiImplementationA.cs:17:5:19:5 | {...} | +| MultiImplementationA.cs:16:24:16:24 | i | MultiImplementationB.cs:15:5:17:5 | {...} | | MultiImplementationA.cs:17:5:19:5 | {...} | MultiImplementationA.cs:18:9:18:22 | M2(...) | | MultiImplementationA.cs:18:9:18:22 | Entry | MultiImplementationA.cs:18:21:18:21 | 0 | | MultiImplementationA.cs:18:9:18:22 | M2(...) | MultiImplementationA.cs:17:5:19:5 | After {...} | @@ -4688,11 +4812,12 @@ dominance | MultiImplementationA.cs:20:12:20:13 | After call to method | MultiImplementationA.cs:20:12:20:13 | Before call to constructor Object | | MultiImplementationA.cs:20:12:20:13 | Before call to constructor Object | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | | MultiImplementationA.cs:20:12:20:13 | Before call to method | MultiImplementationA.cs:20:12:20:13 | this access | -| MultiImplementationA.cs:20:12:20:13 | Entry | MultiImplementationA.cs:20:12:20:13 | Before call to method | -| MultiImplementationA.cs:20:12:20:13 | Entry | MultiImplementationB.cs:18:12:18:13 | Before call to method | +| MultiImplementationA.cs:20:12:20:13 | Entry | MultiImplementationA.cs:20:19:20:19 | i | | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | After call to constructor Object | | MultiImplementationA.cs:20:12:20:13 | call to method | MultiImplementationA.cs:20:12:20:13 | After call to method | | MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | call to method | +| MultiImplementationA.cs:20:19:20:19 | i | MultiImplementationA.cs:20:12:20:13 | Before call to method | +| MultiImplementationA.cs:20:19:20:19 | i | MultiImplementationB.cs:18:12:18:13 | Before call to method | | MultiImplementationA.cs:20:22:20:31 | After {...} | MultiImplementationA.cs:20:12:20:13 | Normal Exit | | MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:24:20:29 | ...; | | MultiImplementationA.cs:20:24:20:24 | After access to field F | MultiImplementationA.cs:20:28:20:28 | access to parameter i | @@ -4715,8 +4840,9 @@ dominance | MultiImplementationA.cs:22:6:22:7 | Entry | MultiImplementationA.cs:22:11:22:13 | {...} | | MultiImplementationA.cs:22:6:22:7 | Entry | MultiImplementationB.cs:20:11:20:25 | {...} | | MultiImplementationA.cs:22:11:22:13 | {...} | MultiImplementationA.cs:22:6:22:7 | Normal Exit | -| MultiImplementationA.cs:23:28:23:35 | Entry | MultiImplementationA.cs:23:50:23:53 | null | -| MultiImplementationA.cs:23:28:23:35 | Entry | MultiImplementationB.cs:21:50:21:59 | Before throw ... | +| MultiImplementationA.cs:23:28:23:35 | Entry | MultiImplementationA.cs:23:44:23:44 | i | +| MultiImplementationA.cs:23:44:23:44 | i | MultiImplementationA.cs:23:50:23:53 | null | +| MultiImplementationA.cs:23:44:23:44 | i | MultiImplementationB.cs:21:50:21:59 | Before throw ... | | MultiImplementationA.cs:23:50:23:53 | null | MultiImplementationA.cs:23:28:23:35 | Normal Exit | | MultiImplementationA.cs:24:16:24:16 | After access to property P | MultiImplementationA.cs:24:34:24:34 | 0 | | MultiImplementationA.cs:24:16:24:16 | Before access to property P | MultiImplementationA.cs:24:16:24:16 | this access | @@ -4852,15 +4978,17 @@ dominance | NullCoalescing.cs:1:7:1:20 | call to method | NullCoalescing.cs:1:7:1:20 | After call to method | | NullCoalescing.cs:1:7:1:20 | this access | NullCoalescing.cs:1:7:1:20 | call to method | | NullCoalescing.cs:1:7:1:20 | {...} | NullCoalescing.cs:1:7:1:20 | Normal Exit | -| NullCoalescing.cs:3:9:3:10 | Entry | NullCoalescing.cs:3:23:3:28 | ... ?? ... | +| NullCoalescing.cs:3:9:3:10 | Entry | NullCoalescing.cs:3:17:3:17 | i | | NullCoalescing.cs:3:9:3:10 | Normal Exit | NullCoalescing.cs:3:9:3:10 | Exit | +| NullCoalescing.cs:3:17:3:17 | i | NullCoalescing.cs:3:23:3:28 | ... ?? ... | | NullCoalescing.cs:3:23:3:23 | After access to parameter i [null] | NullCoalescing.cs:3:28:3:28 | 0 | | NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:23:3:23 | After access to parameter i [non-null] | | NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:23:3:23 | After access to parameter i [null] | | NullCoalescing.cs:3:23:3:28 | ... ?? ... | NullCoalescing.cs:3:23:3:23 | access to parameter i | | NullCoalescing.cs:3:23:3:28 | After ... ?? ... | NullCoalescing.cs:3:9:3:10 | Normal Exit | -| NullCoalescing.cs:5:9:5:10 | Entry | NullCoalescing.cs:5:24:5:43 | ... ? ... : ... | +| NullCoalescing.cs:5:9:5:10 | Entry | NullCoalescing.cs:5:18:5:18 | b | | NullCoalescing.cs:5:9:5:10 | Normal Exit | NullCoalescing.cs:5:9:5:10 | Exit | +| NullCoalescing.cs:5:18:5:18 | b | NullCoalescing.cs:5:24:5:43 | ... ? ... : ... | | NullCoalescing.cs:5:24:5:43 | ... ? ... : ... | NullCoalescing.cs:5:25:5:34 | ... ?? ... | | NullCoalescing.cs:5:24:5:43 | After ... ? ... : ... | NullCoalescing.cs:5:9:5:10 | Normal Exit | | NullCoalescing.cs:5:25:5:25 | After access to parameter b [non-null] | NullCoalescing.cs:5:25:5:34 | After ... ?? ... [true] | @@ -4871,8 +4999,10 @@ dominance | NullCoalescing.cs:5:25:5:34 | After ... ?? ... [false] | NullCoalescing.cs:5:43:5:43 | 1 | | NullCoalescing.cs:5:25:5:34 | After ... ?? ... [true] | NullCoalescing.cs:5:39:5:39 | 0 | | NullCoalescing.cs:5:30:5:34 | false | NullCoalescing.cs:5:30:5:34 | After false [false] | -| NullCoalescing.cs:7:12:7:13 | Entry | NullCoalescing.cs:7:40:7:53 | ... ?? ... | +| NullCoalescing.cs:7:12:7:13 | Entry | NullCoalescing.cs:7:22:7:23 | s1 | | NullCoalescing.cs:7:12:7:13 | Normal Exit | NullCoalescing.cs:7:12:7:13 | Exit | +| NullCoalescing.cs:7:22:7:23 | s1 | NullCoalescing.cs:7:33:7:34 | s2 | +| NullCoalescing.cs:7:33:7:34 | s2 | NullCoalescing.cs:7:40:7:53 | ... ?? ... | | NullCoalescing.cs:7:40:7:41 | After access to parameter s1 [null] | NullCoalescing.cs:7:46:7:53 | ... ?? ... | | NullCoalescing.cs:7:40:7:41 | access to parameter s1 | NullCoalescing.cs:7:40:7:41 | After access to parameter s1 [non-null] | | NullCoalescing.cs:7:40:7:41 | access to parameter s1 | NullCoalescing.cs:7:40:7:41 | After access to parameter s1 [null] | @@ -4882,8 +5012,10 @@ dominance | NullCoalescing.cs:7:46:7:47 | access to parameter s2 | NullCoalescing.cs:7:46:7:47 | After access to parameter s2 [non-null] | | NullCoalescing.cs:7:46:7:47 | access to parameter s2 | NullCoalescing.cs:7:46:7:47 | After access to parameter s2 [null] | | NullCoalescing.cs:7:46:7:53 | ... ?? ... | NullCoalescing.cs:7:46:7:47 | access to parameter s2 | -| NullCoalescing.cs:9:12:9:13 | Entry | NullCoalescing.cs:9:36:9:58 | ... ?? ... | +| NullCoalescing.cs:9:12:9:13 | Entry | NullCoalescing.cs:9:20:9:20 | b | | NullCoalescing.cs:9:12:9:13 | Normal Exit | NullCoalescing.cs:9:12:9:13 | Exit | +| NullCoalescing.cs:9:20:9:20 | b | NullCoalescing.cs:9:30:9:30 | s | +| NullCoalescing.cs:9:30:9:30 | s | NullCoalescing.cs:9:36:9:58 | ... ?? ... | | NullCoalescing.cs:9:36:9:58 | ... ?? ... | NullCoalescing.cs:9:37:9:45 | ... ? ... : ... | | NullCoalescing.cs:9:36:9:58 | After ... ?? ... | NullCoalescing.cs:9:12:9:13 | Normal Exit | | NullCoalescing.cs:9:37:9:37 | After access to parameter b [false] | NullCoalescing.cs:9:45:9:45 | access to parameter s | @@ -4900,8 +5032,11 @@ dominance | NullCoalescing.cs:9:51:9:52 | "" | NullCoalescing.cs:9:51:9:52 | After "" [null] | | NullCoalescing.cs:9:51:9:52 | After "" [null] | NullCoalescing.cs:9:57:9:58 | "" | | NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:52 | "" | -| NullCoalescing.cs:11:9:11:10 | Entry | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | +| NullCoalescing.cs:11:9:11:10 | Entry | NullCoalescing.cs:11:18:11:19 | b1 | | NullCoalescing.cs:11:9:11:10 | Normal Exit | NullCoalescing.cs:11:9:11:10 | Exit | +| NullCoalescing.cs:11:18:11:19 | b1 | NullCoalescing.cs:11:27:11:28 | b2 | +| NullCoalescing.cs:11:27:11:28 | b2 | NullCoalescing.cs:11:36:11:37 | b3 | +| NullCoalescing.cs:11:36:11:37 | b3 | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | NullCoalescing.cs:11:44:11:59 | ... ?? ... | | NullCoalescing.cs:11:43:11:68 | After ... ? ... : ... | NullCoalescing.cs:11:9:11:10 | Normal Exit | | NullCoalescing.cs:11:44:11:45 | After access to parameter b1 [null] | NullCoalescing.cs:11:51:11:58 | ... && ... | @@ -4917,8 +5052,9 @@ dominance | NullCoalescing.cs:11:57:11:58 | After access to parameter b3 [true] | NullCoalescing.cs:11:51:11:58 | After ... && ... [true] | | NullCoalescing.cs:11:57:11:58 | access to parameter b3 | NullCoalescing.cs:11:57:11:58 | After access to parameter b3 [false] | | NullCoalescing.cs:11:57:11:58 | access to parameter b3 | NullCoalescing.cs:11:57:11:58 | After access to parameter b3 [true] | -| NullCoalescing.cs:13:10:13:11 | Entry | NullCoalescing.cs:14:5:18:5 | {...} | +| NullCoalescing.cs:13:10:13:11 | Entry | NullCoalescing.cs:13:17:13:17 | i | | NullCoalescing.cs:13:10:13:11 | Normal Exit | NullCoalescing.cs:13:10:13:11 | Exit | +| NullCoalescing.cs:13:17:13:17 | i | NullCoalescing.cs:14:5:18:5 | {...} | | NullCoalescing.cs:14:5:18:5 | After {...} | NullCoalescing.cs:13:10:13:11 | Normal Exit | | NullCoalescing.cs:14:5:18:5 | {...} | NullCoalescing.cs:15:9:15:32 | ... ...; | | NullCoalescing.cs:15:9:15:32 | ... ...; | NullCoalescing.cs:15:13:15:31 | Before Int32 j = ... | @@ -4964,11 +5100,12 @@ dominance | PartialImplementationA.cs:3:12:3:18 | After call to method | PartialImplementationA.cs:3:12:3:18 | Before call to constructor Object | | PartialImplementationA.cs:3:12:3:18 | Before call to constructor Object | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | | PartialImplementationA.cs:3:12:3:18 | Before call to method | PartialImplementationA.cs:3:12:3:18 | this access | -| PartialImplementationA.cs:3:12:3:18 | Entry | PartialImplementationA.cs:3:12:3:18 | Before call to method | +| PartialImplementationA.cs:3:12:3:18 | Entry | PartialImplementationA.cs:3:24:3:24 | i | | PartialImplementationA.cs:3:12:3:18 | Normal Exit | PartialImplementationA.cs:3:12:3:18 | Exit | | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | PartialImplementationA.cs:3:12:3:18 | After call to constructor Object | | PartialImplementationA.cs:3:12:3:18 | call to method | PartialImplementationA.cs:3:12:3:18 | After call to method | | PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | call to method | +| PartialImplementationA.cs:3:24:3:24 | i | PartialImplementationA.cs:3:12:3:18 | Before call to method | | PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:12:3:18 | Normal Exit | | PartialImplementationB.cs:3:16:3:16 | After access to field F | PartialImplementationB.cs:3:20:3:20 | 0 | | PartialImplementationB.cs:3:16:3:16 | Before access to field F | PartialImplementationB.cs:3:16:3:16 | this access | @@ -5161,8 +5298,9 @@ dominance | Patterns.cs:40:9:42:9 | After switch (...) {...} | Patterns.cs:6:5:43:5 | After {...} | | Patterns.cs:40:9:42:9 | switch (...) {...} | Patterns.cs:40:17:40:17 | access to local variable o | | Patterns.cs:40:17:40:17 | access to local variable o | Patterns.cs:40:9:42:9 | After switch (...) {...} | -| Patterns.cs:47:24:47:25 | Entry | Patterns.cs:48:9:48:20 | Before ... is ... | +| Patterns.cs:47:24:47:25 | Entry | Patterns.cs:47:32:47:32 | c | | Patterns.cs:47:24:47:25 | Normal Exit | Patterns.cs:47:24:47:25 | Exit | +| Patterns.cs:47:32:47:32 | c | Patterns.cs:48:9:48:20 | Before ... is ... | | Patterns.cs:48:9:48:9 | access to parameter c | Patterns.cs:48:9:48:20 | ... is ... | | Patterns.cs:48:9:48:20 | ... is ... | Patterns.cs:48:9:48:20 | After ... is ... | | Patterns.cs:48:9:48:20 | ... is ... | Patterns.cs:48:9:48:20 | [MatchTrue] ... is ... | @@ -5172,8 +5310,9 @@ dominance | Patterns.cs:48:14:48:20 | Before not ... | Patterns.cs:48:18:48:20 | a | | Patterns.cs:48:14:48:20 | not ... | Patterns.cs:48:14:48:20 | After not ... | | Patterns.cs:48:18:48:20 | a | Patterns.cs:48:14:48:20 | not ... | -| Patterns.cs:50:24:50:25 | Entry | Patterns.cs:51:9:51:39 | ... ? ... : ... | +| Patterns.cs:50:24:50:25 | Entry | Patterns.cs:50:34:50:34 | c | | Patterns.cs:50:24:50:25 | Normal Exit | Patterns.cs:50:24:50:25 | Exit | +| Patterns.cs:50:34:50:34 | c | Patterns.cs:51:9:51:39 | ... ? ... : ... | | Patterns.cs:51:9:51:9 | access to parameter c | Patterns.cs:51:9:51:21 | ... is ... | | Patterns.cs:51:9:51:21 | ... is ... | Patterns.cs:51:9:51:21 | After ... is ... [false] | | Patterns.cs:51:9:51:21 | ... is ... | Patterns.cs:51:9:51:21 | [MatchTrue] ... is ... | @@ -5197,8 +5336,9 @@ dominance | Patterns.cs:51:34:51:39 | ... is ... | Patterns.cs:51:34:51:39 | [MatchTrue] ... is ... | | Patterns.cs:51:34:51:39 | Before ... is ... | Patterns.cs:51:34:51:34 | access to parameter c | | Patterns.cs:51:34:51:39 | [MatchTrue] ... is ... | Patterns.cs:51:39:51:39 | 2 | -| Patterns.cs:53:24:53:25 | Entry | Patterns.cs:54:9:54:37 | Before ... is ... | +| Patterns.cs:53:24:53:25 | Entry | Patterns.cs:53:34:53:34 | c | | Patterns.cs:53:24:53:25 | Normal Exit | Patterns.cs:53:24:53:25 | Exit | +| Patterns.cs:53:34:53:34 | c | Patterns.cs:54:9:54:37 | Before ... is ... | | Patterns.cs:54:9:54:9 | access to parameter c | Patterns.cs:54:9:54:37 | ... is ... | | Patterns.cs:54:9:54:37 | ... is ... | Patterns.cs:54:9:54:37 | After ... is ... | | Patterns.cs:54:9:54:37 | ... is ... | Patterns.cs:54:9:54:37 | [MatchTrue] ... is ... | @@ -5216,8 +5356,9 @@ dominance | Patterns.cs:54:27:54:35 | Before { ... } | Patterns.cs:54:33:54:33 | 1 | | Patterns.cs:54:27:54:35 | { ... } | Patterns.cs:54:27:54:35 | After { ... } | | Patterns.cs:54:33:54:33 | 1 | Patterns.cs:54:27:54:35 | { ... } | -| Patterns.cs:56:26:56:27 | Entry | Patterns.cs:57:5:63:5 | {...} | +| Patterns.cs:56:26:56:27 | Entry | Patterns.cs:56:33:56:33 | i | | Patterns.cs:56:26:56:27 | Normal Exit | Patterns.cs:56:26:56:27 | Exit | +| Patterns.cs:56:33:56:33 | i | Patterns.cs:57:5:63:5 | {...} | | Patterns.cs:57:5:63:5 | {...} | Patterns.cs:58:9:62:10 | Before return ...; | | Patterns.cs:58:9:62:10 | Before return ...; | Patterns.cs:58:16:62:9 | ... switch { ... } | | Patterns.cs:58:9:62:10 | return ...; | Patterns.cs:56:26:56:27 | Normal Exit | @@ -5255,8 +5396,9 @@ dominance | Patterns.cs:70:13:70:27 | ... => ... | Patterns.cs:70:13:70:27 | After ... => ... [match] | | Patterns.cs:70:13:70:27 | ... => ... | Patterns.cs:70:13:70:27 | After ... => ... [no-match] | | Patterns.cs:70:13:70:27 | After ... => ... [match] | Patterns.cs:70:13:70:13 | 2 | -| Patterns.cs:74:26:74:27 | Entry | Patterns.cs:75:5:83:5 | {...} | +| Patterns.cs:74:26:74:27 | Entry | Patterns.cs:74:33:74:33 | i | | Patterns.cs:74:26:74:27 | Normal Exit | Patterns.cs:74:26:74:27 | Exit | +| Patterns.cs:74:33:74:33 | i | Patterns.cs:75:5:83:5 | {...} | | Patterns.cs:75:5:83:5 | {...} | Patterns.cs:76:9:82:10 | Before return ...; | | Patterns.cs:76:9:82:10 | Before return ...; | Patterns.cs:76:16:82:9 | ... switch { ... } | | Patterns.cs:76:9:82:10 | return ...; | Patterns.cs:74:26:74:27 | Normal Exit | @@ -5287,8 +5429,9 @@ dominance | Patterns.cs:81:13:81:13 | _ | Patterns.cs:81:18:81:20 | "0" | | Patterns.cs:81:13:81:20 | ... => ... | Patterns.cs:81:13:81:20 | After ... => ... [match] | | Patterns.cs:81:13:81:20 | After ... => ... [match] | Patterns.cs:81:13:81:13 | _ | -| Patterns.cs:85:26:85:27 | Entry | Patterns.cs:85:39:85:69 | ... ? ... : ... | +| Patterns.cs:85:26:85:27 | Entry | Patterns.cs:85:33:85:33 | i | | Patterns.cs:85:26:85:27 | Normal Exit | Patterns.cs:85:26:85:27 | Exit | +| Patterns.cs:85:33:85:33 | i | Patterns.cs:85:39:85:69 | ... ? ... : ... | | Patterns.cs:85:39:85:39 | access to parameter i | Patterns.cs:85:39:85:53 | ... is ... | | Patterns.cs:85:39:85:53 | ... is ... | Patterns.cs:85:39:85:53 | After ... is ... [false] | | Patterns.cs:85:39:85:53 | ... is ... | Patterns.cs:85:39:85:53 | [MatchTrue] ... is ... | @@ -5306,8 +5449,9 @@ dominance | Patterns.cs:85:49:85:53 | Before not ... | Patterns.cs:85:53:85:53 | 2 | | Patterns.cs:85:49:85:53 | not ... | Patterns.cs:85:49:85:53 | After not ... | | Patterns.cs:85:53:85:53 | 2 | Patterns.cs:85:49:85:53 | not ... | -| Patterns.cs:87:26:87:27 | Entry | Patterns.cs:87:39:87:70 | ... ? ... : ... | +| Patterns.cs:87:26:87:27 | Entry | Patterns.cs:87:33:87:33 | i | | Patterns.cs:87:26:87:27 | Normal Exit | Patterns.cs:87:26:87:27 | Exit | +| Patterns.cs:87:33:87:33 | i | Patterns.cs:87:39:87:70 | ... ? ... : ... | | Patterns.cs:87:39:87:39 | access to parameter i | Patterns.cs:87:39:87:54 | ... is ... | | Patterns.cs:87:39:87:54 | ... is ... | Patterns.cs:87:39:87:54 | After ... is ... [false] | | Patterns.cs:87:39:87:54 | ... is ... | Patterns.cs:87:39:87:54 | [MatchTrue] ... is ... | @@ -5365,8 +5509,9 @@ dominance | PostDominance.cs:3:7:3:19 | call to method | PostDominance.cs:3:7:3:19 | After call to method | | PostDominance.cs:3:7:3:19 | this access | PostDominance.cs:3:7:3:19 | call to method | | PostDominance.cs:3:7:3:19 | {...} | PostDominance.cs:3:7:3:19 | Normal Exit | -| PostDominance.cs:5:10:5:11 | Entry | PostDominance.cs:6:5:8:5 | {...} | +| PostDominance.cs:5:10:5:11 | Entry | PostDominance.cs:5:20:5:20 | s | | PostDominance.cs:5:10:5:11 | Normal Exit | PostDominance.cs:5:10:5:11 | Exit | +| PostDominance.cs:5:20:5:20 | s | PostDominance.cs:6:5:8:5 | {...} | | PostDominance.cs:6:5:8:5 | After {...} | PostDominance.cs:5:10:5:11 | Normal Exit | | PostDominance.cs:6:5:8:5 | {...} | PostDominance.cs:7:9:7:29 | ...; | | PostDominance.cs:7:9:7:28 | After call to method WriteLine | PostDominance.cs:7:9:7:29 | After ...; | @@ -5375,8 +5520,9 @@ dominance | PostDominance.cs:7:9:7:29 | ...; | PostDominance.cs:7:9:7:28 | Before call to method WriteLine | | PostDominance.cs:7:9:7:29 | After ...; | PostDominance.cs:6:5:8:5 | After {...} | | PostDominance.cs:7:27:7:27 | access to parameter s | PostDominance.cs:7:9:7:28 | call to method WriteLine | -| PostDominance.cs:10:10:10:11 | Entry | PostDominance.cs:11:5:15:5 | {...} | +| PostDominance.cs:10:10:10:11 | Entry | PostDominance.cs:10:20:10:20 | s | | PostDominance.cs:10:10:10:11 | Normal Exit | PostDominance.cs:10:10:10:11 | Exit | +| PostDominance.cs:10:20:10:20 | s | PostDominance.cs:11:5:15:5 | {...} | | PostDominance.cs:11:5:15:5 | {...} | PostDominance.cs:12:9:13:19 | if (...) ... | | PostDominance.cs:12:9:13:19 | After if (...) ... | PostDominance.cs:14:9:14:29 | ...; | | PostDominance.cs:12:9:13:19 | if (...) ... | PostDominance.cs:12:13:12:21 | Before ... is ... | @@ -5395,7 +5541,8 @@ dominance | PostDominance.cs:14:9:14:29 | ...; | PostDominance.cs:14:9:14:28 | Before call to method WriteLine | | PostDominance.cs:14:9:14:29 | After ...; | PostDominance.cs:11:5:15:5 | After {...} | | PostDominance.cs:14:27:14:27 | access to parameter s | PostDominance.cs:14:9:14:28 | call to method WriteLine | -| PostDominance.cs:17:10:17:11 | Entry | PostDominance.cs:18:5:22:5 | {...} | +| PostDominance.cs:17:10:17:11 | Entry | PostDominance.cs:17:20:17:20 | s | +| PostDominance.cs:17:20:17:20 | s | PostDominance.cs:18:5:22:5 | {...} | | PostDominance.cs:18:5:22:5 | After {...} | PostDominance.cs:17:10:17:11 | Normal Exit | | PostDominance.cs:18:5:22:5 | {...} | PostDominance.cs:19:9:20:55 | if (...) ... | | PostDominance.cs:19:9:20:55 | After if (...) ... | PostDominance.cs:21:9:21:29 | ...; | @@ -5594,14 +5741,16 @@ dominance | Switch.cs:3:7:3:12 | call to method | Switch.cs:3:7:3:12 | After call to method | | Switch.cs:3:7:3:12 | this access | Switch.cs:3:7:3:12 | call to method | | Switch.cs:3:7:3:12 | {...} | Switch.cs:3:7:3:12 | Normal Exit | -| Switch.cs:5:10:5:11 | Entry | Switch.cs:6:5:8:5 | {...} | +| Switch.cs:5:10:5:11 | Entry | Switch.cs:5:20:5:20 | o | | Switch.cs:5:10:5:11 | Normal Exit | Switch.cs:5:10:5:11 | Exit | +| Switch.cs:5:20:5:20 | o | Switch.cs:6:5:8:5 | {...} | | Switch.cs:6:5:8:5 | After {...} | Switch.cs:5:10:5:11 | Normal Exit | | Switch.cs:6:5:8:5 | {...} | Switch.cs:7:9:7:22 | switch (...) {...} | | Switch.cs:7:9:7:22 | After switch (...) {...} | Switch.cs:6:5:8:5 | After {...} | | Switch.cs:7:9:7:22 | switch (...) {...} | Switch.cs:7:17:7:17 | access to parameter o | | Switch.cs:7:17:7:17 | access to parameter o | Switch.cs:7:9:7:22 | After switch (...) {...} | -| Switch.cs:10:10:10:11 | Entry | Switch.cs:11:5:33:5 | {...} | +| Switch.cs:10:10:10:11 | Entry | Switch.cs:10:20:10:20 | o | +| Switch.cs:10:20:10:20 | o | Switch.cs:11:5:33:5 | {...} | | Switch.cs:11:5:33:5 | {...} | Switch.cs:12:9:32:9 | switch (...) {...} | | Switch.cs:12:9:32:9 | switch (...) {...} | Switch.cs:12:17:12:17 | access to parameter o | | Switch.cs:12:17:12:17 | access to parameter o | Switch.cs:14:13:14:21 | case ...: | @@ -5688,8 +5837,9 @@ dominance | Switch.cs:37:9:41:9 | switch (...) {...} | Switch.cs:37:17:37:23 | Before call to method Throw | | Switch.cs:37:17:37:23 | Before call to method Throw | Switch.cs:37:17:37:23 | call to method Throw | | Switch.cs:37:17:37:23 | call to method Throw | Switch.cs:35:10:35:11 | Exceptional Exit | -| Switch.cs:44:10:44:11 | Entry | Switch.cs:45:5:53:5 | {...} | +| Switch.cs:44:10:44:11 | Entry | Switch.cs:44:20:44:20 | o | | Switch.cs:44:10:44:11 | Normal Exit | Switch.cs:44:10:44:11 | Exit | +| Switch.cs:44:20:44:20 | o | Switch.cs:45:5:53:5 | {...} | | Switch.cs:45:5:53:5 | After {...} | Switch.cs:44:10:44:11 | Normal Exit | | Switch.cs:45:5:53:5 | {...} | Switch.cs:46:9:52:9 | switch (...) {...} | | Switch.cs:46:9:52:9 | After switch (...) {...} | Switch.cs:45:5:53:5 | After {...} | @@ -5734,8 +5884,9 @@ dominance | Switch.cs:61:13:61:19 | case ...: | Switch.cs:61:13:61:19 | After case ...: [no-match] | | Switch.cs:61:18:61:18 | 3 | Switch.cs:62:17:62:22 | Before break; | | Switch.cs:62:17:62:22 | Before break; | Switch.cs:62:17:62:22 | break; | -| Switch.cs:66:10:66:11 | Entry | Switch.cs:67:5:75:5 | {...} | +| Switch.cs:66:10:66:11 | Entry | Switch.cs:66:20:66:20 | s | | Switch.cs:66:10:66:11 | Normal Exit | Switch.cs:66:10:66:11 | Exit | +| Switch.cs:66:20:66:20 | s | Switch.cs:67:5:75:5 | {...} | | Switch.cs:67:5:75:5 | After {...} | Switch.cs:66:10:66:11 | Normal Exit | | Switch.cs:67:5:75:5 | {...} | Switch.cs:68:9:74:9 | switch (...) {...} | | Switch.cs:68:9:74:9 | After switch (...) {...} | Switch.cs:67:5:75:5 | After {...} | @@ -5755,8 +5906,10 @@ dominance | Switch.cs:72:13:72:20 | case ...: | Switch.cs:72:13:72:20 | After case ...: [no-match] | | Switch.cs:72:18:72:19 | "" | Switch.cs:73:17:73:22 | Before break; | | Switch.cs:73:17:73:22 | Before break; | Switch.cs:73:17:73:22 | break; | -| Switch.cs:77:10:77:11 | Entry | Switch.cs:78:5:89:5 | {...} | +| Switch.cs:77:10:77:11 | Entry | Switch.cs:77:17:77:17 | i | | Switch.cs:77:10:77:11 | Normal Exit | Switch.cs:77:10:77:11 | Exit | +| Switch.cs:77:17:77:17 | i | Switch.cs:77:24:77:24 | j | +| Switch.cs:77:24:77:24 | j | Switch.cs:78:5:89:5 | {...} | | Switch.cs:78:5:89:5 | {...} | Switch.cs:79:9:87:9 | switch (...) {...} | | Switch.cs:79:9:87:9 | After switch (...) {...} | Switch.cs:88:9:88:21 | Before return ...; | | Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:79:17:79:17 | access to parameter i | @@ -5786,8 +5939,9 @@ dominance | Switch.cs:86:24:86:27 | true | Switch.cs:86:17:86:28 | return ...; | | Switch.cs:88:9:88:21 | Before return ...; | Switch.cs:88:16:88:20 | false | | Switch.cs:88:16:88:20 | false | Switch.cs:88:9:88:21 | return ...; | -| Switch.cs:91:10:91:11 | Entry | Switch.cs:92:5:99:5 | {...} | +| Switch.cs:91:10:91:11 | Entry | Switch.cs:91:20:91:20 | o | | Switch.cs:91:10:91:11 | Normal Exit | Switch.cs:91:10:91:11 | Exit | +| Switch.cs:91:20:91:20 | o | Switch.cs:92:5:99:5 | {...} | | Switch.cs:92:5:99:5 | {...} | Switch.cs:93:9:97:9 | switch (...) {...} | | Switch.cs:93:9:97:9 | After switch (...) {...} | Switch.cs:98:9:98:21 | Before return ...; | | Switch.cs:93:9:97:9 | switch (...) {...} | Switch.cs:93:17:93:17 | access to parameter o | @@ -5801,8 +5955,9 @@ dominance | Switch.cs:96:24:96:27 | true | Switch.cs:96:17:96:28 | return ...; | | Switch.cs:98:9:98:21 | Before return ...; | Switch.cs:98:16:98:20 | false | | Switch.cs:98:16:98:20 | false | Switch.cs:98:9:98:21 | return ...; | -| Switch.cs:101:9:101:10 | Entry | Switch.cs:102:5:109:5 | {...} | +| Switch.cs:101:9:101:10 | Entry | Switch.cs:101:19:101:19 | s | | Switch.cs:101:9:101:10 | Normal Exit | Switch.cs:101:9:101:10 | Exit | +| Switch.cs:101:19:101:19 | s | Switch.cs:102:5:109:5 | {...} | | Switch.cs:102:5:109:5 | {...} | Switch.cs:103:9:107:9 | switch (...) {...} | | Switch.cs:103:9:107:9 | After switch (...) {...} | Switch.cs:108:9:108:18 | Before return ...; | | Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:103:17:103:25 | Before access to property Length | @@ -5837,8 +5992,9 @@ dominance | Switch.cs:111:34:111:48 | After object creation of type Exception | Switch.cs:111:28:111:48 | throw ... | | Switch.cs:111:34:111:48 | Before object creation of type Exception | Switch.cs:111:34:111:48 | object creation of type Exception | | Switch.cs:111:34:111:48 | object creation of type Exception | Switch.cs:111:34:111:48 | After object creation of type Exception | -| Switch.cs:113:9:113:11 | Entry | Switch.cs:114:5:121:5 | {...} | +| Switch.cs:113:9:113:11 | Entry | Switch.cs:113:20:113:20 | s | | Switch.cs:113:9:113:11 | Normal Exit | Switch.cs:113:9:113:11 | Exit | +| Switch.cs:113:20:113:20 | s | Switch.cs:114:5:121:5 | {...} | | Switch.cs:114:5:121:5 | {...} | Switch.cs:115:9:119:9 | switch (...) {...} | | Switch.cs:115:9:119:9 | After switch (...) {...} | Switch.cs:120:9:120:18 | Before return ...; | | Switch.cs:115:9:119:9 | switch (...) {...} | Switch.cs:115:17:115:24 | Before access to property Length | @@ -5875,8 +6031,9 @@ dominance | Switch.cs:120:16:120:17 | After -... | Switch.cs:120:9:120:18 | return ...; | | Switch.cs:120:16:120:17 | Before -... | Switch.cs:120:17:120:17 | 1 | | Switch.cs:120:17:120:17 | 1 | Switch.cs:120:16:120:17 | -... | -| Switch.cs:123:10:123:12 | Entry | Switch.cs:124:5:127:5 | {...} | +| Switch.cs:123:10:123:12 | Entry | Switch.cs:123:21:123:21 | o | | Switch.cs:123:10:123:12 | Normal Exit | Switch.cs:123:10:123:12 | Exit | +| Switch.cs:123:21:123:21 | o | Switch.cs:124:5:127:5 | {...} | | Switch.cs:124:5:127:5 | {...} | Switch.cs:125:9:126:19 | if (...) ... | | Switch.cs:125:9:126:19 | After if (...) ... | Switch.cs:124:5:127:5 | After {...} | | Switch.cs:125:9:126:19 | if (...) ... | Switch.cs:125:13:125:48 | ... switch { ... } | @@ -5893,8 +6050,9 @@ dominance | Switch.cs:125:37:125:46 | ... => ... | Switch.cs:125:37:125:46 | After ... => ... [match] | | Switch.cs:125:37:125:46 | After ... => ... [match] | Switch.cs:125:37:125:37 | _ | | Switch.cs:126:13:126:19 | Before return ...; | Switch.cs:126:13:126:19 | return ...; | -| Switch.cs:129:12:129:14 | Entry | Switch.cs:130:5:132:5 | {...} | +| Switch.cs:129:12:129:14 | Entry | Switch.cs:129:23:129:23 | o | | Switch.cs:129:12:129:14 | Normal Exit | Switch.cs:129:12:129:14 | Exit | +| Switch.cs:129:23:129:23 | o | Switch.cs:130:5:132:5 | {...} | | Switch.cs:130:5:132:5 | {...} | Switch.cs:131:9:131:67 | Before return ...; | | Switch.cs:131:9:131:67 | Before return ...; | Switch.cs:131:16:131:66 | Before call to method ToString | | Switch.cs:131:9:131:67 | return ...; | Switch.cs:129:12:129:14 | Normal Exit | @@ -5911,8 +6069,9 @@ dominance | Switch.cs:131:43:131:43 | _ | Switch.cs:131:48:131:51 | null | | Switch.cs:131:43:131:51 | ... => ... | Switch.cs:131:43:131:51 | After ... => ... [match] | | Switch.cs:131:43:131:51 | After ... => ... [match] | Switch.cs:131:43:131:43 | _ | -| Switch.cs:134:9:134:11 | Entry | Switch.cs:135:5:142:5 | {...} | +| Switch.cs:134:9:134:11 | Entry | Switch.cs:134:17:134:17 | i | | Switch.cs:134:9:134:11 | Normal Exit | Switch.cs:134:9:134:11 | Exit | +| Switch.cs:134:17:134:17 | i | Switch.cs:135:5:142:5 | {...} | | Switch.cs:135:5:142:5 | {...} | Switch.cs:136:9:141:9 | switch (...) {...} | | Switch.cs:136:9:141:9 | switch (...) {...} | Switch.cs:136:17:136:17 | access to parameter i | | Switch.cs:136:17:136:17 | access to parameter i | Switch.cs:139:13:139:19 | case ...: | @@ -5937,8 +6096,9 @@ dominance | Switch.cs:140:18:140:18 | 2 | Switch.cs:140:21:140:29 | Before return ...; | | Switch.cs:140:21:140:29 | Before return ...; | Switch.cs:140:28:140:28 | 2 | | Switch.cs:140:28:140:28 | 2 | Switch.cs:140:21:140:29 | return ...; | -| Switch.cs:144:9:144:11 | Entry | Switch.cs:145:5:152:5 | {...} | +| Switch.cs:144:9:144:11 | Entry | Switch.cs:144:17:144:17 | i | | Switch.cs:144:9:144:11 | Normal Exit | Switch.cs:144:9:144:11 | Exit | +| Switch.cs:144:17:144:17 | i | Switch.cs:145:5:152:5 | {...} | | Switch.cs:145:5:152:5 | {...} | Switch.cs:146:9:151:9 | switch (...) {...} | | Switch.cs:146:9:151:9 | switch (...) {...} | Switch.cs:146:17:146:17 | access to parameter i | | Switch.cs:146:17:146:17 | access to parameter i | Switch.cs:148:13:148:19 | case ...: | @@ -5963,8 +6123,9 @@ dominance | Switch.cs:150:18:150:18 | 2 | Switch.cs:150:21:150:29 | Before return ...; | | Switch.cs:150:21:150:29 | Before return ...; | Switch.cs:150:28:150:28 | 2 | | Switch.cs:150:28:150:28 | 2 | Switch.cs:150:21:150:29 | return ...; | -| Switch.cs:154:10:154:12 | Entry | Switch.cs:155:5:161:5 | {...} | +| Switch.cs:154:10:154:12 | Entry | Switch.cs:154:19:154:19 | b | | Switch.cs:154:10:154:12 | Normal Exit | Switch.cs:154:10:154:12 | Exit | +| Switch.cs:154:19:154:19 | b | Switch.cs:155:5:161:5 | {...} | | Switch.cs:155:5:161:5 | After {...} | Switch.cs:154:10:154:12 | Normal Exit | | Switch.cs:155:5:161:5 | {...} | Switch.cs:156:9:156:55 | ... ...; | | Switch.cs:156:9:156:55 | ... ...; | Switch.cs:156:13:156:54 | Before String s = ... | @@ -6015,8 +6176,9 @@ dominance | Switch.cs:160:44:160:46 | Before {...} | Switch.cs:160:45:160:45 | access to local variable s | | Switch.cs:160:44:160:46 | {...} | Switch.cs:160:44:160:46 | After {...} | | Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:44:160:46 | {...} | -| Switch.cs:163:10:163:12 | Entry | Switch.cs:164:5:178:5 | {...} | +| Switch.cs:163:10:163:12 | Entry | Switch.cs:163:18:163:18 | i | | Switch.cs:163:10:163:12 | Normal Exit | Switch.cs:163:10:163:12 | Exit | +| Switch.cs:163:18:163:18 | i | Switch.cs:164:5:178:5 | {...} | | Switch.cs:164:5:178:5 | After {...} | Switch.cs:163:10:163:12 | Normal Exit | | Switch.cs:164:5:178:5 | {...} | Switch.cs:165:9:177:9 | switch (...) {...} | | Switch.cs:165:9:177:9 | After switch (...) {...} | Switch.cs:164:5:178:5 | After {...} | @@ -6068,8 +6230,9 @@ dominance | TypeAccesses.cs:1:7:1:18 | call to method | TypeAccesses.cs:1:7:1:18 | After call to method | | TypeAccesses.cs:1:7:1:18 | this access | TypeAccesses.cs:1:7:1:18 | call to method | | TypeAccesses.cs:1:7:1:18 | {...} | TypeAccesses.cs:1:7:1:18 | Normal Exit | -| TypeAccesses.cs:3:10:3:10 | Entry | TypeAccesses.cs:4:5:9:5 | {...} | +| TypeAccesses.cs:3:10:3:10 | Entry | TypeAccesses.cs:3:19:3:19 | o | | TypeAccesses.cs:3:10:3:10 | Normal Exit | TypeAccesses.cs:3:10:3:10 | Exit | +| TypeAccesses.cs:3:19:3:19 | o | TypeAccesses.cs:4:5:9:5 | {...} | | TypeAccesses.cs:4:5:9:5 | After {...} | TypeAccesses.cs:3:10:3:10 | Normal Exit | | TypeAccesses.cs:4:5:9:5 | {...} | TypeAccesses.cs:5:9:5:26 | ... ...; | | TypeAccesses.cs:5:9:5:26 | ... ...; | TypeAccesses.cs:5:13:5:25 | Before String s = ... | @@ -6118,8 +6281,9 @@ dominance | VarDecls.cs:3:7:3:14 | call to method | VarDecls.cs:3:7:3:14 | After call to method | | VarDecls.cs:3:7:3:14 | this access | VarDecls.cs:3:7:3:14 | call to method | | VarDecls.cs:3:7:3:14 | {...} | VarDecls.cs:3:7:3:14 | Normal Exit | -| VarDecls.cs:5:18:5:19 | Entry | VarDecls.cs:6:5:11:5 | {...} | +| VarDecls.cs:5:18:5:19 | Entry | VarDecls.cs:5:30:5:36 | strings | | VarDecls.cs:5:18:5:19 | Normal Exit | VarDecls.cs:5:18:5:19 | Exit | +| VarDecls.cs:5:30:5:36 | strings | VarDecls.cs:6:5:11:5 | {...} | | VarDecls.cs:6:5:11:5 | {...} | VarDecls.cs:7:9:10:9 | fixed(...) { ... } | | VarDecls.cs:7:9:10:9 | fixed(...) { ... } | VarDecls.cs:7:22:7:36 | Before Char* c1 = ... | | VarDecls.cs:7:22:7:23 | access to local variable c1 | VarDecls.cs:7:27:7:36 | Before (...) ... | @@ -6153,8 +6317,9 @@ dominance | VarDecls.cs:9:20:9:28 | After (...) ... | VarDecls.cs:9:13:9:29 | return ...; | | VarDecls.cs:9:20:9:28 | Before (...) ... | VarDecls.cs:9:27:9:28 | access to local variable c1 | | VarDecls.cs:9:27:9:28 | access to local variable c1 | VarDecls.cs:9:20:9:28 | (...) ... | -| VarDecls.cs:13:12:13:13 | Entry | VarDecls.cs:14:5:17:5 | {...} | +| VarDecls.cs:13:12:13:13 | Entry | VarDecls.cs:13:22:13:22 | s | | VarDecls.cs:13:12:13:13 | Normal Exit | VarDecls.cs:13:12:13:13 | Exit | +| VarDecls.cs:13:22:13:22 | s | VarDecls.cs:14:5:17:5 | {...} | | VarDecls.cs:14:5:17:5 | {...} | VarDecls.cs:15:9:15:30 | ... ...; | | VarDecls.cs:15:9:15:30 | ... ...; | VarDecls.cs:15:16:15:21 | Before String s1 = ... | | VarDecls.cs:15:9:15:30 | After ... ...; | VarDecls.cs:16:9:16:23 | Before return ...; | @@ -6175,8 +6340,9 @@ dominance | VarDecls.cs:16:16:16:22 | After ... + ... | VarDecls.cs:16:9:16:23 | return ...; | | VarDecls.cs:16:16:16:22 | Before ... + ... | VarDecls.cs:16:16:16:17 | access to local variable s1 | | VarDecls.cs:16:21:16:22 | access to local variable s2 | VarDecls.cs:16:16:16:22 | ... + ... | -| VarDecls.cs:19:7:19:8 | Entry | VarDecls.cs:20:5:26:5 | {...} | +| VarDecls.cs:19:7:19:8 | Entry | VarDecls.cs:19:15:19:15 | b | | VarDecls.cs:19:7:19:8 | Normal Exit | VarDecls.cs:19:7:19:8 | Exit | +| VarDecls.cs:19:15:19:15 | b | VarDecls.cs:20:5:26:5 | {...} | | VarDecls.cs:20:5:26:5 | {...} | VarDecls.cs:21:9:22:13 | using (...) {...} | | VarDecls.cs:21:9:22:13 | After using (...) {...} | VarDecls.cs:24:9:25:29 | using (...) {...} | | VarDecls.cs:21:9:22:13 | using (...) {...} | VarDecls.cs:21:16:21:22 | Before object creation of type C | @@ -6220,8 +6386,9 @@ dominance | VarDecls.cs:28:41:28:47 | Entry | VarDecls.cs:28:51:28:53 | {...} | | VarDecls.cs:28:41:28:47 | Normal Exit | VarDecls.cs:28:41:28:47 | Exit | | VarDecls.cs:28:51:28:53 | {...} | VarDecls.cs:28:41:28:47 | Normal Exit | -| cflow.cs:5:17:5:20 | Entry | cflow.cs:6:5:35:5 | {...} | +| cflow.cs:5:17:5:20 | Entry | cflow.cs:5:31:5:34 | args | | cflow.cs:5:17:5:20 | Normal Exit | cflow.cs:5:17:5:20 | Exit | +| cflow.cs:5:31:5:34 | args | cflow.cs:6:5:35:5 | {...} | | cflow.cs:6:5:35:5 | After {...} | cflow.cs:5:17:5:20 | Normal Exit | | cflow.cs:6:5:35:5 | {...} | cflow.cs:7:9:7:28 | ... ...; | | cflow.cs:7:9:7:28 | ... ...; | cflow.cs:7:13:7:27 | Before Int32 a = ... | @@ -6396,7 +6563,8 @@ dominance | cflow.cs:33:17:33:36 | call to method WriteLine | cflow.cs:33:17:33:36 | After call to method WriteLine | | cflow.cs:33:17:33:37 | ...; | cflow.cs:33:17:33:36 | Before call to method WriteLine | | cflow.cs:33:35:33:35 | access to local variable i | cflow.cs:33:17:33:36 | call to method WriteLine | -| cflow.cs:37:17:37:22 | Entry | cflow.cs:38:5:68:5 | {...} | +| cflow.cs:37:17:37:22 | Entry | cflow.cs:37:28:37:28 | a | +| cflow.cs:37:28:37:28 | a | cflow.cs:38:5:68:5 | {...} | | cflow.cs:38:5:68:5 | {...} | cflow.cs:39:9:50:9 | switch (...) {...} | | cflow.cs:39:9:50:9 | After switch (...) {...} | cflow.cs:51:9:59:9 | switch (...) {...} | | cflow.cs:39:9:50:9 | switch (...) {...} | cflow.cs:39:17:39:17 | access to parameter a | @@ -6498,8 +6666,9 @@ dominance | cflow.cs:67:9:67:17 | Before return ...; | cflow.cs:67:16:67:16 | access to parameter a | | cflow.cs:67:9:67:17 | return ...; | cflow.cs:37:17:37:22 | Normal Exit | | cflow.cs:67:16:67:16 | access to parameter a | cflow.cs:67:9:67:17 | return ...; | -| cflow.cs:70:18:70:18 | Entry | cflow.cs:71:5:82:5 | {...} | +| cflow.cs:70:18:70:18 | Entry | cflow.cs:70:27:70:27 | s | | cflow.cs:70:18:70:18 | Normal Exit | cflow.cs:70:18:70:18 | Exit | +| cflow.cs:70:27:70:27 | s | cflow.cs:71:5:82:5 | {...} | | cflow.cs:71:5:82:5 | {...} | cflow.cs:72:9:73:19 | if (...) ... | | cflow.cs:72:9:73:19 | After if (...) ... | cflow.cs:74:9:81:9 | if (...) ... | | cflow.cs:72:9:73:19 | if (...) ... | cflow.cs:72:13:72:21 | Before ... == ... | @@ -6537,8 +6706,9 @@ dominance | cflow.cs:80:13:80:48 | ...; | cflow.cs:80:13:80:47 | Before call to method WriteLine | | cflow.cs:80:13:80:48 | After ...; | cflow.cs:79:9:81:9 | After {...} | | cflow.cs:80:31:80:46 | "" | cflow.cs:80:13:80:47 | call to method WriteLine | -| cflow.cs:84:18:84:19 | Entry | cflow.cs:85:5:88:5 | {...} | +| cflow.cs:84:18:84:19 | Entry | cflow.cs:84:28:84:28 | s | | cflow.cs:84:18:84:19 | Normal Exit | cflow.cs:84:18:84:19 | Exit | +| cflow.cs:84:28:84:28 | s | cflow.cs:85:5:88:5 | {...} | | cflow.cs:85:5:88:5 | After {...} | cflow.cs:84:18:84:19 | Normal Exit | | cflow.cs:85:5:88:5 | {...} | cflow.cs:86:9:87:33 | if (...) ... | | cflow.cs:86:9:87:33 | After if (...) ... | cflow.cs:85:5:88:5 | After {...} | @@ -6565,7 +6735,8 @@ dominance | cflow.cs:87:13:87:32 | call to method WriteLine | cflow.cs:87:13:87:32 | After call to method WriteLine | | cflow.cs:87:13:87:33 | ...; | cflow.cs:87:13:87:32 | Before call to method WriteLine | | cflow.cs:87:31:87:31 | access to parameter s | cflow.cs:87:13:87:32 | call to method WriteLine | -| cflow.cs:90:18:90:19 | Entry | cflow.cs:91:5:104:5 | {...} | +| cflow.cs:90:18:90:19 | Entry | cflow.cs:90:28:90:28 | s | +| cflow.cs:90:28:90:28 | s | cflow.cs:91:5:104:5 | {...} | | cflow.cs:91:5:104:5 | After {...} | cflow.cs:90:18:90:19 | Normal Exit | | cflow.cs:91:5:104:5 | {...} | cflow.cs:92:9:93:49 | if (...) ... | | cflow.cs:92:9:93:49 | After if (...) ... | cflow.cs:94:9:94:29 | ...; | @@ -6648,8 +6819,9 @@ dominance | cflow.cs:103:31:103:34 | Before access to property Prop | cflow.cs:103:31:103:34 | this access | | cflow.cs:103:31:103:34 | access to property Prop | cflow.cs:103:31:103:34 | After access to property Prop | | cflow.cs:103:31:103:34 | this access | cflow.cs:103:31:103:34 | access to property Prop | -| cflow.cs:106:18:106:19 | Entry | cflow.cs:107:5:117:5 | {...} | +| cflow.cs:106:18:106:19 | Entry | cflow.cs:106:28:106:28 | s | | cflow.cs:106:18:106:19 | Normal Exit | cflow.cs:106:18:106:19 | Exit | +| cflow.cs:106:28:106:28 | s | cflow.cs:107:5:117:5 | {...} | | cflow.cs:107:5:117:5 | After {...} | cflow.cs:106:18:106:19 | Normal Exit | | cflow.cs:107:5:117:5 | {...} | cflow.cs:108:9:115:9 | if (...) ... | | cflow.cs:108:9:115:9 | After if (...) ... | cflow.cs:116:9:116:29 | ...; | @@ -6679,8 +6851,9 @@ dominance | cflow.cs:116:9:116:29 | ...; | cflow.cs:116:9:116:28 | Before call to method WriteLine | | cflow.cs:116:9:116:29 | After ...; | cflow.cs:107:5:117:5 | After {...} | | cflow.cs:116:27:116:27 | access to parameter s | cflow.cs:116:9:116:28 | call to method WriteLine | -| cflow.cs:119:20:119:21 | Entry | cflow.cs:120:5:124:5 | {...} | +| cflow.cs:119:20:119:21 | Entry | cflow.cs:119:30:119:30 | s | | cflow.cs:119:20:119:21 | Normal Exit | cflow.cs:119:20:119:21 | Exit | +| cflow.cs:119:30:119:30 | s | cflow.cs:120:5:124:5 | {...} | | cflow.cs:120:5:124:5 | {...} | cflow.cs:121:9:121:18 | ... ...; | | cflow.cs:121:9:121:18 | ... ...; | cflow.cs:121:13:121:17 | Before String x = ... | | cflow.cs:121:9:121:18 | After ... ...; | cflow.cs:122:9:122:20 | ...; | @@ -6723,8 +6896,9 @@ dominance | cflow.cs:127:53:127:57 | Before access to field Field | cflow.cs:127:53:127:57 | this access | | cflow.cs:127:53:127:57 | access to field Field | cflow.cs:127:53:127:57 | After access to field Field | | cflow.cs:127:53:127:57 | this access | cflow.cs:127:53:127:57 | access to field Field | -| cflow.cs:127:62:127:64 | Entry | cflow.cs:127:66:127:83 | {...} | +| cflow.cs:127:62:127:64 | Entry | cflow.cs:127:62:127:64 | value | | cflow.cs:127:62:127:64 | Normal Exit | cflow.cs:127:62:127:64 | Exit | +| cflow.cs:127:62:127:64 | value | cflow.cs:127:66:127:83 | {...} | | cflow.cs:127:66:127:83 | After {...} | cflow.cs:127:62:127:64 | Normal Exit | | cflow.cs:127:66:127:83 | {...} | cflow.cs:127:68:127:81 | ...; | | cflow.cs:127:68:127:72 | After access to field Field | cflow.cs:127:76:127:80 | access to parameter value | @@ -6741,11 +6915,12 @@ dominance | cflow.cs:129:5:129:15 | After call to method | cflow.cs:129:5:129:15 | Before call to constructor Object | | cflow.cs:129:5:129:15 | Before call to constructor Object | cflow.cs:129:5:129:15 | call to constructor Object | | cflow.cs:129:5:129:15 | Before call to method | cflow.cs:129:5:129:15 | this access | -| cflow.cs:129:5:129:15 | Entry | cflow.cs:129:5:129:15 | Before call to method | +| cflow.cs:129:5:129:15 | Entry | cflow.cs:129:24:129:24 | s | | cflow.cs:129:5:129:15 | Normal Exit | cflow.cs:129:5:129:15 | Exit | | cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:129:5:129:15 | After call to constructor Object | | cflow.cs:129:5:129:15 | call to method | cflow.cs:129:5:129:15 | After call to method | | cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | call to method | +| cflow.cs:129:24:129:24 | s | cflow.cs:129:5:129:15 | Before call to method | | cflow.cs:130:5:132:5 | After {...} | cflow.cs:129:5:129:15 | Normal Exit | | cflow.cs:130:5:132:5 | {...} | cflow.cs:131:9:131:18 | ...; | | cflow.cs:131:9:131:13 | After access to field Field | cflow.cs:131:17:131:17 | access to parameter s | @@ -6758,8 +6933,9 @@ dominance | cflow.cs:131:9:131:18 | ...; | cflow.cs:131:9:131:17 | Before ... = ... | | cflow.cs:131:9:131:18 | After ...; | cflow.cs:130:5:132:5 | After {...} | | cflow.cs:131:17:131:17 | access to parameter s | cflow.cs:131:9:131:17 | ... = ... | -| cflow.cs:134:5:134:15 | Entry | cflow.cs:134:26:134:29 | Before call to constructor ControlFlow | +| cflow.cs:134:5:134:15 | Entry | cflow.cs:134:21:134:21 | i | | cflow.cs:134:5:134:15 | Normal Exit | cflow.cs:134:5:134:15 | Exit | +| cflow.cs:134:21:134:21 | i | cflow.cs:134:26:134:29 | Before call to constructor ControlFlow | | cflow.cs:134:26:134:29 | After call to constructor ControlFlow | cflow.cs:134:39:134:41 | {...} | | cflow.cs:134:26:134:29 | Before call to constructor ControlFlow | cflow.cs:134:31:134:36 | Before ... + ... | | cflow.cs:134:26:134:29 | call to constructor ControlFlow | cflow.cs:134:26:134:29 | After call to constructor ControlFlow | @@ -6783,8 +6959,10 @@ dominance | cflow.cs:136:33:136:37 | Before ... + ... | cflow.cs:136:33:136:33 | 0 | | cflow.cs:136:37:136:37 | 1 | cflow.cs:136:33:136:37 | ... + ... | | cflow.cs:136:40:136:42 | {...} | cflow.cs:136:12:136:22 | Normal Exit | -| cflow.cs:138:40:138:40 | Entry | cflow.cs:139:5:142:5 | {...} | +| cflow.cs:138:40:138:40 | Entry | cflow.cs:138:54:138:54 | x | | cflow.cs:138:40:138:40 | Normal Exit | cflow.cs:138:40:138:40 | Exit | +| cflow.cs:138:54:138:54 | x | cflow.cs:138:69:138:69 | y | +| cflow.cs:138:69:138:69 | y | cflow.cs:139:5:142:5 | {...} | | cflow.cs:139:5:142:5 | {...} | cflow.cs:140:9:140:29 | ...; | | cflow.cs:140:9:140:28 | After call to method WriteLine | cflow.cs:140:9:140:29 | After ...; | | cflow.cs:140:9:140:28 | Before call to method WriteLine | cflow.cs:140:27:140:27 | access to parameter x | @@ -6795,7 +6973,9 @@ dominance | cflow.cs:141:9:141:17 | Before return ...; | cflow.cs:141:16:141:16 | access to parameter y | | cflow.cs:141:9:141:17 | return ...; | cflow.cs:138:40:138:40 | Normal Exit | | cflow.cs:141:16:141:16 | access to parameter y | cflow.cs:141:9:141:17 | return ...; | -| cflow.cs:144:33:144:35 | Entry | cflow.cs:144:37:144:54 | {...} | +| cflow.cs:144:28:144:28 | i | cflow.cs:144:37:144:54 | {...} | +| cflow.cs:144:28:144:28 | i | cflow.cs:144:56:144:58 | value | +| cflow.cs:144:33:144:35 | Entry | cflow.cs:144:28:144:28 | i | | cflow.cs:144:33:144:35 | Normal Exit | cflow.cs:144:33:144:35 | Exit | | cflow.cs:144:37:144:54 | {...} | cflow.cs:144:39:144:52 | Before return ...; | | cflow.cs:144:39:144:52 | Before return ...; | cflow.cs:144:46:144:51 | Before ... + ... | @@ -6808,8 +6988,9 @@ dominance | cflow.cs:144:46:144:51 | After ... + ... | cflow.cs:144:39:144:52 | return ...; | | cflow.cs:144:46:144:51 | Before ... + ... | cflow.cs:144:46:144:46 | Before (...) ... | | cflow.cs:144:50:144:51 | "" | cflow.cs:144:46:144:51 | ... + ... | -| cflow.cs:144:56:144:58 | Entry | cflow.cs:144:60:144:62 | {...} | +| cflow.cs:144:56:144:58 | Entry | cflow.cs:144:28:144:28 | i | | cflow.cs:144:56:144:58 | Normal Exit | cflow.cs:144:56:144:58 | Exit | +| cflow.cs:144:56:144:58 | value | cflow.cs:144:60:144:62 | {...} | | cflow.cs:144:60:144:62 | {...} | cflow.cs:144:56:144:58 | Normal Exit | | cflow.cs:146:10:146:12 | Entry | cflow.cs:147:5:177:5 | {...} | | cflow.cs:146:10:146:12 | Normal Exit | cflow.cs:146:10:146:12 | Exit | @@ -6969,8 +7150,9 @@ dominance | cflow.cs:181:24:181:37 | After Func y = ... | cflow.cs:181:9:181:38 | After ... ...; | | cflow.cs:181:24:181:37 | Before Func y = ... | cflow.cs:181:24:181:24 | access to local variable y | | cflow.cs:181:24:181:37 | Func y = ... | cflow.cs:181:24:181:37 | After Func y = ... | +| cflow.cs:181:28:181:28 | x | cflow.cs:181:33:181:37 | Before ... + ... | | cflow.cs:181:28:181:37 | (...) => ... | cflow.cs:181:24:181:37 | Func y = ... | -| cflow.cs:181:28:181:37 | Entry | cflow.cs:181:33:181:37 | Before ... + ... | +| cflow.cs:181:28:181:37 | Entry | cflow.cs:181:28:181:28 | x | | cflow.cs:181:28:181:37 | Normal Exit | cflow.cs:181:28:181:37 | Exit | | cflow.cs:181:33:181:33 | access to parameter x | cflow.cs:181:37:181:37 | 1 | | cflow.cs:181:33:181:37 | ... + ... | cflow.cs:181:33:181:37 | After ... + ... | @@ -6983,9 +7165,10 @@ dominance | cflow.cs:182:24:182:61 | After Func z = ... | cflow.cs:182:9:182:62 | After ... ...; | | cflow.cs:182:24:182:61 | Before Func z = ... | cflow.cs:182:24:182:24 | access to local variable z | | cflow.cs:182:24:182:61 | Func z = ... | cflow.cs:182:24:182:61 | After Func z = ... | -| cflow.cs:182:28:182:61 | Entry | cflow.cs:182:45:182:61 | {...} | +| cflow.cs:182:28:182:61 | Entry | cflow.cs:182:42:182:42 | x | | cflow.cs:182:28:182:61 | Normal Exit | cflow.cs:182:28:182:61 | Exit | | cflow.cs:182:28:182:61 | delegate(...) { ... } | cflow.cs:182:24:182:61 | Func z = ... | +| cflow.cs:182:42:182:42 | x | cflow.cs:182:45:182:61 | {...} | | cflow.cs:182:45:182:61 | {...} | cflow.cs:182:47:182:59 | Before return ...; | | cflow.cs:182:47:182:59 | Before return ...; | cflow.cs:182:54:182:58 | Before ... + ... | | cflow.cs:182:47:182:59 | return ...; | cflow.cs:182:28:182:61 | Normal Exit | @@ -7432,14 +7615,16 @@ dominance | cflow.cs:282:24:282:27 | Before call to constructor ControlFlow | cflow.cs:282:24:282:27 | call to constructor ControlFlow | | cflow.cs:282:24:282:27 | call to constructor ControlFlow | cflow.cs:282:24:282:27 | After call to constructor ControlFlow | | cflow.cs:282:31:282:33 | {...} | cflow.cs:282:5:282:18 | Normal Exit | -| cflow.cs:284:5:284:18 | Entry | cflow.cs:284:32:284:35 | Before call to constructor ControlFlowSub | +| cflow.cs:284:5:284:18 | Entry | cflow.cs:284:27:284:27 | s | | cflow.cs:284:5:284:18 | Normal Exit | cflow.cs:284:5:284:18 | Exit | +| cflow.cs:284:27:284:27 | s | cflow.cs:284:32:284:35 | Before call to constructor ControlFlowSub | | cflow.cs:284:32:284:35 | After call to constructor ControlFlowSub | cflow.cs:284:39:284:41 | {...} | | cflow.cs:284:32:284:35 | Before call to constructor ControlFlowSub | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub | | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub | cflow.cs:284:32:284:35 | After call to constructor ControlFlowSub | | cflow.cs:284:39:284:41 | {...} | cflow.cs:284:5:284:18 | Normal Exit | -| cflow.cs:286:5:286:18 | Entry | cflow.cs:286:29:286:32 | Before call to constructor ControlFlowSub | +| cflow.cs:286:5:286:18 | Entry | cflow.cs:286:24:286:24 | i | | cflow.cs:286:5:286:18 | Normal Exit | cflow.cs:286:5:286:18 | Exit | +| cflow.cs:286:24:286:24 | i | cflow.cs:286:29:286:32 | Before call to constructor ControlFlowSub | | cflow.cs:286:29:286:32 | After call to constructor ControlFlowSub | cflow.cs:286:48:286:50 | {...} | | cflow.cs:286:29:286:32 | Before call to constructor ControlFlowSub | cflow.cs:286:34:286:45 | Before call to method ToString | | cflow.cs:286:29:286:32 | call to constructor ControlFlowSub | cflow.cs:286:29:286:32 | After call to constructor ControlFlowSub | @@ -7458,8 +7643,9 @@ dominance | cflow.cs:289:7:289:18 | call to method | cflow.cs:289:7:289:18 | After call to method | | cflow.cs:289:7:289:18 | this access | cflow.cs:289:7:289:18 | call to method | | cflow.cs:289:7:289:18 | {...} | cflow.cs:289:7:289:18 | Normal Exit | -| cflow.cs:291:12:291:12 | Entry | cflow.cs:291:38:291:41 | Before delegate call | +| cflow.cs:291:12:291:12 | Entry | cflow.cs:291:32:291:32 | f | | cflow.cs:291:12:291:12 | Normal Exit | cflow.cs:291:12:291:12 | Exit | +| cflow.cs:291:32:291:32 | f | cflow.cs:291:38:291:41 | Before delegate call | | cflow.cs:291:38:291:38 | access to parameter f | cflow.cs:291:40:291:40 | 0 | | cflow.cs:291:38:291:41 | After delegate call | cflow.cs:291:12:291:12 | Normal Exit | | cflow.cs:291:38:291:41 | Before delegate call | cflow.cs:291:38:291:38 | access to parameter f | @@ -7469,14 +7655,20 @@ dominance | cflow.cs:296:5:296:25 | After call to method | cflow.cs:296:5:296:25 | Before call to constructor Object | | cflow.cs:296:5:296:25 | Before call to constructor Object | cflow.cs:296:5:296:25 | call to constructor Object | | cflow.cs:296:5:296:25 | Before call to method | cflow.cs:296:5:296:25 | this access | -| cflow.cs:296:5:296:25 | Entry | cflow.cs:296:5:296:25 | Before call to method | +| cflow.cs:296:5:296:25 | Entry | cflow.cs:296:32:296:32 | b | | cflow.cs:296:5:296:25 | Normal Exit | cflow.cs:296:5:296:25 | Exit | | cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:5:296:25 | After call to constructor Object | | cflow.cs:296:5:296:25 | call to method | cflow.cs:296:5:296:25 | After call to method | | cflow.cs:296:5:296:25 | this access | cflow.cs:296:5:296:25 | call to method | +| cflow.cs:296:32:296:32 | b | cflow.cs:296:39:296:39 | i | +| cflow.cs:296:39:296:39 | i | cflow.cs:296:49:296:49 | s | +| cflow.cs:296:49:296:49 | s | cflow.cs:296:5:296:25 | Before call to method | | cflow.cs:296:52:296:54 | {...} | cflow.cs:296:5:296:25 | Normal Exit | -| cflow.cs:298:10:298:10 | Entry | cflow.cs:299:5:301:5 | {...} | +| cflow.cs:298:10:298:10 | Entry | cflow.cs:298:16:298:16 | i | | cflow.cs:298:10:298:10 | Normal Exit | cflow.cs:298:10:298:10 | Exit | +| cflow.cs:298:16:298:16 | i | cflow.cs:298:26:298:26 | s | +| cflow.cs:298:26:298:26 | s | cflow.cs:298:34:298:34 | b | +| cflow.cs:298:34:298:34 | b | cflow.cs:299:5:301:5 | {...} | | cflow.cs:299:5:301:5 | After {...} | cflow.cs:298:10:298:10 | Normal Exit | | cflow.cs:299:5:301:5 | {...} | cflow.cs:300:9:300:73 | ...; | | cflow.cs:300:9:300:72 | After object creation of type NegationInConstructor | cflow.cs:300:9:300:73 | After ...; | @@ -7513,9 +7705,11 @@ dominance | cflow.cs:304:7:304:18 | {...} | cflow.cs:304:7:304:18 | Normal Exit | | cflow.cs:306:60:310:5 | (...) => ... | cflow.cs:306:60:310:5 | Normal Exit | | cflow.cs:306:60:310:5 | Entry | cflow.cs:306:60:310:5 | (...) => ... | -| cflow.cs:306:60:310:5 | Entry | cflow.cs:307:5:310:5 | {...} | +| cflow.cs:306:60:310:5 | Entry | cflow.cs:306:61:306:61 | o | | cflow.cs:306:60:310:5 | Normal Exit | cflow.cs:306:60:310:5 | Exit | | cflow.cs:306:60:310:5 | Normal Exit | cflow.cs:306:60:310:5 | Exit | +| cflow.cs:306:61:306:61 | o | cflow.cs:306:64:306:64 | n | +| cflow.cs:306:64:306:64 | n | cflow.cs:307:5:310:5 | {...} | | cflow.cs:307:5:310:5 | {...} | cflow.cs:308:9:308:21 | ... ...; | | cflow.cs:308:9:308:21 | ... ...; | cflow.cs:308:16:308:20 | Before Object x = ... | | cflow.cs:308:9:308:21 | After ... ...; | cflow.cs:309:9:309:17 | Before return ...; | @@ -7538,22 +7732,28 @@ postDominance | AccessorCalls.cs:1:7:1:19 | call to method | AccessorCalls.cs:1:7:1:19 | this access | | AccessorCalls.cs:1:7:1:19 | this access | AccessorCalls.cs:1:7:1:19 | Before call to method | | AccessorCalls.cs:1:7:1:19 | {...} | AccessorCalls.cs:1:7:1:19 | After call to constructor Object | +| AccessorCalls.cs:5:18:5:18 | i | AccessorCalls.cs:5:23:5:25 | Entry | +| AccessorCalls.cs:5:18:5:18 | i | AccessorCalls.cs:5:33:5:35 | Entry | | AccessorCalls.cs:5:23:5:25 | Exit | AccessorCalls.cs:5:23:5:25 | Normal Exit | | AccessorCalls.cs:5:23:5:25 | Normal Exit | AccessorCalls.cs:5:30:5:30 | access to parameter i | -| AccessorCalls.cs:5:30:5:30 | access to parameter i | AccessorCalls.cs:5:23:5:25 | Entry | +| AccessorCalls.cs:5:30:5:30 | access to parameter i | AccessorCalls.cs:5:18:5:18 | i | | AccessorCalls.cs:5:33:5:35 | Exit | AccessorCalls.cs:5:33:5:35 | Normal Exit | | AccessorCalls.cs:5:33:5:35 | Normal Exit | AccessorCalls.cs:5:37:5:39 | {...} | -| AccessorCalls.cs:5:37:5:39 | {...} | AccessorCalls.cs:5:33:5:35 | Entry | +| AccessorCalls.cs:5:33:5:35 | value | AccessorCalls.cs:5:18:5:18 | i | +| AccessorCalls.cs:5:37:5:39 | {...} | AccessorCalls.cs:5:33:5:35 | value | | AccessorCalls.cs:7:32:7:34 | Exit | AccessorCalls.cs:7:32:7:34 | Normal Exit | | AccessorCalls.cs:7:32:7:34 | Normal Exit | AccessorCalls.cs:7:36:7:38 | {...} | -| AccessorCalls.cs:7:36:7:38 | {...} | AccessorCalls.cs:7:32:7:34 | Entry | +| AccessorCalls.cs:7:32:7:34 | value | AccessorCalls.cs:7:32:7:34 | Entry | +| AccessorCalls.cs:7:36:7:38 | {...} | AccessorCalls.cs:7:32:7:34 | value | | AccessorCalls.cs:7:40:7:45 | Exit | AccessorCalls.cs:7:40:7:45 | Normal Exit | | AccessorCalls.cs:7:40:7:45 | Normal Exit | AccessorCalls.cs:7:47:7:49 | {...} | -| AccessorCalls.cs:7:47:7:49 | {...} | AccessorCalls.cs:7:40:7:45 | Entry | +| AccessorCalls.cs:7:40:7:45 | value | AccessorCalls.cs:7:40:7:45 | Entry | +| AccessorCalls.cs:7:47:7:49 | {...} | AccessorCalls.cs:7:40:7:45 | value | | AccessorCalls.cs:10:10:10:11 | Exit | AccessorCalls.cs:10:10:10:11 | Normal Exit | | AccessorCalls.cs:10:10:10:11 | Normal Exit | AccessorCalls.cs:11:5:17:5 | After {...} | +| AccessorCalls.cs:10:26:10:26 | e | AccessorCalls.cs:10:10:10:11 | Entry | | AccessorCalls.cs:11:5:17:5 | After {...} | AccessorCalls.cs:16:9:16:24 | After ...; | -| AccessorCalls.cs:11:5:17:5 | {...} | AccessorCalls.cs:10:10:10:11 | Entry | +| AccessorCalls.cs:11:5:17:5 | {...} | AccessorCalls.cs:10:26:10:26 | e | | AccessorCalls.cs:12:9:12:12 | this access | AccessorCalls.cs:12:9:12:18 | Before access to field Field | | AccessorCalls.cs:12:9:12:18 | After access to field Field | AccessorCalls.cs:12:9:12:18 | access to field Field | | AccessorCalls.cs:12:9:12:18 | Before access to field Field | AccessorCalls.cs:12:9:12:31 | Before ... = ... | @@ -7617,8 +7817,9 @@ postDominance | AccessorCalls.cs:16:23:16:23 | access to parameter e | AccessorCalls.cs:16:9:16:18 | After access to event Event | | AccessorCalls.cs:19:10:19:11 | Exit | AccessorCalls.cs:19:10:19:11 | Normal Exit | | AccessorCalls.cs:19:10:19:11 | Normal Exit | AccessorCalls.cs:20:5:26:5 | After {...} | +| AccessorCalls.cs:19:26:19:26 | e | AccessorCalls.cs:19:10:19:11 | Entry | | AccessorCalls.cs:20:5:26:5 | After {...} | AccessorCalls.cs:25:9:25:26 | After ...; | -| AccessorCalls.cs:20:5:26:5 | {...} | AccessorCalls.cs:19:10:19:11 | Entry | +| AccessorCalls.cs:20:5:26:5 | {...} | AccessorCalls.cs:19:26:19:26 | e | | AccessorCalls.cs:21:9:21:12 | this access | AccessorCalls.cs:21:9:21:14 | Before access to field x | | AccessorCalls.cs:21:9:21:14 | After access to field x | AccessorCalls.cs:21:9:21:14 | access to field x | | AccessorCalls.cs:21:9:21:14 | Before access to field x | AccessorCalls.cs:21:9:21:20 | Before access to field Field | @@ -7887,8 +8088,9 @@ postDominance | AccessorCalls.cs:53:29:53:29 | 0 | AccessorCalls.cs:53:22:53:27 | After access to field x | | AccessorCalls.cs:56:10:56:11 | Exit | AccessorCalls.cs:56:10:56:11 | Normal Exit | | AccessorCalls.cs:56:10:56:11 | Normal Exit | AccessorCalls.cs:57:5:59:5 | After {...} | +| AccessorCalls.cs:56:17:56:17 | i | AccessorCalls.cs:56:10:56:11 | Entry | | AccessorCalls.cs:57:5:59:5 | After {...} | AccessorCalls.cs:58:9:58:86 | After ...; | -| AccessorCalls.cs:57:5:59:5 | {...} | AccessorCalls.cs:56:10:56:11 | Entry | +| AccessorCalls.cs:57:5:59:5 | {...} | AccessorCalls.cs:56:17:56:17 | i | | AccessorCalls.cs:58:9:58:45 | (..., ...) | AccessorCalls.cs:58:33:58:44 | After (..., ...) | | AccessorCalls.cs:58:9:58:45 | After (..., ...) | AccessorCalls.cs:58:9:58:45 | (..., ...) | | AccessorCalls.cs:58:9:58:45 | Before (..., ...) | AccessorCalls.cs:58:9:58:85 | Before ... = ... | @@ -7936,8 +8138,9 @@ postDominance | AccessorCalls.cs:58:82:58:82 | 1 | AccessorCalls.cs:58:77:58:80 | this access | | AccessorCalls.cs:61:10:61:11 | Exit | AccessorCalls.cs:61:10:61:11 | Normal Exit | | AccessorCalls.cs:61:10:61:11 | Normal Exit | AccessorCalls.cs:62:5:64:5 | After {...} | +| AccessorCalls.cs:61:17:61:17 | i | AccessorCalls.cs:61:10:61:11 | Entry | | AccessorCalls.cs:62:5:64:5 | After {...} | AccessorCalls.cs:63:9:63:98 | After ...; | -| AccessorCalls.cs:62:5:64:5 | {...} | AccessorCalls.cs:61:10:61:11 | Entry | +| AccessorCalls.cs:62:5:64:5 | {...} | AccessorCalls.cs:61:17:61:17 | i | | AccessorCalls.cs:63:9:63:51 | (..., ...) | AccessorCalls.cs:63:37:63:50 | After (..., ...) | | AccessorCalls.cs:63:9:63:51 | After (..., ...) | AccessorCalls.cs:63:9:63:51 | (..., ...) | | AccessorCalls.cs:63:9:63:51 | Before (..., ...) | AccessorCalls.cs:63:9:63:97 | Before ... = ... | @@ -8003,8 +8206,11 @@ postDominance | AccessorCalls.cs:63:94:63:94 | 1 | AccessorCalls.cs:63:87:63:92 | After access to field x | | AccessorCalls.cs:66:10:66:11 | Exit | AccessorCalls.cs:66:10:66:11 | Normal Exit | | AccessorCalls.cs:66:10:66:11 | Normal Exit | AccessorCalls.cs:67:5:74:5 | After {...} | +| AccessorCalls.cs:66:20:66:20 | o | AccessorCalls.cs:66:10:66:11 | Entry | +| AccessorCalls.cs:66:27:66:27 | i | AccessorCalls.cs:66:20:66:20 | o | +| AccessorCalls.cs:66:43:66:43 | e | AccessorCalls.cs:66:27:66:27 | i | | AccessorCalls.cs:67:5:74:5 | After {...} | AccessorCalls.cs:73:9:73:84 | After ...; | -| AccessorCalls.cs:67:5:74:5 | {...} | AccessorCalls.cs:66:10:66:11 | Entry | +| AccessorCalls.cs:67:5:74:5 | {...} | AccessorCalls.cs:66:43:66:43 | e | | AccessorCalls.cs:68:9:68:22 | ... ...; | AccessorCalls.cs:67:5:74:5 | {...} | | AccessorCalls.cs:68:9:68:22 | After ... ...; | AccessorCalls.cs:68:17:68:21 | After dynamic d = ... | | AccessorCalls.cs:68:17:68:17 | access to local variable d | AccessorCalls.cs:68:17:68:21 | Before dynamic d = ... | @@ -8169,8 +8375,9 @@ postDominance | Assert.cs:5:7:5:17 | this access | Assert.cs:5:7:5:17 | Before call to method | | Assert.cs:5:7:5:17 | {...} | Assert.cs:5:7:5:17 | After call to constructor Object | | Assert.cs:7:10:7:11 | Normal Exit | Assert.cs:8:5:12:5 | After {...} | +| Assert.cs:7:18:7:18 | b | Assert.cs:7:10:7:11 | Entry | | Assert.cs:8:5:12:5 | After {...} | Assert.cs:11:9:11:36 | After ...; | -| Assert.cs:8:5:12:5 | {...} | Assert.cs:7:10:7:11 | Entry | +| Assert.cs:8:5:12:5 | {...} | Assert.cs:7:18:7:18 | b | | Assert.cs:9:9:9:33 | ... ...; | Assert.cs:8:5:12:5 | {...} | | Assert.cs:9:9:9:33 | After ... ...; | Assert.cs:9:16:9:32 | After String s = ... | | Assert.cs:9:16:9:16 | access to local variable s | Assert.cs:9:16:9:32 | Before String s = ... | @@ -8203,8 +8410,9 @@ postDominance | Assert.cs:11:27:11:34 | Before access to property Length | Assert.cs:11:9:11:35 | Before call to method WriteLine | | Assert.cs:11:27:11:34 | access to property Length | Assert.cs:11:27:11:27 | access to local variable s | | Assert.cs:14:10:14:11 | Normal Exit | Assert.cs:15:5:19:5 | After {...} | +| Assert.cs:14:18:14:18 | b | Assert.cs:14:10:14:11 | Entry | | Assert.cs:15:5:19:5 | After {...} | Assert.cs:18:9:18:36 | After ...; | -| Assert.cs:15:5:19:5 | {...} | Assert.cs:14:10:14:11 | Entry | +| Assert.cs:15:5:19:5 | {...} | Assert.cs:14:18:14:18 | b | | Assert.cs:16:9:16:33 | ... ...; | Assert.cs:15:5:19:5 | {...} | | Assert.cs:16:9:16:33 | After ... ...; | Assert.cs:16:16:16:32 | After String s = ... | | Assert.cs:16:16:16:16 | access to local variable s | Assert.cs:16:16:16:32 | Before String s = ... | @@ -8233,8 +8441,9 @@ postDominance | Assert.cs:18:27:18:34 | Before access to property Length | Assert.cs:18:9:18:35 | Before call to method WriteLine | | Assert.cs:18:27:18:34 | access to property Length | Assert.cs:18:27:18:27 | access to local variable s | | Assert.cs:21:10:21:11 | Normal Exit | Assert.cs:22:5:26:5 | After {...} | +| Assert.cs:21:18:21:18 | b | Assert.cs:21:10:21:11 | Entry | | Assert.cs:22:5:26:5 | After {...} | Assert.cs:25:9:25:36 | After ...; | -| Assert.cs:22:5:26:5 | {...} | Assert.cs:21:10:21:11 | Entry | +| Assert.cs:22:5:26:5 | {...} | Assert.cs:21:18:21:18 | b | | Assert.cs:23:9:23:33 | ... ...; | Assert.cs:22:5:26:5 | {...} | | Assert.cs:23:9:23:33 | After ... ...; | Assert.cs:23:16:23:32 | After String s = ... | | Assert.cs:23:16:23:16 | access to local variable s | Assert.cs:23:16:23:32 | Before String s = ... | @@ -8263,8 +8472,9 @@ postDominance | Assert.cs:25:27:25:34 | Before access to property Length | Assert.cs:25:9:25:35 | Before call to method WriteLine | | Assert.cs:25:27:25:34 | access to property Length | Assert.cs:25:27:25:27 | access to local variable s | | Assert.cs:28:10:28:11 | Normal Exit | Assert.cs:29:5:33:5 | After {...} | +| Assert.cs:28:18:28:18 | b | Assert.cs:28:10:28:11 | Entry | | Assert.cs:29:5:33:5 | After {...} | Assert.cs:32:9:32:36 | After ...; | -| Assert.cs:29:5:33:5 | {...} | Assert.cs:28:10:28:11 | Entry | +| Assert.cs:29:5:33:5 | {...} | Assert.cs:28:18:28:18 | b | | Assert.cs:30:9:30:33 | ... ...; | Assert.cs:29:5:33:5 | {...} | | Assert.cs:30:9:30:33 | After ... ...; | Assert.cs:30:16:30:32 | After String s = ... | | Assert.cs:30:16:30:16 | access to local variable s | Assert.cs:30:16:30:32 | Before String s = ... | @@ -8297,8 +8507,9 @@ postDominance | Assert.cs:32:27:32:34 | Before access to property Length | Assert.cs:32:9:32:35 | Before call to method WriteLine | | Assert.cs:32:27:32:34 | access to property Length | Assert.cs:32:27:32:27 | access to local variable s | | Assert.cs:35:10:35:11 | Normal Exit | Assert.cs:36:5:40:5 | After {...} | +| Assert.cs:35:18:35:18 | b | Assert.cs:35:10:35:11 | Entry | | Assert.cs:36:5:40:5 | After {...} | Assert.cs:39:9:39:36 | After ...; | -| Assert.cs:36:5:40:5 | {...} | Assert.cs:35:10:35:11 | Entry | +| Assert.cs:36:5:40:5 | {...} | Assert.cs:35:18:35:18 | b | | Assert.cs:37:9:37:33 | ... ...; | Assert.cs:36:5:40:5 | {...} | | Assert.cs:37:9:37:33 | After ... ...; | Assert.cs:37:16:37:32 | After String s = ... | | Assert.cs:37:16:37:16 | access to local variable s | Assert.cs:37:16:37:32 | Before String s = ... | @@ -8331,8 +8542,9 @@ postDominance | Assert.cs:39:27:39:34 | Before access to property Length | Assert.cs:39:9:39:35 | Before call to method WriteLine | | Assert.cs:39:27:39:34 | access to property Length | Assert.cs:39:27:39:27 | access to local variable s | | Assert.cs:42:10:42:11 | Normal Exit | Assert.cs:43:5:47:5 | After {...} | +| Assert.cs:42:18:42:18 | b | Assert.cs:42:10:42:11 | Entry | | Assert.cs:43:5:47:5 | After {...} | Assert.cs:46:9:46:36 | After ...; | -| Assert.cs:43:5:47:5 | {...} | Assert.cs:42:10:42:11 | Entry | +| Assert.cs:43:5:47:5 | {...} | Assert.cs:42:18:42:18 | b | | Assert.cs:44:9:44:33 | ... ...; | Assert.cs:43:5:47:5 | {...} | | Assert.cs:44:9:44:33 | After ... ...; | Assert.cs:44:16:44:32 | After String s = ... | | Assert.cs:44:16:44:16 | access to local variable s | Assert.cs:44:16:44:32 | Before String s = ... | @@ -8365,8 +8577,9 @@ postDominance | Assert.cs:46:27:46:34 | Before access to property Length | Assert.cs:46:9:46:35 | Before call to method WriteLine | | Assert.cs:46:27:46:34 | access to property Length | Assert.cs:46:27:46:27 | access to local variable s | | Assert.cs:49:10:49:11 | Normal Exit | Assert.cs:50:5:54:5 | After {...} | +| Assert.cs:49:18:49:18 | b | Assert.cs:49:10:49:11 | Entry | | Assert.cs:50:5:54:5 | After {...} | Assert.cs:53:9:53:36 | After ...; | -| Assert.cs:50:5:54:5 | {...} | Assert.cs:49:10:49:11 | Entry | +| Assert.cs:50:5:54:5 | {...} | Assert.cs:49:18:49:18 | b | | Assert.cs:51:9:51:33 | ... ...; | Assert.cs:50:5:54:5 | {...} | | Assert.cs:51:9:51:33 | After ... ...; | Assert.cs:51:16:51:32 | After String s = ... | | Assert.cs:51:16:51:16 | access to local variable s | Assert.cs:51:16:51:32 | Before String s = ... | @@ -8399,8 +8612,9 @@ postDominance | Assert.cs:53:27:53:34 | Before access to property Length | Assert.cs:53:9:53:35 | Before call to method WriteLine | | Assert.cs:53:27:53:34 | access to property Length | Assert.cs:53:27:53:27 | access to local variable s | | Assert.cs:56:10:56:11 | Normal Exit | Assert.cs:57:5:61:5 | After {...} | +| Assert.cs:56:18:56:18 | b | Assert.cs:56:10:56:11 | Entry | | Assert.cs:57:5:61:5 | After {...} | Assert.cs:60:9:60:36 | After ...; | -| Assert.cs:57:5:61:5 | {...} | Assert.cs:56:10:56:11 | Entry | +| Assert.cs:57:5:61:5 | {...} | Assert.cs:56:18:56:18 | b | | Assert.cs:58:9:58:33 | ... ...; | Assert.cs:57:5:61:5 | {...} | | Assert.cs:58:9:58:33 | After ... ...; | Assert.cs:58:16:58:32 | After String s = ... | | Assert.cs:58:16:58:16 | access to local variable s | Assert.cs:58:16:58:32 | Before String s = ... | @@ -8436,8 +8650,9 @@ postDominance | Assert.cs:60:27:60:34 | Before access to property Length | Assert.cs:60:9:60:35 | Before call to method WriteLine | | Assert.cs:60:27:60:34 | access to property Length | Assert.cs:60:27:60:27 | access to local variable s | | Assert.cs:63:10:63:11 | Normal Exit | Assert.cs:64:5:68:5 | After {...} | +| Assert.cs:63:18:63:18 | b | Assert.cs:63:10:63:11 | Entry | | Assert.cs:64:5:68:5 | After {...} | Assert.cs:67:9:67:36 | After ...; | -| Assert.cs:64:5:68:5 | {...} | Assert.cs:63:10:63:11 | Entry | +| Assert.cs:64:5:68:5 | {...} | Assert.cs:63:18:63:18 | b | | Assert.cs:65:9:65:33 | ... ...; | Assert.cs:64:5:68:5 | {...} | | Assert.cs:65:9:65:33 | After ... ...; | Assert.cs:65:16:65:32 | After String s = ... | | Assert.cs:65:16:65:16 | access to local variable s | Assert.cs:65:16:65:32 | Before String s = ... | @@ -8473,8 +8688,9 @@ postDominance | Assert.cs:67:27:67:34 | Before access to property Length | Assert.cs:67:9:67:35 | Before call to method WriteLine | | Assert.cs:67:27:67:34 | access to property Length | Assert.cs:67:27:67:27 | access to local variable s | | Assert.cs:70:10:70:12 | Normal Exit | Assert.cs:71:5:75:5 | After {...} | +| Assert.cs:70:19:70:19 | b | Assert.cs:70:10:70:12 | Entry | | Assert.cs:71:5:75:5 | After {...} | Assert.cs:74:9:74:36 | After ...; | -| Assert.cs:71:5:75:5 | {...} | Assert.cs:70:10:70:12 | Entry | +| Assert.cs:71:5:75:5 | {...} | Assert.cs:70:19:70:19 | b | | Assert.cs:72:9:72:33 | ... ...; | Assert.cs:71:5:75:5 | {...} | | Assert.cs:72:9:72:33 | After ... ...; | Assert.cs:72:16:72:32 | After String s = ... | | Assert.cs:72:16:72:16 | access to local variable s | Assert.cs:72:16:72:32 | Before String s = ... | @@ -8510,8 +8726,9 @@ postDominance | Assert.cs:74:27:74:34 | Before access to property Length | Assert.cs:74:9:74:35 | Before call to method WriteLine | | Assert.cs:74:27:74:34 | access to property Length | Assert.cs:74:27:74:27 | access to local variable s | | Assert.cs:77:10:77:12 | Normal Exit | Assert.cs:78:5:82:5 | After {...} | +| Assert.cs:77:19:77:19 | b | Assert.cs:77:10:77:12 | Entry | | Assert.cs:78:5:82:5 | After {...} | Assert.cs:81:9:81:36 | After ...; | -| Assert.cs:78:5:82:5 | {...} | Assert.cs:77:10:77:12 | Entry | +| Assert.cs:78:5:82:5 | {...} | Assert.cs:77:19:77:19 | b | | Assert.cs:79:9:79:33 | ... ...; | Assert.cs:78:5:82:5 | {...} | | Assert.cs:79:9:79:33 | After ... ...; | Assert.cs:79:16:79:32 | After String s = ... | | Assert.cs:79:16:79:16 | access to local variable s | Assert.cs:79:16:79:32 | Before String s = ... | @@ -8547,8 +8764,9 @@ postDominance | Assert.cs:81:27:81:34 | Before access to property Length | Assert.cs:81:9:81:35 | Before call to method WriteLine | | Assert.cs:81:27:81:34 | access to property Length | Assert.cs:81:27:81:27 | access to local variable s | | Assert.cs:84:10:84:12 | Normal Exit | Assert.cs:85:5:129:5 | After {...} | +| Assert.cs:84:19:84:19 | b | Assert.cs:84:10:84:12 | Entry | | Assert.cs:85:5:129:5 | After {...} | Assert.cs:128:9:128:36 | After ...; | -| Assert.cs:85:5:129:5 | {...} | Assert.cs:84:10:84:12 | Entry | +| Assert.cs:85:5:129:5 | {...} | Assert.cs:84:19:84:19 | b | | Assert.cs:86:9:86:33 | ... ...; | Assert.cs:85:5:129:5 | {...} | | Assert.cs:86:9:86:33 | After ... ...; | Assert.cs:86:16:86:32 | After String s = ... | | Assert.cs:86:16:86:16 | access to local variable s | Assert.cs:86:16:86:32 | Before String s = ... | @@ -8900,9 +9118,15 @@ postDominance | Assert.cs:128:27:128:34 | access to property Length | Assert.cs:128:27:128:27 | access to local variable s | | Assert.cs:131:18:131:32 | Exit | Assert.cs:131:18:131:32 | Normal Exit | | Assert.cs:131:18:131:32 | Normal Exit | Assert.cs:135:5:136:5 | {...} | -| Assert.cs:135:5:136:5 | {...} | Assert.cs:131:18:131:32 | Entry | +| Assert.cs:132:74:132:83 | condition1 | Assert.cs:131:18:131:32 | Entry | +| Assert.cs:133:73:133:82 | condition2 | Assert.cs:132:74:132:83 | condition1 | +| Assert.cs:134:17:134:28 | nonCondition | Assert.cs:133:73:133:82 | condition2 | +| Assert.cs:135:5:136:5 | {...} | Assert.cs:134:17:134:28 | nonCondition | | Assert.cs:138:10:138:12 | Normal Exit | Assert.cs:141:9:141:15 | return ...; | -| Assert.cs:139:5:142:5 | {...} | Assert.cs:138:10:138:12 | Entry | +| Assert.cs:138:19:138:20 | b1 | Assert.cs:138:10:138:12 | Entry | +| Assert.cs:138:28:138:29 | b2 | Assert.cs:138:19:138:20 | b1 | +| Assert.cs:138:37:138:38 | b3 | Assert.cs:138:28:138:29 | b2 | +| Assert.cs:139:5:142:5 | {...} | Assert.cs:138:37:138:38 | b3 | | Assert.cs:140:9:140:35 | After call to method AssertTrueFalse | Assert.cs:140:9:140:35 | call to method AssertTrueFalse | | Assert.cs:140:9:140:35 | Before call to method AssertTrueFalse | Assert.cs:140:9:140:36 | ...; | | Assert.cs:140:9:140:35 | call to method AssertTrueFalse | Assert.cs:140:33:140:34 | access to parameter b3 | @@ -8987,17 +9211,22 @@ postDominance | Assignments.cs:14:18:14:35 | (...) => ... | Assignments.cs:14:9:14:13 | After access to event Event | | Assignments.cs:14:18:14:35 | Exit | Assignments.cs:14:18:14:35 | Normal Exit | | Assignments.cs:14:18:14:35 | Normal Exit | Assignments.cs:14:33:14:35 | {...} | -| Assignments.cs:14:33:14:35 | {...} | Assignments.cs:14:18:14:35 | Entry | +| Assignments.cs:14:19:14:24 | sender | Assignments.cs:14:18:14:35 | Entry | +| Assignments.cs:14:27:14:27 | e | Assignments.cs:14:19:14:24 | sender | +| Assignments.cs:14:33:14:35 | {...} | Assignments.cs:14:27:14:27 | e | | Assignments.cs:17:40:17:40 | Exit | Assignments.cs:17:40:17:40 | Normal Exit | | Assignments.cs:17:40:17:40 | Normal Exit | Assignments.cs:19:9:19:17 | return ...; | -| Assignments.cs:18:5:20:5 | {...} | Assignments.cs:17:40:17:40 | Entry | +| Assignments.cs:17:54:17:54 | x | Assignments.cs:17:40:17:40 | Entry | +| Assignments.cs:17:69:17:69 | y | Assignments.cs:17:54:17:54 | x | +| Assignments.cs:18:5:20:5 | {...} | Assignments.cs:17:69:17:69 | y | | Assignments.cs:19:9:19:17 | Before return ...; | Assignments.cs:18:5:20:5 | {...} | | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:19:16:19:16 | access to parameter x | | Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:19:9:19:17 | Before return ...; | | Assignments.cs:27:10:27:23 | Exit | Assignments.cs:27:10:27:23 | Normal Exit | | Assignments.cs:27:10:27:23 | Normal Exit | Assignments.cs:28:5:30:5 | After {...} | +| Assignments.cs:27:33:27:33 | x | Assignments.cs:27:10:27:23 | Entry | | Assignments.cs:28:5:30:5 | After {...} | Assignments.cs:29:9:29:15 | After ...; | -| Assignments.cs:28:5:30:5 | {...} | Assignments.cs:27:10:27:23 | Entry | +| Assignments.cs:28:5:30:5 | {...} | Assignments.cs:27:33:27:33 | x | | Assignments.cs:29:9:29:9 | access to parameter x | Assignments.cs:29:9:29:14 | Before ... = ... | | Assignments.cs:29:9:29:14 | ... = ... | Assignments.cs:29:13:29:14 | 42 | | Assignments.cs:29:9:29:14 | After ... = ... | Assignments.cs:29:9:29:14 | ... = ... | @@ -9007,8 +9236,11 @@ postDominance | Assignments.cs:29:13:29:14 | 42 | Assignments.cs:29:9:29:9 | access to parameter x | | Assignments.cs:32:10:32:22 | Exit | Assignments.cs:32:10:32:22 | Normal Exit | | Assignments.cs:32:10:32:22 | Normal Exit | Assignments.cs:33:5:36:5 | After {...} | +| Assignments.cs:32:32:32:32 | x | Assignments.cs:32:10:32:22 | Entry | +| Assignments.cs:32:42:32:42 | o | Assignments.cs:32:32:32:32 | x | +| Assignments.cs:32:56:32:56 | y | Assignments.cs:32:42:32:42 | o | | Assignments.cs:33:5:36:5 | After {...} | Assignments.cs:35:9:35:20 | After ...; | -| Assignments.cs:33:5:36:5 | {...} | Assignments.cs:32:10:32:22 | Entry | +| Assignments.cs:33:5:36:5 | {...} | Assignments.cs:32:56:32:56 | y | | Assignments.cs:34:9:34:9 | access to parameter x | Assignments.cs:34:9:34:14 | Before ... = ... | | Assignments.cs:34:9:34:14 | ... = ... | Assignments.cs:34:13:34:14 | 42 | | Assignments.cs:34:9:34:14 | After ... = ... | Assignments.cs:34:9:34:14 | ... = ... | @@ -9086,8 +9318,9 @@ postDominance | BreakInTry.cs:1:7:1:16 | {...} | BreakInTry.cs:1:7:1:16 | After call to constructor Object | | BreakInTry.cs:3:10:3:11 | Exit | BreakInTry.cs:3:10:3:11 | Normal Exit | | BreakInTry.cs:3:10:3:11 | Normal Exit | BreakInTry.cs:4:5:18:5 | After {...} | +| BreakInTry.cs:3:22:3:25 | args | BreakInTry.cs:3:10:3:11 | Entry | | BreakInTry.cs:4:5:18:5 | After {...} | BreakInTry.cs:5:9:17:9 | After try {...} ... | -| BreakInTry.cs:4:5:18:5 | {...} | BreakInTry.cs:3:10:3:11 | Entry | +| BreakInTry.cs:4:5:18:5 | {...} | BreakInTry.cs:3:22:3:25 | args | | BreakInTry.cs:5:9:17:9 | After try {...} ... | BreakInTry.cs:14:9:17:9 | After {...} | | BreakInTry.cs:5:9:17:9 | try {...} ... | BreakInTry.cs:4:5:18:5 | {...} | | BreakInTry.cs:6:9:12:9 | After {...} | BreakInTry.cs:7:13:11:13 | After foreach (... ... in ...) ... | @@ -9121,8 +9354,9 @@ postDominance | BreakInTry.cs:16:17:16:17 | ; | BreakInTry.cs:15:17:15:28 | After ... == ... [true] | | BreakInTry.cs:20:10:20:11 | Exit | BreakInTry.cs:20:10:20:11 | Normal Exit | | BreakInTry.cs:20:10:20:11 | Normal Exit | BreakInTry.cs:21:5:36:5 | After {...} | +| BreakInTry.cs:20:22:20:25 | args | BreakInTry.cs:20:10:20:11 | Entry | | BreakInTry.cs:21:5:36:5 | After {...} | BreakInTry.cs:35:7:35:7 | ; | -| BreakInTry.cs:21:5:36:5 | {...} | BreakInTry.cs:20:10:20:11 | Entry | +| BreakInTry.cs:21:5:36:5 | {...} | BreakInTry.cs:20:22:20:25 | args | | BreakInTry.cs:22:9:34:9 | After foreach (... ... in ...) ... | BreakInTry.cs:22:9:34:9 | [LoopHeader] foreach (... ... in ...) ... | | BreakInTry.cs:22:9:34:9 | After foreach (... ... in ...) ... | BreakInTry.cs:22:29:22:32 | After access to parameter args [empty] | | BreakInTry.cs:22:9:34:9 | After foreach (... ... in ...) ... | BreakInTry.cs:30:13:33:13 | After {...} | @@ -9158,8 +9392,9 @@ postDominance | BreakInTry.cs:38:10:38:11 | Exit | BreakInTry.cs:38:10:38:11 | Normal Exit | | BreakInTry.cs:38:10:38:11 | Normal Exit | BreakInTry.cs:39:5:54:5 | After {...} | | BreakInTry.cs:38:10:38:11 | Normal Exit | BreakInTry.cs:46:9:52:9 | After {...} | +| BreakInTry.cs:38:22:38:25 | args | BreakInTry.cs:38:10:38:11 | Entry | | BreakInTry.cs:39:5:54:5 | After {...} | BreakInTry.cs:53:7:53:7 | ; | -| BreakInTry.cs:39:5:54:5 | {...} | BreakInTry.cs:38:10:38:11 | Entry | +| BreakInTry.cs:39:5:54:5 | {...} | BreakInTry.cs:38:22:38:25 | args | | BreakInTry.cs:40:9:52:9 | try {...} ... | BreakInTry.cs:39:5:54:5 | {...} | | BreakInTry.cs:41:9:44:9 | After {...} | BreakInTry.cs:42:13:43:23 | After if (...) ... | | BreakInTry.cs:41:9:44:9 | {...} | BreakInTry.cs:40:9:52:9 | try {...} ... | @@ -9195,8 +9430,9 @@ postDominance | BreakInTry.cs:56:10:56:11 | Exit | BreakInTry.cs:56:10:56:11 | Normal Exit | | BreakInTry.cs:56:10:56:11 | Normal Exit | BreakInTry.cs:57:5:71:5 | After {...} | | BreakInTry.cs:56:10:56:11 | Normal Exit | BreakInTry.cs:64:9:70:9 | After {...} | +| BreakInTry.cs:56:22:56:25 | args | BreakInTry.cs:56:10:56:11 | Entry | | BreakInTry.cs:57:5:71:5 | After {...} | BreakInTry.cs:58:9:70:9 | After try {...} ... | -| BreakInTry.cs:57:5:71:5 | {...} | BreakInTry.cs:56:10:56:11 | Entry | +| BreakInTry.cs:57:5:71:5 | {...} | BreakInTry.cs:56:22:56:25 | args | | BreakInTry.cs:58:9:70:9 | try {...} ... | BreakInTry.cs:57:5:71:5 | {...} | | BreakInTry.cs:59:9:62:9 | After {...} | BreakInTry.cs:60:13:61:23 | After if (...) ... | | BreakInTry.cs:59:9:62:9 | {...} | BreakInTry.cs:58:9:70:9 | try {...} ... | @@ -9258,7 +9494,8 @@ postDominance | CompileTimeOperators.cs:17:16:17:26 | typeof(...) | CompileTimeOperators.cs:17:9:17:27 | Before return ...; | | CompileTimeOperators.cs:20:12:20:17 | Exit | CompileTimeOperators.cs:20:12:20:17 | Normal Exit | | CompileTimeOperators.cs:20:12:20:17 | Normal Exit | CompileTimeOperators.cs:22:9:22:25 | return ...; | -| CompileTimeOperators.cs:21:5:23:5 | {...} | CompileTimeOperators.cs:20:12:20:17 | Entry | +| CompileTimeOperators.cs:20:23:20:23 | i | CompileTimeOperators.cs:20:12:20:17 | Entry | +| CompileTimeOperators.cs:21:5:23:5 | {...} | CompileTimeOperators.cs:20:23:20:23 | i | | CompileTimeOperators.cs:22:9:22:25 | Before return ...; | CompileTimeOperators.cs:21:5:23:5 | {...} | | CompileTimeOperators.cs:22:9:22:25 | return ...; | CompileTimeOperators.cs:22:16:22:24 | nameof(...) | | CompileTimeOperators.cs:22:16:22:24 | nameof(...) | CompileTimeOperators.cs:22:9:22:25 | Before return ...; | @@ -9313,26 +9550,30 @@ postDominance | ConditionalAccess.cs:1:7:1:23 | {...} | ConditionalAccess.cs:1:7:1:23 | After call to constructor Object | | ConditionalAccess.cs:3:12:3:13 | Exit | ConditionalAccess.cs:3:12:3:13 | Normal Exit | | ConditionalAccess.cs:3:12:3:13 | Normal Exit | ConditionalAccess.cs:3:26:3:49 | After call to method ToLower | +| ConditionalAccess.cs:3:20:3:20 | i | ConditionalAccess.cs:3:12:3:13 | Entry | | ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:26:3:38 | Before call to method ToString | | ConditionalAccess.cs:3:26:3:38 | After call to method ToString [null] | ConditionalAccess.cs:3:26:3:26 | After access to parameter i [null] | | ConditionalAccess.cs:3:26:3:38 | Before call to method ToString | ConditionalAccess.cs:3:26:3:49 | Before call to method ToLower | | ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:26 | After access to parameter i [non-null] | | ConditionalAccess.cs:3:26:3:49 | After call to method ToLower | ConditionalAccess.cs:3:26:3:38 | After call to method ToString [null] | | ConditionalAccess.cs:3:26:3:49 | After call to method ToLower | ConditionalAccess.cs:3:26:3:49 | call to method ToLower | -| ConditionalAccess.cs:3:26:3:49 | Before call to method ToLower | ConditionalAccess.cs:3:12:3:13 | Entry | +| ConditionalAccess.cs:3:26:3:49 | Before call to method ToLower | ConditionalAccess.cs:3:20:3:20 | i | | ConditionalAccess.cs:3:26:3:49 | call to method ToLower | ConditionalAccess.cs:3:26:3:38 | After call to method ToString [non-null] | | ConditionalAccess.cs:5:10:5:11 | Exit | ConditionalAccess.cs:5:10:5:11 | Normal Exit | | ConditionalAccess.cs:5:10:5:11 | Normal Exit | ConditionalAccess.cs:5:26:5:34 | After access to property Length | +| ConditionalAccess.cs:5:20:5:20 | s | ConditionalAccess.cs:5:10:5:11 | Entry | | ConditionalAccess.cs:5:26:5:26 | access to parameter s | ConditionalAccess.cs:5:26:5:34 | Before access to property Length | | ConditionalAccess.cs:5:26:5:34 | After access to property Length | ConditionalAccess.cs:5:26:5:26 | After access to parameter s [null] | | ConditionalAccess.cs:5:26:5:34 | After access to property Length | ConditionalAccess.cs:5:26:5:34 | access to property Length | -| ConditionalAccess.cs:5:26:5:34 | Before access to property Length | ConditionalAccess.cs:5:10:5:11 | Entry | +| ConditionalAccess.cs:5:26:5:34 | Before access to property Length | ConditionalAccess.cs:5:20:5:20 | s | | ConditionalAccess.cs:5:26:5:34 | access to property Length | ConditionalAccess.cs:5:26:5:26 | After access to parameter s [non-null] | | ConditionalAccess.cs:7:10:7:11 | Exit | ConditionalAccess.cs:7:10:7:11 | Normal Exit | | ConditionalAccess.cs:7:10:7:11 | Normal Exit | ConditionalAccess.cs:7:38:7:55 | After access to property Length | +| ConditionalAccess.cs:7:20:7:21 | s1 | ConditionalAccess.cs:7:10:7:11 | Entry | +| ConditionalAccess.cs:7:31:7:32 | s2 | ConditionalAccess.cs:7:20:7:21 | s1 | | ConditionalAccess.cs:7:38:7:55 | After access to property Length | ConditionalAccess.cs:7:38:7:55 | access to property Length | | ConditionalAccess.cs:7:38:7:55 | After access to property Length | ConditionalAccess.cs:7:39:7:46 | After ... ?? ... [null] | -| ConditionalAccess.cs:7:38:7:55 | Before access to property Length | ConditionalAccess.cs:7:10:7:11 | Entry | +| ConditionalAccess.cs:7:38:7:55 | Before access to property Length | ConditionalAccess.cs:7:31:7:32 | s2 | | ConditionalAccess.cs:7:38:7:55 | access to property Length | ConditionalAccess.cs:7:39:7:46 | After ... ?? ... [non-null] | | ConditionalAccess.cs:7:39:7:40 | access to parameter s1 | ConditionalAccess.cs:7:39:7:46 | ... ?? ... | | ConditionalAccess.cs:7:39:7:46 | ... ?? ... | ConditionalAccess.cs:7:38:7:55 | Before access to property Length | @@ -9342,18 +9583,20 @@ postDominance | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:39:7:40 | After access to parameter s1 [null] | | ConditionalAccess.cs:9:9:9:10 | Exit | ConditionalAccess.cs:9:9:9:10 | Normal Exit | | ConditionalAccess.cs:9:9:9:10 | Normal Exit | ConditionalAccess.cs:9:25:9:38 | After ... ?? ... | +| ConditionalAccess.cs:9:19:9:19 | s | ConditionalAccess.cs:9:9:9:10 | Entry | | ConditionalAccess.cs:9:25:9:25 | access to parameter s | ConditionalAccess.cs:9:25:9:33 | Before access to property Length | | ConditionalAccess.cs:9:25:9:33 | After access to property Length [null] | ConditionalAccess.cs:9:25:9:25 | After access to parameter s [null] | | ConditionalAccess.cs:9:25:9:33 | Before access to property Length | ConditionalAccess.cs:9:25:9:38 | ... ?? ... | | ConditionalAccess.cs:9:25:9:33 | access to property Length | ConditionalAccess.cs:9:25:9:25 | After access to parameter s [non-null] | -| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:9:9:10 | Entry | +| ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:19:9:19 | s | | ConditionalAccess.cs:9:25:9:38 | After ... ?? ... | ConditionalAccess.cs:9:25:9:33 | After access to property Length [non-null] | | ConditionalAccess.cs:9:25:9:38 | After ... ?? ... | ConditionalAccess.cs:9:38:9:38 | 0 | | ConditionalAccess.cs:9:38:9:38 | 0 | ConditionalAccess.cs:9:25:9:33 | After access to property Length [null] | | ConditionalAccess.cs:11:9:11:10 | Exit | ConditionalAccess.cs:11:9:11:10 | Normal Exit | | ConditionalAccess.cs:11:9:11:10 | Normal Exit | ConditionalAccess.cs:14:13:14:21 | return ...; | | ConditionalAccess.cs:11:9:11:10 | Normal Exit | ConditionalAccess.cs:16:13:16:21 | return ...; | -| ConditionalAccess.cs:12:5:17:5 | {...} | ConditionalAccess.cs:11:9:11:10 | Entry | +| ConditionalAccess.cs:11:19:11:19 | s | ConditionalAccess.cs:11:9:11:10 | Entry | +| ConditionalAccess.cs:12:5:17:5 | {...} | ConditionalAccess.cs:11:19:11:19 | s | | ConditionalAccess.cs:13:9:16:21 | if (...) ... | ConditionalAccess.cs:12:5:17:5 | {...} | | ConditionalAccess.cs:13:13:13:13 | access to parameter s | ConditionalAccess.cs:13:13:13:21 | Before access to property Length | | ConditionalAccess.cs:13:13:13:21 | After access to property Length | ConditionalAccess.cs:13:13:13:13 | After access to parameter s [null] | @@ -9374,16 +9617,19 @@ postDominance | ConditionalAccess.cs:16:20:16:20 | 1 | ConditionalAccess.cs:16:13:16:21 | Before return ...; | | ConditionalAccess.cs:19:12:19:13 | Exit | ConditionalAccess.cs:19:12:19:13 | Normal Exit | | ConditionalAccess.cs:19:12:19:13 | Normal Exit | ConditionalAccess.cs:19:40:19:60 | After call to method CommaJoinWith | +| ConditionalAccess.cs:19:22:19:23 | s1 | ConditionalAccess.cs:19:12:19:13 | Entry | +| ConditionalAccess.cs:19:33:19:34 | s2 | ConditionalAccess.cs:19:22:19:23 | s1 | | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:40:19:60 | Before call to method CommaJoinWith | | ConditionalAccess.cs:19:40:19:60 | After call to method CommaJoinWith | ConditionalAccess.cs:19:40:19:41 | After access to parameter s1 [null] | | ConditionalAccess.cs:19:40:19:60 | After call to method CommaJoinWith | ConditionalAccess.cs:19:40:19:60 | call to method CommaJoinWith | -| ConditionalAccess.cs:19:40:19:60 | Before call to method CommaJoinWith | ConditionalAccess.cs:19:12:19:13 | Entry | +| ConditionalAccess.cs:19:40:19:60 | Before call to method CommaJoinWith | ConditionalAccess.cs:19:33:19:34 | s2 | | ConditionalAccess.cs:19:40:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:40:19:41 | After access to parameter s1 [non-null] | | ConditionalAccess.cs:21:10:21:11 | Exit | ConditionalAccess.cs:21:10:21:11 | Normal Exit | | ConditionalAccess.cs:21:10:21:11 | Normal Exit | ConditionalAccess.cs:22:5:26:5 | After {...} | +| ConditionalAccess.cs:21:17:21:17 | i | ConditionalAccess.cs:21:10:21:11 | Entry | | ConditionalAccess.cs:22:5:26:5 | After {...} | ConditionalAccess.cs:25:9:25:33 | After ...; | -| ConditionalAccess.cs:22:5:26:5 | {...} | ConditionalAccess.cs:21:10:21:11 | Entry | +| ConditionalAccess.cs:22:5:26:5 | {...} | ConditionalAccess.cs:21:17:21:17 | i | | ConditionalAccess.cs:23:9:23:39 | ... ...; | ConditionalAccess.cs:22:5:26:5 | {...} | | ConditionalAccess.cs:23:9:23:39 | After ... ...; | ConditionalAccess.cs:23:13:23:38 | After Nullable j = ... | | ConditionalAccess.cs:23:13:23:13 | access to local variable j | ConditionalAccess.cs:23:13:23:38 | Before Nullable j = ... | @@ -9424,15 +9670,18 @@ postDominance | ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:13:25:14 | After "" [non-null] | | ConditionalAccess.cs:30:10:30:12 | Exit | ConditionalAccess.cs:30:10:30:12 | Normal Exit | | ConditionalAccess.cs:30:10:30:12 | Normal Exit | ConditionalAccess.cs:30:28:30:32 | After ... = ... | +| ConditionalAccess.cs:30:22:30:22 | i | ConditionalAccess.cs:30:10:30:12 | Entry | | ConditionalAccess.cs:30:28:30:28 | access to parameter i | ConditionalAccess.cs:30:28:30:32 | Before ... = ... | | ConditionalAccess.cs:30:28:30:32 | ... = ... | ConditionalAccess.cs:30:32:30:32 | 0 | | ConditionalAccess.cs:30:28:30:32 | After ... = ... | ConditionalAccess.cs:30:28:30:32 | ... = ... | -| ConditionalAccess.cs:30:28:30:32 | Before ... = ... | ConditionalAccess.cs:30:10:30:12 | Entry | +| ConditionalAccess.cs:30:28:30:32 | Before ... = ... | ConditionalAccess.cs:30:22:30:22 | i | | ConditionalAccess.cs:30:32:30:32 | 0 | ConditionalAccess.cs:30:28:30:28 | access to parameter i | | ConditionalAccess.cs:32:10:32:11 | Exit | ConditionalAccess.cs:32:10:32:11 | Normal Exit | | ConditionalAccess.cs:32:10:32:11 | Normal Exit | ConditionalAccess.cs:33:5:36:5 | After {...} | +| ConditionalAccess.cs:32:18:32:18 | b | ConditionalAccess.cs:32:10:32:11 | Entry | +| ConditionalAccess.cs:32:29:32:29 | i | ConditionalAccess.cs:32:18:32:18 | b | | ConditionalAccess.cs:33:5:36:5 | After {...} | ConditionalAccess.cs:35:9:35:25 | After ...; | -| ConditionalAccess.cs:33:5:36:5 | {...} | ConditionalAccess.cs:32:10:32:11 | Entry | +| ConditionalAccess.cs:33:5:36:5 | {...} | ConditionalAccess.cs:32:29:32:29 | i | | ConditionalAccess.cs:34:9:34:9 | access to parameter i | ConditionalAccess.cs:34:9:34:13 | Before ... = ... | | ConditionalAccess.cs:34:9:34:13 | ... = ... | ConditionalAccess.cs:34:13:34:13 | 0 | | ConditionalAccess.cs:34:9:34:13 | After ... = ... | ConditionalAccess.cs:34:9:34:13 | ... = ... | @@ -9450,19 +9699,23 @@ postDominance | ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:34:9:34:14 | After ...; | | ConditionalAccess.cs:35:9:35:25 | After ...; | ConditionalAccess.cs:35:9:35:24 | After call to method Out | | ConditionalAccess.cs:35:23:35:23 | access to parameter i | ConditionalAccess.cs:35:9:35:12 | After access to property Prop [non-null] | +| ConditionalAccess.cs:40:21:40:25 | index | ConditionalAccess.cs:42:9:42:11 | Entry | +| ConditionalAccess.cs:40:21:40:25 | index | ConditionalAccess.cs:43:9:43:11 | Entry | | ConditionalAccess.cs:42:9:42:11 | Exit | ConditionalAccess.cs:42:9:42:11 | Normal Exit | | ConditionalAccess.cs:42:9:42:11 | Normal Exit | ConditionalAccess.cs:42:15:42:26 | return ...; | -| ConditionalAccess.cs:42:13:42:28 | {...} | ConditionalAccess.cs:42:9:42:11 | Entry | +| ConditionalAccess.cs:42:13:42:28 | {...} | ConditionalAccess.cs:40:21:40:25 | index | | ConditionalAccess.cs:42:15:42:26 | Before return ...; | ConditionalAccess.cs:42:13:42:28 | {...} | | ConditionalAccess.cs:42:15:42:26 | return ...; | ConditionalAccess.cs:42:22:42:25 | null | | ConditionalAccess.cs:42:22:42:25 | null | ConditionalAccess.cs:42:15:42:26 | Before return ...; | | ConditionalAccess.cs:43:9:43:11 | Exit | ConditionalAccess.cs:43:9:43:11 | Normal Exit | | ConditionalAccess.cs:43:9:43:11 | Normal Exit | ConditionalAccess.cs:43:13:43:15 | {...} | -| ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:9:43:11 | Entry | +| ConditionalAccess.cs:43:9:43:11 | value | ConditionalAccess.cs:40:21:40:25 | index | +| ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:9:43:11 | value | | ConditionalAccess.cs:46:10:46:11 | Exit | ConditionalAccess.cs:46:10:46:11 | Normal Exit | | ConditionalAccess.cs:46:10:46:11 | Normal Exit | ConditionalAccess.cs:47:5:55:5 | After {...} | +| ConditionalAccess.cs:46:31:46:32 | ca | ConditionalAccess.cs:46:10:46:11 | Entry | | ConditionalAccess.cs:47:5:55:5 | After {...} | ConditionalAccess.cs:54:9:54:30 | After ...; | -| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:46:10:46:11 | Entry | +| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:46:31:46:32 | ca | | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:48:9:48:20 | Before access to field IntField | | ConditionalAccess.cs:48:9:48:20 | After access to field IntField | ConditionalAccess.cs:48:9:48:20 | access to field IntField | | ConditionalAccess.cs:48:9:48:20 | Before access to field IntField | ConditionalAccess.cs:48:12:48:25 | Before ... = ... | @@ -9549,13 +9802,15 @@ postDominance | ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:9:54:22 | After access to property StringProp | | ConditionalAccess.cs:60:26:60:38 | Exit | ConditionalAccess.cs:60:26:60:38 | Normal Exit | | ConditionalAccess.cs:60:26:60:38 | Normal Exit | ConditionalAccess.cs:60:70:60:83 | After ... + ... | +| ConditionalAccess.cs:60:52:60:53 | s1 | ConditionalAccess.cs:60:26:60:38 | Entry | +| ConditionalAccess.cs:60:63:60:64 | s2 | ConditionalAccess.cs:60:52:60:53 | s1 | | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:70:60:78 | Before ... + ... | | ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:75:60:78 | ", " | | ConditionalAccess.cs:60:70:60:78 | After ... + ... | ConditionalAccess.cs:60:70:60:78 | ... + ... | | ConditionalAccess.cs:60:70:60:78 | Before ... + ... | ConditionalAccess.cs:60:70:60:83 | Before ... + ... | | ConditionalAccess.cs:60:70:60:83 | ... + ... | ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | | ConditionalAccess.cs:60:70:60:83 | After ... + ... | ConditionalAccess.cs:60:70:60:83 | ... + ... | -| ConditionalAccess.cs:60:70:60:83 | Before ... + ... | ConditionalAccess.cs:60:26:60:38 | Entry | +| ConditionalAccess.cs:60:70:60:83 | Before ... + ... | ConditionalAccess.cs:60:63:60:64 | s2 | | ConditionalAccess.cs:60:75:60:78 | ", " | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | | ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | ConditionalAccess.cs:60:70:60:78 | After ... + ... | | Conditions.cs:1:7:1:16 | After call to constructor Object | Conditions.cs:1:7:1:16 | call to constructor Object | @@ -9570,8 +9825,10 @@ postDominance | Conditions.cs:1:7:1:16 | {...} | Conditions.cs:1:7:1:16 | After call to constructor Object | | Conditions.cs:3:10:3:19 | Exit | Conditions.cs:3:10:3:19 | Normal Exit | | Conditions.cs:3:10:3:19 | Normal Exit | Conditions.cs:4:5:9:5 | After {...} | +| Conditions.cs:3:26:3:28 | inc | Conditions.cs:3:10:3:19 | Entry | +| Conditions.cs:3:39:3:39 | x | Conditions.cs:3:26:3:28 | inc | | Conditions.cs:4:5:9:5 | After {...} | Conditions.cs:7:9:8:16 | After if (...) ... | -| Conditions.cs:4:5:9:5 | {...} | Conditions.cs:3:10:3:19 | Entry | +| Conditions.cs:4:5:9:5 | {...} | Conditions.cs:3:39:3:39 | x | | Conditions.cs:5:9:6:16 | After if (...) ... | Conditions.cs:5:13:5:15 | After access to parameter inc [false] | | Conditions.cs:5:9:6:16 | After if (...) ... | Conditions.cs:6:13:6:16 | After ...; | | Conditions.cs:5:9:6:16 | if (...) ... | Conditions.cs:4:5:9:5 | {...} | @@ -9597,7 +9854,8 @@ postDominance | Conditions.cs:8:13:8:16 | After ...; | Conditions.cs:8:13:8:15 | After ...-- | | Conditions.cs:11:9:11:10 | Exit | Conditions.cs:11:9:11:10 | Normal Exit | | Conditions.cs:11:9:11:10 | Normal Exit | Conditions.cs:19:9:19:17 | return ...; | -| Conditions.cs:12:5:20:5 | {...} | Conditions.cs:11:9:11:10 | Entry | +| Conditions.cs:11:17:11:17 | b | Conditions.cs:11:9:11:10 | Entry | +| Conditions.cs:12:5:20:5 | {...} | Conditions.cs:11:17:11:17 | b | | Conditions.cs:13:9:13:18 | ... ...; | Conditions.cs:12:5:20:5 | {...} | | Conditions.cs:13:9:13:18 | After ... ...; | Conditions.cs:13:13:13:17 | After Int32 x = ... | | Conditions.cs:13:13:13:13 | access to local variable x | Conditions.cs:13:13:13:17 | Before Int32 x = ... | @@ -9640,7 +9898,9 @@ postDominance | Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:19:9:19:17 | Before return ...; | | Conditions.cs:22:9:22:10 | Exit | Conditions.cs:22:9:22:10 | Normal Exit | | Conditions.cs:22:9:22:10 | Normal Exit | Conditions.cs:30:9:30:17 | return ...; | -| Conditions.cs:23:5:31:5 | {...} | Conditions.cs:22:9:22:10 | Entry | +| Conditions.cs:22:17:22:18 | b1 | Conditions.cs:22:9:22:10 | Entry | +| Conditions.cs:22:26:22:27 | b2 | Conditions.cs:22:17:22:18 | b1 | +| Conditions.cs:23:5:31:5 | {...} | Conditions.cs:22:26:22:27 | b2 | | Conditions.cs:24:9:24:18 | ... ...; | Conditions.cs:23:5:31:5 | {...} | | Conditions.cs:24:9:24:18 | After ... ...; | Conditions.cs:24:13:24:17 | After Int32 x = ... | | Conditions.cs:24:13:24:13 | access to local variable x | Conditions.cs:24:13:24:17 | Before Int32 x = ... | @@ -9677,7 +9937,8 @@ postDominance | Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:30:9:30:17 | Before return ...; | | Conditions.cs:33:9:33:10 | Exit | Conditions.cs:33:9:33:10 | Normal Exit | | Conditions.cs:33:9:33:10 | Normal Exit | Conditions.cs:43:9:43:17 | return ...; | -| Conditions.cs:34:5:44:5 | {...} | Conditions.cs:33:9:33:10 | Entry | +| Conditions.cs:33:17:33:18 | b1 | Conditions.cs:33:9:33:10 | Entry | +| Conditions.cs:34:5:44:5 | {...} | Conditions.cs:33:17:33:18 | b1 | | Conditions.cs:35:9:35:18 | ... ...; | Conditions.cs:34:5:44:5 | {...} | | Conditions.cs:35:9:35:18 | After ... ...; | Conditions.cs:35:13:35:17 | After Int32 x = ... | | Conditions.cs:35:13:35:13 | access to local variable x | Conditions.cs:35:13:35:17 | Before Int32 x = ... | @@ -9728,7 +9989,9 @@ postDominance | Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:43:9:43:17 | Before return ...; | | Conditions.cs:46:9:46:10 | Exit | Conditions.cs:46:9:46:10 | Normal Exit | | Conditions.cs:46:9:46:10 | Normal Exit | Conditions.cs:54:9:54:17 | return ...; | -| Conditions.cs:47:5:55:5 | {...} | Conditions.cs:46:9:46:10 | Entry | +| Conditions.cs:46:17:46:17 | b | Conditions.cs:46:9:46:10 | Entry | +| Conditions.cs:46:24:46:24 | x | Conditions.cs:46:17:46:17 | b | +| Conditions.cs:47:5:55:5 | {...} | Conditions.cs:46:24:46:24 | x | | Conditions.cs:48:9:48:18 | ... ...; | Conditions.cs:47:5:55:5 | {...} | | Conditions.cs:48:9:48:18 | After ... ...; | Conditions.cs:48:13:48:17 | After Int32 y = ... | | Conditions.cs:48:13:48:13 | access to local variable y | Conditions.cs:48:13:48:17 | Before Int32 y = ... | @@ -9765,7 +10028,9 @@ postDominance | Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:54:9:54:17 | Before return ...; | | Conditions.cs:57:9:57:10 | Exit | Conditions.cs:57:9:57:10 | Normal Exit | | Conditions.cs:57:9:57:10 | Normal Exit | Conditions.cs:67:9:67:17 | return ...; | -| Conditions.cs:58:5:68:5 | {...} | Conditions.cs:57:9:57:10 | Entry | +| Conditions.cs:57:17:57:17 | b | Conditions.cs:57:9:57:10 | Entry | +| Conditions.cs:57:24:57:24 | x | Conditions.cs:57:17:57:17 | b | +| Conditions.cs:58:5:68:5 | {...} | Conditions.cs:57:24:57:24 | x | | Conditions.cs:59:9:59:18 | ... ...; | Conditions.cs:58:5:68:5 | {...} | | Conditions.cs:59:9:59:18 | After ... ...; | Conditions.cs:59:13:59:17 | After Int32 y = ... | | Conditions.cs:59:13:59:13 | access to local variable y | Conditions.cs:59:13:59:17 | Before Int32 y = ... | @@ -9812,7 +10077,8 @@ postDominance | Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:67:9:67:17 | Before return ...; | | Conditions.cs:70:9:70:10 | Exit | Conditions.cs:70:9:70:10 | Normal Exit | | Conditions.cs:70:9:70:10 | Normal Exit | Conditions.cs:83:9:83:17 | return ...; | -| Conditions.cs:71:5:84:5 | {...} | Conditions.cs:70:9:70:10 | Entry | +| Conditions.cs:70:21:70:22 | ss | Conditions.cs:70:9:70:10 | Entry | +| Conditions.cs:71:5:84:5 | {...} | Conditions.cs:70:21:70:22 | ss | | Conditions.cs:72:9:72:30 | ... ...; | Conditions.cs:71:5:84:5 | {...} | | Conditions.cs:72:9:72:30 | After ... ...; | Conditions.cs:72:13:72:29 | After Boolean b = ... | | Conditions.cs:72:13:72:13 | access to local variable b | Conditions.cs:72:13:72:29 | Before Boolean b = ... | @@ -9881,7 +10147,8 @@ postDominance | Conditions.cs:83:16:83:16 | access to local variable x | Conditions.cs:83:9:83:17 | Before return ...; | | Conditions.cs:86:9:86:10 | Exit | Conditions.cs:86:9:86:10 | Normal Exit | | Conditions.cs:86:9:86:10 | Normal Exit | Conditions.cs:99:9:99:17 | return ...; | -| Conditions.cs:87:5:100:5 | {...} | Conditions.cs:86:9:86:10 | Entry | +| Conditions.cs:86:21:86:22 | ss | Conditions.cs:86:9:86:10 | Entry | +| Conditions.cs:87:5:100:5 | {...} | Conditions.cs:86:21:86:22 | ss | | Conditions.cs:88:9:88:30 | ... ...; | Conditions.cs:87:5:100:5 | {...} | | Conditions.cs:88:9:88:30 | After ... ...; | Conditions.cs:88:13:88:29 | After Boolean b = ... | | Conditions.cs:88:13:88:13 | access to local variable b | Conditions.cs:88:13:88:29 | Before Boolean b = ... | @@ -9950,7 +10217,8 @@ postDominance | Conditions.cs:99:16:99:16 | access to local variable x | Conditions.cs:99:9:99:17 | Before return ...; | | Conditions.cs:102:12:102:13 | Exit | Conditions.cs:102:12:102:13 | Normal Exit | | Conditions.cs:102:12:102:13 | Normal Exit | Conditions.cs:110:9:110:17 | return ...; | -| Conditions.cs:103:5:111:5 | {...} | Conditions.cs:102:12:102:13 | Entry | +| Conditions.cs:102:20:102:20 | b | Conditions.cs:102:12:102:13 | Entry | +| Conditions.cs:103:5:111:5 | {...} | Conditions.cs:102:20:102:20 | b | | Conditions.cs:104:9:104:29 | ... ...; | Conditions.cs:103:5:111:5 | {...} | | Conditions.cs:104:9:104:29 | After ... ...; | Conditions.cs:104:13:104:28 | After String x = ... | | Conditions.cs:104:13:104:13 | access to local variable x | Conditions.cs:104:13:104:28 | Before String x = ... | @@ -10001,8 +10269,9 @@ postDominance | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:9:110:17 | Before return ...; | | Conditions.cs:113:10:113:11 | Exit | Conditions.cs:113:10:113:11 | Normal Exit | | Conditions.cs:113:10:113:11 | Normal Exit | Conditions.cs:114:5:124:5 | After {...} | +| Conditions.cs:113:22:113:25 | args | Conditions.cs:113:10:113:11 | Entry | | Conditions.cs:114:5:124:5 | After {...} | Conditions.cs:116:9:123:9 | After for (...;...;...) ... | -| Conditions.cs:114:5:124:5 | {...} | Conditions.cs:113:10:113:11 | Entry | +| Conditions.cs:114:5:124:5 | {...} | Conditions.cs:113:22:113:25 | args | | Conditions.cs:115:9:115:24 | ... ...; | Conditions.cs:114:5:124:5 | {...} | | Conditions.cs:115:9:115:24 | After ... ...; | Conditions.cs:115:16:115:23 | After String s = ... | | Conditions.cs:115:16:115:16 | access to local variable s | Conditions.cs:115:16:115:23 | Before String s = ... | @@ -10105,8 +10374,9 @@ postDominance | Conditions.cs:137:21:137:38 | After ...; | Conditions.cs:137:21:137:37 | After call to method ToString | | Conditions.cs:143:10:143:12 | Exit | Conditions.cs:143:10:143:12 | Normal Exit | | Conditions.cs:143:10:143:12 | Normal Exit | Conditions.cs:144:5:150:5 | After {...} | +| Conditions.cs:143:19:143:19 | b | Conditions.cs:143:10:143:12 | Entry | | Conditions.cs:144:5:150:5 | After {...} | Conditions.cs:146:9:149:49 | After if (...) ... | -| Conditions.cs:144:5:150:5 | {...} | Conditions.cs:143:10:143:12 | Entry | +| Conditions.cs:144:5:150:5 | {...} | Conditions.cs:143:19:143:19 | b | | Conditions.cs:145:9:145:30 | ... ...; | Conditions.cs:144:5:150:5 | {...} | | Conditions.cs:145:9:145:30 | After ... ...; | Conditions.cs:145:13:145:29 | After String s = ... | | Conditions.cs:145:13:145:13 | access to local variable s | Conditions.cs:145:13:145:29 | Before String s = ... | @@ -10161,7 +10431,14 @@ postDominance | DefaultParam.cs:1:7:1:18 | {...} | DefaultParam.cs:1:7:1:18 | After call to constructor Object | | DefaultParam.cs:3:12:3:13 | Exit | DefaultParam.cs:3:12:3:13 | Normal Exit | | DefaultParam.cs:3:12:3:13 | Normal Exit | DefaultParam.cs:5:9:5:25 | return ...; | -| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:3:12:3:13 | Entry | +| DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:3:12:3:13 | Entry | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:20:3:20 | b | +| DefaultParam.cs:3:34:3:35 | "" | DefaultParam.cs:3:30:3:30 | After s [no-match] | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:30:3:30 | After s [match] | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:34:3:35 | "" | +| DefaultParam.cs:3:46:3:46 | 0 | DefaultParam.cs:3:42:3:42 | After i [no-match] | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:3:42:3:42 | After i [match] | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:3:46:3:46 | 0 | | DefaultParam.cs:5:9:5:25 | Before return ...; | DefaultParam.cs:4:5:6:5 | {...} | | DefaultParam.cs:5:9:5:25 | return ...; | DefaultParam.cs:5:16:5:24 | After ... + ... | | DefaultParam.cs:5:16:5:16 | (...) ... | DefaultParam.cs:5:16:5:16 | access to parameter b | @@ -10265,8 +10542,9 @@ postDominance | ExitMethods.cs:62:9:62:23 | ...; | ExitMethods.cs:61:5:64:5 | {...} | | ExitMethods.cs:66:17:66:26 | Exceptional Exit | ExitMethods.cs:69:13:69:34 | throw ...; | | ExitMethods.cs:66:17:66:26 | Normal Exit | ExitMethods.cs:67:5:70:5 | After {...} | +| ExitMethods.cs:66:33:66:33 | b | ExitMethods.cs:66:17:66:26 | Entry | | ExitMethods.cs:67:5:70:5 | After {...} | ExitMethods.cs:68:9:69:34 | After if (...) ... | -| ExitMethods.cs:67:5:70:5 | {...} | ExitMethods.cs:66:17:66:26 | Entry | +| ExitMethods.cs:67:5:70:5 | {...} | ExitMethods.cs:66:33:66:33 | b | | ExitMethods.cs:68:9:69:34 | After if (...) ... | ExitMethods.cs:68:13:68:13 | After access to parameter b [false] | | ExitMethods.cs:68:9:69:34 | if (...) ... | ExitMethods.cs:67:5:70:5 | {...} | | ExitMethods.cs:68:13:68:13 | After access to parameter b [false] | ExitMethods.cs:68:13:68:13 | access to parameter b | @@ -10277,7 +10555,8 @@ postDominance | ExitMethods.cs:69:19:69:33 | Before object creation of type Exception | ExitMethods.cs:69:13:69:34 | Before throw ...; | | ExitMethods.cs:69:19:69:33 | object creation of type Exception | ExitMethods.cs:69:19:69:33 | Before object creation of type Exception | | ExitMethods.cs:72:17:72:27 | Exit | ExitMethods.cs:72:17:72:27 | Exceptional Exit | -| ExitMethods.cs:73:5:78:5 | {...} | ExitMethods.cs:72:17:72:27 | Entry | +| ExitMethods.cs:72:34:72:34 | b | ExitMethods.cs:72:17:72:27 | Entry | +| ExitMethods.cs:73:5:78:5 | {...} | ExitMethods.cs:72:34:72:34 | b | | ExitMethods.cs:74:9:77:45 | if (...) ... | ExitMethods.cs:73:5:78:5 | {...} | | ExitMethods.cs:74:13:74:13 | access to parameter b | ExitMethods.cs:74:9:77:45 | if (...) ... | | ExitMethods.cs:75:13:75:34 | Before throw ...; | ExitMethods.cs:74:13:74:13 | After access to parameter b [true] | @@ -10339,7 +10618,8 @@ postDominance | ExitMethods.cs:107:9:107:48 | ...; | ExitMethods.cs:106:5:108:5 | {...} | | ExitMethods.cs:110:13:110:21 | Exceptional Exit | ExitMethods.cs:112:41:112:76 | throw ... | | ExitMethods.cs:110:13:110:21 | Normal Exit | ExitMethods.cs:112:9:112:77 | return ...; | -| ExitMethods.cs:111:5:113:5 | {...} | ExitMethods.cs:110:13:110:21 | Entry | +| ExitMethods.cs:110:31:110:35 | input | ExitMethods.cs:110:13:110:21 | Entry | +| ExitMethods.cs:111:5:113:5 | {...} | ExitMethods.cs:110:31:110:35 | input | | ExitMethods.cs:112:9:112:77 | Before return ...; | ExitMethods.cs:111:5:113:5 | {...} | | ExitMethods.cs:112:9:112:77 | return ...; | ExitMethods.cs:112:16:112:76 | After ... ? ... : ... | | ExitMethods.cs:112:16:112:20 | access to parameter input | ExitMethods.cs:112:16:112:25 | Before ... != ... | @@ -10368,7 +10648,8 @@ postDominance | ExitMethods.cs:112:69:112:75 | "input" | ExitMethods.cs:112:47:112:76 | Before object creation of type ArgumentException | | ExitMethods.cs:115:16:115:34 | Exit | ExitMethods.cs:115:16:115:34 | Normal Exit | | ExitMethods.cs:115:16:115:34 | Normal Exit | ExitMethods.cs:117:9:117:39 | return ...; | -| ExitMethods.cs:116:5:118:5 | {...} | ExitMethods.cs:115:16:115:34 | Entry | +| ExitMethods.cs:115:43:115:43 | s | ExitMethods.cs:115:16:115:34 | Entry | +| ExitMethods.cs:116:5:118:5 | {...} | ExitMethods.cs:115:43:115:43 | s | | ExitMethods.cs:117:9:117:39 | Before return ...; | ExitMethods.cs:116:5:118:5 | {...} | | ExitMethods.cs:117:9:117:39 | return ...; | ExitMethods.cs:117:16:117:38 | After ... ? ... : ... | | ExitMethods.cs:117:16:117:16 | access to parameter s | ExitMethods.cs:117:16:117:30 | Before call to method Contains | @@ -10395,8 +10676,9 @@ postDominance | ExitMethods.cs:128:9:128:26 | this access | ExitMethods.cs:128:9:128:26 | Before call to method FailingAssertion | | ExitMethods.cs:128:9:128:27 | ...; | ExitMethods.cs:127:5:130:5 | {...} | | ExitMethods.cs:132:10:132:20 | Normal Exit | ExitMethods.cs:132:33:132:49 | After call to method IsFalse | +| ExitMethods.cs:132:27:132:27 | b | ExitMethods.cs:132:10:132:20 | Entry | | ExitMethods.cs:132:33:132:49 | After call to method IsFalse | ExitMethods.cs:132:33:132:49 | call to method IsFalse | -| ExitMethods.cs:132:33:132:49 | Before call to method IsFalse | ExitMethods.cs:132:10:132:20 | Entry | +| ExitMethods.cs:132:33:132:49 | Before call to method IsFalse | ExitMethods.cs:132:27:132:27 | b | | ExitMethods.cs:132:33:132:49 | call to method IsFalse | ExitMethods.cs:132:48:132:48 | access to parameter b | | ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:33:132:49 | Before call to method IsFalse | | ExitMethods.cs:134:17:134:33 | Exceptional Exit | ExitMethods.cs:136:9:136:25 | call to method AssertFalse | @@ -10408,7 +10690,9 @@ postDominance | ExitMethods.cs:136:9:136:26 | ...; | ExitMethods.cs:135:5:138:5 | {...} | | ExitMethods.cs:136:21:136:24 | true | ExitMethods.cs:136:9:136:25 | this access | | ExitMethods.cs:140:17:140:42 | Exit | ExitMethods.cs:140:17:140:42 | Exceptional Exit | -| ExitMethods.cs:141:5:147:5 | {...} | ExitMethods.cs:140:17:140:42 | Entry | +| ExitMethods.cs:140:49:140:49 | b | ExitMethods.cs:140:17:140:42 | Entry | +| ExitMethods.cs:140:70:140:70 | e | ExitMethods.cs:140:49:140:49 | b | +| ExitMethods.cs:141:5:147:5 | {...} | ExitMethods.cs:140:70:140:70 | e | | ExitMethods.cs:142:9:145:53 | if (...) ... | ExitMethods.cs:141:5:147:5 | {...} | | ExitMethods.cs:142:13:142:13 | access to parameter b | ExitMethods.cs:142:9:145:53 | if (...) ... | | ExitMethods.cs:143:13:143:42 | Before call to method Throw | ExitMethods.cs:143:13:143:43 | ...; | @@ -10424,7 +10708,8 @@ postDominance | ExitMethods.cs:145:43:145:43 | access to parameter e | ExitMethods.cs:145:13:145:44 | Before call to method Capture | | Extensions.cs:5:23:5:29 | Exit | Extensions.cs:5:23:5:29 | Normal Exit | | Extensions.cs:5:23:5:29 | Normal Exit | Extensions.cs:7:9:7:30 | return ...; | -| Extensions.cs:6:5:8:5 | {...} | Extensions.cs:5:23:5:29 | Entry | +| Extensions.cs:5:43:5:43 | s | Extensions.cs:5:23:5:29 | Entry | +| Extensions.cs:6:5:8:5 | {...} | Extensions.cs:5:43:5:43 | s | | Extensions.cs:7:9:7:30 | Before return ...; | Extensions.cs:6:5:8:5 | {...} | | Extensions.cs:7:9:7:30 | return ...; | Extensions.cs:7:16:7:29 | After call to method Parse | | Extensions.cs:7:16:7:29 | After call to method Parse | Extensions.cs:7:16:7:29 | call to method Parse | @@ -10433,7 +10718,9 @@ postDominance | Extensions.cs:7:28:7:28 | access to parameter s | Extensions.cs:7:16:7:29 | Before call to method Parse | | Extensions.cs:10:24:10:29 | Exit | Extensions.cs:10:24:10:29 | Normal Exit | | Extensions.cs:10:24:10:29 | Normal Exit | Extensions.cs:12:9:12:20 | return ...; | -| Extensions.cs:11:5:13:5 | {...} | Extensions.cs:10:24:10:29 | Entry | +| Extensions.cs:10:43:10:43 | s | Extensions.cs:10:24:10:29 | Entry | +| Extensions.cs:10:65:10:65 | f | Extensions.cs:10:43:10:43 | s | +| Extensions.cs:11:5:13:5 | {...} | Extensions.cs:10:65:10:65 | f | | Extensions.cs:12:9:12:20 | Before return ...; | Extensions.cs:11:5:13:5 | {...} | | Extensions.cs:12:9:12:20 | return ...; | Extensions.cs:12:16:12:19 | After delegate call | | Extensions.cs:12:16:12:16 | access to parameter f | Extensions.cs:12:16:12:19 | Before delegate call | @@ -10449,8 +10736,9 @@ postDominance | Extensions.cs:15:48:15:50 | "0" | Extensions.cs:15:40:15:51 | Before call to method ToInt32 | | Extensions.cs:20:17:20:20 | Exit | Extensions.cs:20:17:20:20 | Normal Exit | | Extensions.cs:20:17:20:20 | Normal Exit | Extensions.cs:21:5:26:5 | After {...} | +| Extensions.cs:20:29:20:29 | s | Extensions.cs:20:17:20:20 | Entry | | Extensions.cs:21:5:26:5 | After {...} | Extensions.cs:25:9:25:34 | After ...; | -| Extensions.cs:21:5:26:5 | {...} | Extensions.cs:20:17:20:20 | Entry | +| Extensions.cs:21:5:26:5 | {...} | Extensions.cs:20:29:20:29 | s | | Extensions.cs:22:9:22:9 | access to parameter s | Extensions.cs:22:9:22:19 | Before call to method ToInt32 | | Extensions.cs:22:9:22:19 | After call to method ToInt32 | Extensions.cs:22:9:22:19 | call to method ToInt32 | | Extensions.cs:22:9:22:19 | Before call to method ToInt32 | Extensions.cs:22:9:22:20 | ...; | @@ -10813,8 +11101,9 @@ postDominance | Finally.cs:141:19:141:43 | object creation of type ArgumentException | Finally.cs:141:41:141:42 | "" | | Finally.cs:141:41:141:42 | "" | Finally.cs:141:19:141:43 | Before object creation of type ArgumentException | | Finally.cs:147:10:147:11 | Normal Exit | Finally.cs:148:5:170:5 | After {...} | +| Finally.cs:147:22:147:25 | args | Finally.cs:147:10:147:11 | Entry | | Finally.cs:148:5:170:5 | After {...} | Finally.cs:149:9:169:9 | After try {...} ... | -| Finally.cs:148:5:170:5 | {...} | Finally.cs:147:10:147:11 | Entry | +| Finally.cs:148:5:170:5 | {...} | Finally.cs:147:22:147:25 | args | | Finally.cs:149:9:169:9 | After try {...} ... | Finally.cs:155:9:169:9 | After {...} | | Finally.cs:149:9:169:9 | try {...} ... | Finally.cs:148:5:170:5 | {...} | | Finally.cs:150:9:153:9 | After {...} | Finally.cs:151:13:152:50 | After if (...) ... | @@ -10916,8 +11205,10 @@ postDominance | Finally.cs:174:11:174:20 | this access | Finally.cs:174:11:174:20 | Before call to method | | Finally.cs:174:11:174:20 | {...} | Finally.cs:174:11:174:20 | After call to constructor Exception | | Finally.cs:176:10:176:11 | Normal Exit | Finally.cs:177:5:193:5 | After {...} | +| Finally.cs:176:18:176:19 | b1 | Finally.cs:176:10:176:11 | Entry | +| Finally.cs:176:27:176:28 | b2 | Finally.cs:176:18:176:19 | b1 | | Finally.cs:177:5:193:5 | After {...} | Finally.cs:178:9:192:9 | After try {...} ... | -| Finally.cs:177:5:193:5 | {...} | Finally.cs:176:10:176:11 | Entry | +| Finally.cs:177:5:193:5 | {...} | Finally.cs:176:27:176:28 | b2 | | Finally.cs:178:9:192:9 | After try {...} ... | Finally.cs:183:9:192:9 | After {...} | | Finally.cs:178:9:192:9 | try {...} ... | Finally.cs:177:5:193:5 | {...} | | Finally.cs:179:9:181:9 | After {...} | Finally.cs:180:13:180:43 | After if (...) ... | @@ -10962,8 +11253,11 @@ postDominance | Finally.cs:190:31:190:46 | Before object creation of type ExceptionC | Finally.cs:190:25:190:47 | Before throw ...; | | Finally.cs:190:31:190:46 | object creation of type ExceptionC | Finally.cs:190:31:190:46 | Before object creation of type ExceptionC | | Finally.cs:195:10:195:12 | Normal Exit | Finally.cs:196:5:214:5 | After {...} | +| Finally.cs:195:19:195:20 | b1 | Finally.cs:195:10:195:12 | Entry | +| Finally.cs:195:28:195:29 | b2 | Finally.cs:195:19:195:20 | b1 | +| Finally.cs:195:37:195:38 | b3 | Finally.cs:195:28:195:29 | b2 | | Finally.cs:196:5:214:5 | After {...} | Finally.cs:213:9:213:25 | After ...; | -| Finally.cs:196:5:214:5 | {...} | Finally.cs:195:10:195:12 | Entry | +| Finally.cs:196:5:214:5 | {...} | Finally.cs:195:37:195:38 | b3 | | Finally.cs:197:9:212:9 | After try {...} ... | Finally.cs:202:9:212:9 | After {...} | | Finally.cs:197:9:212:9 | try {...} ... | Finally.cs:196:5:214:5 | {...} | | Finally.cs:198:9:200:9 | After {...} | Finally.cs:199:13:199:43 | After if (...) ... | @@ -11061,8 +11355,10 @@ postDominance | Finally.cs:230:9:230:34 | After ...; | Finally.cs:230:9:230:33 | After call to method WriteLine | | Finally.cs:230:27:230:32 | "Done" | Finally.cs:230:9:230:33 | Before call to method WriteLine | | Finally.cs:233:10:233:12 | Normal Exit | Finally.cs:234:5:261:5 | After {...} | +| Finally.cs:233:19:233:20 | b1 | Finally.cs:233:10:233:12 | Entry | +| Finally.cs:233:28:233:29 | b2 | Finally.cs:233:19:233:20 | b1 | | Finally.cs:234:5:261:5 | After {...} | Finally.cs:260:9:260:34 | After ...; | -| Finally.cs:234:5:261:5 | {...} | Finally.cs:233:10:233:12 | Entry | +| Finally.cs:234:5:261:5 | {...} | Finally.cs:233:28:233:29 | b2 | | Finally.cs:235:9:259:9 | After try {...} ... | Finally.cs:257:9:259:9 | After {...} | | Finally.cs:235:9:259:9 | try {...} ... | Finally.cs:234:5:261:5 | {...} | | Finally.cs:236:9:255:9 | After {...} | Finally.cs:254:13:254:45 | After ...; | @@ -11124,8 +11420,9 @@ postDominance | Finally.cs:260:9:260:34 | After ...; | Finally.cs:260:9:260:33 | After call to method WriteLine | | Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:9:260:33 | Before call to method WriteLine | | Finally.cs:263:10:263:12 | Normal Exit | Finally.cs:264:5:274:5 | After {...} | +| Finally.cs:263:18:263:18 | i | Finally.cs:263:10:263:12 | Entry | | Finally.cs:264:5:274:5 | After {...} | Finally.cs:265:9:273:9 | After try {...} ... | -| Finally.cs:264:5:274:5 | {...} | Finally.cs:263:10:263:12 | Entry | +| Finally.cs:264:5:274:5 | {...} | Finally.cs:263:18:263:18 | i | | Finally.cs:265:9:273:9 | After try {...} ... | Finally.cs:270:9:273:9 | After {...} | | Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:264:5:274:5 | {...} | | Finally.cs:266:9:268:9 | After {...} | Finally.cs:267:13:267:35 | After ...; | @@ -11163,8 +11460,9 @@ postDominance | Foreach.cs:4:7:4:13 | {...} | Foreach.cs:4:7:4:13 | After call to constructor Object | | Foreach.cs:6:10:6:11 | Exit | Foreach.cs:6:10:6:11 | Normal Exit | | Foreach.cs:6:10:6:11 | Normal Exit | Foreach.cs:7:5:10:5 | After {...} | +| Foreach.cs:6:22:6:25 | args | Foreach.cs:6:10:6:11 | Entry | | Foreach.cs:7:5:10:5 | After {...} | Foreach.cs:8:9:9:13 | After foreach (... ... in ...) ... | -| Foreach.cs:7:5:10:5 | {...} | Foreach.cs:6:10:6:11 | Entry | +| Foreach.cs:7:5:10:5 | {...} | Foreach.cs:6:22:6:25 | args | | Foreach.cs:8:9:9:13 | After foreach (... ... in ...) ... | Foreach.cs:8:9:9:13 | [LoopHeader] foreach (... ... in ...) ... | | Foreach.cs:8:9:9:13 | After foreach (... ... in ...) ... | Foreach.cs:8:29:8:32 | After access to parameter args [empty] | | Foreach.cs:8:9:9:13 | [LoopHeader] foreach (... ... in ...) ... | Foreach.cs:9:13:9:13 | ; | @@ -11174,8 +11472,9 @@ postDominance | Foreach.cs:9:13:9:13 | ; | Foreach.cs:8:22:8:24 | String arg | | Foreach.cs:12:10:12:11 | Exit | Foreach.cs:12:10:12:11 | Normal Exit | | Foreach.cs:12:10:12:11 | Normal Exit | Foreach.cs:13:5:16:5 | After {...} | +| Foreach.cs:12:22:12:25 | args | Foreach.cs:12:10:12:11 | Entry | | Foreach.cs:13:5:16:5 | After {...} | Foreach.cs:14:9:15:13 | After foreach (... ... in ...) ... | -| Foreach.cs:13:5:16:5 | {...} | Foreach.cs:12:10:12:11 | Entry | +| Foreach.cs:13:5:16:5 | {...} | Foreach.cs:12:22:12:25 | args | | Foreach.cs:14:9:15:13 | After foreach (... ... in ...) ... | Foreach.cs:14:9:15:13 | [LoopHeader] foreach (... ... in ...) ... | | Foreach.cs:14:9:15:13 | After foreach (... ... in ...) ... | Foreach.cs:14:27:14:30 | After access to parameter args [empty] | | Foreach.cs:14:9:15:13 | [LoopHeader] foreach (... ... in ...) ... | Foreach.cs:15:13:15:13 | ; | @@ -11185,8 +11484,9 @@ postDominance | Foreach.cs:15:13:15:13 | ; | Foreach.cs:14:22:14:22 | String _ | | Foreach.cs:18:10:18:11 | Exit | Foreach.cs:18:10:18:11 | Normal Exit | | Foreach.cs:18:10:18:11 | Normal Exit | Foreach.cs:19:5:22:5 | After {...} | +| Foreach.cs:18:33:18:33 | e | Foreach.cs:18:10:18:11 | Entry | | Foreach.cs:19:5:22:5 | After {...} | Foreach.cs:20:9:21:11 | After foreach (... ... in ...) ... | -| Foreach.cs:19:5:22:5 | {...} | Foreach.cs:18:10:18:11 | Entry | +| Foreach.cs:19:5:22:5 | {...} | Foreach.cs:18:33:18:33 | e | | Foreach.cs:20:9:21:11 | After foreach (... ... in ...) ... | Foreach.cs:20:9:21:11 | [LoopHeader] foreach (... ... in ...) ... | | Foreach.cs:20:9:21:11 | After foreach (... ... in ...) ... | Foreach.cs:20:27:20:68 | After ... ?? ... [empty] | | Foreach.cs:20:9:21:11 | [LoopHeader] foreach (... ... in ...) ... | Foreach.cs:21:11:21:11 | ; | @@ -11204,8 +11504,9 @@ postDominance | Foreach.cs:21:11:21:11 | ; | Foreach.cs:20:22:20:22 | String x | | Foreach.cs:24:10:24:11 | Exit | Foreach.cs:24:10:24:11 | Normal Exit | | Foreach.cs:24:10:24:11 | Normal Exit | Foreach.cs:25:5:28:5 | After {...} | +| Foreach.cs:24:40:24:43 | args | Foreach.cs:24:10:24:11 | Entry | | Foreach.cs:25:5:28:5 | After {...} | Foreach.cs:26:9:27:11 | After foreach (... ... in ...) ... | -| Foreach.cs:25:5:28:5 | {...} | Foreach.cs:24:10:24:11 | Entry | +| Foreach.cs:25:5:28:5 | {...} | Foreach.cs:24:40:24:43 | args | | Foreach.cs:26:9:27:11 | After foreach (... ... in ...) ... | Foreach.cs:26:9:27:11 | [LoopHeader] foreach (... ... in ...) ... | | Foreach.cs:26:9:27:11 | After foreach (... ... in ...) ... | Foreach.cs:26:36:26:39 | After access to parameter args [empty] | | Foreach.cs:26:9:27:11 | [LoopHeader] foreach (... ... in ...) ... | Foreach.cs:27:11:27:11 | ; | @@ -11219,8 +11520,9 @@ postDominance | Foreach.cs:27:11:27:11 | ; | Foreach.cs:26:18:26:31 | After (..., ...) | | Foreach.cs:30:10:30:11 | Exit | Foreach.cs:30:10:30:11 | Normal Exit | | Foreach.cs:30:10:30:11 | Normal Exit | Foreach.cs:31:5:34:5 | After {...} | +| Foreach.cs:30:40:30:43 | args | Foreach.cs:30:10:30:11 | Entry | | Foreach.cs:31:5:34:5 | After {...} | Foreach.cs:32:9:33:11 | After foreach (... ... in ...) ... | -| Foreach.cs:31:5:34:5 | {...} | Foreach.cs:30:10:30:11 | Entry | +| Foreach.cs:31:5:34:5 | {...} | Foreach.cs:30:40:30:43 | args | | Foreach.cs:32:9:33:11 | After foreach (... ... in ...) ... | Foreach.cs:32:9:33:11 | [LoopHeader] foreach (... ... in ...) ... | | Foreach.cs:32:9:33:11 | After foreach (... ... in ...) ... | Foreach.cs:32:32:32:35 | After access to parameter args [empty] | | Foreach.cs:32:9:33:11 | [LoopHeader] foreach (... ... in ...) ... | Foreach.cs:33:11:33:11 | ; | @@ -11234,8 +11536,9 @@ postDominance | Foreach.cs:33:11:33:11 | ; | Foreach.cs:32:18:32:27 | After (..., ...) | | Foreach.cs:36:10:36:11 | Exit | Foreach.cs:36:10:36:11 | Normal Exit | | Foreach.cs:36:10:36:11 | Normal Exit | Foreach.cs:37:5:40:5 | After {...} | +| Foreach.cs:36:40:36:43 | args | Foreach.cs:36:10:36:11 | Entry | | Foreach.cs:37:5:40:5 | After {...} | Foreach.cs:38:9:39:11 | After foreach (... ... in ...) ... | -| Foreach.cs:37:5:40:5 | {...} | Foreach.cs:36:10:36:11 | Entry | +| Foreach.cs:37:5:40:5 | {...} | Foreach.cs:36:40:36:43 | args | | Foreach.cs:38:9:39:11 | After foreach (... ... in ...) ... | Foreach.cs:38:9:39:11 | [LoopHeader] foreach (... ... in ...) ... | | Foreach.cs:38:9:39:11 | After foreach (... ... in ...) ... | Foreach.cs:38:39:38:42 | After access to parameter args [empty] | | Foreach.cs:38:9:39:11 | [LoopHeader] foreach (... ... in ...) ... | Foreach.cs:39:11:39:11 | ; | @@ -11289,12 +11592,13 @@ postDominance | Initializers.cs:10:5:10:16 | After call to constructor Object | Initializers.cs:10:5:10:16 | call to constructor Object | | Initializers.cs:10:5:10:16 | After call to method | Initializers.cs:10:5:10:16 | call to method | | Initializers.cs:10:5:10:16 | Before call to constructor Object | Initializers.cs:10:5:10:16 | After call to method | -| Initializers.cs:10:5:10:16 | Before call to method | Initializers.cs:10:5:10:16 | Entry | +| Initializers.cs:10:5:10:16 | Before call to method | Initializers.cs:10:25:10:25 | s | | Initializers.cs:10:5:10:16 | Exit | Initializers.cs:10:5:10:16 | Normal Exit | | Initializers.cs:10:5:10:16 | Normal Exit | Initializers.cs:10:28:10:30 | {...} | | Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:10:5:10:16 | Before call to constructor Object | | Initializers.cs:10:5:10:16 | call to method | Initializers.cs:10:5:10:16 | this access | | Initializers.cs:10:5:10:16 | this access | Initializers.cs:10:5:10:16 | Before call to method | +| Initializers.cs:10:25:10:25 | s | Initializers.cs:10:5:10:16 | Entry | | Initializers.cs:10:28:10:30 | {...} | Initializers.cs:10:5:10:16 | After call to constructor Object | | Initializers.cs:12:10:12:10 | Exit | Initializers.cs:12:10:12:10 | Normal Exit | | Initializers.cs:12:10:12:10 | Normal Exit | Initializers.cs:13:5:16:5 | After {...} | @@ -11409,8 +11713,9 @@ postDominance | Initializers.cs:31:30:31:30 | 3 | Initializers.cs:31:26:31:26 | After access to field I | | Initializers.cs:33:9:33:11 | Exit | Initializers.cs:33:9:33:11 | Normal Exit | | Initializers.cs:33:9:33:11 | Normal Exit | Initializers.cs:33:29:33:38 | After {...} | +| Initializers.cs:33:17:33:17 | i | Initializers.cs:33:9:33:11 | Entry | | Initializers.cs:33:22:33:25 | After call to constructor Sub | Initializers.cs:33:22:33:25 | call to constructor Sub | -| Initializers.cs:33:22:33:25 | Before call to constructor Sub | Initializers.cs:33:9:33:11 | Entry | +| Initializers.cs:33:22:33:25 | Before call to constructor Sub | Initializers.cs:33:17:33:17 | i | | Initializers.cs:33:22:33:25 | call to constructor Sub | Initializers.cs:33:22:33:25 | Before call to constructor Sub | | Initializers.cs:33:29:33:38 | After {...} | Initializers.cs:33:31:33:36 | After ...; | | Initializers.cs:33:29:33:38 | {...} | Initializers.cs:33:22:33:25 | After call to constructor Sub | @@ -11427,12 +11732,14 @@ postDominance | Initializers.cs:35:9:35:11 | After call to constructor NoConstructor | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | | Initializers.cs:35:9:35:11 | After call to method | Initializers.cs:35:9:35:11 | call to method | | Initializers.cs:35:9:35:11 | Before call to constructor NoConstructor | Initializers.cs:35:9:35:11 | After call to method | -| Initializers.cs:35:9:35:11 | Before call to method | Initializers.cs:35:9:35:11 | Entry | +| Initializers.cs:35:9:35:11 | Before call to method | Initializers.cs:35:24:35:24 | j | | Initializers.cs:35:9:35:11 | Exit | Initializers.cs:35:9:35:11 | Normal Exit | | Initializers.cs:35:9:35:11 | Normal Exit | Initializers.cs:35:27:35:40 | After {...} | | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:9:35:11 | Before call to constructor NoConstructor | | Initializers.cs:35:9:35:11 | call to method | Initializers.cs:35:9:35:11 | this access | | Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | Before call to method | +| Initializers.cs:35:17:35:17 | i | Initializers.cs:35:9:35:11 | Entry | +| Initializers.cs:35:24:35:24 | j | Initializers.cs:35:17:35:17 | i | | Initializers.cs:35:27:35:40 | After {...} | Initializers.cs:35:29:35:38 | After ...; | | Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:9:35:11 | After call to constructor NoConstructor | | Initializers.cs:35:29:35:29 | After access to field I | Initializers.cs:35:29:35:29 | access to field I | @@ -11471,8 +11778,9 @@ postDominance | Initializers.cs:41:11:41:18 | {...} | Initializers.cs:41:11:41:18 | After call to constructor Object | | Initializers.cs:51:10:51:13 | Exit | Initializers.cs:51:10:51:13 | Normal Exit | | Initializers.cs:51:10:51:13 | Normal Exit | Initializers.cs:52:5:66:5 | After {...} | +| Initializers.cs:51:19:51:19 | i | Initializers.cs:51:10:51:13 | Entry | | Initializers.cs:52:5:66:5 | After {...} | Initializers.cs:57:9:65:10 | After ... ...; | -| Initializers.cs:52:5:66:5 | {...} | Initializers.cs:51:10:51:13 | Entry | +| Initializers.cs:52:5:66:5 | {...} | Initializers.cs:51:19:51:19 | i | | Initializers.cs:54:9:54:96 | ... ...; | Initializers.cs:52:5:66:5 | {...} | | Initializers.cs:54:9:54:96 | After ... ...; | Initializers.cs:54:13:54:95 | After Dictionary dict = ... | | Initializers.cs:54:13:54:16 | access to local variable dict | Initializers.cs:54:13:54:95 | Before Dictionary dict = ... | @@ -11726,8 +12034,9 @@ postDominance | LoopUnrolling.cs:7:10:7:11 | Exit | LoopUnrolling.cs:7:10:7:11 | Normal Exit | | LoopUnrolling.cs:7:10:7:11 | Normal Exit | LoopUnrolling.cs:8:5:13:5 | After {...} | | LoopUnrolling.cs:7:10:7:11 | Normal Exit | LoopUnrolling.cs:10:13:10:19 | return ...; | +| LoopUnrolling.cs:7:22:7:25 | args | LoopUnrolling.cs:7:10:7:11 | Entry | | LoopUnrolling.cs:8:5:13:5 | After {...} | LoopUnrolling.cs:11:9:12:35 | After foreach (... ... in ...) ... | -| LoopUnrolling.cs:8:5:13:5 | {...} | LoopUnrolling.cs:7:10:7:11 | Entry | +| LoopUnrolling.cs:8:5:13:5 | {...} | LoopUnrolling.cs:7:22:7:25 | args | | LoopUnrolling.cs:9:9:10:19 | After if (...) ... | LoopUnrolling.cs:9:13:9:28 | After ... == ... [false] | | LoopUnrolling.cs:9:9:10:19 | if (...) ... | LoopUnrolling.cs:8:5:13:5 | {...} | | LoopUnrolling.cs:9:13:9:16 | access to parameter args | LoopUnrolling.cs:9:13:9:23 | Before access to property Length | @@ -11785,8 +12094,9 @@ postDominance | LoopUnrolling.cs:19:31:19:31 | access to local variable x | LoopUnrolling.cs:19:13:19:32 | Before call to method WriteLine | | LoopUnrolling.cs:22:10:22:11 | Exit | LoopUnrolling.cs:22:10:22:11 | Normal Exit | | LoopUnrolling.cs:22:10:22:11 | Normal Exit | LoopUnrolling.cs:23:5:27:5 | After {...} | +| LoopUnrolling.cs:22:20:22:23 | args | LoopUnrolling.cs:22:10:22:11 | Entry | | LoopUnrolling.cs:23:5:27:5 | After {...} | LoopUnrolling.cs:24:9:26:40 | After foreach (... ... in ...) ... | -| LoopUnrolling.cs:23:5:27:5 | {...} | LoopUnrolling.cs:22:10:22:11 | Entry | +| LoopUnrolling.cs:23:5:27:5 | {...} | LoopUnrolling.cs:22:20:22:23 | args | | LoopUnrolling.cs:24:9:26:40 | After foreach (... ... in ...) ... | LoopUnrolling.cs:24:9:26:40 | [LoopHeader] foreach (... ... in ...) ... | | LoopUnrolling.cs:24:9:26:40 | After foreach (... ... in ...) ... | LoopUnrolling.cs:24:29:24:32 | After access to parameter args [empty] | | LoopUnrolling.cs:24:9:26:40 | [LoopHeader] foreach (... ... in ...) ... | LoopUnrolling.cs:25:13:26:40 | After foreach (... ... in ...) ... | @@ -11925,8 +12235,9 @@ postDominance | LoopUnrolling.cs:51:13:51:23 | goto ...; | LoopUnrolling.cs:51:13:51:23 | Before goto ...; | | LoopUnrolling.cs:55:10:55:11 | Exit | LoopUnrolling.cs:55:10:55:11 | Normal Exit | | LoopUnrolling.cs:55:10:55:11 | Normal Exit | LoopUnrolling.cs:56:5:65:5 | After {...} | +| LoopUnrolling.cs:55:18:55:18 | b | LoopUnrolling.cs:55:10:55:11 | Entry | | LoopUnrolling.cs:56:5:65:5 | After {...} | LoopUnrolling.cs:58:9:64:9 | After foreach (... ... in ...) ... | -| LoopUnrolling.cs:56:5:65:5 | {...} | LoopUnrolling.cs:55:10:55:11 | Entry | +| LoopUnrolling.cs:56:5:65:5 | {...} | LoopUnrolling.cs:55:18:55:18 | b | | LoopUnrolling.cs:57:9:57:48 | ... ...; | LoopUnrolling.cs:56:5:65:5 | {...} | | LoopUnrolling.cs:57:9:57:48 | After ... ...; | LoopUnrolling.cs:57:13:57:47 | After String[] xs = ... | | LoopUnrolling.cs:57:13:57:14 | access to local variable xs | LoopUnrolling.cs:57:13:57:47 | Before String[] xs = ... | @@ -11974,8 +12285,9 @@ postDominance | LoopUnrolling.cs:67:10:67:11 | Exit | LoopUnrolling.cs:67:10:67:11 | Normal Exit | | LoopUnrolling.cs:67:10:67:11 | Normal Exit | LoopUnrolling.cs:68:5:74:5 | After {...} | | LoopUnrolling.cs:67:10:67:11 | Normal Exit | LoopUnrolling.cs:70:13:70:19 | return ...; | +| LoopUnrolling.cs:67:26:67:29 | args | LoopUnrolling.cs:67:10:67:11 | Entry | | LoopUnrolling.cs:68:5:74:5 | After {...} | LoopUnrolling.cs:72:9:73:35 | After foreach (... ... in ...) ... | -| LoopUnrolling.cs:68:5:74:5 | {...} | LoopUnrolling.cs:67:10:67:11 | Entry | +| LoopUnrolling.cs:68:5:74:5 | {...} | LoopUnrolling.cs:67:26:67:29 | args | | LoopUnrolling.cs:69:9:70:19 | After if (...) ... | LoopUnrolling.cs:69:13:69:23 | After !... [false] | | LoopUnrolling.cs:69:9:70:19 | if (...) ... | LoopUnrolling.cs:68:5:74:5 | {...} | | LoopUnrolling.cs:69:13:69:23 | !... | LoopUnrolling.cs:69:9:70:19 | if (...) ... | @@ -12112,6 +12424,7 @@ postDominance | MultiImplementationA.cs:7:33:7:36 | null | MultiImplementationA.cs:7:27:7:37 | Before throw ...; | | MultiImplementationA.cs:7:41:7:43 | Exceptional Exit | MultiImplementationA.cs:7:47:7:57 | throw ...; | | MultiImplementationA.cs:7:41:7:43 | Normal Exit | MultiImplementationB.cs:4:43:4:45 | {...} | +| MultiImplementationA.cs:7:41:7:43 | value | MultiImplementationA.cs:7:41:7:43 | Entry | | MultiImplementationA.cs:7:47:7:57 | Before throw ...; | MultiImplementationA.cs:7:45:7:59 | {...} | | MultiImplementationA.cs:7:47:7:57 | throw ...; | MultiImplementationA.cs:7:53:7:56 | null | | MultiImplementationA.cs:7:53:7:56 | null | MultiImplementationA.cs:7:47:7:57 | Before throw ...; | @@ -12129,21 +12442,26 @@ postDominance | MultiImplementationA.cs:13:16:13:20 | ... = ... | MultiImplementationA.cs:13:20:13:20 | 0 | | MultiImplementationA.cs:13:16:13:20 | After ... = ... | MultiImplementationA.cs:13:16:13:20 | ... = ... | | MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:13:16:13:16 | After access to field F | +| MultiImplementationA.cs:14:25:14:25 | i | MultiImplementationA.cs:14:31:14:31 | Entry | | MultiImplementationA.cs:14:31:14:31 | Exceptional Exit | MultiImplementationB.cs:12:31:12:40 | throw ... | | MultiImplementationA.cs:14:31:14:31 | Normal Exit | MultiImplementationA.cs:14:31:14:31 | access to parameter i | -| MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | Entry | +| MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:25:14:25 | i | +| MultiImplementationA.cs:15:31:15:31 | s | MultiImplementationA.cs:15:36:15:38 | Entry | +| MultiImplementationA.cs:15:31:15:31 | s | MultiImplementationA.cs:15:54:15:56 | Entry | | MultiImplementationA.cs:15:36:15:38 | Exceptional Exit | MultiImplementationB.cs:13:42:13:52 | throw ...; | | MultiImplementationA.cs:15:36:15:38 | Normal Exit | MultiImplementationA.cs:15:42:15:50 | return ...; | -| MultiImplementationA.cs:15:40:15:52 | {...} | MultiImplementationA.cs:15:36:15:38 | Entry | +| MultiImplementationA.cs:15:40:15:52 | {...} | MultiImplementationA.cs:15:31:15:31 | s | | MultiImplementationA.cs:15:42:15:50 | Before return ...; | MultiImplementationA.cs:15:40:15:52 | {...} | | MultiImplementationA.cs:15:42:15:50 | return ...; | MultiImplementationA.cs:15:49:15:49 | access to parameter s | | MultiImplementationA.cs:15:49:15:49 | access to parameter s | MultiImplementationA.cs:15:42:15:50 | Before return ...; | | MultiImplementationA.cs:15:54:15:56 | Exit | MultiImplementationA.cs:15:54:15:56 | Normal Exit | | MultiImplementationA.cs:15:54:15:56 | Normal Exit | MultiImplementationA.cs:15:58:15:60 | {...} | | MultiImplementationA.cs:15:54:15:56 | Normal Exit | MultiImplementationB.cs:13:60:13:62 | {...} | +| MultiImplementationA.cs:15:54:15:56 | value | MultiImplementationA.cs:15:31:15:31 | s | | MultiImplementationA.cs:16:17:16:18 | Exit | MultiImplementationA.cs:16:17:16:18 | Normal Exit | | MultiImplementationA.cs:16:17:16:18 | Normal Exit | MultiImplementationA.cs:17:5:19:5 | After {...} | | MultiImplementationA.cs:16:17:16:18 | Normal Exit | MultiImplementationB.cs:15:5:17:5 | After {...} | +| MultiImplementationA.cs:16:24:16:24 | i | MultiImplementationA.cs:16:17:16:18 | Entry | | MultiImplementationA.cs:17:5:19:5 | After {...} | MultiImplementationA.cs:18:9:18:22 | M2(...) | | MultiImplementationA.cs:18:9:18:22 | Exit | MultiImplementationA.cs:18:9:18:22 | Normal Exit | | MultiImplementationA.cs:18:9:18:22 | M2(...) | MultiImplementationA.cs:17:5:19:5 | {...} | @@ -12152,12 +12470,13 @@ postDominance | MultiImplementationA.cs:20:12:20:13 | After call to constructor Object | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | | MultiImplementationA.cs:20:12:20:13 | After call to method | MultiImplementationA.cs:20:12:20:13 | call to method | | MultiImplementationA.cs:20:12:20:13 | Before call to constructor Object | MultiImplementationA.cs:20:12:20:13 | After call to method | -| MultiImplementationA.cs:20:12:20:13 | Before call to method | MultiImplementationA.cs:20:12:20:13 | Entry | +| MultiImplementationA.cs:20:12:20:13 | Before call to method | MultiImplementationA.cs:20:19:20:19 | i | | MultiImplementationA.cs:20:12:20:13 | Exceptional Exit | MultiImplementationB.cs:18:24:18:34 | throw ...; | | MultiImplementationA.cs:20:12:20:13 | Normal Exit | MultiImplementationA.cs:20:22:20:31 | After {...} | | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | Before call to constructor Object | | MultiImplementationA.cs:20:12:20:13 | call to method | MultiImplementationA.cs:20:12:20:13 | this access | | MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | Before call to method | +| MultiImplementationA.cs:20:19:20:19 | i | MultiImplementationA.cs:20:12:20:13 | Entry | | MultiImplementationA.cs:20:22:20:31 | After {...} | MultiImplementationA.cs:20:24:20:29 | After ...; | | MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:12:20:13 | After call to constructor Object | | MultiImplementationA.cs:20:24:20:24 | After access to field F | MultiImplementationA.cs:20:24:20:24 | access to field F | @@ -12182,7 +12501,8 @@ postDominance | MultiImplementationA.cs:22:11:22:13 | {...} | MultiImplementationA.cs:22:6:22:7 | Entry | | MultiImplementationA.cs:23:28:23:35 | Exceptional Exit | MultiImplementationB.cs:21:50:21:59 | throw ... | | MultiImplementationA.cs:23:28:23:35 | Normal Exit | MultiImplementationA.cs:23:50:23:53 | null | -| MultiImplementationA.cs:23:50:23:53 | null | MultiImplementationA.cs:23:28:23:35 | Entry | +| MultiImplementationA.cs:23:44:23:44 | i | MultiImplementationA.cs:23:28:23:35 | Entry | +| MultiImplementationA.cs:23:50:23:53 | null | MultiImplementationA.cs:23:44:23:44 | i | | MultiImplementationA.cs:24:16:24:16 | After access to property P | MultiImplementationA.cs:24:16:24:16 | access to property P | | MultiImplementationA.cs:24:16:24:16 | Before access to property P | MultiImplementationA.cs:24:32:24:34 | Before ... = ... | | MultiImplementationA.cs:24:16:24:16 | access to property P | MultiImplementationA.cs:24:16:24:16 | this access | @@ -12239,7 +12559,7 @@ postDominance | MultiImplementationB.cs:4:27:4:35 | Before return ...; | MultiImplementationB.cs:4:25:4:37 | {...} | | MultiImplementationB.cs:4:27:4:35 | return ...; | MultiImplementationB.cs:4:34:4:34 | 1 | | MultiImplementationB.cs:4:34:4:34 | 1 | MultiImplementationB.cs:4:27:4:35 | Before return ...; | -| MultiImplementationB.cs:4:43:4:45 | {...} | MultiImplementationA.cs:7:41:7:43 | Entry | +| MultiImplementationB.cs:4:43:4:45 | {...} | MultiImplementationA.cs:7:41:7:43 | value | | MultiImplementationB.cs:5:23:5:23 | 2 | MultiImplementationA.cs:8:16:8:16 | Entry | | MultiImplementationB.cs:11:16:11:16 | After access to field F | MultiImplementationB.cs:11:16:11:16 | access to field F | | MultiImplementationB.cs:11:16:11:16 | Before access to field F | MultiImplementationB.cs:11:16:11:20 | Before ... = ... | @@ -12314,14 +12634,16 @@ postDominance | NullCoalescing.cs:1:7:1:20 | {...} | NullCoalescing.cs:1:7:1:20 | After call to constructor Object | | NullCoalescing.cs:3:9:3:10 | Exit | NullCoalescing.cs:3:9:3:10 | Normal Exit | | NullCoalescing.cs:3:9:3:10 | Normal Exit | NullCoalescing.cs:3:23:3:28 | After ... ?? ... | +| NullCoalescing.cs:3:17:3:17 | i | NullCoalescing.cs:3:9:3:10 | Entry | | NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:23:3:28 | ... ?? ... | -| NullCoalescing.cs:3:23:3:28 | ... ?? ... | NullCoalescing.cs:3:9:3:10 | Entry | +| NullCoalescing.cs:3:23:3:28 | ... ?? ... | NullCoalescing.cs:3:17:3:17 | i | | NullCoalescing.cs:3:23:3:28 | After ... ?? ... | NullCoalescing.cs:3:23:3:23 | After access to parameter i [non-null] | | NullCoalescing.cs:3:23:3:28 | After ... ?? ... | NullCoalescing.cs:3:28:3:28 | 0 | | NullCoalescing.cs:3:28:3:28 | 0 | NullCoalescing.cs:3:23:3:23 | After access to parameter i [null] | | NullCoalescing.cs:5:9:5:10 | Exit | NullCoalescing.cs:5:9:5:10 | Normal Exit | | NullCoalescing.cs:5:9:5:10 | Normal Exit | NullCoalescing.cs:5:24:5:43 | After ... ? ... : ... | -| NullCoalescing.cs:5:24:5:43 | ... ? ... : ... | NullCoalescing.cs:5:9:5:10 | Entry | +| NullCoalescing.cs:5:18:5:18 | b | NullCoalescing.cs:5:9:5:10 | Entry | +| NullCoalescing.cs:5:24:5:43 | ... ? ... : ... | NullCoalescing.cs:5:18:5:18 | b | | NullCoalescing.cs:5:24:5:43 | After ... ? ... : ... | NullCoalescing.cs:5:39:5:39 | 0 | | NullCoalescing.cs:5:24:5:43 | After ... ? ... : ... | NullCoalescing.cs:5:43:5:43 | 1 | | NullCoalescing.cs:5:25:5:25 | access to parameter b | NullCoalescing.cs:5:25:5:34 | ... ?? ... | @@ -12333,8 +12655,10 @@ postDominance | NullCoalescing.cs:5:43:5:43 | 1 | NullCoalescing.cs:5:25:5:34 | After ... ?? ... [false] | | NullCoalescing.cs:7:12:7:13 | Exit | NullCoalescing.cs:7:12:7:13 | Normal Exit | | NullCoalescing.cs:7:12:7:13 | Normal Exit | NullCoalescing.cs:7:40:7:53 | After ... ?? ... | +| NullCoalescing.cs:7:22:7:23 | s1 | NullCoalescing.cs:7:12:7:13 | Entry | +| NullCoalescing.cs:7:33:7:34 | s2 | NullCoalescing.cs:7:22:7:23 | s1 | | NullCoalescing.cs:7:40:7:41 | access to parameter s1 | NullCoalescing.cs:7:40:7:53 | ... ?? ... | -| NullCoalescing.cs:7:40:7:53 | ... ?? ... | NullCoalescing.cs:7:12:7:13 | Entry | +| NullCoalescing.cs:7:40:7:53 | ... ?? ... | NullCoalescing.cs:7:33:7:34 | s2 | | NullCoalescing.cs:7:40:7:53 | After ... ?? ... | NullCoalescing.cs:7:40:7:41 | After access to parameter s1 [non-null] | | NullCoalescing.cs:7:40:7:53 | After ... ?? ... | NullCoalescing.cs:7:46:7:53 | After ... ?? ... | | NullCoalescing.cs:7:46:7:47 | access to parameter s2 | NullCoalescing.cs:7:46:7:53 | ... ?? ... | @@ -12344,7 +12668,9 @@ postDominance | NullCoalescing.cs:7:52:7:53 | "" | NullCoalescing.cs:7:46:7:47 | After access to parameter s2 [null] | | NullCoalescing.cs:9:12:9:13 | Exit | NullCoalescing.cs:9:12:9:13 | Normal Exit | | NullCoalescing.cs:9:12:9:13 | Normal Exit | NullCoalescing.cs:9:36:9:58 | After ... ?? ... | -| NullCoalescing.cs:9:36:9:58 | ... ?? ... | NullCoalescing.cs:9:12:9:13 | Entry | +| NullCoalescing.cs:9:20:9:20 | b | NullCoalescing.cs:9:12:9:13 | Entry | +| NullCoalescing.cs:9:30:9:30 | s | NullCoalescing.cs:9:20:9:20 | b | +| NullCoalescing.cs:9:36:9:58 | ... ?? ... | NullCoalescing.cs:9:30:9:30 | s | | NullCoalescing.cs:9:36:9:58 | After ... ?? ... | NullCoalescing.cs:9:37:9:45 | After ... ? ... : ... [non-null] | | NullCoalescing.cs:9:36:9:58 | After ... ?? ... | NullCoalescing.cs:9:51:9:58 | After ... ?? ... | | NullCoalescing.cs:9:37:9:37 | access to parameter b | NullCoalescing.cs:9:37:9:45 | ... ? ... : ... | @@ -12362,7 +12688,10 @@ postDominance | NullCoalescing.cs:9:57:9:58 | "" | NullCoalescing.cs:9:51:9:52 | After "" [null] | | NullCoalescing.cs:11:9:11:10 | Exit | NullCoalescing.cs:11:9:11:10 | Normal Exit | | NullCoalescing.cs:11:9:11:10 | Normal Exit | NullCoalescing.cs:11:43:11:68 | After ... ? ... : ... | -| NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | NullCoalescing.cs:11:9:11:10 | Entry | +| NullCoalescing.cs:11:18:11:19 | b1 | NullCoalescing.cs:11:9:11:10 | Entry | +| NullCoalescing.cs:11:27:11:28 | b2 | NullCoalescing.cs:11:18:11:19 | b1 | +| NullCoalescing.cs:11:36:11:37 | b3 | NullCoalescing.cs:11:27:11:28 | b2 | +| NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | NullCoalescing.cs:11:36:11:37 | b3 | | NullCoalescing.cs:11:43:11:68 | After ... ? ... : ... | NullCoalescing.cs:11:64:11:64 | 0 | | NullCoalescing.cs:11:43:11:68 | After ... ? ... : ... | NullCoalescing.cs:11:68:11:68 | 1 | | NullCoalescing.cs:11:44:11:45 | access to parameter b1 | NullCoalescing.cs:11:44:11:59 | ... ?? ... | @@ -12379,8 +12708,9 @@ postDominance | NullCoalescing.cs:11:68:11:68 | 1 | NullCoalescing.cs:11:44:11:59 | After ... ?? ... [false] | | NullCoalescing.cs:13:10:13:11 | Exit | NullCoalescing.cs:13:10:13:11 | Normal Exit | | NullCoalescing.cs:13:10:13:11 | Normal Exit | NullCoalescing.cs:14:5:18:5 | After {...} | +| NullCoalescing.cs:13:17:13:17 | i | NullCoalescing.cs:13:10:13:11 | Entry | | NullCoalescing.cs:14:5:18:5 | After {...} | NullCoalescing.cs:17:9:17:25 | After ...; | -| NullCoalescing.cs:14:5:18:5 | {...} | NullCoalescing.cs:13:10:13:11 | Entry | +| NullCoalescing.cs:14:5:18:5 | {...} | NullCoalescing.cs:13:17:13:17 | i | | NullCoalescing.cs:15:9:15:32 | ... ...; | NullCoalescing.cs:14:5:18:5 | {...} | | NullCoalescing.cs:15:9:15:32 | After ... ...; | NullCoalescing.cs:15:13:15:31 | After Int32 j = ... | | NullCoalescing.cs:15:13:15:13 | access to local variable j | NullCoalescing.cs:15:13:15:31 | Before Int32 j = ... | @@ -12423,12 +12753,13 @@ postDominance | PartialImplementationA.cs:3:12:3:18 | After call to constructor Object | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | | PartialImplementationA.cs:3:12:3:18 | After call to method | PartialImplementationA.cs:3:12:3:18 | call to method | | PartialImplementationA.cs:3:12:3:18 | Before call to constructor Object | PartialImplementationA.cs:3:12:3:18 | After call to method | -| PartialImplementationA.cs:3:12:3:18 | Before call to method | PartialImplementationA.cs:3:12:3:18 | Entry | +| PartialImplementationA.cs:3:12:3:18 | Before call to method | PartialImplementationA.cs:3:24:3:24 | i | | PartialImplementationA.cs:3:12:3:18 | Exit | PartialImplementationA.cs:3:12:3:18 | Normal Exit | | PartialImplementationA.cs:3:12:3:18 | Normal Exit | PartialImplementationA.cs:3:27:3:29 | {...} | | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | PartialImplementationA.cs:3:12:3:18 | Before call to constructor Object | | PartialImplementationA.cs:3:12:3:18 | call to method | PartialImplementationA.cs:3:12:3:18 | this access | | PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | Before call to method | +| PartialImplementationA.cs:3:24:3:24 | i | PartialImplementationA.cs:3:12:3:18 | Entry | | PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:12:3:18 | After call to constructor Object | | PartialImplementationB.cs:3:16:3:16 | After access to field F | PartialImplementationB.cs:3:16:3:16 | access to field F | | PartialImplementationB.cs:3:16:3:16 | Before access to field F | PartialImplementationB.cs:3:16:3:20 | Before ... = ... | @@ -12619,22 +12950,24 @@ postDominance | Patterns.cs:40:17:40:17 | access to local variable o | Patterns.cs:40:9:42:9 | switch (...) {...} | | Patterns.cs:47:24:47:25 | Exit | Patterns.cs:47:24:47:25 | Normal Exit | | Patterns.cs:47:24:47:25 | Normal Exit | Patterns.cs:48:9:48:20 | After ... is ... | +| Patterns.cs:47:32:47:32 | c | Patterns.cs:47:24:47:25 | Entry | | Patterns.cs:48:9:48:9 | access to parameter c | Patterns.cs:48:9:48:20 | Before ... is ... | | Patterns.cs:48:9:48:20 | ... is ... | Patterns.cs:48:9:48:9 | access to parameter c | | Patterns.cs:48:9:48:20 | After ... is ... | Patterns.cs:48:9:48:20 | ... is ... | | Patterns.cs:48:9:48:20 | After ... is ... | Patterns.cs:48:14:48:20 | After not ... | -| Patterns.cs:48:9:48:20 | Before ... is ... | Patterns.cs:47:24:47:25 | Entry | +| Patterns.cs:48:9:48:20 | Before ... is ... | Patterns.cs:47:32:47:32 | c | | Patterns.cs:48:14:48:20 | After not ... | Patterns.cs:48:14:48:20 | not ... | | Patterns.cs:48:14:48:20 | Before not ... | Patterns.cs:48:9:48:20 | [MatchTrue] ... is ... | | Patterns.cs:48:14:48:20 | not ... | Patterns.cs:48:18:48:20 | a | | Patterns.cs:48:18:48:20 | a | Patterns.cs:48:14:48:20 | Before not ... | | Patterns.cs:50:24:50:25 | Exit | Patterns.cs:50:24:50:25 | Normal Exit | | Patterns.cs:50:24:50:25 | Normal Exit | Patterns.cs:51:9:51:39 | After ... ? ... : ... | +| Patterns.cs:50:34:50:34 | c | Patterns.cs:50:24:50:25 | Entry | | Patterns.cs:51:9:51:9 | access to parameter c | Patterns.cs:51:9:51:21 | Before ... is ... | | Patterns.cs:51:9:51:21 | ... is ... | Patterns.cs:51:9:51:9 | access to parameter c | | Patterns.cs:51:9:51:21 | After ... is ... [true] | Patterns.cs:51:14:51:21 | After not ... | | Patterns.cs:51:9:51:21 | Before ... is ... | Patterns.cs:51:9:51:39 | ... ? ... : ... | -| Patterns.cs:51:9:51:39 | ... ? ... : ... | Patterns.cs:50:24:50:25 | Entry | +| Patterns.cs:51:9:51:39 | ... ? ... : ... | Patterns.cs:50:34:50:34 | c | | Patterns.cs:51:9:51:39 | After ... ? ... : ... | Patterns.cs:51:25:51:30 | After ... is ... | | Patterns.cs:51:9:51:39 | After ... ? ... : ... | Patterns.cs:51:34:51:39 | After ... is ... | | Patterns.cs:51:14:51:21 | After not ... | Patterns.cs:51:14:51:21 | not ... | @@ -12655,11 +12988,12 @@ postDominance | Patterns.cs:51:39:51:39 | 2 | Patterns.cs:51:34:51:39 | [MatchTrue] ... is ... | | Patterns.cs:53:24:53:25 | Exit | Patterns.cs:53:24:53:25 | Normal Exit | | Patterns.cs:53:24:53:25 | Normal Exit | Patterns.cs:54:9:54:37 | After ... is ... | +| Patterns.cs:53:34:53:34 | c | Patterns.cs:53:24:53:25 | Entry | | Patterns.cs:54:9:54:9 | access to parameter c | Patterns.cs:54:9:54:37 | Before ... is ... | | Patterns.cs:54:9:54:37 | ... is ... | Patterns.cs:54:9:54:9 | access to parameter c | | Patterns.cs:54:9:54:37 | After ... is ... | Patterns.cs:54:9:54:37 | ... is ... | | Patterns.cs:54:9:54:37 | After ... is ... | Patterns.cs:54:14:54:37 | After not ... | -| Patterns.cs:54:9:54:37 | Before ... is ... | Patterns.cs:53:24:53:25 | Entry | +| Patterns.cs:54:9:54:37 | Before ... is ... | Patterns.cs:53:34:53:34 | c | | Patterns.cs:54:14:54:37 | After not ... | Patterns.cs:54:14:54:37 | not ... | | Patterns.cs:54:14:54:37 | Before not ... | Patterns.cs:54:9:54:37 | [MatchTrue] ... is ... | | Patterns.cs:54:14:54:37 | not ... | Patterns.cs:54:18:54:37 | After { ... } | @@ -12674,7 +13008,8 @@ postDominance | Patterns.cs:54:33:54:33 | 1 | Patterns.cs:54:27:54:35 | Before { ... } | | Patterns.cs:56:26:56:27 | Exit | Patterns.cs:56:26:56:27 | Normal Exit | | Patterns.cs:56:26:56:27 | Normal Exit | Patterns.cs:58:9:62:10 | return ...; | -| Patterns.cs:57:5:63:5 | {...} | Patterns.cs:56:26:56:27 | Entry | +| Patterns.cs:56:33:56:33 | i | Patterns.cs:56:26:56:27 | Entry | +| Patterns.cs:57:5:63:5 | {...} | Patterns.cs:56:33:56:33 | i | | Patterns.cs:58:9:62:10 | Before return ...; | Patterns.cs:57:5:63:5 | {...} | | Patterns.cs:58:9:62:10 | return ...; | Patterns.cs:58:16:62:9 | After ... switch { ... } | | Patterns.cs:58:16:58:16 | access to parameter i | Patterns.cs:58:16:62:9 | ... switch { ... } | @@ -12712,7 +13047,8 @@ postDominance | Patterns.cs:70:18:70:27 | "possible" | Patterns.cs:70:13:70:13 | 2 | | Patterns.cs:74:26:74:27 | Exit | Patterns.cs:74:26:74:27 | Normal Exit | | Patterns.cs:74:26:74:27 | Normal Exit | Patterns.cs:76:9:82:10 | return ...; | -| Patterns.cs:75:5:83:5 | {...} | Patterns.cs:74:26:74:27 | Entry | +| Patterns.cs:74:33:74:33 | i | Patterns.cs:74:26:74:27 | Entry | +| Patterns.cs:75:5:83:5 | {...} | Patterns.cs:74:33:74:33 | i | | Patterns.cs:76:9:82:10 | Before return ...; | Patterns.cs:75:5:83:5 | {...} | | Patterns.cs:76:9:82:10 | return ...; | Patterns.cs:76:16:82:9 | After ... switch { ... } | | Patterns.cs:76:16:76:16 | access to parameter i | Patterns.cs:76:16:82:9 | ... switch { ... } | @@ -12742,11 +13078,12 @@ postDominance | Patterns.cs:81:18:81:20 | "0" | Patterns.cs:81:13:81:13 | _ | | Patterns.cs:85:26:85:27 | Exit | Patterns.cs:85:26:85:27 | Normal Exit | | Patterns.cs:85:26:85:27 | Normal Exit | Patterns.cs:85:39:85:69 | After ... ? ... : ... | +| Patterns.cs:85:33:85:33 | i | Patterns.cs:85:26:85:27 | Entry | | Patterns.cs:85:39:85:39 | access to parameter i | Patterns.cs:85:39:85:53 | Before ... is ... | | Patterns.cs:85:39:85:53 | ... is ... | Patterns.cs:85:39:85:39 | access to parameter i | | Patterns.cs:85:39:85:53 | After ... is ... [true] | Patterns.cs:85:44:85:53 | After ... or ... | | Patterns.cs:85:39:85:53 | Before ... is ... | Patterns.cs:85:39:85:69 | ... ? ... : ... | -| Patterns.cs:85:39:85:69 | ... ? ... : ... | Patterns.cs:85:26:85:27 | Entry | +| Patterns.cs:85:39:85:69 | ... ? ... : ... | Patterns.cs:85:33:85:33 | i | | Patterns.cs:85:39:85:69 | After ... ? ... : ... | Patterns.cs:85:57:85:63 | "not 2" | | Patterns.cs:85:39:85:69 | After ... ? ... : ... | Patterns.cs:85:67:85:69 | "2" | | Patterns.cs:85:44:85:44 | 1 | Patterns.cs:85:44:85:53 | Before ... or ... | @@ -12761,11 +13098,12 @@ postDominance | Patterns.cs:85:67:85:69 | "2" | Patterns.cs:85:39:85:53 | After ... is ... [false] | | Patterns.cs:87:26:87:27 | Exit | Patterns.cs:87:26:87:27 | Normal Exit | | Patterns.cs:87:26:87:27 | Normal Exit | Patterns.cs:87:39:87:70 | After ... ? ... : ... | +| Patterns.cs:87:33:87:33 | i | Patterns.cs:87:26:87:27 | Entry | | Patterns.cs:87:39:87:39 | access to parameter i | Patterns.cs:87:39:87:54 | Before ... is ... | | Patterns.cs:87:39:87:54 | ... is ... | Patterns.cs:87:39:87:39 | access to parameter i | | Patterns.cs:87:39:87:54 | After ... is ... [true] | Patterns.cs:87:44:87:54 | After ... and ... | | Patterns.cs:87:39:87:54 | Before ... is ... | Patterns.cs:87:39:87:70 | ... ? ... : ... | -| Patterns.cs:87:39:87:70 | ... ? ... : ... | Patterns.cs:87:26:87:27 | Entry | +| Patterns.cs:87:39:87:70 | ... ? ... : ... | Patterns.cs:87:33:87:33 | i | | Patterns.cs:87:39:87:70 | After ... ? ... : ... | Patterns.cs:87:58:87:60 | "1" | | Patterns.cs:87:39:87:70 | After ... ? ... : ... | Patterns.cs:87:64:87:70 | "not 1" | | Patterns.cs:87:44:87:44 | 1 | Patterns.cs:87:44:87:54 | Before ... and ... | @@ -12820,8 +13158,9 @@ postDominance | PostDominance.cs:3:7:3:19 | {...} | PostDominance.cs:3:7:3:19 | After call to constructor Object | | PostDominance.cs:5:10:5:11 | Exit | PostDominance.cs:5:10:5:11 | Normal Exit | | PostDominance.cs:5:10:5:11 | Normal Exit | PostDominance.cs:6:5:8:5 | After {...} | +| PostDominance.cs:5:20:5:20 | s | PostDominance.cs:5:10:5:11 | Entry | | PostDominance.cs:6:5:8:5 | After {...} | PostDominance.cs:7:9:7:29 | After ...; | -| PostDominance.cs:6:5:8:5 | {...} | PostDominance.cs:5:10:5:11 | Entry | +| PostDominance.cs:6:5:8:5 | {...} | PostDominance.cs:5:20:5:20 | s | | PostDominance.cs:7:9:7:28 | After call to method WriteLine | PostDominance.cs:7:9:7:28 | call to method WriteLine | | PostDominance.cs:7:9:7:28 | Before call to method WriteLine | PostDominance.cs:7:9:7:29 | ...; | | PostDominance.cs:7:9:7:28 | call to method WriteLine | PostDominance.cs:7:27:7:27 | access to parameter s | @@ -12831,8 +13170,9 @@ postDominance | PostDominance.cs:10:10:10:11 | Exit | PostDominance.cs:10:10:10:11 | Normal Exit | | PostDominance.cs:10:10:10:11 | Normal Exit | PostDominance.cs:11:5:15:5 | After {...} | | PostDominance.cs:10:10:10:11 | Normal Exit | PostDominance.cs:13:13:13:19 | return ...; | +| PostDominance.cs:10:20:10:20 | s | PostDominance.cs:10:10:10:11 | Entry | | PostDominance.cs:11:5:15:5 | After {...} | PostDominance.cs:14:9:14:29 | After ...; | -| PostDominance.cs:11:5:15:5 | {...} | PostDominance.cs:10:10:10:11 | Entry | +| PostDominance.cs:11:5:15:5 | {...} | PostDominance.cs:10:20:10:20 | s | | PostDominance.cs:12:9:13:19 | After if (...) ... | PostDominance.cs:12:13:12:21 | After ... is ... [false] | | PostDominance.cs:12:9:13:19 | if (...) ... | PostDominance.cs:11:5:15:5 | {...} | | PostDominance.cs:12:13:12:13 | access to parameter s | PostDominance.cs:12:13:12:21 | Before ... is ... | @@ -12850,8 +13190,9 @@ postDominance | PostDominance.cs:14:27:14:27 | access to parameter s | PostDominance.cs:14:9:14:28 | Before call to method WriteLine | | PostDominance.cs:17:10:17:11 | Exceptional Exit | PostDominance.cs:20:13:20:55 | throw ...; | | PostDominance.cs:17:10:17:11 | Normal Exit | PostDominance.cs:18:5:22:5 | After {...} | +| PostDominance.cs:17:20:17:20 | s | PostDominance.cs:17:10:17:11 | Entry | | PostDominance.cs:18:5:22:5 | After {...} | PostDominance.cs:21:9:21:29 | After ...; | -| PostDominance.cs:18:5:22:5 | {...} | PostDominance.cs:17:10:17:11 | Entry | +| PostDominance.cs:18:5:22:5 | {...} | PostDominance.cs:17:20:17:20 | s | | PostDominance.cs:19:9:20:55 | After if (...) ... | PostDominance.cs:19:13:19:21 | After ... is ... [false] | | PostDominance.cs:19:9:20:55 | if (...) ... | PostDominance.cs:18:5:22:5 | {...} | | PostDominance.cs:19:13:19:13 | access to parameter s | PostDominance.cs:19:13:19:21 | Before ... is ... | @@ -13048,8 +13389,9 @@ postDominance | Switch.cs:3:7:3:12 | {...} | Switch.cs:3:7:3:12 | After call to constructor Object | | Switch.cs:5:10:5:11 | Exit | Switch.cs:5:10:5:11 | Normal Exit | | Switch.cs:5:10:5:11 | Normal Exit | Switch.cs:6:5:8:5 | After {...} | +| Switch.cs:5:20:5:20 | o | Switch.cs:5:10:5:11 | Entry | | Switch.cs:6:5:8:5 | After {...} | Switch.cs:7:9:7:22 | After switch (...) {...} | -| Switch.cs:6:5:8:5 | {...} | Switch.cs:5:10:5:11 | Entry | +| Switch.cs:6:5:8:5 | {...} | Switch.cs:5:20:5:20 | o | | Switch.cs:7:9:7:22 | After switch (...) {...} | Switch.cs:7:17:7:17 | access to parameter o | | Switch.cs:7:9:7:22 | switch (...) {...} | Switch.cs:6:5:8:5 | {...} | | Switch.cs:7:17:7:17 | access to parameter o | Switch.cs:7:9:7:22 | switch (...) {...} | @@ -13057,7 +13399,8 @@ postDominance | Switch.cs:10:10:10:11 | Normal Exit | Switch.cs:22:21:22:27 | return ...; | | Switch.cs:10:10:10:11 | Normal Exit | Switch.cs:26:17:26:23 | return ...; | | Switch.cs:10:10:10:11 | Normal Exit | Switch.cs:29:17:29:23 | return ...; | -| Switch.cs:11:5:33:5 | {...} | Switch.cs:10:10:10:11 | Entry | +| Switch.cs:10:20:10:20 | o | Switch.cs:10:10:10:11 | Entry | +| Switch.cs:11:5:33:5 | {...} | Switch.cs:10:20:10:20 | o | | Switch.cs:12:9:32:9 | switch (...) {...} | Switch.cs:11:5:33:5 | {...} | | Switch.cs:12:17:12:17 | access to parameter o | Switch.cs:12:9:32:9 | switch (...) {...} | | Switch.cs:14:13:14:21 | case ...: | Switch.cs:12:17:12:17 | access to parameter o | @@ -13137,8 +13480,9 @@ postDominance | Switch.cs:37:17:37:23 | call to method Throw | Switch.cs:37:17:37:23 | Before call to method Throw | | Switch.cs:44:10:44:11 | Exit | Switch.cs:44:10:44:11 | Normal Exit | | Switch.cs:44:10:44:11 | Normal Exit | Switch.cs:45:5:53:5 | After {...} | +| Switch.cs:44:20:44:20 | o | Switch.cs:44:10:44:11 | Entry | | Switch.cs:45:5:53:5 | After {...} | Switch.cs:46:9:52:9 | After switch (...) {...} | -| Switch.cs:45:5:53:5 | {...} | Switch.cs:44:10:44:11 | Entry | +| Switch.cs:45:5:53:5 | {...} | Switch.cs:44:20:44:20 | o | | Switch.cs:46:9:52:9 | After switch (...) {...} | Switch.cs:49:17:49:22 | break; | | Switch.cs:46:9:52:9 | After switch (...) {...} | Switch.cs:50:13:50:39 | After case ...: [no-match] | | Switch.cs:46:9:52:9 | After switch (...) {...} | Switch.cs:50:30:50:38 | After ... != ... [false] | @@ -13180,8 +13524,9 @@ postDominance | Switch.cs:62:17:62:22 | break; | Switch.cs:62:17:62:22 | Before break; | | Switch.cs:66:10:66:11 | Exit | Switch.cs:66:10:66:11 | Normal Exit | | Switch.cs:66:10:66:11 | Normal Exit | Switch.cs:67:5:75:5 | After {...} | +| Switch.cs:66:20:66:20 | s | Switch.cs:66:10:66:11 | Entry | | Switch.cs:67:5:75:5 | After {...} | Switch.cs:68:9:74:9 | After switch (...) {...} | -| Switch.cs:67:5:75:5 | {...} | Switch.cs:66:10:66:11 | Entry | +| Switch.cs:67:5:75:5 | {...} | Switch.cs:66:20:66:20 | s | | Switch.cs:68:9:74:9 | After switch (...) {...} | Switch.cs:71:17:71:22 | break; | | Switch.cs:68:9:74:9 | After switch (...) {...} | Switch.cs:72:13:72:20 | After case ...: [no-match] | | Switch.cs:68:9:74:9 | After switch (...) {...} | Switch.cs:73:17:73:22 | break; | @@ -13202,7 +13547,9 @@ postDominance | Switch.cs:77:10:77:11 | Normal Exit | Switch.cs:82:17:82:28 | return ...; | | Switch.cs:77:10:77:11 | Normal Exit | Switch.cs:86:17:86:28 | return ...; | | Switch.cs:77:10:77:11 | Normal Exit | Switch.cs:88:9:88:21 | return ...; | -| Switch.cs:78:5:89:5 | {...} | Switch.cs:77:10:77:11 | Entry | +| Switch.cs:77:17:77:17 | i | Switch.cs:77:10:77:11 | Entry | +| Switch.cs:77:24:77:24 | j | Switch.cs:77:17:77:17 | i | +| Switch.cs:78:5:89:5 | {...} | Switch.cs:77:24:77:24 | j | | Switch.cs:79:9:87:9 | After switch (...) {...} | Switch.cs:83:13:83:19 | After case ...: [no-match] | | Switch.cs:79:9:87:9 | After switch (...) {...} | Switch.cs:85:21:85:26 | break; | | Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:78:5:89:5 | {...} | @@ -13231,7 +13578,8 @@ postDominance | Switch.cs:91:10:91:11 | Exit | Switch.cs:91:10:91:11 | Normal Exit | | Switch.cs:91:10:91:11 | Normal Exit | Switch.cs:96:17:96:28 | return ...; | | Switch.cs:91:10:91:11 | Normal Exit | Switch.cs:98:9:98:21 | return ...; | -| Switch.cs:92:5:99:5 | {...} | Switch.cs:91:10:91:11 | Entry | +| Switch.cs:91:20:91:20 | o | Switch.cs:91:10:91:11 | Entry | +| Switch.cs:92:5:99:5 | {...} | Switch.cs:91:20:91:20 | o | | Switch.cs:93:9:97:9 | After switch (...) {...} | Switch.cs:95:13:95:23 | After case ...: [no-match] | | Switch.cs:93:9:97:9 | switch (...) {...} | Switch.cs:92:5:99:5 | {...} | | Switch.cs:93:17:93:17 | access to parameter o | Switch.cs:93:9:97:9 | switch (...) {...} | @@ -13247,7 +13595,8 @@ postDominance | Switch.cs:101:9:101:10 | Normal Exit | Switch.cs:105:21:105:29 | return ...; | | Switch.cs:101:9:101:10 | Normal Exit | Switch.cs:106:21:106:29 | return ...; | | Switch.cs:101:9:101:10 | Normal Exit | Switch.cs:108:9:108:18 | return ...; | -| Switch.cs:102:5:109:5 | {...} | Switch.cs:101:9:101:10 | Entry | +| Switch.cs:101:19:101:19 | s | Switch.cs:101:9:101:10 | Entry | +| Switch.cs:102:5:109:5 | {...} | Switch.cs:101:19:101:19 | s | | Switch.cs:103:9:107:9 | After switch (...) {...} | Switch.cs:106:13:106:19 | After case ...: [no-match] | | Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:102:5:109:5 | {...} | | Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:103:17:103:25 | Before access to property Length | @@ -13282,7 +13631,8 @@ postDominance | Switch.cs:113:9:113:11 | Normal Exit | Switch.cs:117:37:117:45 | return ...; | | Switch.cs:113:9:113:11 | Normal Exit | Switch.cs:118:36:118:44 | return ...; | | Switch.cs:113:9:113:11 | Normal Exit | Switch.cs:120:9:120:18 | return ...; | -| Switch.cs:114:5:121:5 | {...} | Switch.cs:113:9:113:11 | Entry | +| Switch.cs:113:20:113:20 | s | Switch.cs:113:9:113:11 | Entry | +| Switch.cs:114:5:121:5 | {...} | Switch.cs:113:20:113:20 | s | | Switch.cs:115:9:119:9 | After switch (...) {...} | Switch.cs:118:13:118:34 | After case ...: [no-match] | | Switch.cs:115:9:119:9 | After switch (...) {...} | Switch.cs:118:25:118:33 | After ... == ... [false] | | Switch.cs:115:9:119:9 | switch (...) {...} | Switch.cs:114:5:121:5 | {...} | @@ -13318,8 +13668,9 @@ postDominance | Switch.cs:123:10:123:12 | Exit | Switch.cs:123:10:123:12 | Normal Exit | | Switch.cs:123:10:123:12 | Normal Exit | Switch.cs:124:5:127:5 | After {...} | | Switch.cs:123:10:123:12 | Normal Exit | Switch.cs:126:13:126:19 | return ...; | +| Switch.cs:123:21:123:21 | o | Switch.cs:123:10:123:12 | Entry | | Switch.cs:124:5:127:5 | After {...} | Switch.cs:125:9:126:19 | After if (...) ... | -| Switch.cs:124:5:127:5 | {...} | Switch.cs:123:10:123:12 | Entry | +| Switch.cs:124:5:127:5 | {...} | Switch.cs:123:21:123:21 | o | | Switch.cs:125:9:126:19 | After if (...) ... | Switch.cs:125:13:125:48 | After ... switch { ... } [false] | | Switch.cs:125:9:126:19 | if (...) ... | Switch.cs:124:5:127:5 | {...} | | Switch.cs:125:13:125:13 | access to parameter o | Switch.cs:125:13:125:48 | ... switch { ... } | @@ -13335,7 +13686,8 @@ postDominance | Switch.cs:126:13:126:19 | return ...; | Switch.cs:126:13:126:19 | Before return ...; | | Switch.cs:129:12:129:14 | Exit | Switch.cs:129:12:129:14 | Normal Exit | | Switch.cs:129:12:129:14 | Normal Exit | Switch.cs:131:9:131:67 | return ...; | -| Switch.cs:130:5:132:5 | {...} | Switch.cs:129:12:129:14 | Entry | +| Switch.cs:129:23:129:23 | o | Switch.cs:129:12:129:14 | Entry | +| Switch.cs:130:5:132:5 | {...} | Switch.cs:129:23:129:23 | o | | Switch.cs:131:9:131:67 | Before return ...; | Switch.cs:130:5:132:5 | {...} | | Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:16:131:66 | After call to method ToString | | Switch.cs:131:16:131:66 | After call to method ToString | Switch.cs:131:16:131:66 | call to method ToString | @@ -13355,7 +13707,8 @@ postDominance | Switch.cs:134:9:134:11 | Normal Exit | Switch.cs:138:22:138:31 | return ...; | | Switch.cs:134:9:134:11 | Normal Exit | Switch.cs:139:21:139:29 | return ...; | | Switch.cs:134:9:134:11 | Normal Exit | Switch.cs:140:21:140:29 | return ...; | -| Switch.cs:135:5:142:5 | {...} | Switch.cs:134:9:134:11 | Entry | +| Switch.cs:134:17:134:17 | i | Switch.cs:134:9:134:11 | Entry | +| Switch.cs:135:5:142:5 | {...} | Switch.cs:134:17:134:17 | i | | Switch.cs:136:9:141:9 | switch (...) {...} | Switch.cs:135:5:142:5 | {...} | | Switch.cs:136:17:136:17 | access to parameter i | Switch.cs:136:9:141:9 | switch (...) {...} | | Switch.cs:138:13:138:20 | After default: [match] | Switch.cs:138:13:138:20 | default: | @@ -13380,7 +13733,8 @@ postDominance | Switch.cs:144:9:144:11 | Normal Exit | Switch.cs:148:21:148:29 | return ...; | | Switch.cs:144:9:144:11 | Normal Exit | Switch.cs:149:22:149:31 | return ...; | | Switch.cs:144:9:144:11 | Normal Exit | Switch.cs:150:21:150:29 | return ...; | -| Switch.cs:145:5:152:5 | {...} | Switch.cs:144:9:144:11 | Entry | +| Switch.cs:144:17:144:17 | i | Switch.cs:144:9:144:11 | Entry | +| Switch.cs:145:5:152:5 | {...} | Switch.cs:144:17:144:17 | i | | Switch.cs:146:9:151:9 | switch (...) {...} | Switch.cs:145:5:152:5 | {...} | | Switch.cs:146:17:146:17 | access to parameter i | Switch.cs:146:9:151:9 | switch (...) {...} | | Switch.cs:148:13:148:19 | case ...: | Switch.cs:146:17:146:17 | access to parameter i | @@ -13403,8 +13757,9 @@ postDominance | Switch.cs:150:28:150:28 | 2 | Switch.cs:150:21:150:29 | Before return ...; | | Switch.cs:154:10:154:12 | Exit | Switch.cs:154:10:154:12 | Normal Exit | | Switch.cs:154:10:154:12 | Normal Exit | Switch.cs:155:5:161:5 | After {...} | +| Switch.cs:154:19:154:19 | b | Switch.cs:154:10:154:12 | Entry | | Switch.cs:155:5:161:5 | After {...} | Switch.cs:157:9:160:49 | After if (...) ... | -| Switch.cs:155:5:161:5 | {...} | Switch.cs:154:10:154:12 | Entry | +| Switch.cs:155:5:161:5 | {...} | Switch.cs:154:19:154:19 | b | | Switch.cs:156:9:156:55 | ... ...; | Switch.cs:155:5:161:5 | {...} | | Switch.cs:156:9:156:55 | After ... ...; | Switch.cs:156:13:156:54 | After String s = ... | | Switch.cs:156:13:156:13 | access to local variable s | Switch.cs:156:13:156:54 | Before String s = ... | @@ -13454,8 +13809,9 @@ postDominance | Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:44:160:46 | Before {...} | | Switch.cs:163:10:163:12 | Exit | Switch.cs:163:10:163:12 | Normal Exit | | Switch.cs:163:10:163:12 | Normal Exit | Switch.cs:164:5:178:5 | After {...} | +| Switch.cs:163:18:163:18 | i | Switch.cs:163:10:163:12 | Entry | | Switch.cs:164:5:178:5 | After {...} | Switch.cs:165:9:177:9 | After switch (...) {...} | -| Switch.cs:164:5:178:5 | {...} | Switch.cs:163:10:163:12 | Entry | +| Switch.cs:164:5:178:5 | {...} | Switch.cs:163:18:163:18 | i | | Switch.cs:165:9:177:9 | After switch (...) {...} | Switch.cs:170:17:170:22 | break; | | Switch.cs:165:9:177:9 | After switch (...) {...} | Switch.cs:173:17:173:22 | break; | | Switch.cs:165:9:177:9 | After switch (...) {...} | Switch.cs:176:17:176:22 | break; | @@ -13506,8 +13862,9 @@ postDominance | TypeAccesses.cs:1:7:1:18 | {...} | TypeAccesses.cs:1:7:1:18 | After call to constructor Object | | TypeAccesses.cs:3:10:3:10 | Exit | TypeAccesses.cs:3:10:3:10 | Normal Exit | | TypeAccesses.cs:3:10:3:10 | Normal Exit | TypeAccesses.cs:4:5:9:5 | After {...} | +| TypeAccesses.cs:3:19:3:19 | o | TypeAccesses.cs:3:10:3:10 | Entry | | TypeAccesses.cs:4:5:9:5 | After {...} | TypeAccesses.cs:8:9:8:28 | After ... ...; | -| TypeAccesses.cs:4:5:9:5 | {...} | TypeAccesses.cs:3:10:3:10 | Entry | +| TypeAccesses.cs:4:5:9:5 | {...} | TypeAccesses.cs:3:19:3:19 | o | | TypeAccesses.cs:5:9:5:26 | ... ...; | TypeAccesses.cs:4:5:9:5 | {...} | | TypeAccesses.cs:5:9:5:26 | After ... ...; | TypeAccesses.cs:5:13:5:25 | After String s = ... | | TypeAccesses.cs:5:13:5:13 | access to local variable s | TypeAccesses.cs:5:13:5:25 | Before String s = ... | @@ -13556,7 +13913,8 @@ postDominance | VarDecls.cs:3:7:3:14 | {...} | VarDecls.cs:3:7:3:14 | After call to constructor Object | | VarDecls.cs:5:18:5:19 | Exit | VarDecls.cs:5:18:5:19 | Normal Exit | | VarDecls.cs:5:18:5:19 | Normal Exit | VarDecls.cs:9:13:9:29 | return ...; | -| VarDecls.cs:6:5:11:5 | {...} | VarDecls.cs:5:18:5:19 | Entry | +| VarDecls.cs:5:30:5:36 | strings | VarDecls.cs:5:18:5:19 | Entry | +| VarDecls.cs:6:5:11:5 | {...} | VarDecls.cs:5:30:5:36 | strings | | VarDecls.cs:7:9:10:9 | fixed(...) { ... } | VarDecls.cs:6:5:11:5 | {...} | | VarDecls.cs:7:22:7:23 | access to local variable c1 | VarDecls.cs:7:22:7:36 | Before Char* c1 = ... | | VarDecls.cs:7:22:7:36 | After Char* c1 = ... | VarDecls.cs:7:22:7:36 | Char* c1 = ... | @@ -13591,7 +13949,8 @@ postDominance | VarDecls.cs:9:27:9:28 | access to local variable c1 | VarDecls.cs:9:20:9:28 | Before (...) ... | | VarDecls.cs:13:12:13:13 | Exit | VarDecls.cs:13:12:13:13 | Normal Exit | | VarDecls.cs:13:12:13:13 | Normal Exit | VarDecls.cs:16:9:16:23 | return ...; | -| VarDecls.cs:14:5:17:5 | {...} | VarDecls.cs:13:12:13:13 | Entry | +| VarDecls.cs:13:22:13:22 | s | VarDecls.cs:13:12:13:13 | Entry | +| VarDecls.cs:14:5:17:5 | {...} | VarDecls.cs:13:22:13:22 | s | | VarDecls.cs:15:9:15:30 | ... ...; | VarDecls.cs:14:5:17:5 | {...} | | VarDecls.cs:15:9:15:30 | After ... ...; | VarDecls.cs:15:24:15:29 | After String s2 = ... | | VarDecls.cs:15:16:15:17 | access to local variable s1 | VarDecls.cs:15:16:15:21 | Before String s1 = ... | @@ -13613,7 +13972,8 @@ postDominance | VarDecls.cs:16:21:16:22 | access to local variable s2 | VarDecls.cs:16:16:16:17 | access to local variable s1 | | VarDecls.cs:19:7:19:8 | Exit | VarDecls.cs:19:7:19:8 | Normal Exit | | VarDecls.cs:19:7:19:8 | Normal Exit | VarDecls.cs:25:13:25:29 | return ...; | -| VarDecls.cs:20:5:26:5 | {...} | VarDecls.cs:19:7:19:8 | Entry | +| VarDecls.cs:19:15:19:15 | b | VarDecls.cs:19:7:19:8 | Entry | +| VarDecls.cs:20:5:26:5 | {...} | VarDecls.cs:19:15:19:15 | b | | VarDecls.cs:21:9:22:13 | After using (...) {...} | VarDecls.cs:22:13:22:13 | ; | | VarDecls.cs:21:9:22:13 | using (...) {...} | VarDecls.cs:20:5:26:5 | {...} | | VarDecls.cs:21:16:21:22 | After object creation of type C | VarDecls.cs:21:16:21:22 | object creation of type C | @@ -13658,8 +14018,9 @@ postDominance | VarDecls.cs:28:51:28:53 | {...} | VarDecls.cs:28:41:28:47 | Entry | | cflow.cs:5:17:5:20 | Exit | cflow.cs:5:17:5:20 | Normal Exit | | cflow.cs:5:17:5:20 | Normal Exit | cflow.cs:6:5:35:5 | After {...} | +| cflow.cs:5:31:5:34 | args | cflow.cs:5:17:5:20 | Entry | | cflow.cs:6:5:35:5 | After {...} | cflow.cs:24:9:34:9 | After for (...;...;...) ... | -| cflow.cs:6:5:35:5 | {...} | cflow.cs:5:17:5:20 | Entry | +| cflow.cs:6:5:35:5 | {...} | cflow.cs:5:31:5:34 | args | | cflow.cs:7:9:7:28 | ... ...; | cflow.cs:6:5:35:5 | {...} | | cflow.cs:7:9:7:28 | After ... ...; | cflow.cs:7:13:7:27 | After Int32 a = ... | | cflow.cs:7:13:7:13 | access to local variable a | cflow.cs:7:13:7:27 | Before Int32 a = ... | @@ -13834,7 +14195,8 @@ postDominance | cflow.cs:33:35:33:35 | access to local variable i | cflow.cs:33:17:33:36 | Before call to method WriteLine | | cflow.cs:37:17:37:22 | Exceptional Exit | cflow.cs:64:21:64:55 | throw ...; | | cflow.cs:37:17:37:22 | Normal Exit | cflow.cs:67:9:67:17 | return ...; | -| cflow.cs:38:5:68:5 | {...} | cflow.cs:37:17:37:22 | Entry | +| cflow.cs:37:28:37:28 | a | cflow.cs:37:17:37:22 | Entry | +| cflow.cs:38:5:68:5 | {...} | cflow.cs:37:28:37:28 | a | | cflow.cs:39:9:50:9 | After switch (...) {...} | cflow.cs:47:13:47:19 | After case ...: [no-match] | | cflow.cs:39:9:50:9 | After switch (...) {...} | cflow.cs:49:17:49:22 | break; | | cflow.cs:39:9:50:9 | switch (...) {...} | cflow.cs:38:5:68:5 | {...} | @@ -13935,8 +14297,9 @@ postDominance | cflow.cs:70:18:70:18 | Exit | cflow.cs:70:18:70:18 | Normal Exit | | cflow.cs:70:18:70:18 | Normal Exit | cflow.cs:71:5:82:5 | After {...} | | cflow.cs:70:18:70:18 | Normal Exit | cflow.cs:73:13:73:19 | return ...; | +| cflow.cs:70:27:70:27 | s | cflow.cs:70:18:70:18 | Entry | | cflow.cs:71:5:82:5 | After {...} | cflow.cs:74:9:81:9 | After if (...) ... | -| cflow.cs:71:5:82:5 | {...} | cflow.cs:70:18:70:18 | Entry | +| cflow.cs:71:5:82:5 | {...} | cflow.cs:70:27:70:27 | s | | cflow.cs:72:9:73:19 | After if (...) ... | cflow.cs:72:13:72:21 | After ... == ... [false] | | cflow.cs:72:9:73:19 | if (...) ... | cflow.cs:71:5:82:5 | {...} | | cflow.cs:72:13:72:13 | access to parameter s | cflow.cs:72:13:72:21 | Before ... == ... | @@ -13973,8 +14336,9 @@ postDominance | cflow.cs:80:31:80:46 | "" | cflow.cs:80:13:80:47 | Before call to method WriteLine | | cflow.cs:84:18:84:19 | Exit | cflow.cs:84:18:84:19 | Normal Exit | | cflow.cs:84:18:84:19 | Normal Exit | cflow.cs:85:5:88:5 | After {...} | +| cflow.cs:84:28:84:28 | s | cflow.cs:84:18:84:19 | Entry | | cflow.cs:85:5:88:5 | After {...} | cflow.cs:86:9:87:33 | After if (...) ... | -| cflow.cs:85:5:88:5 | {...} | cflow.cs:84:18:84:19 | Entry | +| cflow.cs:85:5:88:5 | {...} | cflow.cs:84:28:84:28 | s | | cflow.cs:86:9:87:33 | After if (...) ... | cflow.cs:86:13:86:37 | After ... && ... [false] | | cflow.cs:86:9:87:33 | After if (...) ... | cflow.cs:87:13:87:33 | After ...; | | cflow.cs:86:9:87:33 | if (...) ... | cflow.cs:85:5:88:5 | {...} | @@ -14001,8 +14365,9 @@ postDominance | cflow.cs:87:31:87:31 | access to parameter s | cflow.cs:87:13:87:32 | Before call to method WriteLine | | cflow.cs:90:18:90:19 | Exceptional Exit | cflow.cs:93:13:93:49 | throw ...; | | cflow.cs:90:18:90:19 | Normal Exit | cflow.cs:91:5:104:5 | After {...} | +| cflow.cs:90:28:90:28 | s | cflow.cs:90:18:90:19 | Entry | | cflow.cs:91:5:104:5 | After {...} | cflow.cs:102:9:103:36 | After if (...) ... | -| cflow.cs:91:5:104:5 | {...} | cflow.cs:90:18:90:19 | Entry | +| cflow.cs:91:5:104:5 | {...} | cflow.cs:90:28:90:28 | s | | cflow.cs:92:9:93:49 | After if (...) ... | cflow.cs:92:13:92:27 | After call to method Equals [false] | | cflow.cs:92:9:93:49 | if (...) ... | cflow.cs:91:5:104:5 | {...} | | cflow.cs:92:13:92:27 | After call to method Equals [false] | cflow.cs:92:13:92:27 | call to method Equals | @@ -14083,8 +14448,9 @@ postDominance | cflow.cs:103:31:103:34 | this access | cflow.cs:103:31:103:34 | Before access to property Prop | | cflow.cs:106:18:106:19 | Exit | cflow.cs:106:18:106:19 | Normal Exit | | cflow.cs:106:18:106:19 | Normal Exit | cflow.cs:107:5:117:5 | After {...} | +| cflow.cs:106:28:106:28 | s | cflow.cs:106:18:106:19 | Entry | | cflow.cs:107:5:117:5 | After {...} | cflow.cs:116:9:116:29 | After ...; | -| cflow.cs:107:5:117:5 | {...} | cflow.cs:106:18:106:19 | Entry | +| cflow.cs:107:5:117:5 | {...} | cflow.cs:106:28:106:28 | s | | cflow.cs:108:9:115:9 | After if (...) ... | cflow.cs:108:13:108:21 | After ... != ... [false] | | cflow.cs:108:9:115:9 | if (...) ... | cflow.cs:107:5:117:5 | {...} | | cflow.cs:108:13:108:13 | access to parameter s | cflow.cs:108:13:108:21 | Before ... != ... | @@ -14112,7 +14478,8 @@ postDominance | cflow.cs:116:27:116:27 | access to parameter s | cflow.cs:116:9:116:28 | Before call to method WriteLine | | cflow.cs:119:20:119:21 | Exit | cflow.cs:119:20:119:21 | Normal Exit | | cflow.cs:119:20:119:21 | Normal Exit | cflow.cs:123:9:123:17 | return ...; | -| cflow.cs:120:5:124:5 | {...} | cflow.cs:119:20:119:21 | Entry | +| cflow.cs:119:30:119:30 | s | cflow.cs:119:20:119:21 | Entry | +| cflow.cs:120:5:124:5 | {...} | cflow.cs:119:30:119:30 | s | | cflow.cs:121:9:121:18 | ... ...; | cflow.cs:120:5:124:5 | {...} | | cflow.cs:121:9:121:18 | After ... ...; | cflow.cs:121:13:121:17 | After String x = ... | | cflow.cs:121:13:121:13 | access to local variable x | cflow.cs:121:13:121:17 | Before String x = ... | @@ -14156,8 +14523,9 @@ postDominance | cflow.cs:127:53:127:57 | this access | cflow.cs:127:53:127:57 | Before access to field Field | | cflow.cs:127:62:127:64 | Exit | cflow.cs:127:62:127:64 | Normal Exit | | cflow.cs:127:62:127:64 | Normal Exit | cflow.cs:127:66:127:83 | After {...} | +| cflow.cs:127:62:127:64 | value | cflow.cs:127:62:127:64 | Entry | | cflow.cs:127:66:127:83 | After {...} | cflow.cs:127:68:127:81 | After ...; | -| cflow.cs:127:66:127:83 | {...} | cflow.cs:127:62:127:64 | Entry | +| cflow.cs:127:66:127:83 | {...} | cflow.cs:127:62:127:64 | value | | cflow.cs:127:68:127:72 | After access to field Field | cflow.cs:127:68:127:72 | access to field Field | | cflow.cs:127:68:127:72 | Before access to field Field | cflow.cs:127:68:127:80 | Before ... = ... | | cflow.cs:127:68:127:72 | access to field Field | cflow.cs:127:68:127:72 | this access | @@ -14171,12 +14539,13 @@ postDominance | cflow.cs:129:5:129:15 | After call to constructor Object | cflow.cs:129:5:129:15 | call to constructor Object | | cflow.cs:129:5:129:15 | After call to method | cflow.cs:129:5:129:15 | call to method | | cflow.cs:129:5:129:15 | Before call to constructor Object | cflow.cs:129:5:129:15 | After call to method | -| cflow.cs:129:5:129:15 | Before call to method | cflow.cs:129:5:129:15 | Entry | +| cflow.cs:129:5:129:15 | Before call to method | cflow.cs:129:24:129:24 | s | | cflow.cs:129:5:129:15 | Exit | cflow.cs:129:5:129:15 | Normal Exit | | cflow.cs:129:5:129:15 | Normal Exit | cflow.cs:130:5:132:5 | After {...} | | cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:129:5:129:15 | Before call to constructor Object | | cflow.cs:129:5:129:15 | call to method | cflow.cs:129:5:129:15 | this access | | cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | Before call to method | +| cflow.cs:129:24:129:24 | s | cflow.cs:129:5:129:15 | Entry | | cflow.cs:130:5:132:5 | After {...} | cflow.cs:131:9:131:18 | After ...; | | cflow.cs:130:5:132:5 | {...} | cflow.cs:129:5:129:15 | After call to constructor Object | | cflow.cs:131:9:131:13 | After access to field Field | cflow.cs:131:9:131:13 | access to field Field | @@ -14191,8 +14560,9 @@ postDominance | cflow.cs:131:17:131:17 | access to parameter s | cflow.cs:131:9:131:13 | After access to field Field | | cflow.cs:134:5:134:15 | Exit | cflow.cs:134:5:134:15 | Normal Exit | | cflow.cs:134:5:134:15 | Normal Exit | cflow.cs:134:39:134:41 | {...} | +| cflow.cs:134:21:134:21 | i | cflow.cs:134:5:134:15 | Entry | | cflow.cs:134:26:134:29 | After call to constructor ControlFlow | cflow.cs:134:26:134:29 | call to constructor ControlFlow | -| cflow.cs:134:26:134:29 | Before call to constructor ControlFlow | cflow.cs:134:5:134:15 | Entry | +| cflow.cs:134:26:134:29 | Before call to constructor ControlFlow | cflow.cs:134:21:134:21 | i | | cflow.cs:134:26:134:29 | call to constructor ControlFlow | cflow.cs:134:31:134:36 | After ... + ... | | cflow.cs:134:31:134:31 | (...) ... | cflow.cs:134:31:134:31 | access to parameter i | | cflow.cs:134:31:134:31 | After (...) ... | cflow.cs:134:31:134:31 | (...) ... | @@ -14216,7 +14586,9 @@ postDominance | cflow.cs:136:40:136:42 | {...} | cflow.cs:136:28:136:31 | After call to constructor ControlFlow | | cflow.cs:138:40:138:40 | Exit | cflow.cs:138:40:138:40 | Normal Exit | | cflow.cs:138:40:138:40 | Normal Exit | cflow.cs:141:9:141:17 | return ...; | -| cflow.cs:139:5:142:5 | {...} | cflow.cs:138:40:138:40 | Entry | +| cflow.cs:138:54:138:54 | x | cflow.cs:138:40:138:40 | Entry | +| cflow.cs:138:69:138:69 | y | cflow.cs:138:54:138:54 | x | +| cflow.cs:139:5:142:5 | {...} | cflow.cs:138:69:138:69 | y | | cflow.cs:140:9:140:28 | After call to method WriteLine | cflow.cs:140:9:140:28 | call to method WriteLine | | cflow.cs:140:9:140:28 | Before call to method WriteLine | cflow.cs:140:9:140:29 | ...; | | cflow.cs:140:9:140:28 | call to method WriteLine | cflow.cs:140:27:140:27 | access to parameter x | @@ -14226,9 +14598,11 @@ postDominance | cflow.cs:141:9:141:17 | Before return ...; | cflow.cs:140:9:140:29 | After ...; | | cflow.cs:141:9:141:17 | return ...; | cflow.cs:141:16:141:16 | access to parameter y | | cflow.cs:141:16:141:16 | access to parameter y | cflow.cs:141:9:141:17 | Before return ...; | +| cflow.cs:144:28:144:28 | i | cflow.cs:144:33:144:35 | Entry | +| cflow.cs:144:28:144:28 | i | cflow.cs:144:56:144:58 | Entry | | cflow.cs:144:33:144:35 | Exit | cflow.cs:144:33:144:35 | Normal Exit | | cflow.cs:144:33:144:35 | Normal Exit | cflow.cs:144:39:144:52 | return ...; | -| cflow.cs:144:37:144:54 | {...} | cflow.cs:144:33:144:35 | Entry | +| cflow.cs:144:37:144:54 | {...} | cflow.cs:144:28:144:28 | i | | cflow.cs:144:39:144:52 | Before return ...; | cflow.cs:144:37:144:54 | {...} | | cflow.cs:144:39:144:52 | return ...; | cflow.cs:144:46:144:51 | After ... + ... | | cflow.cs:144:46:144:46 | (...) ... | cflow.cs:144:46:144:46 | access to parameter i | @@ -14241,7 +14615,8 @@ postDominance | cflow.cs:144:50:144:51 | "" | cflow.cs:144:46:144:46 | After (...) ... | | cflow.cs:144:56:144:58 | Exit | cflow.cs:144:56:144:58 | Normal Exit | | cflow.cs:144:56:144:58 | Normal Exit | cflow.cs:144:60:144:62 | {...} | -| cflow.cs:144:60:144:62 | {...} | cflow.cs:144:56:144:58 | Entry | +| cflow.cs:144:56:144:58 | value | cflow.cs:144:28:144:28 | i | +| cflow.cs:144:60:144:62 | {...} | cflow.cs:144:56:144:58 | value | | cflow.cs:146:10:146:12 | Exit | cflow.cs:146:10:146:12 | Normal Exit | | cflow.cs:146:10:146:12 | Normal Exit | cflow.cs:147:5:177:5 | After {...} | | cflow.cs:147:5:177:5 | After {...} | cflow.cs:173:9:176:9 | After for (...;...;...) ... | @@ -14400,13 +14775,14 @@ postDominance | cflow.cs:181:24:181:37 | After Func y = ... | cflow.cs:181:24:181:37 | Func y = ... | | cflow.cs:181:24:181:37 | Before Func y = ... | cflow.cs:181:9:181:38 | ... ...; | | cflow.cs:181:24:181:37 | Func y = ... | cflow.cs:181:28:181:37 | (...) => ... | +| cflow.cs:181:28:181:28 | x | cflow.cs:181:28:181:37 | Entry | | cflow.cs:181:28:181:37 | (...) => ... | cflow.cs:181:24:181:24 | access to local variable y | | cflow.cs:181:28:181:37 | Exit | cflow.cs:181:28:181:37 | Normal Exit | | cflow.cs:181:28:181:37 | Normal Exit | cflow.cs:181:33:181:37 | After ... + ... | | cflow.cs:181:33:181:33 | access to parameter x | cflow.cs:181:33:181:37 | Before ... + ... | | cflow.cs:181:33:181:37 | ... + ... | cflow.cs:181:37:181:37 | 1 | | cflow.cs:181:33:181:37 | After ... + ... | cflow.cs:181:33:181:37 | ... + ... | -| cflow.cs:181:33:181:37 | Before ... + ... | cflow.cs:181:28:181:37 | Entry | +| cflow.cs:181:33:181:37 | Before ... + ... | cflow.cs:181:28:181:28 | x | | cflow.cs:181:37:181:37 | 1 | cflow.cs:181:33:181:33 | access to parameter x | | cflow.cs:182:9:182:62 | ... ...; | cflow.cs:181:9:181:38 | After ... ...; | | cflow.cs:182:9:182:62 | After ... ...; | cflow.cs:182:24:182:61 | After Func z = ... | @@ -14417,7 +14793,8 @@ postDominance | cflow.cs:182:28:182:61 | Exit | cflow.cs:182:28:182:61 | Normal Exit | | cflow.cs:182:28:182:61 | Normal Exit | cflow.cs:182:47:182:59 | return ...; | | cflow.cs:182:28:182:61 | delegate(...) { ... } | cflow.cs:182:24:182:24 | access to local variable z | -| cflow.cs:182:45:182:61 | {...} | cflow.cs:182:28:182:61 | Entry | +| cflow.cs:182:42:182:42 | x | cflow.cs:182:28:182:61 | Entry | +| cflow.cs:182:45:182:61 | {...} | cflow.cs:182:42:182:42 | x | | cflow.cs:182:47:182:59 | Before return ...; | cflow.cs:182:45:182:61 | {...} | | cflow.cs:182:47:182:59 | return ...; | cflow.cs:182:54:182:58 | After ... + ... | | cflow.cs:182:54:182:54 | access to parameter x | cflow.cs:182:54:182:58 | Before ... + ... | @@ -14859,14 +15236,16 @@ postDominance | cflow.cs:282:31:282:33 | {...} | cflow.cs:282:24:282:27 | After call to constructor ControlFlow | | cflow.cs:284:5:284:18 | Exit | cflow.cs:284:5:284:18 | Normal Exit | | cflow.cs:284:5:284:18 | Normal Exit | cflow.cs:284:39:284:41 | {...} | +| cflow.cs:284:27:284:27 | s | cflow.cs:284:5:284:18 | Entry | | cflow.cs:284:32:284:35 | After call to constructor ControlFlowSub | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub | -| cflow.cs:284:32:284:35 | Before call to constructor ControlFlowSub | cflow.cs:284:5:284:18 | Entry | +| cflow.cs:284:32:284:35 | Before call to constructor ControlFlowSub | cflow.cs:284:27:284:27 | s | | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub | cflow.cs:284:32:284:35 | Before call to constructor ControlFlowSub | | cflow.cs:284:39:284:41 | {...} | cflow.cs:284:32:284:35 | After call to constructor ControlFlowSub | | cflow.cs:286:5:286:18 | Exit | cflow.cs:286:5:286:18 | Normal Exit | | cflow.cs:286:5:286:18 | Normal Exit | cflow.cs:286:48:286:50 | {...} | +| cflow.cs:286:24:286:24 | i | cflow.cs:286:5:286:18 | Entry | | cflow.cs:286:29:286:32 | After call to constructor ControlFlowSub | cflow.cs:286:29:286:32 | call to constructor ControlFlowSub | -| cflow.cs:286:29:286:32 | Before call to constructor ControlFlowSub | cflow.cs:286:5:286:18 | Entry | +| cflow.cs:286:29:286:32 | Before call to constructor ControlFlowSub | cflow.cs:286:24:286:24 | i | | cflow.cs:286:29:286:32 | call to constructor ControlFlowSub | cflow.cs:286:34:286:45 | After call to method ToString | | cflow.cs:286:34:286:34 | access to parameter i | cflow.cs:286:34:286:45 | Before call to method ToString | | cflow.cs:286:34:286:45 | After call to method ToString | cflow.cs:286:34:286:45 | call to method ToString | @@ -14885,25 +15264,32 @@ postDominance | cflow.cs:289:7:289:18 | {...} | cflow.cs:289:7:289:18 | After call to constructor Object | | cflow.cs:291:12:291:12 | Exit | cflow.cs:291:12:291:12 | Normal Exit | | cflow.cs:291:12:291:12 | Normal Exit | cflow.cs:291:38:291:41 | After delegate call | +| cflow.cs:291:32:291:32 | f | cflow.cs:291:12:291:12 | Entry | | cflow.cs:291:38:291:38 | access to parameter f | cflow.cs:291:38:291:41 | Before delegate call | | cflow.cs:291:38:291:41 | After delegate call | cflow.cs:291:38:291:41 | delegate call | -| cflow.cs:291:38:291:41 | Before delegate call | cflow.cs:291:12:291:12 | Entry | +| cflow.cs:291:38:291:41 | Before delegate call | cflow.cs:291:32:291:32 | f | | cflow.cs:291:38:291:41 | delegate call | cflow.cs:291:40:291:40 | 0 | | cflow.cs:291:40:291:40 | 0 | cflow.cs:291:38:291:38 | access to parameter f | | cflow.cs:296:5:296:25 | After call to constructor Object | cflow.cs:296:5:296:25 | call to constructor Object | | cflow.cs:296:5:296:25 | After call to method | cflow.cs:296:5:296:25 | call to method | | cflow.cs:296:5:296:25 | Before call to constructor Object | cflow.cs:296:5:296:25 | After call to method | -| cflow.cs:296:5:296:25 | Before call to method | cflow.cs:296:5:296:25 | Entry | +| cflow.cs:296:5:296:25 | Before call to method | cflow.cs:296:49:296:49 | s | | cflow.cs:296:5:296:25 | Exit | cflow.cs:296:5:296:25 | Normal Exit | | cflow.cs:296:5:296:25 | Normal Exit | cflow.cs:296:52:296:54 | {...} | | cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:5:296:25 | Before call to constructor Object | | cflow.cs:296:5:296:25 | call to method | cflow.cs:296:5:296:25 | this access | | cflow.cs:296:5:296:25 | this access | cflow.cs:296:5:296:25 | Before call to method | +| cflow.cs:296:32:296:32 | b | cflow.cs:296:5:296:25 | Entry | +| cflow.cs:296:39:296:39 | i | cflow.cs:296:32:296:32 | b | +| cflow.cs:296:49:296:49 | s | cflow.cs:296:39:296:39 | i | | cflow.cs:296:52:296:54 | {...} | cflow.cs:296:5:296:25 | After call to constructor Object | | cflow.cs:298:10:298:10 | Exit | cflow.cs:298:10:298:10 | Normal Exit | | cflow.cs:298:10:298:10 | Normal Exit | cflow.cs:299:5:301:5 | After {...} | +| cflow.cs:298:16:298:16 | i | cflow.cs:298:10:298:10 | Entry | +| cflow.cs:298:26:298:26 | s | cflow.cs:298:16:298:16 | i | +| cflow.cs:298:34:298:34 | b | cflow.cs:298:26:298:26 | s | | cflow.cs:299:5:301:5 | After {...} | cflow.cs:300:9:300:73 | After ...; | -| cflow.cs:299:5:301:5 | {...} | cflow.cs:298:10:298:10 | Entry | +| cflow.cs:299:5:301:5 | {...} | cflow.cs:298:34:298:34 | b | | cflow.cs:300:9:300:72 | After object creation of type NegationInConstructor | cflow.cs:300:9:300:72 | object creation of type NegationInConstructor | | cflow.cs:300:9:300:72 | Before object creation of type NegationInConstructor | cflow.cs:300:9:300:73 | ...; | | cflow.cs:300:9:300:72 | object creation of type NegationInConstructor | cflow.cs:300:70:300:71 | "" | @@ -14941,7 +15327,9 @@ postDominance | cflow.cs:306:60:310:5 | Exit | cflow.cs:306:60:310:5 | Normal Exit | | cflow.cs:306:60:310:5 | Normal Exit | cflow.cs:306:60:310:5 | (...) => ... | | cflow.cs:306:60:310:5 | Normal Exit | cflow.cs:309:9:309:17 | return ...; | -| cflow.cs:307:5:310:5 | {...} | cflow.cs:306:60:310:5 | Entry | +| cflow.cs:306:61:306:61 | o | cflow.cs:306:60:310:5 | Entry | +| cflow.cs:306:64:306:64 | n | cflow.cs:306:61:306:61 | o | +| cflow.cs:307:5:310:5 | {...} | cflow.cs:306:64:306:64 | n | | cflow.cs:308:9:308:21 | ... ...; | cflow.cs:307:5:310:5 | {...} | | cflow.cs:308:9:308:21 | After ... ...; | cflow.cs:308:16:308:20 | After Object x = ... | | cflow.cs:308:16:308:16 | access to local variable x | cflow.cs:308:16:308:20 | Before Object x = ... | @@ -16804,6 +17192,21 @@ blockDominance | Conditions.cs:146:13:146:13 | After access to parameter b [true] | Conditions.cs:146:13:146:13 | After access to parameter b [true] | | DefaultParam.cs:1:7:1:18 | Entry | DefaultParam.cs:1:7:1:18 | Entry | | DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:12:3:13 | Entry | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:30:3:30 | After s [match] | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:30:3:30 | After s [no-match] | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:42:3:42 | After i [match] | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:42:3:42 | After i [no-match] | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:42:3:42 | i | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:4:5:6:5 | {...} | +| DefaultParam.cs:3:30:3:30 | After s [match] | DefaultParam.cs:3:30:3:30 | After s [match] | +| DefaultParam.cs:3:30:3:30 | After s [no-match] | DefaultParam.cs:3:30:3:30 | After s [no-match] | +| DefaultParam.cs:3:42:3:42 | After i [match] | DefaultParam.cs:3:42:3:42 | After i [match] | +| DefaultParam.cs:3:42:3:42 | After i [no-match] | DefaultParam.cs:3:42:3:42 | After i [no-match] | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | After i [match] | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | After i [no-match] | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | i | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:4:5:6:5 | {...} | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:4:5:6:5 | {...} | | ExitMethods.cs:6:7:6:17 | Entry | ExitMethods.cs:6:7:6:17 | Entry | | ExitMethods.cs:8:10:8:11 | Entry | ExitMethods.cs:8:10:8:11 | Entry | | ExitMethods.cs:14:10:14:11 | Entry | ExitMethods.cs:14:10:14:11 | Entry | @@ -21041,6 +21444,21 @@ postBlockDominance | Conditions.cs:146:13:146:13 | After access to parameter b [true] | Conditions.cs:146:13:146:13 | After access to parameter b [true] | | DefaultParam.cs:1:7:1:18 | Entry | DefaultParam.cs:1:7:1:18 | Entry | | DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:12:3:13 | Entry | +| DefaultParam.cs:3:30:3:30 | After s [match] | DefaultParam.cs:3:30:3:30 | After s [match] | +| DefaultParam.cs:3:30:3:30 | After s [no-match] | DefaultParam.cs:3:30:3:30 | After s [no-match] | +| DefaultParam.cs:3:42:3:42 | After i [match] | DefaultParam.cs:3:42:3:42 | After i [match] | +| DefaultParam.cs:3:42:3:42 | After i [no-match] | DefaultParam.cs:3:42:3:42 | After i [no-match] | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:12:3:13 | Entry | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:30:3:30 | After s [match] | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:30:3:30 | After s [no-match] | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | i | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:3:12:3:13 | Entry | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:3:30:3:30 | After s [match] | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:3:30:3:30 | After s [no-match] | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:3:42:3:42 | After i [match] | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:3:42:3:42 | After i [no-match] | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:3:42:3:42 | i | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:4:5:6:5 | {...} | | ExitMethods.cs:6:7:6:17 | Entry | ExitMethods.cs:6:7:6:17 | Entry | | ExitMethods.cs:8:10:8:11 | Entry | ExitMethods.cs:8:10:8:11 | Entry | | ExitMethods.cs:14:10:14:11 | Entry | ExitMethods.cs:14:10:14:11 | Entry | diff --git a/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected b/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected index 2df18eac6cb5..b0824d758a06 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected @@ -10,6 +10,8 @@ nodeEnclosing | AccessorCalls.cs:1:7:1:19 | call to method | AccessorCalls.cs:1:7:1:19 | AccessorCalls | | AccessorCalls.cs:1:7:1:19 | this access | AccessorCalls.cs:1:7:1:19 | AccessorCalls | | AccessorCalls.cs:1:7:1:19 | {...} | AccessorCalls.cs:1:7:1:19 | AccessorCalls | +| AccessorCalls.cs:5:18:5:18 | i | AccessorCalls.cs:5:23:5:25 | get_Item | +| AccessorCalls.cs:5:18:5:18 | i | AccessorCalls.cs:5:33:5:35 | set_Item | | AccessorCalls.cs:5:23:5:25 | Entry | AccessorCalls.cs:5:23:5:25 | get_Item | | AccessorCalls.cs:5:23:5:25 | Exit | AccessorCalls.cs:5:23:5:25 | get_Item | | AccessorCalls.cs:5:23:5:25 | Normal Exit | AccessorCalls.cs:5:23:5:25 | get_Item | @@ -17,18 +19,22 @@ nodeEnclosing | AccessorCalls.cs:5:33:5:35 | Entry | AccessorCalls.cs:5:33:5:35 | set_Item | | AccessorCalls.cs:5:33:5:35 | Exit | AccessorCalls.cs:5:33:5:35 | set_Item | | AccessorCalls.cs:5:33:5:35 | Normal Exit | AccessorCalls.cs:5:33:5:35 | set_Item | +| AccessorCalls.cs:5:33:5:35 | value | AccessorCalls.cs:5:33:5:35 | set_Item | | AccessorCalls.cs:5:37:5:39 | {...} | AccessorCalls.cs:5:33:5:35 | set_Item | | AccessorCalls.cs:7:32:7:34 | Entry | AccessorCalls.cs:7:32:7:34 | add_Event | | AccessorCalls.cs:7:32:7:34 | Exit | AccessorCalls.cs:7:32:7:34 | add_Event | | AccessorCalls.cs:7:32:7:34 | Normal Exit | AccessorCalls.cs:7:32:7:34 | add_Event | +| AccessorCalls.cs:7:32:7:34 | value | AccessorCalls.cs:7:32:7:34 | add_Event | | AccessorCalls.cs:7:36:7:38 | {...} | AccessorCalls.cs:7:32:7:34 | add_Event | | AccessorCalls.cs:7:40:7:45 | Entry | AccessorCalls.cs:7:40:7:45 | remove_Event | | AccessorCalls.cs:7:40:7:45 | Exit | AccessorCalls.cs:7:40:7:45 | remove_Event | | AccessorCalls.cs:7:40:7:45 | Normal Exit | AccessorCalls.cs:7:40:7:45 | remove_Event | +| AccessorCalls.cs:7:40:7:45 | value | AccessorCalls.cs:7:40:7:45 | remove_Event | | AccessorCalls.cs:7:47:7:49 | {...} | AccessorCalls.cs:7:40:7:45 | remove_Event | | AccessorCalls.cs:10:10:10:11 | Entry | AccessorCalls.cs:10:10:10:11 | M1 | | AccessorCalls.cs:10:10:10:11 | Exit | AccessorCalls.cs:10:10:10:11 | M1 | | AccessorCalls.cs:10:10:10:11 | Normal Exit | AccessorCalls.cs:10:10:10:11 | M1 | +| AccessorCalls.cs:10:26:10:26 | e | AccessorCalls.cs:10:10:10:11 | M1 | | AccessorCalls.cs:11:5:17:5 | After {...} | AccessorCalls.cs:10:10:10:11 | M1 | | AccessorCalls.cs:11:5:17:5 | {...} | AccessorCalls.cs:10:10:10:11 | M1 | | AccessorCalls.cs:12:9:12:12 | this access | AccessorCalls.cs:10:10:10:11 | M1 | @@ -95,6 +101,7 @@ nodeEnclosing | AccessorCalls.cs:19:10:19:11 | Entry | AccessorCalls.cs:19:10:19:11 | M2 | | AccessorCalls.cs:19:10:19:11 | Exit | AccessorCalls.cs:19:10:19:11 | M2 | | AccessorCalls.cs:19:10:19:11 | Normal Exit | AccessorCalls.cs:19:10:19:11 | M2 | +| AccessorCalls.cs:19:26:19:26 | e | AccessorCalls.cs:19:10:19:11 | M2 | | AccessorCalls.cs:20:5:26:5 | After {...} | AccessorCalls.cs:19:10:19:11 | M2 | | AccessorCalls.cs:20:5:26:5 | {...} | AccessorCalls.cs:19:10:19:11 | M2 | | AccessorCalls.cs:21:9:21:12 | this access | AccessorCalls.cs:19:10:19:11 | M2 | @@ -370,6 +377,7 @@ nodeEnclosing | AccessorCalls.cs:56:10:56:11 | Entry | AccessorCalls.cs:56:10:56:11 | M7 | | AccessorCalls.cs:56:10:56:11 | Exit | AccessorCalls.cs:56:10:56:11 | M7 | | AccessorCalls.cs:56:10:56:11 | Normal Exit | AccessorCalls.cs:56:10:56:11 | M7 | +| AccessorCalls.cs:56:17:56:17 | i | AccessorCalls.cs:56:10:56:11 | M7 | | AccessorCalls.cs:57:5:59:5 | After {...} | AccessorCalls.cs:56:10:56:11 | M7 | | AccessorCalls.cs:57:5:59:5 | {...} | AccessorCalls.cs:56:10:56:11 | M7 | | AccessorCalls.cs:58:9:58:45 | (..., ...) | AccessorCalls.cs:56:10:56:11 | M7 | @@ -420,6 +428,7 @@ nodeEnclosing | AccessorCalls.cs:61:10:61:11 | Entry | AccessorCalls.cs:61:10:61:11 | M8 | | AccessorCalls.cs:61:10:61:11 | Exit | AccessorCalls.cs:61:10:61:11 | M8 | | AccessorCalls.cs:61:10:61:11 | Normal Exit | AccessorCalls.cs:61:10:61:11 | M8 | +| AccessorCalls.cs:61:17:61:17 | i | AccessorCalls.cs:61:10:61:11 | M8 | | AccessorCalls.cs:62:5:64:5 | After {...} | AccessorCalls.cs:61:10:61:11 | M8 | | AccessorCalls.cs:62:5:64:5 | {...} | AccessorCalls.cs:61:10:61:11 | M8 | | AccessorCalls.cs:63:9:63:51 | (..., ...) | AccessorCalls.cs:61:10:61:11 | M8 | @@ -488,6 +497,9 @@ nodeEnclosing | AccessorCalls.cs:66:10:66:11 | Entry | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:66:10:66:11 | Exit | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:66:10:66:11 | Normal Exit | AccessorCalls.cs:66:10:66:11 | M9 | +| AccessorCalls.cs:66:20:66:20 | o | AccessorCalls.cs:66:10:66:11 | M9 | +| AccessorCalls.cs:66:27:66:27 | i | AccessorCalls.cs:66:10:66:11 | M9 | +| AccessorCalls.cs:66:43:66:43 | e | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:67:5:74:5 | After {...} | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:67:5:74:5 | {...} | AccessorCalls.cs:66:10:66:11 | M9 | | AccessorCalls.cs:68:9:68:22 | ... ...; | AccessorCalls.cs:66:10:66:11 | M9 | @@ -663,6 +675,7 @@ nodeEnclosing | Assert.cs:7:10:7:11 | Exceptional Exit | Assert.cs:7:10:7:11 | M1 | | Assert.cs:7:10:7:11 | Exit | Assert.cs:7:10:7:11 | M1 | | Assert.cs:7:10:7:11 | Normal Exit | Assert.cs:7:10:7:11 | M1 | +| Assert.cs:7:18:7:18 | b | Assert.cs:7:10:7:11 | M1 | | Assert.cs:8:5:12:5 | After {...} | Assert.cs:7:10:7:11 | M1 | | Assert.cs:8:5:12:5 | {...} | Assert.cs:7:10:7:11 | M1 | | Assert.cs:9:9:9:33 | ... ...; | Assert.cs:7:10:7:11 | M1 | @@ -701,6 +714,7 @@ nodeEnclosing | Assert.cs:14:10:14:11 | Exceptional Exit | Assert.cs:14:10:14:11 | M2 | | Assert.cs:14:10:14:11 | Exit | Assert.cs:14:10:14:11 | M2 | | Assert.cs:14:10:14:11 | Normal Exit | Assert.cs:14:10:14:11 | M2 | +| Assert.cs:14:18:14:18 | b | Assert.cs:14:10:14:11 | M2 | | Assert.cs:15:5:19:5 | After {...} | Assert.cs:14:10:14:11 | M2 | | Assert.cs:15:5:19:5 | {...} | Assert.cs:14:10:14:11 | M2 | | Assert.cs:16:9:16:33 | ... ...; | Assert.cs:14:10:14:11 | M2 | @@ -735,6 +749,7 @@ nodeEnclosing | Assert.cs:21:10:21:11 | Exceptional Exit | Assert.cs:21:10:21:11 | M3 | | Assert.cs:21:10:21:11 | Exit | Assert.cs:21:10:21:11 | M3 | | Assert.cs:21:10:21:11 | Normal Exit | Assert.cs:21:10:21:11 | M3 | +| Assert.cs:21:18:21:18 | b | Assert.cs:21:10:21:11 | M3 | | Assert.cs:22:5:26:5 | After {...} | Assert.cs:21:10:21:11 | M3 | | Assert.cs:22:5:26:5 | {...} | Assert.cs:21:10:21:11 | M3 | | Assert.cs:23:9:23:33 | ... ...; | Assert.cs:21:10:21:11 | M3 | @@ -769,6 +784,7 @@ nodeEnclosing | Assert.cs:28:10:28:11 | Exceptional Exit | Assert.cs:28:10:28:11 | M4 | | Assert.cs:28:10:28:11 | Exit | Assert.cs:28:10:28:11 | M4 | | Assert.cs:28:10:28:11 | Normal Exit | Assert.cs:28:10:28:11 | M4 | +| Assert.cs:28:18:28:18 | b | Assert.cs:28:10:28:11 | M4 | | Assert.cs:29:5:33:5 | After {...} | Assert.cs:28:10:28:11 | M4 | | Assert.cs:29:5:33:5 | {...} | Assert.cs:28:10:28:11 | M4 | | Assert.cs:30:9:30:33 | ... ...; | Assert.cs:28:10:28:11 | M4 | @@ -807,6 +823,7 @@ nodeEnclosing | Assert.cs:35:10:35:11 | Exceptional Exit | Assert.cs:35:10:35:11 | M5 | | Assert.cs:35:10:35:11 | Exit | Assert.cs:35:10:35:11 | M5 | | Assert.cs:35:10:35:11 | Normal Exit | Assert.cs:35:10:35:11 | M5 | +| Assert.cs:35:18:35:18 | b | Assert.cs:35:10:35:11 | M5 | | Assert.cs:36:5:40:5 | After {...} | Assert.cs:35:10:35:11 | M5 | | Assert.cs:36:5:40:5 | {...} | Assert.cs:35:10:35:11 | M5 | | Assert.cs:37:9:37:33 | ... ...; | Assert.cs:35:10:35:11 | M5 | @@ -845,6 +862,7 @@ nodeEnclosing | Assert.cs:42:10:42:11 | Exceptional Exit | Assert.cs:42:10:42:11 | M6 | | Assert.cs:42:10:42:11 | Exit | Assert.cs:42:10:42:11 | M6 | | Assert.cs:42:10:42:11 | Normal Exit | Assert.cs:42:10:42:11 | M6 | +| Assert.cs:42:18:42:18 | b | Assert.cs:42:10:42:11 | M6 | | Assert.cs:43:5:47:5 | After {...} | Assert.cs:42:10:42:11 | M6 | | Assert.cs:43:5:47:5 | {...} | Assert.cs:42:10:42:11 | M6 | | Assert.cs:44:9:44:33 | ... ...; | Assert.cs:42:10:42:11 | M6 | @@ -883,6 +901,7 @@ nodeEnclosing | Assert.cs:49:10:49:11 | Exceptional Exit | Assert.cs:49:10:49:11 | M7 | | Assert.cs:49:10:49:11 | Exit | Assert.cs:49:10:49:11 | M7 | | Assert.cs:49:10:49:11 | Normal Exit | Assert.cs:49:10:49:11 | M7 | +| Assert.cs:49:18:49:18 | b | Assert.cs:49:10:49:11 | M7 | | Assert.cs:50:5:54:5 | After {...} | Assert.cs:49:10:49:11 | M7 | | Assert.cs:50:5:54:5 | {...} | Assert.cs:49:10:49:11 | M7 | | Assert.cs:51:9:51:33 | ... ...; | Assert.cs:49:10:49:11 | M7 | @@ -921,6 +940,7 @@ nodeEnclosing | Assert.cs:56:10:56:11 | Exceptional Exit | Assert.cs:56:10:56:11 | M8 | | Assert.cs:56:10:56:11 | Exit | Assert.cs:56:10:56:11 | M8 | | Assert.cs:56:10:56:11 | Normal Exit | Assert.cs:56:10:56:11 | M8 | +| Assert.cs:56:18:56:18 | b | Assert.cs:56:10:56:11 | M8 | | Assert.cs:57:5:61:5 | After {...} | Assert.cs:56:10:56:11 | M8 | | Assert.cs:57:5:61:5 | {...} | Assert.cs:56:10:56:11 | M8 | | Assert.cs:58:9:58:33 | ... ...; | Assert.cs:56:10:56:11 | M8 | @@ -963,6 +983,7 @@ nodeEnclosing | Assert.cs:63:10:63:11 | Exceptional Exit | Assert.cs:63:10:63:11 | M9 | | Assert.cs:63:10:63:11 | Exit | Assert.cs:63:10:63:11 | M9 | | Assert.cs:63:10:63:11 | Normal Exit | Assert.cs:63:10:63:11 | M9 | +| Assert.cs:63:18:63:18 | b | Assert.cs:63:10:63:11 | M9 | | Assert.cs:64:5:68:5 | After {...} | Assert.cs:63:10:63:11 | M9 | | Assert.cs:64:5:68:5 | {...} | Assert.cs:63:10:63:11 | M9 | | Assert.cs:65:9:65:33 | ... ...; | Assert.cs:63:10:63:11 | M9 | @@ -1005,6 +1026,7 @@ nodeEnclosing | Assert.cs:70:10:70:12 | Exceptional Exit | Assert.cs:70:10:70:12 | M10 | | Assert.cs:70:10:70:12 | Exit | Assert.cs:70:10:70:12 | M10 | | Assert.cs:70:10:70:12 | Normal Exit | Assert.cs:70:10:70:12 | M10 | +| Assert.cs:70:19:70:19 | b | Assert.cs:70:10:70:12 | M10 | | Assert.cs:71:5:75:5 | After {...} | Assert.cs:70:10:70:12 | M10 | | Assert.cs:71:5:75:5 | {...} | Assert.cs:70:10:70:12 | M10 | | Assert.cs:72:9:72:33 | ... ...; | Assert.cs:70:10:70:12 | M10 | @@ -1047,6 +1069,7 @@ nodeEnclosing | Assert.cs:77:10:77:12 | Exceptional Exit | Assert.cs:77:10:77:12 | M11 | | Assert.cs:77:10:77:12 | Exit | Assert.cs:77:10:77:12 | M11 | | Assert.cs:77:10:77:12 | Normal Exit | Assert.cs:77:10:77:12 | M11 | +| Assert.cs:77:19:77:19 | b | Assert.cs:77:10:77:12 | M11 | | Assert.cs:78:5:82:5 | After {...} | Assert.cs:77:10:77:12 | M11 | | Assert.cs:78:5:82:5 | {...} | Assert.cs:77:10:77:12 | M11 | | Assert.cs:79:9:79:33 | ... ...; | Assert.cs:77:10:77:12 | M11 | @@ -1089,6 +1112,7 @@ nodeEnclosing | Assert.cs:84:10:84:12 | Exceptional Exit | Assert.cs:84:10:84:12 | M12 | | Assert.cs:84:10:84:12 | Exit | Assert.cs:84:10:84:12 | M12 | | Assert.cs:84:10:84:12 | Normal Exit | Assert.cs:84:10:84:12 | M12 | +| Assert.cs:84:19:84:19 | b | Assert.cs:84:10:84:12 | M12 | | Assert.cs:85:5:129:5 | After {...} | Assert.cs:84:10:84:12 | M12 | | Assert.cs:85:5:129:5 | {...} | Assert.cs:84:10:84:12 | M12 | | Assert.cs:86:9:86:33 | ... ...; | Assert.cs:84:10:84:12 | M12 | @@ -1458,11 +1482,17 @@ nodeEnclosing | Assert.cs:131:18:131:32 | Entry | Assert.cs:131:18:131:32 | AssertTrueFalse | | Assert.cs:131:18:131:32 | Exit | Assert.cs:131:18:131:32 | AssertTrueFalse | | Assert.cs:131:18:131:32 | Normal Exit | Assert.cs:131:18:131:32 | AssertTrueFalse | +| Assert.cs:132:74:132:83 | condition1 | Assert.cs:131:18:131:32 | AssertTrueFalse | +| Assert.cs:133:73:133:82 | condition2 | Assert.cs:131:18:131:32 | AssertTrueFalse | +| Assert.cs:134:17:134:28 | nonCondition | Assert.cs:131:18:131:32 | AssertTrueFalse | | Assert.cs:135:5:136:5 | {...} | Assert.cs:131:18:131:32 | AssertTrueFalse | | Assert.cs:138:10:138:12 | Entry | Assert.cs:138:10:138:12 | M13 | | Assert.cs:138:10:138:12 | Exceptional Exit | Assert.cs:138:10:138:12 | M13 | | Assert.cs:138:10:138:12 | Exit | Assert.cs:138:10:138:12 | M13 | | Assert.cs:138:10:138:12 | Normal Exit | Assert.cs:138:10:138:12 | M13 | +| Assert.cs:138:19:138:20 | b1 | Assert.cs:138:10:138:12 | M13 | +| Assert.cs:138:28:138:29 | b2 | Assert.cs:138:10:138:12 | M13 | +| Assert.cs:138:37:138:38 | b3 | Assert.cs:138:10:138:12 | M13 | | Assert.cs:139:5:142:5 | {...} | Assert.cs:138:10:138:12 | M13 | | Assert.cs:140:9:140:35 | After call to method AssertTrueFalse | Assert.cs:138:10:138:12 | M13 | | Assert.cs:140:9:140:35 | Before call to method AssertTrueFalse | Assert.cs:138:10:138:12 | M13 | @@ -1551,10 +1581,14 @@ nodeEnclosing | Assignments.cs:14:18:14:35 | Entry | Assignments.cs:14:18:14:35 | (...) => ... | | Assignments.cs:14:18:14:35 | Exit | Assignments.cs:14:18:14:35 | (...) => ... | | Assignments.cs:14:18:14:35 | Normal Exit | Assignments.cs:14:18:14:35 | (...) => ... | +| Assignments.cs:14:19:14:24 | sender | Assignments.cs:14:18:14:35 | (...) => ... | +| Assignments.cs:14:27:14:27 | e | Assignments.cs:14:18:14:35 | (...) => ... | | Assignments.cs:14:33:14:35 | {...} | Assignments.cs:14:18:14:35 | (...) => ... | | Assignments.cs:17:40:17:40 | Entry | Assignments.cs:17:40:17:40 | + | | Assignments.cs:17:40:17:40 | Exit | Assignments.cs:17:40:17:40 | + | | Assignments.cs:17:40:17:40 | Normal Exit | Assignments.cs:17:40:17:40 | + | +| Assignments.cs:17:54:17:54 | x | Assignments.cs:17:40:17:40 | + | +| Assignments.cs:17:69:17:69 | y | Assignments.cs:17:40:17:40 | + | | Assignments.cs:18:5:20:5 | {...} | Assignments.cs:17:40:17:40 | + | | Assignments.cs:19:9:19:17 | Before return ...; | Assignments.cs:17:40:17:40 | + | | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:17:40:17:40 | + | @@ -1562,6 +1596,7 @@ nodeEnclosing | Assignments.cs:27:10:27:23 | Entry | Assignments.cs:27:10:27:23 | SetParamSingle | | Assignments.cs:27:10:27:23 | Exit | Assignments.cs:27:10:27:23 | SetParamSingle | | Assignments.cs:27:10:27:23 | Normal Exit | Assignments.cs:27:10:27:23 | SetParamSingle | +| Assignments.cs:27:33:27:33 | x | Assignments.cs:27:10:27:23 | SetParamSingle | | Assignments.cs:28:5:30:5 | After {...} | Assignments.cs:27:10:27:23 | SetParamSingle | | Assignments.cs:28:5:30:5 | {...} | Assignments.cs:27:10:27:23 | SetParamSingle | | Assignments.cs:29:9:29:9 | access to parameter x | Assignments.cs:27:10:27:23 | SetParamSingle | @@ -1574,6 +1609,9 @@ nodeEnclosing | Assignments.cs:32:10:32:22 | Entry | Assignments.cs:32:10:32:22 | SetParamMulti | | Assignments.cs:32:10:32:22 | Exit | Assignments.cs:32:10:32:22 | SetParamMulti | | Assignments.cs:32:10:32:22 | Normal Exit | Assignments.cs:32:10:32:22 | SetParamMulti | +| Assignments.cs:32:32:32:32 | x | Assignments.cs:32:10:32:22 | SetParamMulti | +| Assignments.cs:32:42:32:42 | o | Assignments.cs:32:10:32:22 | SetParamMulti | +| Assignments.cs:32:56:32:56 | y | Assignments.cs:32:10:32:22 | SetParamMulti | | Assignments.cs:33:5:36:5 | After {...} | Assignments.cs:32:10:32:22 | SetParamMulti | | Assignments.cs:33:5:36:5 | {...} | Assignments.cs:32:10:32:22 | SetParamMulti | | Assignments.cs:34:9:34:9 | access to parameter x | Assignments.cs:32:10:32:22 | SetParamMulti | @@ -1656,6 +1694,7 @@ nodeEnclosing | BreakInTry.cs:3:10:3:11 | Entry | BreakInTry.cs:3:10:3:11 | M1 | | BreakInTry.cs:3:10:3:11 | Exit | BreakInTry.cs:3:10:3:11 | M1 | | BreakInTry.cs:3:10:3:11 | Normal Exit | BreakInTry.cs:3:10:3:11 | M1 | +| BreakInTry.cs:3:22:3:25 | args | BreakInTry.cs:3:10:3:11 | M1 | | BreakInTry.cs:4:5:18:5 | After {...} | BreakInTry.cs:3:10:3:11 | M1 | | BreakInTry.cs:4:5:18:5 | {...} | BreakInTry.cs:3:10:3:11 | M1 | | BreakInTry.cs:5:9:17:9 | After try {...} ... | BreakInTry.cs:3:10:3:11 | M1 | @@ -1695,6 +1734,7 @@ nodeEnclosing | BreakInTry.cs:20:10:20:11 | Entry | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:20:10:20:11 | Exit | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:20:10:20:11 | Normal Exit | BreakInTry.cs:20:10:20:11 | M2 | +| BreakInTry.cs:20:22:20:25 | args | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:21:5:36:5 | After {...} | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:21:5:36:5 | {...} | BreakInTry.cs:20:10:20:11 | M2 | | BreakInTry.cs:22:9:34:9 | After foreach (... ... in ...) ... | BreakInTry.cs:20:10:20:11 | M2 | @@ -1735,6 +1775,7 @@ nodeEnclosing | BreakInTry.cs:38:10:38:11 | Entry | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:38:10:38:11 | Exit | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:38:10:38:11 | Normal Exit | BreakInTry.cs:38:10:38:11 | M3 | +| BreakInTry.cs:38:22:38:25 | args | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:39:5:54:5 | After {...} | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:39:5:54:5 | {...} | BreakInTry.cs:38:10:38:11 | M3 | | BreakInTry.cs:40:9:52:9 | After try {...} ... | BreakInTry.cs:38:10:38:11 | M3 | @@ -1776,6 +1817,7 @@ nodeEnclosing | BreakInTry.cs:56:10:56:11 | Entry | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:56:10:56:11 | Exit | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:56:10:56:11 | Normal Exit | BreakInTry.cs:56:10:56:11 | M4 | +| BreakInTry.cs:56:22:56:25 | args | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:57:5:71:5 | After {...} | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:57:5:71:5 | {...} | BreakInTry.cs:56:10:56:11 | M4 | | BreakInTry.cs:58:9:70:9 | After try {...} ... | BreakInTry.cs:56:10:56:11 | M4 | @@ -1848,6 +1890,7 @@ nodeEnclosing | CompileTimeOperators.cs:20:12:20:17 | Entry | CompileTimeOperators.cs:20:12:20:17 | Nameof | | CompileTimeOperators.cs:20:12:20:17 | Exit | CompileTimeOperators.cs:20:12:20:17 | Nameof | | CompileTimeOperators.cs:20:12:20:17 | Normal Exit | CompileTimeOperators.cs:20:12:20:17 | Nameof | +| CompileTimeOperators.cs:20:23:20:23 | i | CompileTimeOperators.cs:20:12:20:17 | Nameof | | CompileTimeOperators.cs:21:5:23:5 | {...} | CompileTimeOperators.cs:20:12:20:17 | Nameof | | CompileTimeOperators.cs:22:9:22:25 | Before return ...; | CompileTimeOperators.cs:20:12:20:17 | Nameof | | CompileTimeOperators.cs:22:9:22:25 | return ...; | CompileTimeOperators.cs:20:12:20:17 | Nameof | @@ -1909,6 +1952,7 @@ nodeEnclosing | ConditionalAccess.cs:3:12:3:13 | Entry | ConditionalAccess.cs:3:12:3:13 | M1 | | ConditionalAccess.cs:3:12:3:13 | Exit | ConditionalAccess.cs:3:12:3:13 | M1 | | ConditionalAccess.cs:3:12:3:13 | Normal Exit | ConditionalAccess.cs:3:12:3:13 | M1 | +| ConditionalAccess.cs:3:20:3:20 | i | ConditionalAccess.cs:3:12:3:13 | M1 | | ConditionalAccess.cs:3:26:3:26 | After access to parameter i [non-null] | ConditionalAccess.cs:3:12:3:13 | M1 | | ConditionalAccess.cs:3:26:3:26 | After access to parameter i [null] | ConditionalAccess.cs:3:12:3:13 | M1 | | ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:12:3:13 | M1 | @@ -1922,6 +1966,7 @@ nodeEnclosing | ConditionalAccess.cs:5:10:5:11 | Entry | ConditionalAccess.cs:5:10:5:11 | M2 | | ConditionalAccess.cs:5:10:5:11 | Exit | ConditionalAccess.cs:5:10:5:11 | M2 | | ConditionalAccess.cs:5:10:5:11 | Normal Exit | ConditionalAccess.cs:5:10:5:11 | M2 | +| ConditionalAccess.cs:5:20:5:20 | s | ConditionalAccess.cs:5:10:5:11 | M2 | | ConditionalAccess.cs:5:26:5:26 | After access to parameter s [non-null] | ConditionalAccess.cs:5:10:5:11 | M2 | | ConditionalAccess.cs:5:26:5:26 | After access to parameter s [null] | ConditionalAccess.cs:5:10:5:11 | M2 | | ConditionalAccess.cs:5:26:5:26 | access to parameter s | ConditionalAccess.cs:5:10:5:11 | M2 | @@ -1931,6 +1976,8 @@ nodeEnclosing | ConditionalAccess.cs:7:10:7:11 | Entry | ConditionalAccess.cs:7:10:7:11 | M3 | | ConditionalAccess.cs:7:10:7:11 | Exit | ConditionalAccess.cs:7:10:7:11 | M3 | | ConditionalAccess.cs:7:10:7:11 | Normal Exit | ConditionalAccess.cs:7:10:7:11 | M3 | +| ConditionalAccess.cs:7:20:7:21 | s1 | ConditionalAccess.cs:7:10:7:11 | M3 | +| ConditionalAccess.cs:7:31:7:32 | s2 | ConditionalAccess.cs:7:10:7:11 | M3 | | ConditionalAccess.cs:7:38:7:55 | After access to property Length | ConditionalAccess.cs:7:10:7:11 | M3 | | ConditionalAccess.cs:7:38:7:55 | Before access to property Length | ConditionalAccess.cs:7:10:7:11 | M3 | | ConditionalAccess.cs:7:38:7:55 | access to property Length | ConditionalAccess.cs:7:10:7:11 | M3 | @@ -1946,6 +1993,7 @@ nodeEnclosing | ConditionalAccess.cs:9:9:9:10 | Entry | ConditionalAccess.cs:9:9:9:10 | M4 | | ConditionalAccess.cs:9:9:9:10 | Exit | ConditionalAccess.cs:9:9:9:10 | M4 | | ConditionalAccess.cs:9:9:9:10 | Normal Exit | ConditionalAccess.cs:9:9:9:10 | M4 | +| ConditionalAccess.cs:9:19:9:19 | s | ConditionalAccess.cs:9:9:9:10 | M4 | | ConditionalAccess.cs:9:25:9:25 | After access to parameter s [non-null] | ConditionalAccess.cs:9:9:9:10 | M4 | | ConditionalAccess.cs:9:25:9:25 | After access to parameter s [null] | ConditionalAccess.cs:9:9:9:10 | M4 | | ConditionalAccess.cs:9:25:9:25 | access to parameter s | ConditionalAccess.cs:9:9:9:10 | M4 | @@ -1959,6 +2007,7 @@ nodeEnclosing | ConditionalAccess.cs:11:9:11:10 | Entry | ConditionalAccess.cs:11:9:11:10 | M5 | | ConditionalAccess.cs:11:9:11:10 | Exit | ConditionalAccess.cs:11:9:11:10 | M5 | | ConditionalAccess.cs:11:9:11:10 | Normal Exit | ConditionalAccess.cs:11:9:11:10 | M5 | +| ConditionalAccess.cs:11:19:11:19 | s | ConditionalAccess.cs:11:9:11:10 | M5 | | ConditionalAccess.cs:12:5:17:5 | {...} | ConditionalAccess.cs:11:9:11:10 | M5 | | ConditionalAccess.cs:13:9:16:21 | if (...) ... | ConditionalAccess.cs:11:9:11:10 | M5 | | ConditionalAccess.cs:13:13:13:13 | After access to parameter s [non-null] | ConditionalAccess.cs:11:9:11:10 | M5 | @@ -1984,6 +2033,8 @@ nodeEnclosing | ConditionalAccess.cs:19:12:19:13 | Entry | ConditionalAccess.cs:19:12:19:13 | M6 | | ConditionalAccess.cs:19:12:19:13 | Exit | ConditionalAccess.cs:19:12:19:13 | M6 | | ConditionalAccess.cs:19:12:19:13 | Normal Exit | ConditionalAccess.cs:19:12:19:13 | M6 | +| ConditionalAccess.cs:19:22:19:23 | s1 | ConditionalAccess.cs:19:12:19:13 | M6 | +| ConditionalAccess.cs:19:33:19:34 | s2 | ConditionalAccess.cs:19:12:19:13 | M6 | | ConditionalAccess.cs:19:40:19:41 | After access to parameter s1 [non-null] | ConditionalAccess.cs:19:12:19:13 | M6 | | ConditionalAccess.cs:19:40:19:41 | After access to parameter s1 [null] | ConditionalAccess.cs:19:12:19:13 | M6 | | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:12:19:13 | M6 | @@ -1994,6 +2045,7 @@ nodeEnclosing | ConditionalAccess.cs:21:10:21:11 | Entry | ConditionalAccess.cs:21:10:21:11 | M7 | | ConditionalAccess.cs:21:10:21:11 | Exit | ConditionalAccess.cs:21:10:21:11 | M7 | | ConditionalAccess.cs:21:10:21:11 | Normal Exit | ConditionalAccess.cs:21:10:21:11 | M7 | +| ConditionalAccess.cs:21:17:21:17 | i | ConditionalAccess.cs:21:10:21:11 | M7 | | ConditionalAccess.cs:22:5:26:5 | After {...} | ConditionalAccess.cs:21:10:21:11 | M7 | | ConditionalAccess.cs:22:5:26:5 | {...} | ConditionalAccess.cs:21:10:21:11 | M7 | | ConditionalAccess.cs:23:9:23:39 | ... ...; | ConditionalAccess.cs:21:10:21:11 | M7 | @@ -2040,6 +2092,7 @@ nodeEnclosing | ConditionalAccess.cs:30:10:30:12 | Entry | ConditionalAccess.cs:30:10:30:12 | Out | | ConditionalAccess.cs:30:10:30:12 | Exit | ConditionalAccess.cs:30:10:30:12 | Out | | ConditionalAccess.cs:30:10:30:12 | Normal Exit | ConditionalAccess.cs:30:10:30:12 | Out | +| ConditionalAccess.cs:30:22:30:22 | i | ConditionalAccess.cs:30:10:30:12 | Out | | ConditionalAccess.cs:30:28:30:28 | access to parameter i | ConditionalAccess.cs:30:10:30:12 | Out | | ConditionalAccess.cs:30:28:30:32 | ... = ... | ConditionalAccess.cs:30:10:30:12 | Out | | ConditionalAccess.cs:30:28:30:32 | After ... = ... | ConditionalAccess.cs:30:10:30:12 | Out | @@ -2048,6 +2101,8 @@ nodeEnclosing | ConditionalAccess.cs:32:10:32:11 | Entry | ConditionalAccess.cs:32:10:32:11 | M8 | | ConditionalAccess.cs:32:10:32:11 | Exit | ConditionalAccess.cs:32:10:32:11 | M8 | | ConditionalAccess.cs:32:10:32:11 | Normal Exit | ConditionalAccess.cs:32:10:32:11 | M8 | +| ConditionalAccess.cs:32:18:32:18 | b | ConditionalAccess.cs:32:10:32:11 | M8 | +| ConditionalAccess.cs:32:29:32:29 | i | ConditionalAccess.cs:32:10:32:11 | M8 | | ConditionalAccess.cs:33:5:36:5 | After {...} | ConditionalAccess.cs:32:10:32:11 | M8 | | ConditionalAccess.cs:33:5:36:5 | {...} | ConditionalAccess.cs:32:10:32:11 | M8 | | ConditionalAccess.cs:34:9:34:9 | access to parameter i | ConditionalAccess.cs:32:10:32:11 | M8 | @@ -2068,6 +2123,8 @@ nodeEnclosing | ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:32:10:32:11 | M8 | | ConditionalAccess.cs:35:9:35:25 | After ...; | ConditionalAccess.cs:32:10:32:11 | M8 | | ConditionalAccess.cs:35:23:35:23 | access to parameter i | ConditionalAccess.cs:32:10:32:11 | M8 | +| ConditionalAccess.cs:40:21:40:25 | index | ConditionalAccess.cs:42:9:42:11 | get_Item | +| ConditionalAccess.cs:40:21:40:25 | index | ConditionalAccess.cs:43:9:43:11 | set_Item | | ConditionalAccess.cs:42:9:42:11 | Entry | ConditionalAccess.cs:42:9:42:11 | get_Item | | ConditionalAccess.cs:42:9:42:11 | Exit | ConditionalAccess.cs:42:9:42:11 | get_Item | | ConditionalAccess.cs:42:9:42:11 | Normal Exit | ConditionalAccess.cs:42:9:42:11 | get_Item | @@ -2078,10 +2135,12 @@ nodeEnclosing | ConditionalAccess.cs:43:9:43:11 | Entry | ConditionalAccess.cs:43:9:43:11 | set_Item | | ConditionalAccess.cs:43:9:43:11 | Exit | ConditionalAccess.cs:43:9:43:11 | set_Item | | ConditionalAccess.cs:43:9:43:11 | Normal Exit | ConditionalAccess.cs:43:9:43:11 | set_Item | +| ConditionalAccess.cs:43:9:43:11 | value | ConditionalAccess.cs:43:9:43:11 | set_Item | | ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:9:43:11 | set_Item | | ConditionalAccess.cs:46:10:46:11 | Entry | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:46:10:46:11 | Exit | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:46:10:46:11 | Normal Exit | ConditionalAccess.cs:46:10:46:11 | M9 | +| ConditionalAccess.cs:46:31:46:32 | ca | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:47:5:55:5 | After {...} | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:46:10:46:11 | M9 | | ConditionalAccess.cs:48:9:48:10 | After access to parameter ca [non-null] | ConditionalAccess.cs:46:10:46:11 | M9 | @@ -2180,6 +2239,8 @@ nodeEnclosing | ConditionalAccess.cs:60:26:60:38 | Entry | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | | ConditionalAccess.cs:60:26:60:38 | Exit | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | | ConditionalAccess.cs:60:26:60:38 | Normal Exit | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | +| ConditionalAccess.cs:60:52:60:53 | s1 | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | +| ConditionalAccess.cs:60:63:60:64 | s2 | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | | ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | | ConditionalAccess.cs:60:70:60:78 | After ... + ... | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | @@ -2203,6 +2264,8 @@ nodeEnclosing | Conditions.cs:3:10:3:19 | Entry | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:3:10:3:19 | Exit | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:3:10:3:19 | Normal Exit | Conditions.cs:3:10:3:19 | IncrOrDecr | +| Conditions.cs:3:26:3:28 | inc | Conditions.cs:3:10:3:19 | IncrOrDecr | +| Conditions.cs:3:39:3:39 | x | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:4:5:9:5 | After {...} | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:4:5:9:5 | {...} | Conditions.cs:3:10:3:19 | IncrOrDecr | | Conditions.cs:5:9:6:16 | After if (...) ... | Conditions.cs:3:10:3:19 | IncrOrDecr | @@ -2233,6 +2296,7 @@ nodeEnclosing | Conditions.cs:11:9:11:10 | Entry | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:11:9:11:10 | Exit | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:11:9:11:10 | Normal Exit | Conditions.cs:11:9:11:10 | M1 | +| Conditions.cs:11:17:11:17 | b | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:12:5:20:5 | {...} | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:13:9:13:18 | ... ...; | Conditions.cs:11:9:11:10 | M1 | | Conditions.cs:13:9:13:18 | After ... ...; | Conditions.cs:11:9:11:10 | M1 | @@ -2280,6 +2344,8 @@ nodeEnclosing | Conditions.cs:22:9:22:10 | Entry | Conditions.cs:22:9:22:10 | M2 | | Conditions.cs:22:9:22:10 | Exit | Conditions.cs:22:9:22:10 | M2 | | Conditions.cs:22:9:22:10 | Normal Exit | Conditions.cs:22:9:22:10 | M2 | +| Conditions.cs:22:17:22:18 | b1 | Conditions.cs:22:9:22:10 | M2 | +| Conditions.cs:22:26:22:27 | b2 | Conditions.cs:22:9:22:10 | M2 | | Conditions.cs:23:5:31:5 | {...} | Conditions.cs:22:9:22:10 | M2 | | Conditions.cs:24:9:24:18 | ... ...; | Conditions.cs:22:9:22:10 | M2 | | Conditions.cs:24:9:24:18 | After ... ...; | Conditions.cs:22:9:22:10 | M2 | @@ -2321,6 +2387,7 @@ nodeEnclosing | Conditions.cs:33:9:33:10 | Entry | Conditions.cs:33:9:33:10 | M3 | | Conditions.cs:33:9:33:10 | Exit | Conditions.cs:33:9:33:10 | M3 | | Conditions.cs:33:9:33:10 | Normal Exit | Conditions.cs:33:9:33:10 | M3 | +| Conditions.cs:33:17:33:18 | b1 | Conditions.cs:33:9:33:10 | M3 | | Conditions.cs:34:5:44:5 | {...} | Conditions.cs:33:9:33:10 | M3 | | Conditions.cs:35:9:35:18 | ... ...; | Conditions.cs:33:9:33:10 | M3 | | Conditions.cs:35:9:35:18 | After ... ...; | Conditions.cs:33:9:33:10 | M3 | @@ -2376,6 +2443,8 @@ nodeEnclosing | Conditions.cs:46:9:46:10 | Entry | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:46:9:46:10 | Exit | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:46:9:46:10 | Normal Exit | Conditions.cs:46:9:46:10 | M4 | +| Conditions.cs:46:17:46:17 | b | Conditions.cs:46:9:46:10 | M4 | +| Conditions.cs:46:24:46:24 | x | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:47:5:55:5 | {...} | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:48:9:48:18 | ... ...; | Conditions.cs:46:9:46:10 | M4 | | Conditions.cs:48:9:48:18 | After ... ...; | Conditions.cs:46:9:46:10 | M4 | @@ -2415,6 +2484,8 @@ nodeEnclosing | Conditions.cs:57:9:57:10 | Entry | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:57:9:57:10 | Exit | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:57:9:57:10 | Normal Exit | Conditions.cs:57:9:57:10 | M5 | +| Conditions.cs:57:17:57:17 | b | Conditions.cs:57:9:57:10 | M5 | +| Conditions.cs:57:24:57:24 | x | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:58:5:68:5 | {...} | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:59:9:59:18 | ... ...; | Conditions.cs:57:9:57:10 | M5 | | Conditions.cs:59:9:59:18 | After ... ...; | Conditions.cs:57:9:57:10 | M5 | @@ -2465,6 +2536,7 @@ nodeEnclosing | Conditions.cs:70:9:70:10 | Entry | Conditions.cs:70:9:70:10 | M6 | | Conditions.cs:70:9:70:10 | Exit | Conditions.cs:70:9:70:10 | M6 | | Conditions.cs:70:9:70:10 | Normal Exit | Conditions.cs:70:9:70:10 | M6 | +| Conditions.cs:70:21:70:22 | ss | Conditions.cs:70:9:70:10 | M6 | | Conditions.cs:71:5:84:5 | {...} | Conditions.cs:70:9:70:10 | M6 | | Conditions.cs:72:9:72:30 | ... ...; | Conditions.cs:70:9:70:10 | M6 | | Conditions.cs:72:9:72:30 | After ... ...; | Conditions.cs:70:9:70:10 | M6 | @@ -2539,6 +2611,7 @@ nodeEnclosing | Conditions.cs:86:9:86:10 | Entry | Conditions.cs:86:9:86:10 | M7 | | Conditions.cs:86:9:86:10 | Exit | Conditions.cs:86:9:86:10 | M7 | | Conditions.cs:86:9:86:10 | Normal Exit | Conditions.cs:86:9:86:10 | M7 | +| Conditions.cs:86:21:86:22 | ss | Conditions.cs:86:9:86:10 | M7 | | Conditions.cs:87:5:100:5 | {...} | Conditions.cs:86:9:86:10 | M7 | | Conditions.cs:88:9:88:30 | ... ...; | Conditions.cs:86:9:86:10 | M7 | | Conditions.cs:88:9:88:30 | After ... ...; | Conditions.cs:86:9:86:10 | M7 | @@ -2613,6 +2686,7 @@ nodeEnclosing | Conditions.cs:102:12:102:13 | Entry | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:102:12:102:13 | Exit | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:102:12:102:13 | Normal Exit | Conditions.cs:102:12:102:13 | M8 | +| Conditions.cs:102:20:102:20 | b | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:103:5:111:5 | {...} | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:104:9:104:29 | ... ...; | Conditions.cs:102:12:102:13 | M8 | | Conditions.cs:104:9:104:29 | After ... ...; | Conditions.cs:102:12:102:13 | M8 | @@ -2668,6 +2742,7 @@ nodeEnclosing | Conditions.cs:113:10:113:11 | Entry | Conditions.cs:113:10:113:11 | M9 | | Conditions.cs:113:10:113:11 | Exit | Conditions.cs:113:10:113:11 | M9 | | Conditions.cs:113:10:113:11 | Normal Exit | Conditions.cs:113:10:113:11 | M9 | +| Conditions.cs:113:22:113:25 | args | Conditions.cs:113:10:113:11 | M9 | | Conditions.cs:114:5:124:5 | After {...} | Conditions.cs:113:10:113:11 | M9 | | Conditions.cs:114:5:124:5 | {...} | Conditions.cs:113:10:113:11 | M9 | | Conditions.cs:115:9:115:24 | ... ...; | Conditions.cs:113:10:113:11 | M9 | @@ -2783,6 +2858,7 @@ nodeEnclosing | Conditions.cs:143:10:143:12 | Entry | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:143:10:143:12 | Exit | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:143:10:143:12 | Normal Exit | Conditions.cs:143:10:143:12 | M11 | +| Conditions.cs:143:19:143:19 | b | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:144:5:150:5 | After {...} | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:144:5:150:5 | {...} | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:145:9:145:30 | ... ...; | Conditions.cs:143:10:143:12 | M11 | @@ -2843,6 +2919,15 @@ nodeEnclosing | DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:12:3:13 | M1 | | DefaultParam.cs:3:12:3:13 | Exit | DefaultParam.cs:3:12:3:13 | M1 | | DefaultParam.cs:3:12:3:13 | Normal Exit | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:3:30:3:30 | After s [match] | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:3:30:3:30 | After s [no-match] | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:3:34:3:35 | "" | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:3:42:3:42 | After i [match] | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:3:42:3:42 | After i [no-match] | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:3:46:3:46 | 0 | DefaultParam.cs:3:12:3:13 | M1 | | DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:3:12:3:13 | M1 | | DefaultParam.cs:5:9:5:25 | Before return ...; | DefaultParam.cs:3:12:3:13 | M1 | | DefaultParam.cs:5:9:5:25 | return ...; | DefaultParam.cs:3:12:3:13 | M1 | @@ -2961,6 +3046,7 @@ nodeEnclosing | ExitMethods.cs:66:17:66:26 | Exceptional Exit | ExitMethods.cs:66:17:66:26 | ErrorMaybe | | ExitMethods.cs:66:17:66:26 | Exit | ExitMethods.cs:66:17:66:26 | ErrorMaybe | | ExitMethods.cs:66:17:66:26 | Normal Exit | ExitMethods.cs:66:17:66:26 | ErrorMaybe | +| ExitMethods.cs:66:33:66:33 | b | ExitMethods.cs:66:17:66:26 | ErrorMaybe | | ExitMethods.cs:67:5:70:5 | After {...} | ExitMethods.cs:66:17:66:26 | ErrorMaybe | | ExitMethods.cs:67:5:70:5 | {...} | ExitMethods.cs:66:17:66:26 | ErrorMaybe | | ExitMethods.cs:68:9:69:34 | After if (...) ... | ExitMethods.cs:66:17:66:26 | ErrorMaybe | @@ -2976,6 +3062,7 @@ nodeEnclosing | ExitMethods.cs:72:17:72:27 | Entry | ExitMethods.cs:72:17:72:27 | ErrorAlways | | ExitMethods.cs:72:17:72:27 | Exceptional Exit | ExitMethods.cs:72:17:72:27 | ErrorAlways | | ExitMethods.cs:72:17:72:27 | Exit | ExitMethods.cs:72:17:72:27 | ErrorAlways | +| ExitMethods.cs:72:34:72:34 | b | ExitMethods.cs:72:17:72:27 | ErrorAlways | | ExitMethods.cs:73:5:78:5 | {...} | ExitMethods.cs:72:17:72:27 | ErrorAlways | | ExitMethods.cs:74:9:77:45 | if (...) ... | ExitMethods.cs:72:17:72:27 | ErrorAlways | | ExitMethods.cs:74:13:74:13 | After access to parameter b [false] | ExitMethods.cs:72:17:72:27 | ErrorAlways | @@ -3049,6 +3136,7 @@ nodeEnclosing | ExitMethods.cs:110:13:110:21 | Exceptional Exit | ExitMethods.cs:110:13:110:21 | ThrowExpr | | ExitMethods.cs:110:13:110:21 | Exit | ExitMethods.cs:110:13:110:21 | ThrowExpr | | ExitMethods.cs:110:13:110:21 | Normal Exit | ExitMethods.cs:110:13:110:21 | ThrowExpr | +| ExitMethods.cs:110:31:110:35 | input | ExitMethods.cs:110:13:110:21 | ThrowExpr | | ExitMethods.cs:111:5:113:5 | {...} | ExitMethods.cs:110:13:110:21 | ThrowExpr | | ExitMethods.cs:112:9:112:77 | Before return ...; | ExitMethods.cs:110:13:110:21 | ThrowExpr | | ExitMethods.cs:112:9:112:77 | return ...; | ExitMethods.cs:110:13:110:21 | ThrowExpr | @@ -3080,6 +3168,7 @@ nodeEnclosing | ExitMethods.cs:115:16:115:34 | Entry | ExitMethods.cs:115:16:115:34 | ExtensionMethodCall | | ExitMethods.cs:115:16:115:34 | Exit | ExitMethods.cs:115:16:115:34 | ExtensionMethodCall | | ExitMethods.cs:115:16:115:34 | Normal Exit | ExitMethods.cs:115:16:115:34 | ExtensionMethodCall | +| ExitMethods.cs:115:43:115:43 | s | ExitMethods.cs:115:16:115:34 | ExtensionMethodCall | | ExitMethods.cs:116:5:118:5 | {...} | ExitMethods.cs:115:16:115:34 | ExtensionMethodCall | | ExitMethods.cs:117:9:117:39 | Before return ...; | ExitMethods.cs:115:16:115:34 | ExtensionMethodCall | | ExitMethods.cs:117:9:117:39 | return ...; | ExitMethods.cs:115:16:115:34 | ExtensionMethodCall | @@ -3113,6 +3202,7 @@ nodeEnclosing | ExitMethods.cs:132:10:132:20 | Exceptional Exit | ExitMethods.cs:132:10:132:20 | AssertFalse | | ExitMethods.cs:132:10:132:20 | Exit | ExitMethods.cs:132:10:132:20 | AssertFalse | | ExitMethods.cs:132:10:132:20 | Normal Exit | ExitMethods.cs:132:10:132:20 | AssertFalse | +| ExitMethods.cs:132:27:132:27 | b | ExitMethods.cs:132:10:132:20 | AssertFalse | | ExitMethods.cs:132:33:132:49 | After call to method IsFalse | ExitMethods.cs:132:10:132:20 | AssertFalse | | ExitMethods.cs:132:33:132:49 | Before call to method IsFalse | ExitMethods.cs:132:10:132:20 | AssertFalse | | ExitMethods.cs:132:33:132:49 | call to method IsFalse | ExitMethods.cs:132:10:132:20 | AssertFalse | @@ -3129,6 +3219,8 @@ nodeEnclosing | ExitMethods.cs:140:17:140:42 | Entry | ExitMethods.cs:140:17:140:42 | ExceptionDispatchInfoThrow | | ExitMethods.cs:140:17:140:42 | Exceptional Exit | ExitMethods.cs:140:17:140:42 | ExceptionDispatchInfoThrow | | ExitMethods.cs:140:17:140:42 | Exit | ExitMethods.cs:140:17:140:42 | ExceptionDispatchInfoThrow | +| ExitMethods.cs:140:49:140:49 | b | ExitMethods.cs:140:17:140:42 | ExceptionDispatchInfoThrow | +| ExitMethods.cs:140:70:140:70 | e | ExitMethods.cs:140:17:140:42 | ExceptionDispatchInfoThrow | | ExitMethods.cs:141:5:147:5 | {...} | ExitMethods.cs:140:17:140:42 | ExceptionDispatchInfoThrow | | ExitMethods.cs:142:9:145:53 | if (...) ... | ExitMethods.cs:140:17:140:42 | ExceptionDispatchInfoThrow | | ExitMethods.cs:142:13:142:13 | After access to parameter b [false] | ExitMethods.cs:140:17:140:42 | ExceptionDispatchInfoThrow | @@ -3148,6 +3240,7 @@ nodeEnclosing | Extensions.cs:5:23:5:29 | Entry | Extensions.cs:5:23:5:29 | ToInt32 | | Extensions.cs:5:23:5:29 | Exit | Extensions.cs:5:23:5:29 | ToInt32 | | Extensions.cs:5:23:5:29 | Normal Exit | Extensions.cs:5:23:5:29 | ToInt32 | +| Extensions.cs:5:43:5:43 | s | Extensions.cs:5:23:5:29 | ToInt32 | | Extensions.cs:6:5:8:5 | {...} | Extensions.cs:5:23:5:29 | ToInt32 | | Extensions.cs:7:9:7:30 | Before return ...; | Extensions.cs:5:23:5:29 | ToInt32 | | Extensions.cs:7:9:7:30 | return ...; | Extensions.cs:5:23:5:29 | ToInt32 | @@ -3158,6 +3251,8 @@ nodeEnclosing | Extensions.cs:10:24:10:29 | Entry | Extensions.cs:10:24:10:29 | ToBool | | Extensions.cs:10:24:10:29 | Exit | Extensions.cs:10:24:10:29 | ToBool | | Extensions.cs:10:24:10:29 | Normal Exit | Extensions.cs:10:24:10:29 | ToBool | +| Extensions.cs:10:43:10:43 | s | Extensions.cs:10:24:10:29 | ToBool | +| Extensions.cs:10:65:10:65 | f | Extensions.cs:10:24:10:29 | ToBool | | Extensions.cs:11:5:13:5 | {...} | Extensions.cs:10:24:10:29 | ToBool | | Extensions.cs:12:9:12:20 | Before return ...; | Extensions.cs:10:24:10:29 | ToBool | | Extensions.cs:12:9:12:20 | return ...; | Extensions.cs:10:24:10:29 | ToBool | @@ -3176,6 +3271,7 @@ nodeEnclosing | Extensions.cs:20:17:20:20 | Entry | Extensions.cs:20:17:20:20 | Main | | Extensions.cs:20:17:20:20 | Exit | Extensions.cs:20:17:20:20 | Main | | Extensions.cs:20:17:20:20 | Normal Exit | Extensions.cs:20:17:20:20 | Main | +| Extensions.cs:20:29:20:29 | s | Extensions.cs:20:17:20:20 | Main | | Extensions.cs:21:5:26:5 | After {...} | Extensions.cs:20:17:20:20 | Main | | Extensions.cs:21:5:26:5 | {...} | Extensions.cs:20:17:20:20 | Main | | Extensions.cs:22:9:22:9 | access to parameter s | Extensions.cs:20:17:20:20 | Main | @@ -3580,6 +3676,7 @@ nodeEnclosing | Finally.cs:147:10:147:11 | Exceptional Exit | Finally.cs:147:10:147:11 | M8 | | Finally.cs:147:10:147:11 | Exit | Finally.cs:147:10:147:11 | M8 | | Finally.cs:147:10:147:11 | Normal Exit | Finally.cs:147:10:147:11 | M8 | +| Finally.cs:147:22:147:25 | args | Finally.cs:147:10:147:11 | M8 | | Finally.cs:148:5:170:5 | After {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:148:5:170:5 | {...} | Finally.cs:147:10:147:11 | M8 | | Finally.cs:149:9:169:9 | After try {...} ... | Finally.cs:147:10:147:11 | M8 | @@ -3694,6 +3791,8 @@ nodeEnclosing | Finally.cs:176:10:176:11 | Exceptional Exit | Finally.cs:176:10:176:11 | M9 | | Finally.cs:176:10:176:11 | Exit | Finally.cs:176:10:176:11 | M9 | | Finally.cs:176:10:176:11 | Normal Exit | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:176:18:176:19 | b1 | Finally.cs:176:10:176:11 | M9 | +| Finally.cs:176:27:176:28 | b2 | Finally.cs:176:10:176:11 | M9 | | Finally.cs:177:5:193:5 | After {...} | Finally.cs:176:10:176:11 | M9 | | Finally.cs:177:5:193:5 | {...} | Finally.cs:176:10:176:11 | M9 | | Finally.cs:178:9:192:9 | After try {...} ... | Finally.cs:176:10:176:11 | M9 | @@ -3748,6 +3847,9 @@ nodeEnclosing | Finally.cs:195:10:195:12 | Exceptional Exit | Finally.cs:195:10:195:12 | M10 | | Finally.cs:195:10:195:12 | Exit | Finally.cs:195:10:195:12 | M10 | | Finally.cs:195:10:195:12 | Normal Exit | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:195:19:195:20 | b1 | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:195:28:195:29 | b2 | Finally.cs:195:10:195:12 | M10 | +| Finally.cs:195:37:195:38 | b3 | Finally.cs:195:10:195:12 | M10 | | Finally.cs:196:5:214:5 | After {...} | Finally.cs:195:10:195:12 | M10 | | Finally.cs:196:5:214:5 | {...} | Finally.cs:195:10:195:12 | M10 | | Finally.cs:197:9:212:9 | After try {...} ... | Finally.cs:195:10:195:12 | M10 | @@ -3855,6 +3957,8 @@ nodeEnclosing | Finally.cs:233:10:233:12 | Exceptional Exit | Finally.cs:233:10:233:12 | M12 | | Finally.cs:233:10:233:12 | Exit | Finally.cs:233:10:233:12 | M12 | | Finally.cs:233:10:233:12 | Normal Exit | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:233:19:233:20 | b1 | Finally.cs:233:10:233:12 | M12 | +| Finally.cs:233:28:233:29 | b2 | Finally.cs:233:10:233:12 | M12 | | Finally.cs:234:5:261:5 | After {...} | Finally.cs:233:10:233:12 | M12 | | Finally.cs:234:5:261:5 | {...} | Finally.cs:233:10:233:12 | M12 | | Finally.cs:235:9:259:9 | After try {...} ... | Finally.cs:233:10:233:12 | M12 | @@ -3923,6 +4027,7 @@ nodeEnclosing | Finally.cs:263:10:263:12 | Exceptional Exit | Finally.cs:263:10:263:12 | M13 | | Finally.cs:263:10:263:12 | Exit | Finally.cs:263:10:263:12 | M13 | | Finally.cs:263:10:263:12 | Normal Exit | Finally.cs:263:10:263:12 | M13 | +| Finally.cs:263:18:263:18 | i | Finally.cs:263:10:263:12 | M13 | | Finally.cs:264:5:274:5 | After {...} | Finally.cs:263:10:263:12 | M13 | | Finally.cs:264:5:274:5 | {...} | Finally.cs:263:10:263:12 | M13 | | Finally.cs:265:9:273:9 | After try {...} ... | Finally.cs:263:10:263:12 | M13 | @@ -3964,6 +4069,7 @@ nodeEnclosing | Foreach.cs:6:10:6:11 | Entry | Foreach.cs:6:10:6:11 | M1 | | Foreach.cs:6:10:6:11 | Exit | Foreach.cs:6:10:6:11 | M1 | | Foreach.cs:6:10:6:11 | Normal Exit | Foreach.cs:6:10:6:11 | M1 | +| Foreach.cs:6:22:6:25 | args | Foreach.cs:6:10:6:11 | M1 | | Foreach.cs:7:5:10:5 | After {...} | Foreach.cs:6:10:6:11 | M1 | | Foreach.cs:7:5:10:5 | {...} | Foreach.cs:6:10:6:11 | M1 | | Foreach.cs:8:9:9:13 | After foreach (... ... in ...) ... | Foreach.cs:6:10:6:11 | M1 | @@ -3977,6 +4083,7 @@ nodeEnclosing | Foreach.cs:12:10:12:11 | Entry | Foreach.cs:12:10:12:11 | M2 | | Foreach.cs:12:10:12:11 | Exit | Foreach.cs:12:10:12:11 | M2 | | Foreach.cs:12:10:12:11 | Normal Exit | Foreach.cs:12:10:12:11 | M2 | +| Foreach.cs:12:22:12:25 | args | Foreach.cs:12:10:12:11 | M2 | | Foreach.cs:13:5:16:5 | After {...} | Foreach.cs:12:10:12:11 | M2 | | Foreach.cs:13:5:16:5 | {...} | Foreach.cs:12:10:12:11 | M2 | | Foreach.cs:14:9:15:13 | After foreach (... ... in ...) ... | Foreach.cs:12:10:12:11 | M2 | @@ -3990,6 +4097,7 @@ nodeEnclosing | Foreach.cs:18:10:18:11 | Entry | Foreach.cs:18:10:18:11 | M3 | | Foreach.cs:18:10:18:11 | Exit | Foreach.cs:18:10:18:11 | M3 | | Foreach.cs:18:10:18:11 | Normal Exit | Foreach.cs:18:10:18:11 | M3 | +| Foreach.cs:18:33:18:33 | e | Foreach.cs:18:10:18:11 | M3 | | Foreach.cs:19:5:22:5 | After {...} | Foreach.cs:18:10:18:11 | M3 | | Foreach.cs:19:5:22:5 | {...} | Foreach.cs:18:10:18:11 | M3 | | Foreach.cs:20:9:21:11 | After foreach (... ... in ...) ... | Foreach.cs:18:10:18:11 | M3 | @@ -4014,6 +4122,7 @@ nodeEnclosing | Foreach.cs:24:10:24:11 | Entry | Foreach.cs:24:10:24:11 | M4 | | Foreach.cs:24:10:24:11 | Exit | Foreach.cs:24:10:24:11 | M4 | | Foreach.cs:24:10:24:11 | Normal Exit | Foreach.cs:24:10:24:11 | M4 | +| Foreach.cs:24:40:24:43 | args | Foreach.cs:24:10:24:11 | M4 | | Foreach.cs:25:5:28:5 | After {...} | Foreach.cs:24:10:24:11 | M4 | | Foreach.cs:25:5:28:5 | {...} | Foreach.cs:24:10:24:11 | M4 | | Foreach.cs:26:9:27:11 | After foreach (... ... in ...) ... | Foreach.cs:24:10:24:11 | M4 | @@ -4031,6 +4140,7 @@ nodeEnclosing | Foreach.cs:30:10:30:11 | Entry | Foreach.cs:30:10:30:11 | M5 | | Foreach.cs:30:10:30:11 | Exit | Foreach.cs:30:10:30:11 | M5 | | Foreach.cs:30:10:30:11 | Normal Exit | Foreach.cs:30:10:30:11 | M5 | +| Foreach.cs:30:40:30:43 | args | Foreach.cs:30:10:30:11 | M5 | | Foreach.cs:31:5:34:5 | After {...} | Foreach.cs:30:10:30:11 | M5 | | Foreach.cs:31:5:34:5 | {...} | Foreach.cs:30:10:30:11 | M5 | | Foreach.cs:32:9:33:11 | After foreach (... ... in ...) ... | Foreach.cs:30:10:30:11 | M5 | @@ -4048,6 +4158,7 @@ nodeEnclosing | Foreach.cs:36:10:36:11 | Entry | Foreach.cs:36:10:36:11 | M6 | | Foreach.cs:36:10:36:11 | Exit | Foreach.cs:36:10:36:11 | M6 | | Foreach.cs:36:10:36:11 | Normal Exit | Foreach.cs:36:10:36:11 | M6 | +| Foreach.cs:36:40:36:43 | args | Foreach.cs:36:10:36:11 | M6 | | Foreach.cs:37:5:40:5 | After {...} | Foreach.cs:36:10:36:11 | M6 | | Foreach.cs:37:5:40:5 | {...} | Foreach.cs:36:10:36:11 | M6 | | Foreach.cs:38:9:39:11 | After foreach (... ... in ...) ... | Foreach.cs:36:10:36:11 | M6 | @@ -4114,6 +4225,7 @@ nodeEnclosing | Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:10:5:10:16 | Initializers | | Initializers.cs:10:5:10:16 | call to method | Initializers.cs:10:5:10:16 | Initializers | | Initializers.cs:10:5:10:16 | this access | Initializers.cs:10:5:10:16 | Initializers | +| Initializers.cs:10:25:10:25 | s | Initializers.cs:10:5:10:16 | Initializers | | Initializers.cs:10:28:10:30 | {...} | Initializers.cs:10:5:10:16 | Initializers | | Initializers.cs:12:10:12:10 | Entry | Initializers.cs:12:10:12:10 | M | | Initializers.cs:12:10:12:10 | Exit | Initializers.cs:12:10:12:10 | M | @@ -4234,6 +4346,7 @@ nodeEnclosing | Initializers.cs:33:9:33:11 | Entry | Initializers.cs:33:9:33:11 | Sub | | Initializers.cs:33:9:33:11 | Exit | Initializers.cs:33:9:33:11 | Sub | | Initializers.cs:33:9:33:11 | Normal Exit | Initializers.cs:33:9:33:11 | Sub | +| Initializers.cs:33:17:33:17 | i | Initializers.cs:33:9:33:11 | Sub | | Initializers.cs:33:22:33:25 | After call to constructor Sub | Initializers.cs:33:9:33:11 | Sub | | Initializers.cs:33:22:33:25 | Before call to constructor Sub | Initializers.cs:33:9:33:11 | Sub | | Initializers.cs:33:22:33:25 | call to constructor Sub | Initializers.cs:33:9:33:11 | Sub | @@ -4259,6 +4372,8 @@ nodeEnclosing | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:9:35:11 | call to method | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | Sub | +| Initializers.cs:35:17:35:17 | i | Initializers.cs:35:9:35:11 | Sub | +| Initializers.cs:35:24:35:24 | j | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:27:35:40 | After {...} | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:9:35:11 | Sub | | Initializers.cs:35:29:35:29 | After access to field I | Initializers.cs:35:9:35:11 | Sub | @@ -4300,6 +4415,7 @@ nodeEnclosing | Initializers.cs:51:10:51:13 | Entry | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:51:10:51:13 | Exit | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:51:10:51:13 | Normal Exit | Initializers.cs:51:10:51:13 | Test | +| Initializers.cs:51:19:51:19 | i | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:52:5:66:5 | After {...} | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:52:5:66:5 | {...} | Initializers.cs:51:10:51:13 | Test | | Initializers.cs:54:9:54:96 | ... ...; | Initializers.cs:51:10:51:13 | Test | @@ -4556,6 +4672,7 @@ nodeEnclosing | LoopUnrolling.cs:7:10:7:11 | Entry | LoopUnrolling.cs:7:10:7:11 | M1 | | LoopUnrolling.cs:7:10:7:11 | Exit | LoopUnrolling.cs:7:10:7:11 | M1 | | LoopUnrolling.cs:7:10:7:11 | Normal Exit | LoopUnrolling.cs:7:10:7:11 | M1 | +| LoopUnrolling.cs:7:22:7:25 | args | LoopUnrolling.cs:7:10:7:11 | M1 | | LoopUnrolling.cs:8:5:13:5 | After {...} | LoopUnrolling.cs:7:10:7:11 | M1 | | LoopUnrolling.cs:8:5:13:5 | {...} | LoopUnrolling.cs:7:10:7:11 | M1 | | LoopUnrolling.cs:9:9:10:19 | After if (...) ... | LoopUnrolling.cs:7:10:7:11 | M1 | @@ -4621,6 +4738,7 @@ nodeEnclosing | LoopUnrolling.cs:22:10:22:11 | Entry | LoopUnrolling.cs:22:10:22:11 | M3 | | LoopUnrolling.cs:22:10:22:11 | Exit | LoopUnrolling.cs:22:10:22:11 | M3 | | LoopUnrolling.cs:22:10:22:11 | Normal Exit | LoopUnrolling.cs:22:10:22:11 | M3 | +| LoopUnrolling.cs:22:20:22:23 | args | LoopUnrolling.cs:22:10:22:11 | M3 | | LoopUnrolling.cs:23:5:27:5 | After {...} | LoopUnrolling.cs:22:10:22:11 | M3 | | LoopUnrolling.cs:23:5:27:5 | {...} | LoopUnrolling.cs:22:10:22:11 | M3 | | LoopUnrolling.cs:24:9:26:40 | After foreach (... ... in ...) ... | LoopUnrolling.cs:22:10:22:11 | M3 | @@ -4772,6 +4890,7 @@ nodeEnclosing | LoopUnrolling.cs:55:10:55:11 | Entry | LoopUnrolling.cs:55:10:55:11 | M7 | | LoopUnrolling.cs:55:10:55:11 | Exit | LoopUnrolling.cs:55:10:55:11 | M7 | | LoopUnrolling.cs:55:10:55:11 | Normal Exit | LoopUnrolling.cs:55:10:55:11 | M7 | +| LoopUnrolling.cs:55:18:55:18 | b | LoopUnrolling.cs:55:10:55:11 | M7 | | LoopUnrolling.cs:56:5:65:5 | After {...} | LoopUnrolling.cs:55:10:55:11 | M7 | | LoopUnrolling.cs:56:5:65:5 | {...} | LoopUnrolling.cs:55:10:55:11 | M7 | | LoopUnrolling.cs:57:9:57:48 | ... ...; | LoopUnrolling.cs:55:10:55:11 | M7 | @@ -4824,6 +4943,7 @@ nodeEnclosing | LoopUnrolling.cs:67:10:67:11 | Entry | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:67:10:67:11 | Exit | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:67:10:67:11 | Normal Exit | LoopUnrolling.cs:67:10:67:11 | M8 | +| LoopUnrolling.cs:67:26:67:29 | args | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:68:5:74:5 | After {...} | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:68:5:74:5 | {...} | LoopUnrolling.cs:67:10:67:11 | M8 | | LoopUnrolling.cs:69:9:70:19 | After if (...) ... | LoopUnrolling.cs:67:10:67:11 | M8 | @@ -4980,6 +5100,7 @@ nodeEnclosing | MultiImplementationA.cs:7:41:7:43 | Exceptional Exit | MultiImplementationA.cs:7:41:7:43 | set_P2 | | MultiImplementationA.cs:7:41:7:43 | Exit | MultiImplementationA.cs:7:41:7:43 | set_P2 | | MultiImplementationA.cs:7:41:7:43 | Normal Exit | MultiImplementationA.cs:7:41:7:43 | set_P2 | +| MultiImplementationA.cs:7:41:7:43 | value | MultiImplementationA.cs:7:41:7:43 | set_P2 | | MultiImplementationA.cs:7:45:7:59 | {...} | MultiImplementationA.cs:7:41:7:43 | set_P2 | | MultiImplementationA.cs:7:47:7:57 | Before throw ...; | MultiImplementationA.cs:7:41:7:43 | set_P2 | | MultiImplementationA.cs:7:47:7:57 | throw ...; | MultiImplementationA.cs:7:41:7:43 | set_P2 | @@ -5002,11 +5123,14 @@ nodeEnclosing | MultiImplementationA.cs:13:16:13:20 | After ... = ... | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationA.cs:13:16:13:20 | Before ... = ... | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:11:7:11:8 | | +| MultiImplementationA.cs:14:25:14:25 | i | MultiImplementationA.cs:14:31:14:31 | get_Item | | MultiImplementationA.cs:14:31:14:31 | Entry | MultiImplementationA.cs:14:31:14:31 | get_Item | | MultiImplementationA.cs:14:31:14:31 | Exceptional Exit | MultiImplementationA.cs:14:31:14:31 | get_Item | | MultiImplementationA.cs:14:31:14:31 | Exit | MultiImplementationA.cs:14:31:14:31 | get_Item | | MultiImplementationA.cs:14:31:14:31 | Normal Exit | MultiImplementationA.cs:14:31:14:31 | get_Item | | MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | get_Item | +| MultiImplementationA.cs:15:31:15:31 | s | MultiImplementationA.cs:15:36:15:38 | get_Item | +| MultiImplementationA.cs:15:31:15:31 | s | MultiImplementationA.cs:15:54:15:56 | set_Item | | MultiImplementationA.cs:15:36:15:38 | Entry | MultiImplementationA.cs:15:36:15:38 | get_Item | | MultiImplementationA.cs:15:36:15:38 | Exceptional Exit | MultiImplementationA.cs:15:36:15:38 | get_Item | | MultiImplementationA.cs:15:36:15:38 | Exit | MultiImplementationA.cs:15:36:15:38 | get_Item | @@ -5018,10 +5142,12 @@ nodeEnclosing | MultiImplementationA.cs:15:54:15:56 | Entry | MultiImplementationA.cs:15:54:15:56 | set_Item | | MultiImplementationA.cs:15:54:15:56 | Exit | MultiImplementationA.cs:15:54:15:56 | set_Item | | MultiImplementationA.cs:15:54:15:56 | Normal Exit | MultiImplementationA.cs:15:54:15:56 | set_Item | +| MultiImplementationA.cs:15:54:15:56 | value | MultiImplementationA.cs:15:54:15:56 | set_Item | | MultiImplementationA.cs:15:58:15:60 | {...} | MultiImplementationA.cs:15:54:15:56 | set_Item | | MultiImplementationA.cs:16:17:16:18 | Entry | MultiImplementationA.cs:16:17:16:18 | M1 | | MultiImplementationA.cs:16:17:16:18 | Exit | MultiImplementationA.cs:16:17:16:18 | M1 | | MultiImplementationA.cs:16:17:16:18 | Normal Exit | MultiImplementationA.cs:16:17:16:18 | M1 | +| MultiImplementationA.cs:16:24:16:24 | i | MultiImplementationA.cs:16:17:16:18 | M1 | | MultiImplementationA.cs:17:5:19:5 | After {...} | MultiImplementationA.cs:16:17:16:18 | M1 | | MultiImplementationA.cs:17:5:19:5 | {...} | MultiImplementationA.cs:16:17:16:18 | M1 | | MultiImplementationA.cs:18:9:18:22 | Entry | MultiImplementationA.cs:18:9:18:22 | M2 | @@ -5040,6 +5166,7 @@ nodeEnclosing | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:12:20:13 | call to method | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | C2 | +| MultiImplementationA.cs:20:19:20:19 | i | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:22:20:31 | After {...} | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:12:20:13 | C2 | | MultiImplementationA.cs:20:24:20:24 | After access to field F | MultiImplementationA.cs:20:12:20:13 | C2 | @@ -5069,6 +5196,7 @@ nodeEnclosing | MultiImplementationA.cs:23:28:23:35 | Exceptional Exit | MultiImplementationA.cs:23:28:23:35 | implicit conversion | | MultiImplementationA.cs:23:28:23:35 | Exit | MultiImplementationA.cs:23:28:23:35 | implicit conversion | | MultiImplementationA.cs:23:28:23:35 | Normal Exit | MultiImplementationA.cs:23:28:23:35 | implicit conversion | +| MultiImplementationA.cs:23:44:23:44 | i | MultiImplementationA.cs:23:28:23:35 | implicit conversion | | MultiImplementationA.cs:23:50:23:53 | null | MultiImplementationA.cs:23:28:23:35 | implicit conversion | | MultiImplementationA.cs:24:16:24:16 | After access to property P | MultiImplementationA.cs:11:7:11:8 | | | MultiImplementationA.cs:24:16:24:16 | Before access to property P | MultiImplementationA.cs:11:7:11:8 | | @@ -5223,6 +5351,7 @@ nodeEnclosing | NullCoalescing.cs:3:9:3:10 | Entry | NullCoalescing.cs:3:9:3:10 | M1 | | NullCoalescing.cs:3:9:3:10 | Exit | NullCoalescing.cs:3:9:3:10 | M1 | | NullCoalescing.cs:3:9:3:10 | Normal Exit | NullCoalescing.cs:3:9:3:10 | M1 | +| NullCoalescing.cs:3:17:3:17 | i | NullCoalescing.cs:3:9:3:10 | M1 | | NullCoalescing.cs:3:23:3:23 | After access to parameter i [non-null] | NullCoalescing.cs:3:9:3:10 | M1 | | NullCoalescing.cs:3:23:3:23 | After access to parameter i [null] | NullCoalescing.cs:3:9:3:10 | M1 | | NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:9:3:10 | M1 | @@ -5232,6 +5361,7 @@ nodeEnclosing | NullCoalescing.cs:5:9:5:10 | Entry | NullCoalescing.cs:5:9:5:10 | M2 | | NullCoalescing.cs:5:9:5:10 | Exit | NullCoalescing.cs:5:9:5:10 | M2 | | NullCoalescing.cs:5:9:5:10 | Normal Exit | NullCoalescing.cs:5:9:5:10 | M2 | +| NullCoalescing.cs:5:18:5:18 | b | NullCoalescing.cs:5:9:5:10 | M2 | | NullCoalescing.cs:5:24:5:43 | ... ? ... : ... | NullCoalescing.cs:5:9:5:10 | M2 | | NullCoalescing.cs:5:24:5:43 | After ... ? ... : ... | NullCoalescing.cs:5:9:5:10 | M2 | | NullCoalescing.cs:5:25:5:25 | After access to parameter b [non-null] | NullCoalescing.cs:5:9:5:10 | M2 | @@ -5247,6 +5377,8 @@ nodeEnclosing | NullCoalescing.cs:7:12:7:13 | Entry | NullCoalescing.cs:7:12:7:13 | M3 | | NullCoalescing.cs:7:12:7:13 | Exit | NullCoalescing.cs:7:12:7:13 | M3 | | NullCoalescing.cs:7:12:7:13 | Normal Exit | NullCoalescing.cs:7:12:7:13 | M3 | +| NullCoalescing.cs:7:22:7:23 | s1 | NullCoalescing.cs:7:12:7:13 | M3 | +| NullCoalescing.cs:7:33:7:34 | s2 | NullCoalescing.cs:7:12:7:13 | M3 | | NullCoalescing.cs:7:40:7:41 | After access to parameter s1 [non-null] | NullCoalescing.cs:7:12:7:13 | M3 | | NullCoalescing.cs:7:40:7:41 | After access to parameter s1 [null] | NullCoalescing.cs:7:12:7:13 | M3 | | NullCoalescing.cs:7:40:7:41 | access to parameter s1 | NullCoalescing.cs:7:12:7:13 | M3 | @@ -5261,6 +5393,8 @@ nodeEnclosing | NullCoalescing.cs:9:12:9:13 | Entry | NullCoalescing.cs:9:12:9:13 | M4 | | NullCoalescing.cs:9:12:9:13 | Exit | NullCoalescing.cs:9:12:9:13 | M4 | | NullCoalescing.cs:9:12:9:13 | Normal Exit | NullCoalescing.cs:9:12:9:13 | M4 | +| NullCoalescing.cs:9:20:9:20 | b | NullCoalescing.cs:9:12:9:13 | M4 | +| NullCoalescing.cs:9:30:9:30 | s | NullCoalescing.cs:9:12:9:13 | M4 | | NullCoalescing.cs:9:36:9:58 | ... ?? ... | NullCoalescing.cs:9:12:9:13 | M4 | | NullCoalescing.cs:9:36:9:58 | After ... ?? ... | NullCoalescing.cs:9:12:9:13 | M4 | | NullCoalescing.cs:9:37:9:37 | After access to parameter b [false] | NullCoalescing.cs:9:12:9:13 | M4 | @@ -5284,6 +5418,9 @@ nodeEnclosing | NullCoalescing.cs:11:9:11:10 | Entry | NullCoalescing.cs:11:9:11:10 | M5 | | NullCoalescing.cs:11:9:11:10 | Exit | NullCoalescing.cs:11:9:11:10 | M5 | | NullCoalescing.cs:11:9:11:10 | Normal Exit | NullCoalescing.cs:11:9:11:10 | M5 | +| NullCoalescing.cs:11:18:11:19 | b1 | NullCoalescing.cs:11:9:11:10 | M5 | +| NullCoalescing.cs:11:27:11:28 | b2 | NullCoalescing.cs:11:9:11:10 | M5 | +| NullCoalescing.cs:11:36:11:37 | b3 | NullCoalescing.cs:11:9:11:10 | M5 | | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | NullCoalescing.cs:11:9:11:10 | M5 | | NullCoalescing.cs:11:43:11:68 | After ... ? ... : ... | NullCoalescing.cs:11:9:11:10 | M5 | | NullCoalescing.cs:11:44:11:45 | After access to parameter b1 [non-null] | NullCoalescing.cs:11:9:11:10 | M5 | @@ -5306,6 +5443,7 @@ nodeEnclosing | NullCoalescing.cs:13:10:13:11 | Entry | NullCoalescing.cs:13:10:13:11 | M6 | | NullCoalescing.cs:13:10:13:11 | Exit | NullCoalescing.cs:13:10:13:11 | M6 | | NullCoalescing.cs:13:10:13:11 | Normal Exit | NullCoalescing.cs:13:10:13:11 | M6 | +| NullCoalescing.cs:13:17:13:17 | i | NullCoalescing.cs:13:10:13:11 | M6 | | NullCoalescing.cs:14:5:18:5 | After {...} | NullCoalescing.cs:13:10:13:11 | M6 | | NullCoalescing.cs:14:5:18:5 | {...} | NullCoalescing.cs:13:10:13:11 | M6 | | NullCoalescing.cs:15:9:15:32 | ... ...; | NullCoalescing.cs:13:10:13:11 | M6 | @@ -5361,6 +5499,7 @@ nodeEnclosing | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | PartialImplementationA.cs:3:12:3:18 | Partial | | PartialImplementationA.cs:3:12:3:18 | call to method | PartialImplementationA.cs:3:12:3:18 | Partial | | PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | Partial | +| PartialImplementationA.cs:3:24:3:24 | i | PartialImplementationA.cs:3:12:3:18 | Partial | | PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:12:3:18 | Partial | | PartialImplementationB.cs:3:16:3:16 | After access to field F | PartialImplementationA.cs:1:15:1:21 | | | PartialImplementationB.cs:3:16:3:16 | Before access to field F | PartialImplementationA.cs:1:15:1:21 | | @@ -5564,6 +5703,7 @@ nodeEnclosing | Patterns.cs:47:24:47:25 | Entry | Patterns.cs:47:24:47:25 | M2 | | Patterns.cs:47:24:47:25 | Exit | Patterns.cs:47:24:47:25 | M2 | | Patterns.cs:47:24:47:25 | Normal Exit | Patterns.cs:47:24:47:25 | M2 | +| Patterns.cs:47:32:47:32 | c | Patterns.cs:47:24:47:25 | M2 | | Patterns.cs:48:9:48:9 | access to parameter c | Patterns.cs:47:24:47:25 | M2 | | Patterns.cs:48:9:48:20 | ... is ... | Patterns.cs:47:24:47:25 | M2 | | Patterns.cs:48:9:48:20 | After ... is ... | Patterns.cs:47:24:47:25 | M2 | @@ -5576,6 +5716,7 @@ nodeEnclosing | Patterns.cs:50:24:50:25 | Entry | Patterns.cs:50:24:50:25 | M3 | | Patterns.cs:50:24:50:25 | Exit | Patterns.cs:50:24:50:25 | M3 | | Patterns.cs:50:24:50:25 | Normal Exit | Patterns.cs:50:24:50:25 | M3 | +| Patterns.cs:50:34:50:34 | c | Patterns.cs:50:24:50:25 | M3 | | Patterns.cs:51:9:51:9 | access to parameter c | Patterns.cs:50:24:50:25 | M3 | | Patterns.cs:51:9:51:21 | ... is ... | Patterns.cs:50:24:50:25 | M3 | | Patterns.cs:51:9:51:21 | After ... is ... [false] | Patterns.cs:50:24:50:25 | M3 | @@ -5603,6 +5744,7 @@ nodeEnclosing | Patterns.cs:53:24:53:25 | Entry | Patterns.cs:53:24:53:25 | M4 | | Patterns.cs:53:24:53:25 | Exit | Patterns.cs:53:24:53:25 | M4 | | Patterns.cs:53:24:53:25 | Normal Exit | Patterns.cs:53:24:53:25 | M4 | +| Patterns.cs:53:34:53:34 | c | Patterns.cs:53:24:53:25 | M4 | | Patterns.cs:54:9:54:9 | access to parameter c | Patterns.cs:53:24:53:25 | M4 | | Patterns.cs:54:9:54:37 | ... is ... | Patterns.cs:53:24:53:25 | M4 | | Patterns.cs:54:9:54:37 | After ... is ... | Patterns.cs:53:24:53:25 | M4 | @@ -5623,6 +5765,7 @@ nodeEnclosing | Patterns.cs:56:26:56:27 | Entry | Patterns.cs:56:26:56:27 | M5 | | Patterns.cs:56:26:56:27 | Exit | Patterns.cs:56:26:56:27 | M5 | | Patterns.cs:56:26:56:27 | Normal Exit | Patterns.cs:56:26:56:27 | M5 | +| Patterns.cs:56:33:56:33 | i | Patterns.cs:56:26:56:27 | M5 | | Patterns.cs:57:5:63:5 | {...} | Patterns.cs:56:26:56:27 | M5 | | Patterns.cs:58:9:62:10 | Before return ...; | Patterns.cs:56:26:56:27 | M5 | | Patterns.cs:58:9:62:10 | return ...; | Patterns.cs:56:26:56:27 | M5 | @@ -5666,6 +5809,7 @@ nodeEnclosing | Patterns.cs:74:26:74:27 | Entry | Patterns.cs:74:26:74:27 | M7 | | Patterns.cs:74:26:74:27 | Exit | Patterns.cs:74:26:74:27 | M7 | | Patterns.cs:74:26:74:27 | Normal Exit | Patterns.cs:74:26:74:27 | M7 | +| Patterns.cs:74:33:74:33 | i | Patterns.cs:74:26:74:27 | M7 | | Patterns.cs:75:5:83:5 | {...} | Patterns.cs:74:26:74:27 | M7 | | Patterns.cs:76:9:82:10 | Before return ...; | Patterns.cs:74:26:74:27 | M7 | | Patterns.cs:76:9:82:10 | return ...; | Patterns.cs:74:26:74:27 | M7 | @@ -5700,6 +5844,7 @@ nodeEnclosing | Patterns.cs:85:26:85:27 | Entry | Patterns.cs:85:26:85:27 | M8 | | Patterns.cs:85:26:85:27 | Exit | Patterns.cs:85:26:85:27 | M8 | | Patterns.cs:85:26:85:27 | Normal Exit | Patterns.cs:85:26:85:27 | M8 | +| Patterns.cs:85:33:85:33 | i | Patterns.cs:85:26:85:27 | M8 | | Patterns.cs:85:39:85:39 | access to parameter i | Patterns.cs:85:26:85:27 | M8 | | Patterns.cs:85:39:85:53 | ... is ... | Patterns.cs:85:26:85:27 | M8 | | Patterns.cs:85:39:85:53 | After ... is ... [false] | Patterns.cs:85:26:85:27 | M8 | @@ -5721,6 +5866,7 @@ nodeEnclosing | Patterns.cs:87:26:87:27 | Entry | Patterns.cs:87:26:87:27 | M9 | | Patterns.cs:87:26:87:27 | Exit | Patterns.cs:87:26:87:27 | M9 | | Patterns.cs:87:26:87:27 | Normal Exit | Patterns.cs:87:26:87:27 | M9 | +| Patterns.cs:87:33:87:33 | i | Patterns.cs:87:26:87:27 | M9 | | Patterns.cs:87:39:87:39 | access to parameter i | Patterns.cs:87:26:87:27 | M9 | | Patterns.cs:87:39:87:54 | ... is ... | Patterns.cs:87:26:87:27 | M9 | | Patterns.cs:87:39:87:54 | After ... is ... [false] | Patterns.cs:87:26:87:27 | M9 | @@ -5785,6 +5931,7 @@ nodeEnclosing | PostDominance.cs:5:10:5:11 | Entry | PostDominance.cs:5:10:5:11 | M1 | | PostDominance.cs:5:10:5:11 | Exit | PostDominance.cs:5:10:5:11 | M1 | | PostDominance.cs:5:10:5:11 | Normal Exit | PostDominance.cs:5:10:5:11 | M1 | +| PostDominance.cs:5:20:5:20 | s | PostDominance.cs:5:10:5:11 | M1 | | PostDominance.cs:6:5:8:5 | After {...} | PostDominance.cs:5:10:5:11 | M1 | | PostDominance.cs:6:5:8:5 | {...} | PostDominance.cs:5:10:5:11 | M1 | | PostDominance.cs:7:9:7:28 | After call to method WriteLine | PostDominance.cs:5:10:5:11 | M1 | @@ -5796,6 +5943,7 @@ nodeEnclosing | PostDominance.cs:10:10:10:11 | Entry | PostDominance.cs:10:10:10:11 | M2 | | PostDominance.cs:10:10:10:11 | Exit | PostDominance.cs:10:10:10:11 | M2 | | PostDominance.cs:10:10:10:11 | Normal Exit | PostDominance.cs:10:10:10:11 | M2 | +| PostDominance.cs:10:20:10:20 | s | PostDominance.cs:10:10:10:11 | M2 | | PostDominance.cs:11:5:15:5 | After {...} | PostDominance.cs:10:10:10:11 | M2 | | PostDominance.cs:11:5:15:5 | {...} | PostDominance.cs:10:10:10:11 | M2 | | PostDominance.cs:12:9:13:19 | After if (...) ... | PostDominance.cs:10:10:10:11 | M2 | @@ -5819,6 +5967,7 @@ nodeEnclosing | PostDominance.cs:17:10:17:11 | Exceptional Exit | PostDominance.cs:17:10:17:11 | M3 | | PostDominance.cs:17:10:17:11 | Exit | PostDominance.cs:17:10:17:11 | M3 | | PostDominance.cs:17:10:17:11 | Normal Exit | PostDominance.cs:17:10:17:11 | M3 | +| PostDominance.cs:17:20:17:20 | s | PostDominance.cs:17:10:17:11 | M3 | | PostDominance.cs:18:5:22:5 | After {...} | PostDominance.cs:17:10:17:11 | M3 | | PostDominance.cs:18:5:22:5 | {...} | PostDominance.cs:17:10:17:11 | M3 | | PostDominance.cs:19:9:20:55 | After if (...) ... | PostDominance.cs:17:10:17:11 | M3 | @@ -6024,6 +6173,7 @@ nodeEnclosing | Switch.cs:5:10:5:11 | Entry | Switch.cs:5:10:5:11 | M1 | | Switch.cs:5:10:5:11 | Exit | Switch.cs:5:10:5:11 | M1 | | Switch.cs:5:10:5:11 | Normal Exit | Switch.cs:5:10:5:11 | M1 | +| Switch.cs:5:20:5:20 | o | Switch.cs:5:10:5:11 | M1 | | Switch.cs:6:5:8:5 | After {...} | Switch.cs:5:10:5:11 | M1 | | Switch.cs:6:5:8:5 | {...} | Switch.cs:5:10:5:11 | M1 | | Switch.cs:7:9:7:22 | After switch (...) {...} | Switch.cs:5:10:5:11 | M1 | @@ -6033,6 +6183,7 @@ nodeEnclosing | Switch.cs:10:10:10:11 | Exceptional Exit | Switch.cs:10:10:10:11 | M2 | | Switch.cs:10:10:10:11 | Exit | Switch.cs:10:10:10:11 | M2 | | Switch.cs:10:10:10:11 | Normal Exit | Switch.cs:10:10:10:11 | M2 | +| Switch.cs:10:20:10:20 | o | Switch.cs:10:10:10:11 | M2 | | Switch.cs:11:5:33:5 | {...} | Switch.cs:10:10:10:11 | M2 | | Switch.cs:12:9:32:9 | switch (...) {...} | Switch.cs:10:10:10:11 | M2 | | Switch.cs:12:17:12:17 | access to parameter o | Switch.cs:10:10:10:11 | M2 | @@ -6127,6 +6278,7 @@ nodeEnclosing | Switch.cs:44:10:44:11 | Entry | Switch.cs:44:10:44:11 | M4 | | Switch.cs:44:10:44:11 | Exit | Switch.cs:44:10:44:11 | M4 | | Switch.cs:44:10:44:11 | Normal Exit | Switch.cs:44:10:44:11 | M4 | +| Switch.cs:44:20:44:20 | o | Switch.cs:44:10:44:11 | M4 | | Switch.cs:45:5:53:5 | After {...} | Switch.cs:44:10:44:11 | M4 | | Switch.cs:45:5:53:5 | {...} | Switch.cs:44:10:44:11 | M4 | | Switch.cs:46:9:52:9 | After switch (...) {...} | Switch.cs:44:10:44:11 | M4 | @@ -6177,6 +6329,7 @@ nodeEnclosing | Switch.cs:66:10:66:11 | Entry | Switch.cs:66:10:66:11 | M6 | | Switch.cs:66:10:66:11 | Exit | Switch.cs:66:10:66:11 | M6 | | Switch.cs:66:10:66:11 | Normal Exit | Switch.cs:66:10:66:11 | M6 | +| Switch.cs:66:20:66:20 | s | Switch.cs:66:10:66:11 | M6 | | Switch.cs:67:5:75:5 | After {...} | Switch.cs:66:10:66:11 | M6 | | Switch.cs:67:5:75:5 | {...} | Switch.cs:66:10:66:11 | M6 | | Switch.cs:68:9:74:9 | After switch (...) {...} | Switch.cs:66:10:66:11 | M6 | @@ -6200,6 +6353,8 @@ nodeEnclosing | Switch.cs:77:10:77:11 | Entry | Switch.cs:77:10:77:11 | M7 | | Switch.cs:77:10:77:11 | Exit | Switch.cs:77:10:77:11 | M7 | | Switch.cs:77:10:77:11 | Normal Exit | Switch.cs:77:10:77:11 | M7 | +| Switch.cs:77:17:77:17 | i | Switch.cs:77:10:77:11 | M7 | +| Switch.cs:77:24:77:24 | j | Switch.cs:77:10:77:11 | M7 | | Switch.cs:78:5:89:5 | {...} | Switch.cs:77:10:77:11 | M7 | | Switch.cs:79:9:87:9 | After switch (...) {...} | Switch.cs:77:10:77:11 | M7 | | Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:77:10:77:11 | M7 | @@ -6234,6 +6389,7 @@ nodeEnclosing | Switch.cs:91:10:91:11 | Entry | Switch.cs:91:10:91:11 | M8 | | Switch.cs:91:10:91:11 | Exit | Switch.cs:91:10:91:11 | M8 | | Switch.cs:91:10:91:11 | Normal Exit | Switch.cs:91:10:91:11 | M8 | +| Switch.cs:91:20:91:20 | o | Switch.cs:91:10:91:11 | M8 | | Switch.cs:92:5:99:5 | {...} | Switch.cs:91:10:91:11 | M8 | | Switch.cs:93:9:97:9 | After switch (...) {...} | Switch.cs:91:10:91:11 | M8 | | Switch.cs:93:9:97:9 | switch (...) {...} | Switch.cs:91:10:91:11 | M8 | @@ -6251,6 +6407,7 @@ nodeEnclosing | Switch.cs:101:9:101:10 | Entry | Switch.cs:101:9:101:10 | M9 | | Switch.cs:101:9:101:10 | Exit | Switch.cs:101:9:101:10 | M9 | | Switch.cs:101:9:101:10 | Normal Exit | Switch.cs:101:9:101:10 | M9 | +| Switch.cs:101:19:101:19 | s | Switch.cs:101:9:101:10 | M9 | | Switch.cs:102:5:109:5 | {...} | Switch.cs:101:9:101:10 | M9 | | Switch.cs:103:9:107:9 | After switch (...) {...} | Switch.cs:101:9:101:10 | M9 | | Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:101:9:101:10 | M9 | @@ -6291,6 +6448,7 @@ nodeEnclosing | Switch.cs:113:9:113:11 | Entry | Switch.cs:113:9:113:11 | M10 | | Switch.cs:113:9:113:11 | Exit | Switch.cs:113:9:113:11 | M10 | | Switch.cs:113:9:113:11 | Normal Exit | Switch.cs:113:9:113:11 | M10 | +| Switch.cs:113:20:113:20 | s | Switch.cs:113:9:113:11 | M10 | | Switch.cs:114:5:121:5 | {...} | Switch.cs:113:9:113:11 | M10 | | Switch.cs:115:9:119:9 | After switch (...) {...} | Switch.cs:113:9:113:11 | M10 | | Switch.cs:115:9:119:9 | switch (...) {...} | Switch.cs:113:9:113:11 | M10 | @@ -6333,6 +6491,7 @@ nodeEnclosing | Switch.cs:123:10:123:12 | Entry | Switch.cs:123:10:123:12 | M11 | | Switch.cs:123:10:123:12 | Exit | Switch.cs:123:10:123:12 | M11 | | Switch.cs:123:10:123:12 | Normal Exit | Switch.cs:123:10:123:12 | M11 | +| Switch.cs:123:21:123:21 | o | Switch.cs:123:10:123:12 | M11 | | Switch.cs:124:5:127:5 | After {...} | Switch.cs:123:10:123:12 | M11 | | Switch.cs:124:5:127:5 | {...} | Switch.cs:123:10:123:12 | M11 | | Switch.cs:125:9:126:19 | After if (...) ... | Switch.cs:123:10:123:12 | M11 | @@ -6355,6 +6514,7 @@ nodeEnclosing | Switch.cs:129:12:129:14 | Entry | Switch.cs:129:12:129:14 | M12 | | Switch.cs:129:12:129:14 | Exit | Switch.cs:129:12:129:14 | M12 | | Switch.cs:129:12:129:14 | Normal Exit | Switch.cs:129:12:129:14 | M12 | +| Switch.cs:129:23:129:23 | o | Switch.cs:129:12:129:14 | M12 | | Switch.cs:130:5:132:5 | {...} | Switch.cs:129:12:129:14 | M12 | | Switch.cs:131:9:131:67 | Before return ...; | Switch.cs:129:12:129:14 | M12 | | Switch.cs:131:9:131:67 | return ...; | Switch.cs:129:12:129:14 | M12 | @@ -6377,6 +6537,7 @@ nodeEnclosing | Switch.cs:134:9:134:11 | Entry | Switch.cs:134:9:134:11 | M13 | | Switch.cs:134:9:134:11 | Exit | Switch.cs:134:9:134:11 | M13 | | Switch.cs:134:9:134:11 | Normal Exit | Switch.cs:134:9:134:11 | M13 | +| Switch.cs:134:17:134:17 | i | Switch.cs:134:9:134:11 | M13 | | Switch.cs:135:5:142:5 | {...} | Switch.cs:134:9:134:11 | M13 | | Switch.cs:136:9:141:9 | switch (...) {...} | Switch.cs:134:9:134:11 | M13 | | Switch.cs:136:17:136:17 | access to parameter i | Switch.cs:134:9:134:11 | M13 | @@ -6405,6 +6566,7 @@ nodeEnclosing | Switch.cs:144:9:144:11 | Entry | Switch.cs:144:9:144:11 | M14 | | Switch.cs:144:9:144:11 | Exit | Switch.cs:144:9:144:11 | M14 | | Switch.cs:144:9:144:11 | Normal Exit | Switch.cs:144:9:144:11 | M14 | +| Switch.cs:144:17:144:17 | i | Switch.cs:144:9:144:11 | M14 | | Switch.cs:145:5:152:5 | {...} | Switch.cs:144:9:144:11 | M14 | | Switch.cs:146:9:151:9 | switch (...) {...} | Switch.cs:144:9:144:11 | M14 | | Switch.cs:146:17:146:17 | access to parameter i | Switch.cs:144:9:144:11 | M14 | @@ -6433,6 +6595,7 @@ nodeEnclosing | Switch.cs:154:10:154:12 | Entry | Switch.cs:154:10:154:12 | M15 | | Switch.cs:154:10:154:12 | Exit | Switch.cs:154:10:154:12 | M15 | | Switch.cs:154:10:154:12 | Normal Exit | Switch.cs:154:10:154:12 | M15 | +| Switch.cs:154:19:154:19 | b | Switch.cs:154:10:154:12 | M15 | | Switch.cs:155:5:161:5 | After {...} | Switch.cs:154:10:154:12 | M15 | | Switch.cs:155:5:161:5 | {...} | Switch.cs:154:10:154:12 | M15 | | Switch.cs:156:9:156:55 | ... ...; | Switch.cs:154:10:154:12 | M15 | @@ -6488,6 +6651,7 @@ nodeEnclosing | Switch.cs:163:10:163:12 | Entry | Switch.cs:163:10:163:12 | M16 | | Switch.cs:163:10:163:12 | Exit | Switch.cs:163:10:163:12 | M16 | | Switch.cs:163:10:163:12 | Normal Exit | Switch.cs:163:10:163:12 | M16 | +| Switch.cs:163:18:163:18 | i | Switch.cs:163:10:163:12 | M16 | | Switch.cs:164:5:178:5 | After {...} | Switch.cs:163:10:163:12 | M16 | | Switch.cs:164:5:178:5 | {...} | Switch.cs:163:10:163:12 | M16 | | Switch.cs:165:9:177:9 | After switch (...) {...} | Switch.cs:163:10:163:12 | M16 | @@ -6545,6 +6709,7 @@ nodeEnclosing | TypeAccesses.cs:3:10:3:10 | Entry | TypeAccesses.cs:3:10:3:10 | M | | TypeAccesses.cs:3:10:3:10 | Exit | TypeAccesses.cs:3:10:3:10 | M | | TypeAccesses.cs:3:10:3:10 | Normal Exit | TypeAccesses.cs:3:10:3:10 | M | +| TypeAccesses.cs:3:19:3:19 | o | TypeAccesses.cs:3:10:3:10 | M | | TypeAccesses.cs:4:5:9:5 | After {...} | TypeAccesses.cs:3:10:3:10 | M | | TypeAccesses.cs:4:5:9:5 | {...} | TypeAccesses.cs:3:10:3:10 | M | | TypeAccesses.cs:5:9:5:26 | ... ...; | TypeAccesses.cs:3:10:3:10 | M | @@ -6598,6 +6763,7 @@ nodeEnclosing | VarDecls.cs:5:18:5:19 | Entry | VarDecls.cs:5:18:5:19 | M1 | | VarDecls.cs:5:18:5:19 | Exit | VarDecls.cs:5:18:5:19 | M1 | | VarDecls.cs:5:18:5:19 | Normal Exit | VarDecls.cs:5:18:5:19 | M1 | +| VarDecls.cs:5:30:5:36 | strings | VarDecls.cs:5:18:5:19 | M1 | | VarDecls.cs:6:5:11:5 | {...} | VarDecls.cs:5:18:5:19 | M1 | | VarDecls.cs:7:9:10:9 | fixed(...) { ... } | VarDecls.cs:5:18:5:19 | M1 | | VarDecls.cs:7:22:7:23 | access to local variable c1 | VarDecls.cs:5:18:5:19 | M1 | @@ -6634,6 +6800,7 @@ nodeEnclosing | VarDecls.cs:13:12:13:13 | Entry | VarDecls.cs:13:12:13:13 | M2 | | VarDecls.cs:13:12:13:13 | Exit | VarDecls.cs:13:12:13:13 | M2 | | VarDecls.cs:13:12:13:13 | Normal Exit | VarDecls.cs:13:12:13:13 | M2 | +| VarDecls.cs:13:22:13:22 | s | VarDecls.cs:13:12:13:13 | M2 | | VarDecls.cs:14:5:17:5 | {...} | VarDecls.cs:13:12:13:13 | M2 | | VarDecls.cs:15:9:15:30 | ... ...; | VarDecls.cs:13:12:13:13 | M2 | | VarDecls.cs:15:9:15:30 | After ... ...; | VarDecls.cs:13:12:13:13 | M2 | @@ -6657,6 +6824,7 @@ nodeEnclosing | VarDecls.cs:19:7:19:8 | Entry | VarDecls.cs:19:7:19:8 | M3 | | VarDecls.cs:19:7:19:8 | Exit | VarDecls.cs:19:7:19:8 | M3 | | VarDecls.cs:19:7:19:8 | Normal Exit | VarDecls.cs:19:7:19:8 | M3 | +| VarDecls.cs:19:15:19:15 | b | VarDecls.cs:19:7:19:8 | M3 | | VarDecls.cs:20:5:26:5 | {...} | VarDecls.cs:19:7:19:8 | M3 | | VarDecls.cs:21:9:22:13 | After using (...) {...} | VarDecls.cs:19:7:19:8 | M3 | | VarDecls.cs:21:9:22:13 | using (...) {...} | VarDecls.cs:19:7:19:8 | M3 | @@ -6706,6 +6874,7 @@ nodeEnclosing | cflow.cs:5:17:5:20 | Entry | cflow.cs:5:17:5:20 | Main | | cflow.cs:5:17:5:20 | Exit | cflow.cs:5:17:5:20 | Main | | cflow.cs:5:17:5:20 | Normal Exit | cflow.cs:5:17:5:20 | Main | +| cflow.cs:5:31:5:34 | args | cflow.cs:5:17:5:20 | Main | | cflow.cs:6:5:35:5 | After {...} | cflow.cs:5:17:5:20 | Main | | cflow.cs:6:5:35:5 | {...} | cflow.cs:5:17:5:20 | Main | | cflow.cs:7:9:7:28 | ... ...; | cflow.cs:5:17:5:20 | Main | @@ -6889,6 +7058,7 @@ nodeEnclosing | cflow.cs:37:17:37:22 | Exceptional Exit | cflow.cs:37:17:37:22 | Switch | | cflow.cs:37:17:37:22 | Exit | cflow.cs:37:17:37:22 | Switch | | cflow.cs:37:17:37:22 | Normal Exit | cflow.cs:37:17:37:22 | Switch | +| cflow.cs:37:28:37:28 | a | cflow.cs:37:17:37:22 | Switch | | cflow.cs:38:5:68:5 | {...} | cflow.cs:37:17:37:22 | Switch | | cflow.cs:39:9:50:9 | After switch (...) {...} | cflow.cs:37:17:37:22 | Switch | | cflow.cs:39:9:50:9 | switch (...) {...} | cflow.cs:37:17:37:22 | Switch | @@ -6996,6 +7166,7 @@ nodeEnclosing | cflow.cs:70:18:70:18 | Entry | cflow.cs:70:18:70:18 | M | | cflow.cs:70:18:70:18 | Exit | cflow.cs:70:18:70:18 | M | | cflow.cs:70:18:70:18 | Normal Exit | cflow.cs:70:18:70:18 | M | +| cflow.cs:70:27:70:27 | s | cflow.cs:70:18:70:18 | M | | cflow.cs:71:5:82:5 | After {...} | cflow.cs:70:18:70:18 | M | | cflow.cs:71:5:82:5 | {...} | cflow.cs:70:18:70:18 | M | | cflow.cs:72:9:73:19 | After if (...) ... | cflow.cs:70:18:70:18 | M | @@ -7038,6 +7209,7 @@ nodeEnclosing | cflow.cs:84:18:84:19 | Entry | cflow.cs:84:18:84:19 | M2 | | cflow.cs:84:18:84:19 | Exit | cflow.cs:84:18:84:19 | M2 | | cflow.cs:84:18:84:19 | Normal Exit | cflow.cs:84:18:84:19 | M2 | +| cflow.cs:84:28:84:28 | s | cflow.cs:84:18:84:19 | M2 | | cflow.cs:85:5:88:5 | After {...} | cflow.cs:84:18:84:19 | M2 | | cflow.cs:85:5:88:5 | {...} | cflow.cs:84:18:84:19 | M2 | | cflow.cs:86:9:87:33 | After if (...) ... | cflow.cs:84:18:84:19 | M2 | @@ -7070,6 +7242,7 @@ nodeEnclosing | cflow.cs:90:18:90:19 | Exceptional Exit | cflow.cs:90:18:90:19 | M3 | | cflow.cs:90:18:90:19 | Exit | cflow.cs:90:18:90:19 | M3 | | cflow.cs:90:18:90:19 | Normal Exit | cflow.cs:90:18:90:19 | M3 | +| cflow.cs:90:28:90:28 | s | cflow.cs:90:18:90:19 | M3 | | cflow.cs:91:5:104:5 | After {...} | cflow.cs:90:18:90:19 | M3 | | cflow.cs:91:5:104:5 | {...} | cflow.cs:90:18:90:19 | M3 | | cflow.cs:92:9:93:49 | After if (...) ... | cflow.cs:90:18:90:19 | M3 | @@ -7157,6 +7330,7 @@ nodeEnclosing | cflow.cs:106:18:106:19 | Entry | cflow.cs:106:18:106:19 | M4 | | cflow.cs:106:18:106:19 | Exit | cflow.cs:106:18:106:19 | M4 | | cflow.cs:106:18:106:19 | Normal Exit | cflow.cs:106:18:106:19 | M4 | +| cflow.cs:106:28:106:28 | s | cflow.cs:106:18:106:19 | M4 | | cflow.cs:107:5:117:5 | After {...} | cflow.cs:106:18:106:19 | M4 | | cflow.cs:107:5:117:5 | {...} | cflow.cs:106:18:106:19 | M4 | | cflow.cs:108:9:115:9 | After if (...) ... | cflow.cs:106:18:106:19 | M4 | @@ -7189,6 +7363,7 @@ nodeEnclosing | cflow.cs:119:20:119:21 | Entry | cflow.cs:119:20:119:21 | M5 | | cflow.cs:119:20:119:21 | Exit | cflow.cs:119:20:119:21 | M5 | | cflow.cs:119:20:119:21 | Normal Exit | cflow.cs:119:20:119:21 | M5 | +| cflow.cs:119:30:119:30 | s | cflow.cs:119:20:119:21 | M5 | | cflow.cs:120:5:124:5 | {...} | cflow.cs:119:20:119:21 | M5 | | cflow.cs:121:9:121:18 | ... ...; | cflow.cs:119:20:119:21 | M5 | | cflow.cs:121:9:121:18 | After ... ...; | cflow.cs:119:20:119:21 | M5 | @@ -7236,6 +7411,7 @@ nodeEnclosing | cflow.cs:127:62:127:64 | Entry | cflow.cs:127:62:127:64 | set_Prop | | cflow.cs:127:62:127:64 | Exit | cflow.cs:127:62:127:64 | set_Prop | | cflow.cs:127:62:127:64 | Normal Exit | cflow.cs:127:62:127:64 | set_Prop | +| cflow.cs:127:62:127:64 | value | cflow.cs:127:62:127:64 | set_Prop | | cflow.cs:127:66:127:83 | After {...} | cflow.cs:127:62:127:64 | set_Prop | | cflow.cs:127:66:127:83 | {...} | cflow.cs:127:62:127:64 | set_Prop | | cflow.cs:127:68:127:72 | After access to field Field | cflow.cs:127:62:127:64 | set_Prop | @@ -7258,6 +7434,7 @@ nodeEnclosing | cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:129:5:129:15 | ControlFlow | | cflow.cs:129:5:129:15 | call to method | cflow.cs:129:5:129:15 | ControlFlow | | cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | ControlFlow | +| cflow.cs:129:24:129:24 | s | cflow.cs:129:5:129:15 | ControlFlow | | cflow.cs:130:5:132:5 | After {...} | cflow.cs:129:5:129:15 | ControlFlow | | cflow.cs:130:5:132:5 | {...} | cflow.cs:129:5:129:15 | ControlFlow | | cflow.cs:131:9:131:13 | After access to field Field | cflow.cs:129:5:129:15 | ControlFlow | @@ -7273,6 +7450,7 @@ nodeEnclosing | cflow.cs:134:5:134:15 | Entry | cflow.cs:134:5:134:15 | ControlFlow | | cflow.cs:134:5:134:15 | Exit | cflow.cs:134:5:134:15 | ControlFlow | | cflow.cs:134:5:134:15 | Normal Exit | cflow.cs:134:5:134:15 | ControlFlow | +| cflow.cs:134:21:134:21 | i | cflow.cs:134:5:134:15 | ControlFlow | | cflow.cs:134:26:134:29 | After call to constructor ControlFlow | cflow.cs:134:5:134:15 | ControlFlow | | cflow.cs:134:26:134:29 | Before call to constructor ControlFlow | cflow.cs:134:5:134:15 | ControlFlow | | cflow.cs:134:26:134:29 | call to constructor ControlFlow | cflow.cs:134:5:134:15 | ControlFlow | @@ -7300,6 +7478,8 @@ nodeEnclosing | cflow.cs:138:40:138:40 | Entry | cflow.cs:138:40:138:40 | + | | cflow.cs:138:40:138:40 | Exit | cflow.cs:138:40:138:40 | + | | cflow.cs:138:40:138:40 | Normal Exit | cflow.cs:138:40:138:40 | + | +| cflow.cs:138:54:138:54 | x | cflow.cs:138:40:138:40 | + | +| cflow.cs:138:69:138:69 | y | cflow.cs:138:40:138:40 | + | | cflow.cs:139:5:142:5 | {...} | cflow.cs:138:40:138:40 | + | | cflow.cs:140:9:140:28 | After call to method WriteLine | cflow.cs:138:40:138:40 | + | | cflow.cs:140:9:140:28 | Before call to method WriteLine | cflow.cs:138:40:138:40 | + | @@ -7310,6 +7490,8 @@ nodeEnclosing | cflow.cs:141:9:141:17 | Before return ...; | cflow.cs:138:40:138:40 | + | | cflow.cs:141:9:141:17 | return ...; | cflow.cs:138:40:138:40 | + | | cflow.cs:141:16:141:16 | access to parameter y | cflow.cs:138:40:138:40 | + | +| cflow.cs:144:28:144:28 | i | cflow.cs:144:33:144:35 | get_Item | +| cflow.cs:144:28:144:28 | i | cflow.cs:144:56:144:58 | set_Item | | cflow.cs:144:33:144:35 | Entry | cflow.cs:144:33:144:35 | get_Item | | cflow.cs:144:33:144:35 | Exit | cflow.cs:144:33:144:35 | get_Item | | cflow.cs:144:33:144:35 | Normal Exit | cflow.cs:144:33:144:35 | get_Item | @@ -7327,6 +7509,7 @@ nodeEnclosing | cflow.cs:144:56:144:58 | Entry | cflow.cs:144:56:144:58 | set_Item | | cflow.cs:144:56:144:58 | Exit | cflow.cs:144:56:144:58 | set_Item | | cflow.cs:144:56:144:58 | Normal Exit | cflow.cs:144:56:144:58 | set_Item | +| cflow.cs:144:56:144:58 | value | cflow.cs:144:56:144:58 | set_Item | | cflow.cs:144:60:144:62 | {...} | cflow.cs:144:56:144:58 | set_Item | | cflow.cs:146:10:146:12 | Entry | cflow.cs:146:10:146:12 | For | | cflow.cs:146:10:146:12 | Exit | cflow.cs:146:10:146:12 | For | @@ -7488,6 +7671,7 @@ nodeEnclosing | cflow.cs:181:24:181:37 | After Func y = ... | cflow.cs:179:10:179:16 | Lambdas | | cflow.cs:181:24:181:37 | Before Func y = ... | cflow.cs:179:10:179:16 | Lambdas | | cflow.cs:181:24:181:37 | Func y = ... | cflow.cs:179:10:179:16 | Lambdas | +| cflow.cs:181:28:181:28 | x | cflow.cs:181:28:181:37 | (...) => ... | | cflow.cs:181:28:181:37 | (...) => ... | cflow.cs:179:10:179:16 | Lambdas | | cflow.cs:181:28:181:37 | Entry | cflow.cs:181:28:181:37 | (...) => ... | | cflow.cs:181:28:181:37 | Exit | cflow.cs:181:28:181:37 | (...) => ... | @@ -7507,6 +7691,7 @@ nodeEnclosing | cflow.cs:182:28:182:61 | Exit | cflow.cs:182:28:182:61 | delegate(...) { ... } | | cflow.cs:182:28:182:61 | Normal Exit | cflow.cs:182:28:182:61 | delegate(...) { ... } | | cflow.cs:182:28:182:61 | delegate(...) { ... } | cflow.cs:179:10:179:16 | Lambdas | +| cflow.cs:182:42:182:42 | x | cflow.cs:182:28:182:61 | delegate(...) { ... } | | cflow.cs:182:45:182:61 | {...} | cflow.cs:182:28:182:61 | delegate(...) { ... } | | cflow.cs:182:47:182:59 | Before return ...; | cflow.cs:182:28:182:61 | delegate(...) { ... } | | cflow.cs:182:47:182:59 | return ...; | cflow.cs:182:28:182:61 | delegate(...) { ... } | @@ -7981,6 +8166,7 @@ nodeEnclosing | cflow.cs:284:5:284:18 | Entry | cflow.cs:284:5:284:18 | ControlFlowSub | | cflow.cs:284:5:284:18 | Exit | cflow.cs:284:5:284:18 | ControlFlowSub | | cflow.cs:284:5:284:18 | Normal Exit | cflow.cs:284:5:284:18 | ControlFlowSub | +| cflow.cs:284:27:284:27 | s | cflow.cs:284:5:284:18 | ControlFlowSub | | cflow.cs:284:32:284:35 | After call to constructor ControlFlowSub | cflow.cs:284:5:284:18 | ControlFlowSub | | cflow.cs:284:32:284:35 | Before call to constructor ControlFlowSub | cflow.cs:284:5:284:18 | ControlFlowSub | | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub | cflow.cs:284:5:284:18 | ControlFlowSub | @@ -7988,6 +8174,7 @@ nodeEnclosing | cflow.cs:286:5:286:18 | Entry | cflow.cs:286:5:286:18 | ControlFlowSub | | cflow.cs:286:5:286:18 | Exit | cflow.cs:286:5:286:18 | ControlFlowSub | | cflow.cs:286:5:286:18 | Normal Exit | cflow.cs:286:5:286:18 | ControlFlowSub | +| cflow.cs:286:24:286:24 | i | cflow.cs:286:5:286:18 | ControlFlowSub | | cflow.cs:286:29:286:32 | After call to constructor ControlFlowSub | cflow.cs:286:5:286:18 | ControlFlowSub | | cflow.cs:286:29:286:32 | Before call to constructor ControlFlowSub | cflow.cs:286:5:286:18 | ControlFlowSub | | cflow.cs:286:29:286:32 | call to constructor ControlFlowSub | cflow.cs:286:5:286:18 | ControlFlowSub | @@ -8010,6 +8197,7 @@ nodeEnclosing | cflow.cs:291:12:291:12 | Entry | cflow.cs:291:12:291:12 | M | | cflow.cs:291:12:291:12 | Exit | cflow.cs:291:12:291:12 | M | | cflow.cs:291:12:291:12 | Normal Exit | cflow.cs:291:12:291:12 | M | +| cflow.cs:291:32:291:32 | f | cflow.cs:291:12:291:12 | M | | cflow.cs:291:38:291:38 | access to parameter f | cflow.cs:291:12:291:12 | M | | cflow.cs:291:38:291:41 | After delegate call | cflow.cs:291:12:291:12 | M | | cflow.cs:291:38:291:41 | Before delegate call | cflow.cs:291:12:291:12 | M | @@ -8025,10 +8213,16 @@ nodeEnclosing | cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:5:296:25 | NegationInConstructor | | cflow.cs:296:5:296:25 | call to method | cflow.cs:296:5:296:25 | NegationInConstructor | | cflow.cs:296:5:296:25 | this access | cflow.cs:296:5:296:25 | NegationInConstructor | +| cflow.cs:296:32:296:32 | b | cflow.cs:296:5:296:25 | NegationInConstructor | +| cflow.cs:296:39:296:39 | i | cflow.cs:296:5:296:25 | NegationInConstructor | +| cflow.cs:296:49:296:49 | s | cflow.cs:296:5:296:25 | NegationInConstructor | | cflow.cs:296:52:296:54 | {...} | cflow.cs:296:5:296:25 | NegationInConstructor | | cflow.cs:298:10:298:10 | Entry | cflow.cs:298:10:298:10 | M | | cflow.cs:298:10:298:10 | Exit | cflow.cs:298:10:298:10 | M | | cflow.cs:298:10:298:10 | Normal Exit | cflow.cs:298:10:298:10 | M | +| cflow.cs:298:16:298:16 | i | cflow.cs:298:10:298:10 | M | +| cflow.cs:298:26:298:26 | s | cflow.cs:298:10:298:10 | M | +| cflow.cs:298:34:298:34 | b | cflow.cs:298:10:298:10 | M | | cflow.cs:299:5:301:5 | After {...} | cflow.cs:298:10:298:10 | M | | cflow.cs:299:5:301:5 | {...} | cflow.cs:298:10:298:10 | M | | cflow.cs:300:9:300:72 | After object creation of type NegationInConstructor | cflow.cs:298:10:298:10 | M | @@ -8072,6 +8266,8 @@ nodeEnclosing | cflow.cs:306:60:310:5 | Exit | cflow.cs:306:60:310:5 | get__getter | | cflow.cs:306:60:310:5 | Normal Exit | cflow.cs:306:60:310:5 | (...) => ... | | cflow.cs:306:60:310:5 | Normal Exit | cflow.cs:306:60:310:5 | get__getter | +| cflow.cs:306:61:306:61 | o | cflow.cs:306:60:310:5 | (...) => ... | +| cflow.cs:306:64:306:64 | n | cflow.cs:306:60:310:5 | (...) => ... | | cflow.cs:307:5:310:5 | {...} | cflow.cs:306:60:310:5 | (...) => ... | | cflow.cs:308:9:308:21 | ... ...; | cflow.cs:306:60:310:5 | (...) => ... | | cflow.cs:308:9:308:21 | After ... ...; | cflow.cs:306:60:310:5 | (...) => ... | @@ -8521,6 +8717,12 @@ blockEnclosing | Conditions.cs:146:13:146:13 | After access to parameter b [true] | Conditions.cs:143:10:143:12 | M11 | | DefaultParam.cs:1:7:1:18 | Entry | DefaultParam.cs:1:7:1:18 | DefaultParam | | DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:3:30:3:30 | After s [match] | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:3:30:3:30 | After s [no-match] | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:3:42:3:42 | After i [match] | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:3:42:3:42 | After i [no-match] | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:12:3:13 | M1 | +| DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:3:12:3:13 | M1 | | ExitMethods.cs:6:7:6:17 | Entry | ExitMethods.cs:6:7:6:17 | ExitMethods | | ExitMethods.cs:8:10:8:11 | Entry | ExitMethods.cs:8:10:8:11 | M1 | | ExitMethods.cs:14:10:14:11 | Entry | ExitMethods.cs:14:10:14:11 | M2 | diff --git a/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected b/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected index 4451a8fb1aa7..a6c15e141d0a 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected @@ -2,10 +2,16 @@ | AccessorCalls.cs:1:7:1:19 | call to method | AccessorCalls.cs:1:7:1:19 | this access | | AccessorCalls.cs:1:7:1:19 | this access | AccessorCalls.cs:1:7:1:19 | this access | | AccessorCalls.cs:1:7:1:19 | {...} | AccessorCalls.cs:1:7:1:19 | {...} | +| AccessorCalls.cs:5:18:5:18 | i | AccessorCalls.cs:5:18:5:18 | i | +| AccessorCalls.cs:5:18:5:18 | i | AccessorCalls.cs:5:18:5:18 | i | | AccessorCalls.cs:5:30:5:30 | access to parameter i | AccessorCalls.cs:5:30:5:30 | access to parameter i | +| AccessorCalls.cs:5:33:5:35 | value | AccessorCalls.cs:5:33:5:35 | value | | AccessorCalls.cs:5:37:5:39 | {...} | AccessorCalls.cs:5:37:5:39 | {...} | +| AccessorCalls.cs:7:32:7:34 | value | AccessorCalls.cs:7:32:7:34 | value | | AccessorCalls.cs:7:36:7:38 | {...} | AccessorCalls.cs:7:36:7:38 | {...} | +| AccessorCalls.cs:7:40:7:45 | value | AccessorCalls.cs:7:40:7:45 | value | | AccessorCalls.cs:7:47:7:49 | {...} | AccessorCalls.cs:7:47:7:49 | {...} | +| AccessorCalls.cs:10:26:10:26 | e | AccessorCalls.cs:10:26:10:26 | e | | AccessorCalls.cs:11:5:17:5 | {...} | AccessorCalls.cs:11:5:17:5 | {...} | | AccessorCalls.cs:12:9:12:12 | this access | AccessorCalls.cs:12:9:12:12 | this access | | AccessorCalls.cs:12:9:12:18 | access to field Field | AccessorCalls.cs:12:9:12:12 | this access | @@ -37,6 +43,7 @@ | AccessorCalls.cs:16:9:16:23 | ... -= ... | AccessorCalls.cs:16:9:16:12 | this access | | AccessorCalls.cs:16:9:16:24 | ...; | AccessorCalls.cs:16:9:16:24 | ...; | | AccessorCalls.cs:16:23:16:23 | access to parameter e | AccessorCalls.cs:16:23:16:23 | access to parameter e | +| AccessorCalls.cs:19:26:19:26 | e | AccessorCalls.cs:19:26:19:26 | e | | AccessorCalls.cs:20:5:26:5 | {...} | AccessorCalls.cs:20:5:26:5 | {...} | | AccessorCalls.cs:21:9:21:12 | this access | AccessorCalls.cs:21:9:21:12 | this access | | AccessorCalls.cs:21:9:21:14 | access to field x | AccessorCalls.cs:21:9:21:12 | this access | @@ -155,6 +162,7 @@ | AccessorCalls.cs:53:22:53:27 | access to field x | AccessorCalls.cs:53:22:53:25 | this access | | AccessorCalls.cs:53:22:53:30 | access to indexer | AccessorCalls.cs:53:22:53:25 | this access | | AccessorCalls.cs:53:29:53:29 | 0 | AccessorCalls.cs:53:29:53:29 | 0 | +| AccessorCalls.cs:56:17:56:17 | i | AccessorCalls.cs:56:17:56:17 | i | | AccessorCalls.cs:57:5:59:5 | {...} | AccessorCalls.cs:57:5:59:5 | {...} | | AccessorCalls.cs:58:9:58:45 | (..., ...) | AccessorCalls.cs:58:10:58:13 | this access | | AccessorCalls.cs:58:9:58:85 | ... = ... | AccessorCalls.cs:58:10:58:13 | this access | @@ -178,6 +186,7 @@ | AccessorCalls.cs:58:77:58:80 | this access | AccessorCalls.cs:58:77:58:80 | this access | | AccessorCalls.cs:58:77:58:83 | access to indexer | AccessorCalls.cs:58:77:58:80 | this access | | AccessorCalls.cs:58:82:58:82 | 1 | AccessorCalls.cs:58:82:58:82 | 1 | +| AccessorCalls.cs:61:17:61:17 | i | AccessorCalls.cs:61:17:61:17 | i | | AccessorCalls.cs:62:5:64:5 | {...} | AccessorCalls.cs:62:5:64:5 | {...} | | AccessorCalls.cs:63:9:63:51 | (..., ...) | AccessorCalls.cs:63:10:63:13 | this access | | AccessorCalls.cs:63:9:63:97 | ... = ... | AccessorCalls.cs:63:10:63:13 | this access | @@ -207,6 +216,9 @@ | AccessorCalls.cs:63:87:63:92 | access to field x | AccessorCalls.cs:63:87:63:90 | this access | | AccessorCalls.cs:63:87:63:95 | access to indexer | AccessorCalls.cs:63:87:63:90 | this access | | AccessorCalls.cs:63:94:63:94 | 1 | AccessorCalls.cs:63:94:63:94 | 1 | +| AccessorCalls.cs:66:20:66:20 | o | AccessorCalls.cs:66:20:66:20 | o | +| AccessorCalls.cs:66:27:66:27 | i | AccessorCalls.cs:66:27:66:27 | i | +| AccessorCalls.cs:66:43:66:43 | e | AccessorCalls.cs:66:43:66:43 | e | | AccessorCalls.cs:67:5:74:5 | {...} | AccessorCalls.cs:67:5:74:5 | {...} | | AccessorCalls.cs:68:9:68:22 | ... ...; | AccessorCalls.cs:68:9:68:22 | ... ...; | | AccessorCalls.cs:68:17:68:17 | access to local variable d | AccessorCalls.cs:68:17:68:17 | access to local variable d | @@ -285,6 +297,7 @@ | Assert.cs:5:7:5:17 | call to method | Assert.cs:5:7:5:17 | this access | | Assert.cs:5:7:5:17 | this access | Assert.cs:5:7:5:17 | this access | | Assert.cs:5:7:5:17 | {...} | Assert.cs:5:7:5:17 | {...} | +| Assert.cs:7:18:7:18 | b | Assert.cs:7:18:7:18 | b | | Assert.cs:8:5:12:5 | {...} | Assert.cs:8:5:12:5 | {...} | | Assert.cs:9:9:9:33 | ... ...; | Assert.cs:9:9:9:33 | ... ...; | | Assert.cs:9:16:9:16 | access to local variable s | Assert.cs:9:16:9:16 | access to local variable s | @@ -302,6 +315,7 @@ | Assert.cs:11:9:11:36 | ...; | Assert.cs:11:9:11:36 | ...; | | Assert.cs:11:27:11:27 | access to local variable s | Assert.cs:11:27:11:27 | access to local variable s | | Assert.cs:11:27:11:34 | access to property Length | Assert.cs:11:27:11:27 | access to local variable s | +| Assert.cs:14:18:14:18 | b | Assert.cs:14:18:14:18 | b | | Assert.cs:15:5:19:5 | {...} | Assert.cs:15:5:19:5 | {...} | | Assert.cs:16:9:16:33 | ... ...; | Assert.cs:16:9:16:33 | ... ...; | | Assert.cs:16:16:16:16 | access to local variable s | Assert.cs:16:16:16:16 | access to local variable s | @@ -317,6 +331,7 @@ | Assert.cs:18:9:18:36 | ...; | Assert.cs:18:9:18:36 | ...; | | Assert.cs:18:27:18:27 | access to local variable s | Assert.cs:18:27:18:27 | access to local variable s | | Assert.cs:18:27:18:34 | access to property Length | Assert.cs:18:27:18:27 | access to local variable s | +| Assert.cs:21:18:21:18 | b | Assert.cs:21:18:21:18 | b | | Assert.cs:22:5:26:5 | {...} | Assert.cs:22:5:26:5 | {...} | | Assert.cs:23:9:23:33 | ... ...; | Assert.cs:23:9:23:33 | ... ...; | | Assert.cs:23:16:23:16 | access to local variable s | Assert.cs:23:16:23:16 | access to local variable s | @@ -332,6 +347,7 @@ | Assert.cs:25:9:25:36 | ...; | Assert.cs:25:9:25:36 | ...; | | Assert.cs:25:27:25:27 | access to local variable s | Assert.cs:25:27:25:27 | access to local variable s | | Assert.cs:25:27:25:34 | access to property Length | Assert.cs:25:27:25:27 | access to local variable s | +| Assert.cs:28:18:28:18 | b | Assert.cs:28:18:28:18 | b | | Assert.cs:29:5:33:5 | {...} | Assert.cs:29:5:33:5 | {...} | | Assert.cs:30:9:30:33 | ... ...; | Assert.cs:30:9:30:33 | ... ...; | | Assert.cs:30:16:30:16 | access to local variable s | Assert.cs:30:16:30:16 | access to local variable s | @@ -349,6 +365,7 @@ | Assert.cs:32:9:32:36 | ...; | Assert.cs:32:9:32:36 | ...; | | Assert.cs:32:27:32:27 | access to local variable s | Assert.cs:32:27:32:27 | access to local variable s | | Assert.cs:32:27:32:34 | access to property Length | Assert.cs:32:27:32:27 | access to local variable s | +| Assert.cs:35:18:35:18 | b | Assert.cs:35:18:35:18 | b | | Assert.cs:36:5:40:5 | {...} | Assert.cs:36:5:40:5 | {...} | | Assert.cs:37:9:37:33 | ... ...; | Assert.cs:37:9:37:33 | ... ...; | | Assert.cs:37:16:37:16 | access to local variable s | Assert.cs:37:16:37:16 | access to local variable s | @@ -366,6 +383,7 @@ | Assert.cs:39:9:39:36 | ...; | Assert.cs:39:9:39:36 | ...; | | Assert.cs:39:27:39:27 | access to local variable s | Assert.cs:39:27:39:27 | access to local variable s | | Assert.cs:39:27:39:34 | access to property Length | Assert.cs:39:27:39:27 | access to local variable s | +| Assert.cs:42:18:42:18 | b | Assert.cs:42:18:42:18 | b | | Assert.cs:43:5:47:5 | {...} | Assert.cs:43:5:47:5 | {...} | | Assert.cs:44:9:44:33 | ... ...; | Assert.cs:44:9:44:33 | ... ...; | | Assert.cs:44:16:44:16 | access to local variable s | Assert.cs:44:16:44:16 | access to local variable s | @@ -383,6 +401,7 @@ | Assert.cs:46:9:46:36 | ...; | Assert.cs:46:9:46:36 | ...; | | Assert.cs:46:27:46:27 | access to local variable s | Assert.cs:46:27:46:27 | access to local variable s | | Assert.cs:46:27:46:34 | access to property Length | Assert.cs:46:27:46:27 | access to local variable s | +| Assert.cs:49:18:49:18 | b | Assert.cs:49:18:49:18 | b | | Assert.cs:50:5:54:5 | {...} | Assert.cs:50:5:54:5 | {...} | | Assert.cs:51:9:51:33 | ... ...; | Assert.cs:51:9:51:33 | ... ...; | | Assert.cs:51:16:51:16 | access to local variable s | Assert.cs:51:16:51:16 | access to local variable s | @@ -400,6 +419,7 @@ | Assert.cs:53:9:53:36 | ...; | Assert.cs:53:9:53:36 | ...; | | Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:53:27:53:27 | access to local variable s | | Assert.cs:53:27:53:34 | access to property Length | Assert.cs:53:27:53:27 | access to local variable s | +| Assert.cs:56:18:56:18 | b | Assert.cs:56:18:56:18 | b | | Assert.cs:57:5:61:5 | {...} | Assert.cs:57:5:61:5 | {...} | | Assert.cs:58:9:58:33 | ... ...; | Assert.cs:58:9:58:33 | ... ...; | | Assert.cs:58:16:58:16 | access to local variable s | Assert.cs:58:16:58:16 | access to local variable s | @@ -419,6 +439,7 @@ | Assert.cs:60:9:60:36 | ...; | Assert.cs:60:9:60:36 | ...; | | Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:60:27:60:27 | access to local variable s | | Assert.cs:60:27:60:34 | access to property Length | Assert.cs:60:27:60:27 | access to local variable s | +| Assert.cs:63:18:63:18 | b | Assert.cs:63:18:63:18 | b | | Assert.cs:64:5:68:5 | {...} | Assert.cs:64:5:68:5 | {...} | | Assert.cs:65:9:65:33 | ... ...; | Assert.cs:65:9:65:33 | ... ...; | | Assert.cs:65:16:65:16 | access to local variable s | Assert.cs:65:16:65:16 | access to local variable s | @@ -438,6 +459,7 @@ | Assert.cs:67:9:67:36 | ...; | Assert.cs:67:9:67:36 | ...; | | Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:67:27:67:27 | access to local variable s | | Assert.cs:67:27:67:34 | access to property Length | Assert.cs:67:27:67:27 | access to local variable s | +| Assert.cs:70:19:70:19 | b | Assert.cs:70:19:70:19 | b | | Assert.cs:71:5:75:5 | {...} | Assert.cs:71:5:75:5 | {...} | | Assert.cs:72:9:72:33 | ... ...; | Assert.cs:72:9:72:33 | ... ...; | | Assert.cs:72:16:72:16 | access to local variable s | Assert.cs:72:16:72:16 | access to local variable s | @@ -457,6 +479,7 @@ | Assert.cs:74:9:74:36 | ...; | Assert.cs:74:9:74:36 | ...; | | Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:74:27:74:27 | access to local variable s | | Assert.cs:74:27:74:34 | access to property Length | Assert.cs:74:27:74:27 | access to local variable s | +| Assert.cs:77:19:77:19 | b | Assert.cs:77:19:77:19 | b | | Assert.cs:78:5:82:5 | {...} | Assert.cs:78:5:82:5 | {...} | | Assert.cs:79:9:79:33 | ... ...; | Assert.cs:79:9:79:33 | ... ...; | | Assert.cs:79:16:79:16 | access to local variable s | Assert.cs:79:16:79:16 | access to local variable s | @@ -476,6 +499,7 @@ | Assert.cs:81:9:81:36 | ...; | Assert.cs:81:9:81:36 | ...; | | Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:81:27:81:27 | access to local variable s | | Assert.cs:81:27:81:34 | access to property Length | Assert.cs:81:27:81:27 | access to local variable s | +| Assert.cs:84:19:84:19 | b | Assert.cs:84:19:84:19 | b | | Assert.cs:85:5:129:5 | {...} | Assert.cs:85:5:129:5 | {...} | | Assert.cs:86:9:86:33 | ... ...; | Assert.cs:86:9:86:33 | ... ...; | | Assert.cs:86:16:86:16 | access to local variable s | Assert.cs:86:16:86:16 | access to local variable s | @@ -659,7 +683,13 @@ | Assert.cs:128:9:128:36 | ...; | Assert.cs:128:9:128:36 | ...; | | Assert.cs:128:27:128:27 | access to local variable s | Assert.cs:128:27:128:27 | access to local variable s | | Assert.cs:128:27:128:34 | access to property Length | Assert.cs:128:27:128:27 | access to local variable s | +| Assert.cs:132:74:132:83 | condition1 | Assert.cs:132:74:132:83 | condition1 | +| Assert.cs:133:73:133:82 | condition2 | Assert.cs:133:73:133:82 | condition2 | +| Assert.cs:134:17:134:28 | nonCondition | Assert.cs:134:17:134:28 | nonCondition | | Assert.cs:135:5:136:5 | {...} | Assert.cs:135:5:136:5 | {...} | +| Assert.cs:138:19:138:20 | b1 | Assert.cs:138:19:138:20 | b1 | +| Assert.cs:138:28:138:29 | b2 | Assert.cs:138:28:138:29 | b2 | +| Assert.cs:138:37:138:38 | b3 | Assert.cs:138:37:138:38 | b3 | | Assert.cs:139:5:142:5 | {...} | Assert.cs:139:5:142:5 | {...} | | Assert.cs:140:9:140:35 | call to method AssertTrueFalse | Assert.cs:140:9:140:35 | this access | | Assert.cs:140:9:140:35 | this access | Assert.cs:140:9:140:35 | this access | @@ -703,15 +733,23 @@ | Assignments.cs:14:9:14:35 | ... += ... | Assignments.cs:14:9:14:13 | this access | | Assignments.cs:14:9:14:36 | ...; | Assignments.cs:14:9:14:36 | ...; | | Assignments.cs:14:18:14:35 | (...) => ... | Assignments.cs:14:18:14:35 | (...) => ... | +| Assignments.cs:14:19:14:24 | sender | Assignments.cs:14:19:14:24 | sender | +| Assignments.cs:14:27:14:27 | e | Assignments.cs:14:27:14:27 | e | | Assignments.cs:14:33:14:35 | {...} | Assignments.cs:14:33:14:35 | {...} | +| Assignments.cs:17:54:17:54 | x | Assignments.cs:17:54:17:54 | x | +| Assignments.cs:17:69:17:69 | y | Assignments.cs:17:69:17:69 | y | | Assignments.cs:18:5:20:5 | {...} | Assignments.cs:18:5:20:5 | {...} | | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:19:16:19:16 | access to parameter x | | Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:19:16:19:16 | access to parameter x | +| Assignments.cs:27:33:27:33 | x | Assignments.cs:27:33:27:33 | x | | Assignments.cs:28:5:30:5 | {...} | Assignments.cs:28:5:30:5 | {...} | | Assignments.cs:29:9:29:9 | access to parameter x | Assignments.cs:29:9:29:9 | access to parameter x | | Assignments.cs:29:9:29:14 | ... = ... | Assignments.cs:29:9:29:9 | access to parameter x | | Assignments.cs:29:9:29:15 | ...; | Assignments.cs:29:9:29:15 | ...; | | Assignments.cs:29:13:29:14 | 42 | Assignments.cs:29:13:29:14 | 42 | +| Assignments.cs:32:32:32:32 | x | Assignments.cs:32:32:32:32 | x | +| Assignments.cs:32:42:32:42 | o | Assignments.cs:32:42:32:42 | o | +| Assignments.cs:32:56:32:56 | y | Assignments.cs:32:56:32:56 | y | | Assignments.cs:33:5:36:5 | {...} | Assignments.cs:33:5:36:5 | {...} | | Assignments.cs:34:9:34:9 | access to parameter x | Assignments.cs:34:9:34:9 | access to parameter x | | Assignments.cs:34:9:34:14 | ... = ... | Assignments.cs:34:9:34:9 | access to parameter x | @@ -752,6 +790,7 @@ | BreakInTry.cs:1:7:1:16 | call to method | BreakInTry.cs:1:7:1:16 | this access | | BreakInTry.cs:1:7:1:16 | this access | BreakInTry.cs:1:7:1:16 | this access | | BreakInTry.cs:1:7:1:16 | {...} | BreakInTry.cs:1:7:1:16 | {...} | +| BreakInTry.cs:3:22:3:25 | args | BreakInTry.cs:3:22:3:25 | args | | BreakInTry.cs:4:5:18:5 | {...} | BreakInTry.cs:4:5:18:5 | {...} | | BreakInTry.cs:5:9:17:9 | try {...} ... | BreakInTry.cs:5:9:17:9 | try {...} ... | | BreakInTry.cs:6:9:12:9 | {...} | BreakInTry.cs:6:9:12:9 | {...} | @@ -770,6 +809,7 @@ | BreakInTry.cs:15:17:15:28 | ... == ... | BreakInTry.cs:15:17:15:20 | access to parameter args | | BreakInTry.cs:15:25:15:28 | null | BreakInTry.cs:15:25:15:28 | null | | BreakInTry.cs:16:17:16:17 | ; | BreakInTry.cs:16:17:16:17 | ; | +| BreakInTry.cs:20:22:20:25 | args | BreakInTry.cs:20:22:20:25 | args | | BreakInTry.cs:21:5:36:5 | {...} | BreakInTry.cs:21:5:36:5 | {...} | | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | | BreakInTry.cs:22:22:22:24 | String arg | BreakInTry.cs:22:22:22:24 | String arg | @@ -789,6 +829,7 @@ | BreakInTry.cs:31:29:31:32 | null | BreakInTry.cs:31:29:31:32 | null | | BreakInTry.cs:32:21:32:21 | ; | BreakInTry.cs:32:21:32:21 | ; | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:35:7:35:7 | ; | +| BreakInTry.cs:38:22:38:25 | args | BreakInTry.cs:38:22:38:25 | args | | BreakInTry.cs:39:5:54:5 | {...} | BreakInTry.cs:39:5:54:5 | {...} | | BreakInTry.cs:40:9:52:9 | try {...} ... | BreakInTry.cs:40:9:52:9 | try {...} ... | | BreakInTry.cs:41:9:44:9 | {...} | BreakInTry.cs:41:9:44:9 | {...} | @@ -808,6 +849,7 @@ | BreakInTry.cs:49:28:49:31 | null | BreakInTry.cs:49:28:49:31 | null | | BreakInTry.cs:50:21:50:26 | break; | BreakInTry.cs:50:21:50:26 | break; | | BreakInTry.cs:53:7:53:7 | ; | BreakInTry.cs:53:7:53:7 | ; | +| BreakInTry.cs:56:22:56:25 | args | BreakInTry.cs:56:22:56:25 | args | | BreakInTry.cs:57:5:71:5 | {...} | BreakInTry.cs:57:5:71:5 | {...} | | BreakInTry.cs:58:9:70:9 | try {...} ... | BreakInTry.cs:58:9:70:9 | try {...} ... | | BreakInTry.cs:59:9:62:9 | {...} | BreakInTry.cs:59:9:62:9 | {...} | @@ -839,6 +881,7 @@ | CompileTimeOperators.cs:16:5:18:5 | {...} | CompileTimeOperators.cs:16:5:18:5 | {...} | | CompileTimeOperators.cs:17:9:17:27 | return ...; | CompileTimeOperators.cs:17:16:17:26 | typeof(...) | | CompileTimeOperators.cs:17:16:17:26 | typeof(...) | CompileTimeOperators.cs:17:16:17:26 | typeof(...) | +| CompileTimeOperators.cs:20:23:20:23 | i | CompileTimeOperators.cs:20:23:20:23 | i | | CompileTimeOperators.cs:21:5:23:5 | {...} | CompileTimeOperators.cs:21:5:23:5 | {...} | | CompileTimeOperators.cs:22:9:22:25 | return ...; | CompileTimeOperators.cs:22:16:22:24 | nameof(...) | | CompileTimeOperators.cs:22:16:22:24 | nameof(...) | CompileTimeOperators.cs:22:16:22:24 | nameof(...) | @@ -865,19 +908,25 @@ | ConditionalAccess.cs:1:7:1:23 | call to method | ConditionalAccess.cs:1:7:1:23 | this access | | ConditionalAccess.cs:1:7:1:23 | this access | ConditionalAccess.cs:1:7:1:23 | this access | | ConditionalAccess.cs:1:7:1:23 | {...} | ConditionalAccess.cs:1:7:1:23 | {...} | +| ConditionalAccess.cs:3:20:3:20 | i | ConditionalAccess.cs:3:20:3:20 | i | | ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:26:3:26 | access to parameter i | | ConditionalAccess.cs:3:26:3:38 | call to method ToString | ConditionalAccess.cs:3:26:3:26 | access to parameter i | | ConditionalAccess.cs:3:26:3:49 | call to method ToLower | ConditionalAccess.cs:3:26:3:26 | access to parameter i | +| ConditionalAccess.cs:5:20:5:20 | s | ConditionalAccess.cs:5:20:5:20 | s | | ConditionalAccess.cs:5:26:5:26 | access to parameter s | ConditionalAccess.cs:5:26:5:26 | access to parameter s | | ConditionalAccess.cs:5:26:5:34 | access to property Length | ConditionalAccess.cs:5:26:5:26 | access to parameter s | +| ConditionalAccess.cs:7:20:7:21 | s1 | ConditionalAccess.cs:7:20:7:21 | s1 | +| ConditionalAccess.cs:7:31:7:32 | s2 | ConditionalAccess.cs:7:31:7:32 | s2 | | ConditionalAccess.cs:7:38:7:55 | access to property Length | ConditionalAccess.cs:7:39:7:46 | ... ?? ... | | ConditionalAccess.cs:7:39:7:40 | access to parameter s1 | ConditionalAccess.cs:7:39:7:40 | access to parameter s1 | | ConditionalAccess.cs:7:39:7:46 | ... ?? ... | ConditionalAccess.cs:7:39:7:46 | ... ?? ... | | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | +| ConditionalAccess.cs:9:19:9:19 | s | ConditionalAccess.cs:9:19:9:19 | s | | ConditionalAccess.cs:9:25:9:25 | access to parameter s | ConditionalAccess.cs:9:25:9:25 | access to parameter s | | ConditionalAccess.cs:9:25:9:33 | access to property Length | ConditionalAccess.cs:9:25:9:25 | access to parameter s | | ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:25:9:38 | ... ?? ... | | ConditionalAccess.cs:9:38:9:38 | 0 | ConditionalAccess.cs:9:38:9:38 | 0 | +| ConditionalAccess.cs:11:19:11:19 | s | ConditionalAccess.cs:11:19:11:19 | s | | ConditionalAccess.cs:12:5:17:5 | {...} | ConditionalAccess.cs:12:5:17:5 | {...} | | ConditionalAccess.cs:13:9:16:21 | if (...) ... | ConditionalAccess.cs:13:9:16:21 | if (...) ... | | ConditionalAccess.cs:13:13:13:13 | access to parameter s | ConditionalAccess.cs:13:13:13:13 | access to parameter s | @@ -889,9 +938,12 @@ | ConditionalAccess.cs:14:20:14:20 | 0 | ConditionalAccess.cs:14:20:14:20 | 0 | | ConditionalAccess.cs:16:13:16:21 | return ...; | ConditionalAccess.cs:16:20:16:20 | 1 | | ConditionalAccess.cs:16:20:16:20 | 1 | ConditionalAccess.cs:16:20:16:20 | 1 | +| ConditionalAccess.cs:19:22:19:23 | s1 | ConditionalAccess.cs:19:22:19:23 | s1 | +| ConditionalAccess.cs:19:33:19:34 | s2 | ConditionalAccess.cs:19:33:19:34 | s2 | | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | | ConditionalAccess.cs:19:40:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | +| ConditionalAccess.cs:21:17:21:17 | i | ConditionalAccess.cs:21:17:21:17 | i | | ConditionalAccess.cs:22:5:26:5 | {...} | ConditionalAccess.cs:22:5:26:5 | {...} | | ConditionalAccess.cs:23:9:23:39 | ... ...; | ConditionalAccess.cs:23:9:23:39 | ... ...; | | ConditionalAccess.cs:23:13:23:13 | access to local variable j | ConditionalAccess.cs:23:13:23:13 | access to local variable j | @@ -911,9 +963,12 @@ | ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:13:25:14 | "" | | ConditionalAccess.cs:25:13:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:13:25:14 | "" | | ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:31:25:31 | access to local variable s | +| ConditionalAccess.cs:30:22:30:22 | i | ConditionalAccess.cs:30:22:30:22 | i | | ConditionalAccess.cs:30:28:30:28 | access to parameter i | ConditionalAccess.cs:30:28:30:28 | access to parameter i | | ConditionalAccess.cs:30:28:30:32 | ... = ... | ConditionalAccess.cs:30:28:30:28 | access to parameter i | | ConditionalAccess.cs:30:32:30:32 | 0 | ConditionalAccess.cs:30:32:30:32 | 0 | +| ConditionalAccess.cs:32:18:32:18 | b | ConditionalAccess.cs:32:18:32:18 | b | +| ConditionalAccess.cs:32:29:32:29 | i | ConditionalAccess.cs:32:29:32:29 | i | | ConditionalAccess.cs:33:5:36:5 | {...} | ConditionalAccess.cs:33:5:36:5 | {...} | | ConditionalAccess.cs:34:9:34:9 | access to parameter i | ConditionalAccess.cs:34:9:34:9 | access to parameter i | | ConditionalAccess.cs:34:9:34:13 | ... = ... | ConditionalAccess.cs:34:9:34:9 | access to parameter i | @@ -924,10 +979,14 @@ | ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:12 | this access | | ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:9:35:25 | ...; | | ConditionalAccess.cs:35:23:35:23 | access to parameter i | ConditionalAccess.cs:35:23:35:23 | access to parameter i | +| ConditionalAccess.cs:40:21:40:25 | index | ConditionalAccess.cs:40:21:40:25 | index | +| ConditionalAccess.cs:40:21:40:25 | index | ConditionalAccess.cs:40:21:40:25 | index | | ConditionalAccess.cs:42:13:42:28 | {...} | ConditionalAccess.cs:42:13:42:28 | {...} | | ConditionalAccess.cs:42:15:42:26 | return ...; | ConditionalAccess.cs:42:22:42:25 | null | | ConditionalAccess.cs:42:22:42:25 | null | ConditionalAccess.cs:42:22:42:25 | null | +| ConditionalAccess.cs:43:9:43:11 | value | ConditionalAccess.cs:43:9:43:11 | value | | ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:13:43:15 | {...} | +| ConditionalAccess.cs:46:31:46:32 | ca | ConditionalAccess.cs:46:31:46:32 | ca | | ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:47:5:55:5 | {...} | | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | | ConditionalAccess.cs:48:9:48:20 | access to field IntField | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | @@ -967,6 +1026,8 @@ | ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; | | ConditionalAccess.cs:54:12:54:29 | ... += ... | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | | ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:27:54:29 | "!" | +| ConditionalAccess.cs:60:52:60:53 | s1 | ConditionalAccess.cs:60:52:60:53 | s1 | +| ConditionalAccess.cs:60:63:60:64 | s2 | ConditionalAccess.cs:60:63:60:64 | s2 | | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | | ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | | ConditionalAccess.cs:60:70:60:83 | ... + ... | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | @@ -976,6 +1037,8 @@ | Conditions.cs:1:7:1:16 | call to method | Conditions.cs:1:7:1:16 | this access | | Conditions.cs:1:7:1:16 | this access | Conditions.cs:1:7:1:16 | this access | | Conditions.cs:1:7:1:16 | {...} | Conditions.cs:1:7:1:16 | {...} | +| Conditions.cs:3:26:3:28 | inc | Conditions.cs:3:26:3:28 | inc | +| Conditions.cs:3:39:3:39 | x | Conditions.cs:3:39:3:39 | x | | Conditions.cs:4:5:9:5 | {...} | Conditions.cs:4:5:9:5 | {...} | | Conditions.cs:5:9:6:16 | if (...) ... | Conditions.cs:5:9:6:16 | if (...) ... | | Conditions.cs:5:13:5:15 | access to parameter inc | Conditions.cs:5:13:5:15 | access to parameter inc | @@ -988,6 +1051,7 @@ | Conditions.cs:8:13:8:13 | access to parameter x | Conditions.cs:8:13:8:13 | access to parameter x | | Conditions.cs:8:13:8:15 | ...-- | Conditions.cs:8:13:8:13 | access to parameter x | | Conditions.cs:8:13:8:16 | ...; | Conditions.cs:8:13:8:16 | ...; | +| Conditions.cs:11:17:11:17 | b | Conditions.cs:11:17:11:17 | b | | Conditions.cs:12:5:20:5 | {...} | Conditions.cs:12:5:20:5 | {...} | | Conditions.cs:13:9:13:18 | ... ...; | Conditions.cs:13:9:13:18 | ... ...; | | Conditions.cs:13:13:13:13 | access to local variable x | Conditions.cs:13:13:13:13 | access to local variable x | @@ -1010,6 +1074,8 @@ | Conditions.cs:18:17:18:20 | ...; | Conditions.cs:18:17:18:20 | ...; | | Conditions.cs:19:9:19:17 | return ...; | Conditions.cs:19:16:19:16 | access to local variable x | | Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:19:16:19:16 | access to local variable x | +| Conditions.cs:22:17:22:18 | b1 | Conditions.cs:22:17:22:18 | b1 | +| Conditions.cs:22:26:22:27 | b2 | Conditions.cs:22:26:22:27 | b2 | | Conditions.cs:23:5:31:5 | {...} | Conditions.cs:23:5:31:5 | {...} | | Conditions.cs:24:9:24:18 | ... ...; | Conditions.cs:24:9:24:18 | ... ...; | | Conditions.cs:24:13:24:13 | access to local variable x | Conditions.cs:24:13:24:13 | access to local variable x | @@ -1029,6 +1095,7 @@ | Conditions.cs:29:13:29:16 | ...; | Conditions.cs:29:13:29:16 | ...; | | Conditions.cs:30:9:30:17 | return ...; | Conditions.cs:30:16:30:16 | access to local variable x | | Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:30:16:30:16 | access to local variable x | +| Conditions.cs:33:17:33:18 | b1 | Conditions.cs:33:17:33:18 | b1 | | Conditions.cs:34:5:44:5 | {...} | Conditions.cs:34:5:44:5 | {...} | | Conditions.cs:35:9:35:18 | ... ...; | Conditions.cs:35:9:35:18 | ... ...; | | Conditions.cs:35:13:35:13 | access to local variable x | Conditions.cs:35:13:35:13 | access to local variable x | @@ -1056,6 +1123,8 @@ | Conditions.cs:42:13:42:16 | ...; | Conditions.cs:42:13:42:16 | ...; | | Conditions.cs:43:9:43:17 | return ...; | Conditions.cs:43:16:43:16 | access to local variable x | | Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:43:16:43:16 | access to local variable x | +| Conditions.cs:46:17:46:17 | b | Conditions.cs:46:17:46:17 | b | +| Conditions.cs:46:24:46:24 | x | Conditions.cs:46:24:46:24 | x | | Conditions.cs:47:5:55:5 | {...} | Conditions.cs:47:5:55:5 | {...} | | Conditions.cs:48:9:48:18 | ... ...; | Conditions.cs:48:9:48:18 | ... ...; | | Conditions.cs:48:13:48:13 | access to local variable y | Conditions.cs:48:13:48:13 | access to local variable y | @@ -1074,6 +1143,8 @@ | Conditions.cs:52:17:52:20 | ...; | Conditions.cs:52:17:52:20 | ...; | | Conditions.cs:54:9:54:17 | return ...; | Conditions.cs:54:16:54:16 | access to local variable y | | Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:54:16:54:16 | access to local variable y | +| Conditions.cs:57:17:57:17 | b | Conditions.cs:57:17:57:17 | b | +| Conditions.cs:57:24:57:24 | x | Conditions.cs:57:24:57:24 | x | | Conditions.cs:58:5:68:5 | {...} | Conditions.cs:58:5:68:5 | {...} | | Conditions.cs:59:9:59:18 | ... ...; | Conditions.cs:59:9:59:18 | ... ...; | | Conditions.cs:59:13:59:13 | access to local variable y | Conditions.cs:59:13:59:13 | access to local variable y | @@ -1097,6 +1168,7 @@ | Conditions.cs:66:13:66:16 | ...; | Conditions.cs:66:13:66:16 | ...; | | Conditions.cs:67:9:67:17 | return ...; | Conditions.cs:67:16:67:16 | access to local variable y | | Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:67:16:67:16 | access to local variable y | +| Conditions.cs:70:21:70:22 | ss | Conditions.cs:70:21:70:22 | ss | | Conditions.cs:71:5:84:5 | {...} | Conditions.cs:71:5:84:5 | {...} | | Conditions.cs:72:9:72:30 | ... ...; | Conditions.cs:72:9:72:30 | ... ...; | | Conditions.cs:72:13:72:13 | access to local variable b | Conditions.cs:72:13:72:13 | access to local variable b | @@ -1133,6 +1205,7 @@ | Conditions.cs:82:13:82:16 | ...; | Conditions.cs:82:13:82:16 | ...; | | Conditions.cs:83:9:83:17 | return ...; | Conditions.cs:83:16:83:16 | access to local variable x | | Conditions.cs:83:16:83:16 | access to local variable x | Conditions.cs:83:16:83:16 | access to local variable x | +| Conditions.cs:86:21:86:22 | ss | Conditions.cs:86:21:86:22 | ss | | Conditions.cs:87:5:100:5 | {...} | Conditions.cs:87:5:100:5 | {...} | | Conditions.cs:88:9:88:30 | ... ...; | Conditions.cs:88:9:88:30 | ... ...; | | Conditions.cs:88:13:88:13 | access to local variable b | Conditions.cs:88:13:88:13 | access to local variable b | @@ -1169,6 +1242,7 @@ | Conditions.cs:97:17:97:20 | ...; | Conditions.cs:97:17:97:20 | ...; | | Conditions.cs:99:9:99:17 | return ...; | Conditions.cs:99:16:99:16 | access to local variable x | | Conditions.cs:99:16:99:16 | access to local variable x | Conditions.cs:99:16:99:16 | access to local variable x | +| Conditions.cs:102:20:102:20 | b | Conditions.cs:102:20:102:20 | b | | Conditions.cs:103:5:111:5 | {...} | Conditions.cs:103:5:111:5 | {...} | | Conditions.cs:104:9:104:29 | ... ...; | Conditions.cs:104:9:104:29 | ... ...; | | Conditions.cs:104:13:104:13 | access to local variable x | Conditions.cs:104:13:104:13 | access to local variable x | @@ -1195,6 +1269,7 @@ | Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:22:109:23 | "" | | Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:110:16:110:16 | access to local variable x | | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:16:110:16 | access to local variable x | +| Conditions.cs:113:22:113:25 | args | Conditions.cs:113:22:113:25 | args | | Conditions.cs:114:5:124:5 | {...} | Conditions.cs:114:5:124:5 | {...} | | Conditions.cs:115:9:115:24 | ... ...; | Conditions.cs:115:9:115:24 | ... ...; | | Conditions.cs:115:16:115:16 | access to local variable s | Conditions.cs:115:16:115:16 | access to local variable s | @@ -1249,6 +1324,7 @@ | Conditions.cs:137:21:137:26 | this access | Conditions.cs:137:21:137:26 | this access | | Conditions.cs:137:21:137:37 | call to method ToString | Conditions.cs:137:21:137:26 | this access | | Conditions.cs:137:21:137:38 | ...; | Conditions.cs:137:21:137:38 | ...; | +| Conditions.cs:143:19:143:19 | b | Conditions.cs:143:19:143:19 | b | | Conditions.cs:144:5:150:5 | {...} | Conditions.cs:144:5:150:5 | {...} | | Conditions.cs:145:9:145:30 | ... ...; | Conditions.cs:145:9:145:30 | ... ...; | | Conditions.cs:145:13:145:13 | access to local variable s | Conditions.cs:145:13:145:13 | access to local variable s | @@ -1275,6 +1351,11 @@ | DefaultParam.cs:1:7:1:18 | call to method | DefaultParam.cs:1:7:1:18 | this access | | DefaultParam.cs:1:7:1:18 | this access | DefaultParam.cs:1:7:1:18 | this access | | DefaultParam.cs:1:7:1:18 | {...} | DefaultParam.cs:1:7:1:18 | {...} | +| DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:3:20:3:20 | b | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:30:3:30 | s | +| DefaultParam.cs:3:34:3:35 | "" | DefaultParam.cs:3:34:3:35 | "" | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | i | +| DefaultParam.cs:3:46:3:46 | 0 | DefaultParam.cs:3:46:3:46 | 0 | | DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:4:5:6:5 | {...} | | DefaultParam.cs:5:9:5:25 | return ...; | DefaultParam.cs:5:16:5:16 | access to parameter b | | DefaultParam.cs:5:16:5:16 | (...) ... | DefaultParam.cs:5:16:5:16 | access to parameter b | @@ -1328,11 +1409,13 @@ | ExitMethods.cs:61:5:64:5 | {...} | ExitMethods.cs:61:5:64:5 | {...} | | ExitMethods.cs:62:9:62:22 | call to method ErrorAlways3 | ExitMethods.cs:62:9:62:22 | call to method ErrorAlways3 | | ExitMethods.cs:62:9:62:23 | ...; | ExitMethods.cs:62:9:62:23 | ...; | +| ExitMethods.cs:66:33:66:33 | b | ExitMethods.cs:66:33:66:33 | b | | ExitMethods.cs:67:5:70:5 | {...} | ExitMethods.cs:67:5:70:5 | {...} | | ExitMethods.cs:68:9:69:34 | if (...) ... | ExitMethods.cs:68:9:69:34 | if (...) ... | | ExitMethods.cs:68:13:68:13 | access to parameter b | ExitMethods.cs:68:13:68:13 | access to parameter b | | ExitMethods.cs:69:13:69:34 | throw ...; | ExitMethods.cs:69:19:69:33 | object creation of type Exception | | ExitMethods.cs:69:19:69:33 | object creation of type Exception | ExitMethods.cs:69:19:69:33 | object creation of type Exception | +| ExitMethods.cs:72:34:72:34 | b | ExitMethods.cs:72:34:72:34 | b | | ExitMethods.cs:73:5:78:5 | {...} | ExitMethods.cs:73:5:78:5 | {...} | | ExitMethods.cs:74:9:77:45 | if (...) ... | ExitMethods.cs:74:9:77:45 | if (...) ... | | ExitMethods.cs:74:13:74:13 | access to parameter b | ExitMethods.cs:74:13:74:13 | access to parameter b | @@ -1363,6 +1446,7 @@ | ExitMethods.cs:106:5:108:5 | {...} | ExitMethods.cs:106:5:108:5 | {...} | | ExitMethods.cs:107:9:107:47 | call to method Exit | ExitMethods.cs:107:9:107:47 | call to method Exit | | ExitMethods.cs:107:9:107:48 | ...; | ExitMethods.cs:107:9:107:48 | ...; | +| ExitMethods.cs:110:31:110:35 | input | ExitMethods.cs:110:31:110:35 | input | | ExitMethods.cs:111:5:113:5 | {...} | ExitMethods.cs:111:5:113:5 | {...} | | ExitMethods.cs:112:9:112:77 | return ...; | ExitMethods.cs:112:16:112:76 | ... ? ... : ... | | ExitMethods.cs:112:16:112:20 | access to parameter input | ExitMethods.cs:112:16:112:20 | access to parameter input | @@ -1377,6 +1461,7 @@ | ExitMethods.cs:112:41:112:76 | throw ... | ExitMethods.cs:112:69:112:75 | "input" | | ExitMethods.cs:112:47:112:76 | object creation of type ArgumentException | ExitMethods.cs:112:69:112:75 | "input" | | ExitMethods.cs:112:69:112:75 | "input" | ExitMethods.cs:112:69:112:75 | "input" | +| ExitMethods.cs:115:43:115:43 | s | ExitMethods.cs:115:43:115:43 | s | | ExitMethods.cs:116:5:118:5 | {...} | ExitMethods.cs:116:5:118:5 | {...} | | ExitMethods.cs:117:9:117:39 | return ...; | ExitMethods.cs:117:16:117:38 | ... ? ... : ... | | ExitMethods.cs:117:16:117:16 | access to parameter s | ExitMethods.cs:117:16:117:16 | access to parameter s | @@ -1393,6 +1478,7 @@ | ExitMethods.cs:128:9:128:26 | call to method FailingAssertion | ExitMethods.cs:128:9:128:26 | this access | | ExitMethods.cs:128:9:128:26 | this access | ExitMethods.cs:128:9:128:26 | this access | | ExitMethods.cs:128:9:128:27 | ...; | ExitMethods.cs:128:9:128:27 | ...; | +| ExitMethods.cs:132:27:132:27 | b | ExitMethods.cs:132:27:132:27 | b | | ExitMethods.cs:132:33:132:49 | call to method IsFalse | ExitMethods.cs:132:48:132:48 | access to parameter b | | ExitMethods.cs:132:48:132:48 | access to parameter b | ExitMethods.cs:132:48:132:48 | access to parameter b | | ExitMethods.cs:135:5:138:5 | {...} | ExitMethods.cs:135:5:138:5 | {...} | @@ -1400,6 +1486,8 @@ | ExitMethods.cs:136:9:136:25 | this access | ExitMethods.cs:136:9:136:25 | this access | | ExitMethods.cs:136:9:136:26 | ...; | ExitMethods.cs:136:9:136:26 | ...; | | ExitMethods.cs:136:21:136:24 | true | ExitMethods.cs:136:21:136:24 | true | +| ExitMethods.cs:140:49:140:49 | b | ExitMethods.cs:140:49:140:49 | b | +| ExitMethods.cs:140:70:140:70 | e | ExitMethods.cs:140:70:140:70 | e | | ExitMethods.cs:141:5:147:5 | {...} | ExitMethods.cs:141:5:147:5 | {...} | | ExitMethods.cs:142:9:145:53 | if (...) ... | ExitMethods.cs:142:9:145:53 | if (...) ... | | ExitMethods.cs:142:13:142:13 | access to parameter b | ExitMethods.cs:142:13:142:13 | access to parameter b | @@ -1410,10 +1498,13 @@ | ExitMethods.cs:145:13:145:52 | call to method Throw | ExitMethods.cs:145:43:145:43 | access to parameter e | | ExitMethods.cs:145:13:145:53 | ...; | ExitMethods.cs:145:13:145:53 | ...; | | ExitMethods.cs:145:43:145:43 | access to parameter e | ExitMethods.cs:145:43:145:43 | access to parameter e | +| Extensions.cs:5:43:5:43 | s | Extensions.cs:5:43:5:43 | s | | Extensions.cs:6:5:8:5 | {...} | Extensions.cs:6:5:8:5 | {...} | | Extensions.cs:7:9:7:30 | return ...; | Extensions.cs:7:28:7:28 | access to parameter s | | Extensions.cs:7:16:7:29 | call to method Parse | Extensions.cs:7:28:7:28 | access to parameter s | | Extensions.cs:7:28:7:28 | access to parameter s | Extensions.cs:7:28:7:28 | access to parameter s | +| Extensions.cs:10:43:10:43 | s | Extensions.cs:10:43:10:43 | s | +| Extensions.cs:10:65:10:65 | f | Extensions.cs:10:65:10:65 | f | | Extensions.cs:11:5:13:5 | {...} | Extensions.cs:11:5:13:5 | {...} | | Extensions.cs:12:9:12:20 | return ...; | Extensions.cs:12:16:12:16 | access to parameter f | | Extensions.cs:12:16:12:16 | access to parameter f | Extensions.cs:12:16:12:16 | access to parameter f | @@ -1421,6 +1512,7 @@ | Extensions.cs:12:18:12:18 | access to parameter s | Extensions.cs:12:18:12:18 | access to parameter s | | Extensions.cs:15:40:15:51 | call to method ToInt32 | Extensions.cs:15:48:15:50 | "0" | | Extensions.cs:15:48:15:50 | "0" | Extensions.cs:15:48:15:50 | "0" | +| Extensions.cs:20:29:20:29 | s | Extensions.cs:20:29:20:29 | s | | Extensions.cs:21:5:26:5 | {...} | Extensions.cs:21:5:26:5 | {...} | | Extensions.cs:22:9:22:9 | access to parameter s | Extensions.cs:22:9:22:9 | access to parameter s | | Extensions.cs:22:9:22:19 | call to method ToInt32 | Extensions.cs:22:9:22:9 | access to parameter s | @@ -1607,6 +1699,7 @@ | Finally.cs:141:13:141:44 | throw ...; | Finally.cs:141:41:141:42 | "" | | Finally.cs:141:19:141:43 | object creation of type ArgumentException | Finally.cs:141:41:141:42 | "" | | Finally.cs:141:41:141:42 | "" | Finally.cs:141:41:141:42 | "" | +| Finally.cs:147:22:147:25 | args | Finally.cs:147:22:147:25 | args | | Finally.cs:148:5:170:5 | {...} | Finally.cs:148:5:170:5 | {...} | | Finally.cs:149:9:169:9 | try {...} ... | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:150:9:153:9 | {...} | Finally.cs:150:9:153:9 | {...} | @@ -1656,6 +1749,8 @@ | Finally.cs:174:11:174:20 | call to method | Finally.cs:174:11:174:20 | this access | | Finally.cs:174:11:174:20 | this access | Finally.cs:174:11:174:20 | this access | | Finally.cs:174:11:174:20 | {...} | Finally.cs:174:11:174:20 | {...} | +| Finally.cs:176:18:176:19 | b1 | Finally.cs:176:18:176:19 | b1 | +| Finally.cs:176:27:176:28 | b2 | Finally.cs:176:27:176:28 | b2 | | Finally.cs:177:5:193:5 | {...} | Finally.cs:177:5:193:5 | {...} | | Finally.cs:178:9:192:9 | try {...} ... | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:179:9:181:9 | {...} | Finally.cs:179:9:181:9 | {...} | @@ -1677,6 +1772,9 @@ | Finally.cs:190:21:190:22 | access to parameter b1 | Finally.cs:190:21:190:22 | access to parameter b1 | | Finally.cs:190:25:190:47 | throw ...; | Finally.cs:190:31:190:46 | object creation of type ExceptionC | | Finally.cs:190:31:190:46 | object creation of type ExceptionC | Finally.cs:190:31:190:46 | object creation of type ExceptionC | +| Finally.cs:195:19:195:20 | b1 | Finally.cs:195:19:195:20 | b1 | +| Finally.cs:195:28:195:29 | b2 | Finally.cs:195:28:195:29 | b2 | +| Finally.cs:195:37:195:38 | b3 | Finally.cs:195:37:195:38 | b3 | | Finally.cs:196:5:214:5 | {...} | Finally.cs:196:5:214:5 | {...} | | Finally.cs:197:9:212:9 | try {...} ... | Finally.cs:197:9:212:9 | try {...} ... | | Finally.cs:198:9:200:9 | {...} | Finally.cs:198:9:200:9 | {...} | @@ -1724,6 +1822,8 @@ | Finally.cs:230:9:230:33 | call to method WriteLine | Finally.cs:230:27:230:32 | "Done" | | Finally.cs:230:9:230:34 | ...; | Finally.cs:230:9:230:34 | ...; | | Finally.cs:230:27:230:32 | "Done" | Finally.cs:230:27:230:32 | "Done" | +| Finally.cs:233:19:233:20 | b1 | Finally.cs:233:19:233:20 | b1 | +| Finally.cs:233:28:233:29 | b2 | Finally.cs:233:28:233:29 | b2 | | Finally.cs:234:5:261:5 | {...} | Finally.cs:234:5:261:5 | {...} | | Finally.cs:235:9:259:9 | try {...} ... | Finally.cs:235:9:259:9 | try {...} ... | | Finally.cs:236:9:255:9 | {...} | Finally.cs:236:9:255:9 | {...} | @@ -1754,6 +1854,7 @@ | Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:260:27:260:32 | "Done" | | Finally.cs:260:9:260:34 | ...; | Finally.cs:260:9:260:34 | ...; | | Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:27:260:32 | "Done" | +| Finally.cs:263:18:263:18 | i | Finally.cs:263:18:263:18 | i | | Finally.cs:264:5:274:5 | {...} | Finally.cs:264:5:274:5 | {...} | | Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:265:9:273:9 | try {...} ... | | Finally.cs:266:9:268:9 | {...} | Finally.cs:266:9:268:9 | {...} | @@ -1772,16 +1873,19 @@ | Foreach.cs:4:7:4:13 | call to method | Foreach.cs:4:7:4:13 | this access | | Foreach.cs:4:7:4:13 | this access | Foreach.cs:4:7:4:13 | this access | | Foreach.cs:4:7:4:13 | {...} | Foreach.cs:4:7:4:13 | {...} | +| Foreach.cs:6:22:6:25 | args | Foreach.cs:6:22:6:25 | args | | Foreach.cs:7:5:10:5 | {...} | Foreach.cs:7:5:10:5 | {...} | | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | | Foreach.cs:8:22:8:24 | String arg | Foreach.cs:8:22:8:24 | String arg | | Foreach.cs:8:29:8:32 | access to parameter args | Foreach.cs:8:29:8:32 | access to parameter args | | Foreach.cs:9:13:9:13 | ; | Foreach.cs:9:13:9:13 | ; | +| Foreach.cs:12:22:12:25 | args | Foreach.cs:12:22:12:25 | args | | Foreach.cs:13:5:16:5 | {...} | Foreach.cs:13:5:16:5 | {...} | | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | | Foreach.cs:14:22:14:22 | String _ | Foreach.cs:14:22:14:22 | String _ | | Foreach.cs:14:27:14:30 | access to parameter args | Foreach.cs:14:27:14:30 | access to parameter args | | Foreach.cs:15:13:15:13 | ; | Foreach.cs:15:13:15:13 | ; | +| Foreach.cs:18:33:18:33 | e | Foreach.cs:18:33:18:33 | e | | Foreach.cs:19:5:22:5 | {...} | Foreach.cs:19:5:22:5 | {...} | | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | | Foreach.cs:20:22:20:22 | String x | Foreach.cs:20:22:20:22 | String x | @@ -1790,6 +1894,7 @@ | Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:27:20:68 | ... ?? ... | | Foreach.cs:20:43:20:68 | call to method Empty | Foreach.cs:20:43:20:68 | call to method Empty | | Foreach.cs:21:11:21:11 | ; | Foreach.cs:21:11:21:11 | ; | +| Foreach.cs:24:40:24:43 | args | Foreach.cs:24:40:24:43 | args | | Foreach.cs:25:5:28:5 | {...} | Foreach.cs:25:5:28:5 | {...} | | Foreach.cs:26:9:27:11 | foreach (... ... in ...) ... | Foreach.cs:26:9:27:11 | foreach (... ... in ...) ... | | Foreach.cs:26:18:26:31 | (..., ...) | Foreach.cs:26:23:26:23 | String x | @@ -1797,6 +1902,7 @@ | Foreach.cs:26:30:26:30 | Int32 y | Foreach.cs:26:30:26:30 | Int32 y | | Foreach.cs:26:36:26:39 | access to parameter args | Foreach.cs:26:36:26:39 | access to parameter args | | Foreach.cs:27:11:27:11 | ; | Foreach.cs:27:11:27:11 | ; | +| Foreach.cs:30:40:30:43 | args | Foreach.cs:30:40:30:43 | args | | Foreach.cs:31:5:34:5 | {...} | Foreach.cs:31:5:34:5 | {...} | | Foreach.cs:32:9:33:11 | foreach (... ... in ...) ... | Foreach.cs:32:9:33:11 | foreach (... ... in ...) ... | | Foreach.cs:32:18:32:27 | (..., ...) | Foreach.cs:32:23:32:23 | String x | @@ -1804,6 +1910,7 @@ | Foreach.cs:32:26:32:26 | Int32 y | Foreach.cs:32:26:32:26 | Int32 y | | Foreach.cs:32:32:32:35 | access to parameter args | Foreach.cs:32:32:32:35 | access to parameter args | | Foreach.cs:33:11:33:11 | ; | Foreach.cs:33:11:33:11 | ; | +| Foreach.cs:36:40:36:43 | args | Foreach.cs:36:40:36:43 | args | | Foreach.cs:37:5:40:5 | {...} | Foreach.cs:37:5:40:5 | {...} | | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | | Foreach.cs:38:18:38:34 | (..., ...) | Foreach.cs:38:26:38:26 | String x | @@ -1831,6 +1938,7 @@ | Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:10:5:10:16 | call to constructor Object | | Initializers.cs:10:5:10:16 | call to method | Initializers.cs:10:5:10:16 | this access | | Initializers.cs:10:5:10:16 | this access | Initializers.cs:10:5:10:16 | this access | +| Initializers.cs:10:25:10:25 | s | Initializers.cs:10:25:10:25 | s | | Initializers.cs:10:28:10:30 | {...} | Initializers.cs:10:28:10:30 | {...} | | Initializers.cs:13:5:16:5 | {...} | Initializers.cs:13:5:16:5 | {...} | | Initializers.cs:14:9:14:54 | ... ...; | Initializers.cs:14:9:14:54 | ... ...; | @@ -1882,6 +1990,7 @@ | Initializers.cs:31:26:31:30 | ... = ... | Initializers.cs:31:26:31:26 | this access | | Initializers.cs:31:26:31:31 | ...; | Initializers.cs:31:26:31:31 | ...; | | Initializers.cs:31:30:31:30 | 3 | Initializers.cs:31:30:31:30 | 3 | +| Initializers.cs:33:17:33:17 | i | Initializers.cs:33:17:33:17 | i | | Initializers.cs:33:22:33:25 | call to constructor Sub | Initializers.cs:33:22:33:25 | call to constructor Sub | | Initializers.cs:33:29:33:38 | {...} | Initializers.cs:33:29:33:38 | {...} | | Initializers.cs:33:31:33:31 | access to field I | Initializers.cs:33:31:33:31 | this access | @@ -1892,6 +2001,8 @@ | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | | Initializers.cs:35:9:35:11 | call to method | Initializers.cs:35:9:35:11 | this access | | Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | this access | +| Initializers.cs:35:17:35:17 | i | Initializers.cs:35:17:35:17 | i | +| Initializers.cs:35:24:35:24 | j | Initializers.cs:35:24:35:24 | j | | Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:27:35:40 | {...} | | Initializers.cs:35:29:35:29 | access to field I | Initializers.cs:35:29:35:29 | this access | | Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:29:35:29 | this access | @@ -1908,6 +2019,7 @@ | Initializers.cs:41:11:41:18 | call to method | Initializers.cs:41:11:41:18 | this access | | Initializers.cs:41:11:41:18 | this access | Initializers.cs:41:11:41:18 | this access | | Initializers.cs:41:11:41:18 | {...} | Initializers.cs:41:11:41:18 | {...} | +| Initializers.cs:51:19:51:19 | i | Initializers.cs:51:19:51:19 | i | | Initializers.cs:52:5:66:5 | {...} | Initializers.cs:52:5:66:5 | {...} | | Initializers.cs:54:9:54:96 | ... ...; | Initializers.cs:54:9:54:96 | ... ...; | | Initializers.cs:54:13:54:16 | access to local variable dict | Initializers.cs:54:13:54:16 | access to local variable dict | @@ -2027,6 +2139,7 @@ | LoopUnrolling.cs:5:7:5:19 | call to method | LoopUnrolling.cs:5:7:5:19 | this access | | LoopUnrolling.cs:5:7:5:19 | this access | LoopUnrolling.cs:5:7:5:19 | this access | | LoopUnrolling.cs:5:7:5:19 | {...} | LoopUnrolling.cs:5:7:5:19 | {...} | +| LoopUnrolling.cs:7:22:7:25 | args | LoopUnrolling.cs:7:22:7:25 | args | | LoopUnrolling.cs:8:5:13:5 | {...} | LoopUnrolling.cs:8:5:13:5 | {...} | | LoopUnrolling.cs:9:9:10:19 | if (...) ... | LoopUnrolling.cs:9:9:10:19 | if (...) ... | | LoopUnrolling.cs:9:13:9:16 | access to parameter args | LoopUnrolling.cs:9:13:9:16 | access to parameter args | @@ -2056,6 +2169,7 @@ | LoopUnrolling.cs:19:13:19:32 | call to method WriteLine | LoopUnrolling.cs:19:31:19:31 | access to local variable x | | LoopUnrolling.cs:19:13:19:33 | ...; | LoopUnrolling.cs:19:13:19:33 | ...; | | LoopUnrolling.cs:19:31:19:31 | access to local variable x | LoopUnrolling.cs:19:31:19:31 | access to local variable x | +| LoopUnrolling.cs:22:20:22:23 | args | LoopUnrolling.cs:22:20:22:23 | args | | LoopUnrolling.cs:23:5:27:5 | {...} | LoopUnrolling.cs:23:5:27:5 | {...} | | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | | LoopUnrolling.cs:24:22:24:24 | Char arg | LoopUnrolling.cs:24:22:24:24 | Char arg | @@ -2127,6 +2241,7 @@ | LoopUnrolling.cs:50:16:50:36 | ...; | LoopUnrolling.cs:50:16:50:36 | ...; | | LoopUnrolling.cs:50:34:50:34 | access to local variable x | LoopUnrolling.cs:50:34:50:34 | access to local variable x | | LoopUnrolling.cs:51:13:51:23 | goto ...; | LoopUnrolling.cs:51:13:51:23 | goto ...; | +| LoopUnrolling.cs:55:18:55:18 | b | LoopUnrolling.cs:55:18:55:18 | b | | LoopUnrolling.cs:56:5:65:5 | {...} | LoopUnrolling.cs:56:5:65:5 | {...} | | LoopUnrolling.cs:57:9:57:48 | ... ...; | LoopUnrolling.cs:57:9:57:48 | ... ...; | | LoopUnrolling.cs:57:13:57:14 | access to local variable xs | LoopUnrolling.cs:57:13:57:14 | access to local variable xs | @@ -2151,6 +2266,7 @@ | LoopUnrolling.cs:63:17:63:36 | call to method WriteLine | LoopUnrolling.cs:63:35:63:35 | access to local variable x | | LoopUnrolling.cs:63:17:63:37 | ...; | LoopUnrolling.cs:63:17:63:37 | ...; | | LoopUnrolling.cs:63:35:63:35 | access to local variable x | LoopUnrolling.cs:63:35:63:35 | access to local variable x | +| LoopUnrolling.cs:67:26:67:29 | args | LoopUnrolling.cs:67:26:67:29 | args | | LoopUnrolling.cs:68:5:74:5 | {...} | LoopUnrolling.cs:68:5:74:5 | {...} | | LoopUnrolling.cs:69:9:70:19 | if (...) ... | LoopUnrolling.cs:69:9:70:19 | if (...) ... | | LoopUnrolling.cs:69:13:69:23 | !... | LoopUnrolling.cs:69:13:69:23 | !... | @@ -2217,6 +2333,7 @@ | MultiImplementationA.cs:7:25:7:39 | {...} | MultiImplementationA.cs:7:25:7:39 | {...} | | MultiImplementationA.cs:7:27:7:37 | throw ...; | MultiImplementationA.cs:7:33:7:36 | null | | MultiImplementationA.cs:7:33:7:36 | null | MultiImplementationA.cs:7:33:7:36 | null | +| MultiImplementationA.cs:7:41:7:43 | value | MultiImplementationA.cs:7:41:7:43 | value | | MultiImplementationA.cs:7:45:7:59 | {...} | MultiImplementationA.cs:7:45:7:59 | {...} | | MultiImplementationA.cs:7:47:7:57 | throw ...; | MultiImplementationA.cs:7:53:7:56 | null | | MultiImplementationA.cs:7:53:7:56 | null | MultiImplementationA.cs:7:53:7:56 | null | @@ -2226,17 +2343,23 @@ | MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:13:16:13:16 | this access | | MultiImplementationA.cs:13:16:13:20 | ... = ... | MultiImplementationA.cs:13:16:13:16 | this access | | MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:13:20:13:20 | 0 | +| MultiImplementationA.cs:14:25:14:25 | i | MultiImplementationA.cs:14:25:14:25 | i | | MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | access to parameter i | +| MultiImplementationA.cs:15:31:15:31 | s | MultiImplementationA.cs:15:31:15:31 | s | +| MultiImplementationA.cs:15:31:15:31 | s | MultiImplementationA.cs:15:31:15:31 | s | | MultiImplementationA.cs:15:40:15:52 | {...} | MultiImplementationA.cs:15:40:15:52 | {...} | | MultiImplementationA.cs:15:42:15:50 | return ...; | MultiImplementationA.cs:15:49:15:49 | access to parameter s | | MultiImplementationA.cs:15:49:15:49 | access to parameter s | MultiImplementationA.cs:15:49:15:49 | access to parameter s | +| MultiImplementationA.cs:15:54:15:56 | value | MultiImplementationA.cs:15:54:15:56 | value | | MultiImplementationA.cs:15:58:15:60 | {...} | MultiImplementationA.cs:15:58:15:60 | {...} | +| MultiImplementationA.cs:16:24:16:24 | i | MultiImplementationA.cs:16:24:16:24 | i | | MultiImplementationA.cs:17:5:19:5 | {...} | MultiImplementationA.cs:17:5:19:5 | {...} | | MultiImplementationA.cs:18:9:18:22 | M2(...) | MultiImplementationA.cs:18:9:18:22 | M2(...) | | MultiImplementationA.cs:18:21:18:21 | 0 | MultiImplementationA.cs:18:21:18:21 | 0 | | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | | MultiImplementationA.cs:20:12:20:13 | call to method | MultiImplementationA.cs:20:12:20:13 | this access | | MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | this access | +| MultiImplementationA.cs:20:19:20:19 | i | MultiImplementationA.cs:20:19:20:19 | i | | MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:22:20:31 | {...} | | MultiImplementationA.cs:20:24:20:24 | access to field F | MultiImplementationA.cs:20:24:20:24 | this access | | MultiImplementationA.cs:20:24:20:24 | this access | MultiImplementationA.cs:20:24:20:24 | this access | @@ -2247,6 +2370,7 @@ | MultiImplementationA.cs:21:24:21:24 | 0 | MultiImplementationA.cs:21:24:21:24 | 0 | | MultiImplementationA.cs:21:27:21:29 | {...} | MultiImplementationA.cs:21:27:21:29 | {...} | | MultiImplementationA.cs:22:11:22:13 | {...} | MultiImplementationA.cs:22:11:22:13 | {...} | +| MultiImplementationA.cs:23:44:23:44 | i | MultiImplementationA.cs:23:44:23:44 | i | | MultiImplementationA.cs:23:50:23:53 | null | MultiImplementationA.cs:23:50:23:53 | null | | MultiImplementationA.cs:24:16:24:16 | access to property P | MultiImplementationA.cs:24:16:24:16 | this access | | MultiImplementationA.cs:24:16:24:16 | this access | MultiImplementationA.cs:24:16:24:16 | this access | @@ -2323,20 +2447,26 @@ | NullCoalescing.cs:1:7:1:20 | call to method | NullCoalescing.cs:1:7:1:20 | this access | | NullCoalescing.cs:1:7:1:20 | this access | NullCoalescing.cs:1:7:1:20 | this access | | NullCoalescing.cs:1:7:1:20 | {...} | NullCoalescing.cs:1:7:1:20 | {...} | +| NullCoalescing.cs:3:17:3:17 | i | NullCoalescing.cs:3:17:3:17 | i | | NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:23:3:23 | access to parameter i | | NullCoalescing.cs:3:23:3:28 | ... ?? ... | NullCoalescing.cs:3:23:3:28 | ... ?? ... | | NullCoalescing.cs:3:28:3:28 | 0 | NullCoalescing.cs:3:28:3:28 | 0 | +| NullCoalescing.cs:5:18:5:18 | b | NullCoalescing.cs:5:18:5:18 | b | | NullCoalescing.cs:5:24:5:43 | ... ? ... : ... | NullCoalescing.cs:5:24:5:43 | ... ? ... : ... | | NullCoalescing.cs:5:25:5:25 | access to parameter b | NullCoalescing.cs:5:25:5:25 | access to parameter b | | NullCoalescing.cs:5:25:5:34 | ... ?? ... | NullCoalescing.cs:5:25:5:34 | ... ?? ... | | NullCoalescing.cs:5:30:5:34 | false | NullCoalescing.cs:5:30:5:34 | false | | NullCoalescing.cs:5:39:5:39 | 0 | NullCoalescing.cs:5:39:5:39 | 0 | | NullCoalescing.cs:5:43:5:43 | 1 | NullCoalescing.cs:5:43:5:43 | 1 | +| NullCoalescing.cs:7:22:7:23 | s1 | NullCoalescing.cs:7:22:7:23 | s1 | +| NullCoalescing.cs:7:33:7:34 | s2 | NullCoalescing.cs:7:33:7:34 | s2 | | NullCoalescing.cs:7:40:7:41 | access to parameter s1 | NullCoalescing.cs:7:40:7:41 | access to parameter s1 | | NullCoalescing.cs:7:40:7:53 | ... ?? ... | NullCoalescing.cs:7:40:7:53 | ... ?? ... | | NullCoalescing.cs:7:46:7:47 | access to parameter s2 | NullCoalescing.cs:7:46:7:47 | access to parameter s2 | | NullCoalescing.cs:7:46:7:53 | ... ?? ... | NullCoalescing.cs:7:46:7:53 | ... ?? ... | | NullCoalescing.cs:7:52:7:53 | "" | NullCoalescing.cs:7:52:7:53 | "" | +| NullCoalescing.cs:9:20:9:20 | b | NullCoalescing.cs:9:20:9:20 | b | +| NullCoalescing.cs:9:30:9:30 | s | NullCoalescing.cs:9:30:9:30 | s | | NullCoalescing.cs:9:36:9:58 | ... ?? ... | NullCoalescing.cs:9:36:9:58 | ... ?? ... | | NullCoalescing.cs:9:37:9:37 | access to parameter b | NullCoalescing.cs:9:37:9:37 | access to parameter b | | NullCoalescing.cs:9:37:9:45 | ... ? ... : ... | NullCoalescing.cs:9:37:9:45 | ... ? ... : ... | @@ -2345,6 +2475,9 @@ | NullCoalescing.cs:9:51:9:52 | "" | NullCoalescing.cs:9:51:9:52 | "" | | NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:58 | ... ?? ... | | NullCoalescing.cs:9:57:9:58 | "" | NullCoalescing.cs:9:57:9:58 | "" | +| NullCoalescing.cs:11:18:11:19 | b1 | NullCoalescing.cs:11:18:11:19 | b1 | +| NullCoalescing.cs:11:27:11:28 | b2 | NullCoalescing.cs:11:27:11:28 | b2 | +| NullCoalescing.cs:11:36:11:37 | b3 | NullCoalescing.cs:11:36:11:37 | b3 | | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | | NullCoalescing.cs:11:44:11:45 | access to parameter b1 | NullCoalescing.cs:11:44:11:45 | access to parameter b1 | | NullCoalescing.cs:11:44:11:59 | ... ?? ... | NullCoalescing.cs:11:44:11:59 | ... ?? ... | @@ -2353,6 +2486,7 @@ | NullCoalescing.cs:11:57:11:58 | access to parameter b3 | NullCoalescing.cs:11:57:11:58 | access to parameter b3 | | NullCoalescing.cs:11:64:11:64 | 0 | NullCoalescing.cs:11:64:11:64 | 0 | | NullCoalescing.cs:11:68:11:68 | 1 | NullCoalescing.cs:11:68:11:68 | 1 | +| NullCoalescing.cs:13:17:13:17 | i | NullCoalescing.cs:13:17:13:17 | i | | NullCoalescing.cs:14:5:18:5 | {...} | NullCoalescing.cs:14:5:18:5 | {...} | | NullCoalescing.cs:15:9:15:32 | ... ...; | NullCoalescing.cs:15:9:15:32 | ... ...; | | NullCoalescing.cs:15:13:15:13 | access to local variable j | NullCoalescing.cs:15:13:15:13 | access to local variable j | @@ -2377,6 +2511,7 @@ | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | | PartialImplementationA.cs:3:12:3:18 | call to method | PartialImplementationA.cs:3:12:3:18 | this access | | PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | this access | +| PartialImplementationA.cs:3:24:3:24 | i | PartialImplementationA.cs:3:24:3:24 | i | | PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:27:3:29 | {...} | | PartialImplementationB.cs:3:16:3:16 | access to field F | PartialImplementationB.cs:3:16:3:16 | this access | | PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationB.cs:3:16:3:16 | this access | @@ -2471,10 +2606,12 @@ | Patterns.cs:37:17:37:22 | break; | Patterns.cs:37:17:37:22 | break; | | Patterns.cs:40:9:42:9 | switch (...) {...} | Patterns.cs:40:9:42:9 | switch (...) {...} | | Patterns.cs:40:17:40:17 | access to local variable o | Patterns.cs:40:17:40:17 | access to local variable o | +| Patterns.cs:47:32:47:32 | c | Patterns.cs:47:32:47:32 | c | | Patterns.cs:48:9:48:9 | access to parameter c | Patterns.cs:48:9:48:9 | access to parameter c | | Patterns.cs:48:9:48:20 | ... is ... | Patterns.cs:48:9:48:9 | access to parameter c | | Patterns.cs:48:14:48:20 | not ... | Patterns.cs:48:18:48:20 | a | | Patterns.cs:48:18:48:20 | a | Patterns.cs:48:18:48:20 | a | +| Patterns.cs:50:34:50:34 | c | Patterns.cs:50:34:50:34 | c | | Patterns.cs:51:9:51:9 | access to parameter c | Patterns.cs:51:9:51:9 | access to parameter c | | Patterns.cs:51:9:51:21 | ... is ... | Patterns.cs:51:9:51:9 | access to parameter c | | Patterns.cs:51:9:51:39 | ... ? ... : ... | Patterns.cs:51:9:51:39 | ... ? ... : ... | @@ -2486,6 +2623,7 @@ | Patterns.cs:51:34:51:34 | access to parameter c | Patterns.cs:51:34:51:34 | access to parameter c | | Patterns.cs:51:34:51:39 | ... is ... | Patterns.cs:51:34:51:34 | access to parameter c | | Patterns.cs:51:39:51:39 | 2 | Patterns.cs:51:39:51:39 | 2 | +| Patterns.cs:53:34:53:34 | c | Patterns.cs:53:34:53:34 | c | | Patterns.cs:54:9:54:9 | access to parameter c | Patterns.cs:54:9:54:9 | access to parameter c | | Patterns.cs:54:9:54:37 | ... is ... | Patterns.cs:54:9:54:9 | access to parameter c | | Patterns.cs:54:14:54:37 | not ... | Patterns.cs:54:18:54:37 | Patterns u | @@ -2494,6 +2632,7 @@ | Patterns.cs:54:18:54:37 | { ... } | Patterns.cs:54:18:54:37 | Patterns u | | Patterns.cs:54:27:54:35 | { ... } | Patterns.cs:54:33:54:33 | 1 | | Patterns.cs:54:33:54:33 | 1 | Patterns.cs:54:33:54:33 | 1 | +| Patterns.cs:56:33:56:33 | i | Patterns.cs:56:33:56:33 | i | | Patterns.cs:57:5:63:5 | {...} | Patterns.cs:57:5:63:5 | {...} | | Patterns.cs:58:9:62:10 | return ...; | Patterns.cs:58:16:62:9 | ... switch { ... } | | Patterns.cs:58:16:58:16 | access to parameter i | Patterns.cs:58:16:58:16 | access to parameter i | @@ -2516,6 +2655,7 @@ | Patterns.cs:70:13:70:13 | 2 | Patterns.cs:70:13:70:13 | 2 | | Patterns.cs:70:13:70:27 | ... => ... | Patterns.cs:70:13:70:27 | ... => ... | | Patterns.cs:70:18:70:27 | "possible" | Patterns.cs:70:18:70:27 | "possible" | +| Patterns.cs:74:33:74:33 | i | Patterns.cs:74:33:74:33 | i | | Patterns.cs:75:5:83:5 | {...} | Patterns.cs:75:5:83:5 | {...} | | Patterns.cs:76:9:82:10 | return ...; | Patterns.cs:76:16:82:9 | ... switch { ... } | | Patterns.cs:76:16:76:16 | access to parameter i | Patterns.cs:76:16:76:16 | access to parameter i | @@ -2534,6 +2674,7 @@ | Patterns.cs:81:13:81:13 | _ | Patterns.cs:81:13:81:13 | _ | | Patterns.cs:81:13:81:20 | ... => ... | Patterns.cs:81:13:81:20 | ... => ... | | Patterns.cs:81:18:81:20 | "0" | Patterns.cs:81:18:81:20 | "0" | +| Patterns.cs:85:33:85:33 | i | Patterns.cs:85:33:85:33 | i | | Patterns.cs:85:39:85:39 | access to parameter i | Patterns.cs:85:39:85:39 | access to parameter i | | Patterns.cs:85:39:85:53 | ... is ... | Patterns.cs:85:39:85:39 | access to parameter i | | Patterns.cs:85:39:85:69 | ... ? ... : ... | Patterns.cs:85:39:85:69 | ... ? ... : ... | @@ -2543,6 +2684,7 @@ | Patterns.cs:85:53:85:53 | 2 | Patterns.cs:85:53:85:53 | 2 | | Patterns.cs:85:57:85:63 | "not 2" | Patterns.cs:85:57:85:63 | "not 2" | | Patterns.cs:85:67:85:69 | "2" | Patterns.cs:85:67:85:69 | "2" | +| Patterns.cs:87:33:87:33 | i | Patterns.cs:87:33:87:33 | i | | Patterns.cs:87:39:87:39 | access to parameter i | Patterns.cs:87:39:87:39 | access to parameter i | | Patterns.cs:87:39:87:54 | ... is ... | Patterns.cs:87:39:87:39 | access to parameter i | | Patterns.cs:87:39:87:70 | ... ? ... : ... | Patterns.cs:87:39:87:70 | ... ? ... : ... | @@ -2569,10 +2711,12 @@ | PostDominance.cs:3:7:3:19 | call to method | PostDominance.cs:3:7:3:19 | this access | | PostDominance.cs:3:7:3:19 | this access | PostDominance.cs:3:7:3:19 | this access | | PostDominance.cs:3:7:3:19 | {...} | PostDominance.cs:3:7:3:19 | {...} | +| PostDominance.cs:5:20:5:20 | s | PostDominance.cs:5:20:5:20 | s | | PostDominance.cs:6:5:8:5 | {...} | PostDominance.cs:6:5:8:5 | {...} | | PostDominance.cs:7:9:7:28 | call to method WriteLine | PostDominance.cs:7:27:7:27 | access to parameter s | | PostDominance.cs:7:9:7:29 | ...; | PostDominance.cs:7:9:7:29 | ...; | | PostDominance.cs:7:27:7:27 | access to parameter s | PostDominance.cs:7:27:7:27 | access to parameter s | +| PostDominance.cs:10:20:10:20 | s | PostDominance.cs:10:20:10:20 | s | | PostDominance.cs:11:5:15:5 | {...} | PostDominance.cs:11:5:15:5 | {...} | | PostDominance.cs:12:9:13:19 | if (...) ... | PostDominance.cs:12:9:13:19 | if (...) ... | | PostDominance.cs:12:13:12:13 | access to parameter s | PostDominance.cs:12:13:12:13 | access to parameter s | @@ -2582,6 +2726,7 @@ | PostDominance.cs:14:9:14:28 | call to method WriteLine | PostDominance.cs:14:27:14:27 | access to parameter s | | PostDominance.cs:14:9:14:29 | ...; | PostDominance.cs:14:9:14:29 | ...; | | PostDominance.cs:14:27:14:27 | access to parameter s | PostDominance.cs:14:27:14:27 | access to parameter s | +| PostDominance.cs:17:20:17:20 | s | PostDominance.cs:17:20:17:20 | s | | PostDominance.cs:18:5:22:5 | {...} | PostDominance.cs:18:5:22:5 | {...} | | PostDominance.cs:19:9:20:55 | if (...) ... | PostDominance.cs:19:9:20:55 | if (...) ... | | PostDominance.cs:19:13:19:13 | access to parameter s | PostDominance.cs:19:13:19:13 | access to parameter s | @@ -2673,9 +2818,11 @@ | Switch.cs:3:7:3:12 | call to method | Switch.cs:3:7:3:12 | this access | | Switch.cs:3:7:3:12 | this access | Switch.cs:3:7:3:12 | this access | | Switch.cs:3:7:3:12 | {...} | Switch.cs:3:7:3:12 | {...} | +| Switch.cs:5:20:5:20 | o | Switch.cs:5:20:5:20 | o | | Switch.cs:6:5:8:5 | {...} | Switch.cs:6:5:8:5 | {...} | | Switch.cs:7:9:7:22 | switch (...) {...} | Switch.cs:7:9:7:22 | switch (...) {...} | | Switch.cs:7:17:7:17 | access to parameter o | Switch.cs:7:17:7:17 | access to parameter o | +| Switch.cs:10:20:10:20 | o | Switch.cs:10:20:10:20 | o | | Switch.cs:11:5:33:5 | {...} | Switch.cs:11:5:33:5 | {...} | | Switch.cs:12:9:32:9 | switch (...) {...} | Switch.cs:12:9:32:9 | switch (...) {...} | | Switch.cs:12:17:12:17 | access to parameter o | Switch.cs:12:17:12:17 | access to parameter o | @@ -2722,6 +2869,7 @@ | Switch.cs:36:5:42:5 | {...} | Switch.cs:36:5:42:5 | {...} | | Switch.cs:37:9:41:9 | switch (...) {...} | Switch.cs:37:9:41:9 | switch (...) {...} | | Switch.cs:37:17:37:23 | call to method Throw | Switch.cs:37:17:37:23 | call to method Throw | +| Switch.cs:44:20:44:20 | o | Switch.cs:44:20:44:20 | o | | Switch.cs:45:5:53:5 | {...} | Switch.cs:45:5:53:5 | {...} | | Switch.cs:46:9:52:9 | switch (...) {...} | Switch.cs:46:9:52:9 | switch (...) {...} | | Switch.cs:46:17:46:17 | access to parameter o | Switch.cs:46:17:46:17 | access to parameter o | @@ -2745,6 +2893,7 @@ | Switch.cs:61:13:61:19 | case ...: | Switch.cs:61:13:61:19 | case ...: | | Switch.cs:61:18:61:18 | 3 | Switch.cs:61:18:61:18 | 3 | | Switch.cs:62:17:62:22 | break; | Switch.cs:62:17:62:22 | break; | +| Switch.cs:66:20:66:20 | s | Switch.cs:66:20:66:20 | s | | Switch.cs:67:5:75:5 | {...} | Switch.cs:67:5:75:5 | {...} | | Switch.cs:68:9:74:9 | switch (...) {...} | Switch.cs:68:9:74:9 | switch (...) {...} | | Switch.cs:68:17:68:25 | (...) ... | Switch.cs:68:25:68:25 | access to parameter s | @@ -2755,6 +2904,8 @@ | Switch.cs:72:13:72:20 | case ...: | Switch.cs:72:13:72:20 | case ...: | | Switch.cs:72:18:72:19 | "" | Switch.cs:72:18:72:19 | "" | | Switch.cs:73:17:73:22 | break; | Switch.cs:73:17:73:22 | break; | +| Switch.cs:77:17:77:17 | i | Switch.cs:77:17:77:17 | i | +| Switch.cs:77:24:77:24 | j | Switch.cs:77:24:77:24 | j | | Switch.cs:78:5:89:5 | {...} | Switch.cs:78:5:89:5 | {...} | | Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:79:9:87:9 | switch (...) {...} | | Switch.cs:79:17:79:17 | access to parameter i | Switch.cs:79:17:79:17 | access to parameter i | @@ -2773,6 +2924,7 @@ | Switch.cs:86:24:86:27 | true | Switch.cs:86:24:86:27 | true | | Switch.cs:88:9:88:21 | return ...; | Switch.cs:88:16:88:20 | false | | Switch.cs:88:16:88:20 | false | Switch.cs:88:16:88:20 | false | +| Switch.cs:91:20:91:20 | o | Switch.cs:91:20:91:20 | o | | Switch.cs:92:5:99:5 | {...} | Switch.cs:92:5:99:5 | {...} | | Switch.cs:93:9:97:9 | switch (...) {...} | Switch.cs:93:9:97:9 | switch (...) {...} | | Switch.cs:93:17:93:17 | access to parameter o | Switch.cs:93:17:93:17 | access to parameter o | @@ -2782,6 +2934,7 @@ | Switch.cs:96:24:96:27 | true | Switch.cs:96:24:96:27 | true | | Switch.cs:98:9:98:21 | return ...; | Switch.cs:98:16:98:20 | false | | Switch.cs:98:16:98:20 | false | Switch.cs:98:16:98:20 | false | +| Switch.cs:101:19:101:19 | s | Switch.cs:101:19:101:19 | s | | Switch.cs:102:5:109:5 | {...} | Switch.cs:102:5:109:5 | {...} | | Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:103:9:107:9 | switch (...) {...} | | Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:103:17:103:17 | access to parameter s | @@ -2799,6 +2952,7 @@ | Switch.cs:108:17:108:17 | 1 | Switch.cs:108:17:108:17 | 1 | | Switch.cs:111:28:111:48 | throw ... | Switch.cs:111:34:111:48 | object creation of type Exception | | Switch.cs:111:34:111:48 | object creation of type Exception | Switch.cs:111:34:111:48 | object creation of type Exception | +| Switch.cs:113:20:113:20 | s | Switch.cs:113:20:113:20 | s | | Switch.cs:114:5:121:5 | {...} | Switch.cs:114:5:121:5 | {...} | | Switch.cs:115:9:119:9 | switch (...) {...} | Switch.cs:115:9:119:9 | switch (...) {...} | | Switch.cs:115:17:115:17 | access to parameter s | Switch.cs:115:17:115:17 | access to parameter s | @@ -2820,6 +2974,7 @@ | Switch.cs:120:9:120:18 | return ...; | Switch.cs:120:17:120:17 | 1 | | Switch.cs:120:16:120:17 | -... | Switch.cs:120:17:120:17 | 1 | | Switch.cs:120:17:120:17 | 1 | Switch.cs:120:17:120:17 | 1 | +| Switch.cs:123:21:123:21 | o | Switch.cs:123:21:123:21 | o | | Switch.cs:124:5:127:5 | {...} | Switch.cs:124:5:127:5 | {...} | | Switch.cs:125:9:126:19 | if (...) ... | Switch.cs:125:9:126:19 | if (...) ... | | Switch.cs:125:13:125:13 | access to parameter o | Switch.cs:125:13:125:13 | access to parameter o | @@ -2831,6 +2986,7 @@ | Switch.cs:125:37:125:46 | ... => ... | Switch.cs:125:37:125:46 | ... => ... | | Switch.cs:125:42:125:46 | false | Switch.cs:125:42:125:46 | false | | Switch.cs:126:13:126:19 | return ...; | Switch.cs:126:13:126:19 | return ...; | +| Switch.cs:129:23:129:23 | o | Switch.cs:129:23:129:23 | o | | Switch.cs:130:5:132:5 | {...} | Switch.cs:130:5:132:5 | {...} | | Switch.cs:131:9:131:67 | return ...; | Switch.cs:131:17:131:53 | ... switch { ... } | | Switch.cs:131:16:131:66 | call to method ToString | Switch.cs:131:17:131:53 | ... switch { ... } | @@ -2842,6 +2998,7 @@ | Switch.cs:131:43:131:43 | _ | Switch.cs:131:43:131:43 | _ | | Switch.cs:131:43:131:51 | ... => ... | Switch.cs:131:43:131:51 | ... => ... | | Switch.cs:131:48:131:51 | null | Switch.cs:131:48:131:51 | null | +| Switch.cs:134:17:134:17 | i | Switch.cs:134:17:134:17 | i | | Switch.cs:135:5:142:5 | {...} | Switch.cs:135:5:142:5 | {...} | | Switch.cs:136:9:141:9 | switch (...) {...} | Switch.cs:136:9:141:9 | switch (...) {...} | | Switch.cs:136:17:136:17 | access to parameter i | Switch.cs:136:17:136:17 | access to parameter i | @@ -2857,6 +3014,7 @@ | Switch.cs:140:18:140:18 | 2 | Switch.cs:140:18:140:18 | 2 | | Switch.cs:140:21:140:29 | return ...; | Switch.cs:140:28:140:28 | 2 | | Switch.cs:140:28:140:28 | 2 | Switch.cs:140:28:140:28 | 2 | +| Switch.cs:144:17:144:17 | i | Switch.cs:144:17:144:17 | i | | Switch.cs:145:5:152:5 | {...} | Switch.cs:145:5:152:5 | {...} | | Switch.cs:146:9:151:9 | switch (...) {...} | Switch.cs:146:9:151:9 | switch (...) {...} | | Switch.cs:146:17:146:17 | access to parameter i | Switch.cs:146:17:146:17 | access to parameter i | @@ -2872,6 +3030,7 @@ | Switch.cs:150:18:150:18 | 2 | Switch.cs:150:18:150:18 | 2 | | Switch.cs:150:21:150:29 | return ...; | Switch.cs:150:28:150:28 | 2 | | Switch.cs:150:28:150:28 | 2 | Switch.cs:150:28:150:28 | 2 | +| Switch.cs:154:19:154:19 | b | Switch.cs:154:19:154:19 | b | | Switch.cs:155:5:161:5 | {...} | Switch.cs:155:5:161:5 | {...} | | Switch.cs:156:9:156:55 | ... ...; | Switch.cs:156:9:156:55 | ... ...; | | Switch.cs:156:13:156:13 | access to local variable s | Switch.cs:156:13:156:13 | access to local variable s | @@ -2898,6 +3057,7 @@ | Switch.cs:160:40:160:43 | "b = " | Switch.cs:160:40:160:43 | "b = " | | Switch.cs:160:44:160:46 | {...} | Switch.cs:160:45:160:45 | access to local variable s | | Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:45:160:45 | access to local variable s | +| Switch.cs:163:18:163:18 | i | Switch.cs:163:18:163:18 | i | | Switch.cs:164:5:178:5 | {...} | Switch.cs:164:5:178:5 | {...} | | Switch.cs:165:9:177:9 | switch (...) {...} | Switch.cs:165:9:177:9 | switch (...) {...} | | Switch.cs:165:17:165:17 | access to parameter i | Switch.cs:165:17:165:17 | access to parameter i | @@ -2924,6 +3084,7 @@ | TypeAccesses.cs:1:7:1:18 | call to method | TypeAccesses.cs:1:7:1:18 | this access | | TypeAccesses.cs:1:7:1:18 | this access | TypeAccesses.cs:1:7:1:18 | this access | | TypeAccesses.cs:1:7:1:18 | {...} | TypeAccesses.cs:1:7:1:18 | {...} | +| TypeAccesses.cs:3:19:3:19 | o | TypeAccesses.cs:3:19:3:19 | o | | TypeAccesses.cs:4:5:9:5 | {...} | TypeAccesses.cs:4:5:9:5 | {...} | | TypeAccesses.cs:5:9:5:26 | ... ...; | TypeAccesses.cs:5:9:5:26 | ... ...; | | TypeAccesses.cs:5:13:5:13 | access to local variable s | TypeAccesses.cs:5:13:5:13 | access to local variable s | @@ -2948,6 +3109,7 @@ | VarDecls.cs:3:7:3:14 | call to method | VarDecls.cs:3:7:3:14 | this access | | VarDecls.cs:3:7:3:14 | this access | VarDecls.cs:3:7:3:14 | this access | | VarDecls.cs:3:7:3:14 | {...} | VarDecls.cs:3:7:3:14 | {...} | +| VarDecls.cs:5:30:5:36 | strings | VarDecls.cs:5:30:5:36 | strings | | VarDecls.cs:6:5:11:5 | {...} | VarDecls.cs:6:5:11:5 | {...} | | VarDecls.cs:7:9:10:9 | fixed(...) { ... } | VarDecls.cs:7:9:10:9 | fixed(...) { ... } | | VarDecls.cs:7:22:7:23 | access to local variable c1 | VarDecls.cs:7:22:7:23 | access to local variable c1 | @@ -2966,6 +3128,7 @@ | VarDecls.cs:9:13:9:29 | return ...; | VarDecls.cs:9:27:9:28 | access to local variable c1 | | VarDecls.cs:9:20:9:28 | (...) ... | VarDecls.cs:9:27:9:28 | access to local variable c1 | | VarDecls.cs:9:27:9:28 | access to local variable c1 | VarDecls.cs:9:27:9:28 | access to local variable c1 | +| VarDecls.cs:13:22:13:22 | s | VarDecls.cs:13:22:13:22 | s | | VarDecls.cs:14:5:17:5 | {...} | VarDecls.cs:14:5:17:5 | {...} | | VarDecls.cs:15:9:15:30 | ... ...; | VarDecls.cs:15:9:15:30 | ... ...; | | VarDecls.cs:15:16:15:17 | access to local variable s1 | VarDecls.cs:15:16:15:17 | access to local variable s1 | @@ -2978,6 +3141,7 @@ | VarDecls.cs:16:16:16:17 | access to local variable s1 | VarDecls.cs:16:16:16:17 | access to local variable s1 | | VarDecls.cs:16:16:16:22 | ... + ... | VarDecls.cs:16:16:16:17 | access to local variable s1 | | VarDecls.cs:16:21:16:22 | access to local variable s2 | VarDecls.cs:16:21:16:22 | access to local variable s2 | +| VarDecls.cs:19:15:19:15 | b | VarDecls.cs:19:15:19:15 | b | | VarDecls.cs:20:5:26:5 | {...} | VarDecls.cs:20:5:26:5 | {...} | | VarDecls.cs:21:9:22:13 | using (...) {...} | VarDecls.cs:21:9:22:13 | using (...) {...} | | VarDecls.cs:21:16:21:22 | object creation of type C | VarDecls.cs:21:16:21:22 | object creation of type C | @@ -2999,6 +3163,7 @@ | VarDecls.cs:28:11:28:11 | this access | VarDecls.cs:28:11:28:11 | this access | | VarDecls.cs:28:11:28:11 | {...} | VarDecls.cs:28:11:28:11 | {...} | | VarDecls.cs:28:51:28:53 | {...} | VarDecls.cs:28:51:28:53 | {...} | +| cflow.cs:5:31:5:34 | args | cflow.cs:5:31:5:34 | args | | cflow.cs:6:5:35:5 | {...} | cflow.cs:6:5:35:5 | {...} | | cflow.cs:7:9:7:28 | ... ...; | cflow.cs:7:9:7:28 | ... ...; | | cflow.cs:7:13:7:13 | access to local variable a | cflow.cs:7:13:7:13 | access to local variable a | @@ -3085,6 +3250,7 @@ | cflow.cs:33:17:33:36 | call to method WriteLine | cflow.cs:33:35:33:35 | access to local variable i | | cflow.cs:33:17:33:37 | ...; | cflow.cs:33:17:33:37 | ...; | | cflow.cs:33:35:33:35 | access to local variable i | cflow.cs:33:35:33:35 | access to local variable i | +| cflow.cs:37:28:37:28 | a | cflow.cs:37:28:37:28 | a | | cflow.cs:38:5:68:5 | {...} | cflow.cs:38:5:68:5 | {...} | | cflow.cs:39:9:50:9 | switch (...) {...} | cflow.cs:39:9:50:9 | switch (...) {...} | | cflow.cs:39:17:39:17 | access to parameter a | cflow.cs:39:17:39:17 | access to parameter a | @@ -3138,6 +3304,7 @@ | cflow.cs:65:17:65:22 | break; | cflow.cs:65:17:65:22 | break; | | cflow.cs:67:9:67:17 | return ...; | cflow.cs:67:16:67:16 | access to parameter a | | cflow.cs:67:16:67:16 | access to parameter a | cflow.cs:67:16:67:16 | access to parameter a | +| cflow.cs:70:27:70:27 | s | cflow.cs:70:27:70:27 | s | | cflow.cs:71:5:82:5 | {...} | cflow.cs:71:5:82:5 | {...} | | cflow.cs:72:9:73:19 | if (...) ... | cflow.cs:72:9:73:19 | if (...) ... | | cflow.cs:72:13:72:13 | access to parameter s | cflow.cs:72:13:72:13 | access to parameter s | @@ -3157,6 +3324,7 @@ | cflow.cs:80:13:80:47 | call to method WriteLine | cflow.cs:80:31:80:46 | "" | | cflow.cs:80:13:80:48 | ...; | cflow.cs:80:13:80:48 | ...; | | cflow.cs:80:31:80:46 | "" | cflow.cs:80:31:80:46 | "" | +| cflow.cs:84:28:84:28 | s | cflow.cs:84:28:84:28 | s | | cflow.cs:85:5:88:5 | {...} | cflow.cs:85:5:88:5 | {...} | | cflow.cs:86:9:87:33 | if (...) ... | cflow.cs:86:9:87:33 | if (...) ... | | cflow.cs:86:13:86:13 | access to parameter s | cflow.cs:86:13:86:13 | access to parameter s | @@ -3170,6 +3338,7 @@ | cflow.cs:87:13:87:32 | call to method WriteLine | cflow.cs:87:31:87:31 | access to parameter s | | cflow.cs:87:13:87:33 | ...; | cflow.cs:87:13:87:33 | ...; | | cflow.cs:87:31:87:31 | access to parameter s | cflow.cs:87:31:87:31 | access to parameter s | +| cflow.cs:90:28:90:28 | s | cflow.cs:90:28:90:28 | s | | cflow.cs:91:5:104:5 | {...} | cflow.cs:91:5:104:5 | {...} | | cflow.cs:92:9:93:49 | if (...) ... | cflow.cs:92:9:93:49 | if (...) ... | | cflow.cs:92:13:92:27 | call to method Equals | cflow.cs:92:20:92:20 | access to parameter s | @@ -3208,6 +3377,7 @@ | cflow.cs:103:13:103:36 | ...; | cflow.cs:103:13:103:36 | ...; | | cflow.cs:103:31:103:34 | access to property Prop | cflow.cs:103:31:103:34 | this access | | cflow.cs:103:31:103:34 | this access | cflow.cs:103:31:103:34 | this access | +| cflow.cs:106:28:106:28 | s | cflow.cs:106:28:106:28 | s | | cflow.cs:107:5:117:5 | {...} | cflow.cs:107:5:117:5 | {...} | | cflow.cs:108:9:115:9 | if (...) ... | cflow.cs:108:9:115:9 | if (...) ... | | cflow.cs:108:13:108:13 | access to parameter s | cflow.cs:108:13:108:13 | access to parameter s | @@ -3223,6 +3393,7 @@ | cflow.cs:116:9:116:28 | call to method WriteLine | cflow.cs:116:27:116:27 | access to parameter s | | cflow.cs:116:9:116:29 | ...; | cflow.cs:116:9:116:29 | ...; | | cflow.cs:116:27:116:27 | access to parameter s | cflow.cs:116:27:116:27 | access to parameter s | +| cflow.cs:119:30:119:30 | s | cflow.cs:119:30:119:30 | s | | cflow.cs:120:5:124:5 | {...} | cflow.cs:120:5:124:5 | {...} | | cflow.cs:121:9:121:18 | ... ...; | cflow.cs:121:9:121:18 | ... ...; | | cflow.cs:121:13:121:13 | access to local variable x | cflow.cs:121:13:121:13 | access to local variable x | @@ -3246,6 +3417,7 @@ | cflow.cs:127:48:127:49 | "" | cflow.cs:127:48:127:49 | "" | | cflow.cs:127:53:127:57 | access to field Field | cflow.cs:127:53:127:57 | this access | | cflow.cs:127:53:127:57 | this access | cflow.cs:127:53:127:57 | this access | +| cflow.cs:127:62:127:64 | value | cflow.cs:127:62:127:64 | value | | cflow.cs:127:66:127:83 | {...} | cflow.cs:127:66:127:83 | {...} | | cflow.cs:127:68:127:72 | access to field Field | cflow.cs:127:68:127:72 | this access | | cflow.cs:127:68:127:72 | this access | cflow.cs:127:68:127:72 | this access | @@ -3255,12 +3427,14 @@ | cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:129:5:129:15 | call to constructor Object | | cflow.cs:129:5:129:15 | call to method | cflow.cs:129:5:129:15 | this access | | cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | this access | +| cflow.cs:129:24:129:24 | s | cflow.cs:129:24:129:24 | s | | cflow.cs:130:5:132:5 | {...} | cflow.cs:130:5:132:5 | {...} | | cflow.cs:131:9:131:13 | access to field Field | cflow.cs:131:9:131:13 | this access | | cflow.cs:131:9:131:13 | this access | cflow.cs:131:9:131:13 | this access | | cflow.cs:131:9:131:17 | ... = ... | cflow.cs:131:9:131:13 | this access | | cflow.cs:131:9:131:18 | ...; | cflow.cs:131:9:131:18 | ...; | | cflow.cs:131:17:131:17 | access to parameter s | cflow.cs:131:17:131:17 | access to parameter s | +| cflow.cs:134:21:134:21 | i | cflow.cs:134:21:134:21 | i | | cflow.cs:134:26:134:29 | call to constructor ControlFlow | cflow.cs:134:31:134:31 | access to parameter i | | cflow.cs:134:31:134:31 | (...) ... | cflow.cs:134:31:134:31 | access to parameter i | | cflow.cs:134:31:134:31 | access to parameter i | cflow.cs:134:31:134:31 | access to parameter i | @@ -3272,18 +3446,23 @@ | cflow.cs:136:33:136:37 | ... + ... | cflow.cs:136:33:136:33 | 0 | | cflow.cs:136:37:136:37 | 1 | cflow.cs:136:37:136:37 | 1 | | cflow.cs:136:40:136:42 | {...} | cflow.cs:136:40:136:42 | {...} | +| cflow.cs:138:54:138:54 | x | cflow.cs:138:54:138:54 | x | +| cflow.cs:138:69:138:69 | y | cflow.cs:138:69:138:69 | y | | cflow.cs:139:5:142:5 | {...} | cflow.cs:139:5:142:5 | {...} | | cflow.cs:140:9:140:28 | call to method WriteLine | cflow.cs:140:27:140:27 | access to parameter x | | cflow.cs:140:9:140:29 | ...; | cflow.cs:140:9:140:29 | ...; | | cflow.cs:140:27:140:27 | access to parameter x | cflow.cs:140:27:140:27 | access to parameter x | | cflow.cs:141:9:141:17 | return ...; | cflow.cs:141:16:141:16 | access to parameter y | | cflow.cs:141:16:141:16 | access to parameter y | cflow.cs:141:16:141:16 | access to parameter y | +| cflow.cs:144:28:144:28 | i | cflow.cs:144:28:144:28 | i | +| cflow.cs:144:28:144:28 | i | cflow.cs:144:28:144:28 | i | | cflow.cs:144:37:144:54 | {...} | cflow.cs:144:37:144:54 | {...} | | cflow.cs:144:39:144:52 | return ...; | cflow.cs:144:46:144:46 | access to parameter i | | cflow.cs:144:46:144:46 | (...) ... | cflow.cs:144:46:144:46 | access to parameter i | | cflow.cs:144:46:144:46 | access to parameter i | cflow.cs:144:46:144:46 | access to parameter i | | cflow.cs:144:46:144:51 | ... + ... | cflow.cs:144:46:144:46 | access to parameter i | | cflow.cs:144:50:144:51 | "" | cflow.cs:144:50:144:51 | "" | +| cflow.cs:144:56:144:58 | value | cflow.cs:144:56:144:58 | value | | cflow.cs:144:60:144:62 | {...} | cflow.cs:144:60:144:62 | {...} | | cflow.cs:147:5:177:5 | {...} | cflow.cs:147:5:177:5 | {...} | | cflow.cs:148:9:148:18 | ... ...; | cflow.cs:148:9:148:18 | ... ...; | @@ -3361,6 +3540,7 @@ | cflow.cs:181:9:181:38 | ... ...; | cflow.cs:181:9:181:38 | ... ...; | | cflow.cs:181:24:181:24 | access to local variable y | cflow.cs:181:24:181:24 | access to local variable y | | cflow.cs:181:24:181:37 | Func y = ... | cflow.cs:181:24:181:24 | access to local variable y | +| cflow.cs:181:28:181:28 | x | cflow.cs:181:28:181:28 | x | | cflow.cs:181:28:181:37 | (...) => ... | cflow.cs:181:28:181:37 | (...) => ... | | cflow.cs:181:33:181:33 | access to parameter x | cflow.cs:181:33:181:33 | access to parameter x | | cflow.cs:181:33:181:37 | ... + ... | cflow.cs:181:33:181:33 | access to parameter x | @@ -3369,6 +3549,7 @@ | cflow.cs:182:24:182:24 | access to local variable z | cflow.cs:182:24:182:24 | access to local variable z | | cflow.cs:182:24:182:61 | Func z = ... | cflow.cs:182:24:182:24 | access to local variable z | | cflow.cs:182:28:182:61 | delegate(...) { ... } | cflow.cs:182:28:182:61 | delegate(...) { ... } | +| cflow.cs:182:42:182:42 | x | cflow.cs:182:42:182:42 | x | | cflow.cs:182:45:182:61 | {...} | cflow.cs:182:45:182:61 | {...} | | cflow.cs:182:47:182:59 | return ...; | cflow.cs:182:54:182:54 | access to parameter x | | cflow.cs:182:54:182:54 | access to parameter x | cflow.cs:182:54:182:54 | access to parameter x | @@ -3579,8 +3760,10 @@ | cflow.cs:282:5:282:18 | this access | cflow.cs:282:5:282:18 | this access | | cflow.cs:282:24:282:27 | call to constructor ControlFlow | cflow.cs:282:24:282:27 | call to constructor ControlFlow | | cflow.cs:282:31:282:33 | {...} | cflow.cs:282:31:282:33 | {...} | +| cflow.cs:284:27:284:27 | s | cflow.cs:284:27:284:27 | s | | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub | | cflow.cs:284:39:284:41 | {...} | cflow.cs:284:39:284:41 | {...} | +| cflow.cs:286:24:286:24 | i | cflow.cs:286:24:286:24 | i | | cflow.cs:286:29:286:32 | call to constructor ControlFlowSub | cflow.cs:286:34:286:34 | access to parameter i | | cflow.cs:286:34:286:34 | access to parameter i | cflow.cs:286:34:286:34 | access to parameter i | | cflow.cs:286:34:286:45 | call to method ToString | cflow.cs:286:34:286:34 | access to parameter i | @@ -3589,13 +3772,20 @@ | cflow.cs:289:7:289:18 | call to method | cflow.cs:289:7:289:18 | this access | | cflow.cs:289:7:289:18 | this access | cflow.cs:289:7:289:18 | this access | | cflow.cs:289:7:289:18 | {...} | cflow.cs:289:7:289:18 | {...} | +| cflow.cs:291:32:291:32 | f | cflow.cs:291:32:291:32 | f | | cflow.cs:291:38:291:38 | access to parameter f | cflow.cs:291:38:291:38 | access to parameter f | | cflow.cs:291:38:291:41 | delegate call | cflow.cs:291:38:291:38 | access to parameter f | | cflow.cs:291:40:291:40 | 0 | cflow.cs:291:40:291:40 | 0 | | cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:5:296:25 | call to constructor Object | | cflow.cs:296:5:296:25 | call to method | cflow.cs:296:5:296:25 | this access | | cflow.cs:296:5:296:25 | this access | cflow.cs:296:5:296:25 | this access | +| cflow.cs:296:32:296:32 | b | cflow.cs:296:32:296:32 | b | +| cflow.cs:296:39:296:39 | i | cflow.cs:296:39:296:39 | i | +| cflow.cs:296:49:296:49 | s | cflow.cs:296:49:296:49 | s | | cflow.cs:296:52:296:54 | {...} | cflow.cs:296:52:296:54 | {...} | +| cflow.cs:298:16:298:16 | i | cflow.cs:298:16:298:16 | i | +| cflow.cs:298:26:298:26 | s | cflow.cs:298:26:298:26 | s | +| cflow.cs:298:34:298:34 | b | cflow.cs:298:34:298:34 | b | | cflow.cs:299:5:301:5 | {...} | cflow.cs:299:5:301:5 | {...} | | cflow.cs:300:9:300:72 | object creation of type NegationInConstructor | cflow.cs:300:38:300:38 | 0 | | cflow.cs:300:9:300:73 | ...; | cflow.cs:300:9:300:73 | ...; | @@ -3614,6 +3804,8 @@ | cflow.cs:304:7:304:18 | this access | cflow.cs:304:7:304:18 | this access | | cflow.cs:304:7:304:18 | {...} | cflow.cs:304:7:304:18 | {...} | | cflow.cs:306:60:310:5 | (...) => ... | cflow.cs:306:60:310:5 | (...) => ... | +| cflow.cs:306:61:306:61 | o | cflow.cs:306:61:306:61 | o | +| cflow.cs:306:64:306:64 | n | cflow.cs:306:64:306:64 | n | | cflow.cs:307:5:310:5 | {...} | cflow.cs:307:5:310:5 | {...} | | cflow.cs:308:9:308:21 | ... ...; | cflow.cs:308:9:308:21 | ... ...; | | cflow.cs:308:16:308:16 | access to local variable x | cflow.cs:308:16:308:16 | access to local variable x | diff --git a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected index 7c138f5c38fc..f9619e825cc8 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected @@ -8,20 +8,26 @@ | AccessorCalls.cs:1:7:1:19 | call to method | AccessorCalls.cs:1:7:1:19 | After call to method | | | AccessorCalls.cs:1:7:1:19 | this access | AccessorCalls.cs:1:7:1:19 | call to method | | | AccessorCalls.cs:1:7:1:19 | {...} | AccessorCalls.cs:1:7:1:19 | Normal Exit | | -| AccessorCalls.cs:5:23:5:25 | Entry | AccessorCalls.cs:5:30:5:30 | access to parameter i | | +| AccessorCalls.cs:5:18:5:18 | i | AccessorCalls.cs:5:30:5:30 | access to parameter i | | +| AccessorCalls.cs:5:18:5:18 | i | AccessorCalls.cs:5:33:5:35 | value | | +| AccessorCalls.cs:5:23:5:25 | Entry | AccessorCalls.cs:5:18:5:18 | i | | | AccessorCalls.cs:5:23:5:25 | Normal Exit | AccessorCalls.cs:5:23:5:25 | Exit | | | AccessorCalls.cs:5:30:5:30 | access to parameter i | AccessorCalls.cs:5:23:5:25 | Normal Exit | | -| AccessorCalls.cs:5:33:5:35 | Entry | AccessorCalls.cs:5:37:5:39 | {...} | | +| AccessorCalls.cs:5:33:5:35 | Entry | AccessorCalls.cs:5:18:5:18 | i | | | AccessorCalls.cs:5:33:5:35 | Normal Exit | AccessorCalls.cs:5:33:5:35 | Exit | | +| AccessorCalls.cs:5:33:5:35 | value | AccessorCalls.cs:5:37:5:39 | {...} | | | AccessorCalls.cs:5:37:5:39 | {...} | AccessorCalls.cs:5:33:5:35 | Normal Exit | | -| AccessorCalls.cs:7:32:7:34 | Entry | AccessorCalls.cs:7:36:7:38 | {...} | | +| AccessorCalls.cs:7:32:7:34 | Entry | AccessorCalls.cs:7:32:7:34 | value | | | AccessorCalls.cs:7:32:7:34 | Normal Exit | AccessorCalls.cs:7:32:7:34 | Exit | | +| AccessorCalls.cs:7:32:7:34 | value | AccessorCalls.cs:7:36:7:38 | {...} | | | AccessorCalls.cs:7:36:7:38 | {...} | AccessorCalls.cs:7:32:7:34 | Normal Exit | | -| AccessorCalls.cs:7:40:7:45 | Entry | AccessorCalls.cs:7:47:7:49 | {...} | | +| AccessorCalls.cs:7:40:7:45 | Entry | AccessorCalls.cs:7:40:7:45 | value | | | AccessorCalls.cs:7:40:7:45 | Normal Exit | AccessorCalls.cs:7:40:7:45 | Exit | | +| AccessorCalls.cs:7:40:7:45 | value | AccessorCalls.cs:7:47:7:49 | {...} | | | AccessorCalls.cs:7:47:7:49 | {...} | AccessorCalls.cs:7:40:7:45 | Normal Exit | | -| AccessorCalls.cs:10:10:10:11 | Entry | AccessorCalls.cs:11:5:17:5 | {...} | | +| AccessorCalls.cs:10:10:10:11 | Entry | AccessorCalls.cs:10:26:10:26 | e | | | AccessorCalls.cs:10:10:10:11 | Normal Exit | AccessorCalls.cs:10:10:10:11 | Exit | | +| AccessorCalls.cs:10:26:10:26 | e | AccessorCalls.cs:11:5:17:5 | {...} | | | AccessorCalls.cs:11:5:17:5 | After {...} | AccessorCalls.cs:10:10:10:11 | Normal Exit | | | AccessorCalls.cs:11:5:17:5 | {...} | AccessorCalls.cs:12:9:12:32 | ...; | | | AccessorCalls.cs:12:9:12:12 | this access | AccessorCalls.cs:12:9:12:18 | access to field Field | | @@ -85,8 +91,9 @@ | AccessorCalls.cs:16:9:16:24 | ...; | AccessorCalls.cs:16:9:16:23 | Before ... -= ... | | | AccessorCalls.cs:16:9:16:24 | After ...; | AccessorCalls.cs:11:5:17:5 | After {...} | | | AccessorCalls.cs:16:23:16:23 | access to parameter e | AccessorCalls.cs:16:9:16:23 | ... -= ... | | -| AccessorCalls.cs:19:10:19:11 | Entry | AccessorCalls.cs:20:5:26:5 | {...} | | +| AccessorCalls.cs:19:10:19:11 | Entry | AccessorCalls.cs:19:26:19:26 | e | | | AccessorCalls.cs:19:10:19:11 | Normal Exit | AccessorCalls.cs:19:10:19:11 | Exit | | +| AccessorCalls.cs:19:26:19:26 | e | AccessorCalls.cs:20:5:26:5 | {...} | | | AccessorCalls.cs:20:5:26:5 | After {...} | AccessorCalls.cs:19:10:19:11 | Normal Exit | | | AccessorCalls.cs:20:5:26:5 | {...} | AccessorCalls.cs:21:9:21:36 | ...; | | | AccessorCalls.cs:21:9:21:12 | this access | AccessorCalls.cs:21:9:21:14 | access to field x | | @@ -355,8 +362,9 @@ | AccessorCalls.cs:53:22:53:30 | Before access to indexer | AccessorCalls.cs:53:22:53:27 | Before access to field x | | | AccessorCalls.cs:53:22:53:30 | access to indexer | AccessorCalls.cs:53:22:53:30 | After access to indexer | | | AccessorCalls.cs:53:29:53:29 | 0 | AccessorCalls.cs:53:22:53:30 | access to indexer | | -| AccessorCalls.cs:56:10:56:11 | Entry | AccessorCalls.cs:57:5:59:5 | {...} | | +| AccessorCalls.cs:56:10:56:11 | Entry | AccessorCalls.cs:56:17:56:17 | i | | | AccessorCalls.cs:56:10:56:11 | Normal Exit | AccessorCalls.cs:56:10:56:11 | Exit | | +| AccessorCalls.cs:56:17:56:17 | i | AccessorCalls.cs:57:5:59:5 | {...} | | | AccessorCalls.cs:57:5:59:5 | After {...} | AccessorCalls.cs:56:10:56:11 | Normal Exit | | | AccessorCalls.cs:57:5:59:5 | {...} | AccessorCalls.cs:58:9:58:86 | ...; | | | AccessorCalls.cs:58:9:58:45 | (..., ...) | AccessorCalls.cs:58:9:58:45 | After (..., ...) | | @@ -404,8 +412,9 @@ | AccessorCalls.cs:58:77:58:83 | Before access to indexer | AccessorCalls.cs:58:77:58:80 | this access | | | AccessorCalls.cs:58:77:58:83 | access to indexer | AccessorCalls.cs:58:77:58:83 | After access to indexer | | | AccessorCalls.cs:58:82:58:82 | 1 | AccessorCalls.cs:58:77:58:83 | access to indexer | | -| AccessorCalls.cs:61:10:61:11 | Entry | AccessorCalls.cs:62:5:64:5 | {...} | | +| AccessorCalls.cs:61:10:61:11 | Entry | AccessorCalls.cs:61:17:61:17 | i | | | AccessorCalls.cs:61:10:61:11 | Normal Exit | AccessorCalls.cs:61:10:61:11 | Exit | | +| AccessorCalls.cs:61:17:61:17 | i | AccessorCalls.cs:62:5:64:5 | {...} | | | AccessorCalls.cs:62:5:64:5 | After {...} | AccessorCalls.cs:61:10:61:11 | Normal Exit | | | AccessorCalls.cs:62:5:64:5 | {...} | AccessorCalls.cs:63:9:63:98 | ...; | | | AccessorCalls.cs:63:9:63:51 | (..., ...) | AccessorCalls.cs:63:9:63:51 | After (..., ...) | | @@ -471,8 +480,11 @@ | AccessorCalls.cs:63:87:63:95 | Before access to indexer | AccessorCalls.cs:63:87:63:92 | Before access to field x | | | AccessorCalls.cs:63:87:63:95 | access to indexer | AccessorCalls.cs:63:87:63:95 | After access to indexer | | | AccessorCalls.cs:63:94:63:94 | 1 | AccessorCalls.cs:63:87:63:95 | access to indexer | | -| AccessorCalls.cs:66:10:66:11 | Entry | AccessorCalls.cs:67:5:74:5 | {...} | | +| AccessorCalls.cs:66:10:66:11 | Entry | AccessorCalls.cs:66:20:66:20 | o | | | AccessorCalls.cs:66:10:66:11 | Normal Exit | AccessorCalls.cs:66:10:66:11 | Exit | | +| AccessorCalls.cs:66:20:66:20 | o | AccessorCalls.cs:66:27:66:27 | i | | +| AccessorCalls.cs:66:27:66:27 | i | AccessorCalls.cs:66:43:66:43 | e | | +| AccessorCalls.cs:66:43:66:43 | e | AccessorCalls.cs:67:5:74:5 | {...} | | | AccessorCalls.cs:67:5:74:5 | After {...} | AccessorCalls.cs:66:10:66:11 | Normal Exit | | | AccessorCalls.cs:67:5:74:5 | {...} | AccessorCalls.cs:68:9:68:22 | ... ...; | | | AccessorCalls.cs:68:9:68:22 | ... ...; | AccessorCalls.cs:68:17:68:21 | Before dynamic d = ... | | @@ -638,9 +650,10 @@ | Assert.cs:5:7:5:17 | call to method | Assert.cs:5:7:5:17 | After call to method | | | Assert.cs:5:7:5:17 | this access | Assert.cs:5:7:5:17 | call to method | | | Assert.cs:5:7:5:17 | {...} | Assert.cs:5:7:5:17 | Normal Exit | | -| Assert.cs:7:10:7:11 | Entry | Assert.cs:8:5:12:5 | {...} | | +| Assert.cs:7:10:7:11 | Entry | Assert.cs:7:18:7:18 | b | | | Assert.cs:7:10:7:11 | Exceptional Exit | Assert.cs:7:10:7:11 | Exit | | | Assert.cs:7:10:7:11 | Normal Exit | Assert.cs:7:10:7:11 | Exit | | +| Assert.cs:7:18:7:18 | b | Assert.cs:8:5:12:5 | {...} | | | Assert.cs:8:5:12:5 | After {...} | Assert.cs:7:10:7:11 | Normal Exit | | | Assert.cs:8:5:12:5 | {...} | Assert.cs:9:9:9:33 | ... ...; | | | Assert.cs:9:9:9:33 | ... ...; | Assert.cs:9:16:9:32 | Before String s = ... | | @@ -677,9 +690,10 @@ | Assert.cs:11:27:11:34 | After access to property Length | Assert.cs:11:9:11:35 | call to method WriteLine | | | Assert.cs:11:27:11:34 | Before access to property Length | Assert.cs:11:27:11:27 | access to local variable s | | | Assert.cs:11:27:11:34 | access to property Length | Assert.cs:11:27:11:34 | After access to property Length | | -| Assert.cs:14:10:14:11 | Entry | Assert.cs:15:5:19:5 | {...} | | +| Assert.cs:14:10:14:11 | Entry | Assert.cs:14:18:14:18 | b | | | Assert.cs:14:10:14:11 | Exceptional Exit | Assert.cs:14:10:14:11 | Exit | | | Assert.cs:14:10:14:11 | Normal Exit | Assert.cs:14:10:14:11 | Exit | | +| Assert.cs:14:18:14:18 | b | Assert.cs:15:5:19:5 | {...} | | | Assert.cs:15:5:19:5 | After {...} | Assert.cs:14:10:14:11 | Normal Exit | | | Assert.cs:15:5:19:5 | {...} | Assert.cs:16:9:16:33 | ... ...; | | | Assert.cs:16:9:16:33 | ... ...; | Assert.cs:16:16:16:32 | Before String s = ... | | @@ -712,9 +726,10 @@ | Assert.cs:18:27:18:34 | After access to property Length | Assert.cs:18:9:18:35 | call to method WriteLine | | | Assert.cs:18:27:18:34 | Before access to property Length | Assert.cs:18:27:18:27 | access to local variable s | | | Assert.cs:18:27:18:34 | access to property Length | Assert.cs:18:27:18:34 | After access to property Length | | -| Assert.cs:21:10:21:11 | Entry | Assert.cs:22:5:26:5 | {...} | | +| Assert.cs:21:10:21:11 | Entry | Assert.cs:21:18:21:18 | b | | | Assert.cs:21:10:21:11 | Exceptional Exit | Assert.cs:21:10:21:11 | Exit | | | Assert.cs:21:10:21:11 | Normal Exit | Assert.cs:21:10:21:11 | Exit | | +| Assert.cs:21:18:21:18 | b | Assert.cs:22:5:26:5 | {...} | | | Assert.cs:22:5:26:5 | After {...} | Assert.cs:21:10:21:11 | Normal Exit | | | Assert.cs:22:5:26:5 | {...} | Assert.cs:23:9:23:33 | ... ...; | | | Assert.cs:23:9:23:33 | ... ...; | Assert.cs:23:16:23:32 | Before String s = ... | | @@ -747,9 +762,10 @@ | Assert.cs:25:27:25:34 | After access to property Length | Assert.cs:25:9:25:35 | call to method WriteLine | | | Assert.cs:25:27:25:34 | Before access to property Length | Assert.cs:25:27:25:27 | access to local variable s | | | Assert.cs:25:27:25:34 | access to property Length | Assert.cs:25:27:25:34 | After access to property Length | | -| Assert.cs:28:10:28:11 | Entry | Assert.cs:29:5:33:5 | {...} | | +| Assert.cs:28:10:28:11 | Entry | Assert.cs:28:18:28:18 | b | | | Assert.cs:28:10:28:11 | Exceptional Exit | Assert.cs:28:10:28:11 | Exit | | | Assert.cs:28:10:28:11 | Normal Exit | Assert.cs:28:10:28:11 | Exit | | +| Assert.cs:28:18:28:18 | b | Assert.cs:29:5:33:5 | {...} | | | Assert.cs:29:5:33:5 | After {...} | Assert.cs:28:10:28:11 | Normal Exit | | | Assert.cs:29:5:33:5 | {...} | Assert.cs:30:9:30:33 | ... ...; | | | Assert.cs:30:9:30:33 | ... ...; | Assert.cs:30:16:30:32 | Before String s = ... | | @@ -786,9 +802,10 @@ | Assert.cs:32:27:32:34 | After access to property Length | Assert.cs:32:9:32:35 | call to method WriteLine | | | Assert.cs:32:27:32:34 | Before access to property Length | Assert.cs:32:27:32:27 | access to local variable s | | | Assert.cs:32:27:32:34 | access to property Length | Assert.cs:32:27:32:34 | After access to property Length | | -| Assert.cs:35:10:35:11 | Entry | Assert.cs:36:5:40:5 | {...} | | +| Assert.cs:35:10:35:11 | Entry | Assert.cs:35:18:35:18 | b | | | Assert.cs:35:10:35:11 | Exceptional Exit | Assert.cs:35:10:35:11 | Exit | | | Assert.cs:35:10:35:11 | Normal Exit | Assert.cs:35:10:35:11 | Exit | | +| Assert.cs:35:18:35:18 | b | Assert.cs:36:5:40:5 | {...} | | | Assert.cs:36:5:40:5 | After {...} | Assert.cs:35:10:35:11 | Normal Exit | | | Assert.cs:36:5:40:5 | {...} | Assert.cs:37:9:37:33 | ... ...; | | | Assert.cs:37:9:37:33 | ... ...; | Assert.cs:37:16:37:32 | Before String s = ... | | @@ -825,9 +842,10 @@ | Assert.cs:39:27:39:34 | After access to property Length | Assert.cs:39:9:39:35 | call to method WriteLine | | | Assert.cs:39:27:39:34 | Before access to property Length | Assert.cs:39:27:39:27 | access to local variable s | | | Assert.cs:39:27:39:34 | access to property Length | Assert.cs:39:27:39:34 | After access to property Length | | -| Assert.cs:42:10:42:11 | Entry | Assert.cs:43:5:47:5 | {...} | | +| Assert.cs:42:10:42:11 | Entry | Assert.cs:42:18:42:18 | b | | | Assert.cs:42:10:42:11 | Exceptional Exit | Assert.cs:42:10:42:11 | Exit | | | Assert.cs:42:10:42:11 | Normal Exit | Assert.cs:42:10:42:11 | Exit | | +| Assert.cs:42:18:42:18 | b | Assert.cs:43:5:47:5 | {...} | | | Assert.cs:43:5:47:5 | After {...} | Assert.cs:42:10:42:11 | Normal Exit | | | Assert.cs:43:5:47:5 | {...} | Assert.cs:44:9:44:33 | ... ...; | | | Assert.cs:44:9:44:33 | ... ...; | Assert.cs:44:16:44:32 | Before String s = ... | | @@ -864,9 +882,10 @@ | Assert.cs:46:27:46:34 | After access to property Length | Assert.cs:46:9:46:35 | call to method WriteLine | | | Assert.cs:46:27:46:34 | Before access to property Length | Assert.cs:46:27:46:27 | access to local variable s | | | Assert.cs:46:27:46:34 | access to property Length | Assert.cs:46:27:46:34 | After access to property Length | | -| Assert.cs:49:10:49:11 | Entry | Assert.cs:50:5:54:5 | {...} | | +| Assert.cs:49:10:49:11 | Entry | Assert.cs:49:18:49:18 | b | | | Assert.cs:49:10:49:11 | Exceptional Exit | Assert.cs:49:10:49:11 | Exit | | | Assert.cs:49:10:49:11 | Normal Exit | Assert.cs:49:10:49:11 | Exit | | +| Assert.cs:49:18:49:18 | b | Assert.cs:50:5:54:5 | {...} | | | Assert.cs:50:5:54:5 | After {...} | Assert.cs:49:10:49:11 | Normal Exit | | | Assert.cs:50:5:54:5 | {...} | Assert.cs:51:9:51:33 | ... ...; | | | Assert.cs:51:9:51:33 | ... ...; | Assert.cs:51:16:51:32 | Before String s = ... | | @@ -903,9 +922,10 @@ | Assert.cs:53:27:53:34 | After access to property Length | Assert.cs:53:9:53:35 | call to method WriteLine | | | Assert.cs:53:27:53:34 | Before access to property Length | Assert.cs:53:27:53:27 | access to local variable s | | | Assert.cs:53:27:53:34 | access to property Length | Assert.cs:53:27:53:34 | After access to property Length | | -| Assert.cs:56:10:56:11 | Entry | Assert.cs:57:5:61:5 | {...} | | +| Assert.cs:56:10:56:11 | Entry | Assert.cs:56:18:56:18 | b | | | Assert.cs:56:10:56:11 | Exceptional Exit | Assert.cs:56:10:56:11 | Exit | | | Assert.cs:56:10:56:11 | Normal Exit | Assert.cs:56:10:56:11 | Exit | | +| Assert.cs:56:18:56:18 | b | Assert.cs:57:5:61:5 | {...} | | | Assert.cs:57:5:61:5 | After {...} | Assert.cs:56:10:56:11 | Normal Exit | | | Assert.cs:57:5:61:5 | {...} | Assert.cs:58:9:58:33 | ... ...; | | | Assert.cs:58:9:58:33 | ... ...; | Assert.cs:58:16:58:32 | Before String s = ... | | @@ -947,9 +967,10 @@ | Assert.cs:60:27:60:34 | After access to property Length | Assert.cs:60:9:60:35 | call to method WriteLine | | | Assert.cs:60:27:60:34 | Before access to property Length | Assert.cs:60:27:60:27 | access to local variable s | | | Assert.cs:60:27:60:34 | access to property Length | Assert.cs:60:27:60:34 | After access to property Length | | -| Assert.cs:63:10:63:11 | Entry | Assert.cs:64:5:68:5 | {...} | | +| Assert.cs:63:10:63:11 | Entry | Assert.cs:63:18:63:18 | b | | | Assert.cs:63:10:63:11 | Exceptional Exit | Assert.cs:63:10:63:11 | Exit | | | Assert.cs:63:10:63:11 | Normal Exit | Assert.cs:63:10:63:11 | Exit | | +| Assert.cs:63:18:63:18 | b | Assert.cs:64:5:68:5 | {...} | | | Assert.cs:64:5:68:5 | After {...} | Assert.cs:63:10:63:11 | Normal Exit | | | Assert.cs:64:5:68:5 | {...} | Assert.cs:65:9:65:33 | ... ...; | | | Assert.cs:65:9:65:33 | ... ...; | Assert.cs:65:16:65:32 | Before String s = ... | | @@ -991,9 +1012,10 @@ | Assert.cs:67:27:67:34 | After access to property Length | Assert.cs:67:9:67:35 | call to method WriteLine | | | Assert.cs:67:27:67:34 | Before access to property Length | Assert.cs:67:27:67:27 | access to local variable s | | | Assert.cs:67:27:67:34 | access to property Length | Assert.cs:67:27:67:34 | After access to property Length | | -| Assert.cs:70:10:70:12 | Entry | Assert.cs:71:5:75:5 | {...} | | +| Assert.cs:70:10:70:12 | Entry | Assert.cs:70:19:70:19 | b | | | Assert.cs:70:10:70:12 | Exceptional Exit | Assert.cs:70:10:70:12 | Exit | | | Assert.cs:70:10:70:12 | Normal Exit | Assert.cs:70:10:70:12 | Exit | | +| Assert.cs:70:19:70:19 | b | Assert.cs:71:5:75:5 | {...} | | | Assert.cs:71:5:75:5 | After {...} | Assert.cs:70:10:70:12 | Normal Exit | | | Assert.cs:71:5:75:5 | {...} | Assert.cs:72:9:72:33 | ... ...; | | | Assert.cs:72:9:72:33 | ... ...; | Assert.cs:72:16:72:32 | Before String s = ... | | @@ -1035,9 +1057,10 @@ | Assert.cs:74:27:74:34 | After access to property Length | Assert.cs:74:9:74:35 | call to method WriteLine | | | Assert.cs:74:27:74:34 | Before access to property Length | Assert.cs:74:27:74:27 | access to local variable s | | | Assert.cs:74:27:74:34 | access to property Length | Assert.cs:74:27:74:34 | After access to property Length | | -| Assert.cs:77:10:77:12 | Entry | Assert.cs:78:5:82:5 | {...} | | +| Assert.cs:77:10:77:12 | Entry | Assert.cs:77:19:77:19 | b | | | Assert.cs:77:10:77:12 | Exceptional Exit | Assert.cs:77:10:77:12 | Exit | | | Assert.cs:77:10:77:12 | Normal Exit | Assert.cs:77:10:77:12 | Exit | | +| Assert.cs:77:19:77:19 | b | Assert.cs:78:5:82:5 | {...} | | | Assert.cs:78:5:82:5 | After {...} | Assert.cs:77:10:77:12 | Normal Exit | | | Assert.cs:78:5:82:5 | {...} | Assert.cs:79:9:79:33 | ... ...; | | | Assert.cs:79:9:79:33 | ... ...; | Assert.cs:79:16:79:32 | Before String s = ... | | @@ -1079,9 +1102,10 @@ | Assert.cs:81:27:81:34 | After access to property Length | Assert.cs:81:9:81:35 | call to method WriteLine | | | Assert.cs:81:27:81:34 | Before access to property Length | Assert.cs:81:27:81:27 | access to local variable s | | | Assert.cs:81:27:81:34 | access to property Length | Assert.cs:81:27:81:34 | After access to property Length | | -| Assert.cs:84:10:84:12 | Entry | Assert.cs:85:5:129:5 | {...} | | +| Assert.cs:84:10:84:12 | Entry | Assert.cs:84:19:84:19 | b | | | Assert.cs:84:10:84:12 | Exceptional Exit | Assert.cs:84:10:84:12 | Exit | | | Assert.cs:84:10:84:12 | Normal Exit | Assert.cs:84:10:84:12 | Exit | | +| Assert.cs:84:19:84:19 | b | Assert.cs:85:5:129:5 | {...} | | | Assert.cs:85:5:129:5 | After {...} | Assert.cs:84:10:84:12 | Normal Exit | | | Assert.cs:85:5:129:5 | {...} | Assert.cs:86:9:86:33 | ... ...; | | | Assert.cs:86:9:86:33 | ... ...; | Assert.cs:86:16:86:32 | Before String s = ... | | @@ -1474,12 +1498,18 @@ | Assert.cs:128:27:128:34 | After access to property Length | Assert.cs:128:9:128:35 | call to method WriteLine | | | Assert.cs:128:27:128:34 | Before access to property Length | Assert.cs:128:27:128:27 | access to local variable s | | | Assert.cs:128:27:128:34 | access to property Length | Assert.cs:128:27:128:34 | After access to property Length | | -| Assert.cs:131:18:131:32 | Entry | Assert.cs:135:5:136:5 | {...} | | +| Assert.cs:131:18:131:32 | Entry | Assert.cs:132:74:132:83 | condition1 | | | Assert.cs:131:18:131:32 | Normal Exit | Assert.cs:131:18:131:32 | Exit | | +| Assert.cs:132:74:132:83 | condition1 | Assert.cs:133:73:133:82 | condition2 | | +| Assert.cs:133:73:133:82 | condition2 | Assert.cs:134:17:134:28 | nonCondition | | +| Assert.cs:134:17:134:28 | nonCondition | Assert.cs:135:5:136:5 | {...} | | | Assert.cs:135:5:136:5 | {...} | Assert.cs:131:18:131:32 | Normal Exit | | -| Assert.cs:138:10:138:12 | Entry | Assert.cs:139:5:142:5 | {...} | | +| Assert.cs:138:10:138:12 | Entry | Assert.cs:138:19:138:20 | b1 | | | Assert.cs:138:10:138:12 | Exceptional Exit | Assert.cs:138:10:138:12 | Exit | | | Assert.cs:138:10:138:12 | Normal Exit | Assert.cs:138:10:138:12 | Exit | | +| Assert.cs:138:19:138:20 | b1 | Assert.cs:138:28:138:29 | b2 | | +| Assert.cs:138:28:138:29 | b2 | Assert.cs:138:37:138:38 | b3 | | +| Assert.cs:138:37:138:38 | b3 | Assert.cs:139:5:142:5 | {...} | | | Assert.cs:139:5:142:5 | {...} | Assert.cs:140:9:140:36 | ...; | | | Assert.cs:140:9:140:35 | After call to method AssertTrueFalse | Assert.cs:140:9:140:36 | After ...; | | | Assert.cs:140:9:140:35 | Before call to method AssertTrueFalse | Assert.cs:140:9:140:35 | this access | | @@ -1564,17 +1594,22 @@ | Assignments.cs:14:9:14:36 | ...; | Assignments.cs:14:9:14:35 | Before ... += ... | | | Assignments.cs:14:9:14:36 | After ...; | Assignments.cs:4:5:15:5 | After {...} | | | Assignments.cs:14:18:14:35 | (...) => ... | Assignments.cs:14:9:14:35 | ... += ... | | -| Assignments.cs:14:18:14:35 | Entry | Assignments.cs:14:33:14:35 | {...} | | +| Assignments.cs:14:18:14:35 | Entry | Assignments.cs:14:19:14:24 | sender | | | Assignments.cs:14:18:14:35 | Normal Exit | Assignments.cs:14:18:14:35 | Exit | | +| Assignments.cs:14:19:14:24 | sender | Assignments.cs:14:27:14:27 | e | | +| Assignments.cs:14:27:14:27 | e | Assignments.cs:14:33:14:35 | {...} | | | Assignments.cs:14:33:14:35 | {...} | Assignments.cs:14:18:14:35 | Normal Exit | | -| Assignments.cs:17:40:17:40 | Entry | Assignments.cs:18:5:20:5 | {...} | | +| Assignments.cs:17:40:17:40 | Entry | Assignments.cs:17:54:17:54 | x | | | Assignments.cs:17:40:17:40 | Normal Exit | Assignments.cs:17:40:17:40 | Exit | | +| Assignments.cs:17:54:17:54 | x | Assignments.cs:17:69:17:69 | y | | +| Assignments.cs:17:69:17:69 | y | Assignments.cs:18:5:20:5 | {...} | | | Assignments.cs:18:5:20:5 | {...} | Assignments.cs:19:9:19:17 | Before return ...; | | | Assignments.cs:19:9:19:17 | Before return ...; | Assignments.cs:19:16:19:16 | access to parameter x | | | Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:17:40:17:40 | Normal Exit | return | | Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:19:9:19:17 | return ...; | | -| Assignments.cs:27:10:27:23 | Entry | Assignments.cs:28:5:30:5 | {...} | | +| Assignments.cs:27:10:27:23 | Entry | Assignments.cs:27:33:27:33 | x | | | Assignments.cs:27:10:27:23 | Normal Exit | Assignments.cs:27:10:27:23 | Exit | | +| Assignments.cs:27:33:27:33 | x | Assignments.cs:28:5:30:5 | {...} | | | Assignments.cs:28:5:30:5 | After {...} | Assignments.cs:27:10:27:23 | Normal Exit | | | Assignments.cs:28:5:30:5 | {...} | Assignments.cs:29:9:29:15 | ...; | | | Assignments.cs:29:9:29:9 | access to parameter x | Assignments.cs:29:13:29:14 | 42 | | @@ -1584,8 +1619,11 @@ | Assignments.cs:29:9:29:15 | ...; | Assignments.cs:29:9:29:14 | Before ... = ... | | | Assignments.cs:29:9:29:15 | After ...; | Assignments.cs:28:5:30:5 | After {...} | | | Assignments.cs:29:13:29:14 | 42 | Assignments.cs:29:9:29:14 | ... = ... | | -| Assignments.cs:32:10:32:22 | Entry | Assignments.cs:33:5:36:5 | {...} | | +| Assignments.cs:32:10:32:22 | Entry | Assignments.cs:32:32:32:32 | x | | | Assignments.cs:32:10:32:22 | Normal Exit | Assignments.cs:32:10:32:22 | Exit | | +| Assignments.cs:32:32:32:32 | x | Assignments.cs:32:42:32:42 | o | | +| Assignments.cs:32:42:32:42 | o | Assignments.cs:32:56:32:56 | y | | +| Assignments.cs:32:56:32:56 | y | Assignments.cs:33:5:36:5 | {...} | | | Assignments.cs:33:5:36:5 | After {...} | Assignments.cs:32:10:32:22 | Normal Exit | | | Assignments.cs:33:5:36:5 | {...} | Assignments.cs:34:9:34:15 | ...; | | | Assignments.cs:34:9:34:9 | access to parameter x | Assignments.cs:34:13:34:14 | 42 | | @@ -1663,8 +1701,9 @@ | BreakInTry.cs:1:7:1:16 | call to method | BreakInTry.cs:1:7:1:16 | After call to method | | | BreakInTry.cs:1:7:1:16 | this access | BreakInTry.cs:1:7:1:16 | call to method | | | BreakInTry.cs:1:7:1:16 | {...} | BreakInTry.cs:1:7:1:16 | Normal Exit | | -| BreakInTry.cs:3:10:3:11 | Entry | BreakInTry.cs:4:5:18:5 | {...} | | +| BreakInTry.cs:3:10:3:11 | Entry | BreakInTry.cs:3:22:3:25 | args | | | BreakInTry.cs:3:10:3:11 | Normal Exit | BreakInTry.cs:3:10:3:11 | Exit | | +| BreakInTry.cs:3:22:3:25 | args | BreakInTry.cs:4:5:18:5 | {...} | | | BreakInTry.cs:4:5:18:5 | After {...} | BreakInTry.cs:3:10:3:11 | Normal Exit | | | BreakInTry.cs:4:5:18:5 | {...} | BreakInTry.cs:5:9:17:9 | try {...} ... | | | BreakInTry.cs:5:9:17:9 | After try {...} ... | BreakInTry.cs:4:5:18:5 | After {...} | | @@ -1705,8 +1744,9 @@ | BreakInTry.cs:15:17:15:28 | Before ... == ... | BreakInTry.cs:15:17:15:20 | access to parameter args | | | BreakInTry.cs:15:25:15:28 | null | BreakInTry.cs:15:17:15:28 | ... == ... | | | BreakInTry.cs:16:17:16:17 | ; | BreakInTry.cs:15:13:16:17 | After if (...) ... | | -| BreakInTry.cs:20:10:20:11 | Entry | BreakInTry.cs:21:5:36:5 | {...} | | +| BreakInTry.cs:20:10:20:11 | Entry | BreakInTry.cs:20:22:20:25 | args | | | BreakInTry.cs:20:10:20:11 | Normal Exit | BreakInTry.cs:20:10:20:11 | Exit | | +| BreakInTry.cs:20:22:20:25 | args | BreakInTry.cs:21:5:36:5 | {...} | | | BreakInTry.cs:21:5:36:5 | After {...} | BreakInTry.cs:20:10:20:11 | Normal Exit | | | BreakInTry.cs:21:5:36:5 | {...} | BreakInTry.cs:22:9:34:9 | foreach (... ... in ...) ... | | | BreakInTry.cs:22:9:34:9 | After foreach (... ... in ...) ... | BreakInTry.cs:35:7:35:7 | ; | | @@ -1749,8 +1789,9 @@ | BreakInTry.cs:31:29:31:32 | null | BreakInTry.cs:31:21:31:32 | ... == ... | | | BreakInTry.cs:32:21:32:21 | ; | BreakInTry.cs:31:17:32:21 | After if (...) ... | | | BreakInTry.cs:35:7:35:7 | ; | BreakInTry.cs:21:5:36:5 | After {...} | | -| BreakInTry.cs:38:10:38:11 | Entry | BreakInTry.cs:39:5:54:5 | {...} | | +| BreakInTry.cs:38:10:38:11 | Entry | BreakInTry.cs:38:22:38:25 | args | | | BreakInTry.cs:38:10:38:11 | Normal Exit | BreakInTry.cs:38:10:38:11 | Exit | | +| BreakInTry.cs:38:22:38:25 | args | BreakInTry.cs:39:5:54:5 | {...} | | | BreakInTry.cs:39:5:54:5 | After {...} | BreakInTry.cs:38:10:38:11 | Normal Exit | | | BreakInTry.cs:39:5:54:5 | {...} | BreakInTry.cs:40:9:52:9 | try {...} ... | | | BreakInTry.cs:40:9:52:9 | After try {...} ... | BreakInTry.cs:53:7:53:7 | ; | | @@ -1794,8 +1835,9 @@ | BreakInTry.cs:50:21:50:26 | Before break; | BreakInTry.cs:50:21:50:26 | break; | | | BreakInTry.cs:50:21:50:26 | break; | BreakInTry.cs:47:13:51:13 | After foreach (... ... in ...) ... | break | | BreakInTry.cs:53:7:53:7 | ; | BreakInTry.cs:39:5:54:5 | After {...} | | -| BreakInTry.cs:56:10:56:11 | Entry | BreakInTry.cs:57:5:71:5 | {...} | | +| BreakInTry.cs:56:10:56:11 | Entry | BreakInTry.cs:56:22:56:25 | args | | | BreakInTry.cs:56:10:56:11 | Normal Exit | BreakInTry.cs:56:10:56:11 | Exit | | +| BreakInTry.cs:56:22:56:25 | args | BreakInTry.cs:57:5:71:5 | {...} | | | BreakInTry.cs:57:5:71:5 | After {...} | BreakInTry.cs:56:10:56:11 | Normal Exit | | | BreakInTry.cs:57:5:71:5 | {...} | BreakInTry.cs:58:9:70:9 | try {...} ... | | | BreakInTry.cs:58:9:70:9 | After try {...} ... | BreakInTry.cs:57:5:71:5 | After {...} | | @@ -1866,8 +1908,9 @@ | CompileTimeOperators.cs:17:9:17:27 | Before return ...; | CompileTimeOperators.cs:17:16:17:26 | typeof(...) | | | CompileTimeOperators.cs:17:9:17:27 | return ...; | CompileTimeOperators.cs:15:10:15:15 | Normal Exit | return | | CompileTimeOperators.cs:17:16:17:26 | typeof(...) | CompileTimeOperators.cs:17:9:17:27 | return ...; | | -| CompileTimeOperators.cs:20:12:20:17 | Entry | CompileTimeOperators.cs:21:5:23:5 | {...} | | +| CompileTimeOperators.cs:20:12:20:17 | Entry | CompileTimeOperators.cs:20:23:20:23 | i | | | CompileTimeOperators.cs:20:12:20:17 | Normal Exit | CompileTimeOperators.cs:20:12:20:17 | Exit | | +| CompileTimeOperators.cs:20:23:20:23 | i | CompileTimeOperators.cs:21:5:23:5 | {...} | | | CompileTimeOperators.cs:21:5:23:5 | {...} | CompileTimeOperators.cs:22:9:22:25 | Before return ...; | | | CompileTimeOperators.cs:22:9:22:25 | Before return ...; | CompileTimeOperators.cs:22:16:22:24 | nameof(...) | | | CompileTimeOperators.cs:22:9:22:25 | return ...; | CompileTimeOperators.cs:20:12:20:17 | Normal Exit | return | @@ -1925,8 +1968,9 @@ | ConditionalAccess.cs:1:7:1:23 | call to method | ConditionalAccess.cs:1:7:1:23 | After call to method | | | ConditionalAccess.cs:1:7:1:23 | this access | ConditionalAccess.cs:1:7:1:23 | call to method | | | ConditionalAccess.cs:1:7:1:23 | {...} | ConditionalAccess.cs:1:7:1:23 | Normal Exit | | -| ConditionalAccess.cs:3:12:3:13 | Entry | ConditionalAccess.cs:3:26:3:49 | Before call to method ToLower | | +| ConditionalAccess.cs:3:12:3:13 | Entry | ConditionalAccess.cs:3:20:3:20 | i | | | ConditionalAccess.cs:3:12:3:13 | Normal Exit | ConditionalAccess.cs:3:12:3:13 | Exit | | +| ConditionalAccess.cs:3:20:3:20 | i | ConditionalAccess.cs:3:26:3:49 | Before call to method ToLower | | | ConditionalAccess.cs:3:26:3:26 | After access to parameter i [non-null] | ConditionalAccess.cs:3:26:3:38 | call to method ToString | | | ConditionalAccess.cs:3:26:3:26 | After access to parameter i [null] | ConditionalAccess.cs:3:26:3:38 | After call to method ToString [null] | null | | ConditionalAccess.cs:3:26:3:26 | access to parameter i | ConditionalAccess.cs:3:26:3:26 | After access to parameter i [non-null] | non-null | @@ -1939,8 +1983,9 @@ | ConditionalAccess.cs:3:26:3:49 | After call to method ToLower | ConditionalAccess.cs:3:12:3:13 | Normal Exit | | | ConditionalAccess.cs:3:26:3:49 | Before call to method ToLower | ConditionalAccess.cs:3:26:3:38 | Before call to method ToString | | | ConditionalAccess.cs:3:26:3:49 | call to method ToLower | ConditionalAccess.cs:3:26:3:49 | After call to method ToLower | | -| ConditionalAccess.cs:5:10:5:11 | Entry | ConditionalAccess.cs:5:26:5:34 | Before access to property Length | | +| ConditionalAccess.cs:5:10:5:11 | Entry | ConditionalAccess.cs:5:20:5:20 | s | | | ConditionalAccess.cs:5:10:5:11 | Normal Exit | ConditionalAccess.cs:5:10:5:11 | Exit | | +| ConditionalAccess.cs:5:20:5:20 | s | ConditionalAccess.cs:5:26:5:34 | Before access to property Length | | | ConditionalAccess.cs:5:26:5:26 | After access to parameter s [non-null] | ConditionalAccess.cs:5:26:5:34 | access to property Length | | | ConditionalAccess.cs:5:26:5:26 | After access to parameter s [null] | ConditionalAccess.cs:5:26:5:34 | After access to property Length | | | ConditionalAccess.cs:5:26:5:26 | access to parameter s | ConditionalAccess.cs:5:26:5:26 | After access to parameter s [non-null] | non-null | @@ -1948,8 +1993,10 @@ | ConditionalAccess.cs:5:26:5:34 | After access to property Length | ConditionalAccess.cs:5:10:5:11 | Normal Exit | | | ConditionalAccess.cs:5:26:5:34 | Before access to property Length | ConditionalAccess.cs:5:26:5:26 | access to parameter s | | | ConditionalAccess.cs:5:26:5:34 | access to property Length | ConditionalAccess.cs:5:26:5:34 | After access to property Length | | -| ConditionalAccess.cs:7:10:7:11 | Entry | ConditionalAccess.cs:7:38:7:55 | Before access to property Length | | +| ConditionalAccess.cs:7:10:7:11 | Entry | ConditionalAccess.cs:7:20:7:21 | s1 | | | ConditionalAccess.cs:7:10:7:11 | Normal Exit | ConditionalAccess.cs:7:10:7:11 | Exit | | +| ConditionalAccess.cs:7:20:7:21 | s1 | ConditionalAccess.cs:7:31:7:32 | s2 | | +| ConditionalAccess.cs:7:31:7:32 | s2 | ConditionalAccess.cs:7:38:7:55 | Before access to property Length | | | ConditionalAccess.cs:7:38:7:55 | After access to property Length | ConditionalAccess.cs:7:10:7:11 | Normal Exit | | | ConditionalAccess.cs:7:38:7:55 | Before access to property Length | ConditionalAccess.cs:7:39:7:46 | ... ?? ... | | | ConditionalAccess.cs:7:38:7:55 | access to property Length | ConditionalAccess.cs:7:38:7:55 | After access to property Length | | @@ -1964,8 +2011,9 @@ | ConditionalAccess.cs:7:45:7:46 | After access to parameter s2 [null] | ConditionalAccess.cs:7:39:7:46 | After ... ?? ... [null] | null | | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:45:7:46 | After access to parameter s2 [non-null] | non-null | | ConditionalAccess.cs:7:45:7:46 | access to parameter s2 | ConditionalAccess.cs:7:45:7:46 | After access to parameter s2 [null] | null | -| ConditionalAccess.cs:9:9:9:10 | Entry | ConditionalAccess.cs:9:25:9:38 | ... ?? ... | | +| ConditionalAccess.cs:9:9:9:10 | Entry | ConditionalAccess.cs:9:19:9:19 | s | | | ConditionalAccess.cs:9:9:9:10 | Normal Exit | ConditionalAccess.cs:9:9:9:10 | Exit | | +| ConditionalAccess.cs:9:19:9:19 | s | ConditionalAccess.cs:9:25:9:38 | ... ?? ... | | | ConditionalAccess.cs:9:25:9:25 | After access to parameter s [non-null] | ConditionalAccess.cs:9:25:9:33 | access to property Length | | | ConditionalAccess.cs:9:25:9:25 | After access to parameter s [null] | ConditionalAccess.cs:9:25:9:33 | After access to property Length [null] | null | | ConditionalAccess.cs:9:25:9:25 | access to parameter s | ConditionalAccess.cs:9:25:9:25 | After access to parameter s [non-null] | non-null | @@ -1978,8 +2026,9 @@ | ConditionalAccess.cs:9:25:9:38 | ... ?? ... | ConditionalAccess.cs:9:25:9:33 | Before access to property Length | | | ConditionalAccess.cs:9:25:9:38 | After ... ?? ... | ConditionalAccess.cs:9:9:9:10 | Normal Exit | | | ConditionalAccess.cs:9:38:9:38 | 0 | ConditionalAccess.cs:9:25:9:38 | After ... ?? ... | | -| ConditionalAccess.cs:11:9:11:10 | Entry | ConditionalAccess.cs:12:5:17:5 | {...} | | +| ConditionalAccess.cs:11:9:11:10 | Entry | ConditionalAccess.cs:11:19:11:19 | s | | | ConditionalAccess.cs:11:9:11:10 | Normal Exit | ConditionalAccess.cs:11:9:11:10 | Exit | | +| ConditionalAccess.cs:11:19:11:19 | s | ConditionalAccess.cs:12:5:17:5 | {...} | | | ConditionalAccess.cs:12:5:17:5 | {...} | ConditionalAccess.cs:13:9:16:21 | if (...) ... | | | ConditionalAccess.cs:13:9:16:21 | if (...) ... | ConditionalAccess.cs:13:13:13:25 | Before ... > ... | | | ConditionalAccess.cs:13:13:13:13 | After access to parameter s [non-null] | ConditionalAccess.cs:13:13:13:21 | access to property Length | | @@ -2004,8 +2053,10 @@ | ConditionalAccess.cs:16:13:16:21 | Before return ...; | ConditionalAccess.cs:16:20:16:20 | 1 | | | ConditionalAccess.cs:16:13:16:21 | return ...; | ConditionalAccess.cs:11:9:11:10 | Normal Exit | return | | ConditionalAccess.cs:16:20:16:20 | 1 | ConditionalAccess.cs:16:13:16:21 | return ...; | | -| ConditionalAccess.cs:19:12:19:13 | Entry | ConditionalAccess.cs:19:40:19:60 | Before call to method CommaJoinWith | | +| ConditionalAccess.cs:19:12:19:13 | Entry | ConditionalAccess.cs:19:22:19:23 | s1 | | | ConditionalAccess.cs:19:12:19:13 | Normal Exit | ConditionalAccess.cs:19:12:19:13 | Exit | | +| ConditionalAccess.cs:19:22:19:23 | s1 | ConditionalAccess.cs:19:33:19:34 | s2 | | +| ConditionalAccess.cs:19:33:19:34 | s2 | ConditionalAccess.cs:19:40:19:60 | Before call to method CommaJoinWith | | | ConditionalAccess.cs:19:40:19:41 | After access to parameter s1 [non-null] | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | | | ConditionalAccess.cs:19:40:19:41 | After access to parameter s1 [null] | ConditionalAccess.cs:19:40:19:60 | After call to method CommaJoinWith | | | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:40:19:41 | After access to parameter s1 [non-null] | non-null | @@ -2014,8 +2065,9 @@ | ConditionalAccess.cs:19:40:19:60 | Before call to method CommaJoinWith | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | | | ConditionalAccess.cs:19:40:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:40:19:60 | After call to method CommaJoinWith | | | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:40:19:60 | call to method CommaJoinWith | | -| ConditionalAccess.cs:21:10:21:11 | Entry | ConditionalAccess.cs:22:5:26:5 | {...} | | +| ConditionalAccess.cs:21:10:21:11 | Entry | ConditionalAccess.cs:21:17:21:17 | i | | | ConditionalAccess.cs:21:10:21:11 | Normal Exit | ConditionalAccess.cs:21:10:21:11 | Exit | | +| ConditionalAccess.cs:21:17:21:17 | i | ConditionalAccess.cs:22:5:26:5 | {...} | | | ConditionalAccess.cs:22:5:26:5 | After {...} | ConditionalAccess.cs:21:10:21:11 | Normal Exit | | | ConditionalAccess.cs:22:5:26:5 | {...} | ConditionalAccess.cs:23:9:23:39 | ... ...; | | | ConditionalAccess.cs:23:9:23:39 | ... ...; | ConditionalAccess.cs:23:13:23:38 | Before Nullable j = ... | | @@ -2062,15 +2114,18 @@ | ConditionalAccess.cs:25:13:25:32 | Before call to method CommaJoinWith | ConditionalAccess.cs:25:13:25:14 | "" | | | ConditionalAccess.cs:25:13:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:13:25:32 | After call to method CommaJoinWith | | | ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:13:25:32 | call to method CommaJoinWith | | -| ConditionalAccess.cs:30:10:30:12 | Entry | ConditionalAccess.cs:30:28:30:32 | Before ... = ... | | +| ConditionalAccess.cs:30:10:30:12 | Entry | ConditionalAccess.cs:30:22:30:22 | i | | | ConditionalAccess.cs:30:10:30:12 | Normal Exit | ConditionalAccess.cs:30:10:30:12 | Exit | | +| ConditionalAccess.cs:30:22:30:22 | i | ConditionalAccess.cs:30:28:30:32 | Before ... = ... | | | ConditionalAccess.cs:30:28:30:28 | access to parameter i | ConditionalAccess.cs:30:32:30:32 | 0 | | | ConditionalAccess.cs:30:28:30:32 | ... = ... | ConditionalAccess.cs:30:28:30:32 | After ... = ... | | | ConditionalAccess.cs:30:28:30:32 | After ... = ... | ConditionalAccess.cs:30:10:30:12 | Normal Exit | | | ConditionalAccess.cs:30:28:30:32 | Before ... = ... | ConditionalAccess.cs:30:28:30:28 | access to parameter i | | | ConditionalAccess.cs:30:32:30:32 | 0 | ConditionalAccess.cs:30:28:30:32 | ... = ... | | -| ConditionalAccess.cs:32:10:32:11 | Entry | ConditionalAccess.cs:33:5:36:5 | {...} | | +| ConditionalAccess.cs:32:10:32:11 | Entry | ConditionalAccess.cs:32:18:32:18 | b | | | ConditionalAccess.cs:32:10:32:11 | Normal Exit | ConditionalAccess.cs:32:10:32:11 | Exit | | +| ConditionalAccess.cs:32:18:32:18 | b | ConditionalAccess.cs:32:29:32:29 | i | | +| ConditionalAccess.cs:32:29:32:29 | i | ConditionalAccess.cs:33:5:36:5 | {...} | | | ConditionalAccess.cs:33:5:36:5 | After {...} | ConditionalAccess.cs:32:10:32:11 | Normal Exit | | | ConditionalAccess.cs:33:5:36:5 | {...} | ConditionalAccess.cs:34:9:34:14 | ...; | | | ConditionalAccess.cs:34:9:34:9 | access to parameter i | ConditionalAccess.cs:34:13:34:13 | 0 | | @@ -2092,17 +2147,21 @@ | ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:9:35:24 | Before call to method Out | | | ConditionalAccess.cs:35:9:35:25 | After ...; | ConditionalAccess.cs:33:5:36:5 | After {...} | | | ConditionalAccess.cs:35:23:35:23 | access to parameter i | ConditionalAccess.cs:35:9:35:24 | call to method Out | | -| ConditionalAccess.cs:42:9:42:11 | Entry | ConditionalAccess.cs:42:13:42:28 | {...} | | +| ConditionalAccess.cs:40:21:40:25 | index | ConditionalAccess.cs:42:13:42:28 | {...} | | +| ConditionalAccess.cs:40:21:40:25 | index | ConditionalAccess.cs:43:9:43:11 | value | | +| ConditionalAccess.cs:42:9:42:11 | Entry | ConditionalAccess.cs:40:21:40:25 | index | | | ConditionalAccess.cs:42:9:42:11 | Normal Exit | ConditionalAccess.cs:42:9:42:11 | Exit | | | ConditionalAccess.cs:42:13:42:28 | {...} | ConditionalAccess.cs:42:15:42:26 | Before return ...; | | | ConditionalAccess.cs:42:15:42:26 | Before return ...; | ConditionalAccess.cs:42:22:42:25 | null | | | ConditionalAccess.cs:42:15:42:26 | return ...; | ConditionalAccess.cs:42:9:42:11 | Normal Exit | return | | ConditionalAccess.cs:42:22:42:25 | null | ConditionalAccess.cs:42:15:42:26 | return ...; | | -| ConditionalAccess.cs:43:9:43:11 | Entry | ConditionalAccess.cs:43:13:43:15 | {...} | | +| ConditionalAccess.cs:43:9:43:11 | Entry | ConditionalAccess.cs:40:21:40:25 | index | | | ConditionalAccess.cs:43:9:43:11 | Normal Exit | ConditionalAccess.cs:43:9:43:11 | Exit | | +| ConditionalAccess.cs:43:9:43:11 | value | ConditionalAccess.cs:43:13:43:15 | {...} | | | ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:9:43:11 | Normal Exit | | -| ConditionalAccess.cs:46:10:46:11 | Entry | ConditionalAccess.cs:47:5:55:5 | {...} | | +| ConditionalAccess.cs:46:10:46:11 | Entry | ConditionalAccess.cs:46:31:46:32 | ca | | | ConditionalAccess.cs:46:10:46:11 | Normal Exit | ConditionalAccess.cs:46:10:46:11 | Exit | | +| ConditionalAccess.cs:46:31:46:32 | ca | ConditionalAccess.cs:47:5:55:5 | {...} | | | ConditionalAccess.cs:47:5:55:5 | After {...} | ConditionalAccess.cs:46:10:46:11 | Normal Exit | | | ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:48:9:48:26 | ...; | | | ConditionalAccess.cs:48:9:48:10 | After access to parameter ca [non-null] | ConditionalAccess.cs:48:9:48:20 | access to field IntField | | @@ -2207,8 +2266,10 @@ | ConditionalAccess.cs:54:12:54:29 | After ... += ... | ConditionalAccess.cs:54:9:54:30 | After ...; | | | ConditionalAccess.cs:54:12:54:29 | Before ... += ... | ConditionalAccess.cs:54:9:54:22 | Before access to property StringProp | | | ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:12:54:29 | ... += ... | | -| ConditionalAccess.cs:60:26:60:38 | Entry | ConditionalAccess.cs:60:70:60:83 | Before ... + ... | | +| ConditionalAccess.cs:60:26:60:38 | Entry | ConditionalAccess.cs:60:52:60:53 | s1 | | | ConditionalAccess.cs:60:26:60:38 | Normal Exit | ConditionalAccess.cs:60:26:60:38 | Exit | | +| ConditionalAccess.cs:60:52:60:53 | s1 | ConditionalAccess.cs:60:63:60:64 | s2 | | +| ConditionalAccess.cs:60:63:60:64 | s2 | ConditionalAccess.cs:60:70:60:83 | Before ... + ... | | | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:75:60:78 | ", " | | | ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:70:60:78 | After ... + ... | | | ConditionalAccess.cs:60:70:60:78 | After ... + ... | ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | | @@ -2228,8 +2289,10 @@ | Conditions.cs:1:7:1:16 | call to method | Conditions.cs:1:7:1:16 | After call to method | | | Conditions.cs:1:7:1:16 | this access | Conditions.cs:1:7:1:16 | call to method | | | Conditions.cs:1:7:1:16 | {...} | Conditions.cs:1:7:1:16 | Normal Exit | | -| Conditions.cs:3:10:3:19 | Entry | Conditions.cs:4:5:9:5 | {...} | | +| Conditions.cs:3:10:3:19 | Entry | Conditions.cs:3:26:3:28 | inc | | | Conditions.cs:3:10:3:19 | Normal Exit | Conditions.cs:3:10:3:19 | Exit | | +| Conditions.cs:3:26:3:28 | inc | Conditions.cs:3:39:3:39 | x | | +| Conditions.cs:3:39:3:39 | x | Conditions.cs:4:5:9:5 | {...} | | | Conditions.cs:4:5:9:5 | After {...} | Conditions.cs:3:10:3:19 | Normal Exit | | | Conditions.cs:4:5:9:5 | {...} | Conditions.cs:5:9:6:16 | if (...) ... | | | Conditions.cs:5:9:6:16 | After if (...) ... | Conditions.cs:7:9:8:16 | if (...) ... | | @@ -2259,8 +2322,9 @@ | Conditions.cs:8:13:8:15 | Before ...-- | Conditions.cs:8:13:8:13 | access to parameter x | | | Conditions.cs:8:13:8:16 | ...; | Conditions.cs:8:13:8:15 | Before ...-- | | | Conditions.cs:8:13:8:16 | After ...; | Conditions.cs:7:9:8:16 | After if (...) ... | | -| Conditions.cs:11:9:11:10 | Entry | Conditions.cs:12:5:20:5 | {...} | | +| Conditions.cs:11:9:11:10 | Entry | Conditions.cs:11:17:11:17 | b | | | Conditions.cs:11:9:11:10 | Normal Exit | Conditions.cs:11:9:11:10 | Exit | | +| Conditions.cs:11:17:11:17 | b | Conditions.cs:12:5:20:5 | {...} | | | Conditions.cs:12:5:20:5 | {...} | Conditions.cs:13:9:13:18 | ... ...; | | | Conditions.cs:13:9:13:18 | ... ...; | Conditions.cs:13:13:13:17 | Before Int32 x = ... | | | Conditions.cs:13:9:13:18 | After ... ...; | Conditions.cs:14:9:15:16 | if (...) ... | | @@ -2308,8 +2372,10 @@ | Conditions.cs:19:9:19:17 | Before return ...; | Conditions.cs:19:16:19:16 | access to local variable x | | | Conditions.cs:19:9:19:17 | return ...; | Conditions.cs:11:9:11:10 | Normal Exit | return | | Conditions.cs:19:16:19:16 | access to local variable x | Conditions.cs:19:9:19:17 | return ...; | | -| Conditions.cs:22:9:22:10 | Entry | Conditions.cs:23:5:31:5 | {...} | | +| Conditions.cs:22:9:22:10 | Entry | Conditions.cs:22:17:22:18 | b1 | | | Conditions.cs:22:9:22:10 | Normal Exit | Conditions.cs:22:9:22:10 | Exit | | +| Conditions.cs:22:17:22:18 | b1 | Conditions.cs:22:26:22:27 | b2 | | +| Conditions.cs:22:26:22:27 | b2 | Conditions.cs:23:5:31:5 | {...} | | | Conditions.cs:23:5:31:5 | {...} | Conditions.cs:24:9:24:18 | ... ...; | | | Conditions.cs:24:9:24:18 | ... ...; | Conditions.cs:24:13:24:17 | Before Int32 x = ... | | | Conditions.cs:24:9:24:18 | After ... ...; | Conditions.cs:25:9:27:20 | if (...) ... | | @@ -2351,8 +2417,9 @@ | Conditions.cs:30:9:30:17 | Before return ...; | Conditions.cs:30:16:30:16 | access to local variable x | | | Conditions.cs:30:9:30:17 | return ...; | Conditions.cs:22:9:22:10 | Normal Exit | return | | Conditions.cs:30:16:30:16 | access to local variable x | Conditions.cs:30:9:30:17 | return ...; | | -| Conditions.cs:33:9:33:10 | Entry | Conditions.cs:34:5:44:5 | {...} | | +| Conditions.cs:33:9:33:10 | Entry | Conditions.cs:33:17:33:18 | b1 | | | Conditions.cs:33:9:33:10 | Normal Exit | Conditions.cs:33:9:33:10 | Exit | | +| Conditions.cs:33:17:33:18 | b1 | Conditions.cs:34:5:44:5 | {...} | | | Conditions.cs:34:5:44:5 | {...} | Conditions.cs:35:9:35:18 | ... ...; | | | Conditions.cs:35:9:35:18 | ... ...; | Conditions.cs:35:13:35:17 | Before Int32 x = ... | | | Conditions.cs:35:9:35:18 | After ... ...; | Conditions.cs:36:9:36:23 | ... ...; | | @@ -2408,8 +2475,10 @@ | Conditions.cs:43:9:43:17 | Before return ...; | Conditions.cs:43:16:43:16 | access to local variable x | | | Conditions.cs:43:9:43:17 | return ...; | Conditions.cs:33:9:33:10 | Normal Exit | return | | Conditions.cs:43:16:43:16 | access to local variable x | Conditions.cs:43:9:43:17 | return ...; | | -| Conditions.cs:46:9:46:10 | Entry | Conditions.cs:47:5:55:5 | {...} | | +| Conditions.cs:46:9:46:10 | Entry | Conditions.cs:46:17:46:17 | b | | | Conditions.cs:46:9:46:10 | Normal Exit | Conditions.cs:46:9:46:10 | Exit | | +| Conditions.cs:46:17:46:17 | b | Conditions.cs:46:24:46:24 | x | | +| Conditions.cs:46:24:46:24 | x | Conditions.cs:47:5:55:5 | {...} | | | Conditions.cs:47:5:55:5 | {...} | Conditions.cs:48:9:48:18 | ... ...; | | | Conditions.cs:48:9:48:18 | ... ...; | Conditions.cs:48:13:48:17 | Before Int32 y = ... | | | Conditions.cs:48:9:48:18 | After ... ...; | Conditions.cs:49:9:53:9 | while (...) ... | | @@ -2448,8 +2517,10 @@ | Conditions.cs:54:9:54:17 | Before return ...; | Conditions.cs:54:16:54:16 | access to local variable y | | | Conditions.cs:54:9:54:17 | return ...; | Conditions.cs:46:9:46:10 | Normal Exit | return | | Conditions.cs:54:16:54:16 | access to local variable y | Conditions.cs:54:9:54:17 | return ...; | | -| Conditions.cs:57:9:57:10 | Entry | Conditions.cs:58:5:68:5 | {...} | | +| Conditions.cs:57:9:57:10 | Entry | Conditions.cs:57:17:57:17 | b | | | Conditions.cs:57:9:57:10 | Normal Exit | Conditions.cs:57:9:57:10 | Exit | | +| Conditions.cs:57:17:57:17 | b | Conditions.cs:57:24:57:24 | x | | +| Conditions.cs:57:24:57:24 | x | Conditions.cs:58:5:68:5 | {...} | | | Conditions.cs:58:5:68:5 | {...} | Conditions.cs:59:9:59:18 | ... ...; | | | Conditions.cs:59:9:59:18 | ... ...; | Conditions.cs:59:13:59:17 | Before Int32 y = ... | | | Conditions.cs:59:9:59:18 | After ... ...; | Conditions.cs:60:9:64:9 | while (...) ... | | @@ -2500,8 +2571,9 @@ | Conditions.cs:67:9:67:17 | Before return ...; | Conditions.cs:67:16:67:16 | access to local variable y | | | Conditions.cs:67:9:67:17 | return ...; | Conditions.cs:57:9:57:10 | Normal Exit | return | | Conditions.cs:67:16:67:16 | access to local variable y | Conditions.cs:67:9:67:17 | return ...; | | -| Conditions.cs:70:9:70:10 | Entry | Conditions.cs:71:5:84:5 | {...} | | +| Conditions.cs:70:9:70:10 | Entry | Conditions.cs:70:21:70:22 | ss | | | Conditions.cs:70:9:70:10 | Normal Exit | Conditions.cs:70:9:70:10 | Exit | | +| Conditions.cs:70:21:70:22 | ss | Conditions.cs:71:5:84:5 | {...} | | | Conditions.cs:71:5:84:5 | {...} | Conditions.cs:72:9:72:30 | ... ...; | | | Conditions.cs:72:9:72:30 | ... ...; | Conditions.cs:72:13:72:29 | Before Boolean b = ... | | | Conditions.cs:72:9:72:30 | After ... ...; | Conditions.cs:73:9:73:18 | ... ...; | | @@ -2578,8 +2650,9 @@ | Conditions.cs:83:9:83:17 | Before return ...; | Conditions.cs:83:16:83:16 | access to local variable x | | | Conditions.cs:83:9:83:17 | return ...; | Conditions.cs:70:9:70:10 | Normal Exit | return | | Conditions.cs:83:16:83:16 | access to local variable x | Conditions.cs:83:9:83:17 | return ...; | | -| Conditions.cs:86:9:86:10 | Entry | Conditions.cs:87:5:100:5 | {...} | | +| Conditions.cs:86:9:86:10 | Entry | Conditions.cs:86:21:86:22 | ss | | | Conditions.cs:86:9:86:10 | Normal Exit | Conditions.cs:86:9:86:10 | Exit | | +| Conditions.cs:86:21:86:22 | ss | Conditions.cs:87:5:100:5 | {...} | | | Conditions.cs:87:5:100:5 | {...} | Conditions.cs:88:9:88:30 | ... ...; | | | Conditions.cs:88:9:88:30 | ... ...; | Conditions.cs:88:13:88:29 | Before Boolean b = ... | | | Conditions.cs:88:9:88:30 | After ... ...; | Conditions.cs:89:9:89:18 | ... ...; | | @@ -2656,8 +2729,9 @@ | Conditions.cs:99:9:99:17 | Before return ...; | Conditions.cs:99:16:99:16 | access to local variable x | | | Conditions.cs:99:9:99:17 | return ...; | Conditions.cs:86:9:86:10 | Normal Exit | return | | Conditions.cs:99:16:99:16 | access to local variable x | Conditions.cs:99:9:99:17 | return ...; | | -| Conditions.cs:102:12:102:13 | Entry | Conditions.cs:103:5:111:5 | {...} | | +| Conditions.cs:102:12:102:13 | Entry | Conditions.cs:102:20:102:20 | b | | | Conditions.cs:102:12:102:13 | Normal Exit | Conditions.cs:102:12:102:13 | Exit | | +| Conditions.cs:102:20:102:20 | b | Conditions.cs:103:5:111:5 | {...} | | | Conditions.cs:103:5:111:5 | {...} | Conditions.cs:104:9:104:29 | ... ...; | | | Conditions.cs:104:9:104:29 | ... ...; | Conditions.cs:104:13:104:28 | Before String x = ... | | | Conditions.cs:104:9:104:29 | After ... ...; | Conditions.cs:105:9:106:20 | if (...) ... | | @@ -2713,8 +2787,9 @@ | Conditions.cs:110:9:110:17 | Before return ...; | Conditions.cs:110:16:110:16 | access to local variable x | | | Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:102:12:102:13 | Normal Exit | return | | Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:9:110:17 | return ...; | | -| Conditions.cs:113:10:113:11 | Entry | Conditions.cs:114:5:124:5 | {...} | | +| Conditions.cs:113:10:113:11 | Entry | Conditions.cs:113:22:113:25 | args | | | Conditions.cs:113:10:113:11 | Normal Exit | Conditions.cs:113:10:113:11 | Exit | | +| Conditions.cs:113:22:113:25 | args | Conditions.cs:114:5:124:5 | {...} | | | Conditions.cs:114:5:124:5 | After {...} | Conditions.cs:113:10:113:11 | Normal Exit | | | Conditions.cs:114:5:124:5 | {...} | Conditions.cs:115:9:115:24 | ... ...; | | | Conditions.cs:115:9:115:24 | ... ...; | Conditions.cs:115:16:115:23 | Before String s = ... | | @@ -2832,8 +2907,9 @@ | Conditions.cs:137:21:137:37 | call to method ToString | Conditions.cs:137:21:137:37 | After call to method ToString | | | Conditions.cs:137:21:137:38 | ...; | Conditions.cs:137:21:137:37 | Before call to method ToString | | | Conditions.cs:137:21:137:38 | After ...; | Conditions.cs:136:17:138:17 | After {...} | | -| Conditions.cs:143:10:143:12 | Entry | Conditions.cs:144:5:150:5 | {...} | | +| Conditions.cs:143:10:143:12 | Entry | Conditions.cs:143:19:143:19 | b | | | Conditions.cs:143:10:143:12 | Normal Exit | Conditions.cs:143:10:143:12 | Exit | | +| Conditions.cs:143:19:143:19 | b | Conditions.cs:144:5:150:5 | {...} | | | Conditions.cs:144:5:150:5 | After {...} | Conditions.cs:143:10:143:12 | Normal Exit | | | Conditions.cs:144:5:150:5 | {...} | Conditions.cs:145:9:145:30 | ... ...; | | | Conditions.cs:145:9:145:30 | ... ...; | Conditions.cs:145:13:145:29 | Before String s = ... | | @@ -2892,8 +2968,19 @@ | DefaultParam.cs:1:7:1:18 | call to method | DefaultParam.cs:1:7:1:18 | After call to method | | | DefaultParam.cs:1:7:1:18 | this access | DefaultParam.cs:1:7:1:18 | call to method | | | DefaultParam.cs:1:7:1:18 | {...} | DefaultParam.cs:1:7:1:18 | Normal Exit | | -| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:4:5:6:5 | {...} | | +| DefaultParam.cs:3:12:3:13 | Entry | DefaultParam.cs:3:20:3:20 | b | | | DefaultParam.cs:3:12:3:13 | Normal Exit | DefaultParam.cs:3:12:3:13 | Exit | | +| DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:3:30:3:30 | s | | +| DefaultParam.cs:3:30:3:30 | After s [match] | DefaultParam.cs:3:42:3:42 | i | | +| DefaultParam.cs:3:30:3:30 | After s [no-match] | DefaultParam.cs:3:34:3:35 | "" | | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:30:3:30 | After s [match] | match | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:30:3:30 | After s [no-match] | no-match | +| DefaultParam.cs:3:34:3:35 | "" | DefaultParam.cs:3:42:3:42 | i | | +| DefaultParam.cs:3:42:3:42 | After i [match] | DefaultParam.cs:4:5:6:5 | {...} | | +| DefaultParam.cs:3:42:3:42 | After i [no-match] | DefaultParam.cs:3:46:3:46 | 0 | | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | After i [match] | match | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | After i [no-match] | no-match | +| DefaultParam.cs:3:46:3:46 | 0 | DefaultParam.cs:4:5:6:5 | {...} | | | DefaultParam.cs:4:5:6:5 | {...} | DefaultParam.cs:5:9:5:25 | Before return ...; | | | DefaultParam.cs:5:9:5:25 | Before return ...; | DefaultParam.cs:5:16:5:24 | Before ... + ... | | | DefaultParam.cs:5:9:5:25 | return ...; | DefaultParam.cs:3:12:3:13 | Normal Exit | return | @@ -3001,9 +3088,10 @@ | ExitMethods.cs:62:9:62:22 | Before call to method ErrorAlways3 | ExitMethods.cs:62:9:62:22 | call to method ErrorAlways3 | | | ExitMethods.cs:62:9:62:22 | call to method ErrorAlways3 | ExitMethods.cs:60:10:60:11 | Exceptional Exit | exception | | ExitMethods.cs:62:9:62:23 | ...; | ExitMethods.cs:62:9:62:22 | Before call to method ErrorAlways3 | | -| ExitMethods.cs:66:17:66:26 | Entry | ExitMethods.cs:67:5:70:5 | {...} | | +| ExitMethods.cs:66:17:66:26 | Entry | ExitMethods.cs:66:33:66:33 | b | | | ExitMethods.cs:66:17:66:26 | Exceptional Exit | ExitMethods.cs:66:17:66:26 | Exit | | | ExitMethods.cs:66:17:66:26 | Normal Exit | ExitMethods.cs:66:17:66:26 | Exit | | +| ExitMethods.cs:66:33:66:33 | b | ExitMethods.cs:67:5:70:5 | {...} | | | ExitMethods.cs:67:5:70:5 | After {...} | ExitMethods.cs:66:17:66:26 | Normal Exit | | | ExitMethods.cs:67:5:70:5 | {...} | ExitMethods.cs:68:9:69:34 | if (...) ... | | | ExitMethods.cs:68:9:69:34 | After if (...) ... | ExitMethods.cs:67:5:70:5 | After {...} | | @@ -3017,8 +3105,9 @@ | ExitMethods.cs:69:19:69:33 | After object creation of type Exception | ExitMethods.cs:69:13:69:34 | throw ...; | | | ExitMethods.cs:69:19:69:33 | Before object creation of type Exception | ExitMethods.cs:69:19:69:33 | object creation of type Exception | | | ExitMethods.cs:69:19:69:33 | object creation of type Exception | ExitMethods.cs:69:19:69:33 | After object creation of type Exception | | -| ExitMethods.cs:72:17:72:27 | Entry | ExitMethods.cs:73:5:78:5 | {...} | | +| ExitMethods.cs:72:17:72:27 | Entry | ExitMethods.cs:72:34:72:34 | b | | | ExitMethods.cs:72:17:72:27 | Exceptional Exit | ExitMethods.cs:72:17:72:27 | Exit | | +| ExitMethods.cs:72:34:72:34 | b | ExitMethods.cs:73:5:78:5 | {...} | | | ExitMethods.cs:73:5:78:5 | {...} | ExitMethods.cs:74:9:77:45 | if (...) ... | | | ExitMethods.cs:74:9:77:45 | if (...) ... | ExitMethods.cs:74:13:74:13 | access to parameter b | | | ExitMethods.cs:74:13:74:13 | After access to parameter b [false] | ExitMethods.cs:77:13:77:45 | Before throw ...; | | @@ -3085,9 +3174,10 @@ | ExitMethods.cs:107:9:107:47 | Before call to method Exit | ExitMethods.cs:107:9:107:47 | call to method Exit | | | ExitMethods.cs:107:9:107:47 | call to method Exit | ExitMethods.cs:105:10:105:24 | Exceptional Exit | exception | | ExitMethods.cs:107:9:107:48 | ...; | ExitMethods.cs:107:9:107:47 | Before call to method Exit | | -| ExitMethods.cs:110:13:110:21 | Entry | ExitMethods.cs:111:5:113:5 | {...} | | +| ExitMethods.cs:110:13:110:21 | Entry | ExitMethods.cs:110:31:110:35 | input | | | ExitMethods.cs:110:13:110:21 | Exceptional Exit | ExitMethods.cs:110:13:110:21 | Exit | | | ExitMethods.cs:110:13:110:21 | Normal Exit | ExitMethods.cs:110:13:110:21 | Exit | | +| ExitMethods.cs:110:31:110:35 | input | ExitMethods.cs:111:5:113:5 | {...} | | | ExitMethods.cs:111:5:113:5 | {...} | ExitMethods.cs:112:9:112:77 | Before return ...; | | | ExitMethods.cs:112:9:112:77 | Before return ...; | ExitMethods.cs:112:16:112:76 | ... ? ... : ... | | | ExitMethods.cs:112:9:112:77 | return ...; | ExitMethods.cs:110:13:110:21 | Normal Exit | return | @@ -3117,8 +3207,9 @@ | ExitMethods.cs:112:47:112:76 | Before object creation of type ArgumentException | ExitMethods.cs:112:69:112:75 | "input" | | | ExitMethods.cs:112:47:112:76 | object creation of type ArgumentException | ExitMethods.cs:112:47:112:76 | After object creation of type ArgumentException | | | ExitMethods.cs:112:69:112:75 | "input" | ExitMethods.cs:112:47:112:76 | object creation of type ArgumentException | | -| ExitMethods.cs:115:16:115:34 | Entry | ExitMethods.cs:116:5:118:5 | {...} | | +| ExitMethods.cs:115:16:115:34 | Entry | ExitMethods.cs:115:43:115:43 | s | | | ExitMethods.cs:115:16:115:34 | Normal Exit | ExitMethods.cs:115:16:115:34 | Exit | | +| ExitMethods.cs:115:43:115:43 | s | ExitMethods.cs:116:5:118:5 | {...} | | | ExitMethods.cs:116:5:118:5 | {...} | ExitMethods.cs:117:9:117:39 | Before return ...; | | | ExitMethods.cs:117:9:117:39 | Before return ...; | ExitMethods.cs:117:16:117:38 | ... ? ... : ... | | | ExitMethods.cs:117:9:117:39 | return ...; | ExitMethods.cs:115:16:115:34 | Normal Exit | return | @@ -3147,9 +3238,10 @@ | ExitMethods.cs:128:9:128:26 | call to method FailingAssertion | ExitMethods.cs:126:17:126:33 | Exceptional Exit | exception | | ExitMethods.cs:128:9:128:26 | this access | ExitMethods.cs:128:9:128:26 | call to method FailingAssertion | | | ExitMethods.cs:128:9:128:27 | ...; | ExitMethods.cs:128:9:128:26 | Before call to method FailingAssertion | | -| ExitMethods.cs:132:10:132:20 | Entry | ExitMethods.cs:132:33:132:49 | Before call to method IsFalse | | +| ExitMethods.cs:132:10:132:20 | Entry | ExitMethods.cs:132:27:132:27 | b | | | ExitMethods.cs:132:10:132:20 | Exceptional Exit | ExitMethods.cs:132:10:132:20 | Exit | | | ExitMethods.cs:132:10:132:20 | Normal Exit | ExitMethods.cs:132:10:132:20 | Exit | | +| ExitMethods.cs:132:27:132:27 | b | ExitMethods.cs:132:33:132:49 | Before call to method IsFalse | | | ExitMethods.cs:132:33:132:49 | After call to method IsFalse | ExitMethods.cs:132:10:132:20 | Normal Exit | | | ExitMethods.cs:132:33:132:49 | Before call to method IsFalse | ExitMethods.cs:132:48:132:48 | access to parameter b | | | ExitMethods.cs:132:33:132:49 | call to method IsFalse | ExitMethods.cs:132:10:132:20 | Exceptional Exit | exception | @@ -3163,8 +3255,10 @@ | ExitMethods.cs:136:9:136:25 | this access | ExitMethods.cs:136:21:136:24 | true | | | ExitMethods.cs:136:9:136:26 | ...; | ExitMethods.cs:136:9:136:25 | Before call to method AssertFalse | | | ExitMethods.cs:136:21:136:24 | true | ExitMethods.cs:136:9:136:25 | call to method AssertFalse | | -| ExitMethods.cs:140:17:140:42 | Entry | ExitMethods.cs:141:5:147:5 | {...} | | +| ExitMethods.cs:140:17:140:42 | Entry | ExitMethods.cs:140:49:140:49 | b | | | ExitMethods.cs:140:17:140:42 | Exceptional Exit | ExitMethods.cs:140:17:140:42 | Exit | | +| ExitMethods.cs:140:49:140:49 | b | ExitMethods.cs:140:70:140:70 | e | | +| ExitMethods.cs:140:70:140:70 | e | ExitMethods.cs:141:5:147:5 | {...} | | | ExitMethods.cs:141:5:147:5 | {...} | ExitMethods.cs:142:9:145:53 | if (...) ... | | | ExitMethods.cs:142:9:145:53 | if (...) ... | ExitMethods.cs:142:13:142:13 | access to parameter b | | | ExitMethods.cs:142:13:142:13 | After access to parameter b [false] | ExitMethods.cs:145:13:145:53 | ...; | | @@ -3182,8 +3276,9 @@ | ExitMethods.cs:145:13:145:52 | call to method Throw | ExitMethods.cs:140:17:140:42 | Exceptional Exit | exception | | ExitMethods.cs:145:13:145:53 | ...; | ExitMethods.cs:145:13:145:52 | Before call to method Throw | | | ExitMethods.cs:145:43:145:43 | access to parameter e | ExitMethods.cs:145:13:145:44 | call to method Capture | | -| Extensions.cs:5:23:5:29 | Entry | Extensions.cs:6:5:8:5 | {...} | | +| Extensions.cs:5:23:5:29 | Entry | Extensions.cs:5:43:5:43 | s | | | Extensions.cs:5:23:5:29 | Normal Exit | Extensions.cs:5:23:5:29 | Exit | | +| Extensions.cs:5:43:5:43 | s | Extensions.cs:6:5:8:5 | {...} | | | Extensions.cs:6:5:8:5 | {...} | Extensions.cs:7:9:7:30 | Before return ...; | | | Extensions.cs:7:9:7:30 | Before return ...; | Extensions.cs:7:16:7:29 | Before call to method Parse | | | Extensions.cs:7:9:7:30 | return ...; | Extensions.cs:5:23:5:29 | Normal Exit | return | @@ -3191,8 +3286,10 @@ | Extensions.cs:7:16:7:29 | Before call to method Parse | Extensions.cs:7:28:7:28 | access to parameter s | | | Extensions.cs:7:16:7:29 | call to method Parse | Extensions.cs:7:16:7:29 | After call to method Parse | | | Extensions.cs:7:28:7:28 | access to parameter s | Extensions.cs:7:16:7:29 | call to method Parse | | -| Extensions.cs:10:24:10:29 | Entry | Extensions.cs:11:5:13:5 | {...} | | +| Extensions.cs:10:24:10:29 | Entry | Extensions.cs:10:43:10:43 | s | | | Extensions.cs:10:24:10:29 | Normal Exit | Extensions.cs:10:24:10:29 | Exit | | +| Extensions.cs:10:43:10:43 | s | Extensions.cs:10:65:10:65 | f | | +| Extensions.cs:10:65:10:65 | f | Extensions.cs:11:5:13:5 | {...} | | | Extensions.cs:11:5:13:5 | {...} | Extensions.cs:12:9:12:20 | Before return ...; | | | Extensions.cs:12:9:12:20 | Before return ...; | Extensions.cs:12:16:12:19 | Before delegate call | | | Extensions.cs:12:9:12:20 | return ...; | Extensions.cs:10:24:10:29 | Normal Exit | return | @@ -3207,8 +3304,9 @@ | Extensions.cs:15:40:15:51 | Before call to method ToInt32 | Extensions.cs:15:48:15:50 | "0" | | | Extensions.cs:15:40:15:51 | call to method ToInt32 | Extensions.cs:15:40:15:51 | After call to method ToInt32 | | | Extensions.cs:15:48:15:50 | "0" | Extensions.cs:15:40:15:51 | call to method ToInt32 | | -| Extensions.cs:20:17:20:20 | Entry | Extensions.cs:21:5:26:5 | {...} | | +| Extensions.cs:20:17:20:20 | Entry | Extensions.cs:20:29:20:29 | s | | | Extensions.cs:20:17:20:20 | Normal Exit | Extensions.cs:20:17:20:20 | Exit | | +| Extensions.cs:20:29:20:29 | s | Extensions.cs:21:5:26:5 | {...} | | | Extensions.cs:21:5:26:5 | After {...} | Extensions.cs:20:17:20:20 | Normal Exit | | | Extensions.cs:21:5:26:5 | {...} | Extensions.cs:22:9:22:20 | ...; | | | Extensions.cs:22:9:22:9 | access to parameter s | Extensions.cs:22:9:22:19 | call to method ToInt32 | | @@ -3637,9 +3735,10 @@ | Finally.cs:141:19:141:43 | Before object creation of type ArgumentException | Finally.cs:141:41:141:42 | "" | | | Finally.cs:141:19:141:43 | object creation of type ArgumentException | Finally.cs:141:19:141:43 | After object creation of type ArgumentException | | | Finally.cs:141:41:141:42 | "" | Finally.cs:141:19:141:43 | object creation of type ArgumentException | | -| Finally.cs:147:10:147:11 | Entry | Finally.cs:148:5:170:5 | {...} | | +| Finally.cs:147:10:147:11 | Entry | Finally.cs:147:22:147:25 | args | | | Finally.cs:147:10:147:11 | Exceptional Exit | Finally.cs:147:10:147:11 | Exit | | | Finally.cs:147:10:147:11 | Normal Exit | Finally.cs:147:10:147:11 | Exit | | +| Finally.cs:147:22:147:25 | args | Finally.cs:148:5:170:5 | {...} | | | Finally.cs:148:5:170:5 | After {...} | Finally.cs:147:10:147:11 | Normal Exit | | | Finally.cs:148:5:170:5 | {...} | Finally.cs:149:9:169:9 | try {...} ... | | | Finally.cs:149:9:169:9 | After try {...} ... | Finally.cs:148:5:170:5 | After {...} | | @@ -3755,9 +3854,11 @@ | Finally.cs:174:11:174:20 | call to method | Finally.cs:174:11:174:20 | After call to method | | | Finally.cs:174:11:174:20 | this access | Finally.cs:174:11:174:20 | call to method | | | Finally.cs:174:11:174:20 | {...} | Finally.cs:174:11:174:20 | Normal Exit | | -| Finally.cs:176:10:176:11 | Entry | Finally.cs:177:5:193:5 | {...} | | +| Finally.cs:176:10:176:11 | Entry | Finally.cs:176:18:176:19 | b1 | | | Finally.cs:176:10:176:11 | Exceptional Exit | Finally.cs:176:10:176:11 | Exit | | | Finally.cs:176:10:176:11 | Normal Exit | Finally.cs:176:10:176:11 | Exit | | +| Finally.cs:176:18:176:19 | b1 | Finally.cs:176:27:176:28 | b2 | | +| Finally.cs:176:27:176:28 | b2 | Finally.cs:177:5:193:5 | {...} | | | Finally.cs:177:5:193:5 | After {...} | Finally.cs:176:10:176:11 | Normal Exit | | | Finally.cs:177:5:193:5 | {...} | Finally.cs:178:9:192:9 | try {...} ... | | | Finally.cs:178:9:192:9 | After try {...} ... | Finally.cs:177:5:193:5 | After {...} | | @@ -3816,9 +3917,12 @@ | Finally.cs:190:31:190:46 | After object creation of type ExceptionC | Finally.cs:190:25:190:47 | throw ...; | | | Finally.cs:190:31:190:46 | Before object creation of type ExceptionC | Finally.cs:190:31:190:46 | object creation of type ExceptionC | | | Finally.cs:190:31:190:46 | object creation of type ExceptionC | Finally.cs:190:31:190:46 | After object creation of type ExceptionC | | -| Finally.cs:195:10:195:12 | Entry | Finally.cs:196:5:214:5 | {...} | | +| Finally.cs:195:10:195:12 | Entry | Finally.cs:195:19:195:20 | b1 | | | Finally.cs:195:10:195:12 | Exceptional Exit | Finally.cs:195:10:195:12 | Exit | | | Finally.cs:195:10:195:12 | Normal Exit | Finally.cs:195:10:195:12 | Exit | | +| Finally.cs:195:19:195:20 | b1 | Finally.cs:195:28:195:29 | b2 | | +| Finally.cs:195:28:195:29 | b2 | Finally.cs:195:37:195:38 | b3 | | +| Finally.cs:195:37:195:38 | b3 | Finally.cs:196:5:214:5 | {...} | | | Finally.cs:196:5:214:5 | After {...} | Finally.cs:195:10:195:12 | Normal Exit | | | Finally.cs:196:5:214:5 | {...} | Finally.cs:197:9:212:9 | try {...} ... | | | Finally.cs:197:9:212:9 | After try {...} ... | Finally.cs:213:9:213:25 | ...; | | @@ -3929,9 +4033,11 @@ | Finally.cs:230:9:230:34 | ...; | Finally.cs:230:9:230:33 | Before call to method WriteLine | | | Finally.cs:230:9:230:34 | After ...; | Finally.cs:217:5:231:5 | After {...} | | | Finally.cs:230:27:230:32 | "Done" | Finally.cs:230:9:230:33 | call to method WriteLine | | -| Finally.cs:233:10:233:12 | Entry | Finally.cs:234:5:261:5 | {...} | | +| Finally.cs:233:10:233:12 | Entry | Finally.cs:233:19:233:20 | b1 | | | Finally.cs:233:10:233:12 | Exceptional Exit | Finally.cs:233:10:233:12 | Exit | | | Finally.cs:233:10:233:12 | Normal Exit | Finally.cs:233:10:233:12 | Exit | | +| Finally.cs:233:19:233:20 | b1 | Finally.cs:233:28:233:29 | b2 | | +| Finally.cs:233:28:233:29 | b2 | Finally.cs:234:5:261:5 | {...} | | | Finally.cs:234:5:261:5 | After {...} | Finally.cs:233:10:233:12 | Normal Exit | | | Finally.cs:234:5:261:5 | {...} | Finally.cs:235:9:259:9 | try {...} ... | | | Finally.cs:235:9:259:9 | After try {...} ... | Finally.cs:260:9:260:34 | ...; | | @@ -4004,9 +4110,10 @@ | Finally.cs:260:9:260:34 | ...; | Finally.cs:260:9:260:33 | Before call to method WriteLine | | | Finally.cs:260:9:260:34 | After ...; | Finally.cs:234:5:261:5 | After {...} | | | Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:9:260:33 | call to method WriteLine | | -| Finally.cs:263:10:263:12 | Entry | Finally.cs:264:5:274:5 | {...} | | +| Finally.cs:263:10:263:12 | Entry | Finally.cs:263:18:263:18 | i | | | Finally.cs:263:10:263:12 | Exceptional Exit | Finally.cs:263:10:263:12 | Exit | | | Finally.cs:263:10:263:12 | Normal Exit | Finally.cs:263:10:263:12 | Exit | | +| Finally.cs:263:18:263:18 | i | Finally.cs:264:5:274:5 | {...} | | | Finally.cs:264:5:274:5 | After {...} | Finally.cs:263:10:263:12 | Normal Exit | | | Finally.cs:264:5:274:5 | {...} | Finally.cs:265:9:273:9 | try {...} ... | | | Finally.cs:265:9:273:9 | After try {...} ... | Finally.cs:264:5:274:5 | After {...} | | @@ -4046,8 +4153,9 @@ | Foreach.cs:4:7:4:13 | call to method | Foreach.cs:4:7:4:13 | After call to method | | | Foreach.cs:4:7:4:13 | this access | Foreach.cs:4:7:4:13 | call to method | | | Foreach.cs:4:7:4:13 | {...} | Foreach.cs:4:7:4:13 | Normal Exit | | -| Foreach.cs:6:10:6:11 | Entry | Foreach.cs:7:5:10:5 | {...} | | +| Foreach.cs:6:10:6:11 | Entry | Foreach.cs:6:22:6:25 | args | | | Foreach.cs:6:10:6:11 | Normal Exit | Foreach.cs:6:10:6:11 | Exit | | +| Foreach.cs:6:22:6:25 | args | Foreach.cs:7:5:10:5 | {...} | | | Foreach.cs:7:5:10:5 | After {...} | Foreach.cs:6:10:6:11 | Normal Exit | | | Foreach.cs:7:5:10:5 | {...} | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | | | Foreach.cs:8:9:9:13 | After foreach (... ... in ...) ... | Foreach.cs:7:5:10:5 | After {...} | | @@ -4060,8 +4168,9 @@ | Foreach.cs:8:29:8:32 | access to parameter args | Foreach.cs:8:29:8:32 | After access to parameter args [empty] | empty | | Foreach.cs:8:29:8:32 | access to parameter args | Foreach.cs:8:29:8:32 | After access to parameter args [non-empty] | non-empty | | Foreach.cs:9:13:9:13 | ; | Foreach.cs:8:9:9:13 | [LoopHeader] foreach (... ... in ...) ... | | -| Foreach.cs:12:10:12:11 | Entry | Foreach.cs:13:5:16:5 | {...} | | +| Foreach.cs:12:10:12:11 | Entry | Foreach.cs:12:22:12:25 | args | | | Foreach.cs:12:10:12:11 | Normal Exit | Foreach.cs:12:10:12:11 | Exit | | +| Foreach.cs:12:22:12:25 | args | Foreach.cs:13:5:16:5 | {...} | | | Foreach.cs:13:5:16:5 | After {...} | Foreach.cs:12:10:12:11 | Normal Exit | | | Foreach.cs:13:5:16:5 | {...} | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | | | Foreach.cs:14:9:15:13 | After foreach (... ... in ...) ... | Foreach.cs:13:5:16:5 | After {...} | | @@ -4074,8 +4183,9 @@ | Foreach.cs:14:27:14:30 | access to parameter args | Foreach.cs:14:27:14:30 | After access to parameter args [empty] | empty | | Foreach.cs:14:27:14:30 | access to parameter args | Foreach.cs:14:27:14:30 | After access to parameter args [non-empty] | non-empty | | Foreach.cs:15:13:15:13 | ; | Foreach.cs:14:9:15:13 | [LoopHeader] foreach (... ... in ...) ... | | -| Foreach.cs:18:10:18:11 | Entry | Foreach.cs:19:5:22:5 | {...} | | +| Foreach.cs:18:10:18:11 | Entry | Foreach.cs:18:33:18:33 | e | | | Foreach.cs:18:10:18:11 | Normal Exit | Foreach.cs:18:10:18:11 | Exit | | +| Foreach.cs:18:33:18:33 | e | Foreach.cs:19:5:22:5 | {...} | | | Foreach.cs:19:5:22:5 | After {...} | Foreach.cs:18:10:18:11 | Normal Exit | | | Foreach.cs:19:5:22:5 | {...} | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | | | Foreach.cs:20:9:21:11 | After foreach (... ... in ...) ... | Foreach.cs:19:5:22:5 | After {...} | | @@ -4102,8 +4212,9 @@ | Foreach.cs:20:43:20:68 | call to method Empty | Foreach.cs:20:43:20:68 | After call to method Empty [empty] | empty | | Foreach.cs:20:43:20:68 | call to method Empty | Foreach.cs:20:43:20:68 | After call to method Empty [non-empty] | non-empty | | Foreach.cs:21:11:21:11 | ; | Foreach.cs:20:9:21:11 | [LoopHeader] foreach (... ... in ...) ... | | -| Foreach.cs:24:10:24:11 | Entry | Foreach.cs:25:5:28:5 | {...} | | +| Foreach.cs:24:10:24:11 | Entry | Foreach.cs:24:40:24:43 | args | | | Foreach.cs:24:10:24:11 | Normal Exit | Foreach.cs:24:10:24:11 | Exit | | +| Foreach.cs:24:40:24:43 | args | Foreach.cs:25:5:28:5 | {...} | | | Foreach.cs:25:5:28:5 | After {...} | Foreach.cs:24:10:24:11 | Normal Exit | | | Foreach.cs:25:5:28:5 | {...} | Foreach.cs:26:9:27:11 | foreach (... ... in ...) ... | | | Foreach.cs:26:9:27:11 | After foreach (... ... in ...) ... | Foreach.cs:25:5:28:5 | After {...} | | @@ -4120,8 +4231,9 @@ | Foreach.cs:26:36:26:39 | access to parameter args | Foreach.cs:26:36:26:39 | After access to parameter args [empty] | empty | | Foreach.cs:26:36:26:39 | access to parameter args | Foreach.cs:26:36:26:39 | After access to parameter args [non-empty] | non-empty | | Foreach.cs:27:11:27:11 | ; | Foreach.cs:26:9:27:11 | [LoopHeader] foreach (... ... in ...) ... | | -| Foreach.cs:30:10:30:11 | Entry | Foreach.cs:31:5:34:5 | {...} | | +| Foreach.cs:30:10:30:11 | Entry | Foreach.cs:30:40:30:43 | args | | | Foreach.cs:30:10:30:11 | Normal Exit | Foreach.cs:30:10:30:11 | Exit | | +| Foreach.cs:30:40:30:43 | args | Foreach.cs:31:5:34:5 | {...} | | | Foreach.cs:31:5:34:5 | After {...} | Foreach.cs:30:10:30:11 | Normal Exit | | | Foreach.cs:31:5:34:5 | {...} | Foreach.cs:32:9:33:11 | foreach (... ... in ...) ... | | | Foreach.cs:32:9:33:11 | After foreach (... ... in ...) ... | Foreach.cs:31:5:34:5 | After {...} | | @@ -4138,8 +4250,9 @@ | Foreach.cs:32:32:32:35 | access to parameter args | Foreach.cs:32:32:32:35 | After access to parameter args [empty] | empty | | Foreach.cs:32:32:32:35 | access to parameter args | Foreach.cs:32:32:32:35 | After access to parameter args [non-empty] | non-empty | | Foreach.cs:33:11:33:11 | ; | Foreach.cs:32:9:33:11 | [LoopHeader] foreach (... ... in ...) ... | | -| Foreach.cs:36:10:36:11 | Entry | Foreach.cs:37:5:40:5 | {...} | | +| Foreach.cs:36:10:36:11 | Entry | Foreach.cs:36:40:36:43 | args | | | Foreach.cs:36:10:36:11 | Normal Exit | Foreach.cs:36:10:36:11 | Exit | | +| Foreach.cs:36:40:36:43 | args | Foreach.cs:37:5:40:5 | {...} | | | Foreach.cs:37:5:40:5 | After {...} | Foreach.cs:36:10:36:11 | Normal Exit | | | Foreach.cs:37:5:40:5 | {...} | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | | | Foreach.cs:38:9:39:11 | After foreach (... ... in ...) ... | Foreach.cs:37:5:40:5 | After {...} | | @@ -4199,11 +4312,12 @@ | Initializers.cs:10:5:10:16 | After call to method | Initializers.cs:10:5:10:16 | Before call to constructor Object | | | Initializers.cs:10:5:10:16 | Before call to constructor Object | Initializers.cs:10:5:10:16 | call to constructor Object | | | Initializers.cs:10:5:10:16 | Before call to method | Initializers.cs:10:5:10:16 | this access | | -| Initializers.cs:10:5:10:16 | Entry | Initializers.cs:10:5:10:16 | Before call to method | | +| Initializers.cs:10:5:10:16 | Entry | Initializers.cs:10:25:10:25 | s | | | Initializers.cs:10:5:10:16 | Normal Exit | Initializers.cs:10:5:10:16 | Exit | | | Initializers.cs:10:5:10:16 | call to constructor Object | Initializers.cs:10:5:10:16 | After call to constructor Object | | | Initializers.cs:10:5:10:16 | call to method | Initializers.cs:10:5:10:16 | After call to method | | | Initializers.cs:10:5:10:16 | this access | Initializers.cs:10:5:10:16 | call to method | | +| Initializers.cs:10:25:10:25 | s | Initializers.cs:10:5:10:16 | Before call to method | | | Initializers.cs:10:28:10:30 | {...} | Initializers.cs:10:5:10:16 | Normal Exit | | | Initializers.cs:12:10:12:10 | Entry | Initializers.cs:13:5:16:5 | {...} | | | Initializers.cs:12:10:12:10 | Normal Exit | Initializers.cs:12:10:12:10 | Exit | | @@ -4316,8 +4430,9 @@ | Initializers.cs:31:26:31:31 | ...; | Initializers.cs:31:26:31:30 | Before ... = ... | | | Initializers.cs:31:26:31:31 | After ...; | Initializers.cs:31:24:31:33 | After {...} | | | Initializers.cs:31:30:31:30 | 3 | Initializers.cs:31:26:31:30 | ... = ... | | -| Initializers.cs:33:9:33:11 | Entry | Initializers.cs:33:22:33:25 | Before call to constructor Sub | | +| Initializers.cs:33:9:33:11 | Entry | Initializers.cs:33:17:33:17 | i | | | Initializers.cs:33:9:33:11 | Normal Exit | Initializers.cs:33:9:33:11 | Exit | | +| Initializers.cs:33:17:33:17 | i | Initializers.cs:33:22:33:25 | Before call to constructor Sub | | | Initializers.cs:33:22:33:25 | After call to constructor Sub | Initializers.cs:33:29:33:38 | {...} | | | Initializers.cs:33:22:33:25 | Before call to constructor Sub | Initializers.cs:33:22:33:25 | call to constructor Sub | | | Initializers.cs:33:22:33:25 | call to constructor Sub | Initializers.cs:33:22:33:25 | After call to constructor Sub | | @@ -4337,11 +4452,13 @@ | Initializers.cs:35:9:35:11 | After call to method | Initializers.cs:35:9:35:11 | Before call to constructor NoConstructor | | | Initializers.cs:35:9:35:11 | Before call to constructor NoConstructor | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | | | Initializers.cs:35:9:35:11 | Before call to method | Initializers.cs:35:9:35:11 | this access | | -| Initializers.cs:35:9:35:11 | Entry | Initializers.cs:35:9:35:11 | Before call to method | | +| Initializers.cs:35:9:35:11 | Entry | Initializers.cs:35:17:35:17 | i | | | Initializers.cs:35:9:35:11 | Normal Exit | Initializers.cs:35:9:35:11 | Exit | | | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:9:35:11 | After call to constructor NoConstructor | | | Initializers.cs:35:9:35:11 | call to method | Initializers.cs:35:9:35:11 | After call to method | | | Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | call to method | | +| Initializers.cs:35:17:35:17 | i | Initializers.cs:35:24:35:24 | j | | +| Initializers.cs:35:24:35:24 | j | Initializers.cs:35:9:35:11 | Before call to method | | | Initializers.cs:35:27:35:40 | After {...} | Initializers.cs:35:9:35:11 | Normal Exit | | | Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:29:35:38 | ...; | | | Initializers.cs:35:29:35:29 | After access to field I | Initializers.cs:35:33:35:37 | Before ... + ... | | @@ -4378,8 +4495,9 @@ | Initializers.cs:41:11:41:18 | call to method | Initializers.cs:41:11:41:18 | After call to method | | | Initializers.cs:41:11:41:18 | this access | Initializers.cs:41:11:41:18 | call to method | | | Initializers.cs:41:11:41:18 | {...} | Initializers.cs:41:11:41:18 | Normal Exit | | -| Initializers.cs:51:10:51:13 | Entry | Initializers.cs:52:5:66:5 | {...} | | +| Initializers.cs:51:10:51:13 | Entry | Initializers.cs:51:19:51:19 | i | | | Initializers.cs:51:10:51:13 | Normal Exit | Initializers.cs:51:10:51:13 | Exit | | +| Initializers.cs:51:19:51:19 | i | Initializers.cs:52:5:66:5 | {...} | | | Initializers.cs:52:5:66:5 | After {...} | Initializers.cs:51:10:51:13 | Normal Exit | | | Initializers.cs:52:5:66:5 | {...} | Initializers.cs:54:9:54:96 | ... ...; | | | Initializers.cs:54:9:54:96 | ... ...; | Initializers.cs:54:13:54:95 | Before Dictionary dict = ... | | @@ -4632,8 +4750,9 @@ | LoopUnrolling.cs:5:7:5:19 | call to method | LoopUnrolling.cs:5:7:5:19 | After call to method | | | LoopUnrolling.cs:5:7:5:19 | this access | LoopUnrolling.cs:5:7:5:19 | call to method | | | LoopUnrolling.cs:5:7:5:19 | {...} | LoopUnrolling.cs:5:7:5:19 | Normal Exit | | -| LoopUnrolling.cs:7:10:7:11 | Entry | LoopUnrolling.cs:8:5:13:5 | {...} | | +| LoopUnrolling.cs:7:10:7:11 | Entry | LoopUnrolling.cs:7:22:7:25 | args | | | LoopUnrolling.cs:7:10:7:11 | Normal Exit | LoopUnrolling.cs:7:10:7:11 | Exit | | +| LoopUnrolling.cs:7:22:7:25 | args | LoopUnrolling.cs:8:5:13:5 | {...} | | | LoopUnrolling.cs:8:5:13:5 | After {...} | LoopUnrolling.cs:7:10:7:11 | Normal Exit | | | LoopUnrolling.cs:8:5:13:5 | {...} | LoopUnrolling.cs:9:9:10:19 | if (...) ... | | | LoopUnrolling.cs:9:9:10:19 | After if (...) ... | LoopUnrolling.cs:11:9:12:35 | foreach (... ... in ...) ... | | @@ -4700,8 +4819,9 @@ | LoopUnrolling.cs:19:13:19:33 | ...; | LoopUnrolling.cs:19:13:19:32 | Before call to method WriteLine | | | LoopUnrolling.cs:19:13:19:33 | After ...; | LoopUnrolling.cs:18:9:19:33 | [LoopHeader] foreach (... ... in ...) ... | | | LoopUnrolling.cs:19:31:19:31 | access to local variable x | LoopUnrolling.cs:19:13:19:32 | call to method WriteLine | | -| LoopUnrolling.cs:22:10:22:11 | Entry | LoopUnrolling.cs:23:5:27:5 | {...} | | +| LoopUnrolling.cs:22:10:22:11 | Entry | LoopUnrolling.cs:22:20:22:23 | args | | | LoopUnrolling.cs:22:10:22:11 | Normal Exit | LoopUnrolling.cs:22:10:22:11 | Exit | | +| LoopUnrolling.cs:22:20:22:23 | args | LoopUnrolling.cs:23:5:27:5 | {...} | | | LoopUnrolling.cs:23:5:27:5 | After {...} | LoopUnrolling.cs:22:10:22:11 | Normal Exit | | | LoopUnrolling.cs:23:5:27:5 | {...} | LoopUnrolling.cs:24:9:26:40 | foreach (... ... in ...) ... | | | LoopUnrolling.cs:24:9:26:40 | After foreach (... ... in ...) ... | LoopUnrolling.cs:23:5:27:5 | After {...} | | @@ -4858,8 +4978,9 @@ | LoopUnrolling.cs:50:34:50:34 | access to local variable x | LoopUnrolling.cs:50:16:50:35 | call to method WriteLine | | | LoopUnrolling.cs:51:13:51:23 | Before goto ...; | LoopUnrolling.cs:51:13:51:23 | goto ...; | | | LoopUnrolling.cs:51:13:51:23 | goto ...; | LoopUnrolling.cs:50:9:50:13 | Label: | goto | -| LoopUnrolling.cs:55:10:55:11 | Entry | LoopUnrolling.cs:56:5:65:5 | {...} | | +| LoopUnrolling.cs:55:10:55:11 | Entry | LoopUnrolling.cs:55:18:55:18 | b | | | LoopUnrolling.cs:55:10:55:11 | Normal Exit | LoopUnrolling.cs:55:10:55:11 | Exit | | +| LoopUnrolling.cs:55:18:55:18 | b | LoopUnrolling.cs:56:5:65:5 | {...} | | | LoopUnrolling.cs:56:5:65:5 | After {...} | LoopUnrolling.cs:55:10:55:11 | Normal Exit | | | LoopUnrolling.cs:56:5:65:5 | {...} | LoopUnrolling.cs:57:9:57:48 | ... ...; | | | LoopUnrolling.cs:57:9:57:48 | ... ...; | LoopUnrolling.cs:57:13:57:47 | Before String[] xs = ... | | @@ -4913,8 +5034,9 @@ | LoopUnrolling.cs:63:17:63:37 | ...; | LoopUnrolling.cs:63:17:63:36 | Before call to method WriteLine | | | LoopUnrolling.cs:63:17:63:37 | After ...; | LoopUnrolling.cs:62:13:63:37 | After if (...) ... | | | LoopUnrolling.cs:63:35:63:35 | access to local variable x | LoopUnrolling.cs:63:17:63:36 | call to method WriteLine | | -| LoopUnrolling.cs:67:10:67:11 | Entry | LoopUnrolling.cs:68:5:74:5 | {...} | | +| LoopUnrolling.cs:67:10:67:11 | Entry | LoopUnrolling.cs:67:26:67:29 | args | | | LoopUnrolling.cs:67:10:67:11 | Normal Exit | LoopUnrolling.cs:67:10:67:11 | Exit | | +| LoopUnrolling.cs:67:26:67:29 | args | LoopUnrolling.cs:68:5:74:5 | {...} | | | LoopUnrolling.cs:68:5:74:5 | After {...} | LoopUnrolling.cs:67:10:67:11 | Normal Exit | | | LoopUnrolling.cs:68:5:74:5 | {...} | LoopUnrolling.cs:69:9:70:19 | if (...) ... | | | LoopUnrolling.cs:69:9:70:19 | After if (...) ... | LoopUnrolling.cs:71:9:71:21 | ...; | | @@ -5073,10 +5195,11 @@ | MultiImplementationA.cs:7:27:7:37 | Before throw ...; | MultiImplementationA.cs:7:33:7:36 | null | | | MultiImplementationA.cs:7:27:7:37 | throw ...; | MultiImplementationA.cs:7:21:7:23 | Exceptional Exit | exception | | MultiImplementationA.cs:7:33:7:36 | null | MultiImplementationA.cs:7:27:7:37 | throw ...; | | -| MultiImplementationA.cs:7:41:7:43 | Entry | MultiImplementationA.cs:7:45:7:59 | {...} | | -| MultiImplementationA.cs:7:41:7:43 | Entry | MultiImplementationB.cs:4:43:4:45 | {...} | | +| MultiImplementationA.cs:7:41:7:43 | Entry | MultiImplementationA.cs:7:41:7:43 | value | | | MultiImplementationA.cs:7:41:7:43 | Exceptional Exit | MultiImplementationA.cs:7:41:7:43 | Exit | | | MultiImplementationA.cs:7:41:7:43 | Normal Exit | MultiImplementationA.cs:7:41:7:43 | Exit | | +| MultiImplementationA.cs:7:41:7:43 | value | MultiImplementationA.cs:7:45:7:59 | {...} | | +| MultiImplementationA.cs:7:41:7:43 | value | MultiImplementationB.cs:4:43:4:45 | {...} | | | MultiImplementationA.cs:7:45:7:59 | {...} | MultiImplementationA.cs:7:47:7:57 | Before throw ...; | | | MultiImplementationA.cs:7:47:7:57 | Before throw ...; | MultiImplementationA.cs:7:53:7:56 | null | | | MultiImplementationA.cs:7:47:7:57 | throw ...; | MultiImplementationA.cs:7:41:7:43 | Exceptional Exit | exception | @@ -5099,26 +5222,31 @@ | MultiImplementationA.cs:13:16:13:20 | After ... = ... | MultiImplementationA.cs:24:32:24:34 | Before ... = ... | | | MultiImplementationA.cs:13:16:13:20 | Before ... = ... | MultiImplementationA.cs:13:16:13:16 | Before access to field F | | | MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:13:16:13:20 | ... = ... | | -| MultiImplementationA.cs:14:31:14:31 | Entry | MultiImplementationA.cs:14:31:14:31 | access to parameter i | | -| MultiImplementationA.cs:14:31:14:31 | Entry | MultiImplementationB.cs:12:31:12:40 | Before throw ... | | +| MultiImplementationA.cs:14:25:14:25 | i | MultiImplementationA.cs:14:31:14:31 | access to parameter i | | +| MultiImplementationA.cs:14:25:14:25 | i | MultiImplementationB.cs:12:31:12:40 | Before throw ... | | +| MultiImplementationA.cs:14:31:14:31 | Entry | MultiImplementationA.cs:14:25:14:25 | i | | | MultiImplementationA.cs:14:31:14:31 | Exceptional Exit | MultiImplementationA.cs:14:31:14:31 | Exit | | | MultiImplementationA.cs:14:31:14:31 | Normal Exit | MultiImplementationA.cs:14:31:14:31 | Exit | | | MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | Normal Exit | | -| MultiImplementationA.cs:15:36:15:38 | Entry | MultiImplementationA.cs:15:40:15:52 | {...} | | -| MultiImplementationA.cs:15:36:15:38 | Entry | MultiImplementationB.cs:13:40:13:54 | {...} | | +| MultiImplementationA.cs:15:31:15:31 | s | MultiImplementationA.cs:15:40:15:52 | {...} | | +| MultiImplementationA.cs:15:31:15:31 | s | MultiImplementationA.cs:15:54:15:56 | value | | +| MultiImplementationA.cs:15:31:15:31 | s | MultiImplementationB.cs:13:40:13:54 | {...} | | +| MultiImplementationA.cs:15:36:15:38 | Entry | MultiImplementationA.cs:15:31:15:31 | s | | | MultiImplementationA.cs:15:36:15:38 | Exceptional Exit | MultiImplementationA.cs:15:36:15:38 | Exit | | | MultiImplementationA.cs:15:36:15:38 | Normal Exit | MultiImplementationA.cs:15:36:15:38 | Exit | | | MultiImplementationA.cs:15:40:15:52 | {...} | MultiImplementationA.cs:15:42:15:50 | Before return ...; | | | MultiImplementationA.cs:15:42:15:50 | Before return ...; | MultiImplementationA.cs:15:49:15:49 | access to parameter s | | | MultiImplementationA.cs:15:42:15:50 | return ...; | MultiImplementationA.cs:15:36:15:38 | Normal Exit | return | | MultiImplementationA.cs:15:49:15:49 | access to parameter s | MultiImplementationA.cs:15:42:15:50 | return ...; | | -| MultiImplementationA.cs:15:54:15:56 | Entry | MultiImplementationA.cs:15:58:15:60 | {...} | | -| MultiImplementationA.cs:15:54:15:56 | Entry | MultiImplementationB.cs:13:60:13:62 | {...} | | +| MultiImplementationA.cs:15:54:15:56 | Entry | MultiImplementationA.cs:15:31:15:31 | s | | | MultiImplementationA.cs:15:54:15:56 | Normal Exit | MultiImplementationA.cs:15:54:15:56 | Exit | | +| MultiImplementationA.cs:15:54:15:56 | value | MultiImplementationA.cs:15:58:15:60 | {...} | | +| MultiImplementationA.cs:15:54:15:56 | value | MultiImplementationB.cs:13:60:13:62 | {...} | | | MultiImplementationA.cs:15:58:15:60 | {...} | MultiImplementationA.cs:15:54:15:56 | Normal Exit | | -| MultiImplementationA.cs:16:17:16:18 | Entry | MultiImplementationA.cs:17:5:19:5 | {...} | | -| MultiImplementationA.cs:16:17:16:18 | Entry | MultiImplementationB.cs:15:5:17:5 | {...} | | +| MultiImplementationA.cs:16:17:16:18 | Entry | MultiImplementationA.cs:16:24:16:24 | i | | | MultiImplementationA.cs:16:17:16:18 | Normal Exit | MultiImplementationA.cs:16:17:16:18 | Exit | | +| MultiImplementationA.cs:16:24:16:24 | i | MultiImplementationA.cs:17:5:19:5 | {...} | | +| MultiImplementationA.cs:16:24:16:24 | i | MultiImplementationB.cs:15:5:17:5 | {...} | | | MultiImplementationA.cs:17:5:19:5 | After {...} | MultiImplementationA.cs:16:17:16:18 | Normal Exit | | | MultiImplementationA.cs:17:5:19:5 | {...} | MultiImplementationA.cs:18:9:18:22 | M2(...) | | | MultiImplementationA.cs:18:9:18:22 | Entry | MultiImplementationA.cs:18:21:18:21 | 0 | | @@ -5129,13 +5257,14 @@ | MultiImplementationA.cs:20:12:20:13 | After call to method | MultiImplementationA.cs:20:12:20:13 | Before call to constructor Object | | | MultiImplementationA.cs:20:12:20:13 | Before call to constructor Object | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | | | MultiImplementationA.cs:20:12:20:13 | Before call to method | MultiImplementationA.cs:20:12:20:13 | this access | | -| MultiImplementationA.cs:20:12:20:13 | Entry | MultiImplementationA.cs:20:12:20:13 | Before call to method | | -| MultiImplementationA.cs:20:12:20:13 | Entry | MultiImplementationB.cs:18:12:18:13 | Before call to method | | +| MultiImplementationA.cs:20:12:20:13 | Entry | MultiImplementationA.cs:20:19:20:19 | i | | | MultiImplementationA.cs:20:12:20:13 | Exceptional Exit | MultiImplementationA.cs:20:12:20:13 | Exit | | | MultiImplementationA.cs:20:12:20:13 | Normal Exit | MultiImplementationA.cs:20:12:20:13 | Exit | | | MultiImplementationA.cs:20:12:20:13 | call to constructor Object | MultiImplementationA.cs:20:12:20:13 | After call to constructor Object | | | MultiImplementationA.cs:20:12:20:13 | call to method | MultiImplementationA.cs:20:12:20:13 | After call to method | | | MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | call to method | | +| MultiImplementationA.cs:20:19:20:19 | i | MultiImplementationA.cs:20:12:20:13 | Before call to method | | +| MultiImplementationA.cs:20:19:20:19 | i | MultiImplementationB.cs:18:12:18:13 | Before call to method | | | MultiImplementationA.cs:20:22:20:31 | After {...} | MultiImplementationA.cs:20:12:20:13 | Normal Exit | | | MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:24:20:29 | ...; | | | MultiImplementationA.cs:20:24:20:24 | After access to field F | MultiImplementationA.cs:20:28:20:28 | access to parameter i | | @@ -5161,10 +5290,11 @@ | MultiImplementationA.cs:22:6:22:7 | Exceptional Exit | MultiImplementationA.cs:22:6:22:7 | Exit | | | MultiImplementationA.cs:22:6:22:7 | Normal Exit | MultiImplementationA.cs:22:6:22:7 | Exit | | | MultiImplementationA.cs:22:11:22:13 | {...} | MultiImplementationA.cs:22:6:22:7 | Normal Exit | | -| MultiImplementationA.cs:23:28:23:35 | Entry | MultiImplementationA.cs:23:50:23:53 | null | | -| MultiImplementationA.cs:23:28:23:35 | Entry | MultiImplementationB.cs:21:50:21:59 | Before throw ... | | +| MultiImplementationA.cs:23:28:23:35 | Entry | MultiImplementationA.cs:23:44:23:44 | i | | | MultiImplementationA.cs:23:28:23:35 | Exceptional Exit | MultiImplementationA.cs:23:28:23:35 | Exit | | | MultiImplementationA.cs:23:28:23:35 | Normal Exit | MultiImplementationA.cs:23:28:23:35 | Exit | | +| MultiImplementationA.cs:23:44:23:44 | i | MultiImplementationA.cs:23:50:23:53 | null | | +| MultiImplementationA.cs:23:44:23:44 | i | MultiImplementationB.cs:21:50:21:59 | Before throw ... | | | MultiImplementationA.cs:23:50:23:53 | null | MultiImplementationA.cs:23:28:23:35 | Normal Exit | | | MultiImplementationA.cs:24:16:24:16 | After access to property P | MultiImplementationA.cs:24:34:24:34 | 0 | | | MultiImplementationA.cs:24:16:24:16 | Before access to property P | MultiImplementationA.cs:24:16:24:16 | this access | | @@ -5312,8 +5442,9 @@ | NullCoalescing.cs:1:7:1:20 | call to method | NullCoalescing.cs:1:7:1:20 | After call to method | | | NullCoalescing.cs:1:7:1:20 | this access | NullCoalescing.cs:1:7:1:20 | call to method | | | NullCoalescing.cs:1:7:1:20 | {...} | NullCoalescing.cs:1:7:1:20 | Normal Exit | | -| NullCoalescing.cs:3:9:3:10 | Entry | NullCoalescing.cs:3:23:3:28 | ... ?? ... | | +| NullCoalescing.cs:3:9:3:10 | Entry | NullCoalescing.cs:3:17:3:17 | i | | | NullCoalescing.cs:3:9:3:10 | Normal Exit | NullCoalescing.cs:3:9:3:10 | Exit | | +| NullCoalescing.cs:3:17:3:17 | i | NullCoalescing.cs:3:23:3:28 | ... ?? ... | | | NullCoalescing.cs:3:23:3:23 | After access to parameter i [non-null] | NullCoalescing.cs:3:23:3:28 | After ... ?? ... | | | NullCoalescing.cs:3:23:3:23 | After access to parameter i [null] | NullCoalescing.cs:3:28:3:28 | 0 | | | NullCoalescing.cs:3:23:3:23 | access to parameter i | NullCoalescing.cs:3:23:3:23 | After access to parameter i [non-null] | non-null | @@ -5321,8 +5452,9 @@ | NullCoalescing.cs:3:23:3:28 | ... ?? ... | NullCoalescing.cs:3:23:3:23 | access to parameter i | | | NullCoalescing.cs:3:23:3:28 | After ... ?? ... | NullCoalescing.cs:3:9:3:10 | Normal Exit | | | NullCoalescing.cs:3:28:3:28 | 0 | NullCoalescing.cs:3:23:3:28 | After ... ?? ... | | -| NullCoalescing.cs:5:9:5:10 | Entry | NullCoalescing.cs:5:24:5:43 | ... ? ... : ... | | +| NullCoalescing.cs:5:9:5:10 | Entry | NullCoalescing.cs:5:18:5:18 | b | | | NullCoalescing.cs:5:9:5:10 | Normal Exit | NullCoalescing.cs:5:9:5:10 | Exit | | +| NullCoalescing.cs:5:18:5:18 | b | NullCoalescing.cs:5:24:5:43 | ... ? ... : ... | | | NullCoalescing.cs:5:24:5:43 | ... ? ... : ... | NullCoalescing.cs:5:25:5:34 | ... ?? ... | | | NullCoalescing.cs:5:24:5:43 | After ... ? ... : ... | NullCoalescing.cs:5:9:5:10 | Normal Exit | | | NullCoalescing.cs:5:25:5:25 | After access to parameter b [non-null] | NullCoalescing.cs:5:25:5:34 | After ... ?? ... [false] | false | @@ -5337,8 +5469,10 @@ | NullCoalescing.cs:5:30:5:34 | false | NullCoalescing.cs:5:30:5:34 | After false [false] | false | | NullCoalescing.cs:5:39:5:39 | 0 | NullCoalescing.cs:5:24:5:43 | After ... ? ... : ... | | | NullCoalescing.cs:5:43:5:43 | 1 | NullCoalescing.cs:5:24:5:43 | After ... ? ... : ... | | -| NullCoalescing.cs:7:12:7:13 | Entry | NullCoalescing.cs:7:40:7:53 | ... ?? ... | | +| NullCoalescing.cs:7:12:7:13 | Entry | NullCoalescing.cs:7:22:7:23 | s1 | | | NullCoalescing.cs:7:12:7:13 | Normal Exit | NullCoalescing.cs:7:12:7:13 | Exit | | +| NullCoalescing.cs:7:22:7:23 | s1 | NullCoalescing.cs:7:33:7:34 | s2 | | +| NullCoalescing.cs:7:33:7:34 | s2 | NullCoalescing.cs:7:40:7:53 | ... ?? ... | | | NullCoalescing.cs:7:40:7:41 | After access to parameter s1 [non-null] | NullCoalescing.cs:7:40:7:53 | After ... ?? ... | | | NullCoalescing.cs:7:40:7:41 | After access to parameter s1 [null] | NullCoalescing.cs:7:46:7:53 | ... ?? ... | | | NullCoalescing.cs:7:40:7:41 | access to parameter s1 | NullCoalescing.cs:7:40:7:41 | After access to parameter s1 [non-null] | non-null | @@ -5352,8 +5486,10 @@ | NullCoalescing.cs:7:46:7:53 | ... ?? ... | NullCoalescing.cs:7:46:7:47 | access to parameter s2 | | | NullCoalescing.cs:7:46:7:53 | After ... ?? ... | NullCoalescing.cs:7:40:7:53 | After ... ?? ... | | | NullCoalescing.cs:7:52:7:53 | "" | NullCoalescing.cs:7:46:7:53 | After ... ?? ... | | -| NullCoalescing.cs:9:12:9:13 | Entry | NullCoalescing.cs:9:36:9:58 | ... ?? ... | | +| NullCoalescing.cs:9:12:9:13 | Entry | NullCoalescing.cs:9:20:9:20 | b | | | NullCoalescing.cs:9:12:9:13 | Normal Exit | NullCoalescing.cs:9:12:9:13 | Exit | | +| NullCoalescing.cs:9:20:9:20 | b | NullCoalescing.cs:9:30:9:30 | s | | +| NullCoalescing.cs:9:30:9:30 | s | NullCoalescing.cs:9:36:9:58 | ... ?? ... | | | NullCoalescing.cs:9:36:9:58 | ... ?? ... | NullCoalescing.cs:9:37:9:45 | ... ? ... : ... | | | NullCoalescing.cs:9:36:9:58 | After ... ?? ... | NullCoalescing.cs:9:12:9:13 | Normal Exit | | | NullCoalescing.cs:9:37:9:37 | After access to parameter b [false] | NullCoalescing.cs:9:45:9:45 | access to parameter s | | @@ -5378,8 +5514,11 @@ | NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:52 | "" | | | NullCoalescing.cs:9:51:9:58 | After ... ?? ... | NullCoalescing.cs:9:36:9:58 | After ... ?? ... | | | NullCoalescing.cs:9:57:9:58 | "" | NullCoalescing.cs:9:51:9:58 | After ... ?? ... | | -| NullCoalescing.cs:11:9:11:10 | Entry | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | | +| NullCoalescing.cs:11:9:11:10 | Entry | NullCoalescing.cs:11:18:11:19 | b1 | | | NullCoalescing.cs:11:9:11:10 | Normal Exit | NullCoalescing.cs:11:9:11:10 | Exit | | +| NullCoalescing.cs:11:18:11:19 | b1 | NullCoalescing.cs:11:27:11:28 | b2 | | +| NullCoalescing.cs:11:27:11:28 | b2 | NullCoalescing.cs:11:36:11:37 | b3 | | +| NullCoalescing.cs:11:36:11:37 | b3 | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | | | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | NullCoalescing.cs:11:44:11:59 | ... ?? ... | | | NullCoalescing.cs:11:43:11:68 | After ... ? ... : ... | NullCoalescing.cs:11:9:11:10 | Normal Exit | | | NullCoalescing.cs:11:44:11:45 | After access to parameter b1 [non-null] | NullCoalescing.cs:11:44:11:59 | After ... ?? ... [false] | false | @@ -5403,8 +5542,9 @@ | NullCoalescing.cs:11:57:11:58 | access to parameter b3 | NullCoalescing.cs:11:57:11:58 | After access to parameter b3 [true] | true | | NullCoalescing.cs:11:64:11:64 | 0 | NullCoalescing.cs:11:43:11:68 | After ... ? ... : ... | | | NullCoalescing.cs:11:68:11:68 | 1 | NullCoalescing.cs:11:43:11:68 | After ... ? ... : ... | | -| NullCoalescing.cs:13:10:13:11 | Entry | NullCoalescing.cs:14:5:18:5 | {...} | | +| NullCoalescing.cs:13:10:13:11 | Entry | NullCoalescing.cs:13:17:13:17 | i | | | NullCoalescing.cs:13:10:13:11 | Normal Exit | NullCoalescing.cs:13:10:13:11 | Exit | | +| NullCoalescing.cs:13:17:13:17 | i | NullCoalescing.cs:14:5:18:5 | {...} | | | NullCoalescing.cs:14:5:18:5 | After {...} | NullCoalescing.cs:13:10:13:11 | Normal Exit | | | NullCoalescing.cs:14:5:18:5 | {...} | NullCoalescing.cs:15:9:15:32 | ... ...; | | | NullCoalescing.cs:15:9:15:32 | ... ...; | NullCoalescing.cs:15:13:15:31 | Before Int32 j = ... | | @@ -5456,11 +5596,12 @@ | PartialImplementationA.cs:3:12:3:18 | After call to method | PartialImplementationA.cs:3:12:3:18 | Before call to constructor Object | | | PartialImplementationA.cs:3:12:3:18 | Before call to constructor Object | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | | | PartialImplementationA.cs:3:12:3:18 | Before call to method | PartialImplementationA.cs:3:12:3:18 | this access | | -| PartialImplementationA.cs:3:12:3:18 | Entry | PartialImplementationA.cs:3:12:3:18 | Before call to method | | +| PartialImplementationA.cs:3:12:3:18 | Entry | PartialImplementationA.cs:3:24:3:24 | i | | | PartialImplementationA.cs:3:12:3:18 | Normal Exit | PartialImplementationA.cs:3:12:3:18 | Exit | | | PartialImplementationA.cs:3:12:3:18 | call to constructor Object | PartialImplementationA.cs:3:12:3:18 | After call to constructor Object | | | PartialImplementationA.cs:3:12:3:18 | call to method | PartialImplementationA.cs:3:12:3:18 | After call to method | | | PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | call to method | | +| PartialImplementationA.cs:3:24:3:24 | i | PartialImplementationA.cs:3:12:3:18 | Before call to method | | | PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:12:3:18 | Normal Exit | | | PartialImplementationB.cs:3:16:3:16 | After access to field F | PartialImplementationB.cs:3:20:3:20 | 0 | | | PartialImplementationB.cs:3:16:3:16 | Before access to field F | PartialImplementationB.cs:3:16:3:16 | this access | | @@ -5667,8 +5808,9 @@ | Patterns.cs:40:9:42:9 | After switch (...) {...} | Patterns.cs:6:5:43:5 | After {...} | | | Patterns.cs:40:9:42:9 | switch (...) {...} | Patterns.cs:40:17:40:17 | access to local variable o | | | Patterns.cs:40:17:40:17 | access to local variable o | Patterns.cs:40:9:42:9 | After switch (...) {...} | | -| Patterns.cs:47:24:47:25 | Entry | Patterns.cs:48:9:48:20 | Before ... is ... | | +| Patterns.cs:47:24:47:25 | Entry | Patterns.cs:47:32:47:32 | c | | | Patterns.cs:47:24:47:25 | Normal Exit | Patterns.cs:47:24:47:25 | Exit | | +| Patterns.cs:47:32:47:32 | c | Patterns.cs:48:9:48:20 | Before ... is ... | | | Patterns.cs:48:9:48:9 | access to parameter c | Patterns.cs:48:9:48:20 | ... is ... | | | Patterns.cs:48:9:48:20 | ... is ... | Patterns.cs:48:9:48:20 | After ... is ... | | | Patterns.cs:48:9:48:20 | ... is ... | Patterns.cs:48:9:48:20 | [MatchTrue] ... is ... | true | @@ -5679,8 +5821,9 @@ | Patterns.cs:48:14:48:20 | Before not ... | Patterns.cs:48:18:48:20 | a | | | Patterns.cs:48:14:48:20 | not ... | Patterns.cs:48:14:48:20 | After not ... | | | Patterns.cs:48:18:48:20 | a | Patterns.cs:48:14:48:20 | not ... | | -| Patterns.cs:50:24:50:25 | Entry | Patterns.cs:51:9:51:39 | ... ? ... : ... | | +| Patterns.cs:50:24:50:25 | Entry | Patterns.cs:50:34:50:34 | c | | | Patterns.cs:50:24:50:25 | Normal Exit | Patterns.cs:50:24:50:25 | Exit | | +| Patterns.cs:50:34:50:34 | c | Patterns.cs:51:9:51:39 | ... ? ... : ... | | | Patterns.cs:51:9:51:9 | access to parameter c | Patterns.cs:51:9:51:21 | ... is ... | | | Patterns.cs:51:9:51:21 | ... is ... | Patterns.cs:51:9:51:21 | After ... is ... [false] | false | | Patterns.cs:51:9:51:21 | ... is ... | Patterns.cs:51:9:51:21 | [MatchTrue] ... is ... | true | @@ -5708,8 +5851,9 @@ | Patterns.cs:51:34:51:39 | Before ... is ... | Patterns.cs:51:34:51:34 | access to parameter c | | | Patterns.cs:51:34:51:39 | [MatchTrue] ... is ... | Patterns.cs:51:39:51:39 | 2 | | | Patterns.cs:51:39:51:39 | 2 | Patterns.cs:51:34:51:39 | After ... is ... | | -| Patterns.cs:53:24:53:25 | Entry | Patterns.cs:54:9:54:37 | Before ... is ... | | +| Patterns.cs:53:24:53:25 | Entry | Patterns.cs:53:34:53:34 | c | | | Patterns.cs:53:24:53:25 | Normal Exit | Patterns.cs:53:24:53:25 | Exit | | +| Patterns.cs:53:34:53:34 | c | Patterns.cs:54:9:54:37 | Before ... is ... | | | Patterns.cs:54:9:54:9 | access to parameter c | Patterns.cs:54:9:54:37 | ... is ... | | | Patterns.cs:54:9:54:37 | ... is ... | Patterns.cs:54:9:54:37 | After ... is ... | | | Patterns.cs:54:9:54:37 | ... is ... | Patterns.cs:54:9:54:37 | [MatchTrue] ... is ... | true | @@ -5728,8 +5872,9 @@ | Patterns.cs:54:27:54:35 | Before { ... } | Patterns.cs:54:33:54:33 | 1 | | | Patterns.cs:54:27:54:35 | { ... } | Patterns.cs:54:27:54:35 | After { ... } | | | Patterns.cs:54:33:54:33 | 1 | Patterns.cs:54:27:54:35 | { ... } | | -| Patterns.cs:56:26:56:27 | Entry | Patterns.cs:57:5:63:5 | {...} | | +| Patterns.cs:56:26:56:27 | Entry | Patterns.cs:56:33:56:33 | i | | | Patterns.cs:56:26:56:27 | Normal Exit | Patterns.cs:56:26:56:27 | Exit | | +| Patterns.cs:56:33:56:33 | i | Patterns.cs:57:5:63:5 | {...} | | | Patterns.cs:57:5:63:5 | {...} | Patterns.cs:58:9:62:10 | Before return ...; | | | Patterns.cs:58:9:62:10 | Before return ...; | Patterns.cs:58:16:62:9 | ... switch { ... } | | | Patterns.cs:58:9:62:10 | return ...; | Patterns.cs:56:26:56:27 | Normal Exit | return | @@ -5772,8 +5917,9 @@ | Patterns.cs:70:13:70:27 | After ... => ... [match] | Patterns.cs:70:13:70:13 | 2 | | | Patterns.cs:70:13:70:27 | After ... => ... [no-match] | Patterns.cs:67:16:71:9 | After ... switch { ... } | | | Patterns.cs:70:18:70:27 | "possible" | Patterns.cs:67:16:71:9 | After ... switch { ... } | | -| Patterns.cs:74:26:74:27 | Entry | Patterns.cs:75:5:83:5 | {...} | | +| Patterns.cs:74:26:74:27 | Entry | Patterns.cs:74:33:74:33 | i | | | Patterns.cs:74:26:74:27 | Normal Exit | Patterns.cs:74:26:74:27 | Exit | | +| Patterns.cs:74:33:74:33 | i | Patterns.cs:75:5:83:5 | {...} | | | Patterns.cs:75:5:83:5 | {...} | Patterns.cs:76:9:82:10 | Before return ...; | | | Patterns.cs:76:9:82:10 | Before return ...; | Patterns.cs:76:16:82:9 | ... switch { ... } | | | Patterns.cs:76:9:82:10 | return ...; | Patterns.cs:74:26:74:27 | Normal Exit | return | @@ -5808,8 +5954,9 @@ | Patterns.cs:81:13:81:20 | ... => ... | Patterns.cs:81:13:81:20 | After ... => ... [match] | match | | Patterns.cs:81:13:81:20 | After ... => ... [match] | Patterns.cs:81:13:81:13 | _ | | | Patterns.cs:81:18:81:20 | "0" | Patterns.cs:76:16:82:9 | After ... switch { ... } | | -| Patterns.cs:85:26:85:27 | Entry | Patterns.cs:85:39:85:69 | ... ? ... : ... | | +| Patterns.cs:85:26:85:27 | Entry | Patterns.cs:85:33:85:33 | i | | | Patterns.cs:85:26:85:27 | Normal Exit | Patterns.cs:85:26:85:27 | Exit | | +| Patterns.cs:85:33:85:33 | i | Patterns.cs:85:39:85:69 | ... ? ... : ... | | | Patterns.cs:85:39:85:39 | access to parameter i | Patterns.cs:85:39:85:53 | ... is ... | | | Patterns.cs:85:39:85:53 | ... is ... | Patterns.cs:85:39:85:53 | After ... is ... [false] | false | | Patterns.cs:85:39:85:53 | ... is ... | Patterns.cs:85:39:85:53 | [MatchTrue] ... is ... | true | @@ -5829,8 +5976,9 @@ | Patterns.cs:85:53:85:53 | 2 | Patterns.cs:85:49:85:53 | not ... | | | Patterns.cs:85:57:85:63 | "not 2" | Patterns.cs:85:39:85:69 | After ... ? ... : ... | | | Patterns.cs:85:67:85:69 | "2" | Patterns.cs:85:39:85:69 | After ... ? ... : ... | | -| Patterns.cs:87:26:87:27 | Entry | Patterns.cs:87:39:87:70 | ... ? ... : ... | | +| Patterns.cs:87:26:87:27 | Entry | Patterns.cs:87:33:87:33 | i | | | Patterns.cs:87:26:87:27 | Normal Exit | Patterns.cs:87:26:87:27 | Exit | | +| Patterns.cs:87:33:87:33 | i | Patterns.cs:87:39:87:70 | ... ? ... : ... | | | Patterns.cs:87:39:87:39 | access to parameter i | Patterns.cs:87:39:87:54 | ... is ... | | | Patterns.cs:87:39:87:54 | ... is ... | Patterns.cs:87:39:87:54 | After ... is ... [false] | false | | Patterns.cs:87:39:87:54 | ... is ... | Patterns.cs:87:39:87:54 | [MatchTrue] ... is ... | true | @@ -5892,8 +6040,9 @@ | PostDominance.cs:3:7:3:19 | call to method | PostDominance.cs:3:7:3:19 | After call to method | | | PostDominance.cs:3:7:3:19 | this access | PostDominance.cs:3:7:3:19 | call to method | | | PostDominance.cs:3:7:3:19 | {...} | PostDominance.cs:3:7:3:19 | Normal Exit | | -| PostDominance.cs:5:10:5:11 | Entry | PostDominance.cs:6:5:8:5 | {...} | | +| PostDominance.cs:5:10:5:11 | Entry | PostDominance.cs:5:20:5:20 | s | | | PostDominance.cs:5:10:5:11 | Normal Exit | PostDominance.cs:5:10:5:11 | Exit | | +| PostDominance.cs:5:20:5:20 | s | PostDominance.cs:6:5:8:5 | {...} | | | PostDominance.cs:6:5:8:5 | After {...} | PostDominance.cs:5:10:5:11 | Normal Exit | | | PostDominance.cs:6:5:8:5 | {...} | PostDominance.cs:7:9:7:29 | ...; | | | PostDominance.cs:7:9:7:28 | After call to method WriteLine | PostDominance.cs:7:9:7:29 | After ...; | | @@ -5902,8 +6051,9 @@ | PostDominance.cs:7:9:7:29 | ...; | PostDominance.cs:7:9:7:28 | Before call to method WriteLine | | | PostDominance.cs:7:9:7:29 | After ...; | PostDominance.cs:6:5:8:5 | After {...} | | | PostDominance.cs:7:27:7:27 | access to parameter s | PostDominance.cs:7:9:7:28 | call to method WriteLine | | -| PostDominance.cs:10:10:10:11 | Entry | PostDominance.cs:11:5:15:5 | {...} | | +| PostDominance.cs:10:10:10:11 | Entry | PostDominance.cs:10:20:10:20 | s | | | PostDominance.cs:10:10:10:11 | Normal Exit | PostDominance.cs:10:10:10:11 | Exit | | +| PostDominance.cs:10:20:10:20 | s | PostDominance.cs:11:5:15:5 | {...} | | | PostDominance.cs:11:5:15:5 | After {...} | PostDominance.cs:10:10:10:11 | Normal Exit | | | PostDominance.cs:11:5:15:5 | {...} | PostDominance.cs:12:9:13:19 | if (...) ... | | | PostDominance.cs:12:9:13:19 | After if (...) ... | PostDominance.cs:14:9:14:29 | ...; | | @@ -5924,9 +6074,10 @@ | PostDominance.cs:14:9:14:29 | ...; | PostDominance.cs:14:9:14:28 | Before call to method WriteLine | | | PostDominance.cs:14:9:14:29 | After ...; | PostDominance.cs:11:5:15:5 | After {...} | | | PostDominance.cs:14:27:14:27 | access to parameter s | PostDominance.cs:14:9:14:28 | call to method WriteLine | | -| PostDominance.cs:17:10:17:11 | Entry | PostDominance.cs:18:5:22:5 | {...} | | +| PostDominance.cs:17:10:17:11 | Entry | PostDominance.cs:17:20:17:20 | s | | | PostDominance.cs:17:10:17:11 | Exceptional Exit | PostDominance.cs:17:10:17:11 | Exit | | | PostDominance.cs:17:10:17:11 | Normal Exit | PostDominance.cs:17:10:17:11 | Exit | | +| PostDominance.cs:17:20:17:20 | s | PostDominance.cs:18:5:22:5 | {...} | | | PostDominance.cs:18:5:22:5 | After {...} | PostDominance.cs:17:10:17:11 | Normal Exit | | | PostDominance.cs:18:5:22:5 | {...} | PostDominance.cs:19:9:20:55 | if (...) ... | | | PostDominance.cs:19:9:20:55 | After if (...) ... | PostDominance.cs:21:9:21:29 | ...; | | @@ -6125,16 +6276,18 @@ | Switch.cs:3:7:3:12 | call to method | Switch.cs:3:7:3:12 | After call to method | | | Switch.cs:3:7:3:12 | this access | Switch.cs:3:7:3:12 | call to method | | | Switch.cs:3:7:3:12 | {...} | Switch.cs:3:7:3:12 | Normal Exit | | -| Switch.cs:5:10:5:11 | Entry | Switch.cs:6:5:8:5 | {...} | | +| Switch.cs:5:10:5:11 | Entry | Switch.cs:5:20:5:20 | o | | | Switch.cs:5:10:5:11 | Normal Exit | Switch.cs:5:10:5:11 | Exit | | +| Switch.cs:5:20:5:20 | o | Switch.cs:6:5:8:5 | {...} | | | Switch.cs:6:5:8:5 | After {...} | Switch.cs:5:10:5:11 | Normal Exit | | | Switch.cs:6:5:8:5 | {...} | Switch.cs:7:9:7:22 | switch (...) {...} | | | Switch.cs:7:9:7:22 | After switch (...) {...} | Switch.cs:6:5:8:5 | After {...} | | | Switch.cs:7:9:7:22 | switch (...) {...} | Switch.cs:7:17:7:17 | access to parameter o | | | Switch.cs:7:17:7:17 | access to parameter o | Switch.cs:7:9:7:22 | After switch (...) {...} | | -| Switch.cs:10:10:10:11 | Entry | Switch.cs:11:5:33:5 | {...} | | +| Switch.cs:10:10:10:11 | Entry | Switch.cs:10:20:10:20 | o | | | Switch.cs:10:10:10:11 | Exceptional Exit | Switch.cs:10:10:10:11 | Exit | | | Switch.cs:10:10:10:11 | Normal Exit | Switch.cs:10:10:10:11 | Exit | | +| Switch.cs:10:20:10:20 | o | Switch.cs:11:5:33:5 | {...} | | | Switch.cs:11:5:33:5 | {...} | Switch.cs:12:9:32:9 | switch (...) {...} | | | Switch.cs:12:9:32:9 | switch (...) {...} | Switch.cs:12:17:12:17 | access to parameter o | | | Switch.cs:12:17:12:17 | access to parameter o | Switch.cs:14:13:14:21 | case ...: | | @@ -6234,8 +6387,9 @@ | Switch.cs:37:9:41:9 | switch (...) {...} | Switch.cs:37:17:37:23 | Before call to method Throw | | | Switch.cs:37:17:37:23 | Before call to method Throw | Switch.cs:37:17:37:23 | call to method Throw | | | Switch.cs:37:17:37:23 | call to method Throw | Switch.cs:35:10:35:11 | Exceptional Exit | exception | -| Switch.cs:44:10:44:11 | Entry | Switch.cs:45:5:53:5 | {...} | | +| Switch.cs:44:10:44:11 | Entry | Switch.cs:44:20:44:20 | o | | | Switch.cs:44:10:44:11 | Normal Exit | Switch.cs:44:10:44:11 | Exit | | +| Switch.cs:44:20:44:20 | o | Switch.cs:45:5:53:5 | {...} | | | Switch.cs:45:5:53:5 | After {...} | Switch.cs:44:10:44:11 | Normal Exit | | | Switch.cs:45:5:53:5 | {...} | Switch.cs:46:9:52:9 | switch (...) {...} | | | Switch.cs:46:9:52:9 | After switch (...) {...} | Switch.cs:45:5:53:5 | After {...} | | @@ -6287,8 +6441,9 @@ | Switch.cs:61:18:61:18 | 3 | Switch.cs:62:17:62:22 | Before break; | | | Switch.cs:62:17:62:22 | Before break; | Switch.cs:62:17:62:22 | break; | | | Switch.cs:62:17:62:22 | break; | Switch.cs:57:9:63:9 | After switch (...) {...} | break | -| Switch.cs:66:10:66:11 | Entry | Switch.cs:67:5:75:5 | {...} | | +| Switch.cs:66:10:66:11 | Entry | Switch.cs:66:20:66:20 | s | | | Switch.cs:66:10:66:11 | Normal Exit | Switch.cs:66:10:66:11 | Exit | | +| Switch.cs:66:20:66:20 | s | Switch.cs:67:5:75:5 | {...} | | | Switch.cs:67:5:75:5 | After {...} | Switch.cs:66:10:66:11 | Normal Exit | | | Switch.cs:67:5:75:5 | {...} | Switch.cs:68:9:74:9 | switch (...) {...} | | | Switch.cs:68:9:74:9 | After switch (...) {...} | Switch.cs:67:5:75:5 | After {...} | | @@ -6311,8 +6466,10 @@ | Switch.cs:72:18:72:19 | "" | Switch.cs:73:17:73:22 | Before break; | | | Switch.cs:73:17:73:22 | Before break; | Switch.cs:73:17:73:22 | break; | | | Switch.cs:73:17:73:22 | break; | Switch.cs:68:9:74:9 | After switch (...) {...} | break | -| Switch.cs:77:10:77:11 | Entry | Switch.cs:78:5:89:5 | {...} | | +| Switch.cs:77:10:77:11 | Entry | Switch.cs:77:17:77:17 | i | | | Switch.cs:77:10:77:11 | Normal Exit | Switch.cs:77:10:77:11 | Exit | | +| Switch.cs:77:17:77:17 | i | Switch.cs:77:24:77:24 | j | | +| Switch.cs:77:24:77:24 | j | Switch.cs:78:5:89:5 | {...} | | | Switch.cs:78:5:89:5 | {...} | Switch.cs:79:9:87:9 | switch (...) {...} | | | Switch.cs:79:9:87:9 | After switch (...) {...} | Switch.cs:88:9:88:21 | Before return ...; | | | Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:79:17:79:17 | access to parameter i | | @@ -6347,8 +6504,9 @@ | Switch.cs:88:9:88:21 | Before return ...; | Switch.cs:88:16:88:20 | false | | | Switch.cs:88:9:88:21 | return ...; | Switch.cs:77:10:77:11 | Normal Exit | return | | Switch.cs:88:16:88:20 | false | Switch.cs:88:9:88:21 | return ...; | | -| Switch.cs:91:10:91:11 | Entry | Switch.cs:92:5:99:5 | {...} | | +| Switch.cs:91:10:91:11 | Entry | Switch.cs:91:20:91:20 | o | | | Switch.cs:91:10:91:11 | Normal Exit | Switch.cs:91:10:91:11 | Exit | | +| Switch.cs:91:20:91:20 | o | Switch.cs:92:5:99:5 | {...} | | | Switch.cs:92:5:99:5 | {...} | Switch.cs:93:9:97:9 | switch (...) {...} | | | Switch.cs:93:9:97:9 | After switch (...) {...} | Switch.cs:98:9:98:21 | Before return ...; | | | Switch.cs:93:9:97:9 | switch (...) {...} | Switch.cs:93:17:93:17 | access to parameter o | | @@ -6364,8 +6522,9 @@ | Switch.cs:98:9:98:21 | Before return ...; | Switch.cs:98:16:98:20 | false | | | Switch.cs:98:9:98:21 | return ...; | Switch.cs:91:10:91:11 | Normal Exit | return | | Switch.cs:98:16:98:20 | false | Switch.cs:98:9:98:21 | return ...; | | -| Switch.cs:101:9:101:10 | Entry | Switch.cs:102:5:109:5 | {...} | | +| Switch.cs:101:9:101:10 | Entry | Switch.cs:101:19:101:19 | s | | | Switch.cs:101:9:101:10 | Normal Exit | Switch.cs:101:9:101:10 | Exit | | +| Switch.cs:101:19:101:19 | s | Switch.cs:102:5:109:5 | {...} | | | Switch.cs:102:5:109:5 | {...} | Switch.cs:103:9:107:9 | switch (...) {...} | | | Switch.cs:103:9:107:9 | After switch (...) {...} | Switch.cs:108:9:108:18 | Before return ...; | | | Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:103:17:103:25 | Before access to property Length | | @@ -6405,8 +6564,9 @@ | Switch.cs:111:34:111:48 | After object creation of type Exception | Switch.cs:111:28:111:48 | throw ... | | | Switch.cs:111:34:111:48 | Before object creation of type Exception | Switch.cs:111:34:111:48 | object creation of type Exception | | | Switch.cs:111:34:111:48 | object creation of type Exception | Switch.cs:111:34:111:48 | After object creation of type Exception | | -| Switch.cs:113:9:113:11 | Entry | Switch.cs:114:5:121:5 | {...} | | +| Switch.cs:113:9:113:11 | Entry | Switch.cs:113:20:113:20 | s | | | Switch.cs:113:9:113:11 | Normal Exit | Switch.cs:113:9:113:11 | Exit | | +| Switch.cs:113:20:113:20 | s | Switch.cs:114:5:121:5 | {...} | | | Switch.cs:114:5:121:5 | {...} | Switch.cs:115:9:119:9 | switch (...) {...} | | | Switch.cs:115:9:119:9 | After switch (...) {...} | Switch.cs:120:9:120:18 | Before return ...; | | | Switch.cs:115:9:119:9 | switch (...) {...} | Switch.cs:115:17:115:24 | Before access to property Length | | @@ -6450,8 +6610,9 @@ | Switch.cs:120:16:120:17 | After -... | Switch.cs:120:9:120:18 | return ...; | | | Switch.cs:120:16:120:17 | Before -... | Switch.cs:120:17:120:17 | 1 | | | Switch.cs:120:17:120:17 | 1 | Switch.cs:120:16:120:17 | -... | | -| Switch.cs:123:10:123:12 | Entry | Switch.cs:124:5:127:5 | {...} | | +| Switch.cs:123:10:123:12 | Entry | Switch.cs:123:21:123:21 | o | | | Switch.cs:123:10:123:12 | Normal Exit | Switch.cs:123:10:123:12 | Exit | | +| Switch.cs:123:21:123:21 | o | Switch.cs:124:5:127:5 | {...} | | | Switch.cs:124:5:127:5 | After {...} | Switch.cs:123:10:123:12 | Normal Exit | | | Switch.cs:124:5:127:5 | {...} | Switch.cs:125:9:126:19 | if (...) ... | | | Switch.cs:125:9:126:19 | After if (...) ... | Switch.cs:124:5:127:5 | After {...} | | @@ -6474,8 +6635,9 @@ | Switch.cs:125:42:125:46 | false | Switch.cs:125:13:125:48 | After ... switch { ... } [true] | true | | Switch.cs:126:13:126:19 | Before return ...; | Switch.cs:126:13:126:19 | return ...; | | | Switch.cs:126:13:126:19 | return ...; | Switch.cs:123:10:123:12 | Normal Exit | return | -| Switch.cs:129:12:129:14 | Entry | Switch.cs:130:5:132:5 | {...} | | +| Switch.cs:129:12:129:14 | Entry | Switch.cs:129:23:129:23 | o | | | Switch.cs:129:12:129:14 | Normal Exit | Switch.cs:129:12:129:14 | Exit | | +| Switch.cs:129:23:129:23 | o | Switch.cs:130:5:132:5 | {...} | | | Switch.cs:130:5:132:5 | {...} | Switch.cs:131:9:131:67 | Before return ...; | | | Switch.cs:131:9:131:67 | Before return ...; | Switch.cs:131:16:131:66 | Before call to method ToString | | | Switch.cs:131:9:131:67 | return ...; | Switch.cs:129:12:129:14 | Normal Exit | return | @@ -6498,8 +6660,9 @@ | Switch.cs:131:43:131:51 | After ... => ... [match] | Switch.cs:131:43:131:43 | _ | | | Switch.cs:131:48:131:51 | null | Switch.cs:131:17:131:53 | After ... switch { ... } [non-null] | non-null | | Switch.cs:131:48:131:51 | null | Switch.cs:131:17:131:53 | After ... switch { ... } [null] | null | -| Switch.cs:134:9:134:11 | Entry | Switch.cs:135:5:142:5 | {...} | | +| Switch.cs:134:9:134:11 | Entry | Switch.cs:134:17:134:17 | i | | | Switch.cs:134:9:134:11 | Normal Exit | Switch.cs:134:9:134:11 | Exit | | +| Switch.cs:134:17:134:17 | i | Switch.cs:135:5:142:5 | {...} | | | Switch.cs:135:5:142:5 | {...} | Switch.cs:136:9:141:9 | switch (...) {...} | | | Switch.cs:136:9:141:9 | switch (...) {...} | Switch.cs:136:17:136:17 | access to parameter i | | | Switch.cs:136:17:136:17 | access to parameter i | Switch.cs:139:13:139:19 | case ...: | | @@ -6527,8 +6690,9 @@ | Switch.cs:140:21:140:29 | Before return ...; | Switch.cs:140:28:140:28 | 2 | | | Switch.cs:140:21:140:29 | return ...; | Switch.cs:134:9:134:11 | Normal Exit | return | | Switch.cs:140:28:140:28 | 2 | Switch.cs:140:21:140:29 | return ...; | | -| Switch.cs:144:9:144:11 | Entry | Switch.cs:145:5:152:5 | {...} | | +| Switch.cs:144:9:144:11 | Entry | Switch.cs:144:17:144:17 | i | | | Switch.cs:144:9:144:11 | Normal Exit | Switch.cs:144:9:144:11 | Exit | | +| Switch.cs:144:17:144:17 | i | Switch.cs:145:5:152:5 | {...} | | | Switch.cs:145:5:152:5 | {...} | Switch.cs:146:9:151:9 | switch (...) {...} | | | Switch.cs:146:9:151:9 | switch (...) {...} | Switch.cs:146:17:146:17 | access to parameter i | | | Switch.cs:146:17:146:17 | access to parameter i | Switch.cs:148:13:148:19 | case ...: | | @@ -6556,8 +6720,9 @@ | Switch.cs:150:21:150:29 | Before return ...; | Switch.cs:150:28:150:28 | 2 | | | Switch.cs:150:21:150:29 | return ...; | Switch.cs:144:9:144:11 | Normal Exit | return | | Switch.cs:150:28:150:28 | 2 | Switch.cs:150:21:150:29 | return ...; | | -| Switch.cs:154:10:154:12 | Entry | Switch.cs:155:5:161:5 | {...} | | +| Switch.cs:154:10:154:12 | Entry | Switch.cs:154:19:154:19 | b | | | Switch.cs:154:10:154:12 | Normal Exit | Switch.cs:154:10:154:12 | Exit | | +| Switch.cs:154:19:154:19 | b | Switch.cs:155:5:161:5 | {...} | | | Switch.cs:155:5:161:5 | After {...} | Switch.cs:154:10:154:12 | Normal Exit | | | Switch.cs:155:5:161:5 | {...} | Switch.cs:156:9:156:55 | ... ...; | | | Switch.cs:156:9:156:55 | ... ...; | Switch.cs:156:13:156:54 | Before String s = ... | | @@ -6613,8 +6778,9 @@ | Switch.cs:160:44:160:46 | Before {...} | Switch.cs:160:45:160:45 | access to local variable s | | | Switch.cs:160:44:160:46 | {...} | Switch.cs:160:44:160:46 | After {...} | | | Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:44:160:46 | {...} | | -| Switch.cs:163:10:163:12 | Entry | Switch.cs:164:5:178:5 | {...} | | +| Switch.cs:163:10:163:12 | Entry | Switch.cs:163:18:163:18 | i | | | Switch.cs:163:10:163:12 | Normal Exit | Switch.cs:163:10:163:12 | Exit | | +| Switch.cs:163:18:163:18 | i | Switch.cs:164:5:178:5 | {...} | | | Switch.cs:164:5:178:5 | After {...} | Switch.cs:163:10:163:12 | Normal Exit | | | Switch.cs:164:5:178:5 | {...} | Switch.cs:165:9:177:9 | switch (...) {...} | | | Switch.cs:165:9:177:9 | After switch (...) {...} | Switch.cs:164:5:178:5 | After {...} | | @@ -6671,8 +6837,9 @@ | TypeAccesses.cs:1:7:1:18 | call to method | TypeAccesses.cs:1:7:1:18 | After call to method | | | TypeAccesses.cs:1:7:1:18 | this access | TypeAccesses.cs:1:7:1:18 | call to method | | | TypeAccesses.cs:1:7:1:18 | {...} | TypeAccesses.cs:1:7:1:18 | Normal Exit | | -| TypeAccesses.cs:3:10:3:10 | Entry | TypeAccesses.cs:4:5:9:5 | {...} | | +| TypeAccesses.cs:3:10:3:10 | Entry | TypeAccesses.cs:3:19:3:19 | o | | | TypeAccesses.cs:3:10:3:10 | Normal Exit | TypeAccesses.cs:3:10:3:10 | Exit | | +| TypeAccesses.cs:3:19:3:19 | o | TypeAccesses.cs:4:5:9:5 | {...} | | | TypeAccesses.cs:4:5:9:5 | After {...} | TypeAccesses.cs:3:10:3:10 | Normal Exit | | | TypeAccesses.cs:4:5:9:5 | {...} | TypeAccesses.cs:5:9:5:26 | ... ...; | | | TypeAccesses.cs:5:9:5:26 | ... ...; | TypeAccesses.cs:5:13:5:25 | Before String s = ... | | @@ -6723,8 +6890,9 @@ | VarDecls.cs:3:7:3:14 | call to method | VarDecls.cs:3:7:3:14 | After call to method | | | VarDecls.cs:3:7:3:14 | this access | VarDecls.cs:3:7:3:14 | call to method | | | VarDecls.cs:3:7:3:14 | {...} | VarDecls.cs:3:7:3:14 | Normal Exit | | -| VarDecls.cs:5:18:5:19 | Entry | VarDecls.cs:6:5:11:5 | {...} | | +| VarDecls.cs:5:18:5:19 | Entry | VarDecls.cs:5:30:5:36 | strings | | | VarDecls.cs:5:18:5:19 | Normal Exit | VarDecls.cs:5:18:5:19 | Exit | | +| VarDecls.cs:5:30:5:36 | strings | VarDecls.cs:6:5:11:5 | {...} | | | VarDecls.cs:6:5:11:5 | {...} | VarDecls.cs:7:9:10:9 | fixed(...) { ... } | | | VarDecls.cs:7:9:10:9 | fixed(...) { ... } | VarDecls.cs:7:22:7:36 | Before Char* c1 = ... | | | VarDecls.cs:7:22:7:23 | access to local variable c1 | VarDecls.cs:7:27:7:36 | Before (...) ... | | @@ -6758,8 +6926,9 @@ | VarDecls.cs:9:20:9:28 | After (...) ... | VarDecls.cs:9:13:9:29 | return ...; | | | VarDecls.cs:9:20:9:28 | Before (...) ... | VarDecls.cs:9:27:9:28 | access to local variable c1 | | | VarDecls.cs:9:27:9:28 | access to local variable c1 | VarDecls.cs:9:20:9:28 | (...) ... | | -| VarDecls.cs:13:12:13:13 | Entry | VarDecls.cs:14:5:17:5 | {...} | | +| VarDecls.cs:13:12:13:13 | Entry | VarDecls.cs:13:22:13:22 | s | | | VarDecls.cs:13:12:13:13 | Normal Exit | VarDecls.cs:13:12:13:13 | Exit | | +| VarDecls.cs:13:22:13:22 | s | VarDecls.cs:14:5:17:5 | {...} | | | VarDecls.cs:14:5:17:5 | {...} | VarDecls.cs:15:9:15:30 | ... ...; | | | VarDecls.cs:15:9:15:30 | ... ...; | VarDecls.cs:15:16:15:21 | Before String s1 = ... | | | VarDecls.cs:15:9:15:30 | After ... ...; | VarDecls.cs:16:9:16:23 | Before return ...; | | @@ -6780,8 +6949,9 @@ | VarDecls.cs:16:16:16:22 | After ... + ... | VarDecls.cs:16:9:16:23 | return ...; | | | VarDecls.cs:16:16:16:22 | Before ... + ... | VarDecls.cs:16:16:16:17 | access to local variable s1 | | | VarDecls.cs:16:21:16:22 | access to local variable s2 | VarDecls.cs:16:16:16:22 | ... + ... | | -| VarDecls.cs:19:7:19:8 | Entry | VarDecls.cs:20:5:26:5 | {...} | | +| VarDecls.cs:19:7:19:8 | Entry | VarDecls.cs:19:15:19:15 | b | | | VarDecls.cs:19:7:19:8 | Normal Exit | VarDecls.cs:19:7:19:8 | Exit | | +| VarDecls.cs:19:15:19:15 | b | VarDecls.cs:20:5:26:5 | {...} | | | VarDecls.cs:20:5:26:5 | {...} | VarDecls.cs:21:9:22:13 | using (...) {...} | | | VarDecls.cs:21:9:22:13 | After using (...) {...} | VarDecls.cs:24:9:25:29 | using (...) {...} | | | VarDecls.cs:21:9:22:13 | using (...) {...} | VarDecls.cs:21:16:21:22 | Before object creation of type C | | @@ -6827,8 +6997,9 @@ | VarDecls.cs:28:41:28:47 | Entry | VarDecls.cs:28:51:28:53 | {...} | | | VarDecls.cs:28:41:28:47 | Normal Exit | VarDecls.cs:28:41:28:47 | Exit | | | VarDecls.cs:28:51:28:53 | {...} | VarDecls.cs:28:41:28:47 | Normal Exit | | -| cflow.cs:5:17:5:20 | Entry | cflow.cs:6:5:35:5 | {...} | | +| cflow.cs:5:17:5:20 | Entry | cflow.cs:5:31:5:34 | args | | | cflow.cs:5:17:5:20 | Normal Exit | cflow.cs:5:17:5:20 | Exit | | +| cflow.cs:5:31:5:34 | args | cflow.cs:6:5:35:5 | {...} | | | cflow.cs:6:5:35:5 | After {...} | cflow.cs:5:17:5:20 | Normal Exit | | | cflow.cs:6:5:35:5 | {...} | cflow.cs:7:9:7:28 | ... ...; | | | cflow.cs:7:9:7:28 | ... ...; | cflow.cs:7:13:7:27 | Before Int32 a = ... | | @@ -7016,9 +7187,10 @@ | cflow.cs:33:17:33:37 | ...; | cflow.cs:33:17:33:36 | Before call to method WriteLine | | | cflow.cs:33:17:33:37 | After ...; | cflow.cs:30:18:33:37 | After if (...) ... | | | cflow.cs:33:35:33:35 | access to local variable i | cflow.cs:33:17:33:36 | call to method WriteLine | | -| cflow.cs:37:17:37:22 | Entry | cflow.cs:38:5:68:5 | {...} | | +| cflow.cs:37:17:37:22 | Entry | cflow.cs:37:28:37:28 | a | | | cflow.cs:37:17:37:22 | Exceptional Exit | cflow.cs:37:17:37:22 | Exit | | | cflow.cs:37:17:37:22 | Normal Exit | cflow.cs:37:17:37:22 | Exit | | +| cflow.cs:37:28:37:28 | a | cflow.cs:38:5:68:5 | {...} | | | cflow.cs:38:5:68:5 | {...} | cflow.cs:39:9:50:9 | switch (...) {...} | | | cflow.cs:39:9:50:9 | After switch (...) {...} | cflow.cs:51:9:59:9 | switch (...) {...} | | | cflow.cs:39:9:50:9 | switch (...) {...} | cflow.cs:39:17:39:17 | access to parameter a | | @@ -7129,8 +7301,9 @@ | cflow.cs:67:9:67:17 | Before return ...; | cflow.cs:67:16:67:16 | access to parameter a | | | cflow.cs:67:9:67:17 | return ...; | cflow.cs:37:17:37:22 | Normal Exit | return | | cflow.cs:67:16:67:16 | access to parameter a | cflow.cs:67:9:67:17 | return ...; | | -| cflow.cs:70:18:70:18 | Entry | cflow.cs:71:5:82:5 | {...} | | +| cflow.cs:70:18:70:18 | Entry | cflow.cs:70:27:70:27 | s | | | cflow.cs:70:18:70:18 | Normal Exit | cflow.cs:70:18:70:18 | Exit | | +| cflow.cs:70:27:70:27 | s | cflow.cs:71:5:82:5 | {...} | | | cflow.cs:71:5:82:5 | After {...} | cflow.cs:70:18:70:18 | Normal Exit | | | cflow.cs:71:5:82:5 | {...} | cflow.cs:72:9:73:19 | if (...) ... | | | cflow.cs:72:9:73:19 | After if (...) ... | cflow.cs:74:9:81:9 | if (...) ... | | @@ -7172,8 +7345,9 @@ | cflow.cs:80:13:80:48 | ...; | cflow.cs:80:13:80:47 | Before call to method WriteLine | | | cflow.cs:80:13:80:48 | After ...; | cflow.cs:79:9:81:9 | After {...} | | | cflow.cs:80:31:80:46 | "" | cflow.cs:80:13:80:47 | call to method WriteLine | | -| cflow.cs:84:18:84:19 | Entry | cflow.cs:85:5:88:5 | {...} | | +| cflow.cs:84:18:84:19 | Entry | cflow.cs:84:28:84:28 | s | | | cflow.cs:84:18:84:19 | Normal Exit | cflow.cs:84:18:84:19 | Exit | | +| cflow.cs:84:28:84:28 | s | cflow.cs:85:5:88:5 | {...} | | | cflow.cs:85:5:88:5 | After {...} | cflow.cs:84:18:84:19 | Normal Exit | | | cflow.cs:85:5:88:5 | {...} | cflow.cs:86:9:87:33 | if (...) ... | | | cflow.cs:86:9:87:33 | After if (...) ... | cflow.cs:85:5:88:5 | After {...} | | @@ -7204,9 +7378,10 @@ | cflow.cs:87:13:87:33 | ...; | cflow.cs:87:13:87:32 | Before call to method WriteLine | | | cflow.cs:87:13:87:33 | After ...; | cflow.cs:86:9:87:33 | After if (...) ... | | | cflow.cs:87:31:87:31 | access to parameter s | cflow.cs:87:13:87:32 | call to method WriteLine | | -| cflow.cs:90:18:90:19 | Entry | cflow.cs:91:5:104:5 | {...} | | +| cflow.cs:90:18:90:19 | Entry | cflow.cs:90:28:90:28 | s | | | cflow.cs:90:18:90:19 | Exceptional Exit | cflow.cs:90:18:90:19 | Exit | | | cflow.cs:90:18:90:19 | Normal Exit | cflow.cs:90:18:90:19 | Exit | | +| cflow.cs:90:28:90:28 | s | cflow.cs:91:5:104:5 | {...} | | | cflow.cs:91:5:104:5 | After {...} | cflow.cs:90:18:90:19 | Normal Exit | | | cflow.cs:91:5:104:5 | {...} | cflow.cs:92:9:93:49 | if (...) ... | | | cflow.cs:92:9:93:49 | After if (...) ... | cflow.cs:94:9:94:29 | ...; | | @@ -7295,8 +7470,9 @@ | cflow.cs:103:31:103:34 | Before access to property Prop | cflow.cs:103:31:103:34 | this access | | | cflow.cs:103:31:103:34 | access to property Prop | cflow.cs:103:31:103:34 | After access to property Prop | | | cflow.cs:103:31:103:34 | this access | cflow.cs:103:31:103:34 | access to property Prop | | -| cflow.cs:106:18:106:19 | Entry | cflow.cs:107:5:117:5 | {...} | | +| cflow.cs:106:18:106:19 | Entry | cflow.cs:106:28:106:28 | s | | | cflow.cs:106:18:106:19 | Normal Exit | cflow.cs:106:18:106:19 | Exit | | +| cflow.cs:106:28:106:28 | s | cflow.cs:107:5:117:5 | {...} | | | cflow.cs:107:5:117:5 | After {...} | cflow.cs:106:18:106:19 | Normal Exit | | | cflow.cs:107:5:117:5 | {...} | cflow.cs:108:9:115:9 | if (...) ... | | | cflow.cs:108:9:115:9 | After if (...) ... | cflow.cs:116:9:116:29 | ...; | | @@ -7327,8 +7503,9 @@ | cflow.cs:116:9:116:29 | ...; | cflow.cs:116:9:116:28 | Before call to method WriteLine | | | cflow.cs:116:9:116:29 | After ...; | cflow.cs:107:5:117:5 | After {...} | | | cflow.cs:116:27:116:27 | access to parameter s | cflow.cs:116:9:116:28 | call to method WriteLine | | -| cflow.cs:119:20:119:21 | Entry | cflow.cs:120:5:124:5 | {...} | | +| cflow.cs:119:20:119:21 | Entry | cflow.cs:119:30:119:30 | s | | | cflow.cs:119:20:119:21 | Normal Exit | cflow.cs:119:20:119:21 | Exit | | +| cflow.cs:119:30:119:30 | s | cflow.cs:120:5:124:5 | {...} | | | cflow.cs:120:5:124:5 | {...} | cflow.cs:121:9:121:18 | ... ...; | | | cflow.cs:121:9:121:18 | ... ...; | cflow.cs:121:13:121:17 | Before String x = ... | | | cflow.cs:121:9:121:18 | After ... ...; | cflow.cs:122:9:122:20 | ...; | | @@ -7373,8 +7550,9 @@ | cflow.cs:127:53:127:57 | Before access to field Field | cflow.cs:127:53:127:57 | this access | | | cflow.cs:127:53:127:57 | access to field Field | cflow.cs:127:53:127:57 | After access to field Field | | | cflow.cs:127:53:127:57 | this access | cflow.cs:127:53:127:57 | access to field Field | | -| cflow.cs:127:62:127:64 | Entry | cflow.cs:127:66:127:83 | {...} | | +| cflow.cs:127:62:127:64 | Entry | cflow.cs:127:62:127:64 | value | | | cflow.cs:127:62:127:64 | Normal Exit | cflow.cs:127:62:127:64 | Exit | | +| cflow.cs:127:62:127:64 | value | cflow.cs:127:66:127:83 | {...} | | | cflow.cs:127:66:127:83 | After {...} | cflow.cs:127:62:127:64 | Normal Exit | | | cflow.cs:127:66:127:83 | {...} | cflow.cs:127:68:127:81 | ...; | | | cflow.cs:127:68:127:72 | After access to field Field | cflow.cs:127:76:127:80 | access to parameter value | | @@ -7391,11 +7569,12 @@ | cflow.cs:129:5:129:15 | After call to method | cflow.cs:129:5:129:15 | Before call to constructor Object | | | cflow.cs:129:5:129:15 | Before call to constructor Object | cflow.cs:129:5:129:15 | call to constructor Object | | | cflow.cs:129:5:129:15 | Before call to method | cflow.cs:129:5:129:15 | this access | | -| cflow.cs:129:5:129:15 | Entry | cflow.cs:129:5:129:15 | Before call to method | | +| cflow.cs:129:5:129:15 | Entry | cflow.cs:129:24:129:24 | s | | | cflow.cs:129:5:129:15 | Normal Exit | cflow.cs:129:5:129:15 | Exit | | | cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:129:5:129:15 | After call to constructor Object | | | cflow.cs:129:5:129:15 | call to method | cflow.cs:129:5:129:15 | After call to method | | | cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | call to method | | +| cflow.cs:129:24:129:24 | s | cflow.cs:129:5:129:15 | Before call to method | | | cflow.cs:130:5:132:5 | After {...} | cflow.cs:129:5:129:15 | Normal Exit | | | cflow.cs:130:5:132:5 | {...} | cflow.cs:131:9:131:18 | ...; | | | cflow.cs:131:9:131:13 | After access to field Field | cflow.cs:131:17:131:17 | access to parameter s | | @@ -7408,8 +7587,9 @@ | cflow.cs:131:9:131:18 | ...; | cflow.cs:131:9:131:17 | Before ... = ... | | | cflow.cs:131:9:131:18 | After ...; | cflow.cs:130:5:132:5 | After {...} | | | cflow.cs:131:17:131:17 | access to parameter s | cflow.cs:131:9:131:17 | ... = ... | | -| cflow.cs:134:5:134:15 | Entry | cflow.cs:134:26:134:29 | Before call to constructor ControlFlow | | +| cflow.cs:134:5:134:15 | Entry | cflow.cs:134:21:134:21 | i | | | cflow.cs:134:5:134:15 | Normal Exit | cflow.cs:134:5:134:15 | Exit | | +| cflow.cs:134:21:134:21 | i | cflow.cs:134:26:134:29 | Before call to constructor ControlFlow | | | cflow.cs:134:26:134:29 | After call to constructor ControlFlow | cflow.cs:134:39:134:41 | {...} | | | cflow.cs:134:26:134:29 | Before call to constructor ControlFlow | cflow.cs:134:31:134:36 | Before ... + ... | | | cflow.cs:134:26:134:29 | call to constructor ControlFlow | cflow.cs:134:26:134:29 | After call to constructor ControlFlow | | @@ -7433,8 +7613,10 @@ | cflow.cs:136:33:136:37 | Before ... + ... | cflow.cs:136:33:136:33 | 0 | | | cflow.cs:136:37:136:37 | 1 | cflow.cs:136:33:136:37 | ... + ... | | | cflow.cs:136:40:136:42 | {...} | cflow.cs:136:12:136:22 | Normal Exit | | -| cflow.cs:138:40:138:40 | Entry | cflow.cs:139:5:142:5 | {...} | | +| cflow.cs:138:40:138:40 | Entry | cflow.cs:138:54:138:54 | x | | | cflow.cs:138:40:138:40 | Normal Exit | cflow.cs:138:40:138:40 | Exit | | +| cflow.cs:138:54:138:54 | x | cflow.cs:138:69:138:69 | y | | +| cflow.cs:138:69:138:69 | y | cflow.cs:139:5:142:5 | {...} | | | cflow.cs:139:5:142:5 | {...} | cflow.cs:140:9:140:29 | ...; | | | cflow.cs:140:9:140:28 | After call to method WriteLine | cflow.cs:140:9:140:29 | After ...; | | | cflow.cs:140:9:140:28 | Before call to method WriteLine | cflow.cs:140:27:140:27 | access to parameter x | | @@ -7445,7 +7627,9 @@ | cflow.cs:141:9:141:17 | Before return ...; | cflow.cs:141:16:141:16 | access to parameter y | | | cflow.cs:141:9:141:17 | return ...; | cflow.cs:138:40:138:40 | Normal Exit | return | | cflow.cs:141:16:141:16 | access to parameter y | cflow.cs:141:9:141:17 | return ...; | | -| cflow.cs:144:33:144:35 | Entry | cflow.cs:144:37:144:54 | {...} | | +| cflow.cs:144:28:144:28 | i | cflow.cs:144:37:144:54 | {...} | | +| cflow.cs:144:28:144:28 | i | cflow.cs:144:56:144:58 | value | | +| cflow.cs:144:33:144:35 | Entry | cflow.cs:144:28:144:28 | i | | | cflow.cs:144:33:144:35 | Normal Exit | cflow.cs:144:33:144:35 | Exit | | | cflow.cs:144:37:144:54 | {...} | cflow.cs:144:39:144:52 | Before return ...; | | | cflow.cs:144:39:144:52 | Before return ...; | cflow.cs:144:46:144:51 | Before ... + ... | | @@ -7458,8 +7642,9 @@ | cflow.cs:144:46:144:51 | After ... + ... | cflow.cs:144:39:144:52 | return ...; | | | cflow.cs:144:46:144:51 | Before ... + ... | cflow.cs:144:46:144:46 | Before (...) ... | | | cflow.cs:144:50:144:51 | "" | cflow.cs:144:46:144:51 | ... + ... | | -| cflow.cs:144:56:144:58 | Entry | cflow.cs:144:60:144:62 | {...} | | +| cflow.cs:144:56:144:58 | Entry | cflow.cs:144:28:144:28 | i | | | cflow.cs:144:56:144:58 | Normal Exit | cflow.cs:144:56:144:58 | Exit | | +| cflow.cs:144:56:144:58 | value | cflow.cs:144:60:144:62 | {...} | | | cflow.cs:144:60:144:62 | {...} | cflow.cs:144:56:144:58 | Normal Exit | | | cflow.cs:146:10:146:12 | Entry | cflow.cs:147:5:177:5 | {...} | | | cflow.cs:146:10:146:12 | Normal Exit | cflow.cs:146:10:146:12 | Exit | | @@ -7624,8 +7809,9 @@ | cflow.cs:181:24:181:37 | After Func y = ... | cflow.cs:181:9:181:38 | After ... ...; | | | cflow.cs:181:24:181:37 | Before Func y = ... | cflow.cs:181:24:181:24 | access to local variable y | | | cflow.cs:181:24:181:37 | Func y = ... | cflow.cs:181:24:181:37 | After Func y = ... | | +| cflow.cs:181:28:181:28 | x | cflow.cs:181:33:181:37 | Before ... + ... | | | cflow.cs:181:28:181:37 | (...) => ... | cflow.cs:181:24:181:37 | Func y = ... | | -| cflow.cs:181:28:181:37 | Entry | cflow.cs:181:33:181:37 | Before ... + ... | | +| cflow.cs:181:28:181:37 | Entry | cflow.cs:181:28:181:28 | x | | | cflow.cs:181:28:181:37 | Normal Exit | cflow.cs:181:28:181:37 | Exit | | | cflow.cs:181:33:181:33 | access to parameter x | cflow.cs:181:37:181:37 | 1 | | | cflow.cs:181:33:181:37 | ... + ... | cflow.cs:181:33:181:37 | After ... + ... | | @@ -7638,9 +7824,10 @@ | cflow.cs:182:24:182:61 | After Func z = ... | cflow.cs:182:9:182:62 | After ... ...; | | | cflow.cs:182:24:182:61 | Before Func z = ... | cflow.cs:182:24:182:24 | access to local variable z | | | cflow.cs:182:24:182:61 | Func z = ... | cflow.cs:182:24:182:61 | After Func z = ... | | -| cflow.cs:182:28:182:61 | Entry | cflow.cs:182:45:182:61 | {...} | | +| cflow.cs:182:28:182:61 | Entry | cflow.cs:182:42:182:42 | x | | | cflow.cs:182:28:182:61 | Normal Exit | cflow.cs:182:28:182:61 | Exit | | | cflow.cs:182:28:182:61 | delegate(...) { ... } | cflow.cs:182:24:182:61 | Func z = ... | | +| cflow.cs:182:42:182:42 | x | cflow.cs:182:45:182:61 | {...} | | | cflow.cs:182:45:182:61 | {...} | cflow.cs:182:47:182:59 | Before return ...; | | | cflow.cs:182:47:182:59 | Before return ...; | cflow.cs:182:54:182:58 | Before ... + ... | | | cflow.cs:182:47:182:59 | return ...; | cflow.cs:182:28:182:61 | Normal Exit | return | @@ -8130,14 +8317,16 @@ | cflow.cs:282:24:282:27 | Before call to constructor ControlFlow | cflow.cs:282:24:282:27 | call to constructor ControlFlow | | | cflow.cs:282:24:282:27 | call to constructor ControlFlow | cflow.cs:282:24:282:27 | After call to constructor ControlFlow | | | cflow.cs:282:31:282:33 | {...} | cflow.cs:282:5:282:18 | Normal Exit | | -| cflow.cs:284:5:284:18 | Entry | cflow.cs:284:32:284:35 | Before call to constructor ControlFlowSub | | +| cflow.cs:284:5:284:18 | Entry | cflow.cs:284:27:284:27 | s | | | cflow.cs:284:5:284:18 | Normal Exit | cflow.cs:284:5:284:18 | Exit | | +| cflow.cs:284:27:284:27 | s | cflow.cs:284:32:284:35 | Before call to constructor ControlFlowSub | | | cflow.cs:284:32:284:35 | After call to constructor ControlFlowSub | cflow.cs:284:39:284:41 | {...} | | | cflow.cs:284:32:284:35 | Before call to constructor ControlFlowSub | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub | | | cflow.cs:284:32:284:35 | call to constructor ControlFlowSub | cflow.cs:284:32:284:35 | After call to constructor ControlFlowSub | | | cflow.cs:284:39:284:41 | {...} | cflow.cs:284:5:284:18 | Normal Exit | | -| cflow.cs:286:5:286:18 | Entry | cflow.cs:286:29:286:32 | Before call to constructor ControlFlowSub | | +| cflow.cs:286:5:286:18 | Entry | cflow.cs:286:24:286:24 | i | | | cflow.cs:286:5:286:18 | Normal Exit | cflow.cs:286:5:286:18 | Exit | | +| cflow.cs:286:24:286:24 | i | cflow.cs:286:29:286:32 | Before call to constructor ControlFlowSub | | | cflow.cs:286:29:286:32 | After call to constructor ControlFlowSub | cflow.cs:286:48:286:50 | {...} | | | cflow.cs:286:29:286:32 | Before call to constructor ControlFlowSub | cflow.cs:286:34:286:45 | Before call to method ToString | | | cflow.cs:286:29:286:32 | call to constructor ControlFlowSub | cflow.cs:286:29:286:32 | After call to constructor ControlFlowSub | | @@ -8156,8 +8345,9 @@ | cflow.cs:289:7:289:18 | call to method | cflow.cs:289:7:289:18 | After call to method | | | cflow.cs:289:7:289:18 | this access | cflow.cs:289:7:289:18 | call to method | | | cflow.cs:289:7:289:18 | {...} | cflow.cs:289:7:289:18 | Normal Exit | | -| cflow.cs:291:12:291:12 | Entry | cflow.cs:291:38:291:41 | Before delegate call | | +| cflow.cs:291:12:291:12 | Entry | cflow.cs:291:32:291:32 | f | | | cflow.cs:291:12:291:12 | Normal Exit | cflow.cs:291:12:291:12 | Exit | | +| cflow.cs:291:32:291:32 | f | cflow.cs:291:38:291:41 | Before delegate call | | | cflow.cs:291:38:291:38 | access to parameter f | cflow.cs:291:40:291:40 | 0 | | | cflow.cs:291:38:291:41 | After delegate call | cflow.cs:291:12:291:12 | Normal Exit | | | cflow.cs:291:38:291:41 | Before delegate call | cflow.cs:291:38:291:38 | access to parameter f | | @@ -8167,14 +8357,20 @@ | cflow.cs:296:5:296:25 | After call to method | cflow.cs:296:5:296:25 | Before call to constructor Object | | | cflow.cs:296:5:296:25 | Before call to constructor Object | cflow.cs:296:5:296:25 | call to constructor Object | | | cflow.cs:296:5:296:25 | Before call to method | cflow.cs:296:5:296:25 | this access | | -| cflow.cs:296:5:296:25 | Entry | cflow.cs:296:5:296:25 | Before call to method | | +| cflow.cs:296:5:296:25 | Entry | cflow.cs:296:32:296:32 | b | | | cflow.cs:296:5:296:25 | Normal Exit | cflow.cs:296:5:296:25 | Exit | | | cflow.cs:296:5:296:25 | call to constructor Object | cflow.cs:296:5:296:25 | After call to constructor Object | | | cflow.cs:296:5:296:25 | call to method | cflow.cs:296:5:296:25 | After call to method | | | cflow.cs:296:5:296:25 | this access | cflow.cs:296:5:296:25 | call to method | | +| cflow.cs:296:32:296:32 | b | cflow.cs:296:39:296:39 | i | | +| cflow.cs:296:39:296:39 | i | cflow.cs:296:49:296:49 | s | | +| cflow.cs:296:49:296:49 | s | cflow.cs:296:5:296:25 | Before call to method | | | cflow.cs:296:52:296:54 | {...} | cflow.cs:296:5:296:25 | Normal Exit | | -| cflow.cs:298:10:298:10 | Entry | cflow.cs:299:5:301:5 | {...} | | +| cflow.cs:298:10:298:10 | Entry | cflow.cs:298:16:298:16 | i | | | cflow.cs:298:10:298:10 | Normal Exit | cflow.cs:298:10:298:10 | Exit | | +| cflow.cs:298:16:298:16 | i | cflow.cs:298:26:298:26 | s | | +| cflow.cs:298:26:298:26 | s | cflow.cs:298:34:298:34 | b | | +| cflow.cs:298:34:298:34 | b | cflow.cs:299:5:301:5 | {...} | | | cflow.cs:299:5:301:5 | After {...} | cflow.cs:298:10:298:10 | Normal Exit | | | cflow.cs:299:5:301:5 | {...} | cflow.cs:300:9:300:73 | ...; | | | cflow.cs:300:9:300:72 | After object creation of type NegationInConstructor | cflow.cs:300:9:300:73 | After ...; | | @@ -8213,9 +8409,11 @@ | cflow.cs:304:7:304:18 | {...} | cflow.cs:304:7:304:18 | Normal Exit | | | cflow.cs:306:60:310:5 | (...) => ... | cflow.cs:306:60:310:5 | Normal Exit | | | cflow.cs:306:60:310:5 | Entry | cflow.cs:306:60:310:5 | (...) => ... | | -| cflow.cs:306:60:310:5 | Entry | cflow.cs:307:5:310:5 | {...} | | +| cflow.cs:306:60:310:5 | Entry | cflow.cs:306:61:306:61 | o | | | cflow.cs:306:60:310:5 | Normal Exit | cflow.cs:306:60:310:5 | Exit | | | cflow.cs:306:60:310:5 | Normal Exit | cflow.cs:306:60:310:5 | Exit | | +| cflow.cs:306:61:306:61 | o | cflow.cs:306:64:306:64 | n | | +| cflow.cs:306:64:306:64 | n | cflow.cs:307:5:310:5 | {...} | | | cflow.cs:307:5:310:5 | {...} | cflow.cs:308:9:308:21 | ... ...; | | | cflow.cs:308:9:308:21 | ... ...; | cflow.cs:308:16:308:20 | Before Object x = ... | | | cflow.cs:308:9:308:21 | After ... ...; | cflow.cs:309:9:309:17 | Before return ...; | | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected b/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected index f64038d21588..c4141e7d6a10 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Nodes.expected @@ -1,65 +1,71 @@ -| AccessorCalls.cs:5:23:5:25 | get_Item | AccessorCalls.cs:5:30:5:30 | access to parameter i | -| AccessorCalls.cs:5:33:5:35 | set_Item | AccessorCalls.cs:5:37:5:39 | {...} | -| AccessorCalls.cs:7:32:7:34 | add_Event | AccessorCalls.cs:7:36:7:38 | {...} | -| AccessorCalls.cs:7:40:7:45 | remove_Event | AccessorCalls.cs:7:47:7:49 | {...} | -| AccessorCalls.cs:10:10:10:11 | M1 | AccessorCalls.cs:11:5:17:5 | {...} | -| AccessorCalls.cs:19:10:19:11 | M2 | AccessorCalls.cs:20:5:26:5 | {...} | +| AccessorCalls.cs:5:23:5:25 | get_Item | AccessorCalls.cs:5:18:5:18 | i | +| AccessorCalls.cs:5:33:5:35 | set_Item | AccessorCalls.cs:5:18:5:18 | i | +| AccessorCalls.cs:7:32:7:34 | add_Event | AccessorCalls.cs:7:32:7:34 | value | +| AccessorCalls.cs:7:40:7:45 | remove_Event | AccessorCalls.cs:7:40:7:45 | value | +| AccessorCalls.cs:10:10:10:11 | M1 | AccessorCalls.cs:10:26:10:26 | e | +| AccessorCalls.cs:19:10:19:11 | M2 | AccessorCalls.cs:19:26:19:26 | e | | AccessorCalls.cs:28:10:28:11 | M3 | AccessorCalls.cs:29:5:33:5 | {...} | | AccessorCalls.cs:35:10:35:11 | M4 | AccessorCalls.cs:36:5:40:5 | {...} | | AccessorCalls.cs:42:10:42:11 | M5 | AccessorCalls.cs:43:5:47:5 | {...} | | AccessorCalls.cs:49:10:49:11 | M6 | AccessorCalls.cs:50:5:54:5 | {...} | -| AccessorCalls.cs:56:10:56:11 | M7 | AccessorCalls.cs:57:5:59:5 | {...} | -| AccessorCalls.cs:61:10:61:11 | M8 | AccessorCalls.cs:62:5:64:5 | {...} | -| AccessorCalls.cs:66:10:66:11 | M9 | AccessorCalls.cs:67:5:74:5 | {...} | -| Assert.cs:7:10:7:11 | M1 | Assert.cs:8:5:12:5 | {...} | -| Assert.cs:14:10:14:11 | M2 | Assert.cs:15:5:19:5 | {...} | -| Assert.cs:21:10:21:11 | M3 | Assert.cs:22:5:26:5 | {...} | -| Assert.cs:28:10:28:11 | M4 | Assert.cs:29:5:33:5 | {...} | -| Assert.cs:35:10:35:11 | M5 | Assert.cs:36:5:40:5 | {...} | -| Assert.cs:42:10:42:11 | M6 | Assert.cs:43:5:47:5 | {...} | -| Assert.cs:49:10:49:11 | M7 | Assert.cs:50:5:54:5 | {...} | -| Assert.cs:56:10:56:11 | M8 | Assert.cs:57:5:61:5 | {...} | -| Assert.cs:63:10:63:11 | M9 | Assert.cs:64:5:68:5 | {...} | -| Assert.cs:70:10:70:12 | M10 | Assert.cs:71:5:75:5 | {...} | -| Assert.cs:77:10:77:12 | M11 | Assert.cs:78:5:82:5 | {...} | -| Assert.cs:84:10:84:12 | M12 | Assert.cs:85:5:129:5 | {...} | -| Assert.cs:131:18:131:32 | AssertTrueFalse | Assert.cs:135:5:136:5 | {...} | -| Assert.cs:138:10:138:12 | M13 | Assert.cs:139:5:142:5 | {...} | +| AccessorCalls.cs:56:10:56:11 | M7 | AccessorCalls.cs:56:17:56:17 | i | +| AccessorCalls.cs:61:10:61:11 | M8 | AccessorCalls.cs:61:17:61:17 | i | +| AccessorCalls.cs:66:10:66:11 | M9 | AccessorCalls.cs:66:20:66:20 | o | +| Assert.cs:7:10:7:11 | M1 | Assert.cs:7:18:7:18 | b | +| Assert.cs:14:10:14:11 | M2 | Assert.cs:14:18:14:18 | b | +| Assert.cs:21:10:21:11 | M3 | Assert.cs:21:18:21:18 | b | +| Assert.cs:28:10:28:11 | M4 | Assert.cs:28:18:28:18 | b | +| Assert.cs:35:10:35:11 | M5 | Assert.cs:35:18:35:18 | b | +| Assert.cs:42:10:42:11 | M6 | Assert.cs:42:18:42:18 | b | +| Assert.cs:49:10:49:11 | M7 | Assert.cs:49:18:49:18 | b | +| Assert.cs:56:10:56:11 | M8 | Assert.cs:56:18:56:18 | b | +| Assert.cs:63:10:63:11 | M9 | Assert.cs:63:18:63:18 | b | +| Assert.cs:70:10:70:12 | M10 | Assert.cs:70:19:70:19 | b | +| Assert.cs:77:10:77:12 | M11 | Assert.cs:77:19:77:19 | b | +| Assert.cs:84:10:84:12 | M12 | Assert.cs:84:19:84:19 | b | +| Assert.cs:131:18:131:32 | AssertTrueFalse | Assert.cs:132:74:132:83 | condition1 | +| Assert.cs:138:10:138:12 | M13 | Assert.cs:138:19:138:20 | b1 | | Assignments.cs:3:10:3:10 | M | Assignments.cs:4:5:15:5 | {...} | -| Assignments.cs:14:18:14:35 | (...) => ... | Assignments.cs:14:33:14:35 | {...} | -| Assignments.cs:17:40:17:40 | + | Assignments.cs:18:5:20:5 | {...} | -| Assignments.cs:27:10:27:23 | SetParamSingle | Assignments.cs:28:5:30:5 | {...} | -| Assignments.cs:32:10:32:22 | SetParamMulti | Assignments.cs:33:5:36:5 | {...} | +| Assignments.cs:14:18:14:35 | (...) => ... | Assignments.cs:14:19:14:24 | sender | +| Assignments.cs:17:40:17:40 | + | Assignments.cs:17:54:17:54 | x | +| Assignments.cs:27:10:27:23 | SetParamSingle | Assignments.cs:27:33:27:33 | x | +| Assignments.cs:32:10:32:22 | SetParamMulti | Assignments.cs:32:32:32:32 | x | | Assignments.cs:38:10:38:11 | M2 | Assignments.cs:39:5:45:5 | {...} | -| BreakInTry.cs:3:10:3:11 | M1 | BreakInTry.cs:4:5:18:5 | {...} | -| BreakInTry.cs:20:10:20:11 | M2 | BreakInTry.cs:21:5:36:5 | {...} | -| BreakInTry.cs:38:10:38:11 | M3 | BreakInTry.cs:39:5:54:5 | {...} | -| BreakInTry.cs:56:10:56:11 | M4 | BreakInTry.cs:57:5:71:5 | {...} | +| BreakInTry.cs:3:10:3:11 | M1 | BreakInTry.cs:3:22:3:25 | args | +| BreakInTry.cs:20:10:20:11 | M2 | BreakInTry.cs:20:22:20:25 | args | +| BreakInTry.cs:38:10:38:11 | M3 | BreakInTry.cs:38:22:38:25 | args | +| BreakInTry.cs:56:10:56:11 | M4 | BreakInTry.cs:56:22:56:25 | args | | CompileTimeOperators.cs:5:9:5:15 | Default | CompileTimeOperators.cs:6:5:8:5 | {...} | | CompileTimeOperators.cs:10:9:10:14 | Sizeof | CompileTimeOperators.cs:11:5:13:5 | {...} | | CompileTimeOperators.cs:15:10:15:15 | Typeof | CompileTimeOperators.cs:16:5:18:5 | {...} | -| CompileTimeOperators.cs:20:12:20:17 | Nameof | CompileTimeOperators.cs:21:5:23:5 | {...} | +| CompileTimeOperators.cs:20:12:20:17 | Nameof | CompileTimeOperators.cs:20:23:20:23 | i | | CompileTimeOperators.cs:28:10:28:10 | M | CompileTimeOperators.cs:29:5:41:5 | {...} | -| ConditionalAccess.cs:9:9:9:10 | M4 | ConditionalAccess.cs:9:25:9:38 | ... ?? ... | -| ConditionalAccess.cs:11:9:11:10 | M5 | ConditionalAccess.cs:12:5:17:5 | {...} | -| ConditionalAccess.cs:21:10:21:11 | M7 | ConditionalAccess.cs:22:5:26:5 | {...} | -| ConditionalAccess.cs:32:10:32:11 | M8 | ConditionalAccess.cs:33:5:36:5 | {...} | -| ConditionalAccess.cs:42:9:42:11 | get_Item | ConditionalAccess.cs:42:13:42:28 | {...} | -| ConditionalAccess.cs:43:9:43:11 | set_Item | ConditionalAccess.cs:43:13:43:15 | {...} | -| ConditionalAccess.cs:46:10:46:11 | M9 | ConditionalAccess.cs:47:5:55:5 | {...} | -| Conditions.cs:3:10:3:19 | IncrOrDecr | Conditions.cs:4:5:9:5 | {...} | -| Conditions.cs:11:9:11:10 | M1 | Conditions.cs:12:5:20:5 | {...} | -| Conditions.cs:22:9:22:10 | M2 | Conditions.cs:23:5:31:5 | {...} | -| Conditions.cs:33:9:33:10 | M3 | Conditions.cs:34:5:44:5 | {...} | -| Conditions.cs:46:9:46:10 | M4 | Conditions.cs:47:5:55:5 | {...} | -| Conditions.cs:57:9:57:10 | M5 | Conditions.cs:58:5:68:5 | {...} | -| Conditions.cs:70:9:70:10 | M6 | Conditions.cs:71:5:84:5 | {...} | -| Conditions.cs:86:9:86:10 | M7 | Conditions.cs:87:5:100:5 | {...} | -| Conditions.cs:102:12:102:13 | M8 | Conditions.cs:103:5:111:5 | {...} | -| Conditions.cs:113:10:113:11 | M9 | Conditions.cs:114:5:124:5 | {...} | +| ConditionalAccess.cs:3:12:3:13 | M1 | ConditionalAccess.cs:3:20:3:20 | i | +| ConditionalAccess.cs:5:10:5:11 | M2 | ConditionalAccess.cs:5:20:5:20 | s | +| ConditionalAccess.cs:7:10:7:11 | M3 | ConditionalAccess.cs:7:20:7:21 | s1 | +| ConditionalAccess.cs:9:9:9:10 | M4 | ConditionalAccess.cs:9:19:9:19 | s | +| ConditionalAccess.cs:11:9:11:10 | M5 | ConditionalAccess.cs:11:19:11:19 | s | +| ConditionalAccess.cs:19:12:19:13 | M6 | ConditionalAccess.cs:19:22:19:23 | s1 | +| ConditionalAccess.cs:21:10:21:11 | M7 | ConditionalAccess.cs:21:17:21:17 | i | +| ConditionalAccess.cs:30:10:30:12 | Out | ConditionalAccess.cs:30:22:30:22 | i | +| ConditionalAccess.cs:32:10:32:11 | M8 | ConditionalAccess.cs:32:18:32:18 | b | +| ConditionalAccess.cs:42:9:42:11 | get_Item | ConditionalAccess.cs:40:21:40:25 | index | +| ConditionalAccess.cs:43:9:43:11 | set_Item | ConditionalAccess.cs:40:21:40:25 | index | +| ConditionalAccess.cs:46:10:46:11 | M9 | ConditionalAccess.cs:46:31:46:32 | ca | +| ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | ConditionalAccess.cs:60:52:60:53 | s1 | +| Conditions.cs:3:10:3:19 | IncrOrDecr | Conditions.cs:3:26:3:28 | inc | +| Conditions.cs:11:9:11:10 | M1 | Conditions.cs:11:17:11:17 | b | +| Conditions.cs:22:9:22:10 | M2 | Conditions.cs:22:17:22:18 | b1 | +| Conditions.cs:33:9:33:10 | M3 | Conditions.cs:33:17:33:18 | b1 | +| Conditions.cs:46:9:46:10 | M4 | Conditions.cs:46:17:46:17 | b | +| Conditions.cs:57:9:57:10 | M5 | Conditions.cs:57:17:57:17 | b | +| Conditions.cs:70:9:70:10 | M6 | Conditions.cs:70:21:70:22 | ss | +| Conditions.cs:86:9:86:10 | M7 | Conditions.cs:86:21:86:22 | ss | +| Conditions.cs:102:12:102:13 | M8 | Conditions.cs:102:20:102:20 | b | +| Conditions.cs:113:10:113:11 | M9 | Conditions.cs:113:22:113:25 | args | | Conditions.cs:129:10:129:12 | M10 | Conditions.cs:130:5:141:5 | {...} | -| Conditions.cs:143:10:143:12 | M11 | Conditions.cs:144:5:150:5 | {...} | -| DefaultParam.cs:3:12:3:13 | M1 | DefaultParam.cs:4:5:6:5 | {...} | +| Conditions.cs:143:10:143:12 | M11 | Conditions.cs:143:19:143:19 | b | +| DefaultParam.cs:3:12:3:13 | M1 | DefaultParam.cs:3:20:3:20 | b | | ExitMethods.cs:8:10:8:11 | M1 | ExitMethods.cs:9:5:12:5 | {...} | | ExitMethods.cs:14:10:14:11 | M2 | ExitMethods.cs:15:5:18:5 | {...} | | ExitMethods.cs:20:10:20:11 | M3 | ExitMethods.cs:21:5:24:5 | {...} | @@ -68,21 +74,22 @@ | ExitMethods.cs:38:10:38:11 | M6 | ExitMethods.cs:39:5:52:5 | {...} | | ExitMethods.cs:54:10:54:11 | M7 | ExitMethods.cs:55:5:58:5 | {...} | | ExitMethods.cs:60:10:60:11 | M8 | ExitMethods.cs:61:5:64:5 | {...} | -| ExitMethods.cs:66:17:66:26 | ErrorMaybe | ExitMethods.cs:67:5:70:5 | {...} | -| ExitMethods.cs:72:17:72:27 | ErrorAlways | ExitMethods.cs:73:5:78:5 | {...} | +| ExitMethods.cs:66:17:66:26 | ErrorMaybe | ExitMethods.cs:66:33:66:33 | b | +| ExitMethods.cs:72:17:72:27 | ErrorAlways | ExitMethods.cs:72:34:72:34 | b | | ExitMethods.cs:80:17:80:28 | ErrorAlways2 | ExitMethods.cs:81:5:83:5 | {...} | | ExitMethods.cs:87:10:87:13 | Exit | ExitMethods.cs:88:5:90:5 | {...} | | ExitMethods.cs:92:10:92:18 | ExitInTry | ExitMethods.cs:93:5:103:5 | {...} | | ExitMethods.cs:105:10:105:24 | ApplicationExit | ExitMethods.cs:106:5:108:5 | {...} | -| ExitMethods.cs:110:13:110:21 | ThrowExpr | ExitMethods.cs:111:5:113:5 | {...} | -| ExitMethods.cs:115:16:115:34 | ExtensionMethodCall | ExitMethods.cs:116:5:118:5 | {...} | +| ExitMethods.cs:110:13:110:21 | ThrowExpr | ExitMethods.cs:110:31:110:35 | input | +| ExitMethods.cs:115:16:115:34 | ExtensionMethodCall | ExitMethods.cs:115:43:115:43 | s | | ExitMethods.cs:120:17:120:32 | FailingAssertion | ExitMethods.cs:121:5:124:5 | {...} | | ExitMethods.cs:126:17:126:33 | FailingAssertion2 | ExitMethods.cs:127:5:130:5 | {...} | +| ExitMethods.cs:132:10:132:20 | AssertFalse | ExitMethods.cs:132:27:132:27 | b | | ExitMethods.cs:134:17:134:33 | FailingAssertion3 | ExitMethods.cs:135:5:138:5 | {...} | -| ExitMethods.cs:140:17:140:42 | ExceptionDispatchInfoThrow | ExitMethods.cs:141:5:147:5 | {...} | -| Extensions.cs:5:23:5:29 | ToInt32 | Extensions.cs:6:5:8:5 | {...} | -| Extensions.cs:10:24:10:29 | ToBool | Extensions.cs:11:5:13:5 | {...} | -| Extensions.cs:20:17:20:20 | Main | Extensions.cs:21:5:26:5 | {...} | +| ExitMethods.cs:140:17:140:42 | ExceptionDispatchInfoThrow | ExitMethods.cs:140:49:140:49 | b | +| Extensions.cs:5:23:5:29 | ToInt32 | Extensions.cs:5:43:5:43 | s | +| Extensions.cs:10:24:10:29 | ToBool | Extensions.cs:10:43:10:43 | s | +| Extensions.cs:20:17:20:20 | Main | Extensions.cs:20:29:20:29 | s | | Finally.cs:7:10:7:11 | M1 | Finally.cs:8:5:17:5 | {...} | | Finally.cs:19:10:19:11 | M2 | Finally.cs:20:5:52:5 | {...} | | Finally.cs:54:10:54:11 | M3 | Finally.cs:55:5:72:5 | {...} | @@ -90,113 +97,123 @@ | Finally.cs:103:10:103:11 | M5 | Finally.cs:104:5:119:5 | {...} | | Finally.cs:121:10:121:11 | M6 | Finally.cs:122:5:131:5 | {...} | | Finally.cs:133:10:133:11 | M7 | Finally.cs:134:5:145:5 | {...} | -| Finally.cs:147:10:147:11 | M8 | Finally.cs:148:5:170:5 | {...} | -| Finally.cs:176:10:176:11 | M9 | Finally.cs:177:5:193:5 | {...} | -| Finally.cs:195:10:195:12 | M10 | Finally.cs:196:5:214:5 | {...} | +| Finally.cs:147:10:147:11 | M8 | Finally.cs:147:22:147:25 | args | +| Finally.cs:176:10:176:11 | M9 | Finally.cs:176:18:176:19 | b1 | +| Finally.cs:195:10:195:12 | M10 | Finally.cs:195:19:195:20 | b1 | | Finally.cs:216:10:216:12 | M11 | Finally.cs:217:5:231:5 | {...} | -| Finally.cs:233:10:233:12 | M12 | Finally.cs:234:5:261:5 | {...} | -| Finally.cs:263:10:263:12 | M13 | Finally.cs:264:5:274:5 | {...} | -| Foreach.cs:6:10:6:11 | M1 | Foreach.cs:7:5:10:5 | {...} | -| Foreach.cs:12:10:12:11 | M2 | Foreach.cs:13:5:16:5 | {...} | -| Foreach.cs:18:10:18:11 | M3 | Foreach.cs:19:5:22:5 | {...} | -| Foreach.cs:24:10:24:11 | M4 | Foreach.cs:25:5:28:5 | {...} | -| Foreach.cs:30:10:30:11 | M5 | Foreach.cs:31:5:34:5 | {...} | -| Foreach.cs:36:10:36:11 | M6 | Foreach.cs:37:5:40:5 | {...} | +| Finally.cs:233:10:233:12 | M12 | Finally.cs:233:19:233:20 | b1 | +| Finally.cs:263:10:263:12 | M13 | Finally.cs:263:18:263:18 | i | +| Foreach.cs:6:10:6:11 | M1 | Foreach.cs:6:22:6:25 | args | +| Foreach.cs:12:10:12:11 | M2 | Foreach.cs:12:22:12:25 | args | +| Foreach.cs:18:10:18:11 | M3 | Foreach.cs:18:33:18:33 | e | +| Foreach.cs:24:10:24:11 | M4 | Foreach.cs:24:40:24:43 | args | +| Foreach.cs:30:10:30:11 | M5 | Foreach.cs:30:40:30:43 | args | +| Foreach.cs:36:10:36:11 | M6 | Foreach.cs:36:40:36:43 | args | +| Initializers.cs:10:5:10:16 | Initializers | Initializers.cs:10:25:10:25 | s | | Initializers.cs:12:10:12:10 | M | Initializers.cs:13:5:16:5 | {...} | -| Initializers.cs:51:10:51:13 | Test | Initializers.cs:52:5:66:5 | {...} | -| LoopUnrolling.cs:7:10:7:11 | M1 | LoopUnrolling.cs:8:5:13:5 | {...} | +| Initializers.cs:33:9:33:11 | Sub | Initializers.cs:33:17:33:17 | i | +| Initializers.cs:35:9:35:11 | Sub | Initializers.cs:35:17:35:17 | i | +| Initializers.cs:51:10:51:13 | Test | Initializers.cs:51:19:51:19 | i | +| LoopUnrolling.cs:7:10:7:11 | M1 | LoopUnrolling.cs:7:22:7:25 | args | | LoopUnrolling.cs:15:10:15:11 | M2 | LoopUnrolling.cs:16:5:20:5 | {...} | -| LoopUnrolling.cs:22:10:22:11 | M3 | LoopUnrolling.cs:23:5:27:5 | {...} | +| LoopUnrolling.cs:22:10:22:11 | M3 | LoopUnrolling.cs:22:20:22:23 | args | | LoopUnrolling.cs:29:10:29:11 | M4 | LoopUnrolling.cs:30:5:34:5 | {...} | | LoopUnrolling.cs:36:10:36:11 | M5 | LoopUnrolling.cs:37:5:43:5 | {...} | | LoopUnrolling.cs:45:10:45:11 | M6 | LoopUnrolling.cs:46:5:53:5 | {...} | -| LoopUnrolling.cs:55:10:55:11 | M7 | LoopUnrolling.cs:56:5:65:5 | {...} | -| LoopUnrolling.cs:67:10:67:11 | M8 | LoopUnrolling.cs:68:5:74:5 | {...} | +| LoopUnrolling.cs:55:10:55:11 | M7 | LoopUnrolling.cs:55:18:55:18 | b | +| LoopUnrolling.cs:67:10:67:11 | M8 | LoopUnrolling.cs:67:26:67:29 | args | | LoopUnrolling.cs:76:10:76:11 | M9 | LoopUnrolling.cs:77:5:83:5 | {...} | | LoopUnrolling.cs:85:10:85:12 | M10 | LoopUnrolling.cs:86:5:92:5 | {...} | | LoopUnrolling.cs:94:10:94:12 | M11 | LoopUnrolling.cs:95:5:101:5 | {...} | | MultiImplementationA.cs:6:22:6:31 | get_P1 | MultiImplementationB.cs:3:22:3:22 | 0 | | MultiImplementationA.cs:7:21:7:23 | get_P2 | MultiImplementationA.cs:7:25:7:39 | {...} | | MultiImplementationA.cs:7:21:7:23 | get_P2 | MultiImplementationB.cs:4:25:4:37 | {...} | -| MultiImplementationA.cs:7:41:7:43 | set_P2 | MultiImplementationA.cs:7:45:7:59 | {...} | -| MultiImplementationA.cs:7:41:7:43 | set_P2 | MultiImplementationB.cs:4:43:4:45 | {...} | +| MultiImplementationA.cs:7:41:7:43 | set_P2 | MultiImplementationA.cs:7:41:7:43 | value | | MultiImplementationA.cs:8:16:8:16 | M | MultiImplementationB.cs:5:23:5:23 | 2 | -| MultiImplementationA.cs:14:31:14:31 | get_Item | MultiImplementationA.cs:14:31:14:31 | access to parameter i | -| MultiImplementationA.cs:15:36:15:38 | get_Item | MultiImplementationA.cs:15:40:15:52 | {...} | -| MultiImplementationA.cs:15:36:15:38 | get_Item | MultiImplementationB.cs:13:40:13:54 | {...} | -| MultiImplementationA.cs:15:54:15:56 | set_Item | MultiImplementationA.cs:15:58:15:60 | {...} | -| MultiImplementationA.cs:15:54:15:56 | set_Item | MultiImplementationB.cs:13:60:13:62 | {...} | -| MultiImplementationA.cs:16:17:16:18 | M1 | MultiImplementationA.cs:17:5:19:5 | {...} | -| MultiImplementationA.cs:16:17:16:18 | M1 | MultiImplementationB.cs:15:5:17:5 | {...} | +| MultiImplementationA.cs:14:31:14:31 | get_Item | MultiImplementationA.cs:14:25:14:25 | i | +| MultiImplementationA.cs:15:36:15:38 | get_Item | MultiImplementationA.cs:15:31:15:31 | s | +| MultiImplementationA.cs:15:54:15:56 | set_Item | MultiImplementationA.cs:15:31:15:31 | s | +| MultiImplementationA.cs:16:17:16:18 | M1 | MultiImplementationA.cs:16:24:16:24 | i | | MultiImplementationA.cs:18:9:18:22 | M2 | MultiImplementationA.cs:18:21:18:21 | 0 | +| MultiImplementationA.cs:20:12:20:13 | C2 | MultiImplementationA.cs:20:19:20:19 | i | | MultiImplementationA.cs:22:6:22:7 | ~C2 | MultiImplementationA.cs:22:11:22:13 | {...} | | MultiImplementationA.cs:22:6:22:7 | ~C2 | MultiImplementationB.cs:20:11:20:25 | {...} | -| MultiImplementationA.cs:23:28:23:35 | implicit conversion | MultiImplementationA.cs:23:50:23:53 | null | +| MultiImplementationA.cs:23:28:23:35 | implicit conversion | MultiImplementationA.cs:23:44:23:44 | i | | MultiImplementationA.cs:36:9:36:10 | M1 | MultiImplementationA.cs:36:14:36:28 | {...} | | MultiImplementationA.cs:36:9:36:10 | M1 | MultiImplementationB.cs:32:17:32:17 | 0 | | MultiImplementationA.cs:37:9:37:10 | M2 | MultiImplementationA.cs:37:14:37:28 | {...} | -| NullCoalescing.cs:3:9:3:10 | M1 | NullCoalescing.cs:3:23:3:28 | ... ?? ... | -| NullCoalescing.cs:5:9:5:10 | M2 | NullCoalescing.cs:5:24:5:43 | ... ? ... : ... | -| NullCoalescing.cs:7:12:7:13 | M3 | NullCoalescing.cs:7:40:7:53 | ... ?? ... | -| NullCoalescing.cs:9:12:9:13 | M4 | NullCoalescing.cs:9:36:9:58 | ... ?? ... | -| NullCoalescing.cs:11:9:11:10 | M5 | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | -| NullCoalescing.cs:13:10:13:11 | M6 | NullCoalescing.cs:14:5:18:5 | {...} | +| NullCoalescing.cs:3:9:3:10 | M1 | NullCoalescing.cs:3:17:3:17 | i | +| NullCoalescing.cs:5:9:5:10 | M2 | NullCoalescing.cs:5:18:5:18 | b | +| NullCoalescing.cs:7:12:7:13 | M3 | NullCoalescing.cs:7:22:7:23 | s1 | +| NullCoalescing.cs:9:12:9:13 | M4 | NullCoalescing.cs:9:20:9:20 | b | +| NullCoalescing.cs:11:9:11:10 | M5 | NullCoalescing.cs:11:18:11:19 | b1 | +| NullCoalescing.cs:13:10:13:11 | M6 | NullCoalescing.cs:13:17:13:17 | i | +| PartialImplementationA.cs:3:12:3:18 | Partial | PartialImplementationA.cs:3:24:3:24 | i | | Patterns.cs:5:10:5:11 | M1 | Patterns.cs:6:5:43:5 | {...} | -| Patterns.cs:50:24:50:25 | M3 | Patterns.cs:51:9:51:39 | ... ? ... : ... | -| Patterns.cs:56:26:56:27 | M5 | Patterns.cs:57:5:63:5 | {...} | +| Patterns.cs:47:24:47:25 | M2 | Patterns.cs:47:32:47:32 | c | +| Patterns.cs:50:24:50:25 | M3 | Patterns.cs:50:34:50:34 | c | +| Patterns.cs:53:24:53:25 | M4 | Patterns.cs:53:34:53:34 | c | +| Patterns.cs:56:26:56:27 | M5 | Patterns.cs:56:33:56:33 | i | | Patterns.cs:65:26:65:27 | M6 | Patterns.cs:66:5:72:5 | {...} | -| Patterns.cs:74:26:74:27 | M7 | Patterns.cs:75:5:83:5 | {...} | -| Patterns.cs:85:26:85:27 | M8 | Patterns.cs:85:39:85:69 | ... ? ... : ... | -| Patterns.cs:87:26:87:27 | M9 | Patterns.cs:87:39:87:70 | ... ? ... : ... | +| Patterns.cs:74:26:74:27 | M7 | Patterns.cs:74:33:74:33 | i | +| Patterns.cs:85:26:85:27 | M8 | Patterns.cs:85:33:85:33 | i | +| Patterns.cs:87:26:87:27 | M9 | Patterns.cs:87:33:87:33 | i | | Patterns.cs:93:17:93:19 | M10 | Patterns.cs:94:5:99:5 | {...} | -| PostDominance.cs:5:10:5:11 | M1 | PostDominance.cs:6:5:8:5 | {...} | -| PostDominance.cs:10:10:10:11 | M2 | PostDominance.cs:11:5:15:5 | {...} | -| PostDominance.cs:17:10:17:11 | M3 | PostDominance.cs:18:5:22:5 | {...} | +| PostDominance.cs:5:10:5:11 | M1 | PostDominance.cs:5:20:5:20 | s | +| PostDominance.cs:10:10:10:11 | M2 | PostDominance.cs:10:20:10:20 | s | +| PostDominance.cs:17:10:17:11 | M3 | PostDominance.cs:17:20:17:20 | s | | Qualifiers.cs:7:16:7:21 | Method | Qualifiers.cs:7:28:7:31 | null | | Qualifiers.cs:8:23:8:34 | StaticMethod | Qualifiers.cs:8:41:8:44 | null | | Qualifiers.cs:10:10:10:10 | M | Qualifiers.cs:11:5:31:5 | {...} | -| Switch.cs:5:10:5:11 | M1 | Switch.cs:6:5:8:5 | {...} | -| Switch.cs:10:10:10:11 | M2 | Switch.cs:11:5:33:5 | {...} | +| Switch.cs:5:10:5:11 | M1 | Switch.cs:5:20:5:20 | o | +| Switch.cs:10:10:10:11 | M2 | Switch.cs:10:20:10:20 | o | | Switch.cs:35:10:35:11 | M3 | Switch.cs:36:5:42:5 | {...} | -| Switch.cs:44:10:44:11 | M4 | Switch.cs:45:5:53:5 | {...} | +| Switch.cs:44:10:44:11 | M4 | Switch.cs:44:20:44:20 | o | | Switch.cs:55:10:55:11 | M5 | Switch.cs:56:5:64:5 | {...} | -| Switch.cs:66:10:66:11 | M6 | Switch.cs:67:5:75:5 | {...} | -| Switch.cs:77:10:77:11 | M7 | Switch.cs:78:5:89:5 | {...} | -| Switch.cs:91:10:91:11 | M8 | Switch.cs:92:5:99:5 | {...} | -| Switch.cs:101:9:101:10 | M9 | Switch.cs:102:5:109:5 | {...} | -| Switch.cs:113:9:113:11 | M10 | Switch.cs:114:5:121:5 | {...} | -| Switch.cs:123:10:123:12 | M11 | Switch.cs:124:5:127:5 | {...} | -| Switch.cs:129:12:129:14 | M12 | Switch.cs:130:5:132:5 | {...} | -| Switch.cs:134:9:134:11 | M13 | Switch.cs:135:5:142:5 | {...} | -| Switch.cs:144:9:144:11 | M14 | Switch.cs:145:5:152:5 | {...} | -| Switch.cs:154:10:154:12 | M15 | Switch.cs:155:5:161:5 | {...} | -| Switch.cs:163:10:163:12 | M16 | Switch.cs:164:5:178:5 | {...} | -| TypeAccesses.cs:3:10:3:10 | M | TypeAccesses.cs:4:5:9:5 | {...} | -| VarDecls.cs:5:18:5:19 | M1 | VarDecls.cs:6:5:11:5 | {...} | -| VarDecls.cs:13:12:13:13 | M2 | VarDecls.cs:14:5:17:5 | {...} | -| VarDecls.cs:19:7:19:8 | M3 | VarDecls.cs:20:5:26:5 | {...} | +| Switch.cs:66:10:66:11 | M6 | Switch.cs:66:20:66:20 | s | +| Switch.cs:77:10:77:11 | M7 | Switch.cs:77:17:77:17 | i | +| Switch.cs:91:10:91:11 | M8 | Switch.cs:91:20:91:20 | o | +| Switch.cs:101:9:101:10 | M9 | Switch.cs:101:19:101:19 | s | +| Switch.cs:113:9:113:11 | M10 | Switch.cs:113:20:113:20 | s | +| Switch.cs:123:10:123:12 | M11 | Switch.cs:123:21:123:21 | o | +| Switch.cs:129:12:129:14 | M12 | Switch.cs:129:23:129:23 | o | +| Switch.cs:134:9:134:11 | M13 | Switch.cs:134:17:134:17 | i | +| Switch.cs:144:9:144:11 | M14 | Switch.cs:144:17:144:17 | i | +| Switch.cs:154:10:154:12 | M15 | Switch.cs:154:19:154:19 | b | +| Switch.cs:163:10:163:12 | M16 | Switch.cs:163:18:163:18 | i | +| TypeAccesses.cs:3:10:3:10 | M | TypeAccesses.cs:3:19:3:19 | o | +| VarDecls.cs:5:18:5:19 | M1 | VarDecls.cs:5:30:5:36 | strings | +| VarDecls.cs:13:12:13:13 | M2 | VarDecls.cs:13:22:13:22 | s | +| VarDecls.cs:19:7:19:8 | M3 | VarDecls.cs:19:15:19:15 | b | | VarDecls.cs:28:41:28:47 | Dispose | VarDecls.cs:28:51:28:53 | {...} | -| cflow.cs:5:17:5:20 | Main | cflow.cs:6:5:35:5 | {...} | -| cflow.cs:37:17:37:22 | Switch | cflow.cs:38:5:68:5 | {...} | -| cflow.cs:70:18:70:18 | M | cflow.cs:71:5:82:5 | {...} | -| cflow.cs:84:18:84:19 | M2 | cflow.cs:85:5:88:5 | {...} | -| cflow.cs:90:18:90:19 | M3 | cflow.cs:91:5:104:5 | {...} | -| cflow.cs:106:18:106:19 | M4 | cflow.cs:107:5:117:5 | {...} | -| cflow.cs:119:20:119:21 | M5 | cflow.cs:120:5:124:5 | {...} | +| cflow.cs:5:17:5:20 | Main | cflow.cs:5:31:5:34 | args | +| cflow.cs:37:17:37:22 | Switch | cflow.cs:37:28:37:28 | a | +| cflow.cs:70:18:70:18 | M | cflow.cs:70:27:70:27 | s | +| cflow.cs:84:18:84:19 | M2 | cflow.cs:84:28:84:28 | s | +| cflow.cs:90:18:90:19 | M3 | cflow.cs:90:28:90:28 | s | +| cflow.cs:106:18:106:19 | M4 | cflow.cs:106:28:106:28 | s | +| cflow.cs:119:20:119:21 | M5 | cflow.cs:119:30:119:30 | s | | cflow.cs:127:19:127:21 | get_Prop | cflow.cs:127:23:127:60 | {...} | -| cflow.cs:127:62:127:64 | set_Prop | cflow.cs:127:66:127:83 | {...} | -| cflow.cs:138:40:138:40 | + | cflow.cs:139:5:142:5 | {...} | -| cflow.cs:144:33:144:35 | get_Item | cflow.cs:144:37:144:54 | {...} | -| cflow.cs:144:56:144:58 | set_Item | cflow.cs:144:60:144:62 | {...} | +| cflow.cs:127:62:127:64 | set_Prop | cflow.cs:127:62:127:64 | value | +| cflow.cs:129:5:129:15 | ControlFlow | cflow.cs:129:24:129:24 | s | +| cflow.cs:134:5:134:15 | ControlFlow | cflow.cs:134:21:134:21 | i | +| cflow.cs:138:40:138:40 | + | cflow.cs:138:54:138:54 | x | +| cflow.cs:144:33:144:35 | get_Item | cflow.cs:144:28:144:28 | i | +| cflow.cs:144:56:144:58 | set_Item | cflow.cs:144:28:144:28 | i | | cflow.cs:146:10:146:12 | For | cflow.cs:147:5:177:5 | {...} | | cflow.cs:179:10:179:16 | Lambdas | cflow.cs:180:5:183:5 | {...} | -| cflow.cs:182:28:182:61 | delegate(...) { ... } | cflow.cs:182:45:182:61 | {...} | +| cflow.cs:181:28:181:37 | (...) => ... | cflow.cs:181:28:181:28 | x | +| cflow.cs:182:28:182:61 | delegate(...) { ... } | cflow.cs:182:42:182:42 | x | | cflow.cs:185:10:185:18 | LogicalOr | cflow.cs:186:5:191:5 | {...} | | cflow.cs:193:10:193:17 | Booleans | cflow.cs:194:5:206:5 | {...} | | cflow.cs:208:10:208:11 | Do | cflow.cs:209:5:222:5 | {...} | | cflow.cs:224:10:224:16 | Foreach | cflow.cs:225:5:238:5 | {...} | | cflow.cs:240:10:240:13 | Goto | cflow.cs:241:5:259:5 | {...} | | cflow.cs:261:49:261:53 | Yield | cflow.cs:262:5:277:5 | {...} | -| cflow.cs:298:10:298:10 | M | cflow.cs:299:5:301:5 | {...} | -| cflow.cs:306:60:310:5 | (...) => ... | cflow.cs:307:5:310:5 | {...} | +| cflow.cs:284:5:284:18 | ControlFlowSub | cflow.cs:284:27:284:27 | s | +| cflow.cs:286:5:286:18 | ControlFlowSub | cflow.cs:286:24:286:24 | i | +| cflow.cs:291:12:291:12 | M | cflow.cs:291:32:291:32 | f | +| cflow.cs:296:5:296:25 | NegationInConstructor | cflow.cs:296:32:296:32 | b | +| cflow.cs:298:10:298:10 | M | cflow.cs:298:16:298:16 | i | +| cflow.cs:306:60:310:5 | (...) => ... | cflow.cs:306:61:306:61 | o | | cflow.cs:306:60:310:5 | get__getter | cflow.cs:306:60:310:5 | (...) => ... | diff --git a/csharp/ql/test/library-tests/csharp8/switchexprcontrolflow.expected b/csharp/ql/test/library-tests/csharp8/switchexprcontrolflow.expected index 9d35bd27b38e..898a1ff46912 100644 --- a/csharp/ql/test/library-tests/csharp8/switchexprcontrolflow.expected +++ b/csharp/ql/test/library-tests/csharp8/switchexprcontrolflow.expected @@ -1,5 +1,6 @@ -| patterns.cs:98:10:98:20 | Entry | patterns.cs:99:5:121:5 | {...} | semmle.label | successor | +| patterns.cs:98:10:98:20 | Entry | patterns.cs:98:26:98:26 | x | semmle.label | successor | | patterns.cs:98:10:98:20 | Normal Exit | patterns.cs:98:10:98:20 | Exit | semmle.label | successor | +| patterns.cs:98:26:98:26 | x | patterns.cs:99:5:121:5 | {...} | semmle.label | successor | | patterns.cs:99:5:121:5 | After {...} | patterns.cs:98:10:98:20 | Normal Exit | semmle.label | successor | | patterns.cs:99:5:121:5 | {...} | patterns.cs:100:9:103:10 | ... ...; | semmle.label | successor | | patterns.cs:100:9:103:10 | ... ...; | patterns.cs:100:13:103:9 | Before String size = ... | semmle.label | successor | @@ -159,9 +160,10 @@ | patterns.cs:119:33:119:38 | Before (..., ...) | patterns.cs:119:34:119:34 | 0 | semmle.label | successor | | patterns.cs:119:34:119:34 | 0 | patterns.cs:119:37:119:37 | 0 | semmle.label | successor | | patterns.cs:119:37:119:37 | 0 | patterns.cs:119:33:119:38 | (..., ...) | semmle.label | successor | -| patterns.cs:123:10:123:21 | Entry | patterns.cs:124:5:149:5 | {...} | semmle.label | successor | +| patterns.cs:123:10:123:21 | Entry | patterns.cs:123:30:123:30 | o | semmle.label | successor | | patterns.cs:123:10:123:21 | Exceptional Exit | patterns.cs:123:10:123:21 | Exit | semmle.label | successor | | patterns.cs:123:10:123:21 | Normal Exit | patterns.cs:123:10:123:21 | Exit | semmle.label | successor | +| patterns.cs:123:30:123:30 | o | patterns.cs:124:5:149:5 | {...} | semmle.label | successor | | patterns.cs:124:5:149:5 | After {...} | patterns.cs:123:10:123:21 | Normal Exit | semmle.label | successor | | patterns.cs:124:5:149:5 | {...} | patterns.cs:125:9:125:39 | ... ...; | semmle.label | successor | | patterns.cs:125:9:125:39 | ... ...; | patterns.cs:125:13:125:38 | Before MyStruct s = ... | semmle.label | successor | diff --git a/csharp/ql/test/library-tests/dataflow/defuse/defUseEquivalence.ql b/csharp/ql/test/library-tests/dataflow/defuse/defUseEquivalence.ql index abac840ab102..c69890be8c35 100644 --- a/csharp/ql/test/library-tests/dataflow/defuse/defUseEquivalence.ql +++ b/csharp/ql/test/library-tests/dataflow/defuse/defUseEquivalence.ql @@ -5,7 +5,12 @@ private import semmle.code.csharp.dataflow.internal.BaseSSA predicate defReaches( AssignableDefinition def, BaseSsa::SimpleLocalScopeVariable v, ControlFlowNode cfn ) { - def.getTarget() = v and cfn = def.getExpr().getControlFlowNode().getASuccessor() + def.getTarget() = v and + cfn = + [ + def.getExpr().getControlFlowNode(), + def.(AssignableDefinitions::ImplicitParameterDefinition).getParameter().getControlFlowNode() + ].getASuccessor() or exists(ControlFlowNode mid | defReaches(def, v, mid) | not mid = diff --git a/csharp/ql/test/library-tests/obinit/ObInit.expected b/csharp/ql/test/library-tests/obinit/ObInit.expected index 2b89fa6670e5..d55e1add0527 100644 --- a/csharp/ql/test/library-tests/obinit/ObInit.expected +++ b/csharp/ql/test/library-tests/obinit/ObInit.expected @@ -34,23 +34,26 @@ cfg | obinit.cs:7:16:7:16 | A | obinit.cs:7:16:7:16 | call to method | obinit.cs:7:16:7:16 | After call to method | successor | 3 | | obinit.cs:7:16:7:16 | A | obinit.cs:7:16:7:16 | this access | obinit.cs:7:16:7:16 | call to method | successor | 2 | | obinit.cs:7:16:7:16 | A | obinit.cs:7:20:7:22 | {...} | obinit.cs:7:16:7:16 | Normal Exit | successor | 8 | -| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | After call to constructor Object | obinit.cs:9:25:9:27 | {...} | successor | 7 | -| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | After call to method | obinit.cs:9:16:9:16 | Before call to constructor Object | successor | 4 | -| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | Before call to constructor Object | obinit.cs:9:16:9:16 | call to constructor Object | successor | 5 | -| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | Before call to method | obinit.cs:9:16:9:16 | this access | successor | 1 | -| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | Entry | obinit.cs:9:16:9:16 | Before call to method | successor | 0 | -| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | Normal Exit | obinit.cs:9:16:9:16 | Exit | successor | 9 | -| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | call to constructor Object | obinit.cs:9:16:9:16 | After call to constructor Object | successor | 6 | -| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | call to method | obinit.cs:9:16:9:16 | After call to method | successor | 3 | -| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | this access | obinit.cs:9:16:9:16 | call to method | successor | 2 | -| obinit.cs:9:16:9:16 | A | obinit.cs:9:25:9:27 | {...} | obinit.cs:9:16:9:16 | Normal Exit | successor | 8 | -| obinit.cs:11:16:11:16 | A | obinit.cs:11:16:11:16 | Entry | obinit.cs:11:34:11:37 | Before call to constructor A | successor | 0 | -| obinit.cs:11:16:11:16 | A | obinit.cs:11:16:11:16 | Normal Exit | obinit.cs:11:16:11:16 | Exit | successor | 6 | -| obinit.cs:11:16:11:16 | A | obinit.cs:11:34:11:37 | After call to constructor A | obinit.cs:11:42:11:44 | {...} | successor | 4 | -| obinit.cs:11:16:11:16 | A | obinit.cs:11:34:11:37 | Before call to constructor A | obinit.cs:11:39:11:39 | access to parameter y | successor | 1 | -| obinit.cs:11:16:11:16 | A | obinit.cs:11:34:11:37 | call to constructor A | obinit.cs:11:34:11:37 | After call to constructor A | successor | 3 | -| obinit.cs:11:16:11:16 | A | obinit.cs:11:39:11:39 | access to parameter y | obinit.cs:11:34:11:37 | call to constructor A | successor | 2 | -| obinit.cs:11:16:11:16 | A | obinit.cs:11:42:11:44 | {...} | obinit.cs:11:16:11:16 | Normal Exit | successor | 5 | +| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | After call to constructor Object | obinit.cs:9:25:9:27 | {...} | successor | 8 | +| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | After call to method | obinit.cs:9:16:9:16 | Before call to constructor Object | successor | 5 | +| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | Before call to constructor Object | obinit.cs:9:16:9:16 | call to constructor Object | successor | 6 | +| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | Before call to method | obinit.cs:9:16:9:16 | this access | successor | 2 | +| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | Entry | obinit.cs:9:22:9:22 | y | successor | 0 | +| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | Normal Exit | obinit.cs:9:16:9:16 | Exit | successor | 10 | +| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | call to constructor Object | obinit.cs:9:16:9:16 | After call to constructor Object | successor | 7 | +| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | call to method | obinit.cs:9:16:9:16 | After call to method | successor | 4 | +| obinit.cs:9:16:9:16 | A | obinit.cs:9:16:9:16 | this access | obinit.cs:9:16:9:16 | call to method | successor | 3 | +| obinit.cs:9:16:9:16 | A | obinit.cs:9:22:9:22 | y | obinit.cs:9:16:9:16 | Before call to method | successor | 1 | +| obinit.cs:9:16:9:16 | A | obinit.cs:9:25:9:27 | {...} | obinit.cs:9:16:9:16 | Normal Exit | successor | 9 | +| obinit.cs:11:16:11:16 | A | obinit.cs:11:16:11:16 | Entry | obinit.cs:11:22:11:22 | y | successor | 0 | +| obinit.cs:11:16:11:16 | A | obinit.cs:11:16:11:16 | Normal Exit | obinit.cs:11:16:11:16 | Exit | successor | 8 | +| obinit.cs:11:16:11:16 | A | obinit.cs:11:22:11:22 | y | obinit.cs:11:29:11:29 | z | successor | 1 | +| obinit.cs:11:16:11:16 | A | obinit.cs:11:29:11:29 | z | obinit.cs:11:34:11:37 | Before call to constructor A | successor | 2 | +| obinit.cs:11:16:11:16 | A | obinit.cs:11:34:11:37 | After call to constructor A | obinit.cs:11:42:11:44 | {...} | successor | 6 | +| obinit.cs:11:16:11:16 | A | obinit.cs:11:34:11:37 | Before call to constructor A | obinit.cs:11:39:11:39 | access to parameter y | successor | 3 | +| obinit.cs:11:16:11:16 | A | obinit.cs:11:34:11:37 | call to constructor A | obinit.cs:11:34:11:37 | After call to constructor A | successor | 5 | +| obinit.cs:11:16:11:16 | A | obinit.cs:11:39:11:39 | access to parameter y | obinit.cs:11:34:11:37 | call to constructor A | successor | 4 | +| obinit.cs:11:16:11:16 | A | obinit.cs:11:42:11:44 | {...} | obinit.cs:11:16:11:16 | Normal Exit | successor | 7 | | obinit.cs:15:16:15:16 | B | obinit.cs:15:16:15:16 | After call to method | obinit.cs:15:22:15:25 | Before call to constructor A | successor | 4 | | obinit.cs:15:16:15:16 | B | obinit.cs:15:16:15:16 | Before call to method | obinit.cs:15:16:15:16 | this access | successor | 1 | | obinit.cs:15:16:15:16 | B | obinit.cs:15:16:15:16 | Entry | obinit.cs:15:16:15:16 | Before call to method | successor | 0 | diff --git a/shared/controlflow/codeql/controlflow/ControlFlowGraph.qll b/shared/controlflow/codeql/controlflow/ControlFlowGraph.qll index 4e8b37531296..e0fff1f616c2 100644 --- a/shared/controlflow/codeql/controlflow/ControlFlowGraph.qll +++ b/shared/controlflow/codeql/controlflow/ControlFlowGraph.qll @@ -50,6 +50,15 @@ signature module AstSig { /** Gets the body of callable `c`, if any. */ AstNode callableGetBody(Callable c); + /** A parameter of a callable. */ + class Parameter extends AstNode { + /** Gets the default value of this parameter, if any. */ + Expr getDefaultValue(); + } + + /** Gets the `index`th parameter of callable `c`. */ + Parameter callableGetParameter(Callable c, int index); + /** A statement. */ class Stmt extends AstNode; @@ -456,11 +465,11 @@ module Make0 Ast> { } /** - * An additional context needed to identify the body parts of a callable. + * An additional context needed to identify the parameters or body parts of a callable. * * When not used, instantiate with the `Void` type. */ - class CallableBodyPartContext { + class CallableContext { /** Gets a textual representation of this context. */ string toString(); } @@ -473,9 +482,13 @@ module Make0 Ast> { * of the body parts, in case a singleton `callableGetBody(c)` is inadequate * to describe the child nodes of `c`. */ - default AstNode callableGetBodyPart(Callable c, CallableBodyPartContext ctx, int index) { - none() - } + default AstNode callableGetBodyPart(Callable c, CallableContext ctx, int index) { none() } + + /** + * Gets the `index`th parameter of `c` in context `ctx`. The indices do not + * need to be consecutive nor start from a specific index. + */ + default Parameter callableGetParameter(Callable c, CallableContext ctx, int index) { none() } } /** @@ -484,6 +497,7 @@ module Make0 Ast> { */ module Make1 { private import codeql.util.DenseRank + private import codeql.util.Option /** * Holds if `n` is executed in post-order or in-order. This means that an @@ -592,9 +606,14 @@ module Make0 Ast> { or any(ForeachStmt foreachstmt).getCollection() = n and kind.isEmptiness() or - n instanceof CatchClause and kind.isMatching() - or - n instanceof Case and kind.isMatching() + kind.isMatching() and + ( + n instanceof CatchClause + or + n instanceof Case + or + exists(n.(Parameter).getDefaultValue()) + ) } /** @@ -692,7 +711,7 @@ module Make0 Ast> { private module BodyPartDenseRankInput implements DenseRankInputSig2 { class C1 = Callable; - class C2 = Input1::CallableBodyPartContext; + class C2 = Input1::CallableContext; class Ranked = AstNode; @@ -703,23 +722,56 @@ module Make0 Ast> { private predicate getRankedBodyPart = DenseRank2::denseRank/3; - private AstNode getBodyEntry(Callable c) { + private class CallableContextOption = Option::Option; + + private AstNode getBodyEntry(Callable c, CallableContextOption ctx) { result = callableGetBody(c) and - not exists(getRankedBodyPart(c, _, _)) + not exists(getRankedBodyPart(c, _, _)) and + ctx.isNone() or - result = getRankedBodyPart(c, _, 1) + result = getRankedBodyPart(c, ctx.asSome(), 1) } private AstNode getBodyExit(Callable c) { result = callableGetBody(c) and not exists(getRankedBodyPart(c, _, _)) or - exists(Input1::CallableBodyPartContext ctx, int last | + exists(Input1::CallableContext ctx, int last | result = getRankedBodyPart(c, ctx, last) and not exists(getRankedBodyPart(c, ctx, last + 1)) ) } + private module ParameterDenseRankInput implements DenseRankInputSig1 { + class C = Callable; + + class Ranked = Parameter; + + int getRank(C c, Ranked child) { + child = callableGetParameter(c, result) and + not exists(Input1::callableGetParameter(c, _, _)) + } + } + + private module ParameterCtxDenseRankInput implements DenseRankInputSig2 { + class C1 = Callable; + + class C2 = Input1::CallableContext; + + class Ranked = AstNode; + + int getRank(C1 c, C2 ctx, Ranked child) { + child = Input1::callableGetParameter(c, ctx, result) + } + } + + private Parameter getRankedParameter(Callable c, CallableContextOption ctx, int rnk) { + result = DenseRank1::denseRank(c, rnk) and + ctx.isNone() + or + result = DenseRank2::denseRank(c, ctx.asSome(), rnk) + } + cached private newtype TNode = TBeforeNode(AstNode n) { Input1::cfgCachedStageRef() and exists(getEnclosingCallable(n)) } or @@ -1320,15 +1372,45 @@ module Make0 Ast> { ) } + pragma[nomagic] + private AstNode getParameterOrBodyEntry(Callable c, CallableContextOption ctx, int i) { + result = getRankedParameter(c, ctx, i) + or + ( + not exists(getRankedParameter(c, _, _)) and + i = 1 + or + exists(getRankedParameter(c, ctx, i - 1)) and + not exists(getRankedParameter(c, ctx, i)) + ) and + result = getBodyEntry(c, ctx) + } + /** Holds if there is a local non-abrupt step from `n1` to `n2`. */ private predicate explicitStep(PreControlFlowNode n1, PreControlFlowNode n2) { Input2::step(n1, n2) or exists(Callable c | n1.(EntryNodeImpl).getEnclosingCallable() = c and - n2.isBefore(getBodyEntry(c)) + n2.isBefore(getParameterOrBodyEntry(c, _, 1)) + or + exists(CallableContextOption ctx, Parameter p, int i | p = getRankedParameter(c, ctx, i) | + exists(ConditionalSuccessor t | + n1.isAfterValue(p, t) and + t.getKind().isMatching() + | + t.getValue() = true and + n2.isBefore(getParameterOrBodyEntry(c, ctx, i + 1)) + or + t.getValue() = false and + n2.isBefore(p.getDefaultValue()) + ) + or + n1.isAfter(p.getDefaultValue()) and + n2.isBefore(getParameterOrBodyEntry(c, ctx, i + 1)) + ) or - exists(Input1::CallableBodyPartContext ctx, int i | + exists(Input1::CallableContext ctx, int i | n1.isAfter(getRankedBodyPart(c, ctx, i)) and n2.isBefore(getRankedBodyPart(c, ctx, i + 1)) ) @@ -2154,7 +2236,10 @@ module Make0 Ast> { any(MatchingSuccessor m | m.getValue() = true)) ) and // allow for functions with multiple bodies - not (t instanceof DirectSuccessor and node instanceof ControlFlow::EntryNode) + not exists(Callable c | + successor.getAstNode() = getBodyEntry(c, _) and + strictcount(getBodyEntry(c, _)) > 1 + ) } /** @@ -2203,11 +2288,29 @@ module Make0 Ast> { /** * Holds if `c` does not include `callableGetBody` in a non-empty `callableGetBodyPart`. */ - query predicate bodyPartOverlap(Callable c) { + query predicate bodyPartNonOverlap(Callable c) { exists(callableGetBody(c)) and exists(Input1::callableGetBodyPart(c, _, _)) and not Input1::callableGetBodyPart(c, _, _) = callableGetBody(c) } + + /** + * Holds if `c` does not include `p` in `callableGetParameter` but does in + * `Input1::callableGetParameter`. + */ + query predicate parameterNonOverlap(Callable c, Parameter p) { + p = Input1::callableGetParameter(c, _, _) and + not p = callableGetParameter(c, _) + } + + /** + * Holds if a parameter `p` of a callable `c` does not have `c` as its + * enclosing callable. + */ + query predicate parameterEnclosingCallable(Parameter p, Callable c) { + p = callableGetParameter(c, _) and + not c = getEnclosingCallable(p) + } } } } From cae8fdb80a24e2ba8399890ab8147ca8bb257da7 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 27 Apr 2026 12:12:59 +0200 Subject: [PATCH 4/8] C#: Use parameter CFG nodes in SSA --- .../ql/lib/semmle/code/csharp/Assignable.qll | 48 +++++++++-- .../semmle/code/csharp/controlflow/Guards.qll | 2 +- .../semmle/code/csharp/dataflow/Nullness.qll | 7 +- .../lib/semmle/code/csharp/dataflow/SSA.qll | 66 +++++---------- .../dataflow/internal/DataFlowPrivate.qll | 4 +- .../code/csharp/dataflow/internal/SsaImpl.qll | 81 +++++++++++++++++-- .../ql/test/library-tests/csharp7/DefUse.ql | 2 +- .../defuse/parameterUseEquivalence.ql | 3 +- .../dataflow/local/DataFlow.expected | 1 + .../dataflow/local/DataFlowStep.expected | 3 + .../dataflow/local/TaintTracking.expected | 1 + .../dataflow/local/TaintTrackingStep.expected | 3 + .../dataflow/ssa/BaseSsaConsistency.ql | 2 +- .../dataflow/ssa/DefAdjacentRead.expected | 4 - .../dataflow/ssa/SSAPhi.expected | 4 + .../dataflow/ssa/SsaDef.expected | 4 + .../dataflow/ssa/SsaDefElement.expected | 8 +- .../dataflow/ssa/SsaExplicitDef.expected | 43 ++++++++++ .../dataflow/ssa/SsaImplicitParameterDef.ql | 2 +- .../dataflow/ssa/SsaRead.expected | 4 +- .../dataflow/ssa/SsaUltimateDef.expected | 6 ++ 21 files changed, 219 insertions(+), 79 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/Assignable.qll b/csharp/ql/lib/semmle/code/csharp/Assignable.qll index af6861349d1c..e2c0dfd602bb 100644 --- a/csharp/ql/lib/semmle/code/csharp/Assignable.qll +++ b/csharp/ql/lib/semmle/code/csharp/Assignable.qll @@ -271,6 +271,8 @@ module AssignableInternal { def = TPatternDefinition(result) or def = TAssignOperationDefinition(result) + or + def = TParameterDefaultDefinition(_, result) } /** A local variable declaration at the top-level of a pattern. */ @@ -308,10 +310,17 @@ module AssignableInternal { exists(Callable c | p = c.getAParameter() | c.hasBody() or - // Same as `c.(Constructor).hasInitializer()`, but avoids negative recursion warning - c.getAChildExpr() instanceof @constructor_init_expr + c.(Constructor).hasInitializer() ) } or + TParameterDefaultDefinition(Parameter p, Expr default) { + exists(Callable c | p = c.getAParameter() | + c.hasBody() + or + c.(Constructor).hasInitializer() + ) and + default = p.getDefaultValue() + } or TAddressOfDefinition(AddressOfExpr aoe) or TPatternDefinition(TopLevelPatternDecl tlpd) or TAssignOperationDefinition(AssignOperation ao) { @@ -349,6 +358,8 @@ module AssignableInternal { any(AssignableDefinitions::PatternDefinition pd | result = pd.getDeclaration().getVariable()) or def = any(AssignableDefinitions::InitializerDefinition init | result = init.getAssignable()) + or + def = TParameterDefaultDefinition(result, _) } // Not defined by dispatch in order to avoid too conservative negative recursion error @@ -492,11 +503,6 @@ class AssignableDefinition extends TAssignableDefinition { exists(Ssa::ExplicitDefinition def | result = def.getAFirstReadAtNode(cfn) | this = def.getADefinition() ) - or - exists(Ssa::ImplicitParameterDefinition def | result = def.getAFirstReadAtNode(cfn) | - this.(AssignableDefinitions::ImplicitParameterDefinition).getParameter() = - def.getParameter() - ) ) } @@ -688,7 +694,33 @@ module AssignableDefinitions { override string toString() { result = p.toString() } - override Location getLocation() { result = this.getTarget().getLocation() } + override Location getLocation() { result = p.getLocation() } + } + + /** + * A default value assigned to a parameter. + */ + class ParameterDefaultDefinition extends AssignableDefinition, TParameterDefaultDefinition { + Parameter p; + Expr default; + + ParameterDefaultDefinition() { this = TParameterDefaultDefinition(p, default) } + + /** Gets the underlying parameter. */ + Parameter getParameter() { result = p } + + /** Gets the default value expression for the parameter. */ + Expr getDefaultValue() { result = default } + + override Expr getSource() { result = default } + + override Expr getElement() { result = default } + + override Callable getEnclosingCallable() { result = p.getCallable() } + + override string toString() { result = p.toString() + " = ..." } + + override Location getLocation() { result = default.getLocation() } } /** diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll index 52de1c2fe0ee..a8fe2e432e27 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll @@ -205,7 +205,7 @@ private module LogicInput implements GuardsImpl::LogicInputSig { } } - class SsaParameterInit extends SsaDefinition instanceof Ssa::ImplicitParameterDefinition { + class SsaParameterInit extends SsaDefinition instanceof Ssa::ParameterDefinition { Parameter getParameter() { result = super.getParameter() } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll index d36fb68b9155..14d343dedfbb 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll @@ -130,7 +130,7 @@ private predicate dereferenceAt(ControlFlowNode node, Ssa::Definition def, Deref d = def.getAReadAtNode(node) } -private predicate isMaybeNullArgument(Ssa::ImplicitParameterDefinition def, MaybeNullExpr arg) { +private predicate isMaybeNullArgument(Ssa::ParameterDefinition def, MaybeNullExpr arg) { exists(AssignableDefinitions::ImplicitParameterDefinition pdef, Parameter p | p = def.getParameter() | @@ -181,7 +181,7 @@ private predicate hasMultipleParamsArguments(Call c) { ) } -private predicate isNullDefaultArgument(Ssa::ImplicitParameterDefinition def, AlwaysNullExpr arg) { +private predicate isNullDefaultArgument(Ssa::ParameterDefinition def, AlwaysNullExpr arg) { exists(AssignableDefinitions::ImplicitParameterDefinition pdef, Parameter p | p = def.getParameter() | @@ -337,8 +337,7 @@ class Dereference extends G::DereferenceableExpr { or p.fromSource() and exists( - Ssa::ImplicitParameterDefinition def, - AssignableDefinitions::ImplicitParameterDefinition pdef + Ssa::ParameterDefinition def, AssignableDefinitions::ImplicitParameterDefinition pdef | p = def.getParameter() | diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll index 92149e026405..8f5b04c6708a 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll @@ -9,7 +9,6 @@ import csharp */ module Ssa { private import internal.SsaImpl as SsaImpl - private import semmle.code.csharp.internal.Location pragma[nomagic] private predicate assignableDefinitionLocalScopeVariable( @@ -19,15 +18,6 @@ module Ssa { ad.getEnclosingCallable() = c } - pragma[nomagic] - private predicate localScopeSourceVariable( - SourceVariables::LocalScopeSourceVariable sv, LocalScopeVariable v, Callable c1, Callable c2 - ) { - sv.getAssignable() = v and - sv.getEnclosingCallable() = c1 and - v.getCallable() = c2 - } - /** * A variable that can be SSA converted. * @@ -54,7 +44,7 @@ module Ssa { not exists(result.getTargetAccess()) and exists(LocalScopeVariable v, Callable c | assignableDefinitionLocalScopeVariable(result, v, c) and - localScopeSourceVariable(this, v, c, _) + SsaImpl::localScopeSourceVariable(this, v, c, _) ) } @@ -482,8 +472,8 @@ module Ssa { /** * An SSA definition representing the implicit initialization of a variable - * at the beginning of a callable. Either a parameter, a local scope variable - * captured by the callable, or a field or property accessed inside the callable. + * at the beginning of a callable. Either a local scope variable captured by + * the callable or a field or property accessed inside the callable. */ class ImplicitEntryDefinition extends ImplicitDefinition { ImplicitEntryDefinition() { @@ -507,51 +497,37 @@ module Ssa { override Location getLocation() { result = this.getCallable().getLocation() } } - private module NearestLocationInput implements NearestLocationInputSig { - class C = ImplicitParameterDefinition; + deprecated class ImplicitParameterDefinition = ParameterDefinition; - predicate relevantLocations(ImplicitParameterDefinition def, Location l1, Location l2) { - not def.getBasicBlock() instanceof EntryBasicBlock and - l1 = def.getParameter().getALocation() and - l2 = def.getBasicBlock().getLocation() - } - } + final class ParameterDefinition = SsaImpl::ParameterDefinitionImpl; - pragma[nomagic] - private predicate implicitEntryDef(ImplicitEntryDefinition def, SourceVariable v, Callable c) { - v = def.getSourceVariable() and - c = def.getCallable() + private class ExplicitParameterDefinition extends ExplicitDefinition, + SsaImpl::ParameterDefinitionImpl + { + private Parameter p; + override AssignableDefinitions::ImplicitParameterDefinition ad; + + ExplicitParameterDefinition() { p = ad.getParameter() } + + override Parameter getParameter() { result = p } + + override string toString() { result = SsaImpl::ParameterDefinitionImpl.super.toString() } } /** - * An SSA definition representing the implicit initialization of a parameter - * at the beginning of a callable. + * An SSA definition representing the default value of a parameter. */ - class ImplicitParameterDefinition extends ImplicitEntryDefinition { + class ParameterDefaultDefinition extends ExplicitDefinition { private Parameter p; + override AssignableDefinitions::ParameterDefaultDefinition ad; - ImplicitParameterDefinition() { - exists(SourceVariable sv, Callable c | - implicitEntryDef(this, sv, c) and - localScopeSourceVariable(sv, p, _, c) - ) - } + ParameterDefaultDefinition() { p = ad.getParameter() } /** Gets the parameter that this entry definition represents. */ Parameter getParameter() { result = p } - override Element getElement() { result = this.getParameter() } - override string toString() { - result = "SSA param(" + pragma[only_bind_out](this.getParameter()) + ")" - } - - override Location getLocation() { - not NearestLocation::nearestLocation(this, _, _) and - result = p.getLocation() - or - // multi-bodied method: use matching parameter location - NearestLocation::nearestLocation(this, result, _) + result = "SSA param_default(" + pragma[only_bind_out](this.getParameter()) + ")" } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index 1352f6e9f9f3..c4d2a8441033 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -1303,7 +1303,7 @@ private module NearestLocationInputParamAfterCallable implements NearestLocation private module ParameterNodes { pragma[nomagic] - private predicate ssaParamDef(Ssa::ImplicitParameterDefinition ssaDef, Parameter p, Location l) { + private predicate ssaParamDef(Ssa::ParameterDefinition ssaDef, Parameter p, Location l) { p = ssaDef.getParameter() and l = ssaDef.getLocation() } @@ -1358,7 +1358,7 @@ private module ParameterNodes { } /** Gets the SSA definition corresponding to this parameter, if any. */ - Ssa::ImplicitParameterDefinition getSsaDefinition() { + Ssa::ParameterDefinition getSsaDefinition() { exists(Parameter p, Location l | l = this.getParameterLocation(p) and ssaParamDef(result, p, l) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll index b2c445985245..b3a95977be99 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll @@ -7,6 +7,7 @@ private import codeql.ssa.Ssa as SsaImplCommon private import AssignableDefinitions private import semmle.code.csharp.controlflow.Guards as Guards private import semmle.code.csharp.dataflow.internal.BaseSSA +private import semmle.code.csharp.internal.Location private module SsaInput implements SsaImplCommon::InputSig { class SourceVariable = Ssa::SourceVariable; @@ -126,7 +127,6 @@ private module SourceVariableImpl { */ predicate variableDefinition(BasicBlock bb, int i, Ssa::SourceVariable v, AssignableDefinition ad) { ad = v.getADefinition() and - ad.getExpr().getControlFlowNode() = bb.getNode(i) and // In cases like `(x, x) = (0, 1)`, we discard the first (dead) definition of `x` not exists(TupleAssignmentDefinition first, TupleAssignmentDefinition second | first = ad | second.getAssignment() = first.getAssignment() and @@ -136,7 +136,13 @@ private module SourceVariableImpl { // In cases like `M(out x, out x)`, there is no inherent evaluation order, so we // collapse the two definitions of `x`, using the first access as the representative, // and expose both definitions in `ExplicitDefinition.getADefinition()` - not ad = getASameOutRefDefAfter(v, _) + not ad = getASameOutRefDefAfter(v, _) and + ( + ad.getExpr().getControlFlowNode() = bb.getNode(i) + or + ad.(AssignableDefinitions::ImplicitParameterDefinition).getParameter().getControlFlowNode() = + bb.getNode(i) + ) } /** @@ -243,6 +249,15 @@ private module SourceVariableImpl { private import SourceVariableImpl private import Ssa::SourceVariables +pragma[nomagic] +predicate localScopeSourceVariable( + Ssa::SourceVariables::LocalScopeSourceVariable sv, LocalScopeVariable v, Callable c1, Callable c2 +) { + sv.getAssignable() = v and + sv.getEnclosingCallable() = c1 and + v.getCallable() = c2 +} + private module CallGraph { private import semmle.code.csharp.dispatch.Dispatch @@ -767,9 +782,10 @@ private module Cached { v instanceof PlainFieldOrPropSourceVariable ) or - // In case `c` has multiple bodies, we want each body to get its own implicit - // entry definition, so we use the basic block containing the body instead of - // the entry block. + // In case `c` has multiple bodies, we want each body to get its own set of + // parameter definitions, so we add special writes to the start of the basic + // blocks containing the bodies + strictcount(c.getBody()) > 1 and v.getAssignable() instanceof Parameter and bb.getANode().isBefore(c.getBody()) ) @@ -962,7 +978,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu predicate ssaDefHasSource(WriteDefinition def) { // exclude flow directly from RHS to SSA definition, as we instead want to // go from RHS to matching assignable definition, and from there to SSA definition - def instanceof Ssa::ImplicitParameterDefinition + def instanceof Ssa::ParameterDefinition } /** @@ -994,3 +1010,56 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu } private module DataFlowIntegrationImpl = Impl::DataFlowIntegration; + +private module MultiBodyNearestLocationInput implements NearestLocationInputSig { + class C = MultiBodyParameterDefinition; + + predicate relevantLocations(MultiBodyParameterDefinition def, Location l1, Location l2) { + exists(Callable c, ControlFlowNode n | + l1 = def.getParameter().getALocation() and + n = def.getBasicBlock().getANode() and + n.isBefore(c.getBody()) and + l2 = n.getLocation() + ) + } +} + +pragma[nomagic] +private predicate implicitEntryDef( + Ssa::ImplicitEntryDefinition def, Ssa::SourceVariable v, Callable c +) { + v = def.getSourceVariable() and + c = def.getCallable() +} + +/** + * An SSA definition representing the implicit initialization of a parameter + * at the beginning of a callable. + */ +abstract class ParameterDefinitionImpl extends Ssa::Definition { + /** Gets the parameter that this definition represents. */ + abstract Parameter getParameter(); + + override string toString() { + result = "SSA param(" + pragma[only_bind_out](this.getParameter()) + ")" + } +} + +class MultiBodyParameterDefinition extends ParameterDefinitionImpl, Ssa::ImplicitEntryDefinition { + private Parameter p; + + MultiBodyParameterDefinition() { + exists(Ssa::SourceVariable sv, Callable c | + implicitEntryDef(this, sv, c) and + localScopeSourceVariable(sv, p, _, c) + ) + } + + override Parameter getParameter() { result = p } + + override string toString() { result = ParameterDefinitionImpl.super.toString() } + + override Location getLocation() { + NearestLocation::nearestLocation(this, result, _) + } +} diff --git a/csharp/ql/test/library-tests/csharp7/DefUse.ql b/csharp/ql/test/library-tests/csharp7/DefUse.ql index a37b867e086a..5957c0092604 100644 --- a/csharp/ql/test/library-tests/csharp7/DefUse.ql +++ b/csharp/ql/test/library-tests/csharp7/DefUse.ql @@ -6,7 +6,7 @@ where ( ult.(Ssa::ExplicitDefinition).getADefinition() = def or - ult.(Ssa::ImplicitParameterDefinition).getParameter() = + ult.(Ssa::ParameterDefinition).getParameter() = def.(AssignableDefinitions::ImplicitParameterDefinition).getParameter() ) and read = ssaDef.getARead() diff --git a/csharp/ql/test/library-tests/dataflow/defuse/parameterUseEquivalence.ql b/csharp/ql/test/library-tests/dataflow/defuse/parameterUseEquivalence.ql index e4216f899426..896092718a0e 100644 --- a/csharp/ql/test/library-tests/dataflow/defuse/parameterUseEquivalence.ql +++ b/csharp/ql/test/library-tests/dataflow/defuse/parameterUseEquivalence.ql @@ -24,8 +24,7 @@ private LocalScopeVariableRead getAReachableUncertainRead( AssignableDefinitions::ImplicitParameterDefinition p ) { exists(Ssa::Definition ssaDef | - p.getParameter() = - ssaDef.getAnUltimateDefinition().(Ssa::ImplicitParameterDefinition).getParameter() + p.getParameter() = ssaDef.getAnUltimateDefinition().(Ssa::ParameterDefinition).getParameter() | result = ssaDef.getARead() ) diff --git a/csharp/ql/test/library-tests/dataflow/local/DataFlow.expected b/csharp/ql/test/library-tests/dataflow/local/DataFlow.expected index ed80fa1e8b3b..ef002f0396f2 100644 --- a/csharp/ql/test/library-tests/dataflow/local/DataFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/local/DataFlow.expected @@ -5,6 +5,7 @@ | LocalDataFlow.cs:315:15:315:20 | access to local variable sink73 | | LocalDataFlow.cs:316:15:316:20 | access to local variable sink74 | | LocalDataFlow.cs:342:15:342:21 | access to parameter tainted | +| LocalDataFlow.cs:387:15:387:15 | access to parameter s | | SSA.cs:9:15:9:22 | access to local variable ssaSink0 | | SSA.cs:25:15:25:22 | access to local variable ssaSink1 | | SSA.cs:43:15:43:22 | access to local variable ssaSink2 | diff --git a/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected index a22e56b0dd82..d1df5b77de02 100644 --- a/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/csharp/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -529,6 +529,9 @@ | LocalDataFlow.cs:381:17:381:29 | "not tainted" | LocalDataFlow.cs:381:13:381:13 | access to local variable x | | LocalDataFlow.cs:385:34:385:34 | SSA param(s) | LocalDataFlow.cs:387:15:387:15 | access to parameter s | | LocalDataFlow.cs:385:34:385:34 | s | LocalDataFlow.cs:385:34:385:34 | SSA param(s) | +| LocalDataFlow.cs:385:38:385:51 | "taint source" | LocalDataFlow.cs:385:38:385:51 | s = ... | +| LocalDataFlow.cs:385:38:385:51 | SSA param_default(s) | LocalDataFlow.cs:387:15:387:15 | access to parameter s | +| LocalDataFlow.cs:385:38:385:51 | s = ... | LocalDataFlow.cs:385:38:385:51 | SSA param_default(s) | | SSA.cs:3:14:3:16 | this | SSA.cs:3:14:3:16 | this access | | SSA.cs:5:17:5:17 | SSA entry def(this.S) | SSA.cs:67:9:67:14 | access to field S | | SSA.cs:5:17:5:17 | this | SSA.cs:67:9:67:12 | this access | diff --git a/csharp/ql/test/library-tests/dataflow/local/TaintTracking.expected b/csharp/ql/test/library-tests/dataflow/local/TaintTracking.expected index 372d0bfb3e13..a7ba919f2d74 100644 --- a/csharp/ql/test/library-tests/dataflow/local/TaintTracking.expected +++ b/csharp/ql/test/library-tests/dataflow/local/TaintTracking.expected @@ -43,6 +43,7 @@ | LocalDataFlow.cs:315:15:315:20 | access to local variable sink73 | | LocalDataFlow.cs:316:15:316:20 | access to local variable sink74 | | LocalDataFlow.cs:342:15:342:21 | access to parameter tainted | +| LocalDataFlow.cs:387:15:387:15 | access to parameter s | | SSA.cs:9:15:9:22 | access to local variable ssaSink0 | | SSA.cs:25:15:25:22 | access to local variable ssaSink1 | | SSA.cs:43:15:43:22 | access to local variable ssaSink2 | diff --git a/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected b/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected index 87cd14bd25b2..06251245a058 100644 --- a/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected +++ b/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected @@ -641,6 +641,9 @@ | LocalDataFlow.cs:381:17:381:29 | "not tainted" | LocalDataFlow.cs:381:13:381:13 | access to local variable x | | LocalDataFlow.cs:385:34:385:34 | SSA param(s) | LocalDataFlow.cs:387:15:387:15 | access to parameter s | | LocalDataFlow.cs:385:34:385:34 | s | LocalDataFlow.cs:385:34:385:34 | SSA param(s) | +| LocalDataFlow.cs:385:38:385:51 | "taint source" | LocalDataFlow.cs:385:38:385:51 | s = ... | +| LocalDataFlow.cs:385:38:385:51 | SSA param_default(s) | LocalDataFlow.cs:387:15:387:15 | access to parameter s | +| LocalDataFlow.cs:385:38:385:51 | s = ... | LocalDataFlow.cs:385:38:385:51 | SSA param_default(s) | | SSA.cs:3:14:3:16 | this | SSA.cs:3:14:3:16 | this access | | SSA.cs:5:17:5:17 | SSA entry def(this.S) | SSA.cs:67:9:67:14 | access to field S | | SSA.cs:5:17:5:17 | this | SSA.cs:67:9:67:12 | this access | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/BaseSsaConsistency.ql b/csharp/ql/test/library-tests/dataflow/ssa/BaseSsaConsistency.ql index 4748f516114c..d68e39fb3966 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/BaseSsaConsistency.ql +++ b/csharp/ql/test/library-tests/dataflow/ssa/BaseSsaConsistency.ql @@ -12,7 +12,7 @@ where edef.getADefinition() = def and edef.getARead() = ar ) and - not exists(Ssa::ImplicitParameterDefinition edef | + not exists(Ssa::ParameterDefinition edef | edef.getParameter() = def.(AssignableDefinitions::ImplicitParameterDefinition).getParameter() and edef.getARead() = ar ) diff --git a/csharp/ql/test/library-tests/dataflow/ssa/DefAdjacentRead.expected b/csharp/ql/test/library-tests/dataflow/ssa/DefAdjacentRead.expected index a6833b789f78..0350c73ce259 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/DefAdjacentRead.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/DefAdjacentRead.expected @@ -62,8 +62,6 @@ | DefUse.cs:171:23:171:23 | a | DefUse.cs:171:23:180:9 | Action a = ... | DefUse.cs:181:9:181:9 | access to local variable a | | DefUse.cs:171:23:171:23 | a | DefUse.cs:186:9:190:9 | ... = ... | DefUse.cs:191:9:191:9 | access to local variable a | | DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:5:16:5:16 | access to parameter b | -| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:5:20:5:20 | access to parameter s | -| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:5:24:5:24 | access to parameter i | | Example.cs:4:9:4:13 | Field | Example.cs:8:9:8:22 | ... = ... | Example.cs:9:13:9:22 | access to field Field | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | i | Example.cs:8:22:8:22 | access to parameter i | | Example.cs:18:16:18:16 | p | Example.cs:18:16:18:16 | p | Example.cs:22:17:22:17 | access to parameter p | @@ -85,8 +83,6 @@ | Fields.cs:93:19:93:23 | Field | Fields.cs:102:9:102:28 | ... = ... | Fields.cs:104:16:104:25 | access to field Field | | Fields.cs:95:19:95:19 | f | Fields.cs:95:19:95:19 | f | Fields.cs:97:9:97:9 | access to parameter f | | Fields.cs:107:33:107:33 | f | Fields.cs:107:33:107:33 | f | Fields.cs:107:38:107:38 | access to parameter f | -| MultiImplementationA.cs:5:22:5:22 | x | MultiImplementationA.cs:5:22:5:22 | x | MultiImplementationA.cs:5:28:5:28 | access to parameter x | -| MultiImplementationA.cs:5:22:5:22 | x | MultiImplementationA.cs:5:22:5:22 | x | MultiImplementationB.cs:3:28:3:28 | access to parameter x | | OutRef.cs:5:9:5:13 | Field | OutRef.cs:13:28:13:32 | access to field Field | OutRef.cs:15:13:15:17 | access to field Field | | OutRef.cs:5:9:5:13 | Field | OutRef.cs:16:21:16:25 | access to field Field | OutRef.cs:17:13:17:17 | access to field Field | | OutRef.cs:5:9:5:13 | Field | OutRef.cs:16:32:16:36 | access to field Field | OutRef.cs:17:13:17:17 | access to field Field | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SSAPhi.expected b/csharp/ql/test/library-tests/dataflow/ssa/SSAPhi.expected index 1acf66efd962..7ace8cd316df 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SSAPhi.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SSAPhi.expected @@ -8,6 +8,10 @@ | DefUse.cs:79:13:79:14 | x1 | DefUse.cs:80:9:80:51 | SSA phi(x1) | DefUse.cs:80:30:80:31 | SSA def(x1) | | DefUse.cs:97:13:97:14 | x5 | DefUse.cs:98:9:102:9 | SSA phi(x5) | DefUse.cs:97:13:97:18 | SSA def(x5) | | DefUse.cs:97:13:97:14 | x5 | DefUse.cs:98:9:102:9 | SSA phi(x5) | DefUse.cs:101:13:101:23 | SSA def(x5) | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:42:3:42 | SSA phi(s) | DefaultParam.cs:3:30:3:30 | SSA param(s) | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:42:3:42 | SSA phi(s) | DefaultParam.cs:3:34:3:35 | SSA param_default(s) | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:4:5:6:5 | SSA phi(i) | DefaultParam.cs:3:42:3:42 | SSA param(i) | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:4:5:6:5 | SSA phi(i) | DefaultParam.cs:3:46:3:46 | SSA param_default(i) | | Example.cs:8:9:8:18 | this.Field | Example.cs:10:9:13:24 | SSA phi(this.Field) | Example.cs:11:13:11:30 | SSA def(this.Field) | | Example.cs:8:9:8:18 | this.Field | Example.cs:10:9:13:24 | SSA phi(this.Field) | Example.cs:12:14:13:24 | SSA phi(this.Field) | | Example.cs:8:9:8:18 | this.Field | Example.cs:12:14:13:24 | SSA phi(this.Field) | Example.cs:8:9:8:22 | SSA def(this.Field) | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected index 8f4af9a3aac2..507ff8b2b6e5 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDef.expected @@ -95,7 +95,11 @@ | DefUse.cs:188:13:188:18 | this.Field5 | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | | DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:3:20:3:20 | SSA param(b) | | DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:30:3:30 | SSA param(s) | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:34:3:35 | SSA param_default(s) | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:42:3:42 | SSA phi(s) | | DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | SSA param(i) | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:46:3:46 | SSA param_default(i) | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:4:5:6:5 | SSA phi(i) | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | | Example.cs:8:9:8:18 | this.Field | Example.cs:8:9:8:22 | SSA def(this.Field) | | Example.cs:8:9:8:18 | this.Field | Example.cs:10:9:13:24 | SSA phi(this.Field) | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected index d0e2984050d1..b6e2beaae692 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaDefElement.expected @@ -90,7 +90,11 @@ | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | DefUse.cs:191:9:191:11 | delegate call | | DefaultParam.cs:3:20:3:20 | SSA param(b) | DefaultParam.cs:3:20:3:20 | b | | DefaultParam.cs:3:30:3:30 | SSA param(s) | DefaultParam.cs:3:30:3:30 | s | +| DefaultParam.cs:3:34:3:35 | SSA param_default(s) | DefaultParam.cs:3:34:3:35 | "" | | DefaultParam.cs:3:42:3:42 | SSA param(i) | DefaultParam.cs:3:42:3:42 | i | +| DefaultParam.cs:3:42:3:42 | SSA phi(s) | DefaultParam.cs:3:42:3:42 | i | +| DefaultParam.cs:3:46:3:46 | SSA param_default(i) | DefaultParam.cs:3:46:3:46 | 0 | +| DefaultParam.cs:4:5:6:5 | SSA phi(i) | DefaultParam.cs:4:5:6:5 | {...} | | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:6:23:6:23 | i | | Example.cs:8:9:8:22 | SSA def(this.Field) | Example.cs:8:9:8:22 | ... = ... | | Example.cs:11:13:11:30 | SSA def(this.Field) | Example.cs:11:13:11:30 | ... = ... | @@ -148,8 +152,8 @@ | Fields.cs:114:9:114:22 | SSA call def(this.Field) | Fields.cs:114:9:114:22 | call to method SetField | | Fields.cs:114:9:114:22 | SSA call def(this.Field.Field) | Fields.cs:114:9:114:22 | call to method SetField | | Fields.cs:114:9:114:22 | SSA qualifier def(this.Field.Field.xs) | Fields.cs:114:9:114:22 | call to method SetField | -| MultiImplementationA.cs:5:22:5:22 | SSA param(x) | MultiImplementationA.cs:5:22:5:22 | x | -| MultiImplementationB.cs:3:22:3:22 | SSA param(x) | MultiImplementationA.cs:5:22:5:22 | x | +| MultiImplementationA.cs:5:22:5:22 | SSA param(x) | MultiImplementationA.cs:5:16:5:16 | M | +| MultiImplementationB.cs:3:22:3:22 | SSA param(x) | MultiImplementationA.cs:5:16:5:16 | M | | OutRef.cs:7:10:7:10 | SSA entry def(this.Field) | OutRef.cs:7:10:7:10 | M | | OutRef.cs:9:13:9:17 | SSA def(j) | OutRef.cs:9:13:9:17 | Int32 j = ... | | OutRef.cs:10:25:10:25 | SSA def(i) | OutRef.cs:10:9:10:33 | call to method OutRefM | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected index 8582dd1cf6e0..9a2e5c49b15f 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaExplicitDef.expected @@ -3,10 +3,18 @@ | Capture.cs:19:20:19:20 | b | Capture.cs:19:20:23:13 | SSA def(b) | Capture.cs:19:20:23:13 | Action b = ... | | Capture.cs:30:16:30:16 | c | Capture.cs:30:16:30:35 | SSA def(c) | Capture.cs:30:16:30:35 | Action c = ... | | Capture.cs:52:16:52:16 | b | Capture.cs:52:16:52:43 | SSA def(b) | Capture.cs:52:16:52:43 | Action b = ... | +| Capture.cs:57:57:57:63 | strings | Capture.cs:57:57:57:63 | SSA param(strings) | Capture.cs:57:57:57:63 | strings | | Capture.cs:60:27:60:27 | e | Capture.cs:60:27:60:38 | SSA def(e) | Capture.cs:60:27:60:38 | Func e = ... | +| Capture.cs:65:45:65:51 | strings | Capture.cs:65:45:65:51 | SSA param(strings) | Capture.cs:65:45:65:51 | strings | +| Capture.cs:68:32:68:32 | s | Capture.cs:68:32:68:32 | SSA param(s) | Capture.cs:68:32:68:32 | s | +| Capture.cs:69:25:69:25 | s | Capture.cs:69:25:69:25 | SSA param(s) | Capture.cs:69:25:69:25 | s | +| Capture.cs:73:67:73:73 | strings | Capture.cs:73:67:73:73 | SSA param(strings) | Capture.cs:73:67:73:73 | strings | | Capture.cs:76:63:76:63 | e | Capture.cs:76:63:76:81 | SSA def(e) | Capture.cs:76:63:76:81 | Expression> e = ... | +| Capture.cs:81:28:81:28 | i | Capture.cs:81:28:81:28 | SSA param(i) | Capture.cs:81:28:81:28 | i | | Capture.cs:81:28:81:28 | i | Capture.cs:81:34:81:36 | SSA def(i) | Capture.cs:81:34:81:36 | ...++ | +| Capture.cs:83:65:83:71 | strings | Capture.cs:83:65:83:71 | SSA param(strings) | Capture.cs:83:65:83:71 | strings | | Capture.cs:86:64:86:64 | e | Capture.cs:86:64:86:73 | SSA def(e) | Capture.cs:86:64:86:73 | Expression> e = ... | +| Capture.cs:92:18:92:18 | d | Capture.cs:92:18:92:18 | SSA param(d) | Capture.cs:92:18:92:18 | d | | Capture.cs:98:17:98:17 | x | Capture.cs:98:17:98:21 | SSA def(x) | Capture.cs:98:17:98:21 | Int32 x = ... | | Capture.cs:117:17:117:17 | x | Capture.cs:117:17:117:21 | SSA def(x) | Capture.cs:117:17:117:21 | Int32 x = ... | | Capture.cs:198:28:198:29 | eh | Capture.cs:198:28:198:44 | SSA def(eh) | Capture.cs:198:28:198:44 | MyEventHandler eh = ... | @@ -14,13 +22,18 @@ | Capture.cs:210:24:210:24 | p | Capture.cs:210:24:210:59 | SSA def(p) | Capture.cs:210:24:210:59 | Process p = ... | | Capture.cs:212:30:212:35 | exited | Capture.cs:212:30:212:71 | SSA def(exited) | Capture.cs:212:30:212:71 | EventHandler exited = ... | | Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | ... = ... | +| Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:7:25:7:25 | b | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:29:25:29 | Consistency c | | Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | ... = ... | | Consistency.cs:44:11:44:11 | s | Consistency.cs:44:11:44:11 | SSA def(s) | Consistency.cs:44:11:44:11 | S s | +| Consistency.cs:49:30:49:30 | a | Consistency.cs:49:30:49:30 | SSA param(a) | Consistency.cs:49:30:49:30 | a | +| Consistency.cs:49:37:49:37 | i | Consistency.cs:49:37:49:37 | SSA param(i) | Consistency.cs:49:37:49:37 | i | +| Consistency.cs:51:20:51:20 | a | Consistency.cs:51:20:51:20 | SSA param(a) | Consistency.cs:51:20:51:20 | a | | Consistency.cs:56:17:56:17 | k | Consistency.cs:56:17:56:40 | SSA def(k) | Consistency.cs:56:17:56:40 | Int32 k = ... | | Consistency.cs:56:17:56:17 | k | Consistency.cs:57:9:57:13 | SSA def(k) | Consistency.cs:57:9:57:13 | ... = ... | | Consistency.cs:56:17:56:17 | k | Consistency.cs:58:9:58:13 | SSA def(k) | Consistency.cs:58:9:58:13 | ... = ... | +| DefUse.cs:3:26:3:26 | w | DefUse.cs:3:26:3:26 | SSA param(w) | DefUse.cs:3:26:3:26 | w | | DefUse.cs:3:26:3:26 | w | DefUse.cs:19:13:19:18 | SSA def(w) | DefUse.cs:19:13:19:18 | ... = ... | | DefUse.cs:3:26:3:26 | w | DefUse.cs:29:13:29:18 | SSA def(w) | DefUse.cs:29:13:29:18 | ... = ... | | DefUse.cs:5:13:5:13 | x | DefUse.cs:5:13:5:17 | SSA def(x) | DefUse.cs:5:13:5:17 | Int32 x = ... | @@ -50,17 +63,29 @@ | DefUse.cs:97:13:97:14 | x5 | DefUse.cs:104:9:104:15 | SSA def(x5) | DefUse.cs:104:9:104:15 | ... += ... | | DefUse.cs:114:42:114:42 | i | DefUse.cs:114:47:114:52 | SSA def(i) | DefUse.cs:114:47:114:52 | ... = ... | | DefUse.cs:116:42:116:42 | i | DefUse.cs:116:47:116:51 | SSA def(i) | DefUse.cs:116:47:116:51 | ... = ... | +| DefUse.cs:118:45:118:45 | i | DefUse.cs:118:45:118:45 | SSA param(i) | DefUse.cs:118:45:118:45 | i | | DefUse.cs:118:45:118:45 | i | DefUse.cs:118:68:118:72 | SSA def(i) | DefUse.cs:118:68:118:72 | ... = ... | | DefUse.cs:118:56:118:56 | j | DefUse.cs:118:61:118:65 | SSA def(j) | DefUse.cs:118:61:118:65 | ... = ... | +| DefUse.cs:128:19:128:19 | i | DefUse.cs:128:19:128:19 | SSA param(i) | DefUse.cs:128:19:128:19 | i | +| DefUse.cs:134:22:134:22 | d | DefUse.cs:134:22:134:22 | SSA param(d) | DefUse.cs:134:22:134:22 | d | +| DefUse.cs:142:68:142:69 | ie | DefUse.cs:142:68:142:69 | SSA param(ie) | DefUse.cs:142:68:142:69 | ie | | DefUse.cs:144:22:144:22 | x | DefUse.cs:144:22:144:22 | SSA def(x) | DefUse.cs:144:22:144:22 | String x | | DefUse.cs:155:9:155:14 | this.Field4 | DefUse.cs:155:9:155:18 | SSA def(this.Field4) | DefUse.cs:155:9:155:18 | ... = ... | | DefUse.cs:171:23:171:23 | a | DefUse.cs:171:23:180:9 | SSA def(a) | DefUse.cs:171:23:180:9 | Action a = ... | | DefUse.cs:171:23:171:23 | a | DefUse.cs:186:9:190:9 | SSA def(a) | DefUse.cs:186:9:190:9 | ... = ... | | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:184:9:184:18 | SSA def(this.Field5) | DefUse.cs:184:9:184:18 | ... = ... | | DefUse.cs:188:13:188:18 | this.Field5 | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | DefUse.cs:188:13:188:22 | ... = ... | +| DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:3:20:3:20 | SSA param(b) | DefaultParam.cs:3:20:3:20 | b | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:30:3:30 | SSA param(s) | DefaultParam.cs:3:30:3:30 | s | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:34:3:35 | SSA param_default(s) | DefaultParam.cs:3:34:3:35 | s = ... | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | SSA param(i) | DefaultParam.cs:3:42:3:42 | i | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:46:3:46 | SSA param_default(i) | DefaultParam.cs:3:46:3:46 | i = ... | +| Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:6:23:6:23 | i | | Example.cs:8:9:8:18 | this.Field | Example.cs:8:9:8:22 | SSA def(this.Field) | Example.cs:8:9:8:22 | ... = ... | | Example.cs:8:9:8:18 | this.Field | Example.cs:11:13:11:30 | SSA def(this.Field) | Example.cs:11:13:11:30 | ... = ... | +| Example.cs:18:16:18:16 | p | Example.cs:18:16:18:16 | SSA param(p) | Example.cs:18:16:18:16 | p | | Example.cs:18:16:18:16 | p | Example.cs:23:13:23:17 | SSA def(p) | Example.cs:23:13:23:17 | ... = ... | +| Example.cs:18:24:18:24 | b | Example.cs:18:24:18:24 | SSA param(b) | Example.cs:18:24:18:24 | b | | Fields.cs:18:15:18:15 | x | Fields.cs:20:9:20:14 | SSA def(x) | Fields.cs:20:9:20:14 | ... = ... | | Fields.cs:18:19:18:20 | this.xs | Fields.cs:24:9:24:23 | SSA def(this.xs) | Fields.cs:24:9:24:23 | ... = ... | | Fields.cs:30:13:30:13 | f | Fields.cs:30:13:30:28 | SSA def(f) | Fields.cs:30:13:30:28 | Fields f = ... | @@ -76,8 +101,10 @@ | Fields.cs:80:9:80:12 | f.xs | Fields.cs:88:9:88:25 | SSA def(f.xs) | Fields.cs:88:9:88:25 | ... = ... | | Fields.cs:82:9:82:15 | this.xs | Fields.cs:85:9:85:22 | SSA def(this.xs) | Fields.cs:85:9:85:22 | ... = ... | | Fields.cs:82:9:82:15 | this.xs | Fields.cs:87:9:87:22 | SSA def(this.xs) | Fields.cs:87:9:87:22 | ... = ... | +| Fields.cs:95:19:95:19 | f | Fields.cs:95:19:95:19 | SSA param(f) | Fields.cs:95:19:95:19 | f | | Fields.cs:97:9:97:15 | f.Field | Fields.cs:97:9:97:30 | SSA def(f.Field) | Fields.cs:97:9:97:30 | ... = ... | | Fields.cs:102:9:102:18 | this.Field | Fields.cs:102:9:102:28 | SSA def(this.Field) | Fields.cs:102:9:102:28 | ... = ... | +| Fields.cs:107:33:107:33 | f | Fields.cs:107:33:107:33 | SSA param(f) | Fields.cs:107:33:107:33 | f | | OutRef.cs:9:13:9:13 | j | OutRef.cs:9:13:9:17 | SSA def(j) | OutRef.cs:9:13:9:17 | Int32 j = ... | | OutRef.cs:9:13:9:13 | j | OutRef.cs:10:32:10:32 | SSA def(j) | OutRef.cs:10:32:10:32 | access to local variable j | | OutRef.cs:9:13:9:13 | j | OutRef.cs:22:22:22:22 | SSA def(j) | OutRef.cs:22:22:22:22 | access to local variable j | @@ -91,8 +118,12 @@ | OutRef.cs:18:13:18:13 | t | OutRef.cs:18:13:18:28 | SSA def(t) | OutRef.cs:18:13:18:28 | OutRef t = ... | | OutRef.cs:19:32:19:38 | t.Field | OutRef.cs:19:32:19:38 | SSA def(t.Field) | OutRef.cs:19:32:19:38 | access to field Field | | OutRef.cs:28:26:28:26 | i | OutRef.cs:30:9:30:13 | SSA def(i) | OutRef.cs:30:9:30:13 | ... = ... | +| OutRef.cs:28:37:28:37 | j | OutRef.cs:28:37:28:37 | SSA param(j) | OutRef.cs:28:37:28:37 | j | | OutRef.cs:28:37:28:37 | j | OutRef.cs:31:9:31:13 | SSA def(j) | OutRef.cs:31:9:31:13 | ... = ... | | OutRef.cs:34:27:34:27 | i | OutRef.cs:36:9:36:13 | SSA def(i) | OutRef.cs:36:9:36:13 | ... = ... | +| OutRef.cs:34:38:34:38 | j | OutRef.cs:34:38:34:38 | SSA param(j) | OutRef.cs:34:38:34:38 | j | +| OutRef.cs:39:24:39:24 | b | OutRef.cs:39:24:39:24 | SSA param(b) | OutRef.cs:39:24:39:24 | b | +| OutRef.cs:39:35:39:35 | j | OutRef.cs:39:35:39:35 | SSA param(j) | OutRef.cs:39:35:39:35 | j | | OutRef.cs:39:35:39:35 | j | OutRef.cs:42:13:42:17 | SSA def(j) | OutRef.cs:42:13:42:17 | ... = ... | | Patterns.cs:7:16:7:16 | o | Patterns.cs:7:16:7:23 | SSA def(o) | Patterns.cs:7:16:7:23 | Object o = ... | | Patterns.cs:8:22:8:23 | i1 | Patterns.cs:8:18:8:23 | SSA def(i1) | Patterns.cs:8:18:8:23 | Int32 i1 | @@ -107,6 +138,7 @@ | Properties.cs:31:19:31:22 | f.xs | Properties.cs:45:9:45:25 | SSA def(f.xs) | Properties.cs:45:9:45:25 | ... = ... | | Properties.cs:32:15:32:15 | z | Properties.cs:47:9:47:14 | SSA def(z) | Properties.cs:47:9:47:14 | ... = ... | | Properties.cs:32:19:32:20 | this.xs | Properties.cs:42:9:42:23 | SSA def(this.xs) | Properties.cs:42:9:42:23 | ... = ... | +| Properties.cs:61:23:61:23 | i | Properties.cs:61:23:61:23 | SSA param(i) | Properties.cs:61:23:61:23 | i | | Properties.cs:61:23:61:23 | i | Properties.cs:63:16:63:18 | SSA def(i) | Properties.cs:63:16:63:18 | ...-- | | Properties.cs:73:13:73:13 | f | Properties.cs:73:13:73:32 | SSA def(f) | Properties.cs:73:13:73:32 | Properties f = ... | | Properties.cs:74:23:74:23 | a | Properties.cs:74:23:74:54 | SSA def(a) | Properties.cs:74:23:74:54 | Action a = ... | @@ -116,8 +148,11 @@ | Properties.cs:76:9:76:12 | f.xs | Properties.cs:84:9:84:25 | SSA def(f.xs) | Properties.cs:84:9:84:25 | ... = ... | | Properties.cs:78:9:78:15 | this.xs | Properties.cs:81:9:81:22 | SSA def(this.xs) | Properties.cs:81:9:81:22 | ... = ... | | Properties.cs:78:9:78:15 | this.xs | Properties.cs:83:9:83:22 | SSA def(this.xs) | Properties.cs:83:9:83:22 | ... = ... | +| Properties.cs:106:37:106:37 | p | Properties.cs:106:37:106:37 | SSA param(p) | Properties.cs:106:37:106:37 | p | +| Test.cs:5:15:5:20 | param1 | Test.cs:5:15:5:20 | SSA param(param1) | Test.cs:5:15:5:20 | param1 | | Test.cs:5:15:5:20 | param1 | Test.cs:27:17:27:24 | SSA def(param1) | Test.cs:27:17:27:24 | ...++ | | Test.cs:5:15:5:20 | param1 | Test.cs:41:13:41:23 | SSA def(param1) | Test.cs:41:13:41:23 | ... += ... | +| Test.cs:5:67:5:72 | param2 | Test.cs:5:67:5:72 | SSA param(param2) | Test.cs:5:67:5:72 | param2 | | Test.cs:7:9:7:13 | this.field | Test.cs:7:9:7:17 | SSA def(this.field) | Test.cs:7:9:7:17 | ... = ... | | Test.cs:7:9:7:13 | this.field | Test.cs:21:13:21:22 | SSA def(this.field) | Test.cs:21:13:21:22 | ... = ... | | Test.cs:8:13:8:13 | x | Test.cs:8:13:8:17 | SSA def(x) | Test.cs:8:13:8:17 | Int32 x = ... | @@ -133,10 +168,18 @@ | Test.cs:34:18:34:18 | i | Test.cs:34:18:34:22 | SSA def(i) | Test.cs:34:18:34:22 | Int32 i = ... | | Test.cs:34:18:34:18 | i | Test.cs:34:33:34:35 | SSA def(i) | Test.cs:34:33:34:35 | ...++ | | Test.cs:39:22:39:22 | w | Test.cs:39:22:39:22 | SSA def(w) | Test.cs:39:22:39:22 | Int32 w | +| Test.cs:46:16:46:18 | in | Test.cs:46:16:46:18 | SSA param(in) | Test.cs:46:16:46:18 | in | | Test.cs:46:29:46:32 | out | Test.cs:50:13:50:20 | SSA def(out) | Test.cs:50:13:50:20 | ... = ... | | Test.cs:46:29:46:32 | out | Test.cs:54:13:54:20 | SSA def(out) | Test.cs:54:13:54:20 | ... = ... | | Test.cs:56:13:56:17 | this.field | Test.cs:57:9:57:17 | SSA def(this.field) | Test.cs:57:9:57:17 | ... = ... | +| Test.cs:62:16:62:16 | x | Test.cs:62:16:62:16 | SSA param(x) | Test.cs:62:16:62:16 | x | | Test.cs:68:45:68:45 | e | Test.cs:68:45:68:45 | SSA def(e) | Test.cs:68:45:68:45 | DivideByZeroException e | +| Test.cs:76:24:76:25 | b1 | Test.cs:76:24:76:25 | SSA param(b1) | Test.cs:76:24:76:25 | b1 | +| Test.cs:76:33:76:34 | b2 | Test.cs:76:33:76:34 | SSA param(b2) | Test.cs:76:33:76:34 | b2 | +| Test.cs:76:42:76:43 | b3 | Test.cs:76:42:76:43 | SSA param(b3) | Test.cs:76:42:76:43 | b3 | +| Test.cs:76:51:76:52 | b4 | Test.cs:76:51:76:52 | SSA param(b4) | Test.cs:76:51:76:52 | b4 | +| Test.cs:76:60:76:61 | b5 | Test.cs:76:60:76:61 | SSA param(b5) | Test.cs:76:60:76:61 | b5 | +| Test.cs:76:69:76:70 | b6 | Test.cs:76:69:76:70 | SSA param(b6) | Test.cs:76:69:76:70 | b6 | | Test.cs:78:13:78:13 | x | Test.cs:78:13:78:17 | SSA def(x) | Test.cs:78:13:78:17 | Int32 x = ... | | Test.cs:78:13:78:13 | x | Test.cs:108:13:108:17 | SSA def(x) | Test.cs:108:13:108:17 | ... = ... | | Tuples.cs:10:14:10:14 | x | Tuples.cs:10:9:10:54 | SSA def(x) | Tuples.cs:10:9:10:54 | ... = ... | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitParameterDef.ql b/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitParameterDef.ql index 8608b90746e1..253fdea1ffa5 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitParameterDef.ql +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaImplicitParameterDef.ql @@ -1,5 +1,5 @@ import csharp -from Ssa::SourceVariable v, Ssa::ImplicitParameterDefinition def +from Ssa::SourceVariable v, Ssa::ParameterDefinition def where v = def.getSourceVariable() select v, def, def.getParameter() diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected index 96ae63b34fb6..88ed62336726 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaRead.expected @@ -100,8 +100,8 @@ | DefUse.cs:184:9:184:14 | this.Field5 | DefUse.cs:191:9:191:11 | SSA call def(this.Field5) | DefUse.cs:192:13:192:18 | access to field Field5 | | DefUse.cs:188:13:188:18 | this.Field5 | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | DefUse.cs:189:17:189:22 | access to field Field5 | | DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:3:20:3:20 | SSA param(b) | DefaultParam.cs:5:16:5:16 | access to parameter b | -| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:30:3:30 | SSA param(s) | DefaultParam.cs:5:20:5:20 | access to parameter s | -| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | SSA param(i) | DefaultParam.cs:5:24:5:24 | access to parameter i | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:42:3:42 | SSA phi(s) | DefaultParam.cs:5:20:5:20 | access to parameter s | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:4:5:6:5 | SSA phi(i) | DefaultParam.cs:5:24:5:24 | access to parameter i | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:8:22:8:22 | access to parameter i | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:10:13:10:13 | access to parameter i | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:11:26:11:26 | access to parameter i | diff --git a/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected b/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected index c3ccef11a447..00bacccf157b 100644 --- a/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected +++ b/csharp/ql/test/library-tests/dataflow/ssa/SsaUltimateDef.expected @@ -101,7 +101,13 @@ | DefUse.cs:188:13:188:18 | this.Field5 | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | DefUse.cs:188:13:188:22 | SSA def(this.Field5) | | DefaultParam.cs:3:20:3:20 | b | DefaultParam.cs:3:20:3:20 | SSA param(b) | DefaultParam.cs:3:20:3:20 | SSA param(b) | | DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:30:3:30 | SSA param(s) | DefaultParam.cs:3:30:3:30 | SSA param(s) | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:34:3:35 | SSA param_default(s) | DefaultParam.cs:3:34:3:35 | SSA param_default(s) | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:42:3:42 | SSA phi(s) | DefaultParam.cs:3:30:3:30 | SSA param(s) | +| DefaultParam.cs:3:30:3:30 | s | DefaultParam.cs:3:42:3:42 | SSA phi(s) | DefaultParam.cs:3:34:3:35 | SSA param_default(s) | | DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:42:3:42 | SSA param(i) | DefaultParam.cs:3:42:3:42 | SSA param(i) | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:3:46:3:46 | SSA param_default(i) | DefaultParam.cs:3:46:3:46 | SSA param_default(i) | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:4:5:6:5 | SSA phi(i) | DefaultParam.cs:3:42:3:42 | SSA param(i) | +| DefaultParam.cs:3:42:3:42 | i | DefaultParam.cs:4:5:6:5 | SSA phi(i) | DefaultParam.cs:3:46:3:46 | SSA param_default(i) | | Example.cs:6:23:6:23 | i | Example.cs:6:23:6:23 | SSA param(i) | Example.cs:6:23:6:23 | SSA param(i) | | Example.cs:8:9:8:18 | this.Field | Example.cs:8:9:8:22 | SSA def(this.Field) | Example.cs:8:9:8:22 | SSA def(this.Field) | | Example.cs:8:9:8:18 | this.Field | Example.cs:10:9:13:24 | SSA phi(this.Field) | Example.cs:8:9:8:22 | SSA def(this.Field) | From 1057cc9e7492050559c38a3382ce07a2165dd616 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 28 Apr 2026 10:44:16 +0200 Subject: [PATCH 5/8] C#: No need to special-case default arguments in nullness analysis --- .../lib/semmle/code/csharp/dataflow/Nullness.qll | 14 -------------- .../test/query-tests/Nullness/NullMaybe.expected | 2 +- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll index 14d343dedfbb..63205e52ae5e 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll @@ -181,16 +181,6 @@ private predicate hasMultipleParamsArguments(Call c) { ) } -private predicate isNullDefaultArgument(Ssa::ParameterDefinition def, AlwaysNullExpr arg) { - exists(AssignableDefinitions::ImplicitParameterDefinition pdef, Parameter p | - p = def.getParameter() - | - p = pdef.getParameter().getUnboundDeclaration() and - arg = p.getDefaultValue() and - not arg.getEnclosingCallable().getEnclosingCallable*() instanceof TestMethod - ) -} - /** Holds if `def` is an SSA definition that may be `null`. */ private predicate defMaybeNull(Ssa::Definition def, ControlFlowNode node, string msg, Element reason) { not nonNullDef(def) and @@ -216,10 +206,6 @@ private predicate defMaybeNull(Ssa::Definition def, ControlFlowNode node, string else msg = "because of $@ potential null argument" ) or - isNullDefaultArgument(def, reason) and - node = def.getControlFlowNode() and - msg = "because the parameter has a null default value" - or // If the source of a variable is `null` then the variable may be `null` exists(AssignableDefinition adef | adef = def.(Ssa::ExplicitDefinition).getADefinition() | adef.getSource() = maybeNullExpr(node.asExpr()) and diff --git a/csharp/ql/test/query-tests/Nullness/NullMaybe.expected b/csharp/ql/test/query-tests/Nullness/NullMaybe.expected index 3f5219d8c0c9..ba8c7eb90913 100644 --- a/csharp/ql/test/query-tests/Nullness/NullMaybe.expected +++ b/csharp/ql/test/query-tests/Nullness/NullMaybe.expected @@ -52,7 +52,7 @@ | E.cs:302:9:302:9 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | E.cs:301:13:301:13 | s | s | E.cs:301:13:301:27 | String s = ... | this | | E.cs:343:9:343:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:342:13:342:13 | x | x | E.cs:342:13:342:32 | String x = ... | this | | E.cs:349:9:349:9 | access to local variable x | Variable $@ may be null at this access because of $@ assignment. | E.cs:348:17:348:17 | x | x | E.cs:348:17:348:36 | dynamic x = ... | this | -| E.cs:366:41:366:41 | access to parameter s | Variable $@ may be null at this access because the parameter has a null default value. | E.cs:366:28:366:28 | s | s | E.cs:366:32:366:35 | null | this | +| E.cs:366:41:366:41 | access to parameter s | Variable $@ may be null at this access because of $@ assignment. | E.cs:366:28:366:28 | s | s | E.cs:366:32:366:35 | null | this | | E.cs:375:20:375:20 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | E.cs:374:17:374:17 | s | s | E.cs:374:17:374:31 | String s = ... | this | | E.cs:417:34:417:34 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:415:27:415:27 | i | i | E.cs:415:27:415:27 | i | this | | E.cs:423:38:423:38 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:420:27:420:27 | i | i | E.cs:420:27:420:27 | i | this | From ca1ae4a5958e23234fe422a7cc9c714b9247d5fb Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 28 Apr 2026 14:22:28 +0200 Subject: [PATCH 6/8] C#: Move internal logic into `internal/ControlFlowGraph.qll` --- csharp/ql/lib/printCfg.ql | 1 + .../csharp/controlflow/ControlFlowGraph.qll | 284 +----------------- .../controlflow/internal/ControlFlowGraph.qll | 282 +++++++++++++++++ 3 files changed, 284 insertions(+), 283 deletions(-) create mode 100644 csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraph.qll diff --git a/csharp/ql/lib/printCfg.ql b/csharp/ql/lib/printCfg.ql index c80b9b84ee05..c9910428bb09 100644 --- a/csharp/ql/lib/printCfg.ql +++ b/csharp/ql/lib/printCfg.ql @@ -8,6 +8,7 @@ */ import csharp +import semmle.code.csharp.controlflow.internal.ControlFlowGraph external string selectedSourceFile(); diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowGraph.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowGraph.qll index f2ed17187150..c56d3dab420c 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowGraph.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/ControlFlowGraph.qll @@ -3,7 +3,7 @@ */ import csharp -private import codeql.controlflow.ControlFlowGraph +private import internal.ControlFlowGraph private import codeql.controlflow.SuccessorType private import semmle.code.csharp.commons.Compilation private import semmle.code.csharp.controlflow.internal.NonReturning as NonReturning @@ -19,224 +19,6 @@ private import Cfg1 private import Cfg2 import Public -/** - * INTERNAL: Do not use. - * - * Provides an implementation of the AST signature for C#. - */ -module Ast implements AstSig { - private import csharp as CS - - class AstNode = ControlFlowElementOrCallable; - - additional predicate skipControlFlow(AstNode e) { - e instanceof TypeAccess and - not e instanceof TypeAccessPatternExpr - or - not e.getFile().fromSource() - } - - private AstNode getExprChild0(Expr e, int i) { - not e instanceof NameOfExpr and - not e instanceof AnonymousFunctionExpr and - not skipControlFlow(result) and - result = e.getChild(i) - } - - private AstNode getStmtChild0(Stmt s, int i) { - not s instanceof FixedStmt and - not s instanceof UsingBlockStmt and - result = s.getChild(i) - or - s = - any(FixedStmt fs | - result = fs.getVariableDeclExpr(i) - or - result = fs.getBody() and - i = max(int j | exists(fs.getVariableDeclExpr(j))) + 1 - ) - or - s = - any(UsingBlockStmt us | - result = us.getExpr() and - i = 0 - or - result = us.getVariableDeclExpr(i) - or - result = us.getBody() and - i = max([1, count(us.getVariableDeclExpr(_))]) - ) - } - - AstNode getChild(AstNode n, int index) { - result = getStmtChild0(n, index) - or - result = getExprChild0(n, index) - } - - private AstNode getParent(AstNode n) { n = getChild(result, _) } - - Callable getEnclosingCallable(AstNode node) { - result = node.(ControlFlowElement).getEnclosingCallable() - or - result.(ObjectInitMethod).initializes(getParent*(node)) - or - Initializers::staticMemberInitializer(result, getParent*(node)) - or - result = node.(Parameter).getCallable() - or - not skipControlFlow(node) and - getParent*(node) = any(Parameter p | result = p.getCallable()).getDefaultValue() - } - - class Callable extends CS::Callable { - Callable() { this.isUnboundDeclaration() } - } - - AstNode callableGetBody(Callable c) { - not skipControlFlow(result) and - result = c.getBody() - } - - final private class ParameterFinal = CS::Parameter; - - class Parameter extends ParameterFinal { - Expr getDefaultValue() { - // Avoid combinatorial explosions for callables with multiple bodies - result = unique( | | super.getDefaultValue()) - } - } - - Parameter callableGetParameter(Callable c, int i) { - not skipControlFlow(result) and - result = c.getParameter(i) - } - - class Stmt = CS::Stmt; - - class Expr = CS::Expr; - - class BlockStmt = CS::BlockStmt; - - class ExprStmt = CS::ExprStmt; - - class IfStmt = CS::IfStmt; - - class LoopStmt = CS::LoopStmt; - - class WhileStmt = CS::WhileStmt; - - class DoStmt = CS::DoStmt; - - final private class FinalForStmt = CS::ForStmt; - - class ForStmt extends FinalForStmt { - Expr getInit(int index) { result = this.getInitializer(index) } - } - - final private class FinalForeachStmt = CS::ForeachStmt; - - class ForeachStmt extends FinalForeachStmt { - Expr getVariable() { - result = this.getVariableDeclExpr() or result = this.getVariableDeclTuple() - } - - Expr getCollection() { result = this.getIterableExpr() } - } - - class BreakStmt = CS::BreakStmt; - - class ContinueStmt = CS::ContinueStmt; - - class GotoStmt = CS::GotoStmt; - - class ReturnStmt = CS::ReturnStmt; - - class Throw = CS::ThrowElement; - - final private class FinalTryStmt = CS::TryStmt; - - class TryStmt extends FinalTryStmt { - Stmt getBody() { result = this.getBlock() } - - CatchClause getCatch(int index) { result = this.getCatchClause(index) } - - Stmt getFinally() { result = super.getFinally() } - } - - final private class FinalCatchClause = CS::CatchClause; - - class CatchClause extends FinalCatchClause { - AstNode getVariable() { result = this.(CS::SpecificCatchClause).getVariableDeclExpr() } - - Expr getCondition() { result = this.getFilterClause() } - - Stmt getBody() { result = this.getBlock() } - } - - final private class FinalSwitch = CS::Switch; - - class Switch extends FinalSwitch { - Case getCase(int index) { result = super.getCase(index) } - - Stmt getStmt(int index) { result = this.(CS::SwitchStmt).getStmt(index) } - } - - final private class FinalCase = CS::Case; - - class Case extends FinalCase { - AstNode getAPattern() { result = this.getPattern() } - - Expr getGuard() { result = this.getCondition() } - - AstNode getBody() { result = super.getBody() } - } - - class DefaultCase extends Case instanceof CS::DefaultCase { } - - class ConditionalExpr = CS::ConditionalExpr; - - class BinaryExpr = CS::BinaryOperation; - - class LogicalAndExpr = CS::LogicalAndExpr; - - class LogicalOrExpr = CS::LogicalOrExpr; - - class NullCoalescingExpr = CS::NullCoalescingExpr; - - class UnaryExpr = CS::UnaryOperation; - - class LogicalNotExpr = CS::LogicalNotExpr; - - class Assignment = CS::Assignment; - - class AssignExpr = CS::AssignExpr; - - class CompoundAssignment = CS::AssignOperation; - - class AssignLogicalAndExpr extends CompoundAssignment { - AssignLogicalAndExpr() { none() } - } - - class AssignLogicalOrExpr extends CompoundAssignment { - AssignLogicalOrExpr() { none() } - } - - class AssignNullCoalescingExpr = CS::AssignCoalesceExpr; - - final private class FinalBoolLiteral = CS::BoolLiteral; - - class BooleanLiteral extends FinalBoolLiteral { - boolean getValue() { result = this.getBoolValue() } - } - - final private class FinalIsExpr = CS::IsExpr; - - class PatternMatchExpr extends FinalIsExpr { - AstNode getPattern() { result = super.getPattern() } - } -} - /** * A compilation. * @@ -270,70 +52,6 @@ private CompilationExt getCompilation(Element e) { result = TBuildless() } -private module Initializers { - private import semmle.code.csharp.ExprOrStmtParent as ExprOrStmtParent - - /** - * The `expr_parent_top_level_adjusted()` relation restricted to exclude relations - * between properties and their getters' expression bodies in properties such as - * `int P => 0`. - * - * This is in order to only associate the expression body with one CFG scope, namely - * the getter (and not the declaration itself). - */ - private predicate expr_parent_top_level_adjusted2( - Expr child, int i, @top_level_exprorstmt_parent parent - ) { - ExprOrStmtParent::expr_parent_top_level_adjusted(child, i, parent) and - not exists(Getter g | - g.getDeclaration() = parent and - i = 0 - ) - } - - /** - * Holds if `init` is a static member initializer and `staticCtor` is the - * static constructor in the same declaring type. Hence, `staticCtor` can be - * considered to execute `init` prior to the execution of its body. - */ - predicate staticMemberInitializer(Constructor staticCtor, Expr init) { - exists(Assignable a | - a.(Modifiable).isStatic() and - expr_parent_top_level_adjusted2(init, _, a) and - a.getDeclaringType() = staticCtor.getDeclaringType() and - staticCtor.isStatic() - ) - } - - /** - * Gets the `i`th static member initializer expression for static constructor `staticCtor`. - */ - Expr initializedStaticMemberOrder(Constructor staticCtor, int i) { - result = - rank[i + 1](Expr init, Location l, string filepath, int startline, int startcolumn | - staticMemberInitializer(staticCtor, init) and - l = init.getLocation() and - l.hasLocationInfo(filepath, startline, startcolumn, _, _) - | - init order by startline, startcolumn, filepath - ) - } - - /** - * Gets the `i`th member initializer expression for object initializer method `obinit`. - */ - AssignExpr initializedInstanceMemberOrder(ObjectInitMethod obinit, int i) { - result = - rank[i + 1](AssignExpr ae0, Location l, string filepath, int startline, int startcolumn | - obinit.initializes(ae0) and - l = ae0.getLocation() and - l.hasLocationInfo(filepath, startline, startcolumn, _, _) - | - ae0 order by startline, startcolumn, filepath - ) - } -} - private module Exceptions { private import semmle.code.csharp.commons.Assertions diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraph.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraph.qll new file mode 100644 index 000000000000..c44a3ef4a55e --- /dev/null +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraph.qll @@ -0,0 +1,282 @@ +import csharp +import codeql.controlflow.ControlFlowGraph + +module Initializers { + private import semmle.code.csharp.ExprOrStmtParent as ExprOrStmtParent + + /** + * The `expr_parent_top_level_adjusted()` relation restricted to exclude relations + * between properties and their getters' expression bodies in properties such as + * `int P => 0`. + * + * This is in order to only associate the expression body with one CFG scope, namely + * the getter (and not the declaration itself). + */ + private predicate expr_parent_top_level_adjusted2( + Expr child, int i, @top_level_exprorstmt_parent parent + ) { + ExprOrStmtParent::expr_parent_top_level_adjusted(child, i, parent) and + not exists(Getter g | + g.getDeclaration() = parent and + i = 0 + ) + } + + /** + * Holds if `init` is a static member initializer and `staticCtor` is the + * static constructor in the same declaring type. Hence, `staticCtor` can be + * considered to execute `init` prior to the execution of its body. + */ + predicate staticMemberInitializer(Constructor staticCtor, Expr init) { + exists(Assignable a | + a.(Modifiable).isStatic() and + expr_parent_top_level_adjusted2(init, _, a) and + a.getDeclaringType() = staticCtor.getDeclaringType() and + staticCtor.isStatic() + ) + } + + /** + * Gets the `i`th static member initializer expression for static constructor `staticCtor`. + */ + Expr initializedStaticMemberOrder(Constructor staticCtor, int i) { + result = + rank[i + 1](Expr init, Location l, string filepath, int startline, int startcolumn | + staticMemberInitializer(staticCtor, init) and + l = init.getLocation() and + l.hasLocationInfo(filepath, startline, startcolumn, _, _) + | + init order by startline, startcolumn, filepath + ) + } + + /** + * Gets the `i`th member initializer expression for object initializer method `obinit`. + */ + AssignExpr initializedInstanceMemberOrder(ObjectInitMethod obinit, int i) { + result = + rank[i + 1](AssignExpr ae0, Location l, string filepath, int startline, int startcolumn | + obinit.initializes(ae0) and + l = ae0.getLocation() and + l.hasLocationInfo(filepath, startline, startcolumn, _, _) + | + ae0 order by startline, startcolumn, filepath + ) + } +} + +/** + * Provides an implementation of the AST signature for C#. + */ +module Ast implements AstSig { + private import csharp as CS + + class AstNode = ControlFlowElementOrCallable; + + additional predicate skipControlFlow(AstNode e) { + e instanceof TypeAccess and + not e instanceof TypeAccessPatternExpr + or + not e.getFile().fromSource() + } + + private AstNode getExprChild0(Expr e, int i) { + not e instanceof NameOfExpr and + not e instanceof AnonymousFunctionExpr and + not skipControlFlow(result) and + result = e.getChild(i) + } + + private AstNode getStmtChild0(Stmt s, int i) { + not s instanceof FixedStmt and + not s instanceof UsingBlockStmt and + result = s.getChild(i) + or + s = + any(FixedStmt fs | + result = fs.getVariableDeclExpr(i) + or + result = fs.getBody() and + i = max(int j | exists(fs.getVariableDeclExpr(j))) + 1 + ) + or + s = + any(UsingBlockStmt us | + result = us.getExpr() and + i = 0 + or + result = us.getVariableDeclExpr(i) + or + result = us.getBody() and + i = max([1, count(us.getVariableDeclExpr(_))]) + ) + } + + AstNode getChild(AstNode n, int index) { + result = getStmtChild0(n, index) + or + result = getExprChild0(n, index) + } + + private AstNode getParent(AstNode n) { n = getChild(result, _) } + + Callable getEnclosingCallable(AstNode node) { + result = node.(ControlFlowElement).getEnclosingCallable() + or + result.(ObjectInitMethod).initializes(getParent*(node)) + or + Initializers::staticMemberInitializer(result, getParent*(node)) + or + result = node.(Parameter).getCallable() + or + not skipControlFlow(node) and + getParent*(node) = any(Parameter p | result = p.getCallable()).getDefaultValue() + } + + class Callable extends CS::Callable { + Callable() { this.isUnboundDeclaration() } + } + + AstNode callableGetBody(Callable c) { + not skipControlFlow(result) and + result = c.getBody() + } + + final private class ParameterFinal = CS::Parameter; + + class Parameter extends ParameterFinal { + Expr getDefaultValue() { + // Avoid combinatorial explosions for callables with multiple bodies + result = unique( | | super.getDefaultValue()) + } + } + + Parameter callableGetParameter(Callable c, int i) { + not skipControlFlow(result) and + result = c.getParameter(i) + } + + class Stmt = CS::Stmt; + + class Expr = CS::Expr; + + class BlockStmt = CS::BlockStmt; + + class ExprStmt = CS::ExprStmt; + + class IfStmt = CS::IfStmt; + + class LoopStmt = CS::LoopStmt; + + class WhileStmt = CS::WhileStmt; + + class DoStmt = CS::DoStmt; + + final private class FinalForStmt = CS::ForStmt; + + class ForStmt extends FinalForStmt { + Expr getInit(int index) { result = this.getInitializer(index) } + } + + final private class FinalForeachStmt = CS::ForeachStmt; + + class ForeachStmt extends FinalForeachStmt { + Expr getVariable() { + result = this.getVariableDeclExpr() or result = this.getVariableDeclTuple() + } + + Expr getCollection() { result = this.getIterableExpr() } + } + + class BreakStmt = CS::BreakStmt; + + class ContinueStmt = CS::ContinueStmt; + + class GotoStmt = CS::GotoStmt; + + class ReturnStmt = CS::ReturnStmt; + + class Throw = CS::ThrowElement; + + final private class FinalTryStmt = CS::TryStmt; + + class TryStmt extends FinalTryStmt { + Stmt getBody() { result = this.getBlock() } + + CatchClause getCatch(int index) { result = this.getCatchClause(index) } + + Stmt getFinally() { result = super.getFinally() } + } + + final private class FinalCatchClause = CS::CatchClause; + + class CatchClause extends FinalCatchClause { + AstNode getVariable() { result = this.(CS::SpecificCatchClause).getVariableDeclExpr() } + + Expr getCondition() { result = this.getFilterClause() } + + Stmt getBody() { result = this.getBlock() } + } + + final private class FinalSwitch = CS::Switch; + + class Switch extends FinalSwitch { + Case getCase(int index) { result = super.getCase(index) } + + Stmt getStmt(int index) { result = this.(CS::SwitchStmt).getStmt(index) } + } + + final private class FinalCase = CS::Case; + + class Case extends FinalCase { + AstNode getAPattern() { result = this.getPattern() } + + Expr getGuard() { result = this.getCondition() } + + AstNode getBody() { result = super.getBody() } + } + + class DefaultCase extends Case instanceof CS::DefaultCase { } + + class ConditionalExpr = CS::ConditionalExpr; + + class BinaryExpr = CS::BinaryOperation; + + class LogicalAndExpr = CS::LogicalAndExpr; + + class LogicalOrExpr = CS::LogicalOrExpr; + + class NullCoalescingExpr = CS::NullCoalescingExpr; + + class UnaryExpr = CS::UnaryOperation; + + class LogicalNotExpr = CS::LogicalNotExpr; + + class Assignment = CS::Assignment; + + class AssignExpr = CS::AssignExpr; + + class CompoundAssignment = CS::AssignOperation; + + class AssignLogicalAndExpr extends CompoundAssignment { + AssignLogicalAndExpr() { none() } + } + + class AssignLogicalOrExpr extends CompoundAssignment { + AssignLogicalOrExpr() { none() } + } + + class AssignNullCoalescingExpr = CS::AssignCoalesceExpr; + + final private class FinalBoolLiteral = CS::BoolLiteral; + + class BooleanLiteral extends FinalBoolLiteral { + boolean getValue() { result = this.getBoolValue() } + } + + final private class FinalIsExpr = CS::IsExpr; + + class PatternMatchExpr extends FinalIsExpr { + AstNode getPattern() { result = super.getPattern() } + } +} From 0b270126578c9f52e6bd8034207e224ffd891c2a Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 28 Apr 2026 14:09:16 +0200 Subject: [PATCH 7/8] C#: Add upgrade/downgrade scripts --- .../old.dbscheme | 1504 +++++++++++++++++ .../semmlecode.csharp.dbscheme | 1504 +++++++++++++++++ .../upgrade.properties | 2 + .../old.dbscheme | 1504 +++++++++++++++++ .../semmlecode.csharp.dbscheme | 1504 +++++++++++++++++ .../upgrade.properties | 2 + 6 files changed, 6020 insertions(+) create mode 100644 csharp/downgrades/a5765bf26f38b38424eeb97f83104b5f5b41db0d/old.dbscheme create mode 100644 csharp/downgrades/a5765bf26f38b38424eeb97f83104b5f5b41db0d/semmlecode.csharp.dbscheme create mode 100644 csharp/downgrades/a5765bf26f38b38424eeb97f83104b5f5b41db0d/upgrade.properties create mode 100644 csharp/ql/lib/upgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/old.dbscheme create mode 100644 csharp/ql/lib/upgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/semmlecode.csharp.dbscheme create mode 100644 csharp/ql/lib/upgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/upgrade.properties diff --git a/csharp/downgrades/a5765bf26f38b38424eeb97f83104b5f5b41db0d/old.dbscheme b/csharp/downgrades/a5765bf26f38b38424eeb97f83104b5f5b41db0d/old.dbscheme new file mode 100644 index 000000000000..a5765bf26f38 --- /dev/null +++ b/csharp/downgrades/a5765bf26f38b38424eeb97f83104b5f5b41db0d/old.dbscheme @@ -0,0 +1,1504 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * Overlay support + */ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +@locatable = @declaration_with_accessors | @callable_accessor | @declaration_or_directive + | @diagnostic | @extractor_message | @preprocessor_directive | @attribute | @type_mention | @type_parameter_constraints + | @declaration_with_accessors | @callable_accessor | @operator | @method + | @constructor | @destructor | @field | @local_variable | @parameter | @stmt | @expr + | @xmllocatable | @commentline | @commentblock | @asp_element + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type +| 35 = @extension_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type | @extension_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extension_receiver_type( + unique int extension: @extension_type ref, + int receiver_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type | @extension_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_call_expr = @assign_arith_expr | @assign_bitwise_expr +@assign_op_expr = @assign_op_call_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@add_operation = @add_expr | @assign_add_expr; +@sub_operation = @sub_expr | @assign_sub_expr; +@mul_operation = @mul_expr | @assign_mul_expr; +@div_operation = @div_expr | @assign_div_expr; +@rem_operation = @rem_expr | @assign_rem_expr; +@and_operation = @bit_and_expr | @assign_and_expr; +@xor_operation = @bit_xor_expr | @assign_xor_expr; +@or_operation = @bit_or_expr | @assign_or_expr; +@lshift_operation = @lshift_expr | @assign_lshift_expr; +@rshift_operation = @rshift_expr | @assign_rshift_expr; +@urshift_operation = @urshift_expr | @assign_urshift_expr; +@null_coalescing_operation = @null_coalescing_expr | @assign_coalesce_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @assign_expr | @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@op_invoke_expr = @operator_invocation_expr | @assign_op_call_expr +@call = @method_invocation_expr | @constructor_init_expr | @op_invoke_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @op_invoke_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr | @parameter; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/downgrades/a5765bf26f38b38424eeb97f83104b5f5b41db0d/semmlecode.csharp.dbscheme b/csharp/downgrades/a5765bf26f38b38424eeb97f83104b5f5b41db0d/semmlecode.csharp.dbscheme new file mode 100644 index 000000000000..19b8cc3e2dc7 --- /dev/null +++ b/csharp/downgrades/a5765bf26f38b38424eeb97f83104b5f5b41db0d/semmlecode.csharp.dbscheme @@ -0,0 +1,1504 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * Overlay support + */ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +@locatable = @declaration_with_accessors | @callable_accessor | @declaration_or_directive + | @diagnostic | @extractor_message | @preprocessor_directive | @attribute | @type_mention | @type_parameter_constraints + | @declaration_with_accessors | @callable_accessor | @operator | @method + | @constructor | @destructor | @field | @local_variable | @parameter | @stmt | @expr + | @xmllocatable | @commentline | @commentblock | @asp_element + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type +| 35 = @extension_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type | @extension_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extension_receiver_type( + unique int extension: @extension_type ref, + int receiver_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type | @extension_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_call_expr = @assign_arith_expr | @assign_bitwise_expr +@assign_op_expr = @assign_op_call_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@add_operation = @add_expr | @assign_add_expr; +@sub_operation = @sub_expr | @assign_sub_expr; +@mul_operation = @mul_expr | @assign_mul_expr; +@div_operation = @div_expr | @assign_div_expr; +@rem_operation = @rem_expr | @assign_rem_expr; +@and_operation = @bit_and_expr | @assign_and_expr; +@xor_operation = @bit_xor_expr | @assign_xor_expr; +@or_operation = @bit_or_expr | @assign_or_expr; +@lshift_operation = @lshift_expr | @assign_lshift_expr; +@rshift_operation = @rshift_expr | @assign_rshift_expr; +@urshift_operation = @urshift_expr | @assign_urshift_expr; +@null_coalescing_operation = @null_coalescing_expr | @assign_coalesce_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @assign_expr | @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@op_invoke_expr = @operator_invocation_expr | @assign_op_call_expr +@call = @method_invocation_expr | @constructor_init_expr | @op_invoke_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @op_invoke_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/downgrades/a5765bf26f38b38424eeb97f83104b5f5b41db0d/upgrade.properties b/csharp/downgrades/a5765bf26f38b38424eeb97f83104b5f5b41db0d/upgrade.properties new file mode 100644 index 000000000000..72af45e177b8 --- /dev/null +++ b/csharp/downgrades/a5765bf26f38b38424eeb97f83104b5f5b41db0d/upgrade.properties @@ -0,0 +1,2 @@ +description: Remove `@parameter` from `@control_flow_element` +compatibility: full diff --git a/csharp/ql/lib/upgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/old.dbscheme b/csharp/ql/lib/upgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/old.dbscheme new file mode 100644 index 000000000000..19b8cc3e2dc7 --- /dev/null +++ b/csharp/ql/lib/upgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/old.dbscheme @@ -0,0 +1,1504 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * Overlay support + */ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +@locatable = @declaration_with_accessors | @callable_accessor | @declaration_or_directive + | @diagnostic | @extractor_message | @preprocessor_directive | @attribute | @type_mention | @type_parameter_constraints + | @declaration_with_accessors | @callable_accessor | @operator | @method + | @constructor | @destructor | @field | @local_variable | @parameter | @stmt | @expr + | @xmllocatable | @commentline | @commentblock | @asp_element + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type +| 35 = @extension_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type | @extension_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extension_receiver_type( + unique int extension: @extension_type ref, + int receiver_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type | @extension_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_call_expr = @assign_arith_expr | @assign_bitwise_expr +@assign_op_expr = @assign_op_call_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@add_operation = @add_expr | @assign_add_expr; +@sub_operation = @sub_expr | @assign_sub_expr; +@mul_operation = @mul_expr | @assign_mul_expr; +@div_operation = @div_expr | @assign_div_expr; +@rem_operation = @rem_expr | @assign_rem_expr; +@and_operation = @bit_and_expr | @assign_and_expr; +@xor_operation = @bit_xor_expr | @assign_xor_expr; +@or_operation = @bit_or_expr | @assign_or_expr; +@lshift_operation = @lshift_expr | @assign_lshift_expr; +@rshift_operation = @rshift_expr | @assign_rshift_expr; +@urshift_operation = @urshift_expr | @assign_urshift_expr; +@null_coalescing_operation = @null_coalescing_expr | @assign_coalesce_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @assign_expr | @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@op_invoke_expr = @operator_invocation_expr | @assign_op_call_expr +@call = @method_invocation_expr | @constructor_init_expr | @op_invoke_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @op_invoke_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/ql/lib/upgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/semmlecode.csharp.dbscheme b/csharp/ql/lib/upgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/semmlecode.csharp.dbscheme new file mode 100644 index 000000000000..a5765bf26f38 --- /dev/null +++ b/csharp/ql/lib/upgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/semmlecode.csharp.dbscheme @@ -0,0 +1,1504 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * Overlay support + */ + +/** + * The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`, + * along with an `overlayChangedFiles` tuple for each new/modified/deleted file, + * when building an overlay database, and these can be used by the discard predicates. + */ +databaseMetadata( + string metadataKey : string ref, + string value : string ref +); + +overlayChangedFiles( + string path : string ref +); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +@locatable = @declaration_with_accessors | @callable_accessor | @declaration_or_directive + | @diagnostic | @extractor_message | @preprocessor_directive | @attribute | @type_mention | @type_parameter_constraints + | @declaration_with_accessors | @callable_accessor | @operator | @method + | @constructor | @destructor | @field | @local_variable | @parameter | @stmt | @expr + | @xmllocatable | @commentline | @commentblock | @asp_element + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type +| 35 = @extension_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type | @extension_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extension_receiver_type( + unique int extension: @extension_type ref, + int receiver_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type | @extension_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_call_expr = @assign_arith_expr | @assign_bitwise_expr +@assign_op_expr = @assign_op_call_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@add_operation = @add_expr | @assign_add_expr; +@sub_operation = @sub_expr | @assign_sub_expr; +@mul_operation = @mul_expr | @assign_mul_expr; +@div_operation = @div_expr | @assign_div_expr; +@rem_operation = @rem_expr | @assign_rem_expr; +@and_operation = @bit_and_expr | @assign_and_expr; +@xor_operation = @bit_xor_expr | @assign_xor_expr; +@or_operation = @bit_or_expr | @assign_or_expr; +@lshift_operation = @lshift_expr | @assign_lshift_expr; +@rshift_operation = @rshift_expr | @assign_rshift_expr; +@urshift_operation = @urshift_expr | @assign_urshift_expr; +@null_coalescing_operation = @null_coalescing_expr | @assign_coalesce_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @assign_expr | @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@op_invoke_expr = @operator_invocation_expr | @assign_op_call_expr +@call = @method_invocation_expr | @constructor_init_expr | @op_invoke_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @op_invoke_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr | @parameter; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/ql/lib/upgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/upgrade.properties b/csharp/ql/lib/upgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/upgrade.properties new file mode 100644 index 000000000000..cd2dfa3d4d5d --- /dev/null +++ b/csharp/ql/lib/upgrades/19b8cc3e2dc768d4cbc03d6e3773b709bbebd036/upgrade.properties @@ -0,0 +1,2 @@ +description: Add `@parameter` to `@control_flow_element` +compatibility: full From 3a62ffa429341b21c3fc40e64f25ec69411e2d8f Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 28 Apr 2026 10:32:53 +0200 Subject: [PATCH 8/8] Java: Adapt to changes in shared CFG library --- java/ql/lib/semmle/code/java/ControlFlowGraph.qll | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index 1137b46f32c2..a1e071df10c4 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -57,6 +57,15 @@ private module Ast implements AstSig { AstNode callableGetBody(Callable c) { result = c.getBody() } + // TODO: Implement in order to include parameters in the CFG + class Parameter extends AstNode { + Parameter() { none() } + + Expr getDefaultValue() { none() } + } + + Parameter callableGetParameter(Callable c, int i) { result = c.getParameter(i) } + class Stmt = J::Stmt; class Expr = J::Expr; @@ -534,7 +543,7 @@ private module Input implements InputSig1, InputSig2 { l = TYield() and n instanceof SwitchExpr } - class CallableBodyPartContext = Void; + class CallableContext = Void; predicate inConditionalContext(Ast::AstNode n, ConditionKind kind) { kind.isBoolean() and