Merge pull request #6 from hvitved/csharp/query/constant-condition

Approved by calumgrant
This commit is contained in:
semmle-qlci
2018-08-08 06:45:07 +01:00
committed by GitHub
26 changed files with 1476 additions and 324 deletions

View File

@@ -14,39 +14,111 @@
import csharp
import semmle.code.csharp.commons.Assertions
import semmle.code.csharp.commons.Constants
import ControlFlowGraph
/** A condition of an `if` statement or a conditional expression. */
private class IfCondition extends Expr {
IfCondition() {
this = any(IfStmt is).getCondition() or
this = any(ConditionalExpr ce).getCondition()
/** A constant condition. */
abstract class ConstantCondition extends Expr {
/** Gets the alert message for this constant condition. */
abstract string getMessage();
/** Holds if this constant condition is white-listed. */
predicate isWhiteListed() { none() }
}
/** A constant Boolean condition. */
class ConstantBooleanCondition extends ConstantCondition {
boolean b;
ConstantBooleanCondition() {
isConstantCondition(this, b)
}
override string getMessage() {
result = "Condition always evaluates to '" + b + "'."
}
override predicate isWhiteListed() {
// E.g. `x ?? false`
this.(BoolLiteral) = any(NullCoalescingExpr nce).getRightOperand()
}
}
/** A loop condition */
private class LoopCondition extends Expr {
LoopCondition() {
/** A constant condition in an `if` statement or a conditional expression. */
class ConstantIfCondition extends ConstantBooleanCondition {
ConstantIfCondition() {
this = any(IfStmt is).getCondition().getAChildExpr*() or
this = any(ConditionalExpr ce).getCondition().getAChildExpr*()
}
override predicate isWhiteListed() {
ConstantBooleanCondition.super.isWhiteListed()
or
// It is a common pattern to use a local constant/constant field to control
// whether code parts must be executed or not
this instanceof AssignableRead
}
}
/** A constant loop condition. */
class ConstantLoopCondition extends ConstantBooleanCondition {
ConstantLoopCondition() {
this = any(LoopStmt ls).getCondition()
}
override predicate isWhiteListed() {
// Clearly intentional infinite loops are allowed
this.(BoolLiteral).getBoolValue() = true
}
}
/** Holds if `e` is a conditional expression that is allowed to be constant. */
predicate isWhiteListed(Expr e) {
// It is a common pattern to use a local constant/constant field to control
// whether code parts must be executed or not
e = any(IfCondition ic).getAChildExpr*() and
e instanceof AssignableRead
or
// Clearly intentional infinite loops are allowed
e instanceof LoopCondition and
e.(BoolLiteral).getBoolValue() = true
or
// E.g. `x ?? false`
e.(BoolLiteral) = any(NullCoalescingExpr nce).getRightOperand()
/** A constant nullness condition. */
class ConstantNullnessCondition extends ConstantCondition {
boolean b;
ConstantNullnessCondition() {
forex(ControlFlowNode cfn |
cfn = this.getAControlFlowNode() |
exists(ControlFlowEdgeNullness t |
exists(cfn.getASuccessorByType(t)) |
if t.isNull() then b = true else b = false
) and
strictcount(ControlFlowEdgeType t | exists(cfn.getASuccessorByType(t))) = 1
)
}
override string getMessage() {
if b = true then
result = "Expression is always 'null'."
else
result = "Expression is never 'null'."
}
}
from Expr e, boolean b
where isConstantCondition(e, b)
and not isWhiteListed(e)
and not isExprInAssertion(e)
select e, "Condition always evaluates to '" + b + "'."
/** A constant matching condition. */
class ConstantMatchingCondition extends ConstantCondition {
boolean b;
ConstantMatchingCondition() {
forex(ControlFlowNode cfn |
cfn = this.getAControlFlowNode() |
exists(ControlFlowEdgeMatching t |
exists(cfn.getASuccessorByType(t)) |
if t.isMatch() then b = true else b = false
) and
strictcount(ControlFlowEdgeType t | exists(cfn.getASuccessorByType(t))) = 1
)
}
override string getMessage() {
if b = true then
result = "Pattern always matches."
else
result = "Pattern never matches."
}
}
from ConstantCondition c, string msg
where msg = c.getMessage()
and not c.isWhiteListed()
and not isExprInAssertion(c)
select c, msg

View File

@@ -1,15 +0,0 @@
<!DOCTYPE qhelp PUBLIC
"-//Semmle//qhelp//EN"
"qhelp.dtd">
<qhelp>
<overview>
<p>If the left hand operand of a null-coalescing operator always evaluates to <code>null</code> the
null-coalescing operation is useless. The whole expression will always evaluate to the right hand
operand at runtime. This impedes readability and maintainability unnecessarily, by making the code
more difficult to read than it should be.</p>
</overview>
<recommendation>
<p>Remove the useless null-coalescing expression and any potential dead code associated with it.</p>
</recommendation>
</qhelp>

View File

@@ -1,16 +0,0 @@
/**
* @name Null-coalescing left operand is constant
* @description Finds left operands in null-coalescing expressions that always evaluate to null
* @kind problem
* @problem.severity warning
* @precision high
* @id cs/constant-null-coalescing
* @tags maintainability
* readability
*/
import csharp
from NullCoalescingExpr nce, Expr e
where e = nce.getLeftOperand()
and exists(e.getValue())
select e, "Left operand always evaluates to " + e.getValue() + "."

View File

@@ -1,32 +0,0 @@
using System;
namespace ConstantSwitchSelector
{
class Main
{
const int ZERO = 0;
public void Foo()
{
switch (ZERO + 1)
{ // BAD
case 1: break;
}
switch ('a')
{ // BAD
default: break;
}
switch (Bar())
{ // GOOD
case 1: break;
}
}
public int Bar()
{
return ZERO;
}
}
}

View File

@@ -1,14 +0,0 @@
<!DOCTYPE qhelp PUBLIC
"-//Semmle//qhelp//EN"
"qhelp.dtd">
<qhelp>
<overview>
<p>A switch selector is useless if it always evaluates to the same constant at runtime. This
impedes readability and maintainability unnecessarily, by making the control-flow of the method
more difficult to read than it should be.</p>
</overview>
<recommendation>
<p>Remove the useless switch selector and all cases that will never be reached.</p>
</recommendation>
</qhelp>

View File

@@ -1,16 +0,0 @@
/**
* @name Switch selector is constant
* @description Finds selectors in switch statements that always evaluate to the same constant
* @kind problem
* @problem.severity warning
* @precision high
* @id cs/constant-switch-selector
* @tags maintainability
* readability
*/
import csharp
from SwitchStmt s, Expr e
where e = s.getCondition()
and exists(e.getValue())
select e, "Selector always evaluates to " + e.getValue() + "."

View File

@@ -81,11 +81,11 @@ class Completion extends TCompletion {
or
if mustHaveBooleanCompletion(cfe) then
exists(boolean value |
isConstant(cfe, value) |
isBooleanConstant(cfe, value) |
this = TBooleanCompletion(value, value)
)
or
not isConstant(cfe, _) and
not isBooleanConstant(cfe, _) and
exists(boolean b | this = TBooleanCompletion(b, b))
or
// Corner case: In `if (x ?? y) { ... }`, `x` must have both a `true`
@@ -94,8 +94,20 @@ class Completion extends TCompletion {
mustHaveNullnessCompletion(cfe) and
this = TNullnessCompletion(true)
else if mustHaveNullnessCompletion(cfe) then
exists(boolean value |
isNullnessConstant(cfe, value) |
this = TNullnessCompletion(value)
)
or
not isNullnessConstant(cfe, _) and
this = TNullnessCompletion(_)
else if mustHaveMatchingCompletion(cfe) then
else if mustHaveMatchingCompletion(_, cfe) then
exists(boolean value |
isMatchingConstant(cfe, value) |
this = TMatchingCompletion(value)
)
or
not isMatchingConstant(cfe, _) and
this = TMatchingCompletion(_)
else if mustHaveEmptinessCompletion(cfe) then
this = TEmptinessCompletion(_)
@@ -118,14 +130,82 @@ class Completion extends TCompletion {
}
}
private predicate isConstant(Expr e, boolean value) {
e.getValue() = "true" and
value = true
or
e.getValue() = "false" and
value = false
or
isConstantComparison(e, value)
/** Holds if expression `e` has the Boolean constant value `value`. */
private predicate isBooleanConstant(Expr e, boolean value) {
mustHaveBooleanCompletion(e) and
(
e.getValue() = "true" and
value = true
or
e.getValue() = "false" and
value = false
or
isConstantComparison(e, value)
)
}
/**
* Holds if expression `e` is constantly `null` (`value = true`) or constantly
* non-`null` (`value = false`).
*/
private predicate isNullnessConstant(Expr e, boolean value) {
mustHaveNullnessCompletion(e) and
exists(Expr stripped |
stripped = e.stripCasts() |
stripped.getType() = any(ValueType t |
not t instanceof NullableType and
// Extractor bug: the type of `x?.Length` is reported as `int`, but it should
// be `int?`
not getQualifier*(stripped).(QualifiableExpr).isConditional()
) and
value = false
or
stripped instanceof NullLiteral and
value = true
or
stripped.hasValue() and
not stripped instanceof NullLiteral and
value = false
)
}
private Expr getQualifier(QualifiableExpr e) {
// `e.getQualifier()` does not work for calls to extension methods
result = e.getChildExpr(-1)
}
/**
* Holds if expression `e` constantly matches (`value = true`) or constantly
* non-matches (`value = false`).
*/
private predicate isMatchingConstant(Expr e, boolean value) {
exists(SwitchStmt ss |
mustHaveMatchingCompletion(ss, e) |
exists(Expr stripped |
stripped = ss.getCondition().stripCasts() |
exists(ConstCase cc, string strippedValue |
cc = ss.getAConstCase() and
e = cc.getExpr() and
strippedValue = stripped.getValue() |
if strippedValue = e.getValue() then
value = true
else
value = false
)
or
exists(TypeCase tc, Type t, Type strippedType |
tc = ss.getATypeCase() |
e = tc.getTypeAccess() and
t = e.getType() and
strippedType = stripped.getType() and
not t.isImplicitlyConvertibleTo(strippedType) and
not t instanceof Interface and
not t.containsTypeParameters() and
not strippedType.containsTypeParameters() and
value = false
)
)
)
}
/** A control flow element that is inside a `try` block. */
@@ -325,12 +405,10 @@ private predicate inNullnessContext(Expr e, boolean isNullnessCompletionForParen
* Holds if a normal completion of `e` must be a matching completion. Thats is,
* whether `e` determines a match in a `switch` statement.
*/
private predicate mustHaveMatchingCompletion(Expr e) {
exists(SwitchStmt ss |
e = ss.getAConstCase().getExpr()
or
e = ss.getATypeCase().getTypeAccess() // use type access to represent the type test
)
private predicate mustHaveMatchingCompletion(SwitchStmt ss, Expr e) {
e = ss.getAConstCase().getExpr()
or
e = ss.getATypeCase().getTypeAccess() // use type access to represent the type test
}
/**

View File

@@ -1252,6 +1252,13 @@ module Internal {
not c instanceof GotoDefaultCompletion and
not c instanceof GotoCaseCompletion
or
// Last case exits with a non-match
exists(int last |
last = max(int i | exists(ss.getCase(i))) |
result = lastConstCaseNoMatch(ss.getCase(last), c) or
result = lastTypeCaseNoMatch(ss.getCase(last), c)
)
or
// Last statement exits with any non-break completion
exists(int last |
last = max(int i | exists(ss.getStmt(i))) |
@@ -1262,8 +1269,7 @@ module Internal {
or
cfe = any(ConstCase cc |
// Case expression exits with a non-match
result = lastConstCaseExpr(cc, c) and
c = any(MatchingCompletion mc | not mc.isMatch())
result = lastConstCaseNoMatch(cc, c)
or
// Case expression exits abnormally
result = lastConstCaseExpr(cc, c) and
@@ -1275,8 +1281,7 @@ module Internal {
or
cfe = any(TypeCase tc |
// Type test exits with a non-match
result = tc.getTypeAccess() and
c = any(MatchingCompletion mc | not mc.isMatch())
result = lastTypeCaseNoMatch(tc, c)
or
// Condition exists with a `false` completion
result = lastTypeCaseCondition(tc, c) and
@@ -1405,6 +1410,17 @@ module Internal {
)
}
private ControlFlowElement lastConstCaseNoMatch(ConstCase cc, MatchingCompletion c) {
result = lastConstCaseExpr(cc, c) and
not c.isMatch()
}
private ControlFlowElement lastTypeCaseNoMatch(TypeCase tc, MatchingCompletion c) {
result = tc.getTypeAccess() and
not c.isMatch() and
c.isValidFor(result)
}
pragma [noinline,nomagic]
private ControlFlowElement lastStandardElementGetNonLastChildElement(StandardElement se, int i, Completion c) {
result = last(se.getNonLastChildElement(i), c)
@@ -1935,7 +1951,7 @@ module Internal {
or
// Flow from last element of switch expression to first element of first statement
cfe = lastSwitchStmtCondition(ss, c) and
c instanceof SimpleCompletion and
c instanceof NormalCompletion and
result = first(ss.getStmt(0))
or
// Flow from last element of non-`case` statement `i` to first element of statement `i+1`
@@ -2006,6 +2022,7 @@ module Internal {
c instanceof SimpleCompletion
or
cfe = tc.getTypeAccess() and
c.isValidFor(cfe) and
c = any(MatchingCompletion mc |
if mc.isMatch() then
if exists(tc.getVariableDeclExpr()) then
@@ -2123,7 +2140,7 @@ module Internal {
exists(ForeachStmt fs |
// Flow from last element of iterator expression to emptiness test
cfe = lastForeachStmtIterableExpr(fs, c) and
c instanceof SimpleCompletion and
c instanceof NormalCompletion and
result = fs
or
// Flow from emptiness test to first element of variable declaration/loop body

View File

@@ -70,7 +70,8 @@
| ConditionalAccess.cs:19:12:19:13 | enter M6 | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | 2 |
| ConditionalAccess.cs:19:12:19:13 | exit M6 | ConditionalAccess.cs:19:12:19:13 | exit M6 | 1 |
| ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith | 2 |
| ConditionalAccess.cs:24:26:24:38 | enter CommaJoinWith | ConditionalAccess.cs:24:26:24:38 | exit CommaJoinWith | 7 |
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:21:10:21:11 | exit M7 | 20 |
| ConditionalAccess.cs:31:26:31:38 | enter CommaJoinWith | ConditionalAccess.cs:31:26:31:38 | exit CommaJoinWith | 7 |
| ExitMethods.cs:6:10:6:11 | enter M1 | ExitMethods.cs:6:10:6:11 | exit M1 | 7 |
| ExitMethods.cs:12:10:12:11 | enter M2 | ExitMethods.cs:12:10:12:11 | exit M2 | 7 |
| ExitMethods.cs:18:10:18:11 | enter M3 | ExitMethods.cs:18:10:18:11 | exit M3 | 6 |
@@ -102,14 +103,20 @@
| Extensions.cs:10:24:10:29 | enter ToBool | Extensions.cs:10:24:10:29 | exit ToBool | 7 |
| Extensions.cs:15:23:15:33 | enter CallToInt32 | Extensions.cs:15:23:15:33 | exit CallToInt32 | 4 |
| Extensions.cs:20:17:20:20 | enter Main | Extensions.cs:20:17:20:20 | exit Main | 19 |
| Foreach.cs:3:10:3:11 | enter M1 | Foreach.cs:5:29:5:32 | access to parameter args | 3 |
| Foreach.cs:3:10:3:11 | exit M1 | Foreach.cs:3:10:3:11 | exit M1 | 1 |
| Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | 1 |
| Foreach.cs:5:22:5:24 | String arg | Foreach.cs:6:13:6:13 | ; | 2 |
| Foreach.cs:9:10:9:11 | enter M2 | Foreach.cs:11:27:11:30 | access to parameter args | 3 |
| Foreach.cs:9:10:9:11 | exit M2 | Foreach.cs:9:10:9:11 | exit M2 | 1 |
| Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | 1 |
| Foreach.cs:12:13:12:13 | ; | Foreach.cs:12:13:12:13 | ; | 1 |
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:8:29:8:32 | access to parameter args | 3 |
| Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:6:10:6:11 | exit M1 | 1 |
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | 1 |
| Foreach.cs:8:22:8:24 | String arg | Foreach.cs:9:13:9:13 | ; | 2 |
| Foreach.cs:12:10:12:11 | enter M2 | Foreach.cs:14:27:14:30 | access to parameter args | 3 |
| Foreach.cs:12:10:12:11 | exit M2 | Foreach.cs:12:10:12:11 | exit M2 | 1 |
| Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | 1 |
| Foreach.cs:15:13:15:13 | ; | Foreach.cs:15:13:15:13 | ; | 1 |
| Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:20:27:20:27 | access to parameter e | 4 |
| Foreach.cs:18:10:18:11 | exit M3 | Foreach.cs:18:10:18:11 | exit M3 | 1 |
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | 1 |
| Foreach.cs:20:22:20:22 | String x | Foreach.cs:21:11:21:11 | ; | 2 |
| Foreach.cs:20:29:20:38 | call to method ToArray | Foreach.cs:20:29:20:38 | call to method ToArray | 1 |
| Foreach.cs:20:43:20:68 | call to method Empty | Foreach.cs:20:43:20:68 | call to method Empty | 1 |
| Initializers.cs:6:5:6:16 | enter Initializers | Initializers.cs:6:5:6:16 | exit Initializers | 3 |
| Initializers.cs:8:10:8:10 | enter M | Initializers.cs:8:10:8:10 | exit M | 23 |
| NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:23:3:23 | access to parameter i | 3 |
@@ -129,13 +136,13 @@
| NullCoalescing.cs:9:41:9:41 | access to parameter s | NullCoalescing.cs:9:41:9:41 | access to parameter s | 1 |
| NullCoalescing.cs:9:45:9:45 | access to parameter s | NullCoalescing.cs:9:45:9:45 | access to parameter s | 1 |
| NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:52 | "" | 2 |
| NullCoalescing.cs:9:57:9:58 | "" | NullCoalescing.cs:9:57:9:58 | "" | 1 |
| NullCoalescing.cs:11:9:11:10 | enter M5 | NullCoalescing.cs:11:44:11:45 | access to parameter b1 | 4 |
| NullCoalescing.cs:11:9:11:10 | exit M5 | NullCoalescing.cs:11:9:11:10 | exit M5 | 1 |
| NullCoalescing.cs:11:51:11:58 | ... && ... | NullCoalescing.cs:11:51:11:52 | access to parameter b2 | 2 |
| NullCoalescing.cs:11:57:11:58 | access to parameter b3 | NullCoalescing.cs:11:57:11:58 | access to parameter b3 | 1 |
| NullCoalescing.cs:11:64:11:64 | 0 | NullCoalescing.cs:11:64:11:64 | 0 | 1 |
| NullCoalescing.cs:11:68:11:68 | 1 | NullCoalescing.cs:11:68:11:68 | 1 | 1 |
| NullCoalescing.cs:13:10:13:11 | enter M6 | NullCoalescing.cs:13:10:13:11 | exit M6 | 21 |
| Patterns.cs:5:10:5:13 | enter Test | Patterns.cs:8:13:8:23 | ... is ... | 10 |
| Patterns.cs:9:9:11:9 | {...} | Patterns.cs:10:13:10:42 | call to method WriteLine | 6 |
| Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:12:18:12:31 | ... is ... | 4 |
@@ -184,7 +191,31 @@
| Switch.cs:50:13:50:39 | case Boolean: | Switch.cs:50:18:50:21 | access to type Boolean | 2 |
| Switch.cs:50:30:50:30 | access to parameter o | Switch.cs:50:30:50:38 | ... != ... | 3 |
| Switch.cs:51:17:51:22 | break; | Switch.cs:51:17:51:22 | break; | 1 |
| Switch.cs:55:17:55:21 | enter Throw | Switch.cs:55:17:55:21 | exit Throw | 4 |
| Switch.cs:55:10:55:11 | enter M5 | Switch.cs:55:10:55:11 | exit M5 | 12 |
| Switch.cs:66:10:66:11 | enter M6 | Switch.cs:72:18:72:19 | "" | 9 |
| Switch.cs:66:10:66:11 | exit M6 | Switch.cs:66:10:66:11 | exit M6 | 1 |
| Switch.cs:73:15:73:20 | break; | Switch.cs:73:15:73:20 | break; | 1 |
| Switch.cs:77:10:77:11 | enter M7 | Switch.cs:81:18:81:18 | 1 | 6 |
| Switch.cs:77:10:77:11 | exit M7 | Switch.cs:77:10:77:11 | exit M7 | 1 |
| Switch.cs:82:22:82:25 | true | Switch.cs:82:15:82:26 | return ...; | 2 |
| Switch.cs:83:13:83:20 | case ...: | Switch.cs:83:18:83:18 | 2 | 2 |
| Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:84:19:84:23 | ... > ... | 4 |
| Switch.cs:85:17:85:22 | break; | Switch.cs:85:17:85:22 | break; | 1 |
| Switch.cs:86:22:86:25 | true | Switch.cs:86:15:86:26 | return ...; | 2 |
| Switch.cs:88:16:88:20 | false | Switch.cs:88:9:88:21 | return ...; | 2 |
| Switch.cs:91:10:91:11 | enter M8 | Switch.cs:95:18:95:20 | access to type Int32 | 6 |
| Switch.cs:91:10:91:11 | exit M8 | Switch.cs:91:10:91:11 | exit M8 | 1 |
| Switch.cs:96:22:96:25 | true | Switch.cs:96:15:96:26 | return ...; | 2 |
| Switch.cs:98:16:98:20 | false | Switch.cs:98:9:98:21 | return ...; | 2 |
| Switch.cs:101:9:101:10 | enter M9 | Switch.cs:103:17:103:17 | access to parameter s | 4 |
| Switch.cs:101:9:101:10 | exit M9 | Switch.cs:101:9:101:10 | exit M9 | 1 |
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:103:19:103:25 | access to property Length | 1 |
| Switch.cs:105:13:105:20 | case ...: | Switch.cs:105:18:105:18 | 0 | 2 |
| Switch.cs:105:29:105:29 | 0 | Switch.cs:105:22:105:30 | return ...; | 2 |
| Switch.cs:106:13:106:20 | case ...: | Switch.cs:106:18:106:18 | 1 | 2 |
| Switch.cs:106:29:106:29 | 1 | Switch.cs:106:22:106:30 | return ...; | 2 |
| Switch.cs:108:17:108:17 | 1 | Switch.cs:108:9:108:18 | return ...; | 3 |
| Switch.cs:111:17:111:21 | enter Throw | Switch.cs:111:17:111:21 | exit Throw | 4 |
| TypeAccesses.cs:3:10:3:10 | enter M | TypeAccesses.cs:7:13:7:22 | ... is ... | 16 |
| TypeAccesses.cs:7:25:7:25 | ; | TypeAccesses.cs:7:25:7:25 | ; | 1 |
| TypeAccesses.cs:8:9:8:28 | ... ...; | TypeAccesses.cs:3:10:3:10 | exit M | 5 |
@@ -219,12 +250,16 @@
| cflow.cs:42:17:42:39 | ...; | cflow.cs:43:17:43:28 | goto case ...; | 5 |
| cflow.cs:44:13:44:19 | case ...: | cflow.cs:44:18:44:18 | 2 | 2 |
| cflow.cs:45:17:45:39 | ...; | cflow.cs:46:17:46:28 | goto case ...; | 5 |
| cflow.cs:47:13:47:19 | case ...: | cflow.cs:53:18:53:19 | 42 | 10 |
| cflow.cs:47:13:47:19 | case ...: | cflow.cs:47:18:47:18 | 3 | 2 |
| cflow.cs:48:17:48:39 | ...; | cflow.cs:49:17:49:22 | break; | 4 |
| cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:53:18:53:19 | 42 | 4 |
| cflow.cs:54:17:54:48 | ...; | cflow.cs:55:17:55:22 | break; | 4 |
| cflow.cs:56:13:56:20 | default: | cflow.cs:58:17:58:22 | break; | 5 |
| cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:63:23:63:33 | ... == ... | 12 |
| cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:62:18:62:18 | 0 | 6 |
| cflow.cs:63:17:64:55 | if (...) ... | cflow.cs:63:23:63:33 | ... == ... | 6 |
| cflow.cs:64:27:64:54 | object creation of type NullReferenceException | cflow.cs:64:21:64:55 | throw ...; | 2 |
| cflow.cs:65:17:65:22 | break; | cflow.cs:67:9:67:17 | return ...; | 3 |
| cflow.cs:65:17:65:22 | break; | cflow.cs:65:17:65:22 | break; | 1 |
| cflow.cs:67:16:67:16 | access to parameter a | cflow.cs:67:9:67:17 | return ...; | 2 |
| cflow.cs:70:18:70:18 | enter M | cflow.cs:72:13:72:21 | ... == ... | 6 |
| cflow.cs:70:18:70:18 | exit M | cflow.cs:70:18:70:18 | exit M | 1 |
| cflow.cs:73:13:73:19 | return ...; | cflow.cs:73:13:73:19 | return ...; | 1 |

View File

@@ -138,7 +138,8 @@
| post | ConditionalAccess.cs:19:12:19:13 | exit M6 | ConditionalAccess.cs:19:12:19:13 | exit M6 |
| post | ConditionalAccess.cs:19:12:19:13 | exit M6 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 |
| post | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 |
| post | ConditionalAccess.cs:24:26:24:38 | enter CommaJoinWith | ConditionalAccess.cs:24:26:24:38 | enter CommaJoinWith |
| post | ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:21:10:21:11 | enter M7 |
| post | ConditionalAccess.cs:31:26:31:38 | enter CommaJoinWith | ConditionalAccess.cs:31:26:31:38 | enter CommaJoinWith |
| post | ExitMethods.cs:6:10:6:11 | enter M1 | ExitMethods.cs:6:10:6:11 | enter M1 |
| post | ExitMethods.cs:12:10:12:11 | enter M2 | ExitMethods.cs:12:10:12:11 | enter M2 |
| post | ExitMethods.cs:18:10:18:11 | enter M3 | ExitMethods.cs:18:10:18:11 | enter M3 |
@@ -184,24 +185,39 @@
| post | Extensions.cs:10:24:10:29 | enter ToBool | Extensions.cs:10:24:10:29 | enter ToBool |
| post | Extensions.cs:15:23:15:33 | enter CallToInt32 | Extensions.cs:15:23:15:33 | enter CallToInt32 |
| post | Extensions.cs:20:17:20:20 | enter Main | Extensions.cs:20:17:20:20 | enter Main |
| post | Foreach.cs:3:10:3:11 | enter M1 | Foreach.cs:3:10:3:11 | enter M1 |
| post | Foreach.cs:3:10:3:11 | exit M1 | Foreach.cs:3:10:3:11 | enter M1 |
| post | Foreach.cs:3:10:3:11 | exit M1 | Foreach.cs:3:10:3:11 | exit M1 |
| post | Foreach.cs:3:10:3:11 | exit M1 | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... |
| post | Foreach.cs:3:10:3:11 | exit M1 | Foreach.cs:5:22:5:24 | String arg |
| post | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | Foreach.cs:3:10:3:11 | enter M1 |
| post | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... |
| post | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | Foreach.cs:5:22:5:24 | String arg |
| post | Foreach.cs:5:22:5:24 | String arg | Foreach.cs:5:22:5:24 | String arg |
| post | Foreach.cs:9:10:9:11 | enter M2 | Foreach.cs:9:10:9:11 | enter M2 |
| post | Foreach.cs:9:10:9:11 | exit M2 | Foreach.cs:9:10:9:11 | enter M2 |
| post | Foreach.cs:9:10:9:11 | exit M2 | Foreach.cs:9:10:9:11 | exit M2 |
| post | Foreach.cs:9:10:9:11 | exit M2 | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... |
| post | Foreach.cs:9:10:9:11 | exit M2 | Foreach.cs:12:13:12:13 | ; |
| post | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | Foreach.cs:9:10:9:11 | enter M2 |
| post | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... |
| post | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | Foreach.cs:12:13:12:13 | ; |
| post | Foreach.cs:12:13:12:13 | ; | Foreach.cs:12:13:12:13 | ; |
| post | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | enter M1 |
| post | Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:6:10:6:11 | enter M1 |
| post | Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:6:10:6:11 | exit M1 |
| post | Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... |
| post | Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:8:22:8:24 | String arg |
| post | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:6:10:6:11 | enter M1 |
| post | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... |
| post | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:22:8:24 | String arg |
| post | Foreach.cs:8:22:8:24 | String arg | Foreach.cs:8:22:8:24 | String arg |
| post | Foreach.cs:12:10:12:11 | enter M2 | Foreach.cs:12:10:12:11 | enter M2 |
| post | Foreach.cs:12:10:12:11 | exit M2 | Foreach.cs:12:10:12:11 | enter M2 |
| post | Foreach.cs:12:10:12:11 | exit M2 | Foreach.cs:12:10:12:11 | exit M2 |
| post | Foreach.cs:12:10:12:11 | exit M2 | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... |
| post | Foreach.cs:12:10:12:11 | exit M2 | Foreach.cs:15:13:15:13 | ; |
| post | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:12:10:12:11 | enter M2 |
| post | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... |
| post | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:15:13:15:13 | ; |
| post | Foreach.cs:15:13:15:13 | ; | Foreach.cs:15:13:15:13 | ; |
| post | Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:18:10:18:11 | enter M3 |
| post | Foreach.cs:18:10:18:11 | exit M3 | Foreach.cs:18:10:18:11 | enter M3 |
| post | Foreach.cs:18:10:18:11 | exit M3 | Foreach.cs:18:10:18:11 | exit M3 |
| post | Foreach.cs:18:10:18:11 | exit M3 | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... |
| post | Foreach.cs:18:10:18:11 | exit M3 | Foreach.cs:20:22:20:22 | String x |
| post | Foreach.cs:18:10:18:11 | exit M3 | Foreach.cs:20:29:20:38 | call to method ToArray |
| post | Foreach.cs:18:10:18:11 | exit M3 | Foreach.cs:20:43:20:68 | call to method Empty |
| post | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:18:10:18:11 | enter M3 |
| post | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... |
| post | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:22:20:22 | String x |
| post | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:29:20:38 | call to method ToArray |
| post | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:43:20:68 | call to method Empty |
| post | Foreach.cs:20:22:20:22 | String x | Foreach.cs:20:22:20:22 | String x |
| post | Foreach.cs:20:29:20:38 | call to method ToArray | Foreach.cs:20:29:20:38 | call to method ToArray |
| post | Foreach.cs:20:43:20:68 | call to method Empty | Foreach.cs:20:43:20:68 | call to method Empty |
| post | Initializers.cs:6:5:6:16 | enter Initializers | Initializers.cs:6:5:6:16 | enter Initializers |
| post | Initializers.cs:8:10:8:10 | enter M | Initializers.cs:8:10:8:10 | enter M |
| post | NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:9:3:10 | enter M1 |
@@ -232,11 +248,9 @@
| post | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:41:9:41 | access to parameter s |
| post | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:45:9:45 | access to parameter s |
| post | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:51:9:58 | ... ?? ... |
| post | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:57:9:58 | "" |
| post | NullCoalescing.cs:9:41:9:41 | access to parameter s | NullCoalescing.cs:9:41:9:41 | access to parameter s |
| post | NullCoalescing.cs:9:45:9:45 | access to parameter s | NullCoalescing.cs:9:45:9:45 | access to parameter s |
| post | NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:58 | ... ?? ... |
| post | NullCoalescing.cs:9:57:9:58 | "" | NullCoalescing.cs:9:57:9:58 | "" |
| post | NullCoalescing.cs:11:9:11:10 | enter M5 | NullCoalescing.cs:11:9:11:10 | enter M5 |
| post | NullCoalescing.cs:11:9:11:10 | exit M5 | NullCoalescing.cs:11:9:11:10 | enter M5 |
| post | NullCoalescing.cs:11:9:11:10 | exit M5 | NullCoalescing.cs:11:9:11:10 | exit M5 |
@@ -248,6 +262,7 @@
| post | NullCoalescing.cs:11:57:11:58 | access to parameter b3 | NullCoalescing.cs:11:57:11:58 | access to parameter b3 |
| post | NullCoalescing.cs:11:64:11:64 | 0 | NullCoalescing.cs:11:64:11:64 | 0 |
| post | NullCoalescing.cs:11:68:11:68 | 1 | NullCoalescing.cs:11:68:11:68 | 1 |
| post | NullCoalescing.cs:13:10:13:11 | enter M6 | NullCoalescing.cs:13:10:13:11 | enter M6 |
| post | Patterns.cs:5:10:5:13 | enter Test | Patterns.cs:5:10:5:13 | enter Test |
| post | Patterns.cs:9:9:11:9 | {...} | Patterns.cs:9:9:11:9 | {...} |
| post | Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:12:14:18:9 | if (...) ... |
@@ -344,7 +359,53 @@
| post | Switch.cs:50:13:50:39 | case Boolean: | Switch.cs:50:13:50:39 | case Boolean: |
| post | Switch.cs:50:30:50:30 | access to parameter o | Switch.cs:50:30:50:30 | access to parameter o |
| post | Switch.cs:51:17:51:22 | break; | Switch.cs:51:17:51:22 | break; |
| post | Switch.cs:55:17:55:21 | enter Throw | Switch.cs:55:17:55:21 | enter Throw |
| post | Switch.cs:55:10:55:11 | enter M5 | Switch.cs:55:10:55:11 | enter M5 |
| post | Switch.cs:66:10:66:11 | enter M6 | Switch.cs:66:10:66:11 | enter M6 |
| post | Switch.cs:66:10:66:11 | exit M6 | Switch.cs:66:10:66:11 | enter M6 |
| post | Switch.cs:66:10:66:11 | exit M6 | Switch.cs:66:10:66:11 | exit M6 |
| post | Switch.cs:66:10:66:11 | exit M6 | Switch.cs:73:15:73:20 | break; |
| post | Switch.cs:73:15:73:20 | break; | Switch.cs:73:15:73:20 | break; |
| post | Switch.cs:77:10:77:11 | enter M7 | Switch.cs:77:10:77:11 | enter M7 |
| post | Switch.cs:77:10:77:11 | exit M7 | Switch.cs:77:10:77:11 | enter M7 |
| post | Switch.cs:77:10:77:11 | exit M7 | Switch.cs:77:10:77:11 | exit M7 |
| post | Switch.cs:77:10:77:11 | exit M7 | Switch.cs:82:22:82:25 | true |
| post | Switch.cs:77:10:77:11 | exit M7 | Switch.cs:83:13:83:20 | case ...: |
| post | Switch.cs:77:10:77:11 | exit M7 | Switch.cs:84:15:85:22 | if (...) ... |
| post | Switch.cs:77:10:77:11 | exit M7 | Switch.cs:85:17:85:22 | break; |
| post | Switch.cs:77:10:77:11 | exit M7 | Switch.cs:86:22:86:25 | true |
| post | Switch.cs:77:10:77:11 | exit M7 | Switch.cs:88:16:88:20 | false |
| post | Switch.cs:82:22:82:25 | true | Switch.cs:82:22:82:25 | true |
| post | Switch.cs:83:13:83:20 | case ...: | Switch.cs:83:13:83:20 | case ...: |
| post | Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:84:15:85:22 | if (...) ... |
| post | Switch.cs:85:17:85:22 | break; | Switch.cs:85:17:85:22 | break; |
| post | Switch.cs:86:22:86:25 | true | Switch.cs:86:22:86:25 | true |
| post | Switch.cs:88:16:88:20 | false | Switch.cs:85:17:85:22 | break; |
| post | Switch.cs:88:16:88:20 | false | Switch.cs:88:16:88:20 | false |
| post | Switch.cs:91:10:91:11 | enter M8 | Switch.cs:91:10:91:11 | enter M8 |
| post | Switch.cs:91:10:91:11 | exit M8 | Switch.cs:91:10:91:11 | enter M8 |
| post | Switch.cs:91:10:91:11 | exit M8 | Switch.cs:91:10:91:11 | exit M8 |
| post | Switch.cs:91:10:91:11 | exit M8 | Switch.cs:96:22:96:25 | true |
| post | Switch.cs:91:10:91:11 | exit M8 | Switch.cs:98:16:98:20 | false |
| post | Switch.cs:96:22:96:25 | true | Switch.cs:96:22:96:25 | true |
| post | Switch.cs:98:16:98:20 | false | Switch.cs:98:16:98:20 | false |
| post | Switch.cs:101:9:101:10 | enter M9 | Switch.cs:101:9:101:10 | enter M9 |
| post | Switch.cs:101:9:101:10 | exit M9 | Switch.cs:101:9:101:10 | enter M9 |
| post | Switch.cs:101:9:101:10 | exit M9 | Switch.cs:101:9:101:10 | exit M9 |
| post | Switch.cs:101:9:101:10 | exit M9 | Switch.cs:103:19:103:25 | access to property Length |
| post | Switch.cs:101:9:101:10 | exit M9 | Switch.cs:105:13:105:20 | case ...: |
| post | Switch.cs:101:9:101:10 | exit M9 | Switch.cs:105:29:105:29 | 0 |
| post | Switch.cs:101:9:101:10 | exit M9 | Switch.cs:106:13:106:20 | case ...: |
| post | Switch.cs:101:9:101:10 | exit M9 | Switch.cs:106:29:106:29 | 1 |
| post | Switch.cs:101:9:101:10 | exit M9 | Switch.cs:108:17:108:17 | 1 |
| post | Switch.cs:103:19:103:25 | access to property Length | Switch.cs:103:19:103:25 | access to property Length |
| post | Switch.cs:105:13:105:20 | case ...: | Switch.cs:101:9:101:10 | enter M9 |
| post | Switch.cs:105:13:105:20 | case ...: | Switch.cs:103:19:103:25 | access to property Length |
| post | Switch.cs:105:13:105:20 | case ...: | Switch.cs:105:13:105:20 | case ...: |
| post | Switch.cs:105:29:105:29 | 0 | Switch.cs:105:29:105:29 | 0 |
| post | Switch.cs:106:13:106:20 | case ...: | Switch.cs:106:13:106:20 | case ...: |
| post | Switch.cs:106:29:106:29 | 1 | Switch.cs:106:29:106:29 | 1 |
| post | Switch.cs:108:17:108:17 | 1 | Switch.cs:108:17:108:17 | 1 |
| post | Switch.cs:111:17:111:21 | enter Throw | Switch.cs:111:17:111:21 | enter Throw |
| post | TypeAccesses.cs:3:10:3:10 | enter M | TypeAccesses.cs:3:10:3:10 | enter M |
| post | TypeAccesses.cs:7:25:7:25 | ; | TypeAccesses.cs:7:25:7:25 | ; |
| post | TypeAccesses.cs:8:9:8:28 | ... ...; | TypeAccesses.cs:3:10:3:10 | enter M |
@@ -451,11 +512,15 @@
| post | cflow.cs:37:17:37:22 | exit Switch | cflow.cs:37:17:37:22 | exit Switch |
| post | cflow.cs:37:17:37:22 | exit Switch | cflow.cs:44:13:44:19 | case ...: |
| post | cflow.cs:37:17:37:22 | exit Switch | cflow.cs:47:13:47:19 | case ...: |
| post | cflow.cs:37:17:37:22 | exit Switch | cflow.cs:48:17:48:39 | ...; |
| post | cflow.cs:37:17:37:22 | exit Switch | cflow.cs:51:9:59:9 | switch (...) {...} |
| post | cflow.cs:37:17:37:22 | exit Switch | cflow.cs:54:17:54:48 | ...; |
| post | cflow.cs:37:17:37:22 | exit Switch | cflow.cs:56:13:56:20 | default: |
| post | cflow.cs:37:17:37:22 | exit Switch | cflow.cs:60:9:66:9 | switch (...) {...} |
| post | cflow.cs:37:17:37:22 | exit Switch | cflow.cs:63:17:64:55 | if (...) ... |
| post | cflow.cs:37:17:37:22 | exit Switch | cflow.cs:64:27:64:54 | object creation of type NullReferenceException |
| post | cflow.cs:37:17:37:22 | exit Switch | cflow.cs:65:17:65:22 | break; |
| post | cflow.cs:37:17:37:22 | exit Switch | cflow.cs:67:16:67:16 | access to parameter a |
| post | cflow.cs:42:17:42:39 | ...; | cflow.cs:42:17:42:39 | ...; |
| post | cflow.cs:44:13:44:19 | case ...: | cflow.cs:37:17:37:22 | enter Switch |
| post | cflow.cs:44:13:44:19 | case ...: | cflow.cs:44:13:44:19 | case ...: |
@@ -463,16 +528,27 @@
| post | cflow.cs:47:13:47:19 | case ...: | cflow.cs:37:17:37:22 | enter Switch |
| post | cflow.cs:47:13:47:19 | case ...: | cflow.cs:44:13:44:19 | case ...: |
| post | cflow.cs:47:13:47:19 | case ...: | cflow.cs:47:13:47:19 | case ...: |
| post | cflow.cs:48:17:48:39 | ...; | cflow.cs:48:17:48:39 | ...; |
| post | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:37:17:37:22 | enter Switch |
| post | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:44:13:44:19 | case ...: |
| post | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:47:13:47:19 | case ...: |
| post | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:48:17:48:39 | ...; |
| post | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:51:9:59:9 | switch (...) {...} |
| post | cflow.cs:54:17:54:48 | ...; | cflow.cs:54:17:54:48 | ...; |
| post | cflow.cs:56:13:56:20 | default: | cflow.cs:56:13:56:20 | default: |
| post | cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:37:17:37:22 | enter Switch |
| post | cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:44:13:44:19 | case ...: |
| post | cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:47:13:47:19 | case ...: |
| post | cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:48:17:48:39 | ...; |
| post | cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:51:9:59:9 | switch (...) {...} |
| post | cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:54:17:54:48 | ...; |
| post | cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:56:13:56:20 | default: |
| post | cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:60:9:66:9 | switch (...) {...} |
| post | cflow.cs:63:17:64:55 | if (...) ... | cflow.cs:63:17:64:55 | if (...) ... |
| post | cflow.cs:64:27:64:54 | object creation of type NullReferenceException | cflow.cs:64:27:64:54 | object creation of type NullReferenceException |
| post | cflow.cs:65:17:65:22 | break; | cflow.cs:65:17:65:22 | break; |
| post | cflow.cs:67:16:67:16 | access to parameter a | cflow.cs:65:17:65:22 | break; |
| post | cflow.cs:67:16:67:16 | access to parameter a | cflow.cs:67:16:67:16 | access to parameter a |
| post | cflow.cs:70:18:70:18 | enter M | cflow.cs:70:18:70:18 | enter M |
| post | cflow.cs:70:18:70:18 | exit M | cflow.cs:70:18:70:18 | enter M |
| post | cflow.cs:70:18:70:18 | exit M | cflow.cs:70:18:70:18 | exit M |
@@ -1093,7 +1169,8 @@
| pre | ConditionalAccess.cs:19:12:19:13 | enter M6 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 |
| pre | ConditionalAccess.cs:19:12:19:13 | exit M6 | ConditionalAccess.cs:19:12:19:13 | exit M6 |
| pre | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 |
| pre | ConditionalAccess.cs:24:26:24:38 | enter CommaJoinWith | ConditionalAccess.cs:24:26:24:38 | enter CommaJoinWith |
| pre | ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:21:10:21:11 | enter M7 |
| pre | ConditionalAccess.cs:31:26:31:38 | enter CommaJoinWith | ConditionalAccess.cs:31:26:31:38 | enter CommaJoinWith |
| pre | ExitMethods.cs:6:10:6:11 | enter M1 | ExitMethods.cs:6:10:6:11 | enter M1 |
| pre | ExitMethods.cs:12:10:12:11 | enter M2 | ExitMethods.cs:12:10:12:11 | enter M2 |
| pre | ExitMethods.cs:18:10:18:11 | enter M3 | ExitMethods.cs:18:10:18:11 | enter M3 |
@@ -1139,24 +1216,37 @@
| pre | Extensions.cs:10:24:10:29 | enter ToBool | Extensions.cs:10:24:10:29 | enter ToBool |
| pre | Extensions.cs:15:23:15:33 | enter CallToInt32 | Extensions.cs:15:23:15:33 | enter CallToInt32 |
| pre | Extensions.cs:20:17:20:20 | enter Main | Extensions.cs:20:17:20:20 | enter Main |
| pre | Foreach.cs:3:10:3:11 | enter M1 | Foreach.cs:3:10:3:11 | enter M1 |
| pre | Foreach.cs:3:10:3:11 | enter M1 | Foreach.cs:3:10:3:11 | exit M1 |
| pre | Foreach.cs:3:10:3:11 | enter M1 | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... |
| pre | Foreach.cs:3:10:3:11 | enter M1 | Foreach.cs:5:22:5:24 | String arg |
| pre | Foreach.cs:3:10:3:11 | exit M1 | Foreach.cs:3:10:3:11 | exit M1 |
| pre | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | Foreach.cs:3:10:3:11 | exit M1 |
| pre | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... |
| pre | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | Foreach.cs:5:22:5:24 | String arg |
| pre | Foreach.cs:5:22:5:24 | String arg | Foreach.cs:5:22:5:24 | String arg |
| pre | Foreach.cs:9:10:9:11 | enter M2 | Foreach.cs:9:10:9:11 | enter M2 |
| pre | Foreach.cs:9:10:9:11 | enter M2 | Foreach.cs:9:10:9:11 | exit M2 |
| pre | Foreach.cs:9:10:9:11 | enter M2 | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... |
| pre | Foreach.cs:9:10:9:11 | enter M2 | Foreach.cs:12:13:12:13 | ; |
| pre | Foreach.cs:9:10:9:11 | exit M2 | Foreach.cs:9:10:9:11 | exit M2 |
| pre | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | Foreach.cs:9:10:9:11 | exit M2 |
| pre | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... |
| pre | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | Foreach.cs:12:13:12:13 | ; |
| pre | Foreach.cs:12:13:12:13 | ; | Foreach.cs:12:13:12:13 | ; |
| pre | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | enter M1 |
| pre | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:6:10:6:11 | exit M1 |
| pre | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... |
| pre | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:8:22:8:24 | String arg |
| pre | Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:6:10:6:11 | exit M1 |
| pre | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:6:10:6:11 | exit M1 |
| pre | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... |
| pre | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:22:8:24 | String arg |
| pre | Foreach.cs:8:22:8:24 | String arg | Foreach.cs:8:22:8:24 | String arg |
| pre | Foreach.cs:12:10:12:11 | enter M2 | Foreach.cs:12:10:12:11 | enter M2 |
| pre | Foreach.cs:12:10:12:11 | enter M2 | Foreach.cs:12:10:12:11 | exit M2 |
| pre | Foreach.cs:12:10:12:11 | enter M2 | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... |
| pre | Foreach.cs:12:10:12:11 | enter M2 | Foreach.cs:15:13:15:13 | ; |
| pre | Foreach.cs:12:10:12:11 | exit M2 | Foreach.cs:12:10:12:11 | exit M2 |
| pre | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:12:10:12:11 | exit M2 |
| pre | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... |
| pre | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:15:13:15:13 | ; |
| pre | Foreach.cs:15:13:15:13 | ; | Foreach.cs:15:13:15:13 | ; |
| pre | Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:18:10:18:11 | enter M3 |
| pre | Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:18:10:18:11 | exit M3 |
| pre | Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... |
| pre | Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:20:22:20:22 | String x |
| pre | Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:20:29:20:38 | call to method ToArray |
| pre | Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:20:43:20:68 | call to method Empty |
| pre | Foreach.cs:18:10:18:11 | exit M3 | Foreach.cs:18:10:18:11 | exit M3 |
| pre | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:18:10:18:11 | exit M3 |
| pre | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... |
| pre | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:22:20:22 | String x |
| pre | Foreach.cs:20:22:20:22 | String x | Foreach.cs:20:22:20:22 | String x |
| pre | Foreach.cs:20:29:20:38 | call to method ToArray | Foreach.cs:20:29:20:38 | call to method ToArray |
| pre | Foreach.cs:20:43:20:68 | call to method Empty | Foreach.cs:20:43:20:68 | call to method Empty |
| pre | Initializers.cs:6:5:6:16 | enter Initializers | Initializers.cs:6:5:6:16 | enter Initializers |
| pre | Initializers.cs:8:10:8:10 | enter M | Initializers.cs:8:10:8:10 | enter M |
| pre | NullCoalescing.cs:3:9:3:10 | enter M1 | NullCoalescing.cs:3:9:3:10 | enter M1 |
@@ -1186,13 +1276,10 @@
| pre | NullCoalescing.cs:9:12:9:13 | enter M4 | NullCoalescing.cs:9:41:9:41 | access to parameter s |
| pre | NullCoalescing.cs:9:12:9:13 | enter M4 | NullCoalescing.cs:9:45:9:45 | access to parameter s |
| pre | NullCoalescing.cs:9:12:9:13 | enter M4 | NullCoalescing.cs:9:51:9:58 | ... ?? ... |
| pre | NullCoalescing.cs:9:12:9:13 | enter M4 | NullCoalescing.cs:9:57:9:58 | "" |
| pre | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:12:9:13 | exit M4 |
| pre | NullCoalescing.cs:9:41:9:41 | access to parameter s | NullCoalescing.cs:9:41:9:41 | access to parameter s |
| pre | NullCoalescing.cs:9:45:9:45 | access to parameter s | NullCoalescing.cs:9:45:9:45 | access to parameter s |
| pre | NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:58 | ... ?? ... |
| pre | NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:57:9:58 | "" |
| pre | NullCoalescing.cs:9:57:9:58 | "" | NullCoalescing.cs:9:57:9:58 | "" |
| pre | NullCoalescing.cs:11:9:11:10 | enter M5 | NullCoalescing.cs:11:9:11:10 | enter M5 |
| pre | NullCoalescing.cs:11:9:11:10 | enter M5 | NullCoalescing.cs:11:9:11:10 | exit M5 |
| pre | NullCoalescing.cs:11:9:11:10 | enter M5 | NullCoalescing.cs:11:51:11:58 | ... && ... |
@@ -1205,6 +1292,7 @@
| pre | NullCoalescing.cs:11:57:11:58 | access to parameter b3 | NullCoalescing.cs:11:57:11:58 | access to parameter b3 |
| pre | NullCoalescing.cs:11:64:11:64 | 0 | NullCoalescing.cs:11:64:11:64 | 0 |
| pre | NullCoalescing.cs:11:68:11:68 | 1 | NullCoalescing.cs:11:68:11:68 | 1 |
| pre | NullCoalescing.cs:13:10:13:11 | enter M6 | NullCoalescing.cs:13:10:13:11 | enter M6 |
| pre | Patterns.cs:5:10:5:13 | enter Test | Patterns.cs:5:10:5:13 | enter Test |
| pre | Patterns.cs:5:10:5:13 | enter Test | Patterns.cs:9:9:11:9 | {...} |
| pre | Patterns.cs:5:10:5:13 | enter Test | Patterns.cs:12:14:18:9 | if (...) ... |
@@ -1380,7 +1468,63 @@
| pre | Switch.cs:50:30:50:30 | access to parameter o | Switch.cs:50:30:50:30 | access to parameter o |
| pre | Switch.cs:50:30:50:30 | access to parameter o | Switch.cs:51:17:51:22 | break; |
| pre | Switch.cs:51:17:51:22 | break; | Switch.cs:51:17:51:22 | break; |
| pre | Switch.cs:55:17:55:21 | enter Throw | Switch.cs:55:17:55:21 | enter Throw |
| pre | Switch.cs:55:10:55:11 | enter M5 | Switch.cs:55:10:55:11 | enter M5 |
| pre | Switch.cs:66:10:66:11 | enter M6 | Switch.cs:66:10:66:11 | enter M6 |
| pre | Switch.cs:66:10:66:11 | enter M6 | Switch.cs:66:10:66:11 | exit M6 |
| pre | Switch.cs:66:10:66:11 | enter M6 | Switch.cs:73:15:73:20 | break; |
| pre | Switch.cs:66:10:66:11 | exit M6 | Switch.cs:66:10:66:11 | exit M6 |
| pre | Switch.cs:73:15:73:20 | break; | Switch.cs:73:15:73:20 | break; |
| pre | Switch.cs:77:10:77:11 | enter M7 | Switch.cs:77:10:77:11 | enter M7 |
| pre | Switch.cs:77:10:77:11 | enter M7 | Switch.cs:77:10:77:11 | exit M7 |
| pre | Switch.cs:77:10:77:11 | enter M7 | Switch.cs:82:22:82:25 | true |
| pre | Switch.cs:77:10:77:11 | enter M7 | Switch.cs:83:13:83:20 | case ...: |
| pre | Switch.cs:77:10:77:11 | enter M7 | Switch.cs:84:15:85:22 | if (...) ... |
| pre | Switch.cs:77:10:77:11 | enter M7 | Switch.cs:85:17:85:22 | break; |
| pre | Switch.cs:77:10:77:11 | enter M7 | Switch.cs:86:22:86:25 | true |
| pre | Switch.cs:77:10:77:11 | enter M7 | Switch.cs:88:16:88:20 | false |
| pre | Switch.cs:77:10:77:11 | exit M7 | Switch.cs:77:10:77:11 | exit M7 |
| pre | Switch.cs:82:22:82:25 | true | Switch.cs:82:22:82:25 | true |
| pre | Switch.cs:83:13:83:20 | case ...: | Switch.cs:83:13:83:20 | case ...: |
| pre | Switch.cs:83:13:83:20 | case ...: | Switch.cs:84:15:85:22 | if (...) ... |
| pre | Switch.cs:83:13:83:20 | case ...: | Switch.cs:85:17:85:22 | break; |
| pre | Switch.cs:83:13:83:20 | case ...: | Switch.cs:86:22:86:25 | true |
| pre | Switch.cs:83:13:83:20 | case ...: | Switch.cs:88:16:88:20 | false |
| pre | Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:84:15:85:22 | if (...) ... |
| pre | Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:85:17:85:22 | break; |
| pre | Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:86:22:86:25 | true |
| pre | Switch.cs:85:17:85:22 | break; | Switch.cs:85:17:85:22 | break; |
| pre | Switch.cs:86:22:86:25 | true | Switch.cs:86:22:86:25 | true |
| pre | Switch.cs:88:16:88:20 | false | Switch.cs:88:16:88:20 | false |
| pre | Switch.cs:91:10:91:11 | enter M8 | Switch.cs:91:10:91:11 | enter M8 |
| pre | Switch.cs:91:10:91:11 | enter M8 | Switch.cs:91:10:91:11 | exit M8 |
| pre | Switch.cs:91:10:91:11 | enter M8 | Switch.cs:96:22:96:25 | true |
| pre | Switch.cs:91:10:91:11 | enter M8 | Switch.cs:98:16:98:20 | false |
| pre | Switch.cs:91:10:91:11 | exit M8 | Switch.cs:91:10:91:11 | exit M8 |
| pre | Switch.cs:96:22:96:25 | true | Switch.cs:96:22:96:25 | true |
| pre | Switch.cs:98:16:98:20 | false | Switch.cs:98:16:98:20 | false |
| pre | Switch.cs:101:9:101:10 | enter M9 | Switch.cs:101:9:101:10 | enter M9 |
| pre | Switch.cs:101:9:101:10 | enter M9 | Switch.cs:101:9:101:10 | exit M9 |
| pre | Switch.cs:101:9:101:10 | enter M9 | Switch.cs:103:19:103:25 | access to property Length |
| pre | Switch.cs:101:9:101:10 | enter M9 | Switch.cs:105:13:105:20 | case ...: |
| pre | Switch.cs:101:9:101:10 | enter M9 | Switch.cs:105:29:105:29 | 0 |
| pre | Switch.cs:101:9:101:10 | enter M9 | Switch.cs:106:13:106:20 | case ...: |
| pre | Switch.cs:101:9:101:10 | enter M9 | Switch.cs:106:29:106:29 | 1 |
| pre | Switch.cs:101:9:101:10 | enter M9 | Switch.cs:108:17:108:17 | 1 |
| pre | Switch.cs:101:9:101:10 | exit M9 | Switch.cs:101:9:101:10 | exit M9 |
| pre | Switch.cs:103:19:103:25 | access to property Length | Switch.cs:103:19:103:25 | access to property Length |
| pre | Switch.cs:105:13:105:20 | case ...: | Switch.cs:101:9:101:10 | exit M9 |
| pre | Switch.cs:105:13:105:20 | case ...: | Switch.cs:105:13:105:20 | case ...: |
| pre | Switch.cs:105:13:105:20 | case ...: | Switch.cs:105:29:105:29 | 0 |
| pre | Switch.cs:105:13:105:20 | case ...: | Switch.cs:106:13:106:20 | case ...: |
| pre | Switch.cs:105:13:105:20 | case ...: | Switch.cs:106:29:106:29 | 1 |
| pre | Switch.cs:105:13:105:20 | case ...: | Switch.cs:108:17:108:17 | 1 |
| pre | Switch.cs:105:29:105:29 | 0 | Switch.cs:105:29:105:29 | 0 |
| pre | Switch.cs:106:13:106:20 | case ...: | Switch.cs:106:13:106:20 | case ...: |
| pre | Switch.cs:106:13:106:20 | case ...: | Switch.cs:106:29:106:29 | 1 |
| pre | Switch.cs:106:13:106:20 | case ...: | Switch.cs:108:17:108:17 | 1 |
| pre | Switch.cs:106:29:106:29 | 1 | Switch.cs:106:29:106:29 | 1 |
| pre | Switch.cs:108:17:108:17 | 1 | Switch.cs:108:17:108:17 | 1 |
| pre | Switch.cs:111:17:111:21 | enter Throw | Switch.cs:111:17:111:21 | enter Throw |
| pre | TypeAccesses.cs:3:10:3:10 | enter M | TypeAccesses.cs:3:10:3:10 | enter M |
| pre | TypeAccesses.cs:3:10:3:10 | enter M | TypeAccesses.cs:7:25:7:25 | ; |
| pre | TypeAccesses.cs:3:10:3:10 | enter M | TypeAccesses.cs:8:9:8:28 | ... ...; |
@@ -1531,37 +1675,65 @@
| pre | cflow.cs:37:17:37:22 | enter Switch | cflow.cs:44:13:44:19 | case ...: |
| pre | cflow.cs:37:17:37:22 | enter Switch | cflow.cs:45:17:45:39 | ...; |
| pre | cflow.cs:37:17:37:22 | enter Switch | cflow.cs:47:13:47:19 | case ...: |
| pre | cflow.cs:37:17:37:22 | enter Switch | cflow.cs:48:17:48:39 | ...; |
| pre | cflow.cs:37:17:37:22 | enter Switch | cflow.cs:51:9:59:9 | switch (...) {...} |
| pre | cflow.cs:37:17:37:22 | enter Switch | cflow.cs:54:17:54:48 | ...; |
| pre | cflow.cs:37:17:37:22 | enter Switch | cflow.cs:56:13:56:20 | default: |
| pre | cflow.cs:37:17:37:22 | enter Switch | cflow.cs:60:9:66:9 | switch (...) {...} |
| pre | cflow.cs:37:17:37:22 | enter Switch | cflow.cs:63:17:64:55 | if (...) ... |
| pre | cflow.cs:37:17:37:22 | enter Switch | cflow.cs:64:27:64:54 | object creation of type NullReferenceException |
| pre | cflow.cs:37:17:37:22 | enter Switch | cflow.cs:65:17:65:22 | break; |
| pre | cflow.cs:37:17:37:22 | enter Switch | cflow.cs:67:16:67:16 | access to parameter a |
| pre | cflow.cs:37:17:37:22 | exit Switch | cflow.cs:37:17:37:22 | exit Switch |
| pre | cflow.cs:42:17:42:39 | ...; | cflow.cs:42:17:42:39 | ...; |
| pre | cflow.cs:44:13:44:19 | case ...: | cflow.cs:37:17:37:22 | exit Switch |
| pre | cflow.cs:44:13:44:19 | case ...: | cflow.cs:44:13:44:19 | case ...: |
| pre | cflow.cs:44:13:44:19 | case ...: | cflow.cs:47:13:47:19 | case ...: |
| pre | cflow.cs:44:13:44:19 | case ...: | cflow.cs:48:17:48:39 | ...; |
| pre | cflow.cs:44:13:44:19 | case ...: | cflow.cs:51:9:59:9 | switch (...) {...} |
| pre | cflow.cs:44:13:44:19 | case ...: | cflow.cs:54:17:54:48 | ...; |
| pre | cflow.cs:44:13:44:19 | case ...: | cflow.cs:56:13:56:20 | default: |
| pre | cflow.cs:44:13:44:19 | case ...: | cflow.cs:60:9:66:9 | switch (...) {...} |
| pre | cflow.cs:44:13:44:19 | case ...: | cflow.cs:63:17:64:55 | if (...) ... |
| pre | cflow.cs:44:13:44:19 | case ...: | cflow.cs:64:27:64:54 | object creation of type NullReferenceException |
| pre | cflow.cs:44:13:44:19 | case ...: | cflow.cs:65:17:65:22 | break; |
| pre | cflow.cs:44:13:44:19 | case ...: | cflow.cs:67:16:67:16 | access to parameter a |
| pre | cflow.cs:45:17:45:39 | ...; | cflow.cs:45:17:45:39 | ...; |
| pre | cflow.cs:47:13:47:19 | case ...: | cflow.cs:37:17:37:22 | exit Switch |
| pre | cflow.cs:47:13:47:19 | case ...: | cflow.cs:47:13:47:19 | case ...: |
| pre | cflow.cs:47:13:47:19 | case ...: | cflow.cs:48:17:48:39 | ...; |
| pre | cflow.cs:47:13:47:19 | case ...: | cflow.cs:51:9:59:9 | switch (...) {...} |
| pre | cflow.cs:47:13:47:19 | case ...: | cflow.cs:54:17:54:48 | ...; |
| pre | cflow.cs:47:13:47:19 | case ...: | cflow.cs:56:13:56:20 | default: |
| pre | cflow.cs:47:13:47:19 | case ...: | cflow.cs:60:9:66:9 | switch (...) {...} |
| pre | cflow.cs:47:13:47:19 | case ...: | cflow.cs:63:17:64:55 | if (...) ... |
| pre | cflow.cs:47:13:47:19 | case ...: | cflow.cs:64:27:64:54 | object creation of type NullReferenceException |
| pre | cflow.cs:47:13:47:19 | case ...: | cflow.cs:65:17:65:22 | break; |
| pre | cflow.cs:47:13:47:19 | case ...: | cflow.cs:67:16:67:16 | access to parameter a |
| pre | cflow.cs:48:17:48:39 | ...; | cflow.cs:48:17:48:39 | ...; |
| pre | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:37:17:37:22 | exit Switch |
| pre | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:51:9:59:9 | switch (...) {...} |
| pre | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:54:17:54:48 | ...; |
| pre | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:56:13:56:20 | default: |
| pre | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:60:9:66:9 | switch (...) {...} |
| pre | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:63:17:64:55 | if (...) ... |
| pre | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:64:27:64:54 | object creation of type NullReferenceException |
| pre | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:65:17:65:22 | break; |
| pre | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:67:16:67:16 | access to parameter a |
| pre | cflow.cs:54:17:54:48 | ...; | cflow.cs:54:17:54:48 | ...; |
| pre | cflow.cs:56:13:56:20 | default: | cflow.cs:56:13:56:20 | default: |
| pre | cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:37:17:37:22 | exit Switch |
| pre | cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:60:9:66:9 | switch (...) {...} |
| pre | cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:63:17:64:55 | if (...) ... |
| pre | cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:64:27:64:54 | object creation of type NullReferenceException |
| pre | cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:65:17:65:22 | break; |
| pre | cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:67:16:67:16 | access to parameter a |
| pre | cflow.cs:63:17:64:55 | if (...) ... | cflow.cs:63:17:64:55 | if (...) ... |
| pre | cflow.cs:63:17:64:55 | if (...) ... | cflow.cs:64:27:64:54 | object creation of type NullReferenceException |
| pre | cflow.cs:63:17:64:55 | if (...) ... | cflow.cs:65:17:65:22 | break; |
| pre | cflow.cs:64:27:64:54 | object creation of type NullReferenceException | cflow.cs:64:27:64:54 | object creation of type NullReferenceException |
| pre | cflow.cs:65:17:65:22 | break; | cflow.cs:65:17:65:22 | break; |
| pre | cflow.cs:67:16:67:16 | access to parameter a | cflow.cs:67:16:67:16 | access to parameter a |
| pre | cflow.cs:70:18:70:18 | enter M | cflow.cs:70:18:70:18 | enter M |
| pre | cflow.cs:70:18:70:18 | enter M | cflow.cs:70:18:70:18 | exit M |
| pre | cflow.cs:70:18:70:18 | enter M | cflow.cs:73:13:73:19 | return ...; |

View File

@@ -56,6 +56,8 @@
| Switch.cs:24:32:24:43 | ... > ... | Switch.cs:25:17:25:37 | ...; | true |
| Switch.cs:24:48:24:55 | ... != ... | Switch.cs:25:17:25:37 | ...; | true |
| Switch.cs:50:30:50:38 | ... != ... | Switch.cs:51:17:51:22 | break; | true |
| Switch.cs:84:19:84:23 | ... > ... | Switch.cs:85:17:85:22 | break; | true |
| Switch.cs:84:19:84:23 | ... > ... | Switch.cs:86:22:86:25 | true | false |
| TypeAccesses.cs:7:13:7:22 | ... is ... | TypeAccesses.cs:7:25:7:25 | ; | true |
| VarDecls.cs:25:20:25:20 | access to parameter b | VarDecls.cs:25:24:25:24 | access to local variable x | true |
| VarDecls.cs:25:20:25:20 | access to parameter b | VarDecls.cs:25:28:25:28 | access to local variable y | false |

View File

@@ -17,6 +17,13 @@ class ConditionalAccess
}
string M6(string s1, string s2) => s1?.CommaJoinWith(s2);
void M7(int i)
{
var j = ((string)null)?.Length;
var s = ((int?)i)?.ToString();
s = ""?.CommaJoinWith(s);
}
}
static class Ext

View File

@@ -82,6 +82,8 @@
| 78 | 16 | ExitMethods.cs:78:16:78:25 | ... != ... | true | 78 | 29 | ExitMethods.cs:78:29:78:29 | 1 |
| 83 | 16 | ExitMethods.cs:83:16:83:30 | call to method Contains | false | 83 | 38 | ExitMethods.cs:83:38:83:38 | 1 |
| 83 | 16 | ExitMethods.cs:83:16:83:30 | call to method Contains | true | 83 | 34 | ExitMethods.cs:83:34:83:34 | 0 |
| 84 | 19 | Switch.cs:84:19:84:23 | ... > ... | false | 86 | 22 | Switch.cs:86:22:86:25 | true |
| 84 | 19 | Switch.cs:84:19:84:23 | ... > ... | true | 85 | 17 | Switch.cs:85:17:85:22 | break; |
| 86 | 13 | cflow.cs:86:13:86:21 | ... != ... | false | 84 | 18 | cflow.cs:84:18:84:19 | exit M2 |
| 86 | 13 | cflow.cs:86:13:86:21 | ... != ... | true | 86 | 26 | cflow.cs:86:26:86:26 | access to parameter s |
| 86 | 26 | cflow.cs:86:26:86:37 | ... > ... | false | 84 | 18 | cflow.cs:84:18:84:19 | exit M2 |

View File

@@ -218,12 +218,31 @@
| post | ConditionalAccess.cs:19:12:19:13 | exit M6 | ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith |
| post | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:12:19:13 | enter M6 |
| post | ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 |
| post | ConditionalAccess.cs:24:26:24:38 | exit CommaJoinWith | ConditionalAccess.cs:24:70:24:83 | ... + ... |
| post | ConditionalAccess.cs:24:70:24:71 | access to parameter s1 | ConditionalAccess.cs:24:26:24:38 | enter CommaJoinWith |
| post | ConditionalAccess.cs:24:70:24:78 | ... + ... | ConditionalAccess.cs:24:75:24:78 | ", " |
| post | ConditionalAccess.cs:24:70:24:83 | ... + ... | ConditionalAccess.cs:24:82:24:83 | access to parameter s2 |
| post | ConditionalAccess.cs:24:75:24:78 | ", " | ConditionalAccess.cs:24:70:24:71 | access to parameter s1 |
| post | ConditionalAccess.cs:24:82:24:83 | access to parameter s2 | ConditionalAccess.cs:24:70:24:78 | ... + ... |
| post | ConditionalAccess.cs:21:10:21:11 | exit M7 | ConditionalAccess.cs:25:9:25:32 | ... = ... |
| post | ConditionalAccess.cs:22:5:26:5 | {...} | ConditionalAccess.cs:21:10:21:11 | enter M7 |
| post | ConditionalAccess.cs:23:9:23:39 | ... ...; | ConditionalAccess.cs:22:5:26:5 | {...} |
| post | ConditionalAccess.cs:23:13:23:13 | access to local variable j | ConditionalAccess.cs:23:9:23:39 | ... ...; |
| post | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:23:18:23:29 | (...) ... |
| post | ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:26:23:29 | null |
| post | ConditionalAccess.cs:23:26:23:29 | null | ConditionalAccess.cs:23:13:23:13 | access to local variable j |
| post | ConditionalAccess.cs:24:9:24:38 | ... ...; | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... |
| post | ConditionalAccess.cs:24:13:24:13 | access to local variable s | ConditionalAccess.cs:24:9:24:38 | ... ...; |
| post | ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
| post | ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:24:24:24 | access to parameter i |
| post | ConditionalAccess.cs:24:24:24:24 | access to parameter i | ConditionalAccess.cs:24:13:24:13 | access to local variable s |
| post | ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:18:24:24 | (...) ... |
| post | ConditionalAccess.cs:25:9:25:9 | access to local variable s | ConditionalAccess.cs:25:9:25:33 | ...; |
| post | ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith |
| post | ConditionalAccess.cs:25:9:25:33 | ...; | ConditionalAccess.cs:24:13:24:37 | String s = ... |
| post | ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:9:25:9 | access to local variable s |
| post | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
| post | ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:13:25:14 | "" |
| post | ConditionalAccess.cs:31:26:31:38 | exit CommaJoinWith | ConditionalAccess.cs:31:70:31:83 | ... + ... |
| post | ConditionalAccess.cs:31:70:31:71 | access to parameter s1 | ConditionalAccess.cs:31:26:31:38 | enter CommaJoinWith |
| post | ConditionalAccess.cs:31:70:31:78 | ... + ... | ConditionalAccess.cs:31:75:31:78 | ", " |
| post | ConditionalAccess.cs:31:70:31:83 | ... + ... | ConditionalAccess.cs:31:82:31:83 | access to parameter s2 |
| post | ConditionalAccess.cs:31:75:31:78 | ", " | ConditionalAccess.cs:31:70:31:71 | access to parameter s1 |
| post | ConditionalAccess.cs:31:82:31:83 | access to parameter s2 | ConditionalAccess.cs:31:70:31:78 | ... + ... |
| post | ExitMethods.cs:6:10:6:11 | exit M1 | ExitMethods.cs:9:9:9:15 | return ...; |
| post | ExitMethods.cs:7:5:10:5 | {...} | ExitMethods.cs:6:10:6:11 | enter M1 |
| post | ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | ExitMethods.cs:8:20:8:23 | true |
@@ -342,17 +361,25 @@
| post | Extensions.cs:25:9:25:34 | ...; | Extensions.cs:24:9:24:45 | call to method ToBool |
| post | Extensions.cs:25:23:25:32 | access to method Parse | Extensions.cs:25:9:25:14 | "true" |
| post | Extensions.cs:25:23:25:32 | delegate creation of type Func<String,Boolean> | Extensions.cs:25:23:25:32 | access to method Parse |
| post | Foreach.cs:3:10:3:11 | exit M1 | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... |
| post | Foreach.cs:4:5:7:5 | {...} | Foreach.cs:3:10:3:11 | enter M1 |
| post | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | Foreach.cs:5:29:5:32 | access to parameter args |
| post | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | Foreach.cs:6:13:6:13 | ; |
| post | Foreach.cs:5:29:5:32 | access to parameter args | Foreach.cs:4:5:7:5 | {...} |
| post | Foreach.cs:6:13:6:13 | ; | Foreach.cs:5:22:5:24 | String arg |
| post | Foreach.cs:9:10:9:11 | exit M2 | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... |
| post | Foreach.cs:10:5:13:5 | {...} | Foreach.cs:9:10:9:11 | enter M2 |
| post | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | Foreach.cs:11:27:11:30 | access to parameter args |
| post | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | Foreach.cs:12:13:12:13 | ; |
| post | Foreach.cs:11:27:11:30 | access to parameter args | Foreach.cs:10:5:13:5 | {...} |
| post | Foreach.cs:6:10:6:11 | exit M1 | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... |
| post | Foreach.cs:7:5:10:5 | {...} | Foreach.cs:6:10:6:11 | enter M1 |
| post | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:29:8:32 | access to parameter args |
| post | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:9:13:9:13 | ; |
| post | Foreach.cs:8:29:8:32 | access to parameter args | Foreach.cs:7:5:10:5 | {...} |
| post | Foreach.cs:9:13:9:13 | ; | Foreach.cs:8:22:8:24 | String arg |
| post | Foreach.cs:12:10:12:11 | exit M2 | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... |
| post | Foreach.cs:13:5:16:5 | {...} | Foreach.cs:12:10:12:11 | enter M2 |
| post | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:14:27:14:30 | access to parameter args |
| post | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:15:13:15:13 | ; |
| post | Foreach.cs:14:27:14:30 | access to parameter args | Foreach.cs:13:5:16:5 | {...} |
| post | Foreach.cs:18:10:18:11 | exit M3 | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... |
| post | Foreach.cs:19:5:22:5 | {...} | Foreach.cs:18:10:18:11 | enter M3 |
| post | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:29:20:38 | call to method ToArray |
| post | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:43:20:68 | call to method Empty |
| post | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:21:11:21:11 | ; |
| post | Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:20:27:20:68 | ... ?? ... |
| post | Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:19:5:22:5 | {...} |
| post | Foreach.cs:21:11:21:11 | ; | Foreach.cs:20:22:20:22 | String x |
| post | Initializers.cs:6:5:6:16 | exit Initializers | Initializers.cs:6:28:6:30 | {...} |
| post | Initializers.cs:6:28:6:30 | {...} | Initializers.cs:6:5:6:16 | enter Initializers |
| post | Initializers.cs:8:10:8:10 | exit M | Initializers.cs:11:13:11:63 | Initializers[] iz = ... |
@@ -396,7 +423,6 @@
| post | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:41:9:41 | access to parameter s |
| post | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:45:9:45 | access to parameter s |
| post | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:51:9:52 | "" |
| post | NullCoalescing.cs:9:12:9:13 | exit M4 | NullCoalescing.cs:9:57:9:58 | "" |
| post | NullCoalescing.cs:9:36:9:58 | ... ?? ... | NullCoalescing.cs:9:12:9:13 | enter M4 |
| post | NullCoalescing.cs:9:37:9:37 | access to parameter b | NullCoalescing.cs:9:37:9:45 | ... ? ... : ... |
| post | NullCoalescing.cs:9:37:9:45 | ... ? ... : ... | NullCoalescing.cs:9:36:9:58 | ... ?? ... |
@@ -407,6 +433,26 @@
| post | NullCoalescing.cs:11:44:11:45 | access to parameter b1 | NullCoalescing.cs:11:44:11:59 | ... ?? ... |
| post | NullCoalescing.cs:11:44:11:59 | ... ?? ... | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... |
| post | NullCoalescing.cs:11:51:11:52 | access to parameter b2 | NullCoalescing.cs:11:51:11:58 | ... && ... |
| post | NullCoalescing.cs:13:10:13:11 | exit M6 | NullCoalescing.cs:17:9:17:24 | ... = ... |
| post | NullCoalescing.cs:14:5:18:5 | {...} | NullCoalescing.cs:13:10:13:11 | enter M6 |
| post | NullCoalescing.cs:15:9:15:32 | ... ...; | NullCoalescing.cs:14:5:18:5 | {...} |
| post | NullCoalescing.cs:15:13:15:13 | access to local variable j | NullCoalescing.cs:15:9:15:32 | ... ...; |
| post | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:15:31:15:31 | 0 |
| post | NullCoalescing.cs:15:17:15:26 | (...) ... | NullCoalescing.cs:15:23:15:26 | null |
| post | NullCoalescing.cs:15:17:15:31 | ... ?? ... | NullCoalescing.cs:15:13:15:13 | access to local variable j |
| post | NullCoalescing.cs:15:23:15:26 | null | NullCoalescing.cs:15:17:15:31 | ... ?? ... |
| post | NullCoalescing.cs:15:31:15:31 | 0 | NullCoalescing.cs:15:17:15:26 | (...) ... |
| post | NullCoalescing.cs:16:9:16:26 | ... ...; | NullCoalescing.cs:15:13:15:31 | Int32 j = ... |
| post | NullCoalescing.cs:16:13:16:13 | access to local variable s | NullCoalescing.cs:16:9:16:26 | ... ...; |
| post | NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:16:17:16:18 | "" |
| post | NullCoalescing.cs:16:17:16:18 | "" | NullCoalescing.cs:16:17:16:25 | ... ?? ... |
| post | NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:16:13:16:13 | access to local variable s |
| post | NullCoalescing.cs:17:9:17:9 | access to local variable j | NullCoalescing.cs:17:9:17:25 | ...; |
| post | NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:17:13:17:19 | (...) ... |
| post | NullCoalescing.cs:17:9:17:25 | ...; | NullCoalescing.cs:16:13:16:25 | String s = ... |
| post | NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:19:17:19 | access to parameter i |
| post | NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:9:17:9 | access to local variable j |
| post | NullCoalescing.cs:17:19:17:19 | access to parameter i | NullCoalescing.cs:17:13:17:24 | ... ?? ... |
| post | Patterns.cs:5:10:5:13 | exit Test | Patterns.cs:40:17:40:17 | access to local variable o |
| post | Patterns.cs:6:5:43:5 | {...} | Patterns.cs:5:10:5:13 | enter Test |
| post | Patterns.cs:7:9:7:24 | ... ...; | Patterns.cs:6:5:43:5 | {...} |
@@ -609,9 +655,69 @@
| post | Switch.cs:50:18:50:21 | access to type Boolean | Switch.cs:50:13:50:39 | case Boolean: |
| post | Switch.cs:50:30:50:38 | ... != ... | Switch.cs:50:35:50:38 | null |
| post | Switch.cs:50:35:50:38 | null | Switch.cs:50:30:50:30 | access to parameter o |
| post | Switch.cs:55:17:55:21 | exit Throw | Switch.cs:55:28:55:48 | throw ... |
| post | Switch.cs:55:28:55:48 | throw ... | Switch.cs:55:34:55:48 | object creation of type Exception |
| post | Switch.cs:55:34:55:48 | object creation of type Exception | Switch.cs:55:17:55:21 | enter Throw |
| post | Switch.cs:55:10:55:11 | exit M5 | Switch.cs:62:15:62:20 | break; |
| post | Switch.cs:56:5:64:5 | {...} | Switch.cs:55:10:55:11 | enter M5 |
| post | Switch.cs:57:9:63:9 | switch (...) {...} | Switch.cs:56:5:64:5 | {...} |
| post | Switch.cs:57:17:57:17 | 1 | Switch.cs:57:9:63:9 | switch (...) {...} |
| post | Switch.cs:57:17:57:21 | ... + ... | Switch.cs:57:21:57:21 | 2 |
| post | Switch.cs:57:21:57:21 | 2 | Switch.cs:57:17:57:17 | 1 |
| post | Switch.cs:59:13:59:20 | case ...: | Switch.cs:57:17:57:21 | ... + ... |
| post | Switch.cs:59:18:59:18 | 2 | Switch.cs:59:13:59:20 | case ...: |
| post | Switch.cs:61:13:61:20 | case ...: | Switch.cs:59:18:59:18 | 2 |
| post | Switch.cs:61:18:61:18 | 3 | Switch.cs:61:13:61:20 | case ...: |
| post | Switch.cs:62:15:62:20 | break; | Switch.cs:61:18:61:18 | 3 |
| post | Switch.cs:66:10:66:11 | exit M6 | Switch.cs:72:18:72:19 | "" |
| post | Switch.cs:66:10:66:11 | exit M6 | Switch.cs:73:15:73:20 | break; |
| post | Switch.cs:67:5:75:5 | {...} | Switch.cs:66:10:66:11 | enter M6 |
| post | Switch.cs:68:9:74:9 | switch (...) {...} | Switch.cs:67:5:75:5 | {...} |
| post | Switch.cs:68:17:68:25 | (...) ... | Switch.cs:68:25:68:25 | access to parameter s |
| post | Switch.cs:68:25:68:25 | access to parameter s | Switch.cs:68:9:74:9 | switch (...) {...} |
| post | Switch.cs:70:13:70:24 | case Int32: | Switch.cs:68:17:68:25 | (...) ... |
| post | Switch.cs:70:18:70:20 | access to type Int32 | Switch.cs:70:13:70:24 | case Int32: |
| post | Switch.cs:72:13:72:21 | case ...: | Switch.cs:70:18:70:20 | access to type Int32 |
| post | Switch.cs:72:18:72:19 | "" | Switch.cs:72:13:72:21 | case ...: |
| post | Switch.cs:77:10:77:11 | exit M7 | Switch.cs:82:15:82:26 | return ...; |
| post | Switch.cs:77:10:77:11 | exit M7 | Switch.cs:86:15:86:26 | return ...; |
| post | Switch.cs:77:10:77:11 | exit M7 | Switch.cs:88:9:88:21 | return ...; |
| post | Switch.cs:78:5:89:5 | {...} | Switch.cs:77:10:77:11 | enter M7 |
| post | Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:78:5:89:5 | {...} |
| post | Switch.cs:79:17:79:17 | access to parameter i | Switch.cs:79:9:87:9 | switch (...) {...} |
| post | Switch.cs:81:13:81:20 | case ...: | Switch.cs:79:17:79:17 | access to parameter i |
| post | Switch.cs:81:18:81:18 | 1 | Switch.cs:81:13:81:20 | case ...: |
| post | Switch.cs:82:15:82:26 | return ...; | Switch.cs:82:22:82:25 | true |
| post | Switch.cs:83:18:83:18 | 2 | Switch.cs:83:13:83:20 | case ...: |
| post | Switch.cs:84:19:84:19 | access to parameter j | Switch.cs:84:15:85:22 | if (...) ... |
| post | Switch.cs:84:19:84:23 | ... > ... | Switch.cs:84:23:84:23 | 2 |
| post | Switch.cs:84:23:84:23 | 2 | Switch.cs:84:19:84:19 | access to parameter j |
| post | Switch.cs:86:15:86:26 | return ...; | Switch.cs:86:22:86:25 | true |
| post | Switch.cs:88:9:88:21 | return ...; | Switch.cs:88:16:88:20 | false |
| post | Switch.cs:88:16:88:20 | false | Switch.cs:85:17:85:22 | break; |
| post | Switch.cs:91:10:91:11 | exit M8 | Switch.cs:96:15:96:26 | return ...; |
| post | Switch.cs:91:10:91:11 | exit M8 | Switch.cs:98:9:98:21 | return ...; |
| post | Switch.cs:92:5:99:5 | {...} | Switch.cs:91:10:91:11 | enter M8 |
| post | Switch.cs:93:9:97:9 | switch (...) {...} | Switch.cs:92:5:99:5 | {...} |
| post | Switch.cs:93:17:93:17 | access to parameter o | Switch.cs:93:9:97:9 | switch (...) {...} |
| post | Switch.cs:95:13:95:24 | case Int32: | Switch.cs:93:17:93:17 | access to parameter o |
| post | Switch.cs:95:18:95:20 | access to type Int32 | Switch.cs:95:13:95:24 | case Int32: |
| post | Switch.cs:96:15:96:26 | return ...; | Switch.cs:96:22:96:25 | true |
| post | Switch.cs:98:9:98:21 | return ...; | Switch.cs:98:16:98:20 | false |
| post | Switch.cs:101:9:101:10 | exit M9 | Switch.cs:105:22:105:30 | return ...; |
| post | Switch.cs:101:9:101:10 | exit M9 | Switch.cs:106:22:106:30 | return ...; |
| post | Switch.cs:101:9:101:10 | exit M9 | Switch.cs:108:9:108:18 | return ...; |
| post | Switch.cs:102:5:109:5 | {...} | Switch.cs:101:9:101:10 | enter M9 |
| post | Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:102:5:109:5 | {...} |
| post | Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:103:9:107:9 | switch (...) {...} |
| post | Switch.cs:105:13:105:20 | case ...: | Switch.cs:103:17:103:17 | access to parameter s |
| post | Switch.cs:105:13:105:20 | case ...: | Switch.cs:103:19:103:25 | access to property Length |
| post | Switch.cs:105:18:105:18 | 0 | Switch.cs:105:13:105:20 | case ...: |
| post | Switch.cs:105:22:105:30 | return ...; | Switch.cs:105:29:105:29 | 0 |
| post | Switch.cs:106:18:106:18 | 1 | Switch.cs:106:13:106:20 | case ...: |
| post | Switch.cs:106:22:106:30 | return ...; | Switch.cs:106:29:106:29 | 1 |
| post | Switch.cs:108:9:108:18 | return ...; | Switch.cs:108:16:108:17 | -... |
| post | Switch.cs:108:16:108:17 | -... | Switch.cs:108:17:108:17 | 1 |
| post | Switch.cs:111:17:111:21 | exit Throw | Switch.cs:111:28:111:48 | throw ... |
| post | Switch.cs:111:28:111:48 | throw ... | Switch.cs:111:34:111:48 | object creation of type Exception |
| post | Switch.cs:111:34:111:48 | object creation of type Exception | Switch.cs:111:17:111:21 | enter Throw |
| post | TypeAccesses.cs:3:10:3:10 | exit M | TypeAccesses.cs:8:13:8:27 | Type t = ... |
| post | TypeAccesses.cs:4:5:9:5 | {...} | TypeAccesses.cs:3:10:3:10 | enter M |
| post | TypeAccesses.cs:5:9:5:26 | ... ...; | TypeAccesses.cs:4:5:9:5 | {...} |
@@ -784,9 +890,9 @@
| post | cflow.cs:47:13:47:19 | case ...: | cflow.cs:44:18:44:18 | 2 |
| post | cflow.cs:47:18:47:18 | 3 | cflow.cs:47:13:47:19 | case ...: |
| post | cflow.cs:48:17:48:38 | call to method WriteLine | cflow.cs:48:35:48:37 | "3" |
| post | cflow.cs:48:17:48:39 | ...; | cflow.cs:47:18:47:18 | 3 |
| post | cflow.cs:48:35:48:37 | "3" | cflow.cs:48:17:48:39 | ...; |
| post | cflow.cs:49:17:49:22 | break; | cflow.cs:48:17:48:38 | call to method WriteLine |
| post | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:47:18:47:18 | 3 |
| post | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:49:17:49:22 | break; |
| post | cflow.cs:51:17:51:17 | access to parameter a | cflow.cs:51:9:59:9 | switch (...) {...} |
| post | cflow.cs:53:13:53:20 | case ...: | cflow.cs:51:17:51:17 | access to parameter a |
@@ -805,7 +911,6 @@
| post | cflow.cs:60:27:60:31 | this access | cflow.cs:60:9:66:9 | switch (...) {...} |
| post | cflow.cs:62:13:62:19 | case ...: | cflow.cs:60:17:60:32 | call to method Parse |
| post | cflow.cs:62:18:62:18 | 0 | cflow.cs:62:13:62:19 | case ...: |
| post | cflow.cs:63:17:64:55 | if (...) ... | cflow.cs:62:18:62:18 | 0 |
| post | cflow.cs:63:21:63:34 | !... | cflow.cs:63:17:64:55 | if (...) ... |
| post | cflow.cs:63:23:63:27 | access to field Field | cflow.cs:63:23:63:27 | this access |
| post | cflow.cs:63:23:63:27 | this access | cflow.cs:63:21:63:34 | !... |
@@ -1806,12 +1911,31 @@
| pre | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:12:19:13 | exit M6 |
| pre | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 |
| pre | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith |
| pre | ConditionalAccess.cs:24:26:24:38 | enter CommaJoinWith | ConditionalAccess.cs:24:70:24:71 | access to parameter s1 |
| pre | ConditionalAccess.cs:24:70:24:71 | access to parameter s1 | ConditionalAccess.cs:24:75:24:78 | ", " |
| pre | ConditionalAccess.cs:24:70:24:78 | ... + ... | ConditionalAccess.cs:24:82:24:83 | access to parameter s2 |
| pre | ConditionalAccess.cs:24:70:24:83 | ... + ... | ConditionalAccess.cs:24:26:24:38 | exit CommaJoinWith |
| pre | ConditionalAccess.cs:24:75:24:78 | ", " | ConditionalAccess.cs:24:70:24:78 | ... + ... |
| pre | ConditionalAccess.cs:24:82:24:83 | access to parameter s2 | ConditionalAccess.cs:24:70:24:83 | ... + ... |
| pre | ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:22:5:26:5 | {...} |
| pre | ConditionalAccess.cs:22:5:26:5 | {...} | ConditionalAccess.cs:23:9:23:39 | ... ...; |
| pre | ConditionalAccess.cs:23:9:23:39 | ... ...; | ConditionalAccess.cs:23:13:23:13 | access to local variable j |
| pre | ConditionalAccess.cs:23:13:23:13 | access to local variable j | ConditionalAccess.cs:23:26:23:29 | null |
| pre | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:24:9:24:38 | ... ...; |
| pre | ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... |
| pre | ConditionalAccess.cs:23:26:23:29 | null | ConditionalAccess.cs:23:18:23:29 | (...) ... |
| pre | ConditionalAccess.cs:24:9:24:38 | ... ...; | ConditionalAccess.cs:24:13:24:13 | access to local variable s |
| pre | ConditionalAccess.cs:24:13:24:13 | access to local variable s | ConditionalAccess.cs:24:24:24:24 | access to parameter i |
| pre | ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:25:9:25:33 | ...; |
| pre | ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:27:24:37 | call to method ToString |
| pre | ConditionalAccess.cs:24:24:24:24 | access to parameter i | ConditionalAccess.cs:24:18:24:24 | (...) ... |
| pre | ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:13:24:37 | String s = ... |
| pre | ConditionalAccess.cs:25:9:25:9 | access to local variable s | ConditionalAccess.cs:25:13:25:14 | "" |
| pre | ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:21:10:21:11 | exit M7 |
| pre | ConditionalAccess.cs:25:9:25:33 | ...; | ConditionalAccess.cs:25:9:25:9 | access to local variable s |
| pre | ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:31:25:31 | access to local variable s |
| pre | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:9:25:32 | ... = ... |
| pre | ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith |
| pre | ConditionalAccess.cs:31:26:31:38 | enter CommaJoinWith | ConditionalAccess.cs:31:70:31:71 | access to parameter s1 |
| pre | ConditionalAccess.cs:31:70:31:71 | access to parameter s1 | ConditionalAccess.cs:31:75:31:78 | ", " |
| pre | ConditionalAccess.cs:31:70:31:78 | ... + ... | ConditionalAccess.cs:31:82:31:83 | access to parameter s2 |
| pre | ConditionalAccess.cs:31:70:31:83 | ... + ... | ConditionalAccess.cs:31:26:31:38 | exit CommaJoinWith |
| pre | ConditionalAccess.cs:31:75:31:78 | ", " | ConditionalAccess.cs:31:70:31:78 | ... + ... |
| pre | ConditionalAccess.cs:31:82:31:83 | access to parameter s2 | ConditionalAccess.cs:31:70:31:83 | ... + ... |
| pre | ExitMethods.cs:6:10:6:11 | enter M1 | ExitMethods.cs:7:5:10:5 | {...} |
| pre | ExitMethods.cs:7:5:10:5 | {...} | ExitMethods.cs:8:9:8:25 | ...; |
| pre | ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | ExitMethods.cs:9:9:9:15 | return ...; |
@@ -1930,17 +2054,25 @@
| pre | Extensions.cs:25:9:25:34 | ...; | Extensions.cs:25:9:25:14 | "true" |
| pre | Extensions.cs:25:23:25:32 | access to method Parse | Extensions.cs:25:23:25:32 | delegate creation of type Func<String,Boolean> |
| pre | Extensions.cs:25:23:25:32 | delegate creation of type Func<String,Boolean> | Extensions.cs:25:9:25:33 | call to method ToBool |
| pre | Foreach.cs:3:10:3:11 | enter M1 | Foreach.cs:4:5:7:5 | {...} |
| pre | Foreach.cs:4:5:7:5 | {...} | Foreach.cs:5:29:5:32 | access to parameter args |
| pre | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | Foreach.cs:3:10:3:11 | exit M1 |
| pre | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | Foreach.cs:5:22:5:24 | String arg |
| pre | Foreach.cs:5:22:5:24 | String arg | Foreach.cs:6:13:6:13 | ; |
| pre | Foreach.cs:5:29:5:32 | access to parameter args | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... |
| pre | Foreach.cs:9:10:9:11 | enter M2 | Foreach.cs:10:5:13:5 | {...} |
| pre | Foreach.cs:10:5:13:5 | {...} | Foreach.cs:11:27:11:30 | access to parameter args |
| pre | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | Foreach.cs:9:10:9:11 | exit M2 |
| pre | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | Foreach.cs:12:13:12:13 | ; |
| pre | Foreach.cs:11:27:11:30 | access to parameter args | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... |
| pre | Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:7:5:10:5 | {...} |
| pre | Foreach.cs:7:5:10:5 | {...} | Foreach.cs:8:29:8:32 | access to parameter args |
| pre | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:6:10:6:11 | exit M1 |
| pre | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:22:8:24 | String arg |
| pre | Foreach.cs:8:22:8:24 | String arg | Foreach.cs:9:13:9:13 | ; |
| pre | Foreach.cs:8:29:8:32 | access to parameter args | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... |
| pre | Foreach.cs:12:10:12:11 | enter M2 | Foreach.cs:13:5:16:5 | {...} |
| pre | Foreach.cs:13:5:16:5 | {...} | Foreach.cs:14:27:14:30 | access to parameter args |
| pre | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:12:10:12:11 | exit M2 |
| pre | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:15:13:15:13 | ; |
| pre | Foreach.cs:14:27:14:30 | access to parameter args | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... |
| pre | Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:19:5:22:5 | {...} |
| pre | Foreach.cs:19:5:22:5 | {...} | Foreach.cs:20:27:20:68 | ... ?? ... |
| pre | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:18:10:18:11 | exit M3 |
| pre | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:22:20:22 | String x |
| pre | Foreach.cs:20:22:20:22 | String x | Foreach.cs:21:11:21:11 | ; |
| pre | Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:20:29:20:38 | call to method ToArray |
| pre | Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:20:43:20:68 | call to method Empty |
| pre | Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:27:20:27 | access to parameter e |
| pre | Initializers.cs:6:5:6:16 | enter Initializers | Initializers.cs:6:28:6:30 | {...} |
| pre | Initializers.cs:6:28:6:30 | {...} | Initializers.cs:6:5:6:16 | exit Initializers |
| pre | Initializers.cs:8:10:8:10 | enter M | Initializers.cs:9:5:12:5 | {...} |
@@ -1986,7 +2118,6 @@
| pre | NullCoalescing.cs:9:37:9:37 | access to parameter b | NullCoalescing.cs:9:41:9:41 | access to parameter s |
| pre | NullCoalescing.cs:9:37:9:37 | access to parameter b | NullCoalescing.cs:9:45:9:45 | access to parameter s |
| pre | NullCoalescing.cs:9:37:9:45 | ... ? ... : ... | NullCoalescing.cs:9:37:9:37 | access to parameter b |
| pre | NullCoalescing.cs:9:51:9:52 | "" | NullCoalescing.cs:9:57:9:58 | "" |
| pre | NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:52 | "" |
| pre | NullCoalescing.cs:11:9:11:10 | enter M5 | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... |
| pre | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | NullCoalescing.cs:11:44:11:59 | ... ?? ... |
@@ -1996,6 +2127,26 @@
| pre | NullCoalescing.cs:11:44:11:59 | ... ?? ... | NullCoalescing.cs:11:44:11:45 | access to parameter b1 |
| pre | NullCoalescing.cs:11:51:11:52 | access to parameter b2 | NullCoalescing.cs:11:57:11:58 | access to parameter b3 |
| pre | NullCoalescing.cs:11:51:11:58 | ... && ... | NullCoalescing.cs:11:51:11:52 | access to parameter b2 |
| pre | NullCoalescing.cs:13:10:13:11 | enter M6 | NullCoalescing.cs:14:5:18:5 | {...} |
| pre | NullCoalescing.cs:14:5:18:5 | {...} | NullCoalescing.cs:15:9:15:32 | ... ...; |
| pre | NullCoalescing.cs:15:9:15:32 | ... ...; | NullCoalescing.cs:15:13:15:13 | access to local variable j |
| pre | NullCoalescing.cs:15:13:15:13 | access to local variable j | NullCoalescing.cs:15:17:15:31 | ... ?? ... |
| pre | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:16:9:16:26 | ... ...; |
| pre | NullCoalescing.cs:15:17:15:26 | (...) ... | NullCoalescing.cs:15:31:15:31 | 0 |
| pre | NullCoalescing.cs:15:17:15:31 | ... ?? ... | NullCoalescing.cs:15:23:15:26 | null |
| pre | NullCoalescing.cs:15:23:15:26 | null | NullCoalescing.cs:15:17:15:26 | (...) ... |
| pre | NullCoalescing.cs:15:31:15:31 | 0 | NullCoalescing.cs:15:13:15:31 | Int32 j = ... |
| pre | NullCoalescing.cs:16:9:16:26 | ... ...; | NullCoalescing.cs:16:13:16:13 | access to local variable s |
| pre | NullCoalescing.cs:16:13:16:13 | access to local variable s | NullCoalescing.cs:16:17:16:25 | ... ?? ... |
| pre | NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:17:9:17:25 | ...; |
| pre | NullCoalescing.cs:16:17:16:18 | "" | NullCoalescing.cs:16:13:16:25 | String s = ... |
| pre | NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:16:17:16:18 | "" |
| pre | NullCoalescing.cs:17:9:17:9 | access to local variable j | NullCoalescing.cs:17:13:17:24 | ... ?? ... |
| pre | NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:13:10:13:11 | exit M6 |
| pre | NullCoalescing.cs:17:9:17:25 | ...; | NullCoalescing.cs:17:9:17:9 | access to local variable j |
| pre | NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:9:17:24 | ... = ... |
| pre | NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:19:17:19 | access to parameter i |
| pre | NullCoalescing.cs:17:19:17:19 | access to parameter i | NullCoalescing.cs:17:13:17:19 | (...) ... |
| pre | Patterns.cs:5:10:5:13 | enter Test | Patterns.cs:6:5:43:5 | {...} |
| pre | Patterns.cs:6:5:43:5 | {...} | Patterns.cs:7:9:7:24 | ... ...; |
| pre | Patterns.cs:7:9:7:24 | ... ...; | Patterns.cs:7:16:7:16 | access to local variable o |
@@ -2211,9 +2362,72 @@
| pre | Switch.cs:50:30:50:30 | access to parameter o | Switch.cs:50:35:50:38 | null |
| pre | Switch.cs:50:30:50:38 | ... != ... | Switch.cs:51:17:51:22 | break; |
| pre | Switch.cs:50:35:50:38 | null | Switch.cs:50:30:50:38 | ... != ... |
| pre | Switch.cs:55:17:55:21 | enter Throw | Switch.cs:55:34:55:48 | object creation of type Exception |
| pre | Switch.cs:55:28:55:48 | throw ... | Switch.cs:55:17:55:21 | exit Throw |
| pre | Switch.cs:55:34:55:48 | object creation of type Exception | Switch.cs:55:28:55:48 | throw ... |
| pre | Switch.cs:55:10:55:11 | enter M5 | Switch.cs:56:5:64:5 | {...} |
| pre | Switch.cs:56:5:64:5 | {...} | Switch.cs:57:9:63:9 | switch (...) {...} |
| pre | Switch.cs:57:9:63:9 | switch (...) {...} | Switch.cs:57:17:57:17 | 1 |
| pre | Switch.cs:57:17:57:17 | 1 | Switch.cs:57:21:57:21 | 2 |
| pre | Switch.cs:57:17:57:21 | ... + ... | Switch.cs:59:13:59:20 | case ...: |
| pre | Switch.cs:57:21:57:21 | 2 | Switch.cs:57:17:57:21 | ... + ... |
| pre | Switch.cs:59:13:59:20 | case ...: | Switch.cs:59:18:59:18 | 2 |
| pre | Switch.cs:59:18:59:18 | 2 | Switch.cs:61:13:61:20 | case ...: |
| pre | Switch.cs:61:13:61:20 | case ...: | Switch.cs:61:18:61:18 | 3 |
| pre | Switch.cs:61:18:61:18 | 3 | Switch.cs:62:15:62:20 | break; |
| pre | Switch.cs:62:15:62:20 | break; | Switch.cs:55:10:55:11 | exit M5 |
| pre | Switch.cs:66:10:66:11 | enter M6 | Switch.cs:67:5:75:5 | {...} |
| pre | Switch.cs:67:5:75:5 | {...} | Switch.cs:68:9:74:9 | switch (...) {...} |
| pre | Switch.cs:68:9:74:9 | switch (...) {...} | Switch.cs:68:25:68:25 | access to parameter s |
| pre | Switch.cs:68:17:68:25 | (...) ... | Switch.cs:70:13:70:24 | case Int32: |
| pre | Switch.cs:68:25:68:25 | access to parameter s | Switch.cs:68:17:68:25 | (...) ... |
| pre | Switch.cs:70:13:70:24 | case Int32: | Switch.cs:70:18:70:20 | access to type Int32 |
| pre | Switch.cs:70:18:70:20 | access to type Int32 | Switch.cs:72:13:72:21 | case ...: |
| pre | Switch.cs:72:13:72:21 | case ...: | Switch.cs:72:18:72:19 | "" |
| pre | Switch.cs:72:18:72:19 | "" | Switch.cs:66:10:66:11 | exit M6 |
| pre | Switch.cs:72:18:72:19 | "" | Switch.cs:73:15:73:20 | break; |
| pre | Switch.cs:77:10:77:11 | enter M7 | Switch.cs:78:5:89:5 | {...} |
| pre | Switch.cs:78:5:89:5 | {...} | Switch.cs:79:9:87:9 | switch (...) {...} |
| pre | Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:79:17:79:17 | access to parameter i |
| pre | Switch.cs:79:17:79:17 | access to parameter i | Switch.cs:81:13:81:20 | case ...: |
| pre | Switch.cs:81:13:81:20 | case ...: | Switch.cs:81:18:81:18 | 1 |
| pre | Switch.cs:81:18:81:18 | 1 | Switch.cs:82:22:82:25 | true |
| pre | Switch.cs:81:18:81:18 | 1 | Switch.cs:83:13:83:20 | case ...: |
| pre | Switch.cs:82:22:82:25 | true | Switch.cs:82:15:82:26 | return ...; |
| pre | Switch.cs:83:13:83:20 | case ...: | Switch.cs:83:18:83:18 | 2 |
| pre | Switch.cs:83:18:83:18 | 2 | Switch.cs:84:15:85:22 | if (...) ... |
| pre | Switch.cs:83:18:83:18 | 2 | Switch.cs:88:16:88:20 | false |
| pre | Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:84:19:84:19 | access to parameter j |
| pre | Switch.cs:84:19:84:19 | access to parameter j | Switch.cs:84:23:84:23 | 2 |
| pre | Switch.cs:84:19:84:23 | ... > ... | Switch.cs:85:17:85:22 | break; |
| pre | Switch.cs:84:19:84:23 | ... > ... | Switch.cs:86:22:86:25 | true |
| pre | Switch.cs:84:23:84:23 | 2 | Switch.cs:84:19:84:23 | ... > ... |
| pre | Switch.cs:86:22:86:25 | true | Switch.cs:86:15:86:26 | return ...; |
| pre | Switch.cs:88:16:88:20 | false | Switch.cs:88:9:88:21 | return ...; |
| pre | Switch.cs:91:10:91:11 | enter M8 | Switch.cs:92:5:99:5 | {...} |
| pre | Switch.cs:92:5:99:5 | {...} | Switch.cs:93:9:97:9 | switch (...) {...} |
| pre | Switch.cs:93:9:97:9 | switch (...) {...} | Switch.cs:93:17:93:17 | access to parameter o |
| pre | Switch.cs:93:17:93:17 | access to parameter o | Switch.cs:95:13:95:24 | case Int32: |
| pre | Switch.cs:95:13:95:24 | case Int32: | Switch.cs:95:18:95:20 | access to type Int32 |
| pre | Switch.cs:95:18:95:20 | access to type Int32 | Switch.cs:96:22:96:25 | true |
| pre | Switch.cs:95:18:95:20 | access to type Int32 | Switch.cs:98:16:98:20 | false |
| pre | Switch.cs:96:22:96:25 | true | Switch.cs:96:15:96:26 | return ...; |
| pre | Switch.cs:98:16:98:20 | false | Switch.cs:98:9:98:21 | return ...; |
| pre | Switch.cs:101:9:101:10 | enter M9 | Switch.cs:102:5:109:5 | {...} |
| pre | Switch.cs:102:5:109:5 | {...} | Switch.cs:103:9:107:9 | switch (...) {...} |
| pre | Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:103:17:103:17 | access to parameter s |
| pre | Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:103:19:103:25 | access to property Length |
| pre | Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:105:13:105:20 | case ...: |
| pre | Switch.cs:105:13:105:20 | case ...: | Switch.cs:105:18:105:18 | 0 |
| pre | Switch.cs:105:18:105:18 | 0 | Switch.cs:105:29:105:29 | 0 |
| pre | Switch.cs:105:18:105:18 | 0 | Switch.cs:106:13:106:20 | case ...: |
| pre | Switch.cs:105:29:105:29 | 0 | Switch.cs:105:22:105:30 | return ...; |
| pre | Switch.cs:106:13:106:20 | case ...: | Switch.cs:106:18:106:18 | 1 |
| pre | Switch.cs:106:18:106:18 | 1 | Switch.cs:106:29:106:29 | 1 |
| pre | Switch.cs:106:18:106:18 | 1 | Switch.cs:108:17:108:17 | 1 |
| pre | Switch.cs:106:29:106:29 | 1 | Switch.cs:106:22:106:30 | return ...; |
| pre | Switch.cs:108:16:108:17 | -... | Switch.cs:108:9:108:18 | return ...; |
| pre | Switch.cs:108:17:108:17 | 1 | Switch.cs:108:16:108:17 | -... |
| pre | Switch.cs:111:17:111:21 | enter Throw | Switch.cs:111:34:111:48 | object creation of type Exception |
| pre | Switch.cs:111:28:111:48 | throw ... | Switch.cs:111:17:111:21 | exit Throw |
| pre | Switch.cs:111:34:111:48 | object creation of type Exception | Switch.cs:111:28:111:48 | throw ... |
| pre | TypeAccesses.cs:3:10:3:10 | enter M | TypeAccesses.cs:4:5:9:5 | {...} |
| pre | TypeAccesses.cs:4:5:9:5 | {...} | TypeAccesses.cs:5:9:5:26 | ... ...; |
| pre | TypeAccesses.cs:5:9:5:26 | ... ...; | TypeAccesses.cs:5:13:5:13 | access to local variable s |
@@ -2388,10 +2602,10 @@
| pre | cflow.cs:46:27:46:27 | 1 | cflow.cs:46:17:46:28 | goto case ...; |
| pre | cflow.cs:47:13:47:19 | case ...: | cflow.cs:47:18:47:18 | 3 |
| pre | cflow.cs:47:18:47:18 | 3 | cflow.cs:48:17:48:39 | ...; |
| pre | cflow.cs:47:18:47:18 | 3 | cflow.cs:51:9:59:9 | switch (...) {...} |
| pre | cflow.cs:48:17:48:38 | call to method WriteLine | cflow.cs:49:17:49:22 | break; |
| pre | cflow.cs:48:17:48:39 | ...; | cflow.cs:48:35:48:37 | "3" |
| pre | cflow.cs:48:35:48:37 | "3" | cflow.cs:48:17:48:38 | call to method WriteLine |
| pre | cflow.cs:49:17:49:22 | break; | cflow.cs:51:9:59:9 | switch (...) {...} |
| pre | cflow.cs:51:9:59:9 | switch (...) {...} | cflow.cs:51:17:51:17 | access to parameter a |
| pre | cflow.cs:51:17:51:17 | access to parameter a | cflow.cs:53:13:53:20 | case ...: |
| pre | cflow.cs:53:13:53:20 | case ...: | cflow.cs:53:18:53:19 | 42 |
@@ -2410,6 +2624,7 @@
| pre | cflow.cs:60:27:60:31 | this access | cflow.cs:60:27:60:31 | access to field Field |
| pre | cflow.cs:62:13:62:19 | case ...: | cflow.cs:62:18:62:18 | 0 |
| pre | cflow.cs:62:18:62:18 | 0 | cflow.cs:63:17:64:55 | if (...) ... |
| pre | cflow.cs:62:18:62:18 | 0 | cflow.cs:67:16:67:16 | access to parameter a |
| pre | cflow.cs:63:17:64:55 | if (...) ... | cflow.cs:63:21:63:34 | !... |
| pre | cflow.cs:63:21:63:34 | !... | cflow.cs:63:23:63:27 | this access |
| pre | cflow.cs:63:23:63:27 | access to field Field | cflow.cs:63:32:63:33 | "" |
@@ -2418,7 +2633,6 @@
| pre | cflow.cs:63:23:63:33 | ... == ... | cflow.cs:65:17:65:22 | break; |
| pre | cflow.cs:63:32:63:33 | "" | cflow.cs:63:23:63:33 | ... == ... |
| pre | cflow.cs:64:27:64:54 | object creation of type NullReferenceException | cflow.cs:64:21:64:55 | throw ...; |
| pre | cflow.cs:65:17:65:22 | break; | cflow.cs:67:16:67:16 | access to parameter a |
| pre | cflow.cs:67:16:67:16 | access to parameter a | cflow.cs:67:9:67:17 | return ...; |
| pre | cflow.cs:70:18:70:18 | enter M | cflow.cs:71:5:82:5 | {...} |
| pre | cflow.cs:71:5:82:5 | {...} | cflow.cs:72:9:73:19 | if (...) ... |

View File

@@ -174,10 +174,27 @@
| ConditionalAccess.cs:16:20:16:20 | 1 | ConditionalAccess.cs:16:13:16:21 | return ...; | semmle.label | successor |
| ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | semmle.label | non-null |
| ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith | semmle.label | successor |
| ConditionalAccess.cs:24:70:24:71 | access to parameter s1 | ConditionalAccess.cs:24:75:24:78 | ", " | semmle.label | successor |
| ConditionalAccess.cs:24:70:24:78 | ... + ... | ConditionalAccess.cs:24:82:24:83 | access to parameter s2 | semmle.label | successor |
| ConditionalAccess.cs:24:75:24:78 | ", " | ConditionalAccess.cs:24:70:24:78 | ... + ... | semmle.label | successor |
| ConditionalAccess.cs:24:82:24:83 | access to parameter s2 | ConditionalAccess.cs:24:70:24:83 | ... + ... | semmle.label | successor |
| ConditionalAccess.cs:22:5:26:5 | {...} | ConditionalAccess.cs:23:9:23:39 | ... ...; | semmle.label | successor |
| ConditionalAccess.cs:23:9:23:39 | ... ...; | ConditionalAccess.cs:23:13:23:13 | access to local variable j | semmle.label | successor |
| ConditionalAccess.cs:23:13:23:13 | access to local variable j | ConditionalAccess.cs:23:26:23:29 | null | semmle.label | successor |
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:24:9:24:38 | ... ...; | semmle.label | successor |
| ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | semmle.label | null |
| ConditionalAccess.cs:23:26:23:29 | null | ConditionalAccess.cs:23:18:23:29 | (...) ... | semmle.label | successor |
| ConditionalAccess.cs:24:9:24:38 | ... ...; | ConditionalAccess.cs:24:13:24:13 | access to local variable s | semmle.label | successor |
| ConditionalAccess.cs:24:13:24:13 | access to local variable s | ConditionalAccess.cs:24:24:24:24 | access to parameter i | semmle.label | successor |
| ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:25:9:25:33 | ...; | semmle.label | successor |
| ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:27:24:37 | call to method ToString | semmle.label | non-null |
| ConditionalAccess.cs:24:24:24:24 | access to parameter i | ConditionalAccess.cs:24:18:24:24 | (...) ... | semmle.label | successor |
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:13:24:37 | String s = ... | semmle.label | successor |
| ConditionalAccess.cs:25:9:25:9 | access to local variable s | ConditionalAccess.cs:25:13:25:14 | "" | semmle.label | successor |
| ConditionalAccess.cs:25:9:25:33 | ...; | ConditionalAccess.cs:25:9:25:9 | access to local variable s | semmle.label | successor |
| ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:31:25:31 | access to local variable s | semmle.label | non-null |
| ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:9:25:32 | ... = ... | semmle.label | successor |
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | semmle.label | successor |
| ConditionalAccess.cs:31:70:31:71 | access to parameter s1 | ConditionalAccess.cs:31:75:31:78 | ", " | semmle.label | successor |
| ConditionalAccess.cs:31:70:31:78 | ... + ... | ConditionalAccess.cs:31:82:31:83 | access to parameter s2 | semmle.label | successor |
| ConditionalAccess.cs:31:75:31:78 | ", " | ConditionalAccess.cs:31:70:31:78 | ... + ... | semmle.label | successor |
| ConditionalAccess.cs:31:82:31:83 | access to parameter s2 | ConditionalAccess.cs:31:70:31:83 | ... + ... | semmle.label | successor |
| ExitMethods.cs:7:5:10:5 | {...} | ExitMethods.cs:8:9:8:25 | ...; | semmle.label | successor |
| ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | ExitMethods.cs:9:9:9:15 | return ...; | semmle.label | successor |
| ExitMethods.cs:8:9:8:25 | ...; | ExitMethods.cs:8:20:8:23 | true | semmle.label | successor |
@@ -268,15 +285,25 @@
| Extensions.cs:25:9:25:34 | ...; | Extensions.cs:25:9:25:14 | "true" | semmle.label | successor |
| Extensions.cs:25:23:25:32 | access to method Parse | Extensions.cs:25:23:25:32 | delegate creation of type Func<String,Boolean> | semmle.label | successor |
| Extensions.cs:25:23:25:32 | delegate creation of type Func<String,Boolean> | Extensions.cs:25:9:25:33 | call to method ToBool | semmle.label | successor |
| Foreach.cs:4:5:7:5 | {...} | Foreach.cs:5:29:5:32 | access to parameter args | semmle.label | successor |
| Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | Foreach.cs:5:22:5:24 | String arg | semmle.label | non-empty |
| Foreach.cs:5:22:5:24 | String arg | Foreach.cs:6:13:6:13 | ; | semmle.label | successor |
| Foreach.cs:5:29:5:32 | access to parameter args | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:6:13:6:13 | ; | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:10:5:13:5 | {...} | Foreach.cs:11:27:11:30 | access to parameter args | semmle.label | successor |
| Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | Foreach.cs:12:13:12:13 | ; | semmle.label | non-empty |
| Foreach.cs:11:27:11:30 | access to parameter args | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:12:13:12:13 | ; | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:7:5:10:5 | {...} | Foreach.cs:8:29:8:32 | access to parameter args | semmle.label | successor |
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:22:8:24 | String arg | semmle.label | non-empty |
| Foreach.cs:8:22:8:24 | String arg | Foreach.cs:9:13:9:13 | ; | semmle.label | successor |
| Foreach.cs:8:29:8:32 | access to parameter args | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:9:13:9:13 | ; | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:13:5:16:5 | {...} | Foreach.cs:14:27:14:30 | access to parameter args | semmle.label | successor |
| Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:15:13:15:13 | ; | semmle.label | non-empty |
| Foreach.cs:14:27:14:30 | access to parameter args | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:15:13:15:13 | ; | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:19:5:22:5 | {...} | Foreach.cs:20:27:20:68 | ... ?? ... | semmle.label | successor |
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:22:20:22 | String x | semmle.label | non-empty |
| Foreach.cs:20:22:20:22 | String x | Foreach.cs:21:11:21:11 | ; | semmle.label | successor |
| Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:20:29:20:38 | call to method ToArray | semmle.label | non-null |
| Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:20:43:20:68 | call to method Empty | semmle.label | null |
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:27:20:27 | access to parameter e | semmle.label | successor |
| Foreach.cs:20:29:20:38 | call to method ToArray | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | semmle.label | non-null |
| Foreach.cs:20:29:20:38 | call to method ToArray | Foreach.cs:20:43:20:68 | call to method Empty | semmle.label | null |
| Foreach.cs:20:43:20:68 | call to method Empty | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:21:11:21:11 | ; | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | semmle.label | successor |
| Initializers.cs:9:5:12:5 | {...} | Initializers.cs:10:9:10:54 | ... ...; | semmle.label | successor |
| Initializers.cs:10:9:10:54 | ... ...; | Initializers.cs:10:13:10:13 | access to local variable i | semmle.label | successor |
| Initializers.cs:10:13:10:13 | access to local variable i | Initializers.cs:10:34:10:35 | "" | semmle.label | successor |
@@ -315,7 +342,6 @@
| NullCoalescing.cs:9:37:9:45 | ... ? ... : ... | NullCoalescing.cs:9:37:9:37 | access to parameter b | semmle.label | successor |
| NullCoalescing.cs:9:41:9:41 | access to parameter s | NullCoalescing.cs:9:51:9:58 | ... ?? ... | semmle.label | null |
| NullCoalescing.cs:9:45:9:45 | access to parameter s | NullCoalescing.cs:9:51:9:58 | ... ?? ... | semmle.label | null |
| NullCoalescing.cs:9:51:9:52 | "" | NullCoalescing.cs:9:57:9:58 | "" | semmle.label | null |
| NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:52 | "" | semmle.label | successor |
| NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | NullCoalescing.cs:11:44:11:59 | ... ?? ... | semmle.label | successor |
| NullCoalescing.cs:11:44:11:45 | access to parameter b1 | NullCoalescing.cs:11:51:11:58 | ... && ... | semmle.label | null |
@@ -327,6 +353,24 @@
| NullCoalescing.cs:11:51:11:58 | ... && ... | NullCoalescing.cs:11:51:11:52 | access to parameter b2 | semmle.label | successor |
| NullCoalescing.cs:11:57:11:58 | access to parameter b3 | NullCoalescing.cs:11:64:11:64 | 0 | semmle.label | true |
| NullCoalescing.cs:11:57:11:58 | access to parameter b3 | NullCoalescing.cs:11:68:11:68 | 1 | semmle.label | false |
| NullCoalescing.cs:14:5:18:5 | {...} | NullCoalescing.cs:15:9:15:32 | ... ...; | semmle.label | successor |
| NullCoalescing.cs:15:9:15:32 | ... ...; | NullCoalescing.cs:15:13:15:13 | access to local variable j | semmle.label | successor |
| NullCoalescing.cs:15:13:15:13 | access to local variable j | NullCoalescing.cs:15:17:15:31 | ... ?? ... | semmle.label | successor |
| NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:16:9:16:26 | ... ...; | semmle.label | successor |
| NullCoalescing.cs:15:17:15:26 | (...) ... | NullCoalescing.cs:15:31:15:31 | 0 | semmle.label | null |
| NullCoalescing.cs:15:17:15:31 | ... ?? ... | NullCoalescing.cs:15:23:15:26 | null | semmle.label | successor |
| NullCoalescing.cs:15:23:15:26 | null | NullCoalescing.cs:15:17:15:26 | (...) ... | semmle.label | successor |
| NullCoalescing.cs:15:31:15:31 | 0 | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | semmle.label | successor |
| NullCoalescing.cs:16:9:16:26 | ... ...; | NullCoalescing.cs:16:13:16:13 | access to local variable s | semmle.label | successor |
| NullCoalescing.cs:16:13:16:13 | access to local variable s | NullCoalescing.cs:16:17:16:25 | ... ?? ... | semmle.label | successor |
| NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:17:9:17:25 | ...; | semmle.label | successor |
| NullCoalescing.cs:16:17:16:18 | "" | NullCoalescing.cs:16:13:16:25 | String s = ... | semmle.label | non-null |
| NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:16:17:16:18 | "" | semmle.label | successor |
| NullCoalescing.cs:17:9:17:9 | access to local variable j | NullCoalescing.cs:17:13:17:24 | ... ?? ... | semmle.label | successor |
| NullCoalescing.cs:17:9:17:25 | ...; | NullCoalescing.cs:17:9:17:9 | access to local variable j | semmle.label | successor |
| NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:9:17:24 | ... = ... | semmle.label | non-null |
| NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:19:17:19 | access to parameter i | semmle.label | successor |
| NullCoalescing.cs:17:19:17:19 | access to parameter i | NullCoalescing.cs:17:13:17:19 | (...) ... | semmle.label | successor |
| Patterns.cs:6:5:43:5 | {...} | Patterns.cs:7:9:7:24 | ... ...; | semmle.label | successor |
| Patterns.cs:7:9:7:24 | ... ...; | Patterns.cs:7:16:7:16 | access to local variable o | semmle.label | successor |
| Patterns.cs:7:16:7:16 | access to local variable o | Patterns.cs:7:20:7:23 | null | semmle.label | successor |
@@ -544,7 +588,65 @@
| Switch.cs:50:30:50:30 | access to parameter o | Switch.cs:50:35:50:38 | null | semmle.label | successor |
| Switch.cs:50:30:50:38 | ... != ... | Switch.cs:51:17:51:22 | break; | semmle.label | true |
| Switch.cs:50:35:50:38 | null | Switch.cs:50:30:50:38 | ... != ... | semmle.label | successor |
| Switch.cs:55:34:55:48 | object creation of type Exception | Switch.cs:55:28:55:48 | throw ... | semmle.label | successor |
| Switch.cs:56:5:64:5 | {...} | Switch.cs:57:9:63:9 | switch (...) {...} | semmle.label | successor |
| Switch.cs:57:9:63:9 | switch (...) {...} | Switch.cs:57:17:57:17 | 1 | semmle.label | successor |
| Switch.cs:57:17:57:17 | 1 | Switch.cs:57:21:57:21 | 2 | semmle.label | successor |
| Switch.cs:57:17:57:21 | ... + ... | Switch.cs:59:13:59:20 | case ...: | semmle.label | successor |
| Switch.cs:57:21:57:21 | 2 | Switch.cs:57:17:57:21 | ... + ... | semmle.label | successor |
| Switch.cs:59:13:59:20 | case ...: | Switch.cs:59:18:59:18 | 2 | semmle.label | successor |
| Switch.cs:59:18:59:18 | 2 | Switch.cs:61:13:61:20 | case ...: | semmle.label | no-match |
| Switch.cs:61:13:61:20 | case ...: | Switch.cs:61:18:61:18 | 3 | semmle.label | successor |
| Switch.cs:61:18:61:18 | 3 | Switch.cs:62:15:62:20 | break; | semmle.label | match |
| Switch.cs:67:5:75:5 | {...} | Switch.cs:68:9:74:9 | switch (...) {...} | semmle.label | successor |
| Switch.cs:68:9:74:9 | switch (...) {...} | Switch.cs:68:25:68:25 | access to parameter s | semmle.label | successor |
| Switch.cs:68:17:68:25 | (...) ... | Switch.cs:70:13:70:24 | case Int32: | semmle.label | successor |
| Switch.cs:68:25:68:25 | access to parameter s | Switch.cs:68:17:68:25 | (...) ... | semmle.label | successor |
| Switch.cs:70:13:70:24 | case Int32: | Switch.cs:70:18:70:20 | access to type Int32 | semmle.label | successor |
| Switch.cs:70:18:70:20 | access to type Int32 | Switch.cs:72:13:72:21 | case ...: | semmle.label | no-match |
| Switch.cs:72:13:72:21 | case ...: | Switch.cs:72:18:72:19 | "" | semmle.label | successor |
| Switch.cs:72:18:72:19 | "" | Switch.cs:73:15:73:20 | break; | semmle.label | match |
| Switch.cs:78:5:89:5 | {...} | Switch.cs:79:9:87:9 | switch (...) {...} | semmle.label | successor |
| Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:79:17:79:17 | access to parameter i | semmle.label | successor |
| Switch.cs:79:17:79:17 | access to parameter i | Switch.cs:81:13:81:20 | case ...: | semmle.label | successor |
| Switch.cs:81:13:81:20 | case ...: | Switch.cs:81:18:81:18 | 1 | semmle.label | successor |
| Switch.cs:81:18:81:18 | 1 | Switch.cs:82:22:82:25 | true | semmle.label | match |
| Switch.cs:81:18:81:18 | 1 | Switch.cs:83:13:83:20 | case ...: | semmle.label | no-match |
| Switch.cs:82:22:82:25 | true | Switch.cs:82:15:82:26 | return ...; | semmle.label | successor |
| Switch.cs:83:13:83:20 | case ...: | Switch.cs:83:18:83:18 | 2 | semmle.label | successor |
| Switch.cs:83:18:83:18 | 2 | Switch.cs:84:15:85:22 | if (...) ... | semmle.label | match |
| Switch.cs:83:18:83:18 | 2 | Switch.cs:88:16:88:20 | false | semmle.label | no-match |
| Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:84:19:84:19 | access to parameter j | semmle.label | successor |
| Switch.cs:84:19:84:19 | access to parameter j | Switch.cs:84:23:84:23 | 2 | semmle.label | successor |
| Switch.cs:84:19:84:23 | ... > ... | Switch.cs:85:17:85:22 | break; | semmle.label | true |
| Switch.cs:84:19:84:23 | ... > ... | Switch.cs:86:22:86:25 | true | semmle.label | false |
| Switch.cs:84:23:84:23 | 2 | Switch.cs:84:19:84:23 | ... > ... | semmle.label | successor |
| Switch.cs:85:17:85:22 | break; | Switch.cs:88:16:88:20 | false | semmle.label | break |
| Switch.cs:86:22:86:25 | true | Switch.cs:86:15:86:26 | return ...; | semmle.label | successor |
| Switch.cs:88:16:88:20 | false | Switch.cs:88:9:88:21 | return ...; | semmle.label | successor |
| Switch.cs:92:5:99:5 | {...} | Switch.cs:93:9:97:9 | switch (...) {...} | semmle.label | successor |
| Switch.cs:93:9:97:9 | switch (...) {...} | Switch.cs:93:17:93:17 | access to parameter o | semmle.label | successor |
| Switch.cs:93:17:93:17 | access to parameter o | Switch.cs:95:13:95:24 | case Int32: | semmle.label | successor |
| Switch.cs:95:13:95:24 | case Int32: | Switch.cs:95:18:95:20 | access to type Int32 | semmle.label | successor |
| Switch.cs:95:18:95:20 | access to type Int32 | Switch.cs:96:22:96:25 | true | semmle.label | match |
| Switch.cs:95:18:95:20 | access to type Int32 | Switch.cs:98:16:98:20 | false | semmle.label | no-match |
| Switch.cs:96:22:96:25 | true | Switch.cs:96:15:96:26 | return ...; | semmle.label | successor |
| Switch.cs:98:16:98:20 | false | Switch.cs:98:9:98:21 | return ...; | semmle.label | successor |
| Switch.cs:102:5:109:5 | {...} | Switch.cs:103:9:107:9 | switch (...) {...} | semmle.label | successor |
| Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:103:17:103:17 | access to parameter s | semmle.label | successor |
| Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:103:19:103:25 | access to property Length | semmle.label | non-null |
| Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:105:13:105:20 | case ...: | semmle.label | null |
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:105:13:105:20 | case ...: | semmle.label | successor |
| Switch.cs:105:13:105:20 | case ...: | Switch.cs:105:18:105:18 | 0 | semmle.label | successor |
| Switch.cs:105:18:105:18 | 0 | Switch.cs:105:29:105:29 | 0 | semmle.label | match |
| Switch.cs:105:18:105:18 | 0 | Switch.cs:106:13:106:20 | case ...: | semmle.label | no-match |
| Switch.cs:105:29:105:29 | 0 | Switch.cs:105:22:105:30 | return ...; | semmle.label | successor |
| Switch.cs:106:13:106:20 | case ...: | Switch.cs:106:18:106:18 | 1 | semmle.label | successor |
| Switch.cs:106:18:106:18 | 1 | Switch.cs:106:29:106:29 | 1 | semmle.label | match |
| Switch.cs:106:18:106:18 | 1 | Switch.cs:108:17:108:17 | 1 | semmle.label | no-match |
| Switch.cs:106:29:106:29 | 1 | Switch.cs:106:22:106:30 | return ...; | semmle.label | successor |
| Switch.cs:108:16:108:17 | -... | Switch.cs:108:9:108:18 | return ...; | semmle.label | successor |
| Switch.cs:108:17:108:17 | 1 | Switch.cs:108:16:108:17 | -... | semmle.label | successor |
| Switch.cs:111:34:111:48 | object creation of type Exception | Switch.cs:111:28:111:48 | throw ... | semmle.label | successor |
| TypeAccesses.cs:4:5:9:5 | {...} | TypeAccesses.cs:5:9:5:26 | ... ...; | semmle.label | successor |
| TypeAccesses.cs:5:9:5:26 | ... ...; | TypeAccesses.cs:5:13:5:13 | access to local variable s | semmle.label | successor |
| TypeAccesses.cs:5:13:5:13 | access to local variable s | TypeAccesses.cs:5:25:5:25 | access to parameter o | semmle.label | successor |
@@ -721,6 +823,7 @@
| cflow.cs:46:27:46:27 | 1 | cflow.cs:46:17:46:28 | goto case ...; | semmle.label | successor |
| cflow.cs:47:13:47:19 | case ...: | cflow.cs:47:18:47:18 | 3 | semmle.label | successor |
| cflow.cs:47:18:47:18 | 3 | cflow.cs:48:17:48:39 | ...; | semmle.label | match |
| cflow.cs:47:18:47:18 | 3 | cflow.cs:51:9:59:9 | switch (...) {...} | semmle.label | no-match |
| cflow.cs:48:17:48:38 | call to method WriteLine | cflow.cs:49:17:49:22 | break; | semmle.label | successor |
| cflow.cs:48:17:48:39 | ...; | cflow.cs:48:35:48:37 | "3" | semmle.label | successor |
| cflow.cs:48:35:48:37 | "3" | cflow.cs:48:17:48:38 | call to method WriteLine | semmle.label | successor |
@@ -745,6 +848,7 @@
| cflow.cs:60:27:60:31 | this access | cflow.cs:60:27:60:31 | access to field Field | semmle.label | successor |
| cflow.cs:62:13:62:19 | case ...: | cflow.cs:62:18:62:18 | 0 | semmle.label | successor |
| cflow.cs:62:18:62:18 | 0 | cflow.cs:63:17:64:55 | if (...) ... | semmle.label | match |
| cflow.cs:62:18:62:18 | 0 | cflow.cs:67:16:67:16 | access to parameter a | semmle.label | no-match |
| cflow.cs:63:17:64:55 | if (...) ... | cflow.cs:63:21:63:34 | !... | semmle.label | successor |
| cflow.cs:63:21:63:34 | !... | cflow.cs:63:23:63:27 | this access | semmle.label | successor |
| cflow.cs:63:23:63:27 | access to field Field | cflow.cs:63:32:63:33 | "" | semmle.label | successor |

View File

@@ -194,11 +194,30 @@
| ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 |
| ConditionalAccess.cs:19:43: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:24:70:24:71 | access to parameter s1 | ConditionalAccess.cs:24:70:24:71 | access to parameter s1 |
| ConditionalAccess.cs:24:70:24:78 | ... + ... | ConditionalAccess.cs:24:70:24:71 | access to parameter s1 |
| ConditionalAccess.cs:24:70:24:83 | ... + ... | ConditionalAccess.cs:24:70:24:71 | access to parameter s1 |
| ConditionalAccess.cs:24:75:24:78 | ", " | ConditionalAccess.cs:24:75:24:78 | ", " |
| ConditionalAccess.cs:24:82:24:83 | access to parameter s2 | ConditionalAccess.cs:24:82:24:83 | access to parameter s2 |
| 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 |
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:23:13:23:13 | access to local variable j |
| ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:26:23:29 | null |
| ConditionalAccess.cs:23:26:23:29 | null | ConditionalAccess.cs:23:26:23:29 | null |
| ConditionalAccess.cs:23:32:23:38 | access to property Length | ConditionalAccess.cs:23:26:23:29 | null |
| ConditionalAccess.cs:24:9:24:38 | ... ...; | ConditionalAccess.cs:24:9:24:38 | ... ...; |
| ConditionalAccess.cs:24:13:24:13 | access to local variable s | ConditionalAccess.cs:24:13:24:13 | access to local variable s |
| ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:24:13:24:13 | access to local variable s |
| ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:24:24:24 | access to parameter i |
| ConditionalAccess.cs:24:24:24:24 | access to parameter i | ConditionalAccess.cs:24:24:24:24 | access to parameter i |
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:24:24:24 | access to parameter i |
| ConditionalAccess.cs:25:9:25:9 | access to local variable s | ConditionalAccess.cs:25:9:25:9 | access to local variable s |
| ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:25:9:25:9 | access to local variable s |
| ConditionalAccess.cs:25:9:25:33 | ...; | ConditionalAccess.cs:25:9:25:33 | ...; |
| ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:13:25:14 | "" |
| ConditionalAccess.cs:25:16: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:31:70:31:71 | access to parameter s1 | ConditionalAccess.cs:31:70:31:71 | access to parameter s1 |
| ConditionalAccess.cs:31:70:31:78 | ... + ... | ConditionalAccess.cs:31:70:31:71 | access to parameter s1 |
| ConditionalAccess.cs:31:70:31:83 | ... + ... | ConditionalAccess.cs:31:70:31:71 | access to parameter s1 |
| ConditionalAccess.cs:31:75:31:78 | ", " | ConditionalAccess.cs:31:75:31:78 | ", " |
| ConditionalAccess.cs:31:82:31:83 | access to parameter s2 | ConditionalAccess.cs:31:82:31:83 | access to parameter s2 |
| ExitMethods.cs:7:5:10:5 | {...} | ExitMethods.cs:7:5:10:5 | {...} |
| ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | ExitMethods.cs:8:20:8:23 | true |
| ExitMethods.cs:8:9:8:25 | ...; | ExitMethods.cs:8:9:8:25 | ...; |
@@ -307,15 +326,23 @@
| Extensions.cs:25:9:25:34 | ...; | Extensions.cs:25:9:25:34 | ...; |
| Extensions.cs:25:23:25:32 | access to method Parse | Extensions.cs:25:23:25:32 | access to method Parse |
| Extensions.cs:25:23:25:32 | delegate creation of type Func<String,Boolean> | Extensions.cs:25:23:25:32 | access to method Parse |
| Foreach.cs:4:5:7:5 | {...} | Foreach.cs:4:5:7:5 | {...} |
| Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | Foreach.cs:5:29:5:32 | access to parameter args |
| Foreach.cs:5:22:5:24 | String arg | Foreach.cs:5:22:5:24 | String arg |
| Foreach.cs:5:29:5:32 | access to parameter args | Foreach.cs:5:29:5:32 | access to parameter args |
| Foreach.cs:6:13:6:13 | ; | Foreach.cs:6:13:6:13 | ; |
| Foreach.cs:10:5:13:5 | {...} | Foreach.cs:10:5:13:5 | {...} |
| Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | Foreach.cs:11:27:11:30 | access to parameter args |
| Foreach.cs:11:27:11:30 | access to parameter args | Foreach.cs:11:27:11:30 | access to parameter args |
| Foreach.cs:12:13:12:13 | ; | Foreach.cs:12:13:12:13 | ; |
| Foreach.cs:7:5:10:5 | {...} | Foreach.cs:7:5:10:5 | {...} |
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:29:8:32 | access to parameter args |
| 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:13:5:16:5 | {...} | Foreach.cs:13:5:16:5 | {...} |
| Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:14:27:14:30 | access to parameter args |
| 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:19:5:22:5 | {...} | Foreach.cs:19:5:22:5 | {...} |
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:27:20:68 | ... ?? ... |
| Foreach.cs:20:22:20:22 | String x | Foreach.cs:20:22:20:22 | String x |
| Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:20:27:20:27 | access to parameter e |
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:27:20:68 | ... ?? ... |
| Foreach.cs:20:29:20:38 | call to method ToArray | Foreach.cs:20:27:20:27 | access to parameter e |
| 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 | ; |
| Initializers.cs:6:28:6:30 | {...} | Initializers.cs:6:28:6:30 | {...} |
| Initializers.cs:9:5:12:5 | {...} | Initializers.cs:9:5:12:5 | {...} |
| Initializers.cs:10:9:10:54 | ... ...; | Initializers.cs:10:9:10:54 | ... ...; |
@@ -369,6 +396,27 @@
| 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: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 |
| NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:15:13:15:13 | access to local variable j |
| NullCoalescing.cs:15:17:15:26 | (...) ... | NullCoalescing.cs:15:23:15:26 | null |
| NullCoalescing.cs:15:17:15:31 | ... ?? ... | NullCoalescing.cs:15:17:15:31 | ... ?? ... |
| NullCoalescing.cs:15:23:15:26 | null | NullCoalescing.cs:15:23:15:26 | null |
| NullCoalescing.cs:15:31:15:31 | 0 | NullCoalescing.cs:15:31:15:31 | 0 |
| NullCoalescing.cs:16:9:16:26 | ... ...; | NullCoalescing.cs:16:9:16:26 | ... ...; |
| NullCoalescing.cs:16:13:16:13 | access to local variable s | NullCoalescing.cs:16:13:16:13 | access to local variable s |
| NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:16:13:16:13 | access to local variable s |
| NullCoalescing.cs:16:17:16:18 | "" | NullCoalescing.cs:16:17:16:18 | "" |
| NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:16:17:16:25 | ... ?? ... |
| NullCoalescing.cs:16:23:16:25 | "a" | NullCoalescing.cs:16:23:16:25 | "a" |
| NullCoalescing.cs:17:9:17:9 | access to local variable j | NullCoalescing.cs:17:9:17:9 | access to local variable j |
| NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:17:9:17:9 | access to local variable j |
| NullCoalescing.cs:17:9:17:25 | ...; | NullCoalescing.cs:17:9:17:25 | ...; |
| NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:19:17:19 | access to parameter i |
| NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:13:17:24 | ... ?? ... |
| NullCoalescing.cs:17:19:17:19 | access to parameter i | NullCoalescing.cs:17:19:17:19 | access to parameter i |
| NullCoalescing.cs:17:24:17:24 | 1 | NullCoalescing.cs:17:24:17:24 | 1 |
| Patterns.cs:6:5:43:5 | {...} | Patterns.cs:6:5:43:5 | {...} |
| Patterns.cs:7:9:7:24 | ... ...; | Patterns.cs:7:9:7:24 | ... ...; |
| Patterns.cs:7:16:7:16 | access to local variable o | Patterns.cs:7:16:7:16 | access to local variable o |
@@ -574,8 +622,69 @@
| Switch.cs:50:30:50:38 | ... != ... | Switch.cs:50:30:50:30 | access to parameter o |
| Switch.cs:50:35:50:38 | null | Switch.cs:50:35:50:38 | null |
| Switch.cs:51:17:51:22 | break; | Switch.cs:51:17:51:22 | break; |
| Switch.cs:55:28:55:48 | throw ... | Switch.cs:55:34:55:48 | object creation of type Exception |
| Switch.cs:55:34:55:48 | object creation of type Exception | Switch.cs:55:34:55:48 | object creation of type Exception |
| Switch.cs:56:5:64:5 | {...} | Switch.cs:56:5:64:5 | {...} |
| Switch.cs:57:9:63:9 | switch (...) {...} | Switch.cs:57:9:63:9 | switch (...) {...} |
| Switch.cs:57:17:57:17 | 1 | Switch.cs:57:17:57:17 | 1 |
| Switch.cs:57:17:57:21 | ... + ... | Switch.cs:57:17:57:17 | 1 |
| Switch.cs:57:21:57:21 | 2 | Switch.cs:57:21:57:21 | 2 |
| Switch.cs:59:13:59:20 | case ...: | Switch.cs:59:13:59:20 | case ...: |
| Switch.cs:59:18:59:18 | 2 | Switch.cs:59:18:59:18 | 2 |
| Switch.cs:60:15:60:20 | break; | Switch.cs:60:15:60:20 | break; |
| Switch.cs:61:13:61:20 | case ...: | Switch.cs:61:13:61:20 | case ...: |
| Switch.cs:61:18:61:18 | 3 | Switch.cs:61:18:61:18 | 3 |
| Switch.cs:62:15:62:20 | break; | Switch.cs:62:15:62:20 | break; |
| 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 |
| Switch.cs:68:25:68:25 | access to parameter s | Switch.cs:68:25:68:25 | access to parameter s |
| Switch.cs:70:13:70:24 | case Int32: | Switch.cs:70:13:70:24 | case Int32: |
| Switch.cs:71:15:71:20 | break; | Switch.cs:71:15:71:20 | break; |
| Switch.cs:72:13:72:21 | case ...: | Switch.cs:72:13:72:21 | case ...: |
| Switch.cs:72:18:72:19 | "" | Switch.cs:72:18:72:19 | "" |
| Switch.cs:73:15:73:20 | break; | Switch.cs:73:15:73:20 | break; |
| 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 |
| Switch.cs:81:13:81:20 | case ...: | Switch.cs:81:13:81:20 | case ...: |
| Switch.cs:81:18:81:18 | 1 | Switch.cs:81:18:81:18 | 1 |
| Switch.cs:82:15:82:26 | return ...; | Switch.cs:82:22:82:25 | true |
| Switch.cs:82:22:82:25 | true | Switch.cs:82:22:82:25 | true |
| Switch.cs:83:13:83:20 | case ...: | Switch.cs:83:13:83:20 | case ...: |
| Switch.cs:83:18:83:18 | 2 | Switch.cs:83:18:83:18 | 2 |
| Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:84:15:85:22 | if (...) ... |
| Switch.cs:84:19:84:19 | access to parameter j | Switch.cs:84:19:84:19 | access to parameter j |
| Switch.cs:84:19:84:23 | ... > ... | Switch.cs:84:19:84:19 | access to parameter j |
| Switch.cs:84:23:84:23 | 2 | Switch.cs:84:23:84:23 | 2 |
| Switch.cs:85:17:85:22 | break; | Switch.cs:85:17:85:22 | break; |
| Switch.cs:86:15:86:26 | return ...; | Switch.cs:86:22:86:25 | true |
| Switch.cs:86:22:86:25 | true | Switch.cs:86:22:86:25 | 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: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 |
| Switch.cs:95:13:95:24 | case Int32: | Switch.cs:95:13:95:24 | case Int32: |
| Switch.cs:96:15:96:26 | return ...; | Switch.cs:96:22:96:25 | true |
| Switch.cs:96:22:96:25 | true | Switch.cs:96:22:96:25 | 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: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 |
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:103:17:103:17 | access to parameter s |
| Switch.cs:105:13:105:20 | case ...: | Switch.cs:105:13:105:20 | case ...: |
| Switch.cs:105:18:105:18 | 0 | Switch.cs:105:18:105:18 | 0 |
| Switch.cs:105:22:105:30 | return ...; | Switch.cs:105:29:105:29 | 0 |
| Switch.cs:105:29:105:29 | 0 | Switch.cs:105:29:105:29 | 0 |
| Switch.cs:106:13:106:20 | case ...: | Switch.cs:106:13:106:20 | case ...: |
| Switch.cs:106:18:106:18 | 1 | Switch.cs:106:18:106:18 | 1 |
| Switch.cs:106:22:106:30 | return ...; | Switch.cs:106:29:106:29 | 1 |
| Switch.cs:106:29:106:29 | 1 | Switch.cs:106:29:106:29 | 1 |
| Switch.cs:108:9:108:18 | return ...; | Switch.cs:108:17:108:17 | 1 |
| Switch.cs:108:16:108:17 | -... | Switch.cs:108:17:108:17 | 1 |
| 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 |
| 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 |

View File

@@ -20,7 +20,8 @@
| 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:19:12:19:13 | M6 | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 |
| ConditionalAccess.cs:24:26:24:38 | CommaJoinWith | ConditionalAccess.cs:24:70:24:71 | access to parameter s1 |
| ConditionalAccess.cs:21:10:21:11 | M7 | ConditionalAccess.cs:22:5:26:5 | {...} |
| ConditionalAccess.cs:31:26:31:38 | CommaJoinWith | ConditionalAccess.cs:31:70:31:71 | access to parameter s1 |
| ExitMethods.cs:6:10:6:11 | M1 | ExitMethods.cs:7:5:10:5 | {...} |
| ExitMethods.cs:12:10:12:11 | M2 | ExitMethods.cs:13:5:16:5 | {...} |
| ExitMethods.cs:18:10:18:11 | M3 | ExitMethods.cs:19:5:22:5 | {...} |
@@ -38,8 +39,9 @@
| Extensions.cs:10:24:10:29 | ToBool | Extensions.cs:11:5:13:5 | {...} |
| Extensions.cs:15:23:15:33 | CallToInt32 | Extensions.cs:15:48:15:50 | "0" |
| Extensions.cs:20:17:20:20 | Main | Extensions.cs:21:5:26:5 | {...} |
| Foreach.cs:3:10:3:11 | M1 | Foreach.cs:4:5:7:5 | {...} |
| Foreach.cs:9:10:9:11 | M2 | Foreach.cs:10:5:13: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 | {...} |
| Initializers.cs:6:5:6:16 | Initializers | Initializers.cs:6:28:6:30 | {...} |
| Initializers.cs:8:10:8:10 | M | Initializers.cs:9:5:12:5 | {...} |
| NullCoalescing.cs:3:9:3:10 | M1 | NullCoalescing.cs:3:23:3:28 | ... ?? ... |
@@ -47,6 +49,7 @@
| 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 | {...} |
| Patterns.cs:5:10:5:13 | Test | Patterns.cs:6:5:43:5 | {...} |
| 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 |
@@ -55,7 +58,12 @@
| Switch.cs:10:10:10:11 | M2 | Switch.cs:11:5:33:5 | {...} |
| 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:55:17:55:21 | Throw | Switch.cs:55:34:55:48 | object creation of type Exception |
| 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:111:17:111:21 | Throw | Switch.cs:111:34:111:48 | object creation of type Exception |
| 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 | {...} |

View File

@@ -282,11 +282,31 @@
| ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | null |
| ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith | normal |
| ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | normal |
| ConditionalAccess.cs:24:70:24:71 | access to parameter s1 | ConditionalAccess.cs:24:70:24:71 | access to parameter s1 | normal |
| ConditionalAccess.cs:24:70:24:78 | ... + ... | ConditionalAccess.cs:24:70:24:78 | ... + ... | normal |
| ConditionalAccess.cs:24:70:24:83 | ... + ... | ConditionalAccess.cs:24:70:24:83 | ... + ... | normal |
| ConditionalAccess.cs:24:75:24:78 | ", " | ConditionalAccess.cs:24:75:24:78 | ", " | normal |
| ConditionalAccess.cs:24:82:24:83 | access to parameter s2 | ConditionalAccess.cs:24:82:24:83 | access to parameter s2 | normal |
| ConditionalAccess.cs:22:5:26:5 | {...} | ConditionalAccess.cs:25:9:25:32 | ... = ... | normal |
| ConditionalAccess.cs:23:9:23:39 | ... ...; | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | normal |
| ConditionalAccess.cs:23:13:23:13 | access to local variable j | ConditionalAccess.cs:23:13:23:13 | access to local variable j | normal |
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | normal |
| ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:18:23:29 | (...) ... | null |
| ConditionalAccess.cs:23:26:23:29 | null | ConditionalAccess.cs:23:26:23:29 | null | normal |
| ConditionalAccess.cs:23:32:23:38 | access to property Length | ConditionalAccess.cs:23:18:23:29 | (...) ... | null |
| ConditionalAccess.cs:23:32:23:38 | access to property Length | ConditionalAccess.cs:23:32:23:38 | access to property Length | normal |
| ConditionalAccess.cs:24:9:24:38 | ... ...; | ConditionalAccess.cs:24:13:24:37 | String s = ... | normal |
| ConditionalAccess.cs:24:13:24:13 | access to local variable s | ConditionalAccess.cs:24:13:24:13 | access to local variable s | normal |
| ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:24:13:24:37 | String s = ... | normal |
| ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:18:24:24 | (...) ... | non-null |
| ConditionalAccess.cs:24:24:24:24 | access to parameter i | ConditionalAccess.cs:24:24:24:24 | access to parameter i | normal |
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:27:24:37 | call to method ToString | normal |
| ConditionalAccess.cs:25:9:25:9 | access to local variable s | ConditionalAccess.cs:25:9:25:9 | access to local variable s | normal |
| ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:25:9:25:32 | ... = ... | normal |
| ConditionalAccess.cs:25:9:25:33 | ...; | ConditionalAccess.cs:25:9:25:32 | ... = ... | normal |
| ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:13:25:14 | "" | non-null |
| ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | normal |
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:31:25:31 | access to local variable s | normal |
| ConditionalAccess.cs:31:70:31:71 | access to parameter s1 | ConditionalAccess.cs:31:70:31:71 | access to parameter s1 | normal |
| ConditionalAccess.cs:31:70:31:78 | ... + ... | ConditionalAccess.cs:31:70:31:78 | ... + ... | normal |
| ConditionalAccess.cs:31:70:31:83 | ... + ... | ConditionalAccess.cs:31:70:31:83 | ... + ... | normal |
| ConditionalAccess.cs:31:75:31:78 | ", " | ConditionalAccess.cs:31:75:31:78 | ", " | normal |
| ConditionalAccess.cs:31:82:31:83 | access to parameter s2 | ConditionalAccess.cs:31:82:31:83 | access to parameter s2 | normal |
| ExitMethods.cs:7:5:10:5 | {...} | ExitMethods.cs:9:9:9:15 | return ...; | return |
| ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | normal |
| ExitMethods.cs:8:9:8:25 | ...; | ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | normal |
@@ -418,15 +438,27 @@
| Extensions.cs:25:9:25:34 | ...; | Extensions.cs:25:9:25:33 | call to method ToBool | normal |
| Extensions.cs:25:23:25:32 | access to method Parse | Extensions.cs:25:23:25:32 | access to method Parse | normal |
| Extensions.cs:25:23:25:32 | delegate creation of type Func<String,Boolean> | Extensions.cs:25:23:25:32 | delegate creation of type Func<String,Boolean> | normal |
| Foreach.cs:4:5:7:5 | {...} | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | empty |
| Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | empty |
| Foreach.cs:5:22:5:24 | String arg | Foreach.cs:5:22:5:24 | String arg | normal |
| Foreach.cs:5:29:5:32 | access to parameter args | Foreach.cs:5:29:5:32 | access to parameter args | normal |
| Foreach.cs:6:13:6:13 | ; | Foreach.cs:6:13:6:13 | ; | normal |
| Foreach.cs:10:5:13:5 | {...} | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | empty |
| Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | empty |
| Foreach.cs:11:27:11:30 | access to parameter args | Foreach.cs:11:27:11:30 | access to parameter args | normal |
| Foreach.cs:12:13:12:13 | ; | Foreach.cs:12:13:12:13 | ; | normal |
| Foreach.cs:7:5:10:5 | {...} | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | empty |
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | empty |
| Foreach.cs:8:22:8:24 | String arg | Foreach.cs:8:22:8:24 | String arg | normal |
| Foreach.cs:8:29:8:32 | access to parameter args | Foreach.cs:8:29:8:32 | access to parameter args | normal |
| Foreach.cs:9:13:9:13 | ; | Foreach.cs:9:13:9:13 | ; | normal |
| Foreach.cs:13:5:16:5 | {...} | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | empty |
| Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | empty |
| Foreach.cs:14:27:14:30 | access to parameter args | Foreach.cs:14:27:14:30 | access to parameter args | normal |
| Foreach.cs:15:13:15:13 | ; | Foreach.cs:15:13:15:13 | ; | normal |
| Foreach.cs:19:5:22:5 | {...} | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | empty |
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | empty |
| Foreach.cs:20:22:20:22 | String x | Foreach.cs:20:22:20:22 | String x | normal |
| Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:20:27:20:27 | access to parameter e | non-null |
| Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:20:27:20:27 | access to parameter e | null |
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:29:20:38 | call to method ToArray | non-null |
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:43:20:68 | call to method Empty | normal |
| Foreach.cs:20:29:20:38 | call to method ToArray | Foreach.cs:20:27:20:27 | access to parameter e | null |
| Foreach.cs:20:29:20:38 | call to method ToArray | Foreach.cs:20:29:20:38 | call to method ToArray | non-null |
| Foreach.cs:20:29:20:38 | call to method ToArray | Foreach.cs:20:29:20:38 | call to method ToArray | null |
| Foreach.cs:20:43:20:68 | call to method Empty | Foreach.cs:20:43:20:68 | call to method Empty | normal |
| Foreach.cs:21:11:21:11 | ; | Foreach.cs:21:11:21:11 | ; | normal |
| Initializers.cs:6:28:6:30 | {...} | Initializers.cs:6:28:6:30 | {...} | normal |
| Initializers.cs:9:5:12:5 | {...} | Initializers.cs:11:13:11:63 | Initializers[] iz = ... | normal |
| Initializers.cs:10:9:10:54 | ... ...; | Initializers.cs:10:13:10:53 | Initializers i = ... | normal |
@@ -491,7 +523,6 @@
| NullCoalescing.cs:9:45:9:45 | access to parameter s | NullCoalescing.cs:9:45:9:45 | access to parameter s | non-null |
| NullCoalescing.cs:9:45:9:45 | access to parameter s | NullCoalescing.cs:9:45:9:45 | access to parameter s | null |
| NullCoalescing.cs:9:51:9:52 | "" | NullCoalescing.cs:9:51:9:52 | "" | non-null |
| NullCoalescing.cs:9:51:9:52 | "" | NullCoalescing.cs:9:51:9:52 | "" | null |
| NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:52 | "" | non-null |
| NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:57:9:58 | "" | normal |
| NullCoalescing.cs:9:57:9:58 | "" | NullCoalescing.cs:9:57:9:58 | "" | normal |
@@ -514,6 +545,29 @@
| NullCoalescing.cs:11:57:11:58 | access to parameter b3 | NullCoalescing.cs:11:57:11:58 | access to parameter b3 | true/true |
| NullCoalescing.cs:11:64:11:64 | 0 | NullCoalescing.cs:11:64:11:64 | 0 | normal |
| NullCoalescing.cs:11:68:11:68 | 1 | NullCoalescing.cs:11:68:11:68 | 1 | normal |
| NullCoalescing.cs:14:5:18:5 | {...} | NullCoalescing.cs:17:9:17:24 | ... = ... | normal |
| NullCoalescing.cs:15:9:15:32 | ... ...; | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | normal |
| NullCoalescing.cs:15:13:15:13 | access to local variable j | NullCoalescing.cs:15:13:15:13 | access to local variable j | normal |
| NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | normal |
| NullCoalescing.cs:15:17:15:26 | (...) ... | NullCoalescing.cs:15:17:15:26 | (...) ... | null |
| NullCoalescing.cs:15:17:15:31 | ... ?? ... | NullCoalescing.cs:15:31:15:31 | 0 | normal |
| NullCoalescing.cs:15:23:15:26 | null | NullCoalescing.cs:15:23:15:26 | null | normal |
| NullCoalescing.cs:15:31:15:31 | 0 | NullCoalescing.cs:15:31:15:31 | 0 | normal |
| NullCoalescing.cs:16:9:16:26 | ... ...; | NullCoalescing.cs:16:13:16:25 | String s = ... | normal |
| NullCoalescing.cs:16:13:16:13 | access to local variable s | NullCoalescing.cs:16:13:16:13 | access to local variable s | normal |
| NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:16:13:16:25 | String s = ... | normal |
| NullCoalescing.cs:16:17:16:18 | "" | NullCoalescing.cs:16:17:16:18 | "" | non-null |
| NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:16:17:16:18 | "" | non-null |
| NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:16:23:16:25 | "a" | normal |
| NullCoalescing.cs:16:23:16:25 | "a" | NullCoalescing.cs:16:23:16:25 | "a" | normal |
| NullCoalescing.cs:17:9:17:9 | access to local variable j | NullCoalescing.cs:17:9:17:9 | access to local variable j | normal |
| NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:17:9:17:24 | ... = ... | normal |
| NullCoalescing.cs:17:9:17:25 | ...; | NullCoalescing.cs:17:9:17:24 | ... = ... | normal |
| NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:13:17:19 | (...) ... | non-null |
| NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:13:17:19 | (...) ... | non-null |
| NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:24:17:24 | 1 | normal |
| NullCoalescing.cs:17:19:17:19 | access to parameter i | NullCoalescing.cs:17:19:17:19 | access to parameter i | normal |
| NullCoalescing.cs:17:24:17:24 | 1 | NullCoalescing.cs:17:24:17:24 | 1 | normal |
| Patterns.cs:6:5:43:5 | {...} | Patterns.cs:40:17:40:17 | access to local variable o | normal |
| Patterns.cs:7:9:7:24 | ... ...; | Patterns.cs:7:16:7:23 | Object o = ... | normal |
| Patterns.cs:7:16:7:16 | access to local variable o | Patterns.cs:7:16:7:16 | access to local variable o | normal |
@@ -784,8 +838,104 @@
| Switch.cs:50:30:50:38 | ... != ... | Switch.cs:50:30:50:38 | ... != ... | true/true |
| Switch.cs:50:35:50:38 | null | Switch.cs:50:35:50:38 | null | normal |
| Switch.cs:51:17:51:22 | break; | Switch.cs:51:17:51:22 | break; | break |
| Switch.cs:55:28:55:48 | throw ... | Switch.cs:55:28:55:48 | throw ... | throw(Exception) |
| Switch.cs:55:34:55:48 | object creation of type Exception | Switch.cs:55:34:55:48 | object creation of type Exception | normal |
| Switch.cs:56:5:64:5 | {...} | Switch.cs:60:15:60:20 | break; | normal (break) |
| Switch.cs:56:5:64:5 | {...} | Switch.cs:62:15:62:20 | break; | normal (break) |
| Switch.cs:57:9:63:9 | switch (...) {...} | Switch.cs:60:15:60:20 | break; | normal (break) |
| Switch.cs:57:9:63:9 | switch (...) {...} | Switch.cs:62:15:62:20 | break; | normal (break) |
| Switch.cs:57:17:57:17 | 1 | Switch.cs:57:17:57:17 | 1 | normal |
| Switch.cs:57:17:57:21 | ... + ... | Switch.cs:57:17:57:21 | ... + ... | normal |
| Switch.cs:57:21:57:21 | 2 | Switch.cs:57:21:57:21 | 2 | normal |
| Switch.cs:59:13:59:20 | case ...: | Switch.cs:59:18:59:18 | 2 | no-match |
| Switch.cs:59:13:59:20 | case ...: | Switch.cs:60:15:60:20 | break; | break |
| Switch.cs:59:18:59:18 | 2 | Switch.cs:59:18:59:18 | 2 | no-match |
| Switch.cs:60:15:60:20 | break; | Switch.cs:60:15:60:20 | break; | break |
| Switch.cs:61:13:61:20 | case ...: | Switch.cs:62:15:62:20 | break; | break |
| Switch.cs:61:18:61:18 | 3 | Switch.cs:61:18:61:18 | 3 | match |
| Switch.cs:62:15:62:20 | break; | Switch.cs:62:15:62:20 | break; | break |
| Switch.cs:67:5:75:5 | {...} | Switch.cs:71:15:71:20 | break; | normal (break) |
| Switch.cs:67:5:75:5 | {...} | Switch.cs:72:18:72:19 | "" | no-match |
| Switch.cs:67:5:75:5 | {...} | Switch.cs:73:15:73:20 | break; | normal (break) |
| Switch.cs:68:9:74:9 | switch (...) {...} | Switch.cs:71:15:71:20 | break; | normal (break) |
| Switch.cs:68:9:74:9 | switch (...) {...} | Switch.cs:72:18:72:19 | "" | no-match |
| Switch.cs:68:9:74:9 | switch (...) {...} | Switch.cs:73:15:73:20 | break; | normal (break) |
| Switch.cs:68:17:68:25 | (...) ... | Switch.cs:68:17:68:25 | (...) ... | normal |
| Switch.cs:68:25:68:25 | access to parameter s | Switch.cs:68:25:68:25 | access to parameter s | normal |
| Switch.cs:70:13:70:24 | case Int32: | Switch.cs:70:18:70:20 | access to type Int32 | no-match |
| Switch.cs:70:13:70:24 | case Int32: | Switch.cs:71:15:71:20 | break; | break |
| Switch.cs:71:15:71:20 | break; | Switch.cs:71:15:71:20 | break; | break |
| Switch.cs:72:13:72:21 | case ...: | Switch.cs:72:18:72:19 | "" | no-match |
| Switch.cs:72:13:72:21 | case ...: | Switch.cs:73:15:73:20 | break; | break |
| Switch.cs:72:18:72:19 | "" | Switch.cs:72:18:72:19 | "" | match |
| Switch.cs:72:18:72:19 | "" | Switch.cs:72:18:72:19 | "" | no-match |
| Switch.cs:73:15:73:20 | break; | Switch.cs:73:15:73:20 | break; | break |
| Switch.cs:78:5:89:5 | {...} | Switch.cs:82:15:82:26 | return ...; | return |
| Switch.cs:78:5:89:5 | {...} | Switch.cs:86:15:86:26 | return ...; | return |
| Switch.cs:78:5:89:5 | {...} | Switch.cs:88:9:88:21 | return ...; | return |
| Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:82:15:82:26 | return ...; | return |
| Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:83:18:83:18 | 2 | no-match |
| Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:85:17:85:22 | break; | normal (break) |
| Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:86:15:86:26 | return ...; | return |
| Switch.cs:79:17:79:17 | access to parameter i | Switch.cs:79:17:79:17 | access to parameter i | normal |
| Switch.cs:81:13:81:20 | case ...: | Switch.cs:81:18:81:18 | 1 | no-match |
| Switch.cs:81:13:81:20 | case ...: | Switch.cs:82:15:82:26 | return ...; | return |
| Switch.cs:81:18:81:18 | 1 | Switch.cs:81:18:81:18 | 1 | match |
| Switch.cs:81:18:81:18 | 1 | Switch.cs:81:18:81:18 | 1 | no-match |
| Switch.cs:82:15:82:26 | return ...; | Switch.cs:82:15:82:26 | return ...; | return |
| Switch.cs:82:22:82:25 | true | Switch.cs:82:22:82:25 | true | normal |
| Switch.cs:83:13:83:20 | case ...: | Switch.cs:83:18:83:18 | 2 | no-match |
| Switch.cs:83:13:83:20 | case ...: | Switch.cs:84:19:84:23 | ... > ... | false/false |
| Switch.cs:83:13:83:20 | case ...: | Switch.cs:85:17:85:22 | break; | break |
| Switch.cs:83:18:83:18 | 2 | Switch.cs:83:18:83:18 | 2 | match |
| Switch.cs:83:18:83:18 | 2 | Switch.cs:83:18:83:18 | 2 | no-match |
| Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:84:19:84:23 | ... > ... | false/false |
| Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:85:17:85:22 | break; | break |
| Switch.cs:84:19:84:19 | access to parameter j | Switch.cs:84:19:84:19 | access to parameter j | normal |
| Switch.cs:84:19:84:23 | ... > ... | Switch.cs:84:19:84:23 | ... > ... | false/false |
| Switch.cs:84:19:84:23 | ... > ... | Switch.cs:84:19:84:23 | ... > ... | true/true |
| Switch.cs:84:23:84:23 | 2 | Switch.cs:84:23:84:23 | 2 | normal |
| Switch.cs:85:17:85:22 | break; | Switch.cs:85:17:85:22 | break; | break |
| Switch.cs:86:15:86:26 | return ...; | Switch.cs:86:15:86:26 | return ...; | return |
| Switch.cs:86:22:86:25 | true | Switch.cs:86:22:86:25 | true | normal |
| Switch.cs:88:9:88:21 | return ...; | Switch.cs:88:9:88:21 | return ...; | return |
| Switch.cs:88:16:88:20 | false | Switch.cs:88:16:88:20 | false | normal |
| Switch.cs:92:5:99:5 | {...} | Switch.cs:96:15:96:26 | return ...; | return |
| Switch.cs:92:5:99:5 | {...} | Switch.cs:98:9:98:21 | return ...; | return |
| Switch.cs:93:9:97:9 | switch (...) {...} | Switch.cs:95:18:95:20 | access to type Int32 | no-match |
| Switch.cs:93:9:97:9 | switch (...) {...} | Switch.cs:96:15:96:26 | return ...; | return |
| Switch.cs:93:17:93:17 | access to parameter o | Switch.cs:93:17:93:17 | access to parameter o | normal |
| Switch.cs:95:13:95:24 | case Int32: | Switch.cs:95:18:95:20 | access to type Int32 | no-match |
| Switch.cs:95:13:95:24 | case Int32: | Switch.cs:96:15:96:26 | return ...; | return |
| Switch.cs:96:15:96:26 | return ...; | Switch.cs:96:15:96:26 | return ...; | return |
| Switch.cs:96:22:96:25 | true | Switch.cs:96:22:96:25 | true | normal |
| Switch.cs:98:9:98:21 | return ...; | Switch.cs:98:9:98:21 | return ...; | return |
| Switch.cs:98:16:98:20 | false | Switch.cs:98:16:98:20 | false | normal |
| Switch.cs:102:5:109:5 | {...} | Switch.cs:105:22:105:30 | return ...; | return |
| Switch.cs:102:5:109:5 | {...} | Switch.cs:106:22:106:30 | return ...; | return |
| Switch.cs:102:5:109:5 | {...} | Switch.cs:108:9:108:18 | return ...; | return |
| Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:105:22:105:30 | return ...; | return |
| Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:106:18:106:18 | 1 | no-match |
| Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:106:22:106:30 | return ...; | return |
| Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:103:17:103:17 | access to parameter s | non-null |
| Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:103:17:103:17 | access to parameter s | null |
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:103:17:103:17 | access to parameter s | null |
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:103:19:103:25 | access to property Length | normal |
| Switch.cs:105:13:105:20 | case ...: | Switch.cs:105:18:105:18 | 0 | no-match |
| Switch.cs:105:13:105:20 | case ...: | Switch.cs:105:22:105:30 | return ...; | return |
| Switch.cs:105:18:105:18 | 0 | Switch.cs:105:18:105:18 | 0 | match |
| Switch.cs:105:18:105:18 | 0 | Switch.cs:105:18:105:18 | 0 | no-match |
| Switch.cs:105:22:105:30 | return ...; | Switch.cs:105:22:105:30 | return ...; | return |
| Switch.cs:105:29:105:29 | 0 | Switch.cs:105:29:105:29 | 0 | normal |
| Switch.cs:106:13:106:20 | case ...: | Switch.cs:106:18:106:18 | 1 | no-match |
| Switch.cs:106:13:106:20 | case ...: | Switch.cs:106:22:106:30 | return ...; | return |
| Switch.cs:106:18:106:18 | 1 | Switch.cs:106:18:106:18 | 1 | match |
| Switch.cs:106:18:106:18 | 1 | Switch.cs:106:18:106:18 | 1 | no-match |
| Switch.cs:106:22:106:30 | return ...; | Switch.cs:106:22:106:30 | return ...; | return |
| Switch.cs:106:29:106:29 | 1 | Switch.cs:106:29:106:29 | 1 | normal |
| Switch.cs:108:9:108:18 | return ...; | Switch.cs:108:9:108:18 | return ...; | return |
| Switch.cs:108:16:108:17 | -... | Switch.cs:108:16:108:17 | -... | normal |
| Switch.cs:108:17:108:17 | 1 | Switch.cs:108:17:108:17 | 1 | normal |
| Switch.cs:111:28:111:48 | throw ... | Switch.cs:111:28:111:48 | throw ... | throw(Exception) |
| Switch.cs:111:34:111:48 | object creation of type Exception | Switch.cs:111:34:111:48 | object creation of type Exception | normal |
| TypeAccesses.cs:4:5:9:5 | {...} | TypeAccesses.cs:8:13:8:27 | Type t = ... | normal |
| TypeAccesses.cs:5:9:5:26 | ... ...; | TypeAccesses.cs:5:13:5:25 | String s = ... | normal |
| TypeAccesses.cs:5:13:5:13 | access to local variable s | TypeAccesses.cs:5:13:5:13 | access to local variable s | normal |
@@ -963,6 +1113,7 @@
| cflow.cs:33:35:33:35 | access to local variable i | cflow.cs:33:35:33:35 | access to local variable i | normal |
| cflow.cs:38:5:68:5 | {...} | cflow.cs:64:21:64:55 | throw ...; | throw(NullReferenceException) |
| cflow.cs:38:5:68:5 | {...} | cflow.cs:67:9:67:17 | return ...; | return |
| cflow.cs:39:9:50:9 | switch (...) {...} | cflow.cs:47:18:47:18 | 3 | no-match |
| cflow.cs:39:9:50:9 | switch (...) {...} | cflow.cs:49:17:49:22 | break; | normal (break) |
| cflow.cs:39:17:39:17 | access to parameter a | cflow.cs:39:17:39:17 | access to parameter a | normal |
| cflow.cs:41:13:41:19 | case ...: | cflow.cs:41:18:41:18 | 1 | no-match |
@@ -1007,6 +1158,7 @@
| cflow.cs:57:17:57:52 | ...; | cflow.cs:57:17:57:51 | call to method WriteLine | normal |
| cflow.cs:57:35:57:50 | "Not the answer" | cflow.cs:57:35:57:50 | "Not the answer" | normal |
| cflow.cs:58:17:58:22 | break; | cflow.cs:58:17:58:22 | break; | break |
| cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:62:18:62:18 | 0 | no-match |
| cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:64:21:64:55 | throw ...; | throw(NullReferenceException) |
| cflow.cs:60:9:66:9 | switch (...) {...} | cflow.cs:65:17:65:22 | break; | normal (break) |
| cflow.cs:60:17:60:32 | call to method Parse | cflow.cs:60:17:60:32 | call to method Parse | normal |

View File

@@ -1,3 +1,6 @@
using System.Collections.Generic;
using System.Linq;
class Foreach
{
void M1(string[] args)
@@ -11,4 +14,10 @@ class Foreach
foreach (var _ in args)
;
}
void M3(IEnumerable<string> e)
{
foreach (var x in e?.ToArray() ?? Enumerable.Empty<string>())
;
}
}

View File

@@ -256,12 +256,31 @@
| ConditionalAccess.cs:19:40:19:41 | access to parameter s1 | ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | semmle.label | non-null |
| ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith | ConditionalAccess.cs:19:12:19:13 | exit M6 | semmle.label | successor |
| ConditionalAccess.cs:19:58:19:59 | access to parameter s2 | ConditionalAccess.cs:19:43:19:60 | call to method CommaJoinWith | semmle.label | successor |
| ConditionalAccess.cs:24:26:24:38 | enter CommaJoinWith | ConditionalAccess.cs:24:70:24:71 | access to parameter s1 | semmle.label | successor |
| ConditionalAccess.cs:24:70:24:71 | access to parameter s1 | ConditionalAccess.cs:24:75:24:78 | ", " | semmle.label | successor |
| ConditionalAccess.cs:24:70:24:78 | ... + ... | ConditionalAccess.cs:24:82:24:83 | access to parameter s2 | semmle.label | successor |
| ConditionalAccess.cs:24:70:24:83 | ... + ... | ConditionalAccess.cs:24:26:24:38 | exit CommaJoinWith | semmle.label | successor |
| ConditionalAccess.cs:24:75:24:78 | ", " | ConditionalAccess.cs:24:70:24:78 | ... + ... | semmle.label | successor |
| ConditionalAccess.cs:24:82:24:83 | access to parameter s2 | ConditionalAccess.cs:24:70:24:83 | ... + ... | semmle.label | successor |
| ConditionalAccess.cs:21:10:21:11 | enter M7 | ConditionalAccess.cs:22:5:26:5 | {...} | semmle.label | successor |
| ConditionalAccess.cs:22:5:26:5 | {...} | ConditionalAccess.cs:23:9:23:39 | ... ...; | semmle.label | successor |
| ConditionalAccess.cs:23:9:23:39 | ... ...; | ConditionalAccess.cs:23:13:23:13 | access to local variable j | semmle.label | successor |
| ConditionalAccess.cs:23:13:23:13 | access to local variable j | ConditionalAccess.cs:23:26:23:29 | null | semmle.label | successor |
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:24:9:24:38 | ... ...; | semmle.label | successor |
| ConditionalAccess.cs:23:18:23:29 | (...) ... | ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | semmle.label | null |
| ConditionalAccess.cs:23:26:23:29 | null | ConditionalAccess.cs:23:18:23:29 | (...) ... | semmle.label | successor |
| ConditionalAccess.cs:24:9:24:38 | ... ...; | ConditionalAccess.cs:24:13:24:13 | access to local variable s | semmle.label | successor |
| ConditionalAccess.cs:24:13:24:13 | access to local variable s | ConditionalAccess.cs:24:24:24:24 | access to parameter i | semmle.label | successor |
| ConditionalAccess.cs:24:13:24:37 | String s = ... | ConditionalAccess.cs:25:9:25:33 | ...; | semmle.label | successor |
| ConditionalAccess.cs:24:18:24:24 | (...) ... | ConditionalAccess.cs:24:27:24:37 | call to method ToString | semmle.label | non-null |
| ConditionalAccess.cs:24:24:24:24 | access to parameter i | ConditionalAccess.cs:24:18:24:24 | (...) ... | semmle.label | successor |
| ConditionalAccess.cs:24:27:24:37 | call to method ToString | ConditionalAccess.cs:24:13:24:37 | String s = ... | semmle.label | successor |
| ConditionalAccess.cs:25:9:25:9 | access to local variable s | ConditionalAccess.cs:25:13:25:14 | "" | semmle.label | successor |
| ConditionalAccess.cs:25:9:25:32 | ... = ... | ConditionalAccess.cs:21:10:21:11 | exit M7 | semmle.label | successor |
| ConditionalAccess.cs:25:9:25:33 | ...; | ConditionalAccess.cs:25:9:25:9 | access to local variable s | semmle.label | successor |
| ConditionalAccess.cs:25:13:25:14 | "" | ConditionalAccess.cs:25:31:25:31 | access to local variable s | semmle.label | non-null |
| ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | ConditionalAccess.cs:25:9:25:32 | ... = ... | semmle.label | successor |
| ConditionalAccess.cs:25:31:25:31 | access to local variable s | ConditionalAccess.cs:25:16:25:32 | call to method CommaJoinWith | semmle.label | successor |
| ConditionalAccess.cs:31:26:31:38 | enter CommaJoinWith | ConditionalAccess.cs:31:70:31:71 | access to parameter s1 | semmle.label | successor |
| ConditionalAccess.cs:31:70:31:71 | access to parameter s1 | ConditionalAccess.cs:31:75:31:78 | ", " | semmle.label | successor |
| ConditionalAccess.cs:31:70:31:78 | ... + ... | ConditionalAccess.cs:31:82:31:83 | access to parameter s2 | semmle.label | successor |
| ConditionalAccess.cs:31:70:31:83 | ... + ... | ConditionalAccess.cs:31:26:31:38 | exit CommaJoinWith | semmle.label | successor |
| ConditionalAccess.cs:31:75:31:78 | ", " | ConditionalAccess.cs:31:70:31:78 | ... + ... | semmle.label | successor |
| ConditionalAccess.cs:31:82:31:83 | access to parameter s2 | ConditionalAccess.cs:31:70:31:83 | ... + ... | semmle.label | successor |
| ExitMethods.cs:6:10:6:11 | enter M1 | ExitMethods.cs:7:5:10:5 | {...} | semmle.label | successor |
| ExitMethods.cs:7:5:10:5 | {...} | ExitMethods.cs:8:9:8:25 | ...; | semmle.label | successor |
| ExitMethods.cs:8:9:8:24 | call to method ErrorMaybe | ExitMethods.cs:9:9:9:15 | return ...; | semmle.label | successor |
@@ -391,19 +410,31 @@
| Extensions.cs:25:9:25:34 | ...; | Extensions.cs:25:9:25:14 | "true" | semmle.label | successor |
| Extensions.cs:25:23:25:32 | access to method Parse | Extensions.cs:25:23:25:32 | delegate creation of type Func<String,Boolean> | semmle.label | successor |
| Extensions.cs:25:23:25:32 | delegate creation of type Func<String,Boolean> | Extensions.cs:25:9:25:33 | call to method ToBool | semmle.label | successor |
| Foreach.cs:3:10:3:11 | enter M1 | Foreach.cs:4:5:7:5 | {...} | semmle.label | successor |
| Foreach.cs:4:5:7:5 | {...} | Foreach.cs:5:29:5:32 | access to parameter args | semmle.label | successor |
| Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | Foreach.cs:3:10:3:11 | exit M1 | semmle.label | empty |
| Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | Foreach.cs:5:22:5:24 | String arg | semmle.label | non-empty |
| Foreach.cs:5:22:5:24 | String arg | Foreach.cs:6:13:6:13 | ; | semmle.label | successor |
| Foreach.cs:5:29:5:32 | access to parameter args | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:6:13:6:13 | ; | Foreach.cs:5:9:6:13 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:9:10:9:11 | enter M2 | Foreach.cs:10:5:13:5 | {...} | semmle.label | successor |
| Foreach.cs:10:5:13:5 | {...} | Foreach.cs:11:27:11:30 | access to parameter args | semmle.label | successor |
| Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | Foreach.cs:9:10:9:11 | exit M2 | semmle.label | empty |
| Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | Foreach.cs:12:13:12:13 | ; | semmle.label | non-empty |
| Foreach.cs:11:27:11:30 | access to parameter args | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:12:13:12:13 | ; | Foreach.cs:11:9:12:13 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:6:10:6:11 | enter M1 | Foreach.cs:7:5:10:5 | {...} | semmle.label | successor |
| Foreach.cs:7:5:10:5 | {...} | Foreach.cs:8:29:8:32 | access to parameter args | semmle.label | successor |
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:6:10:6:11 | exit M1 | semmle.label | empty |
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:8:22:8:24 | String arg | semmle.label | non-empty |
| Foreach.cs:8:22:8:24 | String arg | Foreach.cs:9:13:9:13 | ; | semmle.label | successor |
| Foreach.cs:8:29:8:32 | access to parameter args | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:9:13:9:13 | ; | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:12:10:12:11 | enter M2 | Foreach.cs:13:5:16:5 | {...} | semmle.label | successor |
| Foreach.cs:13:5:16:5 | {...} | Foreach.cs:14:27:14:30 | access to parameter args | semmle.label | successor |
| Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:12:10:12:11 | exit M2 | semmle.label | empty |
| Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | Foreach.cs:15:13:15:13 | ; | semmle.label | non-empty |
| Foreach.cs:14:27:14:30 | access to parameter args | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:15:13:15:13 | ; | Foreach.cs:14:9:15:13 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:18:10:18:11 | enter M3 | Foreach.cs:19:5:22:5 | {...} | semmle.label | successor |
| Foreach.cs:19:5:22:5 | {...} | Foreach.cs:20:27:20:68 | ... ?? ... | semmle.label | successor |
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:18:10:18:11 | exit M3 | semmle.label | empty |
| Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | Foreach.cs:20:22:20:22 | String x | semmle.label | non-empty |
| Foreach.cs:20:22:20:22 | String x | Foreach.cs:21:11:21:11 | ; | semmle.label | successor |
| Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:20:29:20:38 | call to method ToArray | semmle.label | non-null |
| Foreach.cs:20:27:20:27 | access to parameter e | Foreach.cs:20:43:20:68 | call to method Empty | semmle.label | null |
| Foreach.cs:20:27:20:68 | ... ?? ... | Foreach.cs:20:27:20:27 | access to parameter e | semmle.label | successor |
| Foreach.cs:20:29:20:38 | call to method ToArray | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | semmle.label | non-null |
| Foreach.cs:20:29:20:38 | call to method ToArray | Foreach.cs:20:43:20:68 | call to method Empty | semmle.label | null |
| Foreach.cs:20:43:20:68 | call to method Empty | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | semmle.label | successor |
| Foreach.cs:21:11:21:11 | ; | Foreach.cs:20:9:21:11 | foreach (... ... in ...) ... | semmle.label | successor |
| Initializers.cs:6:5:6:16 | enter Initializers | Initializers.cs:6:28:6:30 | {...} | semmle.label | successor |
| Initializers.cs:6:28:6:30 | {...} | Initializers.cs:6:5:6:16 | exit Initializers | semmle.label | successor |
| Initializers.cs:8:10:8:10 | enter M | Initializers.cs:9:5:12:5 | {...} | semmle.label | successor |
@@ -460,9 +491,7 @@
| NullCoalescing.cs:9:45:9:45 | access to parameter s | NullCoalescing.cs:9:12:9:13 | exit M4 | semmle.label | non-null |
| NullCoalescing.cs:9:45:9:45 | access to parameter s | NullCoalescing.cs:9:51:9:58 | ... ?? ... | semmle.label | null |
| NullCoalescing.cs:9:51:9:52 | "" | NullCoalescing.cs:9:12:9:13 | exit M4 | semmle.label | non-null |
| NullCoalescing.cs:9:51:9:52 | "" | NullCoalescing.cs:9:57:9:58 | "" | semmle.label | null |
| NullCoalescing.cs:9:51:9:58 | ... ?? ... | NullCoalescing.cs:9:51:9:52 | "" | semmle.label | successor |
| NullCoalescing.cs:9:57:9:58 | "" | NullCoalescing.cs:9:12:9:13 | exit M4 | semmle.label | successor |
| NullCoalescing.cs:11:9:11:10 | enter M5 | NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | semmle.label | successor |
| NullCoalescing.cs:11:43:11:68 | ... ? ... : ... | NullCoalescing.cs:11:44:11:59 | ... ?? ... | semmle.label | successor |
| NullCoalescing.cs:11:44:11:45 | access to parameter b1 | NullCoalescing.cs:11:51:11:58 | ... && ... | semmle.label | null |
@@ -476,6 +505,26 @@
| NullCoalescing.cs:11:57:11:58 | access to parameter b3 | NullCoalescing.cs:11:68:11:68 | 1 | semmle.label | false |
| NullCoalescing.cs:11:64:11:64 | 0 | NullCoalescing.cs:11:9:11:10 | exit M5 | semmle.label | successor |
| NullCoalescing.cs:11:68:11:68 | 1 | NullCoalescing.cs:11:9:11:10 | exit M5 | semmle.label | successor |
| NullCoalescing.cs:13:10:13:11 | enter M6 | NullCoalescing.cs:14:5:18:5 | {...} | semmle.label | successor |
| NullCoalescing.cs:14:5:18:5 | {...} | NullCoalescing.cs:15:9:15:32 | ... ...; | semmle.label | successor |
| NullCoalescing.cs:15:9:15:32 | ... ...; | NullCoalescing.cs:15:13:15:13 | access to local variable j | semmle.label | successor |
| NullCoalescing.cs:15:13:15:13 | access to local variable j | NullCoalescing.cs:15:17:15:31 | ... ?? ... | semmle.label | successor |
| NullCoalescing.cs:15:13:15:31 | Int32 j = ... | NullCoalescing.cs:16:9:16:26 | ... ...; | semmle.label | successor |
| NullCoalescing.cs:15:17:15:26 | (...) ... | NullCoalescing.cs:15:31:15:31 | 0 | semmle.label | null |
| NullCoalescing.cs:15:17:15:31 | ... ?? ... | NullCoalescing.cs:15:23:15:26 | null | semmle.label | successor |
| NullCoalescing.cs:15:23:15:26 | null | NullCoalescing.cs:15:17:15:26 | (...) ... | semmle.label | successor |
| NullCoalescing.cs:15:31:15:31 | 0 | NullCoalescing.cs:15:13:15:31 | Int32 j = ... | semmle.label | successor |
| NullCoalescing.cs:16:9:16:26 | ... ...; | NullCoalescing.cs:16:13:16:13 | access to local variable s | semmle.label | successor |
| NullCoalescing.cs:16:13:16:13 | access to local variable s | NullCoalescing.cs:16:17:16:25 | ... ?? ... | semmle.label | successor |
| NullCoalescing.cs:16:13:16:25 | String s = ... | NullCoalescing.cs:17:9:17:25 | ...; | semmle.label | successor |
| NullCoalescing.cs:16:17:16:18 | "" | NullCoalescing.cs:16:13:16:25 | String s = ... | semmle.label | non-null |
| NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:16:17:16:18 | "" | semmle.label | successor |
| NullCoalescing.cs:17:9:17:9 | access to local variable j | NullCoalescing.cs:17:13:17:24 | ... ?? ... | semmle.label | successor |
| NullCoalescing.cs:17:9:17:24 | ... = ... | NullCoalescing.cs:13:10:13:11 | exit M6 | semmle.label | successor |
| NullCoalescing.cs:17:9:17:25 | ...; | NullCoalescing.cs:17:9:17:9 | access to local variable j | semmle.label | successor |
| NullCoalescing.cs:17:13:17:19 | (...) ... | NullCoalescing.cs:17:9:17:24 | ... = ... | semmle.label | non-null |
| NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:17:19:17:19 | access to parameter i | semmle.label | successor |
| NullCoalescing.cs:17:19:17:19 | access to parameter i | NullCoalescing.cs:17:13:17:19 | (...) ... | semmle.label | successor |
| Patterns.cs:5:10:5:13 | enter Test | Patterns.cs:6:5:43:5 | {...} | semmle.label | successor |
| Patterns.cs:6:5:43:5 | {...} | Patterns.cs:7:9:7:24 | ... ...; | semmle.label | successor |
| Patterns.cs:7:9:7:24 | ... ...; | Patterns.cs:7:16:7:16 | access to local variable o | semmle.label | successor |
@@ -717,9 +766,83 @@
| Switch.cs:50:30:50:38 | ... != ... | Switch.cs:51:17:51:22 | break; | semmle.label | true |
| Switch.cs:50:35:50:38 | null | Switch.cs:50:30:50:38 | ... != ... | semmle.label | successor |
| Switch.cs:51:17:51:22 | break; | Switch.cs:44:10:44:11 | exit M4 | semmle.label | break |
| Switch.cs:55:17:55:21 | enter Throw | Switch.cs:55:34:55:48 | object creation of type Exception | semmle.label | successor |
| Switch.cs:55:28:55:48 | throw ... | Switch.cs:55:17:55:21 | exit Throw | semmle.label | exception(Exception) |
| Switch.cs:55:34:55:48 | object creation of type Exception | Switch.cs:55:28:55:48 | throw ... | semmle.label | successor |
| Switch.cs:55:10:55:11 | enter M5 | Switch.cs:56:5:64:5 | {...} | semmle.label | successor |
| Switch.cs:56:5:64:5 | {...} | Switch.cs:57:9:63:9 | switch (...) {...} | semmle.label | successor |
| Switch.cs:57:9:63:9 | switch (...) {...} | Switch.cs:57:17:57:17 | 1 | semmle.label | successor |
| Switch.cs:57:17:57:17 | 1 | Switch.cs:57:21:57:21 | 2 | semmle.label | successor |
| Switch.cs:57:17:57:21 | ... + ... | Switch.cs:59:13:59:20 | case ...: | semmle.label | successor |
| Switch.cs:57:21:57:21 | 2 | Switch.cs:57:17:57:21 | ... + ... | semmle.label | successor |
| Switch.cs:59:13:59:20 | case ...: | Switch.cs:59:18:59:18 | 2 | semmle.label | successor |
| Switch.cs:59:18:59:18 | 2 | Switch.cs:61:13:61:20 | case ...: | semmle.label | no-match |
| Switch.cs:61:13:61:20 | case ...: | Switch.cs:61:18:61:18 | 3 | semmle.label | successor |
| Switch.cs:61:18:61:18 | 3 | Switch.cs:62:15:62:20 | break; | semmle.label | match |
| Switch.cs:62:15:62:20 | break; | Switch.cs:55:10:55:11 | exit M5 | semmle.label | break |
| Switch.cs:66:10:66:11 | enter M6 | Switch.cs:67:5:75:5 | {...} | semmle.label | successor |
| Switch.cs:67:5:75:5 | {...} | Switch.cs:68:9:74:9 | switch (...) {...} | semmle.label | successor |
| Switch.cs:68:9:74:9 | switch (...) {...} | Switch.cs:68:25:68:25 | access to parameter s | semmle.label | successor |
| Switch.cs:68:17:68:25 | (...) ... | Switch.cs:70:13:70:24 | case Int32: | semmle.label | successor |
| Switch.cs:68:25:68:25 | access to parameter s | Switch.cs:68:17:68:25 | (...) ... | semmle.label | successor |
| Switch.cs:70:13:70:24 | case Int32: | Switch.cs:70:18:70:20 | access to type Int32 | semmle.label | successor |
| Switch.cs:70:18:70:20 | access to type Int32 | Switch.cs:72:13:72:21 | case ...: | semmle.label | no-match |
| Switch.cs:72:13:72:21 | case ...: | Switch.cs:72:18:72:19 | "" | semmle.label | successor |
| Switch.cs:72:18:72:19 | "" | Switch.cs:66:10:66:11 | exit M6 | semmle.label | no-match |
| Switch.cs:72:18:72:19 | "" | Switch.cs:73:15:73:20 | break; | semmle.label | match |
| Switch.cs:73:15:73:20 | break; | Switch.cs:66:10:66:11 | exit M6 | semmle.label | break |
| Switch.cs:77:10:77:11 | enter M7 | Switch.cs:78:5:89:5 | {...} | semmle.label | successor |
| Switch.cs:78:5:89:5 | {...} | Switch.cs:79:9:87:9 | switch (...) {...} | semmle.label | successor |
| Switch.cs:79:9:87:9 | switch (...) {...} | Switch.cs:79:17:79:17 | access to parameter i | semmle.label | successor |
| Switch.cs:79:17:79:17 | access to parameter i | Switch.cs:81:13:81:20 | case ...: | semmle.label | successor |
| Switch.cs:81:13:81:20 | case ...: | Switch.cs:81:18:81:18 | 1 | semmle.label | successor |
| Switch.cs:81:18:81:18 | 1 | Switch.cs:82:22:82:25 | true | semmle.label | match |
| Switch.cs:81:18:81:18 | 1 | Switch.cs:83:13:83:20 | case ...: | semmle.label | no-match |
| Switch.cs:82:15:82:26 | return ...; | Switch.cs:77:10:77:11 | exit M7 | semmle.label | return |
| Switch.cs:82:22:82:25 | true | Switch.cs:82:15:82:26 | return ...; | semmle.label | successor |
| Switch.cs:83:13:83:20 | case ...: | Switch.cs:83:18:83:18 | 2 | semmle.label | successor |
| Switch.cs:83:18:83:18 | 2 | Switch.cs:84:15:85:22 | if (...) ... | semmle.label | match |
| Switch.cs:83:18:83:18 | 2 | Switch.cs:88:16:88:20 | false | semmle.label | no-match |
| Switch.cs:84:15:85:22 | if (...) ... | Switch.cs:84:19:84:19 | access to parameter j | semmle.label | successor |
| Switch.cs:84:19:84:19 | access to parameter j | Switch.cs:84:23:84:23 | 2 | semmle.label | successor |
| Switch.cs:84:19:84:23 | ... > ... | Switch.cs:85:17:85:22 | break; | semmle.label | true |
| Switch.cs:84:19:84:23 | ... > ... | Switch.cs:86:22:86:25 | true | semmle.label | false |
| Switch.cs:84:23:84:23 | 2 | Switch.cs:84:19:84:23 | ... > ... | semmle.label | successor |
| Switch.cs:85:17:85:22 | break; | Switch.cs:88:16:88:20 | false | semmle.label | break |
| Switch.cs:86:15:86:26 | return ...; | Switch.cs:77:10:77:11 | exit M7 | semmle.label | return |
| Switch.cs:86:22:86:25 | true | Switch.cs:86:15:86:26 | return ...; | semmle.label | successor |
| Switch.cs:88:9:88:21 | return ...; | Switch.cs:77:10:77:11 | exit M7 | semmle.label | return |
| Switch.cs:88:16:88:20 | false | Switch.cs:88:9:88:21 | return ...; | semmle.label | successor |
| Switch.cs:91:10:91:11 | enter M8 | Switch.cs:92:5:99:5 | {...} | semmle.label | successor |
| Switch.cs:92:5:99:5 | {...} | Switch.cs:93:9:97:9 | switch (...) {...} | semmle.label | successor |
| Switch.cs:93:9:97:9 | switch (...) {...} | Switch.cs:93:17:93:17 | access to parameter o | semmle.label | successor |
| Switch.cs:93:17:93:17 | access to parameter o | Switch.cs:95:13:95:24 | case Int32: | semmle.label | successor |
| Switch.cs:95:13:95:24 | case Int32: | Switch.cs:95:18:95:20 | access to type Int32 | semmle.label | successor |
| Switch.cs:95:18:95:20 | access to type Int32 | Switch.cs:96:22:96:25 | true | semmle.label | match |
| Switch.cs:95:18:95:20 | access to type Int32 | Switch.cs:98:16:98:20 | false | semmle.label | no-match |
| Switch.cs:96:15:96:26 | return ...; | Switch.cs:91:10:91:11 | exit M8 | semmle.label | return |
| Switch.cs:96:22:96:25 | true | Switch.cs:96:15:96:26 | return ...; | semmle.label | successor |
| Switch.cs:98:9:98:21 | return ...; | Switch.cs:91:10:91:11 | exit M8 | semmle.label | return |
| Switch.cs:98:16:98:20 | false | Switch.cs:98:9:98:21 | return ...; | semmle.label | successor |
| Switch.cs:101:9:101:10 | enter M9 | Switch.cs:102:5:109:5 | {...} | semmle.label | successor |
| Switch.cs:102:5:109:5 | {...} | Switch.cs:103:9:107:9 | switch (...) {...} | semmle.label | successor |
| Switch.cs:103:9:107:9 | switch (...) {...} | Switch.cs:103:17:103:17 | access to parameter s | semmle.label | successor |
| Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:103:19:103:25 | access to property Length | semmle.label | non-null |
| Switch.cs:103:17:103:17 | access to parameter s | Switch.cs:105:13:105:20 | case ...: | semmle.label | null |
| Switch.cs:103:19:103:25 | access to property Length | Switch.cs:105:13:105:20 | case ...: | semmle.label | successor |
| Switch.cs:105:13:105:20 | case ...: | Switch.cs:105:18:105:18 | 0 | semmle.label | successor |
| Switch.cs:105:18:105:18 | 0 | Switch.cs:105:29:105:29 | 0 | semmle.label | match |
| Switch.cs:105:18:105:18 | 0 | Switch.cs:106:13:106:20 | case ...: | semmle.label | no-match |
| Switch.cs:105:22:105:30 | return ...; | Switch.cs:101:9:101:10 | exit M9 | semmle.label | return |
| Switch.cs:105:29:105:29 | 0 | Switch.cs:105:22:105:30 | return ...; | semmle.label | successor |
| Switch.cs:106:13:106:20 | case ...: | Switch.cs:106:18:106:18 | 1 | semmle.label | successor |
| Switch.cs:106:18:106:18 | 1 | Switch.cs:106:29:106:29 | 1 | semmle.label | match |
| Switch.cs:106:18:106:18 | 1 | Switch.cs:108:17:108:17 | 1 | semmle.label | no-match |
| Switch.cs:106:22:106:30 | return ...; | Switch.cs:101:9:101:10 | exit M9 | semmle.label | return |
| Switch.cs:106:29:106:29 | 1 | Switch.cs:106:22:106:30 | return ...; | semmle.label | successor |
| Switch.cs:108:9:108:18 | return ...; | Switch.cs:101:9:101:10 | exit M9 | semmle.label | return |
| Switch.cs:108:16:108:17 | -... | Switch.cs:108:9:108:18 | return ...; | semmle.label | successor |
| Switch.cs:108:17:108:17 | 1 | Switch.cs:108:16:108:17 | -... | semmle.label | successor |
| Switch.cs:111:17:111:21 | enter Throw | Switch.cs:111:34:111:48 | object creation of type Exception | semmle.label | successor |
| Switch.cs:111:28:111:48 | throw ... | Switch.cs:111:17:111:21 | exit Throw | semmle.label | exception(Exception) |
| Switch.cs:111:34:111:48 | object creation of type Exception | Switch.cs:111:28:111:48 | throw ... | semmle.label | successor |
| TypeAccesses.cs:3:10:3:10 | enter M | TypeAccesses.cs:4:5:9:5 | {...} | semmle.label | successor |
| TypeAccesses.cs:4:5:9:5 | {...} | TypeAccesses.cs:5:9:5:26 | ... ...; | semmle.label | successor |
| TypeAccesses.cs:5:9:5:26 | ... ...; | TypeAccesses.cs:5:13:5:13 | access to local variable s | semmle.label | successor |
@@ -909,6 +1032,7 @@
| cflow.cs:46:27:46:27 | 1 | cflow.cs:46:17:46:28 | goto case ...; | semmle.label | successor |
| cflow.cs:47:13:47:19 | case ...: | cflow.cs:47:18:47:18 | 3 | semmle.label | successor |
| cflow.cs:47:18:47:18 | 3 | cflow.cs:48:17:48:39 | ...; | semmle.label | match |
| cflow.cs:47:18:47:18 | 3 | cflow.cs:51:9:59:9 | switch (...) {...} | semmle.label | no-match |
| cflow.cs:48:17:48:38 | call to method WriteLine | cflow.cs:49:17:49:22 | break; | semmle.label | successor |
| cflow.cs:48:17:48:39 | ...; | cflow.cs:48:35:48:37 | "3" | semmle.label | successor |
| cflow.cs:48:35:48:37 | "3" | cflow.cs:48:17:48:38 | call to method WriteLine | semmle.label | successor |
@@ -933,6 +1057,7 @@
| cflow.cs:60:27:60:31 | this access | cflow.cs:60:27:60:31 | access to field Field | semmle.label | successor |
| cflow.cs:62:13:62:19 | case ...: | cflow.cs:62:18:62:18 | 0 | semmle.label | successor |
| cflow.cs:62:18:62:18 | 0 | cflow.cs:63:17:64:55 | if (...) ... | semmle.label | match |
| cflow.cs:62:18:62:18 | 0 | cflow.cs:67:16:67:16 | access to parameter a | semmle.label | no-match |
| cflow.cs:63:17:64:55 | if (...) ... | cflow.cs:63:21:63:34 | !... | semmle.label | successor |
| cflow.cs:63:21:63:34 | !... | cflow.cs:63:23:63:27 | this access | semmle.label | successor |
| cflow.cs:63:23:63:27 | access to field Field | cflow.cs:63:32:63:33 | "" | semmle.label | successor |

View File

@@ -9,4 +9,11 @@ class NullCoalescing
string M4(bool b, string s) => (b ? s : s) ?? "" ?? "";
int M5(bool? b1, bool b2, bool b3) => (b1 ?? (b2 && b3)) ? 0 : 1;
void M6(int i)
{
var j = (int?)null ?? 0;
var s = "" ?? "a";
j = (int?)i ?? 1;
}
}

View File

@@ -52,5 +52,61 @@ class Switch
}
}
void M5()
{
switch (1 + 2)
{
case 2 :
break;
case 3 :
break;
}
}
void M6(string s)
{
switch ((object)s)
{
case int _ :
break;
case "" :
break;
}
}
bool M7(int i, int j)
{
switch (i)
{
case 1 :
return true;
case 2 :
if (j > 2)
break;
return true;
}
return false;
}
bool M8(object o)
{
switch (o)
{
case int _ :
return true;
}
return false;
}
int M9(string s)
{
switch (s?.Length)
{
case 0 : return 0;
case 1 : return 1;
}
return -1;
}
static bool Throw() => throw new Exception();
}

View File

@@ -1,6 +1,7 @@
// semmle-extractor-options: /r:System.Threading.Thread.dll /r:System.Diagnostics.Debug.dll
using System;
using System.Collections;
using System.Diagnostics;
class ConstantCondition
@@ -32,6 +33,62 @@ class ConstantCondition
bool M3(double d) => d == d; // BAD: but flagged by cs/constant-comparison
}
class ConstantNullness
{
void M1(int i)
{
var j = ((string)null)?.Length; // BAD
var s = ((int?)i)?.ToString(); // BAD
var k = s?.Length; // GOOD
k = s?.ToLower()?.Length; // GOOD
}
void M2(int i)
{
var j = (int?)null ?? 0; // BAD
var s = "" ?? "a"; // BAD
j = (int?)i ?? 1; // BAD
s = ""?.CommaJoinWith(s); // BAD
s = s ?? ""; // GOOD
}
}
class ConstantMatching
{
void M1()
{
switch (1 + 2)
{
case 2 : // BAD
break;
case 3 : // BAD
break;
case int _ : // GOOD
break;
}
}
void M2(string s)
{
switch ((object)s)
{
case int _ : // BAD
break;
case "" : // GOOD
break;
}
}
void M3(object o)
{
switch (o)
{
case IList _ : // GOOD
break;
}
}
}
class Assertions
{
void F()
@@ -39,3 +96,8 @@ class Assertions
Debug.Assert(false ? false : true); // GOOD
}
}
static class Ext
{
public static string CommaJoinWith(this string s1, string s2) => s1 + ", " + s2;
}

View File

@@ -1,3 +1,12 @@
| ConstantCondition.cs:40:18:40:29 | (...) ... | Expression is always 'null'. |
| ConstantCondition.cs:41:18:41:24 | (...) ... | Expression is never 'null'. |
| ConstantCondition.cs:48:17:48:26 | (...) ... | Expression is always 'null'. |
| ConstantCondition.cs:49:17:49:18 | "" | Expression is never 'null'. |
| ConstantCondition.cs:50:13:50:19 | (...) ... | Expression is never 'null'. |
| ConstantCondition.cs:51:13:51:14 | "" | Expression is never 'null'. |
| ConstantCondition.cs:62:18:62:18 | 2 | Pattern never matches. |
| ConstantCondition.cs:64:18:64:18 | 3 | Pattern always matches. |
| ConstantCondition.cs:75:18:75:20 | access to type Int32 | Pattern never matches. |
| ConstantConditionBad.cs:5:16:5:20 | ... > ... | Condition always evaluates to 'false'. |
| ConstantConditionalExpressionCondition.cs:11:22:11:34 | ... == ... | Condition always evaluates to 'true'. |
| ConstantConditionalExpressionCondition.cs:12:21:12:25 | false | Condition always evaluates to 'false'. |
@@ -7,6 +16,8 @@
| ConstantIfCondition.cs:11:17:11:29 | ... == ... | Condition always evaluates to 'true'. |
| ConstantIfCondition.cs:14:17:14:21 | false | Condition always evaluates to 'false'. |
| ConstantIfCondition.cs:17:17:17:26 | ... == ... | Condition always evaluates to 'true'. |
| ConstantNullCoalescingLeftHandOperand.cs:11:24:11:34 | access to constant NULL_OBJECT | Expression is never 'null'. |
| ConstantNullCoalescingLeftHandOperand.cs:12:24:12:27 | null | Expression is always 'null'. |
| ConstantWhileCondition.cs:12:20:12:32 | ... == ... | Condition always evaluates to 'true'. |
| ConstantWhileCondition.cs:16:20:16:24 | false | Condition always evaluates to 'false'. |
| ConstantWhileCondition.cs:24:20:24:29 | ... == ... | Condition always evaluates to 'true'. |