Merge pull request #20300 from aschackmull/cfg/successortype

Shared: Add a shared SuccessorType implementation
This commit is contained in:
Anders Schack-Mulligen
2025-09-02 14:09:35 +02:00
committed by GitHub
75 changed files with 2472 additions and 4366 deletions

View File

@@ -3,6 +3,8 @@ private import codeql.controlflow.Cfg as CfgShared
private import codeql.Locations private import codeql.Locations
module Completion { module Completion {
import codeql.controlflow.SuccessorType
private newtype TCompletion = private newtype TCompletion =
TSimpleCompletion() or TSimpleCompletion() or
TBooleanCompletion(boolean b) { b in [false, true] } or TBooleanCompletion(boolean b) { b in [false, true] } or
@@ -25,7 +27,7 @@ module Completion {
override predicate isValidFor(AstNode e) { not any(Completion c).isValidForSpecific(e) } override predicate isValidFor(AstNode e) { not any(Completion c).isValidForSpecific(e) }
override NormalSuccessor getAMatchingSuccessorType() { any() } override DirectSuccessor getAMatchingSuccessorType() { any() }
} }
class BooleanCompletion extends NormalCompletion, TBooleanCompletion { class BooleanCompletion extends NormalCompletion, TBooleanCompletion {
@@ -49,34 +51,6 @@ module Completion {
override ReturnSuccessor getAMatchingSuccessorType() { any() } override ReturnSuccessor getAMatchingSuccessorType() { any() }
} }
cached
private newtype TSuccessorType =
TNormalSuccessor() or
TBooleanSuccessor(boolean b) { b in [false, true] } or
TReturnSuccessor()
class SuccessorType extends TSuccessorType {
string toString() { none() }
}
class NormalSuccessor extends SuccessorType, TNormalSuccessor {
override string toString() { result = "successor" }
}
class BooleanSuccessor extends SuccessorType, TBooleanSuccessor {
boolean value;
BooleanSuccessor() { this = TBooleanSuccessor(value) }
override string toString() { result = value.toString() }
boolean getValue() { result = value }
}
class ReturnSuccessor extends SuccessorType, TReturnSuccessor {
override string toString() { result = "return" }
}
} }
module CfgScope { module CfgScope {
@@ -127,14 +101,8 @@ private module Implementation implements CfgShared::InputSig<Location> {
last(scope.(CompositeAction), e, c) last(scope.(CompositeAction), e, c)
} }
predicate successorTypeIsSimple(SuccessorType t) { t instanceof NormalSuccessor }
predicate successorTypeIsCondition(SuccessorType t) { t instanceof BooleanSuccessor }
SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() } SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() }
predicate isAbnormalExitType(SuccessorType t) { none() }
int idOfAstNode(AstNode node) { none() } int idOfAstNode(AstNode node) { none() }
int idOfCfgScope(CfgScope scope) { none() } int idOfCfgScope(CfgScope scope) { none() }

View File

@@ -2,6 +2,7 @@
* Provides classes that specify the conditions under which control flows along a given edge. * Provides classes that specify the conditions under which control flows along a given edge.
*/ */
private import codeql.controlflow.SuccessorType
private import internal.EdgeKindInternal private import internal.EdgeKindInternal
private newtype TEdgeKind = private newtype TEdgeKind =
@@ -28,6 +29,21 @@ abstract private class EdgeKindImpl extends TEdgeKind {
final class EdgeKind = EdgeKindImpl; final class EdgeKind = EdgeKindImpl;
private SuccessorType getAMatchingSpecificSuccessorType(EdgeKind k) {
result.(BooleanSuccessor).getValue() = true and k instanceof TrueEdge
or
result.(BooleanSuccessor).getValue() = false and k instanceof FalseEdge
or
result instanceof ExceptionSuccessor and k instanceof ExceptionEdge
}
SuccessorType getAMatchingSuccessorType(EdgeKind k) {
result = getAMatchingSpecificSuccessorType(k)
or
not exists(getAMatchingSpecificSuccessorType(k)) and
result instanceof DirectSuccessor
}
/** /**
* A "goto" edge, representing the unconditional successor of an `Instruction` * A "goto" edge, representing the unconditional successor of an `Instruction`
* or `IRBlock`. * or `IRBlock`.

View File

@@ -265,9 +265,9 @@ private predicate isEntryBlock(TIRBlock block) {
} }
module IRCfg implements BB::CfgSig<Language::Location> { module IRCfg implements BB::CfgSig<Language::Location> {
class ControlFlowNode = Instruction; private import codeql.controlflow.SuccessorType
class SuccessorType = EdgeKind; class ControlFlowNode = Instruction;
final private class FinalIRBlock = IRBlock; final private class FinalIRBlock = IRBlock;
@@ -280,7 +280,12 @@ module IRCfg implements BB::CfgSig<Language::Location> {
BasicBlock getASuccessor() { result = super.getASuccessor() } BasicBlock getASuccessor() { result = super.getASuccessor() }
BasicBlock getASuccessor(SuccessorType t) { result = super.getSuccessor(t) } BasicBlock getASuccessor(SuccessorType t) {
exists(EdgeKind k |
result = super.getSuccessor(k) and
t = getAMatchingSuccessorType(k)
)
}
predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) }

View File

@@ -265,9 +265,9 @@ private predicate isEntryBlock(TIRBlock block) {
} }
module IRCfg implements BB::CfgSig<Language::Location> { module IRCfg implements BB::CfgSig<Language::Location> {
class ControlFlowNode = Instruction; private import codeql.controlflow.SuccessorType
class SuccessorType = EdgeKind; class ControlFlowNode = Instruction;
final private class FinalIRBlock = IRBlock; final private class FinalIRBlock = IRBlock;
@@ -280,7 +280,12 @@ module IRCfg implements BB::CfgSig<Language::Location> {
BasicBlock getASuccessor() { result = super.getASuccessor() } BasicBlock getASuccessor() { result = super.getASuccessor() }
BasicBlock getASuccessor(SuccessorType t) { result = super.getSuccessor(t) } BasicBlock getASuccessor(SuccessorType t) {
exists(EdgeKind k |
result = super.getSuccessor(k) and
t = getAMatchingSuccessorType(k)
)
}
predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) }

View File

@@ -265,9 +265,9 @@ private predicate isEntryBlock(TIRBlock block) {
} }
module IRCfg implements BB::CfgSig<Language::Location> { module IRCfg implements BB::CfgSig<Language::Location> {
class ControlFlowNode = Instruction; private import codeql.controlflow.SuccessorType
class SuccessorType = EdgeKind; class ControlFlowNode = Instruction;
final private class FinalIRBlock = IRBlock; final private class FinalIRBlock = IRBlock;
@@ -280,7 +280,12 @@ module IRCfg implements BB::CfgSig<Language::Location> {
BasicBlock getASuccessor() { result = super.getASuccessor() } BasicBlock getASuccessor() { result = super.getASuccessor() }
BasicBlock getASuccessor(SuccessorType t) { result = super.getSuccessor(t) } BasicBlock getASuccessor(SuccessorType t) {
exists(EdgeKind k |
result = super.getSuccessor(k) and
t = getAMatchingSuccessorType(k)
)
}
predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) }

View File

@@ -10,7 +10,6 @@ module Stages {
cached cached
module ControlFlowStage { module ControlFlowStage {
private import semmle.code.csharp.controlflow.internal.Splitting private import semmle.code.csharp.controlflow.internal.Splitting
private import semmle.code.csharp.controlflow.internal.SuccessorType
private import semmle.code.csharp.controlflow.Guards as Guards private import semmle.code.csharp.controlflow.Guards as Guards
cached cached
@@ -20,8 +19,6 @@ module Stages {
private predicate forceCachingInSameStageRev() { private predicate forceCachingInSameStageRev() {
exists(Split s) exists(Split s)
or or
exists(SuccessorType st)
or
exists(ControlFlow::Node n) exists(ControlFlow::Node n)
or or
Guards::Internal::isCustomNullCheck(_, _, _, _) Guards::Internal::isCustomNullCheck(_, _, _, _)

View File

@@ -6,9 +6,7 @@ private import semmle.code.csharp.commons.StructuralComparison as StructuralComp
pragma[noinline] pragma[noinline]
private predicate isConstantCondition0(ControlFlow::Node cfn, boolean b) { private predicate isConstantCondition0(ControlFlow::Node cfn, boolean b) {
exists( exists(cfn.getASuccessorByType(any(ControlFlow::BooleanSuccessor t | t.getValue() = b))) and
cfn.getASuccessorByType(any(ControlFlow::SuccessorTypes::BooleanSuccessor t | t.getValue() = b))
) and
strictcount(ControlFlow::SuccessorType t | exists(cfn.getASuccessorByType(t))) = 1 strictcount(ControlFlow::SuccessorType t | exists(cfn.getASuccessorByType(t))) = 1
} }

View File

@@ -3,7 +3,7 @@
*/ */
import csharp import csharp
private import ControlFlow::SuccessorTypes private import ControlFlow
private import semmle.code.csharp.controlflow.internal.ControlFlowGraphImpl as CfgImpl private import semmle.code.csharp.controlflow.internal.ControlFlowGraphImpl as CfgImpl
private import CfgImpl::BasicBlocks as BasicBlocksImpl private import CfgImpl::BasicBlocks as BasicBlocksImpl
private import codeql.controlflow.BasicBlock as BB private import codeql.controlflow.BasicBlock as BB
@@ -346,8 +346,6 @@ private class EntryBasicBlockAlias = EntryBasicBlock;
module Cfg implements BB::CfgSig<Location> { module Cfg implements BB::CfgSig<Location> {
class ControlFlowNode = ControlFlow::Node; class ControlFlowNode = ControlFlow::Node;
class SuccessorType = ControlFlow::SuccessorType;
class BasicBlock = BasicBlockAlias; class BasicBlock = BasicBlockAlias;
class EntryBasicBlock = EntryBasicBlockAlias; class EntryBasicBlock = EntryBasicBlockAlias;

View File

@@ -5,7 +5,6 @@ private import semmle.code.csharp.ExprOrStmtParent
private import semmle.code.csharp.commons.Compilation private import semmle.code.csharp.commons.Compilation
private import ControlFlow private import ControlFlow
private import ControlFlow::BasicBlocks private import ControlFlow::BasicBlocks
private import SuccessorTypes
private import semmle.code.csharp.Caching private import semmle.code.csharp.Caching
private import internal.ControlFlowGraphImpl as Impl private import internal.ControlFlowGraphImpl as Impl

View File

@@ -6,7 +6,6 @@ import csharp
module ControlFlow { module ControlFlow {
private import semmle.code.csharp.controlflow.BasicBlocks as BBs private import semmle.code.csharp.controlflow.BasicBlocks as BBs
import semmle.code.csharp.controlflow.internal.SuccessorType import semmle.code.csharp.controlflow.internal.SuccessorType
private import SuccessorTypes
private import internal.ControlFlowGraphImpl as Impl private import internal.ControlFlowGraphImpl as Impl
private import internal.Splitting as Splitting private import internal.Splitting as Splitting

View File

@@ -3,7 +3,7 @@
*/ */
import csharp import csharp
private import ControlFlow::SuccessorTypes private import ControlFlow
private import semmle.code.csharp.commons.Assertions private import semmle.code.csharp.commons.Assertions
private import semmle.code.csharp.commons.ComparisonTest private import semmle.code.csharp.commons.ComparisonTest
private import semmle.code.csharp.commons.StructuralComparison as SC private import semmle.code.csharp.commons.StructuralComparison as SC
@@ -1424,6 +1424,7 @@ module Internal {
cached cached
predicate isGuard(Expr e, AbstractValue val) { predicate isGuard(Expr e, AbstractValue val) {
Stages::ControlFlowStage::forceCachingInSameStage() and
( (
e.getType() instanceof BoolType and e.getType() instanceof BoolType and
not e instanceof BoolLiteral and not e instanceof BoolLiteral and

View File

@@ -26,7 +26,6 @@ private import semmle.code.csharp.frameworks.System
private import ControlFlowGraphImpl private import ControlFlowGraphImpl
private import NonReturning private import NonReturning
private import SuccessorType private import SuccessorType
private import SuccessorTypes
private newtype TCompletion = private newtype TCompletion =
TSimpleCompletion() or TSimpleCompletion() or
@@ -573,7 +572,7 @@ abstract private class NonNestedNormalCompletion extends NormalCompletion { }
/** A simple (normal) completion. */ /** A simple (normal) completion. */
class SimpleCompletion extends NonNestedNormalCompletion, TSimpleCompletion { class SimpleCompletion extends NonNestedNormalCompletion, TSimpleCompletion {
override NormalSuccessor getAMatchingSuccessorType() { any() } override DirectSuccessor getAMatchingSuccessorType() { any() }
override string toString() { result = "normal" } override string toString() { result = "normal" }
} }
@@ -857,7 +856,7 @@ class GotoCompletion extends Completion {
/** Gets the label of the `goto` completion. */ /** Gets the label of the `goto` completion. */
string getLabel() { result = label } string getLabel() { result = label }
override GotoSuccessor getAMatchingSuccessorType() { result.getLabel() = label } override GotoSuccessor getAMatchingSuccessorType() { any() }
override string toString() { override string toString() {
// `NestedCompletion` defines `toString()` for the other case // `NestedCompletion` defines `toString()` for the other case
@@ -880,7 +879,7 @@ class ThrowCompletion extends Completion {
/** Gets the type of the exception being thrown. */ /** Gets the type of the exception being thrown. */
ExceptionClass getExceptionClass() { result = ec } ExceptionClass getExceptionClass() { result = ec }
override ExceptionSuccessor getAMatchingSuccessorType() { result.getExceptionClass() = ec } override ExceptionSuccessor getAMatchingSuccessorType() { any() }
override string toString() { override string toString() {
// `NestedCompletion` defines `toString()` for the other case // `NestedCompletion` defines `toString()` for the other case

View File

@@ -79,23 +79,10 @@ private module CfgInput implements CfgShared::InputSig<Location> {
Impl::scopeLast(scope, last, c) Impl::scopeLast(scope, last, c)
} }
class SuccessorType = ST::SuccessorType; private class SuccessorType = ST::SuccessorType;
SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() } SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() }
predicate successorTypeIsSimple(SuccessorType t) {
t instanceof ST::SuccessorTypes::NormalSuccessor
}
predicate successorTypeIsCondition(SuccessorType t) {
t instanceof ST::SuccessorTypes::ConditionalSuccessor
}
predicate isAbnormalExitType(SuccessorType t) {
t instanceof ST::SuccessorTypes::ExceptionSuccessor or
t instanceof ST::SuccessorTypes::ExitSuccessor
}
int idOfAstNode(AstNode node) { result = node.getId() } int idOfAstNode(AstNode node) { result = node.getId() }
int idOfCfgScope(CfgScope node) { result = idOfAstNode(node) } int idOfCfgScope(CfgScope node) { result = idOfAstNode(node) }

View File

@@ -150,7 +150,7 @@ class ConditionBlock extends PreBasicBlock {
} }
pragma[nomagic] pragma[nomagic]
predicate controls(PreBasicBlock controlled, Cfg::SuccessorTypes::ConditionalSuccessor s) { predicate controls(PreBasicBlock controlled, Cfg::ConditionalSuccessor s) {
exists(PreBasicBlock succ, ConditionalCompletion c | exists(PreBasicBlock succ, ConditionalCompletion c |
conditionBlockImmediatelyControls(this, succ, c) conditionBlockImmediatelyControls(this, succ, c)
| |
@@ -163,8 +163,6 @@ class ConditionBlock extends PreBasicBlock {
module PreCfg implements BB::CfgSig<Location> { module PreCfg implements BB::CfgSig<Location> {
class ControlFlowNode = ControlFlowElement; class ControlFlowNode = ControlFlowElement;
class SuccessorType = Cfg::SuccessorType;
class BasicBlock = PreBasicBlock; class BasicBlock = PreBasicBlock;
class EntryBasicBlock extends BasicBlock { class EntryBasicBlock extends BasicBlock {

View File

@@ -82,6 +82,8 @@ module PreSsa {
} }
module SsaInput implements SsaImplCommon::InputSig<Location, PreBasicBlocks::PreBasicBlock> { module SsaInput implements SsaImplCommon::InputSig<Location, PreBasicBlocks::PreBasicBlock> {
private import semmle.code.csharp.Caching
private class ExitBasicBlock extends PreBasicBlocks::PreBasicBlock { private class ExitBasicBlock extends PreBasicBlocks::PreBasicBlock {
ExitBasicBlock() { scopeLast(_, this.getLastNode(), _) } ExitBasicBlock() { scopeLast(_, this.getLastNode(), _) }
} }
@@ -124,6 +126,7 @@ module PreSsa {
predicate variableWrite( predicate variableWrite(
PreBasicBlocks::PreBasicBlock bb, int i, SourceVariable v, boolean certain PreBasicBlocks::PreBasicBlock bb, int i, SourceVariable v, boolean certain
) { ) {
Stages::ControlFlowStage::forceCachingInSameStage() and
exists(AssignableDefinition def | exists(AssignableDefinition def |
definitionAt(def, bb, i, v) and definitionAt(def, bb, i, v) and
if def.getTargetAccess().isRefArgument() then certain = false else certain = true if def.getTargetAccess().isRefArgument() then certain = false else certain = true

View File

@@ -471,7 +471,7 @@ module FinallySplitting {
* the `finally` block exits normally). * the `finally` block exits normally).
*/ */
class FinallySplitType extends Cfg::SuccessorType { class FinallySplitType extends Cfg::SuccessorType {
FinallySplitType() { not this instanceof Cfg::SuccessorTypes::ConditionalSuccessor } FinallySplitType() { not this instanceof Cfg::ConditionalSuccessor }
/** Holds if this split type matches entry into a `finally` block with completion `c`. */ /** Holds if this split type matches entry into a `finally` block with completion `c`. */
predicate isSplitForEntryCompletion(Completion c) { predicate isSplitForEntryCompletion(Completion c) {
@@ -479,7 +479,7 @@ module FinallySplitting {
then then
// If the entry into the `finally` block completes with any normal completion, // If the entry into the `finally` block completes with any normal completion,
// it simply means normal execution after the `finally` block // it simply means normal execution after the `finally` block
this instanceof Cfg::SuccessorTypes::NormalSuccessor this instanceof Cfg::DirectSuccessor
else this = c.getAMatchingSuccessorType() else this = c.getAMatchingSuccessorType()
} }
} }
@@ -533,7 +533,7 @@ module FinallySplitting {
int getNestLevel() { result = nestLevel } int getNestLevel() { result = nestLevel }
override string toString() { override string toString() {
if type instanceof Cfg::SuccessorTypes::NormalSuccessor if type instanceof Cfg::DirectSuccessor
then result = "" then result = ""
else else
if nestLevel > 0 if nestLevel > 0
@@ -617,14 +617,14 @@ module FinallySplitting {
or or
not c instanceof NormalCompletion not c instanceof NormalCompletion
or or
type instanceof Cfg::SuccessorTypes::NormalSuccessor type instanceof Cfg::DirectSuccessor
) )
else ( else (
// Finally block can exit with completion `c` inherited from try/catch // Finally block can exit with completion `c` inherited from try/catch
// block: must match this split // block: must match this split
inherited = true and inherited = true and
type = c.getAMatchingSuccessorType() and type = c.getAMatchingSuccessorType() and
not type instanceof Cfg::SuccessorTypes::NormalSuccessor not type instanceof Cfg::DirectSuccessor
) )
) )
or or
@@ -657,7 +657,7 @@ module FinallySplitting {
exists(FinallySplit outer | exists(FinallySplit outer |
outer.getNestLevel() = super.getNestLevel() - 1 and outer.getNestLevel() = super.getNestLevel() - 1 and
outer.(FinallySplitImpl).exit(pred, c, inherited) and outer.(FinallySplitImpl).exit(pred, c, inherited) and
super.getType() instanceof Cfg::SuccessorTypes::NormalSuccessor and super.getType() instanceof Cfg::DirectSuccessor and
inherited = true inherited = true
) )
} }

View File

@@ -4,329 +4,4 @@
* Provides different types of control flow successor types. * Provides different types of control flow successor types.
*/ */
import csharp import codeql.controlflow.SuccessorType
private import Completion
private import semmle.code.csharp.Caching
cached
private newtype TSuccessorType =
TSuccessorSuccessor() { Stages::ControlFlowStage::forceCachingInSameStage() } or
TBooleanSuccessor(boolean b) { b = true or b = false } or
TNullnessSuccessor(boolean isNull) { isNull = true or isNull = false } or
TMatchingSuccessor(boolean isMatch) { isMatch = true or isMatch = false } or
TEmptinessSuccessor(boolean isEmpty) { isEmpty = true or isEmpty = false } or
TReturnSuccessor() or
TBreakSuccessor() or
TContinueSuccessor() or
TGotoSuccessor(string label) { label = any(GotoStmt gs).getLabel() } or
TExceptionSuccessor(ExceptionClass ec) { exists(ThrowCompletion c | c.getExceptionClass() = ec) } or
TExitSuccessor()
/** The type of a control flow successor. */
class SuccessorType extends TSuccessorType {
/** Gets a textual representation of successor type. */
string toString() { none() }
}
/** Provides different types of control flow successor types. */
module SuccessorTypes {
/** A normal control flow successor. */
class NormalSuccessor extends SuccessorType, TSuccessorSuccessor {
override string toString() { result = "successor" }
}
/**
* A conditional control flow successor. Either a Boolean successor (`BooleanSuccessor`),
* a nullness successor (`NullnessSuccessor`), a matching successor (`MatchingSuccessor`),
* or an emptiness successor (`EmptinessSuccessor`).
*/
abstract class ConditionalSuccessor extends SuccessorType {
/** Gets the Boolean value of this successor. */
abstract boolean getValue();
}
/**
* A Boolean control flow successor.
*
* For example, this program fragment:
*
* ```csharp
* if (x < 0)
* return 0;
* else
* return 1;
* ```
*
* has a control flow graph containing Boolean successors:
*
* ```
* if
* |
* x < 0
* / \
* / \
* / \
* true false
* | \
* return 0 return 1
* ```
*/
class BooleanSuccessor extends ConditionalSuccessor, TBooleanSuccessor {
override boolean getValue() { this = TBooleanSuccessor(result) }
override string toString() { result = this.getValue().toString() }
}
/**
* A nullness control flow successor.
*
* For example, this program fragment:
*
* ```csharp
* int? M(string s) => s?.Length;
* ```
*
* has a control flow graph containing nullness successors:
*
* ```
* enter M
* |
* s
* / \
* / \
* / \
* null non-null
* \ |
* \ Length
* \ /
* \ /
* exit M
* ```
*/
class NullnessSuccessor extends ConditionalSuccessor, TNullnessSuccessor {
/** Holds if this is a `null` successor. */
predicate isNull() { this = TNullnessSuccessor(true) }
override boolean getValue() { this = TNullnessSuccessor(result) }
override string toString() { if this.isNull() then result = "null" else result = "non-null" }
}
/**
* A matching control flow successor.
*
* For example, this program fragment:
*
* ```csharp
* switch (x) {
* case 0 :
* return 0;
* default :
* return 1;
* }
* ```
*
* has a control flow graph containing matching successors:
*
* ```
* switch
* |
* x
* |
* case 0
* / \
* / \
* / \
* match no-match
* | \
* return 0 default
* |
* return 1
* ```
*/
class MatchingSuccessor extends ConditionalSuccessor, TMatchingSuccessor {
/** Holds if this is a match successor. */
predicate isMatch() { this = TMatchingSuccessor(true) }
override boolean getValue() { this = TMatchingSuccessor(result) }
override string toString() { if this.isMatch() then result = "match" else result = "no-match" }
}
/**
* An emptiness control flow successor.
*
* For example, this program fragment:
*
* ```csharp
* foreach (var arg in args)
* {
* yield return arg;
* }
* yield return "";
* ```
*
* has a control flow graph containing emptiness successors:
*
* ```
* args
* |
* foreach------<-------
* / \ \
* / \ |
* / \ |
* / \ |
* empty non-empty |
* | \ |
* yield return "" \ |
* var arg |
* | |
* yield return arg |
* \_________/
* ```
*/
class EmptinessSuccessor extends ConditionalSuccessor, TEmptinessSuccessor {
/** Holds if this is an empty successor. */
predicate isEmpty() { this = TEmptinessSuccessor(true) }
override boolean getValue() { this = TEmptinessSuccessor(result) }
override string toString() { if this.isEmpty() then result = "empty" else result = "non-empty" }
}
/**
* A `return` control flow successor.
*
* Example:
*
* ```csharp
* void M()
* {
* return;
* }
* ```
*
* The callable exit node of `M` is a `return` successor of the `return;`
* statement.
*/
class ReturnSuccessor extends SuccessorType, TReturnSuccessor {
override string toString() { result = "return" }
}
/**
* A `break` control flow successor.
*
* Example:
*
* ```csharp
* int M(int x)
* {
* while (true)
* {
* if (x++ > 10)
* break;
* }
* return x;
* }
* ```
*
* The node `return x;` is a `break` successor of the node `break;`.
*/
class BreakSuccessor extends SuccessorType, TBreakSuccessor {
override string toString() { result = "break" }
}
/**
* A `continue` control flow successor.
*
* Example:
*
* ```csharp
* int M(int x)
* {
* while (true) {
* if (x++ < 10)
* continue;
* }
* return x;
* }
* ```
*
* The node `while (true) { ... }` is a `continue` successor of the node
* `continue;`.
*/
class ContinueSuccessor extends SuccessorType, TContinueSuccessor {
override string toString() { result = "continue" }
}
/**
* A `goto` control flow successor.
*
* Example:
*
* ```csharp
* int M(int x)
* {
* while (true)
* {
* if (x++ > 10)
* goto Return;
* }
* Return: return x;
* }
* ```
*
* The node `Return: return x` is a `goto label` successor of the node
* `goto Return;`.
*/
class GotoSuccessor extends SuccessorType, TGotoSuccessor {
/** Gets the `goto` label. */
string getLabel() { this = TGotoSuccessor(result) }
override string toString() { result = "goto(" + this.getLabel() + ")" }
}
/**
* An exceptional control flow successor.
*
* Example:
*
* ```csharp
* int M(string s)
* {
* if (s == null)
* throw new ArgumentNullException(nameof(s));
* return s.Length;
* }
* ```
*
* The callable exit node of `M` is an exceptional successor (of type
* `ArgumentNullException`) of the node `throw new ArgumentNullException(nameof(s));`.
*/
class ExceptionSuccessor extends SuccessorType, TExceptionSuccessor {
/** Gets the type of exception. */
ExceptionClass getExceptionClass() { this = TExceptionSuccessor(result) }
override string toString() { result = "exception(" + this.getExceptionClass().getName() + ")" }
}
/**
* An exit control flow successor.
*
* Example:
*
* ```csharp
* int M(string s)
* {
* if (s == null)
* System.Environment.Exit(0);
* return s.Length;
* }
* ```
*
* The callable exit node of `M` is an exit successor of the node on line 4.
*/
class ExitSuccessor extends SuccessorType, TExitSuccessor {
override string toString() { result = "exit" }
}
}

View File

@@ -151,9 +151,7 @@ private predicate exprImpliesSsaDef(
* If the returned element takes the `s` branch, then `def` is guaranteed to be * If the returned element takes the `s` branch, then `def` is guaranteed to be
* `null` if `nv.isNull()` holds, and non-`null` otherwise. * `null` if `nv.isNull()` holds, and non-`null` otherwise.
*/ */
private ControlFlowElement getANullCheck( private ControlFlowElement getANullCheck(Ssa::Definition def, ConditionalSuccessor s, NullValue nv) {
Ssa::Definition def, SuccessorTypes::ConditionalSuccessor s, NullValue nv
) {
exists(Expr e, G::AbstractValue v | v.branch(result, s, e) | exprImpliesSsaDef(e, v, def, nv)) exists(Expr e, G::AbstractValue v | v.branch(result, s, e) | exprImpliesSsaDef(e, v, def, nv))
} }
@@ -294,7 +292,7 @@ private predicate defNullImpliesStep(
bb2 = phi.getBasicBlock() bb2 = phi.getBasicBlock()
) )
) and ) and
not exists(SuccessorTypes::ConditionalSuccessor s, NullValue nv | not exists(ConditionalSuccessor s, NullValue nv |
bb1.getLastNode() = getANullCheck(def1, s, nv).getAControlFlowNode() bb1.getLastNode() = getANullCheck(def1, s, nv).getAControlFlowNode()
| |
bb2 = bb1.getASuccessor(s) and bb2 = bb1.getASuccessor(s) and

View File

@@ -28,7 +28,7 @@ module BaseSsa {
private predicate implicitEntryDef( private predicate implicitEntryDef(
Callable c, ControlFlow::BasicBlocks::EntryBlock bb, SsaInput::SourceVariable v Callable c, ControlFlow::BasicBlocks::EntryBlock bb, SsaInput::SourceVariable v
) { ) {
exists(ControlFlow::ControlFlow::BasicBlocks::EntryBlock entry | exists(ControlFlow::BasicBlocks::EntryBlock entry |
c = entry.getCallable() and c = entry.getCallable() and
// In case `c` has multiple bodies, we want each body to get its own implicit // In case `c` has multiple bodies, we want each body to get its own implicit
// entry definition. In case `c` doesn't have multiple bodies, the line below // entry definition. In case `c` doesn't have multiple bodies, the line below

View File

@@ -2583,9 +2583,7 @@ class NodeRegion instanceof ControlFlow::BasicBlock {
* Holds if the nodes in `nr` are unreachable when the call context is `call`. * Holds if the nodes in `nr` are unreachable when the call context is `call`.
*/ */
predicate isUnreachableInCall(NodeRegion nr, DataFlowCall call) { predicate isUnreachableInCall(NodeRegion nr, DataFlowCall call) {
exists( exists(ExplicitParameterNode paramNode, Guard guard, ControlFlow::BooleanSuccessor bs |
ExplicitParameterNode paramNode, Guard guard, ControlFlow::SuccessorTypes::BooleanSuccessor bs
|
viableConstantBooleanParamArg(paramNode, bs.getValue().booleanNot(), call) and viableConstantBooleanParamArg(paramNode, bs.getValue().booleanNot(), call) and
paramNode.getSsaDefinition().getARead() = guard and paramNode.getSsaDefinition().getARead() = guard and
guard.controlsBlock(nr, bs, _) guard.controlsBlock(nr, bs, _)

View File

@@ -818,8 +818,8 @@ private module Cached {
} }
cached cached
predicate implicitEntryDefinition(ControlFlow::ControlFlow::BasicBlock bb, Ssa::SourceVariable v) { predicate implicitEntryDefinition(ControlFlow::BasicBlock bb, Ssa::SourceVariable v) {
exists(ControlFlow::ControlFlow::BasicBlocks::EntryBlock entry, Callable c | exists(ControlFlow::BasicBlocks::EntryBlock entry, Callable c |
c = entry.getCallable() and c = entry.getCallable() and
// In case `c` has multiple bodies, we want each body to get its own implicit // In case `c` has multiple bodies, we want each body to get its own implicit
// entry definition. In case `c` doesn't have multiple bodies, the line below // entry definition. In case `c` doesn't have multiple bodies, the line below
@@ -1045,7 +1045,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu
* from `bb1` to `bb2`. * from `bb1` to `bb2`.
*/ */
predicate hasValueBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue branch) { predicate hasValueBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue branch) {
exists(ControlFlow::SuccessorTypes::ConditionalSuccessor s | exists(ControlFlow::ConditionalSuccessor s |
this.getAControlFlowNode() = bb1.getLastNode() and this.getAControlFlowNode() = bb1.getLastNode() and
bb2 = bb1.getASuccessor(s) and bb2 = bb1.getASuccessor(s) and
s.getValue() = branch s.getValue() = branch
@@ -1064,7 +1064,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu
/** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */ /** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */
predicate guardDirectlyControlsBlock(Guard guard, ControlFlow::BasicBlock bb, GuardValue branch) { predicate guardDirectlyControlsBlock(Guard guard, ControlFlow::BasicBlock bb, GuardValue branch) {
exists(ConditionBlock conditionBlock, ControlFlow::SuccessorTypes::ConditionalSuccessor s | exists(ConditionBlock conditionBlock, ControlFlow::ConditionalSuccessor s |
guard.getAControlFlowNode() = conditionBlock.getLastNode() and guard.getAControlFlowNode() = conditionBlock.getLastNode() and
s.getValue() = branch and s.getValue() = branch and
conditionBlock.edgeDominates(bb, s) conditionBlock.edgeDominates(bb, s)

View File

@@ -74,7 +74,7 @@ class ReverseDnsSource extends Source {
pragma[noinline] pragma[noinline]
private predicate conditionControlsCall0( private predicate conditionControlsCall0(
SensitiveExecutionMethodCall call, Expr e, ControlFlow::SuccessorTypes::BooleanSuccessor s SensitiveExecutionMethodCall call, Expr e, ControlFlow::BooleanSuccessor s
) { ) {
forex(BasicBlock bb | bb = call.getAControlFlowNode().getBasicBlock() | e.controlsBlock(bb, s, _)) forex(BasicBlock bb | bb = call.getAControlFlowNode().getBasicBlock() | e.controlsBlock(bb, s, _))
} }
@@ -82,9 +82,7 @@ private predicate conditionControlsCall0(
private predicate conditionControlsCall( private predicate conditionControlsCall(
SensitiveExecutionMethodCall call, SensitiveExecutionMethod def, Expr e, boolean cond SensitiveExecutionMethodCall call, SensitiveExecutionMethod def, Expr e, boolean cond
) { ) {
exists(ControlFlow::SuccessorTypes::BooleanSuccessor s | cond = s.getValue() | exists(ControlFlow::BooleanSuccessor s | cond = s.getValue() | conditionControlsCall0(call, e, s)) and
conditionControlsCall0(call, e, s)
) and
def = call.getTarget().getUnboundDeclaration() def = call.getTarget().getUnboundDeclaration()
} }

View File

@@ -89,7 +89,7 @@ class ConstantNullnessCondition extends ConstantCondition {
ConstantNullnessCondition() { ConstantNullnessCondition() {
forex(ControlFlow::Node cfn | cfn = this.getAControlFlowNode() | forex(ControlFlow::Node cfn | cfn = this.getAControlFlowNode() |
exists(ControlFlow::SuccessorTypes::NullnessSuccessor t, ControlFlow::Node s | exists(ControlFlow::NullnessSuccessor t, ControlFlow::Node s |
s = cfn.getASuccessorByType(t) s = cfn.getASuccessorByType(t)
| |
b = t.getValue() and b = t.getValue() and
@@ -112,7 +112,7 @@ class ConstantMatchingCondition extends ConstantCondition {
ConstantMatchingCondition() { ConstantMatchingCondition() {
forex(ControlFlow::Node cfn | cfn = this.getAControlFlowNode() | forex(ControlFlow::Node cfn | cfn = this.getAControlFlowNode() |
exists(ControlFlow::SuccessorTypes::MatchingSuccessor t | exists(cfn.getASuccessorByType(t)) | exists(ControlFlow::MatchingSuccessor t | exists(cfn.getASuccessorByType(t)) |
b = t.getValue() b = t.getValue()
) and ) and
strictcount(ControlFlow::SuccessorType t | exists(cfn.getASuccessorByType(t))) = 1 strictcount(ControlFlow::SuccessorType t | exists(cfn.getASuccessorByType(t))) = 1

View File

@@ -21,10 +21,10 @@ predicate loginMethod(Method m, ControlFlow::SuccessorType flowFrom) {
or or
m = any(SystemWebSecurityFormsAuthenticationClass c).getAuthenticateMethod() m = any(SystemWebSecurityFormsAuthenticationClass c).getAuthenticateMethod()
) and ) and
flowFrom.(ControlFlow::SuccessorTypes::BooleanSuccessor).getValue() = true flowFrom.(ControlFlow::BooleanSuccessor).getValue() = true
or or
m = any(SystemWebSecurityFormsAuthenticationClass c).getSignOutMethod() and m = any(SystemWebSecurityFormsAuthenticationClass c).getSignOutMethod() and
flowFrom instanceof ControlFlow::SuccessorTypes::NormalSuccessor flowFrom instanceof ControlFlow::DirectSuccessor
} }
/** The `System.Web.SessionState.HttpSessionState` class. */ /** The `System.Web.SessionState.HttpSessionState` class. */

View File

@@ -81,7 +81,7 @@
| Discards.cs:25:22:25:22 | String _ | Discards.cs:25:22:25:22 | String _ | | Discards.cs:25:22:25:22 | String _ | Discards.cs:25:22:25:22 | String _ |
| Finally.cs:7:13:7:17 | Int32 i = ... | Finally.cs:7:13:7:17 | Int32 i = ... | | Finally.cs:7:13:7:17 | Int32 i = ... | Finally.cs:7:13:7:17 | Int32 i = ... |
| Finally.cs:15:13:15:17 | ... = ... | Finally.cs:15:13:15:17 | ... = ... | | Finally.cs:15:13:15:17 | ... = ... | Finally.cs:15:13:15:17 | ... = ... |
| Finally.cs:15:13:15:17 | ... = ... | Finally.cs:15:13:15:17 | [finally: exception(Exception)] ... = ... | | Finally.cs:15:13:15:17 | ... = ... | Finally.cs:15:13:15:17 | [finally: exception] ... = ... |
| Patterns.cs:7:16:7:23 | Object o = ... | Patterns.cs:7:16:7:23 | Object o = ... | | Patterns.cs:7:16:7:23 | Object o = ... | Patterns.cs:7:16:7:23 | Object o = ... |
| Patterns.cs:8:18:8:23 | Int32 i1 | Patterns.cs:8:18:8:23 | Int32 i1 | | Patterns.cs:8:18:8:23 | Int32 i1 | Patterns.cs:8:18:8:23 | Int32 i1 |
| Patterns.cs:12:23:12:31 | String s1 | Patterns.cs:12:23:12:31 | String s1 | | Patterns.cs:12:23:12:31 | String s1 | Patterns.cs:12:23:12:31 | String s1 |

View File

@@ -435,33 +435,32 @@
| Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | exit Finally | 5 | | Finally.cs:3:14:3:20 | enter Finally | Finally.cs:3:14:3:20 | exit Finally | 5 |
| Finally.cs:7:10:7:11 | enter M1 | Finally.cs:11:13:11:37 | call to method WriteLine | 7 | | Finally.cs:7:10:7:11 | enter M1 | Finally.cs:11:13:11:37 | call to method WriteLine | 7 |
| Finally.cs:7:10:7:11 | exit M1 | Finally.cs:7:10:7:11 | exit M1 | 1 | | Finally.cs:7:10:7:11 | exit M1 | Finally.cs:7:10:7:11 | exit M1 | 1 |
| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:7:10:7:11 | exit M1 (abnormal) | 5 | | Finally.cs:14:9:16:9 | [finally: exception] {...} | Finally.cs:7:10:7:11 | exit M1 (abnormal) | 5 |
| Finally.cs:14:9:16:9 | {...} | Finally.cs:7:10:7:11 | exit M1 (normal) | 5 | | Finally.cs:14:9:16:9 | {...} | Finally.cs:7:10:7:11 | exit M1 (normal) | 5 |
| Finally.cs:19:10:19:11 | enter M2 | Finally.cs:23:13:23:37 | call to method WriteLine | 7 | | Finally.cs:19:10:19:11 | enter M2 | Finally.cs:23:13:23:37 | call to method WriteLine | 7 |
| Finally.cs:19:10:19:11 | exit M2 | Finally.cs:19:10:19:11 | exit M2 | 1 | | Finally.cs:19:10:19:11 | exit M2 | Finally.cs:19:10:19:11 | exit M2 | 1 |
| Finally.cs:19:10:19:11 | exit M2 (abnormal) | Finally.cs:19:10:19:11 | exit M2 (abnormal) | 1 |
| Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:19:10:19:11 | exit M2 (normal) | 1 | | Finally.cs:19:10:19:11 | exit M2 (normal) | Finally.cs:19:10:19:11 | exit M2 (normal) | 1 |
| Finally.cs:24:13:24:19 | return ...; | Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | 5 | | Finally.cs:24:13:24:19 | return ...; | Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | 5 |
| Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | 1 | | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | Finally.cs:26:9:29:9 | [exception: Exception] catch (...) {...} | 1 |
| Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | Finally.cs:26:48:26:51 | [exception: Exception] true | 2 | | Finally.cs:26:38:26:39 | [exception: Exception] IOException ex | Finally.cs:26:48:26:51 | [exception: Exception] true | 2 |
| Finally.cs:27:9:29:9 | {...} | Finally.cs:50:13:50:40 | [finally: exception(IOException)] call to method WriteLine | 6 | | Finally.cs:27:9:29:9 | {...} | Finally.cs:28:13:28:18 | throw ...; | 2 |
| Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | 1 | | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | Finally.cs:30:9:40:9 | [exception: Exception] catch (...) {...} | 1 |
| Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | Finally.cs:34:21:34:24 | true | 6 | | Finally.cs:30:41:30:42 | [exception: Exception] ArgumentException ex | Finally.cs:34:21:34:24 | true | 6 |
| Finally.cs:34:27:34:32 | throw ...; | Finally.cs:50:13:50:40 | [finally: exception(Exception)] call to method WriteLine | 9 | | Finally.cs:34:27:34:32 | throw ...; | Finally.cs:38:17:38:44 | [finally: exception] throw ...; | 5 |
| Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | 1 | | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | Finally.cs:41:9:43:9 | [exception: Exception] catch (...) {...} | 1 |
| Finally.cs:42:9:43:9 | {...} | Finally.cs:50:13:50:40 | call to method WriteLine | 5 | | Finally.cs:42:9:43:9 | {...} | Finally.cs:50:13:50:40 | call to method WriteLine | 5 |
| Finally.cs:49:9:51:9 | [finally: exception] {...} | Finally.cs:19:10:19:11 | exit M2 (abnormal) | 5 |
| Finally.cs:54:10:54:11 | enter M3 | Finally.cs:58:13:58:37 | call to method WriteLine | 7 | | Finally.cs:54:10:54:11 | enter M3 | Finally.cs:58:13:58:37 | call to method WriteLine | 7 |
| Finally.cs:54:10:54:11 | exit M3 | Finally.cs:54:10:54:11 | exit M3 | 1 | | Finally.cs:54:10:54:11 | exit M3 | Finally.cs:54:10:54:11 | exit M3 | 1 |
| Finally.cs:54:10:54:11 | exit M3 (abnormal) | Finally.cs:54:10:54:11 | exit M3 (abnormal) | 1 |
| Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:54:10:54:11 | exit M3 (normal) | 1 | | Finally.cs:54:10:54:11 | exit M3 (normal) | Finally.cs:54:10:54:11 | exit M3 (normal) | 1 |
| Finally.cs:59:13:59:19 | return ...; | Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | 5 | | Finally.cs:59:13:59:19 | return ...; | Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | 5 |
| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | 1 | | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | 1 |
| Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:61:48:61:51 | [exception: Exception] true | 2 | | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:61:48:61:51 | [exception: Exception] true | 2 |
| Finally.cs:62:9:64:9 | {...} | Finally.cs:70:13:70:40 | [finally: exception(IOException)] call to method WriteLine | 6 | | Finally.cs:62:9:64:9 | {...} | Finally.cs:63:13:63:18 | throw ...; | 2 |
| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | 1 | | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | 1 |
| Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | 5 | | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:65:35:65:51 | [exception: Exception] ... != ... | 5 |
| Finally.cs:66:9:67:9 | {...} | Finally.cs:70:13:70:40 | call to method WriteLine | 5 | | Finally.cs:66:9:67:9 | {...} | Finally.cs:70:13:70:40 | call to method WriteLine | 5 |
| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:70:13:70:40 | [finally: exception(Exception)] call to method WriteLine | 4 | | Finally.cs:69:9:71:9 | [finally: exception] {...} | Finally.cs:54:10:54:11 | exit M3 (abnormal) | 5 |
| Finally.cs:74:10:74:11 | enter M4 | Finally.cs:77:9:100:9 | while (...) ... | 6 | | Finally.cs:74:10:74:11 | enter M4 | Finally.cs:77:9:100:9 | while (...) ... | 6 |
| Finally.cs:74:10:74:11 | exit M4 | Finally.cs:74:10:74:11 | exit M4 | 1 | | Finally.cs:74:10:74:11 | exit M4 | Finally.cs:74:10:74:11 | exit M4 | 1 |
| Finally.cs:74:10:74:11 | exit M4 (abnormal) | Finally.cs:74:10:74:11 | exit M4 (abnormal) | 1 | | Finally.cs:74:10:74:11 | exit M4 (abnormal) | Finally.cs:74:10:74:11 | exit M4 (abnormal) | 1 |
@@ -482,12 +481,12 @@
| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | 1 | | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | 1 |
| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | 1 | | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | 1 |
| Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:93:31:93:45 | object creation of type Exception | 1 | | Finally.cs:93:31:93:45 | object creation of type Exception | Finally.cs:93:31:93:45 | object creation of type Exception | 1 |
| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:23 | [finally(1): exception(Exception)] ...-- | 4 | | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | Finally.cs:97:21:97:23 | [finally(1): exception] ...-- | 4 |
| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:23 | [finally: break, finally(1): exception(Exception)] ...-- | 4 | | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | Finally.cs:97:21:97:23 | [finally: break, finally(1): exception] ...-- | 4 |
| Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:97:21:97:23 | [finally: break] ...-- | 4 | | Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:97:21:97:23 | [finally: break] ...-- | 4 |
| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception(Exception)] ...-- | 4 | | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception] ...-- | 4 |
| Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:97:21:97:23 | [finally: continue] ...-- | 4 | | Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:97:21:97:23 | [finally: continue] ...-- | 4 |
| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:97:21:97:23 | [finally: return, finally(1): exception(Exception)] ...-- | 4 | | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | Finally.cs:97:21:97:23 | [finally: return, finally(1): exception] ...-- | 4 |
| Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:97:21:97:23 | [finally: return] ...-- | 4 | | Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:97:21:97:23 | [finally: return] ...-- | 4 |
| Finally.cs:96:17:98:17 | {...} | Finally.cs:97:21:97:23 | ...-- | 4 | | Finally.cs:96:17:98:17 | {...} | Finally.cs:97:21:97:23 | ...-- | 4 |
| Finally.cs:103:10:103:11 | enter M5 | Finally.cs:107:17:107:21 | access to field Field | 7 | | Finally.cs:103:10:103:11 | enter M5 | Finally.cs:107:17:107:21 | access to field Field | 7 |
@@ -500,75 +499,55 @@
| Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:109:17:109:21 | access to field Field | 3 | | Finally.cs:109:13:110:49 | if (...) ... | Finally.cs:109:17:109:21 | access to field Field | 3 |
| Finally.cs:109:17:109:28 | access to property Length | Finally.cs:109:17:109:28 | access to property Length | 1 | | Finally.cs:109:17:109:28 | access to property Length | Finally.cs:109:17:109:28 | access to property Length | 1 |
| Finally.cs:109:33:109:33 | 1 | Finally.cs:109:17:109:33 | ... == ... | 2 | | Finally.cs:109:33:109:33 | 1 | Finally.cs:109:17:109:33 | ... == ... | 2 |
| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | 8 | | Finally.cs:110:17:110:49 | throw ...; | Finally.cs:110:17:110:49 | throw ...; | 1 |
| Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | 1 | | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | 1 |
| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | 7 | | Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:114:19:114:35 | [finally: exception] ... == ... | 7 |
| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | 7 |
| Finally.cs:113:9:118:9 | {...} | Finally.cs:114:19:114:35 | ... == ... | 7 | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:19:114:35 | ... == ... | 7 |
| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | 1 | | Finally.cs:114:17:114:36 | [false, finally: exception] !... | Finally.cs:114:17:114:36 | [false, finally: exception] !... | 1 |
| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | 1 |
| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | 1 |
| Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:114:17:114:36 | [false, finally: return] !... | 1 | | Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:114:17:114:36 | [false, finally: return] !... | 1 |
| Finally.cs:114:17:114:36 | [false] !... | Finally.cs:114:17:114:36 | [false] !... | 1 | | Finally.cs:114:17:114:36 | [false] !... | Finally.cs:114:17:114:36 | [false] !... | 1 |
| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | 1 | | Finally.cs:114:17:114:36 | [true, finally: exception] !... | Finally.cs:114:17:114:36 | [true, finally: exception] !... | 1 |
| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | 1 |
| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | 1 |
| Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:114:17:114:36 | [true, finally: return] !... | 1 | | Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:114:17:114:36 | [true, finally: return] !... | 1 |
| Finally.cs:114:17:114:36 | [true] !... | Finally.cs:114:17:114:36 | [true] !... | 1 | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:114:17:114:36 | [true] !... | 1 |
| Finally.cs:115:17:115:41 | ...; | Finally.cs:115:17:115:40 | call to method WriteLine | 4 | | Finally.cs:115:17:115:41 | ...; | Finally.cs:115:17:115:40 | call to method WriteLine | 4 |
| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:115:17:115:40 | [finally: exception(Exception)] call to method WriteLine | 4 | | Finally.cs:115:17:115:41 | [finally: exception] ...; | Finally.cs:115:17:115:40 | [finally: exception] call to method WriteLine | 4 |
| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:115:17:115:40 | [finally: exception(NullReferenceException)] call to method WriteLine | 4 |
| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:115:17:115:40 | [finally: exception(OutOfMemoryException)] call to method WriteLine | 4 |
| Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | 4 | | Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | 4 |
| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | 6 | | Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | Finally.cs:116:17:116:32 | [finally: exception] ... > ... | 6 |
| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | 6 |
| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | 6 |
| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:116:17:116:32 | [finally: return] ... > ... | 6 | | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:116:17:116:32 | [finally: return] ... > ... | 6 |
| Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:116:17:116:32 | ... > ... | 6 | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:116:17:116:32 | ... > ... | 6 |
| Finally.cs:117:17:117:37 | ...; | Finally.cs:117:17:117:36 | call to method WriteLine | 3 | | Finally.cs:117:17:117:37 | ...; | Finally.cs:117:17:117:36 | call to method WriteLine | 3 |
| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:117:17:117:36 | [finally: exception(Exception)] call to method WriteLine | 3 | | Finally.cs:117:17:117:37 | [finally: exception] ...; | Finally.cs:117:17:117:36 | [finally: exception] call to method WriteLine | 3 |
| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:117:17:117:36 | [finally: exception(NullReferenceException)] call to method WriteLine | 3 |
| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:117:17:117:36 | [finally: exception(OutOfMemoryException)] call to method WriteLine | 3 |
| Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | 3 | | Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | 3 |
| Finally.cs:121:10:121:11 | enter M6 | Finally.cs:121:10:121:11 | exit M6 | 12 | | Finally.cs:121:10:121:11 | enter M6 | Finally.cs:121:10:121:11 | exit M6 | 12 |
| Finally.cs:133:10:133:11 | enter M7 | Finally.cs:137:13:137:36 | call to method WriteLine | 7 | | Finally.cs:133:10:133:11 | enter M7 | Finally.cs:137:13:137:36 | call to method WriteLine | 7 |
| Finally.cs:133:10:133:11 | exit M7 (abnormal) | Finally.cs:133:10:133:11 | exit M7 | 2 | | Finally.cs:133:10:133:11 | exit M7 (abnormal) | Finally.cs:133:10:133:11 | exit M7 | 2 |
| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:141:13:141:44 | [finally: exception(Exception)] throw ...; | 4 | | Finally.cs:140:9:143:9 | [finally: exception] {...} | Finally.cs:141:13:141:44 | [finally: exception] throw ...; | 4 |
| Finally.cs:140:9:143:9 | {...} | Finally.cs:141:13:141:44 | throw ...; | 4 | | Finally.cs:140:9:143:9 | {...} | Finally.cs:141:13:141:44 | throw ...; | 4 |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:151:17:151:28 | ... == ... | 8 | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:151:17:151:28 | ... == ... | 8 |
| Finally.cs:147:10:147:11 | exit M8 | Finally.cs:147:10:147:11 | exit M8 | 1 | | Finally.cs:147:10:147:11 | exit M8 | Finally.cs:147:10:147:11 | exit M8 | 1 |
| Finally.cs:147:10:147:11 | exit M8 (abnormal) | Finally.cs:147:10:147:11 | exit M8 (abnormal) | 1 | | Finally.cs:147:10:147:11 | exit M8 (abnormal) | Finally.cs:147:10:147:11 | exit M8 (abnormal) | 1 |
| Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:147:10:147:11 | exit M8 (normal) | 1 | | Finally.cs:147:10:147:11 | exit M8 (normal) | Finally.cs:147:10:147:11 | exit M8 (normal) | 1 |
| Finally.cs:152:17:152:50 | throw ...; | Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | 7 | | Finally.cs:152:17:152:50 | throw ...; | Finally.cs:152:17:152:50 | throw ...; | 1 |
| Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | 1 | | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | 1 |
| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | 6 | | Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:158:21:158:31 | [finally: exception] access to property Length | 6 |
| Finally.cs:155:9:169:9 | {...} | Finally.cs:158:21:158:31 | access to property Length | 6 | | Finally.cs:155:9:169:9 | {...} | Finally.cs:158:21:158:31 | access to property Length | 6 |
| Finally.cs:158:36:158:36 | 1 | Finally.cs:158:21:158:36 | ... == ... | 2 | | Finally.cs:158:36:158:36 | 1 | Finally.cs:158:21:158:36 | ... == ... | 2 |
| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | 2 | | Finally.cs:158:36:158:36 | [finally: exception] 1 | Finally.cs:158:21:158:36 | [finally: exception] ... == ... | 2 |
| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | 2 | | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | 1 |
| Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | 1 |
| Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | 1 |
| Finally.cs:159:21:159:45 | throw ...; | Finally.cs:159:21:159:45 | throw ...; | 1 | | Finally.cs:159:21:159:45 | throw ...; | Finally.cs:159:21:159:45 | throw ...; | 1 |
| Finally.cs:159:41:159:43 | "1" | Finally.cs:159:27:159:44 | object creation of type Exception | 2 | | Finally.cs:159:41:159:43 | "1" | Finally.cs:159:27:159:44 | object creation of type Exception | 2 |
| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | 2 | | Finally.cs:159:41:159:43 | [finally: exception] "1" | Finally.cs:159:27:159:44 | [finally: exception] object creation of type Exception | 2 |
| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | 2 |
| Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | 1 | | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | 1 |
| Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | 1 | | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | 1 |
| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | 1 | | Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | 1 |
| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | 1 | | Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | 1 |
| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | 1 |
| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | 1 |
| Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | 5 | | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | 5 |
| Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | 5 | | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | 5 |
| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | 5 | | Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | Finally.cs:161:39:161:54 | [finally: exception, exception: Exception] ... == ... | 5 |
| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | 5 | | Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | Finally.cs:161:39:161:54 | [finally: exception, exception: NullReferenceException] ... == ... | 5 |
| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | 5 | | Finally.cs:162:13:164:13 | [finally: exception] {...} | Finally.cs:163:17:163:42 | [finally: exception] call to method WriteLine | 6 |
| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | 5 |
| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | 6 |
| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | 6 |
| Finally.cs:162:13:164:13 | {...} | Finally.cs:163:17:163:42 | call to method WriteLine | 6 | | Finally.cs:162:13:164:13 | {...} | Finally.cs:163:17:163:42 | call to method WriteLine | 6 |
| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | 5 | | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | Finally.cs:167:17:167:37 | [finally: exception] call to method WriteLine | 5 |
| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | 5 |
| Finally.cs:165:13:168:13 | catch {...} | Finally.cs:167:17:167:37 | call to method WriteLine | 5 | | Finally.cs:165:13:168:13 | catch {...} | Finally.cs:167:17:167:37 | call to method WriteLine | 5 |
| Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | exit ExceptionA | 5 | | Finally.cs:172:11:172:20 | enter ExceptionA | Finally.cs:172:11:172:20 | exit ExceptionA | 5 |
| Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | exit ExceptionB | 5 | | Finally.cs:173:11:173:20 | enter ExceptionB | Finally.cs:173:11:173:20 | exit ExceptionB | 5 |
@@ -577,89 +556,66 @@
| Finally.cs:176:10:176:11 | exit M9 | Finally.cs:176:10:176:11 | exit M9 | 1 | | Finally.cs:176:10:176:11 | exit M9 | Finally.cs:176:10:176:11 | exit M9 | 1 |
| Finally.cs:176:10:176:11 | exit M9 (abnormal) | Finally.cs:176:10:176:11 | exit M9 (abnormal) | 1 | | Finally.cs:176:10:176:11 | exit M9 (abnormal) | Finally.cs:176:10:176:11 | exit M9 (abnormal) | 1 |
| Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:176:10:176:11 | exit M9 (normal) | 1 | | Finally.cs:176:10:176:11 | exit M9 (normal) | Finally.cs:176:10:176:11 | exit M9 (normal) | 1 |
| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | 6 | | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | 1 |
| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | 1 | | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | 1 |
| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | 5 | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | 5 |
| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | 5 | | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:186:21:186:22 | [finally: exception, b1 (line 176): true] access to parameter b2 | 5 |
| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | 2 | | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | 2 |
| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | 2 | | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | 2 |
| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | 2 |
| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | 1 | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | 1 |
| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | 1 | | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | 1 |
| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | 1 |
| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | 1 | | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | 1 |
| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | 1 | | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | 1 |
| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | 1 |
| Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | 1 | | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | 1 |
| Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | 1 | | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | 1 |
| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | 1 | | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | 1 |
| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | 1 | | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | 1 |
| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | 1 |
| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | 1 |
| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | 3 | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | 3 |
| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | 3 | | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:190:21:190:22 | [finally: exception, b1 (line 176): true] access to parameter b1 | 3 |
| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | 3 | | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception] throw ...; | 2 |
| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | 2 |
| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | 2 |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:199:17:199:18 | access to parameter b1 | 6 | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:199:17:199:18 | access to parameter b1 | 6 |
| Finally.cs:195:10:195:12 | exit M10 | Finally.cs:195:10:195:12 | exit M10 | 1 | | Finally.cs:195:10:195:12 | exit M10 | Finally.cs:195:10:195:12 | exit M10 | 1 |
| Finally.cs:195:10:195:12 | exit M10 (abnormal) | Finally.cs:195:10:195:12 | exit M10 (abnormal) | 1 | | Finally.cs:195:10:195:12 | exit M10 (abnormal) | Finally.cs:195:10:195:12 | exit M10 (abnormal) | 1 |
| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | 6 | | Finally.cs:199:21:199:43 | throw ...; | Finally.cs:199:21:199:43 | throw ...; | 1 |
| Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:199:27:199:42 | object creation of type ExceptionA | 1 | | Finally.cs:199:27:199:42 | object creation of type ExceptionA | Finally.cs:199:27:199:42 | object creation of type ExceptionA | 1 |
| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | 5 | | Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | 5 |
| Finally.cs:202:9:212:9 | {...} | Finally.cs:205:21:205:22 | access to parameter b2 | 5 | | Finally.cs:202:9:212:9 | {...} | Finally.cs:205:21:205:22 | access to parameter b2 | 5 |
| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | 4 | | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | 1 |
| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | 4 | | Finally.cs:205:25:205:47 | throw ...; | Finally.cs:205:25:205:47 | throw ...; | 1 |
| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | 4 | | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | 1 |
| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | 1 |
| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | 1 |
| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:205:31:205:46 | object creation of type ExceptionB | 1 | | Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:205:31:205:46 | object creation of type ExceptionB | 1 |
| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | 3 | | Finally.cs:208:13:210:13 | [finally(1): exception] {...} | Finally.cs:209:21:209:22 | [finally(1): exception] access to parameter b3 | 3 |
| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | 3 | | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | Finally.cs:209:21:209:22 | [finally: exception, finally(1): exception] access to parameter b3 | 3 |
| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | 3 | | Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:209:21:209:22 | [finally: exception] access to parameter b3 | 3 |
| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | 3 |
| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | 3 |
| Finally.cs:208:13:210:13 | {...} | Finally.cs:209:21:209:22 | access to parameter b3 | 3 | | Finally.cs:208:13:210:13 | {...} | Finally.cs:209:21:209:22 | access to parameter b3 | 3 |
| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception(Exception)] throw ...; | 2 | | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception] throw ...; | 2 |
| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally(1): exception(ExceptionB)] throw ...; | 2 | | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception, finally(1): exception] throw ...; | 2 |
| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] throw ...; | 2 | | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception] throw ...; | 2 |
| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] throw ...; | 2 |
| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(Exception)] throw ...; | 2 |
| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] throw ...; | 2 |
| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] throw ...; | 2 |
| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception(ExceptionA)] throw ...; | 2 |
| Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:209:25:209:47 | throw ...; | 2 | | Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:209:25:209:47 | throw ...; | 2 |
| Finally.cs:211:13:211:29 | ...; | Finally.cs:195:10:195:12 | exit M10 (normal) | 9 | | Finally.cs:211:13:211:29 | ...; | Finally.cs:195:10:195:12 | exit M10 (normal) | 9 |
| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | 4 | | Finally.cs:211:13:211:29 | [finally: exception] ...; | Finally.cs:211:13:211:28 | [finally: exception] ... = ... | 4 |
| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | 4 |
| Finally.cs:216:10:216:12 | enter M11 | Finally.cs:220:13:220:36 | call to method WriteLine | 7 | | Finally.cs:216:10:216:12 | enter M11 | Finally.cs:220:13:220:36 | call to method WriteLine | 7 |
| Finally.cs:222:9:225:9 | catch {...} | Finally.cs:224:13:224:38 | call to method WriteLine | 5 | | Finally.cs:222:9:225:9 | catch {...} | Finally.cs:224:13:224:38 | call to method WriteLine | 5 |
| Finally.cs:227:9:229:9 | {...} | Finally.cs:216:10:216:12 | exit M11 | 9 | | Finally.cs:227:9:229:9 | {...} | Finally.cs:216:10:216:12 | exit M11 | 9 |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:239:21:239:22 | access to parameter b1 | 8 | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:239:21:239:22 | access to parameter b1 | 8 |
| Finally.cs:233:10:233:12 | exit M12 | Finally.cs:233:10:233:12 | exit M12 | 1 | | Finally.cs:233:10:233:12 | exit M12 | Finally.cs:233:10:233:12 | exit M12 | 1 |
| Finally.cs:233:10:233:12 | exit M12 (abnormal) | Finally.cs:233:10:233:12 | exit M12 (abnormal) | 1 | | Finally.cs:240:21:240:43 | throw ...; | Finally.cs:240:21:240:43 | throw ...; | 1 |
| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | 6 |
| Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:240:27:240:42 | object creation of type ExceptionA | 1 | | Finally.cs:240:27:240:42 | object creation of type ExceptionA | Finally.cs:240:27:240:42 | object creation of type ExceptionA | 1 |
| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | 5 | | Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | 5 |
| Finally.cs:243:13:253:13 | {...} | Finally.cs:246:25:246:26 | access to parameter b2 | 5 | | Finally.cs:243:13:253:13 | {...} | Finally.cs:246:25:246:26 | access to parameter b2 | 5 |
| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(ExceptionA)] call to method WriteLine | 5 | | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | 1 |
| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] call to method WriteLine | 5 | | Finally.cs:247:25:247:47 | throw ...; | Finally.cs:247:25:247:47 | throw ...; | 1 |
| Finally.cs:247:25:247:47 | throw ...; | Finally.cs:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | 5 | | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | 1 |
| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | 1 |
| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | 1 |
| Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:247:31:247:46 | object creation of type ExceptionA | 1 | | Finally.cs:247:31:247:46 | object creation of type ExceptionA | Finally.cs:247:31:247:46 | object creation of type ExceptionA | 1 |
| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:54 | [finally(1): exception(Exception)] call to method WriteLine | 4 | | Finally.cs:250:17:252:17 | [finally(1): exception] {...} | Finally.cs:251:21:251:54 | [finally(1): exception] call to method WriteLine | 4 |
| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(Exception)] call to method WriteLine | 4 | | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | Finally.cs:251:21:251:54 | [finally: exception, finally(1): exception] call to method WriteLine | 4 |
| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:251:21:251:54 | [finally: exception(Exception)] call to method WriteLine | 4 | | Finally.cs:250:17:252:17 | [finally: exception] {...} | Finally.cs:251:21:251:54 | [finally: exception] call to method WriteLine | 4 |
| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(Exception)] call to method WriteLine | 4 |
| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:251:21:251:54 | [finally: exception(ExceptionA)] call to method WriteLine | 4 |
| Finally.cs:250:17:252:17 | {...} | Finally.cs:254:13:254:44 | call to method WriteLine | 7 | | Finally.cs:250:17:252:17 | {...} | Finally.cs:254:13:254:44 | call to method WriteLine | 7 |
| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | 4 | | Finally.cs:257:9:259:9 | [finally: exception] {...} | Finally.cs:233:10:233:12 | exit M12 (abnormal) | 5 |
| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | 4 |
| Finally.cs:257:9:259:9 | {...} | Finally.cs:233:10:233:12 | exit M12 (normal) | 8 | | Finally.cs:257:9:259:9 | {...} | Finally.cs:233:10:233:12 | exit M12 (normal) | 8 |
| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:267:13:267:34 | call to method WriteLine | 7 | | Finally.cs:263:10:263:12 | enter M13 | Finally.cs:267:13:267:34 | call to method WriteLine | 7 |
| Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | exit M13 | 1 | | Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | exit M13 | 1 |
| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:263:10:263:12 | exit M13 (abnormal) | 10 | | Finally.cs:270:9:273:9 | [finally: exception] {...} | Finally.cs:263:10:263:12 | exit M13 (abnormal) | 10 |
| Finally.cs:270:9:273:9 | {...} | Finally.cs:263:10:263:12 | exit M13 (normal) | 10 | | Finally.cs:270:9:273:9 | {...} | Finally.cs:263:10:263:12 | exit M13 (normal) | 10 |
| Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | exit Foreach | 5 | | Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | exit Foreach | 5 |
| 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 | enter M1 | Foreach.cs:8:29:8:32 | access to parameter args | 3 |

View File

@@ -1341,11 +1341,9 @@ conditionBlock
| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | false | | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | false |
| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | false | | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | false |
| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:66:9:67:9 | {...} | false | | Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:66:9:67:9 | {...} | false |
| Finally.cs:61:9:64:9 | [exception: Exception] catch (...) {...} | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | false |
| Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:62:9:64:9 | {...} | true | | Finally.cs:61:38:61:39 | [exception: Exception] IOException ex | Finally.cs:62:9:64:9 | {...} | true |
| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | true | | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | true |
| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:66:9:67:9 | {...} | true | | Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:66:9:67:9 | {...} | true |
| Finally.cs:65:9:67:9 | [exception: Exception] catch (...) {...} | Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | true |
| Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:66:9:67:9 | {...} | true | | Finally.cs:65:26:65:26 | [exception: Exception] Exception e | Finally.cs:66:9:67:9 | {...} | true |
| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:74:10:74:11 | exit M4 (abnormal) | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:74:10:74:11 | exit M4 (abnormal) | true |
| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:78:9:100:9 | {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:78:9:100:9 | {...} | true |
@@ -1363,12 +1361,12 @@ conditionBlock
| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | true |
| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | true |
| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | object creation of type Exception | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:93:31:93:45 | object creation of type Exception | true |
| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | true |
| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | true |
| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: break] {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: break] {...} | true |
| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | true |
| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: continue] {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: continue] {...} | true |
| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | true |
| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: return] {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | [finally: return] {...} | true |
| Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | {...} | true | | Finally.cs:77:16:77:16 | access to local variable i | Finally.cs:96:17:98:17 | {...} | true |
| Finally.cs:78:9:100:9 | {...} | Finally.cs:82:21:82:27 | return ...; | true | | Finally.cs:78:9:100:9 | {...} | Finally.cs:82:21:82:27 | return ...; | true |
@@ -1385,17 +1383,17 @@ conditionBlock
| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | false | | Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | false |
| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | true | | Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | true |
| Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | object creation of type Exception | false | | Finally.cs:78:9:100:9 | {...} | Finally.cs:93:31:93:45 | object creation of type Exception | false |
| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | false | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | false |
| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | false | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | false |
| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: break] {...} | false | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: break] {...} | false |
| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | false | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | false |
| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: continue] {...} | false | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: continue] {...} | false |
| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | true | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | true |
| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: return] {...} | true | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | [finally: return] {...} | true |
| Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | {...} | false | | Finally.cs:78:9:100:9 | {...} | Finally.cs:96:17:98:17 | {...} | false |
| Finally.cs:82:21:82:27 | return ...; | Finally.cs:93:25:93:46 | [finally: return] throw ...; | true | | Finally.cs:82:21:82:27 | return ...; | Finally.cs:93:25:93:46 | [finally: return] throw ...; | true |
| Finally.cs:82:21:82:27 | return ...; | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | true | | Finally.cs:82:21:82:27 | return ...; | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | true |
| Finally.cs:82:21:82:27 | return ...; | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | true | | Finally.cs:82:21:82:27 | return ...; | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | true |
| Finally.cs:82:21:82:27 | return ...; | Finally.cs:96:17:98:17 | [finally: return] {...} | false | | Finally.cs:82:21:82:27 | return ...; | Finally.cs:96:17:98:17 | [finally: return] {...} | false |
| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:84:21:84:29 | continue; | true | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:84:21:84:29 | continue; | true |
| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:85:17:86:26 | if (...) ... | false | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:85:17:86:26 | if (...) ... | false |
@@ -1407,15 +1405,15 @@ conditionBlock
| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | false | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | false |
| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | true | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | true |
| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | object creation of type Exception | false | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:93:31:93:45 | object creation of type Exception | false |
| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | false | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | false |
| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | false | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | false |
| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break] {...} | false | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break] {...} | false |
| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | true | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | true |
| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: continue] {...} | true | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | [finally: continue] {...} | true |
| Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | {...} | false | | Finally.cs:83:17:84:29 | if (...) ... | Finally.cs:96:17:98:17 | {...} | false |
| Finally.cs:84:21:84:29 | continue; | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | true | | Finally.cs:84:21:84:29 | continue; | Finally.cs:93:25:93:46 | [finally: continue] throw ...; | true |
| Finally.cs:84:21:84:29 | continue; | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | true | | Finally.cs:84:21:84:29 | continue; | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | true |
| Finally.cs:84:21:84:29 | continue; | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | true | | Finally.cs:84:21:84:29 | continue; | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | true |
| Finally.cs:84:21:84:29 | continue; | Finally.cs:96:17:98:17 | [finally: continue] {...} | false | | Finally.cs:84:21:84:29 | continue; | Finally.cs:96:17:98:17 | [finally: continue] {...} | false |
| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:86:21:86:26 | break; | true | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:86:21:86:26 | break; | true |
| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:89:13:99:13 | {...} | false | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:89:13:99:13 | {...} | false |
@@ -1423,17 +1421,17 @@ conditionBlock
| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:25:93:46 | throw ...; | false | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:25:93:46 | throw ...; | false |
| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | true | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | true |
| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:31:93:45 | object creation of type Exception | false | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:93:31:93:45 | object creation of type Exception | false |
| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | false | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | false |
| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | true | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | true |
| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break] {...} | true | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | [finally: break] {...} | true |
| Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | {...} | false | | Finally.cs:85:17:86:26 | if (...) ... | Finally.cs:96:17:98:17 | {...} | false |
| Finally.cs:86:21:86:26 | break; | Finally.cs:93:25:93:46 | [finally: break] throw ...; | true | | Finally.cs:86:21:86:26 | break; | Finally.cs:93:25:93:46 | [finally: break] throw ...; | true |
| Finally.cs:86:21:86:26 | break; | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | true | | Finally.cs:86:21:86:26 | break; | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | true |
| Finally.cs:86:21:86:26 | break; | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | true | | Finally.cs:86:21:86:26 | break; | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | true |
| Finally.cs:86:21:86:26 | break; | Finally.cs:96:17:98:17 | [finally: break] {...} | false | | Finally.cs:86:21:86:26 | break; | Finally.cs:96:17:98:17 | [finally: break] {...} | false |
| Finally.cs:89:13:99:13 | {...} | Finally.cs:93:25:93:46 | throw ...; | true | | Finally.cs:89:13:99:13 | {...} | Finally.cs:93:25:93:46 | throw ...; | true |
| Finally.cs:89:13:99:13 | {...} | Finally.cs:93:31:93:45 | object creation of type Exception | true | | Finally.cs:89:13:99:13 | {...} | Finally.cs:93:31:93:45 | object creation of type Exception | true |
| Finally.cs:89:13:99:13 | {...} | Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | true | | Finally.cs:89:13:99:13 | {...} | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | true |
| Finally.cs:89:13:99:13 | {...} | Finally.cs:96:17:98:17 | {...} | false | | Finally.cs:89:13:99:13 | {...} | Finally.cs:96:17:98:17 | {...} | false |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:108:17:108:23 | return ...; | true | | Finally.cs:107:33:107:33 | 0 | Finally.cs:108:17:108:23 | return ...; | true |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:109:13:110:49 | if (...) ... | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:109:13:110:49 | if (...) ... | false |
@@ -1442,20 +1440,15 @@ conditionBlock
| Finally.cs:107:33:107:33 | 0 | Finally.cs:110:17:110:49 | throw ...; | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:110:17:110:49 | throw ...; | false |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | false |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:113:9:118:9 | {...} | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:113:9:118:9 | {...} | false |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | false |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false, finally: return] !... | true | | Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false, finally: return] !... | true |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false] !... | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [false] !... | false |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | false |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true, finally: return] !... | true | | Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true, finally: return] !... | true |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true] !... | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:114:17:114:36 | [true] !... | false |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | ...; | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | ...; | false |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | false |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | [finally: return] ...; | true | | Finally.cs:107:33:107:33 | 0 | Finally.cs:115:17:115:41 | [finally: return] ...; | true |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | false |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | true | | Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | true |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | if (...) ... | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:116:13:117:37 | if (...) ... | false |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | ...; | false | | Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | ...; | false |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | false |
| Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | [finally: return] ...; | true | | Finally.cs:107:33:107:33 | 0 | Finally.cs:117:17:117:37 | [finally: return] ...; | true |
| Finally.cs:108:17:108:23 | return ...; | Finally.cs:114:17:114:36 | [false, finally: return] !... | true | | Finally.cs:108:17:108:23 | return ...; | Finally.cs:114:17:114:36 | [false, finally: return] !... | true |
| Finally.cs:108:17:108:23 | return ...; | Finally.cs:114:17:114:36 | [true, finally: return] !... | false | | Finally.cs:108:17:108:23 | return ...; | Finally.cs:114:17:114:36 | [true, finally: return] !... | false |
@@ -1463,228 +1456,149 @@ conditionBlock
| Finally.cs:109:33:109:33 | 1 | Finally.cs:110:17:110:49 | throw ...; | true | | Finally.cs:109:33:109:33 | 1 | Finally.cs:110:17:110:49 | throw ...; | true |
| Finally.cs:109:33:109:33 | 1 | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | true | | Finally.cs:109:33:109:33 | 1 | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | true |
| Finally.cs:109:33:109:33 | 1 | Finally.cs:113:9:118:9 | {...} | false | | Finally.cs:109:33:109:33 | 1 | Finally.cs:113:9:118:9 | {...} | false |
| Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | true |
| Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [false] !... | false | | Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [false] !... | false |
| Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | true |
| Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [true] !... | false | | Finally.cs:109:33:109:33 | 1 | Finally.cs:114:17:114:36 | [true] !... | false |
| Finally.cs:109:33:109:33 | 1 | Finally.cs:115:17:115:41 | ...; | false | | Finally.cs:109:33:109:33 | 1 | Finally.cs:115:17:115:41 | ...; | false |
| Finally.cs:109:33:109:33 | 1 | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | true |
| Finally.cs:109:33:109:33 | 1 | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | true |
| Finally.cs:109:33:109:33 | 1 | Finally.cs:116:13:117:37 | if (...) ... | false | | Finally.cs:109:33:109:33 | 1 | Finally.cs:116:13:117:37 | if (...) ... | false |
| Finally.cs:109:33:109:33 | 1 | Finally.cs:117:17:117:37 | ...; | false | | Finally.cs:109:33:109:33 | 1 | Finally.cs:117:17:117:37 | ...; | false |
| Finally.cs:109:33:109:33 | 1 | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | true | | Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:114:17:114:36 | [false, finally: exception] !... | true |
| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | true | | Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:114:17:114:36 | [true, finally: exception] !... | false |
| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | false | | Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:115:17:115:41 | [finally: exception] ...; | false |
| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | false |
| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | true |
| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | false |
| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | false |
| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | true |
| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | false |
| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | false |
| Finally.cs:113:9:118:9 | {...} | Finally.cs:114:17:114:36 | [false] !... | true | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:17:114:36 | [false] !... | true |
| Finally.cs:113:9:118:9 | {...} | Finally.cs:114:17:114:36 | [true] !... | false | | Finally.cs:113:9:118:9 | {...} | Finally.cs:114:17:114:36 | [true] !... | false |
| Finally.cs:113:9:118:9 | {...} | Finally.cs:115:17:115:41 | ...; | false | | Finally.cs:113:9:118:9 | {...} | Finally.cs:115:17:115:41 | ...; | false |
| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | true | | Finally.cs:114:17:114:36 | [true, finally: exception] !... | Finally.cs:115:17:115:41 | [finally: exception] ...; | true |
| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | true |
| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | true |
| Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:115:17:115:41 | [finally: return] ...; | true | | Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:115:17:115:41 | [finally: return] ...; | true |
| Finally.cs:114:17:114:36 | [true] !... | Finally.cs:115:17:115:41 | ...; | true | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:115:17:115:41 | ...; | true |
| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | true | | Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception] ...; | true |
| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | true |
| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | true |
| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:117:17:117:37 | [finally: return] ...; | true | | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:117:17:117:37 | [finally: return] ...; | true |
| Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:117:17:117:37 | ...; | true | | Finally.cs:116:13:117:37 | if (...) ... | Finally.cs:117:17:117:37 | ...; | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | exit M8 (abnormal) | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | exit M8 (abnormal) | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | exit M8 (normal) | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:147:10:147:11 | exit M8 (normal) | false |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:152:17:152:50 | throw ...; | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:152:17:152:50 | throw ...; | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:155:9:169:9 | [finally: exception] {...} | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:155:9:169:9 | {...} | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:155:9:169:9 | {...} | false |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | 1 | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | 1 | false |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | [finally: exception] 1 | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | throw ...; | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:21:159:45 | throw ...; | false |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | "1" | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | "1" | false |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | [finally: exception] "1" | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | false |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | false |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | false |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | false |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | [finally: exception] {...} | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | {...} | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:162:13:164:13 | {...} | false |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | true | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | true |
| Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | catch {...} | false | | Finally.cs:147:10:147:11 | enter M8 | Finally.cs:165:13:168:13 | catch {...} | false |
| Finally.cs:158:36:158:36 | 1 | Finally.cs:159:21:159:45 | throw ...; | true | | Finally.cs:158:36:158:36 | 1 | Finally.cs:159:21:159:45 | throw ...; | true |
| Finally.cs:158:36:158:36 | 1 | Finally.cs:159:41:159:43 | "1" | true | | Finally.cs:158:36:158:36 | 1 | Finally.cs:159:41:159:43 | "1" | true |
| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | true | | Finally.cs:158:36:158:36 | [finally: exception] 1 | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | true |
| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | true | | Finally.cs:158:36:158:36 | [finally: exception] 1 | Finally.cs:159:41:159:43 | [finally: exception] "1" | true |
| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | true |
| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | true |
| Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | true | | Finally.cs:161:13:164:13 | [exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: Exception] Exception e | true |
| Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | true | | Finally.cs:161:13:164:13 | [exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [exception: NullReferenceException] Exception e | true |
| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | true | | Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | true |
| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | true | | Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | true |
| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | true |
| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:176:10:176:11 | exit M9 (normal) | false |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | false | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | false |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | false | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | false |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | false | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | false |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | false | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | false |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | false | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | false |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | false | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | false |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | false | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | false |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | true | | Finally.cs:176:10:176:11 | enter M9 | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | true |
| Finally.cs:176:10:176:11 | enter M9 | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true |
| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | true |
| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true |
| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | true |
| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true |
| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true |
| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | true |
| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true |
| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | true | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | true |
| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | true | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | true |
| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | true | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | true |
| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | true | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | true |
| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | true | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | true |
| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | true | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | true |
| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | true | | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | true |
| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true |
| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | true | | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | true |
| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true |
| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true |
| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | true | | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | true |
| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | true |
| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | true | | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | true |
| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true |
| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true |
| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | true | | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | true |
| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true |
| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | true | | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | true |
| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | true |
| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:199:21:199:43 | throw ...; | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:199:21:199:43 | throw ...; | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:199:27:199:42 | object creation of type ExceptionA | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:199:27:199:42 | object creation of type ExceptionA | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:202:9:212:9 | [finally: exception] {...} | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:202:9:212:9 | {...} | false | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:202:9:212:9 | {...} | false |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | throw ...; | false | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:25:205:47 | throw ...; | false |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | object creation of type ExceptionB | false | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:205:31:205:46 | object creation of type ExceptionB | false |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | false | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally(1): exception] {...} | false |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception] {...} | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | {...} | false | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:208:13:210:13 | {...} | false |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | false | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | false |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | false | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | object creation of type ExceptionC | false | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:209:31:209:46 | object creation of type ExceptionC | false |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | ...; | false | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | ...; | false |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | true | | Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | [finally: exception] ...; | true |
| Finally.cs:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | true | | Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | true |
| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | true | | Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | true |
| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | true | | Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | true |
| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | true | | Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:208:13:210:13 | [finally: exception] {...} | false |
| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | false | | Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | true |
| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | true | | Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | false |
| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | | Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:211:13:211:29 | [finally: exception] ...; | false |
| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | false |
| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | false |
| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | true |
| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | true |
| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | true |
| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | false |
| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | true |
| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true |
| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | false |
| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | false |
| Finally.cs:202:9:212:9 | {...} | Finally.cs:205:25:205:47 | throw ...; | true | | Finally.cs:202:9:212:9 | {...} | Finally.cs:205:25:205:47 | throw ...; | true |
| Finally.cs:202:9:212:9 | {...} | Finally.cs:205:31:205:46 | object creation of type ExceptionB | true | | Finally.cs:202:9:212:9 | {...} | Finally.cs:205:31:205:46 | object creation of type ExceptionB | true |
| Finally.cs:202:9:212:9 | {...} | Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | true | | Finally.cs:202:9:212:9 | {...} | Finally.cs:208:13:210:13 | [finally(1): exception] {...} | true |
| Finally.cs:202:9:212:9 | {...} | Finally.cs:208:13:210:13 | {...} | false | | Finally.cs:202:9:212:9 | {...} | Finally.cs:208:13:210:13 | {...} | false |
| Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | true | | Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | true |
| Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | true |
| Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | object creation of type ExceptionC | false | | Finally.cs:202:9:212:9 | {...} | Finally.cs:209:31:209:46 | object creation of type ExceptionC | false |
| Finally.cs:202:9:212:9 | {...} | Finally.cs:211:13:211:29 | ...; | false | | Finally.cs:202:9:212:9 | {...} | Finally.cs:211:13:211:29 | ...; | false |
| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | | Finally.cs:208:13:210:13 | [finally(1): exception] {...} | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | true |
| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | true |
| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | | Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | true |
| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | true | | Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:211:13:211:29 | [finally: exception] ...; | false |
| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | true |
| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | true |
| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | false |
| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | true |
| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true |
| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | false |
| Finally.cs:208:13:210:13 | {...} | Finally.cs:209:31:209:46 | object creation of type ExceptionC | true | | Finally.cs:208:13:210:13 | {...} | Finally.cs:209:31:209:46 | object creation of type ExceptionC | true |
| Finally.cs:208:13:210:13 | {...} | Finally.cs:211:13:211:29 | ...; | false | | Finally.cs:208:13:210:13 | {...} | Finally.cs:211:13:211:29 | ...; | false |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:240:21:240:43 | throw ...; | true | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:240:21:240:43 | throw ...; | true |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:240:27:240:42 | object creation of type ExceptionA | true | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:240:27:240:42 | object creation of type ExceptionA | true |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | true | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:243:13:253:13 | [finally: exception] {...} | true |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:243:13:253:13 | {...} | false | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:243:13:253:13 | {...} | false |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | true | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | true |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | true |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | throw ...; | false | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:25:247:47 | throw ...; | false |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | true | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | true |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | true |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | object creation of type ExceptionA | false | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:247:31:247:46 | object creation of type ExceptionA | false |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | false | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally(1): exception] {...} | false |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | true | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | true |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | true | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception] {...} | true |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | true |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | true |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | {...} | false | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:250:17:252:17 | {...} | false |
| Finally.cs:233:10:233:12 | enter M12 | Finally.cs:257:9:259:9 | {...} | false | | Finally.cs:233:10:233:12 | enter M12 | Finally.cs:257:9:259:9 | {...} | false |
| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | true | | Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | true |
| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | true | | Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | true |
| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | true | | Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | true |
| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | false | | Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:250:17:252:17 | [finally: exception] {...} | false |
| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | true |
| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | true |
| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | true |
| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | false |
| Finally.cs:243:13:253:13 | {...} | Finally.cs:247:25:247:47 | throw ...; | true | | Finally.cs:243:13:253:13 | {...} | Finally.cs:247:25:247:47 | throw ...; | true |
| Finally.cs:243:13:253:13 | {...} | Finally.cs:247:31:247:46 | object creation of type ExceptionA | true | | Finally.cs:243:13:253:13 | {...} | Finally.cs:247:31:247:46 | object creation of type ExceptionA | true |
| Finally.cs:243:13:253:13 | {...} | Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | true | | Finally.cs:243:13:253:13 | {...} | Finally.cs:250:17:252:17 | [finally(1): exception] {...} | true |
| Finally.cs:243:13:253:13 | {...} | Finally.cs:250:17:252:17 | {...} | false | | Finally.cs:243:13:253:13 | {...} | Finally.cs:250:17:252:17 | {...} | false |
| Finally.cs:243:13:253:13 | {...} | Finally.cs:257:9:259:9 | {...} | false | | Finally.cs:243:13:253:13 | {...} | Finally.cs:257:9:259:9 | {...} | false |
| Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:6:10:6:11 | exit M1 (normal) | true | | Foreach.cs:8:9:9:13 | foreach (... ... in ...) ... | Foreach.cs:6:10:6:11 | exit M1 (normal) | true |
@@ -2751,91 +2665,62 @@ conditionFlow
| Finally.cs:107:17:107:33 | ... == ... | Finally.cs:109:13:110:49 | if (...) ... | false | | Finally.cs:107:17:107:33 | ... == ... | Finally.cs:109:13:110:49 | if (...) ... | false |
| Finally.cs:109:17:109:33 | ... == ... | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | true | | Finally.cs:109:17:109:33 | ... == ... | Finally.cs:110:23:110:48 | object creation of type OutOfMemoryException | true |
| Finally.cs:109:17:109:33 | ... == ... | Finally.cs:113:9:118:9 | {...} | false | | Finally.cs:109:17:109:33 | ... == ... | Finally.cs:113:9:118:9 | {...} | false |
| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | false | | Finally.cs:114:17:114:36 | [false, finally: exception] !... | Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | false |
| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | false |
| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | false |
| Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | false | | Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | false |
| Finally.cs:114:17:114:36 | [false] !... | Finally.cs:116:13:117:37 | if (...) ... | false | | Finally.cs:114:17:114:36 | [false] !... | Finally.cs:116:13:117:37 | if (...) ... | false |
| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | true | | Finally.cs:114:17:114:36 | [true, finally: exception] !... | Finally.cs:115:17:115:41 | [finally: exception] ...; | true |
| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | true |
| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | true |
| Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:115:17:115:41 | [finally: return] ...; | true | | Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:115:17:115:41 | [finally: return] ...; | true |
| Finally.cs:114:17:114:36 | [true] !... | Finally.cs:115:17:115:41 | ...; | true | | Finally.cs:114:17:114:36 | [true] !... | Finally.cs:115:17:115:41 | ...; | true |
| Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:17:114:36 | [false] !... | true | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:17:114:36 | [false] !... | true |
| Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:17:114:36 | [true] !... | false | | Finally.cs:114:19:114:35 | ... == ... | Finally.cs:114:17:114:36 | [true] !... | false |
| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | true | | Finally.cs:114:19:114:35 | [finally: exception] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception] !... | true |
| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | false | | Finally.cs:114:19:114:35 | [finally: exception] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception] !... | false |
| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | true |
| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | false |
| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | true |
| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | false |
| Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:17:114:36 | [false, finally: return] !... | true | | Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:17:114:36 | [false, finally: return] !... | true |
| Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:17:114:36 | [true, finally: return] !... | false | | Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:114:17:114:36 | [true, finally: return] !... | false |
| Finally.cs:116:17:116:32 | ... > ... | Finally.cs:103:10:103:11 | exit M5 (normal) | false | | Finally.cs:116:17:116:32 | ... > ... | Finally.cs:103:10:103:11 | exit M5 (normal) | false |
| Finally.cs:116:17:116:32 | ... > ... | Finally.cs:117:17:117:37 | ...; | true | | Finally.cs:116:17:116:32 | ... > ... | Finally.cs:117:17:117:37 | ...; | true |
| Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | true | | Finally.cs:116:17:116:32 | [finally: exception] ... > ... | Finally.cs:117:17:117:37 | [finally: exception] ...; | true |
| Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | true |
| Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | true |
| Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:117:17:117:37 | [finally: return] ...; | true | | Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:117:17:117:37 | [finally: return] ...; | true |
| Finally.cs:151:17:151:28 | ... == ... | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | true | | Finally.cs:151:17:151:28 | ... == ... | Finally.cs:152:23:152:49 | object creation of type ArgumentNullException | true |
| Finally.cs:151:17:151:28 | ... == ... | Finally.cs:155:9:169:9 | {...} | false | | Finally.cs:151:17:151:28 | ... == ... | Finally.cs:155:9:169:9 | {...} | false |
| Finally.cs:158:21:158:36 | ... == ... | Finally.cs:147:10:147:11 | exit M8 (normal) | false | | Finally.cs:158:21:158:36 | ... == ... | Finally.cs:147:10:147:11 | exit M8 (normal) | false |
| Finally.cs:158:21:158:36 | ... == ... | Finally.cs:159:41:159:43 | "1" | true | | Finally.cs:158:21:158:36 | ... == ... | Finally.cs:159:41:159:43 | "1" | true |
| Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | true | | Finally.cs:158:21:158:36 | [finally: exception] ... == ... | Finally.cs:159:41:159:43 | [finally: exception] "1" | true |
| Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | true |
| Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | Finally.cs:162:13:164:13 | {...} | true | | Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | Finally.cs:162:13:164:13 | {...} | true |
| Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | Finally.cs:165:13:168:13 | catch {...} | false | | Finally.cs:161:39:161:54 | [exception: Exception] ... == ... | Finally.cs:165:13:168:13 | catch {...} | false |
| Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | {...} | true | | Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | {...} | true |
| Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | catch {...} | false | | Finally.cs:161:39:161:54 | [exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | catch {...} | false |
| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | true | | Finally.cs:161:39:161:54 | [finally: exception, exception: Exception] ... == ... | Finally.cs:162:13:164:13 | [finally: exception] {...} | true |
| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | false | | Finally.cs:161:39:161:54 | [finally: exception, exception: Exception] ... == ... | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | false |
| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | true | | Finally.cs:161:39:161:54 | [finally: exception, exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | [finally: exception] {...} | true |
| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | false | | Finally.cs:161:39:161:54 | [finally: exception, exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | false |
| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | true |
| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | false |
| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | true |
| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | false |
| Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | true | | Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | true |
| Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | false | | Finally.cs:180:17:180:18 | access to parameter b1 | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | false |
| Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:176:10:176:11 | exit M9 (normal) | false |
| Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | true | | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | true |
| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true | | Finally.cs:186:21:186:22 | [finally: exception, b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true |
| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | true |
| Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | true | | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | true |
| Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | true | | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | true |
| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | true | | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | true |
| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | true | | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | true |
| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | true |
| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | true |
| Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | Finally.cs:176:10:176:11 | exit M9 (normal) | false | | Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | Finally.cs:176:10:176:11 | exit M9 (normal) | false |
| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | true | | Finally.cs:190:21:190:22 | [finally: exception, b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | true |
| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true |
| Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:199:27:199:42 | object creation of type ExceptionA | true | | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:199:27:199:42 | object creation of type ExceptionA | true |
| Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:202:9:212:9 | {...} | false | | Finally.cs:199:17:199:18 | access to parameter b1 | Finally.cs:202:9:212:9 | {...} | false |
| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | true | | Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | true |
| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | false | | Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception] {...} | false |
| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | true |
| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | false |
| Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:205:31:205:46 | object creation of type ExceptionB | true | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:205:31:205:46 | object creation of type ExceptionB | true |
| Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:208:13:210:13 | {...} | false | | Finally.cs:205:21:205:22 | access to parameter b2 | Finally.cs:208:13:210:13 | {...} | false |
| Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | true | | Finally.cs:209:21:209:22 | [finally(1): exception] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | true |
| Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | | Finally.cs:209:21:209:22 | [finally: exception, finally(1): exception] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | true |
| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | true | | Finally.cs:209:21:209:22 | [finally: exception] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | true |
| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true | | Finally.cs:209:21:209:22 | [finally: exception] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception] ...; | false |
| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | true |
| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | false |
| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | true |
| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | true |
| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | true |
| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | false |
| Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:209:31:209:46 | object creation of type ExceptionC | true | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:209:31:209:46 | object creation of type ExceptionC | true |
| Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:211:13:211:29 | ...; | false | | Finally.cs:209:21:209:22 | access to parameter b3 | Finally.cs:211:13:211:29 | ...; | false |
| Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:240:27:240:42 | object creation of type ExceptionA | true | | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:240:27:240:42 | object creation of type ExceptionA | true |
| Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:243:13:253:13 | {...} | false | | Finally.cs:239:21:239:22 | access to parameter b1 | Finally.cs:243:13:253:13 | {...} | false |
| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | true | | Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | true |
| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | false | | Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception] {...} | false |
| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | true |
| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | false |
| Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:247:31:247:46 | object creation of type ExceptionA | true | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:247:31:247:46 | object creation of type ExceptionA | true |
| Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:250:17:252:17 | {...} | false | | Finally.cs:246:25:246:26 | access to parameter b2 | Finally.cs:250:17:252:17 | {...} | false |
| LoopUnrolling.cs:9:13:9:28 | ... == ... | LoopUnrolling.cs:10:13:10:19 | return ...; | true | | LoopUnrolling.cs:9:13:9:28 | ... == ... | LoopUnrolling.cs:10:13:10:19 | return ...; | true |

View File

@@ -4,8 +4,7 @@ import ControlFlow
query predicate conditionBlock( query predicate conditionBlock(
BasicBlocks::ConditionBlock cb, BasicBlock controlled, boolean testIsTrue BasicBlocks::ConditionBlock cb, BasicBlock controlled, boolean testIsTrue
) { ) {
cb.edgeDominates(controlled, cb.edgeDominates(controlled, any(ConditionalSuccessor s | testIsTrue = s.getValue()))
any(SuccessorTypes::ConditionalSuccessor s | testIsTrue = s.getValue()))
} }
ControlFlow::Node successor(ControlFlow::Node node, boolean kind) { ControlFlow::Node successor(ControlFlow::Node node, boolean kind) {

View File

@@ -508,65 +508,45 @@ booleanNode
| Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | b1 (line 176): true | | Finally.cs:180:21:180:43 | [b1 (line 176): true] throw ...; | b1 (line 176): true |
| Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | b1 (line 176): true | | Finally.cs:180:27:180:42 | [b1 (line 176): true] object creation of type ExceptionA | b1 (line 176): true |
| Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | b1 (line 176): false | | Finally.cs:183:9:192:9 | [b1 (line 176): false] {...} | b1 (line 176): false |
| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | b1 (line 176): true | | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | b1 (line 176): true |
| Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | b1 (line 176): true |
| Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | b1 (line 176): false | | Finally.cs:184:13:191:13 | [b1 (line 176): false] try {...} ... | b1 (line 176): false |
| Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | b1 (line 176): true | | Finally.cs:184:13:191:13 | [finally: exception, b1 (line 176): true] try {...} ... | b1 (line 176): true |
| Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | b1 (line 176): true |
| Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | b1 (line 176): false | | Finally.cs:185:13:187:13 | [b1 (line 176): false] {...} | b1 (line 176): false |
| Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | b1 (line 176): true | | Finally.cs:185:13:187:13 | [finally: exception, b1 (line 176): true] {...} | b1 (line 176): true |
| Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | b1 (line 176): true |
| Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | b1 (line 176): false | | Finally.cs:186:17:186:47 | [b1 (line 176): false] if (...) ... | b1 (line 176): false |
| Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | b1 (line 176): true | | Finally.cs:186:17:186:47 | [finally: exception, b1 (line 176): true] if (...) ... | b1 (line 176): true |
| Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | b1 (line 176): true |
| Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | b1 (line 176): false | | Finally.cs:186:21:186:22 | [b1 (line 176): false] access to parameter b2 | b1 (line 176): false |
| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | b1 (line 176): true | | Finally.cs:186:21:186:22 | [finally: exception, b1 (line 176): true] access to parameter b2 | b1 (line 176): true |
| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | b1 (line 176): true |
| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | b1 (line 176): false | | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | b1 (line 176): false |
| Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | b2 (line 176): true | | Finally.cs:186:25:186:47 | [b1 (line 176): false, b2 (line 176): true] throw ...; | b2 (line 176): true |
| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | b1 (line 176): true | | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | b1 (line 176): true |
| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | b2 (line 176): true | | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | b2 (line 176): true |
| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | b1 (line 176): true |
| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | b2 (line 176): true |
| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | b1 (line 176): false | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | b1 (line 176): false |
| Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | b2 (line 176): true | | Finally.cs:186:31:186:46 | [b1 (line 176): false, b2 (line 176): true] object creation of type ExceptionB | b2 (line 176): true |
| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | b1 (line 176): true | | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | b1 (line 176): true |
| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | b2 (line 176): true | | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | b2 (line 176): true |
| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | b1 (line 176): true |
| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | b2 (line 176): true |
| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | b1 (line 176): false | | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | b1 (line 176): false |
| Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | | Finally.cs:188:13:191:13 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | b2 (line 176): true |
| Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | b1 (line 176): false | | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | b1 (line 176): false |
| Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | | Finally.cs:188:13:191:13 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] catch (...) {...} | b2 (line 176): true |
| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b1 (line 176): true | | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b1 (line 176): true |
| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b2 (line 176): true |
| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b1 (line 176): true | | Finally.cs:188:13:191:13 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b1 (line 176): true |
| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b2 (line 176): true | | Finally.cs:188:13:191:13 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b2 (line 176): true |
| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b1 (line 176): true |
| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b2 (line 176): true |
| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b1 (line 176): true |
| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | b2 (line 176): true |
| Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | b1 (line 176): false | | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | b1 (line 176): false |
| Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | | Finally.cs:188:38:188:39 | [exception: Exception, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | b2 (line 176): true |
| Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | b1 (line 176): false | | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | b1 (line 176): false |
| Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | | Finally.cs:188:38:188:39 | [exception: ExceptionB, b1 (line 176): false, b2 (line 176): true] access to parameter b2 | b2 (line 176): true |
| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b1 (line 176): true | | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b1 (line 176): true |
| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b2 (line 176): true |
| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b1 (line 176): true | | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b1 (line 176): true |
| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b2 (line 176): true | | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b2 (line 176): true |
| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b1 (line 176): true |
| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b2 (line 176): true |
| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b1 (line 176): true |
| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | b2 (line 176): true |
| Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | b1 (line 176): false | | Finally.cs:189:13:191:13 | [b1 (line 176): false] {...} | b1 (line 176): false |
| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | b1 (line 176): true | | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | b1 (line 176): true |
| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | b1 (line 176): true |
| Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | b1 (line 176): false | | Finally.cs:190:17:190:47 | [b1 (line 176): false] if (...) ... | b1 (line 176): false |
| Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | b1 (line 176): true | | Finally.cs:190:17:190:47 | [finally: exception, b1 (line 176): true] if (...) ... | b1 (line 176): true |
| Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | b1 (line 176): true |
| Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | b1 (line 176): false | | Finally.cs:190:21:190:22 | [b1 (line 176): false] access to parameter b1 | b1 (line 176): false |
| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | b1 (line 176): true | | Finally.cs:190:21:190:22 | [finally: exception, b1 (line 176): true] access to parameter b1 | b1 (line 176): true |
| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | b1 (line 176): true |
| LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | b (line 55): false | | LoopUnrolling.cs:58:9:64:9 | [b (line 55): false] foreach (... ... in ...) ... | b (line 55): false |
| LoopUnrolling.cs:58:9:64:9 | [b (line 55): true] foreach (... ... in ...) ... | b (line 55): true | | LoopUnrolling.cs:58:9:64:9 | [b (line 55): true] foreach (... ... in ...) ... | b (line 55): true |
| LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | b (line 55): false | | LoopUnrolling.cs:58:22:58:22 | [b (line 55): false] String x | b (line 55): false |
@@ -614,41 +594,33 @@ finallyNode
| BreakInTry.cs:67:21:67:31 | [finally: return] ... == ... | BreakInTry.cs:58:9:70:9 | try {...} ... | | BreakInTry.cs:67:21:67:31 | [finally: return] ... == ... | BreakInTry.cs:58:9:70:9 | try {...} ... |
| BreakInTry.cs:67:28:67:31 | [finally: return] null | BreakInTry.cs:58:9:70:9 | try {...} ... | | BreakInTry.cs:67:28:67:31 | [finally: return] null | BreakInTry.cs:58:9:70:9 | try {...} ... |
| BreakInTry.cs:68:21:68:26 | [finally: return] break; | BreakInTry.cs:58:9:70:9 | try {...} ... | | BreakInTry.cs:68:21:68:26 | [finally: return] break; | BreakInTry.cs:58:9:70:9 | try {...} ... |
| CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | | CompileTimeOperators.cs:36:9:38:9 | [finally: goto] {...} | CompileTimeOperators.cs:30:9:38:9 | try {...} ... |
| CompileTimeOperators.cs:37:13:37:40 | [finally: goto(End)] call to method WriteLine | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | | CompileTimeOperators.cs:37:13:37:40 | [finally: goto] call to method WriteLine | CompileTimeOperators.cs:30:9:38:9 | try {...} ... |
| CompileTimeOperators.cs:37:13:37:41 | [finally: goto(End)] ...; | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | | CompileTimeOperators.cs:37:13:37:41 | [finally: goto] ...; | CompileTimeOperators.cs:30:9:38:9 | try {...} ... |
| CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "Finally" | CompileTimeOperators.cs:30:9:38:9 | try {...} ... | | CompileTimeOperators.cs:37:31:37:39 | [finally: goto] "Finally" | CompileTimeOperators.cs:30:9:38:9 | try {...} ... |
| Finally.cs:14:9:16:9 | [finally: exception(Exception)] {...} | Finally.cs:9:9:16:9 | try {...} ... | | Finally.cs:14:9:16:9 | [finally: exception] {...} | Finally.cs:9:9:16:9 | try {...} ... |
| Finally.cs:15:13:15:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:9:9:16:9 | try {...} ... | | Finally.cs:15:13:15:40 | [finally: exception] call to method WriteLine | Finally.cs:9:9:16:9 | try {...} ... |
| Finally.cs:15:13:15:41 | [finally: exception(Exception)] ...; | Finally.cs:9:9:16:9 | try {...} ... | | Finally.cs:15:13:15:41 | [finally: exception] ...; | Finally.cs:9:9:16:9 | try {...} ... |
| Finally.cs:15:31:15:39 | [finally: exception(Exception)] "Finally" | Finally.cs:9:9:16:9 | try {...} ... | | Finally.cs:15:31:15:39 | [finally: exception] "Finally" | Finally.cs:9:9:16:9 | try {...} ... |
| Finally.cs:37:13:39:13 | [finally: exception(ArgumentException)] {...} | Finally.cs:32:13:39:13 | try {...} ... | | Finally.cs:37:13:39:13 | [finally: exception] {...} | Finally.cs:32:13:39:13 | try {...} ... |
| Finally.cs:38:17:38:44 | [finally: exception(ArgumentException)] throw ...; | Finally.cs:32:13:39:13 | try {...} ... | | Finally.cs:38:17:38:44 | [finally: exception] throw ...; | Finally.cs:32:13:39:13 | try {...} ... |
| Finally.cs:38:23:38:43 | [finally: exception(ArgumentException)] object creation of type Exception | Finally.cs:32:13:39:13 | try {...} ... | | Finally.cs:38:23:38:43 | [finally: exception] object creation of type Exception | Finally.cs:32:13:39:13 | try {...} ... |
| Finally.cs:38:37:38:42 | [finally: exception(ArgumentException)] "Boo!" | Finally.cs:32:13:39:13 | try {...} ... | | Finally.cs:38:37:38:42 | [finally: exception] "Boo!" | Finally.cs:32:13:39:13 | try {...} ... |
| Finally.cs:49:9:51:9 | [finally: exception(Exception)] {...} | Finally.cs:21:9:51:9 | try {...} ... | | Finally.cs:49:9:51:9 | [finally: exception] {...} | Finally.cs:21:9:51:9 | try {...} ... |
| Finally.cs:49:9:51:9 | [finally: exception(IOException)] {...} | Finally.cs:21:9:51:9 | try {...} ... |
| Finally.cs:49:9:51:9 | [finally: return] {...} | Finally.cs:21:9:51:9 | try {...} ... | | Finally.cs:49:9:51:9 | [finally: return] {...} | Finally.cs:21:9:51:9 | try {...} ... |
| Finally.cs:50:13:50:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:21:9:51:9 | try {...} ... | | Finally.cs:50:13:50:40 | [finally: exception] call to method WriteLine | Finally.cs:21:9:51:9 | try {...} ... |
| Finally.cs:50:13:50:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:21:9:51:9 | try {...} ... |
| Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | Finally.cs:21:9:51:9 | try {...} ... | | Finally.cs:50:13:50:40 | [finally: return] call to method WriteLine | Finally.cs:21:9:51:9 | try {...} ... |
| Finally.cs:50:13:50:41 | [finally: exception(Exception)] ...; | Finally.cs:21:9:51:9 | try {...} ... | | Finally.cs:50:13:50:41 | [finally: exception] ...; | Finally.cs:21:9:51:9 | try {...} ... |
| Finally.cs:50:13:50:41 | [finally: exception(IOException)] ...; | Finally.cs:21:9:51:9 | try {...} ... |
| Finally.cs:50:13:50:41 | [finally: return] ...; | Finally.cs:21:9:51:9 | try {...} ... | | Finally.cs:50:13:50:41 | [finally: return] ...; | Finally.cs:21:9:51:9 | try {...} ... |
| Finally.cs:50:31:50:39 | [finally: exception(Exception)] "Finally" | Finally.cs:21:9:51:9 | try {...} ... | | Finally.cs:50:31:50:39 | [finally: exception] "Finally" | Finally.cs:21:9:51:9 | try {...} ... |
| Finally.cs:50:31:50:39 | [finally: exception(IOException)] "Finally" | Finally.cs:21:9:51:9 | try {...} ... |
| Finally.cs:50:31:50:39 | [finally: return] "Finally" | Finally.cs:21:9:51:9 | try {...} ... | | Finally.cs:50:31:50:39 | [finally: return] "Finally" | Finally.cs:21:9:51:9 | try {...} ... |
| Finally.cs:69:9:71:9 | [finally: exception(Exception)] {...} | Finally.cs:56:9:71:9 | try {...} ... | | Finally.cs:69:9:71:9 | [finally: exception] {...} | Finally.cs:56:9:71:9 | try {...} ... |
| Finally.cs:69:9:71:9 | [finally: exception(IOException)] {...} | Finally.cs:56:9:71:9 | try {...} ... |
| Finally.cs:69:9:71:9 | [finally: return] {...} | Finally.cs:56:9:71:9 | try {...} ... | | Finally.cs:69:9:71:9 | [finally: return] {...} | Finally.cs:56:9:71:9 | try {...} ... |
| Finally.cs:70:13:70:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:56:9:71:9 | try {...} ... | | Finally.cs:70:13:70:40 | [finally: exception] call to method WriteLine | Finally.cs:56:9:71:9 | try {...} ... |
| Finally.cs:70:13:70:40 | [finally: exception(IOException)] call to method WriteLine | Finally.cs:56:9:71:9 | try {...} ... |
| Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | Finally.cs:56:9:71:9 | try {...} ... | | Finally.cs:70:13:70:40 | [finally: return] call to method WriteLine | Finally.cs:56:9:71:9 | try {...} ... |
| Finally.cs:70:13:70:41 | [finally: exception(Exception)] ...; | Finally.cs:56:9:71:9 | try {...} ... | | Finally.cs:70:13:70:41 | [finally: exception] ...; | Finally.cs:56:9:71:9 | try {...} ... |
| Finally.cs:70:13:70:41 | [finally: exception(IOException)] ...; | Finally.cs:56:9:71:9 | try {...} ... |
| Finally.cs:70:13:70:41 | [finally: return] ...; | Finally.cs:56:9:71:9 | try {...} ... | | Finally.cs:70:13:70:41 | [finally: return] ...; | Finally.cs:56:9:71:9 | try {...} ... |
| Finally.cs:70:31:70:39 | [finally: exception(Exception)] "Finally" | Finally.cs:56:9:71:9 | try {...} ... | | Finally.cs:70:31:70:39 | [finally: exception] "Finally" | Finally.cs:56:9:71:9 | try {...} ... |
| Finally.cs:70:31:70:39 | [finally: exception(IOException)] "Finally" | Finally.cs:56:9:71:9 | try {...} ... |
| Finally.cs:70:31:70:39 | [finally: return] "Finally" | Finally.cs:56:9:71:9 | try {...} ... | | Finally.cs:70:31:70:39 | [finally: return] "Finally" | Finally.cs:56:9:71:9 | try {...} ... |
| Finally.cs:89:13:99:13 | [finally: break] {...} | Finally.cs:79:13:99:13 | try {...} ... | | Finally.cs:89:13:99:13 | [finally: break] {...} | Finally.cs:79:13:99:13 | try {...} ... |
| Finally.cs:89:13:99:13 | [finally: continue] {...} | Finally.cs:79:13:99:13 | try {...} ... | | Finally.cs:89:13:99:13 | [finally: continue] {...} | Finally.cs:79:13:99:13 | try {...} ... |
@@ -677,351 +649,190 @@ finallyNode
| Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:79:13:99:13 | try {...} ... | | Finally.cs:93:31:93:45 | [finally: break] object creation of type Exception | Finally.cs:79:13:99:13 | try {...} ... |
| Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:79:13:99:13 | try {...} ... | | Finally.cs:93:31:93:45 | [finally: continue] object creation of type Exception | Finally.cs:79:13:99:13 | try {...} ... |
| Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:79:13:99:13 | try {...} ... | | Finally.cs:93:31:93:45 | [finally: return] object creation of type Exception | Finally.cs:79:13:99:13 | try {...} ... |
| Finally.cs:96:17:98:17 | [finally(1): exception(Exception)] {...} | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:96:17:98:17 | [finally(1): exception] {...} | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:96:17:98:17 | [finally: break, finally(1): exception(Exception)] {...} | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:96:17:98:17 | [finally: break, finally(1): exception] {...} | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:96:17:98:17 | [finally: break] {...} | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception(Exception)] {...} | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:96:17:98:17 | [finally: continue, finally(1): exception] {...} | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:96:17:98:17 | [finally: continue] {...} | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:96:17:98:17 | [finally: return, finally(1): exception(Exception)] {...} | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:96:17:98:17 | [finally: return, finally(1): exception] {...} | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:96:17:98:17 | [finally: return] {...} | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:21 | [finally(1): exception(Exception)] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:21 | [finally(1): exception] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:21 | [finally: break, finally(1): exception(Exception)] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:21 | [finally: break, finally(1): exception] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:21 | [finally: break] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:21 | [finally: break] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception(Exception)] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:21 | [finally: continue, finally(1): exception] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:21 | [finally: continue] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:21 | [finally: return, finally(1): exception(Exception)] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:21 | [finally: return, finally(1): exception] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:21 | [finally: return] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:21 | [finally: return] access to local variable i | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:23 | [finally(1): exception(Exception)] ...-- | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:23 | [finally(1): exception] ...-- | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:23 | [finally: break, finally(1): exception(Exception)] ...-- | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:23 | [finally: break, finally(1): exception] ...-- | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:23 | [finally: break] ...-- | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:23 | [finally: break] ...-- | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception(Exception)] ...-- | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:23 | [finally: continue, finally(1): exception] ...-- | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:23 | [finally: continue] ...-- | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:23 | [finally: continue] ...-- | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:23 | [finally: return, finally(1): exception(Exception)] ...-- | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:23 | [finally: return, finally(1): exception] ...-- | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:23 | [finally: return] ...-- | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:23 | [finally: return] ...-- | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:24 | [finally(1): exception(Exception)] ...; | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:24 | [finally(1): exception] ...; | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:24 | [finally: break, finally(1): exception(Exception)] ...; | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:24 | [finally: break, finally(1): exception] ...; | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:24 | [finally: break] ...; | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:24 | [finally: break] ...; | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception(Exception)] ...; | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:24 | [finally: continue, finally(1): exception] ...; | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:24 | [finally: continue] ...; | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:24 | [finally: continue] ...; | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:24 | [finally: return, finally(1): exception(Exception)] ...; | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:24 | [finally: return, finally(1): exception] ...; | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:97:21:97:24 | [finally: return] ...; | Finally.cs:90:17:98:17 | try {...} ... | | Finally.cs:97:21:97:24 | [finally: return] ...; | Finally.cs:90:17:98:17 | try {...} ... |
| Finally.cs:113:9:118:9 | [finally: exception(Exception)] {...} | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:113:9:118:9 | [finally: exception(NullReferenceException)] {...} | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:113:9:118:9 | [finally: exception(OutOfMemoryException)] {...} | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:113:9:118:9 | [finally: return] {...} | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:113:9:118:9 | [finally: return] {...} | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:13:115:41 | [finally: exception(Exception)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:13:115:41 | [finally: exception] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:13:115:41 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:13:115:41 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:13:115:41 | [finally: return] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:13:115:41 | [finally: return] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:17:114:36 | [false, finally: exception(Exception)] !... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:17:114:36 | [false, finally: exception] !... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:17:114:36 | [false, finally: exception(NullReferenceException)] !... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:17:114:36 | [false, finally: return] !... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:17:114:36 | [true, finally: exception(Exception)] !... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:17:114:36 | [true, finally: exception] !... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:17:114:36 | [true, finally: exception(NullReferenceException)] !... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:17:114:36 | [true, finally: return] !... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:19:114:23 | [finally: exception(Exception)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:19:114:23 | [finally: exception] access to field Field | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:19:114:23 | [finally: exception(Exception)] this access | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:19:114:23 | [finally: exception] this access | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:19:114:23 | [finally: exception(NullReferenceException)] this access | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:19:114:23 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:19:114:23 | [finally: return] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:19:114:23 | [finally: return] access to field Field | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:19:114:23 | [finally: return] this access | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:19:114:23 | [finally: return] this access | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:19:114:30 | [finally: exception(Exception)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:19:114:30 | [finally: exception] access to property Length | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:19:114:30 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:19:114:30 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:19:114:30 | [finally: return] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:19:114:30 | [finally: return] access to property Length | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:19:114:35 | [finally: exception(Exception)] ... == ... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:19:114:35 | [finally: exception] ... == ... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:19:114:35 | [finally: exception(OutOfMemoryException)] ... == ... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:19:114:35 | [finally: return] ... == ... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:35:114:35 | [finally: exception(Exception)] 0 | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:35:114:35 | [finally: exception] 0 | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:35:114:35 | [finally: exception(NullReferenceException)] 0 | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:35:114:35 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:114:35:114:35 | [finally: return] 0 | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:114:35:114:35 | [finally: return] 0 | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:115:17:115:40 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:115:17:115:40 | [finally: exception] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:115:17:115:40 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:115:17:115:40 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:115:17:115:40 | [finally: return] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:115:17:115:41 | [finally: exception(Exception)] ...; | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:115:17:115:41 | [finally: exception] ...; | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:115:17:115:41 | [finally: exception(NullReferenceException)] ...; | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:115:17:115:41 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:115:17:115:41 | [finally: return] ...; | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:115:35:115:39 | [finally: exception(Exception)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:115:35:115:39 | [finally: exception] access to field Field | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:115:35:115:39 | [finally: exception(Exception)] this access | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:115:35:115:39 | [finally: exception] this access | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:115:35:115:39 | [finally: exception(NullReferenceException)] this access | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:115:35:115:39 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:115:35:115:39 | [finally: return] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:115:35:115:39 | [finally: return] access to field Field | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:115:35:115:39 | [finally: return] this access | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:115:35:115:39 | [finally: return] this access | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:13:117:37 | [finally: exception(Exception)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:13:117:37 | [finally: exception] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:13:117:37 | [finally: exception(NullReferenceException)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:13:117:37 | [finally: exception(OutOfMemoryException)] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:13:117:37 | [finally: return] if (...) ... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:17:116:21 | [finally: exception(Exception)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:17:116:21 | [finally: exception] access to field Field | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:17:116:21 | [finally: exception(Exception)] this access | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:17:116:21 | [finally: exception] this access | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:17:116:21 | [finally: exception(NullReferenceException)] this access | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] access to field Field | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:17:116:21 | [finally: exception(OutOfMemoryException)] this access | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:17:116:21 | [finally: return] access to field Field | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:17:116:21 | [finally: return] access to field Field | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:17:116:21 | [finally: return] this access | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:17:116:21 | [finally: return] this access | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:17:116:28 | [finally: exception(Exception)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:17:116:28 | [finally: exception] access to property Length | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:17:116:28 | [finally: exception(NullReferenceException)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:17:116:28 | [finally: exception(OutOfMemoryException)] access to property Length | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:17:116:28 | [finally: return] access to property Length | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:17:116:28 | [finally: return] access to property Length | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:17:116:32 | [finally: exception(Exception)] ... > ... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:17:116:32 | [finally: exception] ... > ... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:17:116:32 | [finally: exception(NullReferenceException)] ... > ... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:17:116:32 | [finally: exception(OutOfMemoryException)] ... > ... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:17:116:32 | [finally: return] ... > ... | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:32:116:32 | [finally: exception(Exception)] 0 | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:32:116:32 | [finally: exception] 0 | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:32:116:32 | [finally: exception(NullReferenceException)] 0 | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:32:116:32 | [finally: exception(OutOfMemoryException)] 0 | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:116:32:116:32 | [finally: return] 0 | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:116:32:116:32 | [finally: return] 0 | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:117:17:117:36 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:117:17:117:36 | [finally: exception] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:117:17:117:36 | [finally: exception(NullReferenceException)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:117:17:117:36 | [finally: exception(OutOfMemoryException)] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:117:17:117:36 | [finally: return] call to method WriteLine | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:117:17:117:37 | [finally: exception(Exception)] ...; | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:117:17:117:37 | [finally: exception] ...; | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:117:17:117:37 | [finally: exception(NullReferenceException)] ...; | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:117:17:117:37 | [finally: return] ...; | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:117:35:117:35 | [finally: exception(Exception)] 1 | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:117:35:117:35 | [finally: exception] 1 | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:117:35:117:35 | [finally: exception(NullReferenceException)] 1 | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:117:35:117:35 | [finally: exception(OutOfMemoryException)] 1 | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:117:35:117:35 | [finally: return] 1 | Finally.cs:105:9:118:9 | try {...} ... | | Finally.cs:117:35:117:35 | [finally: return] 1 | Finally.cs:105:9:118:9 | try {...} ... |
| Finally.cs:140:9:143:9 | [finally: exception(Exception)] {...} | Finally.cs:135:9:143:9 | try {...} ... | | Finally.cs:140:9:143:9 | [finally: exception] {...} | Finally.cs:135:9:143:9 | try {...} ... |
| Finally.cs:141:13:141:44 | [finally: exception(Exception)] throw ...; | Finally.cs:135:9:143:9 | try {...} ... | | Finally.cs:141:13:141:44 | [finally: exception] throw ...; | Finally.cs:135:9:143:9 | try {...} ... |
| Finally.cs:141:19:141:43 | [finally: exception(Exception)] object creation of type ArgumentException | Finally.cs:135:9:143:9 | try {...} ... | | Finally.cs:141:19:141:43 | [finally: exception] object creation of type ArgumentException | Finally.cs:135:9:143:9 | try {...} ... |
| Finally.cs:141:41:141:42 | [finally: exception(Exception)] "" | Finally.cs:135:9:143:9 | try {...} ... | | Finally.cs:141:41:141:42 | [finally: exception] "" | Finally.cs:135:9:143:9 | try {...} ... |
| Finally.cs:155:9:169:9 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:155:9:169:9 | [finally: exception] {...} | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:155:9:169:9 | [finally: exception(Exception)] {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:156:13:168:13 | [finally: exception] try {...} ... | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:156:13:168:13 | [finally: exception(ArgumentNullException)] try {...} ... | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:157:13:160:13 | [finally: exception] {...} | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:156:13:168:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:158:17:159:45 | [finally: exception] if (...) ... | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:157:13:160:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:158:21:158:24 | [finally: exception] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:157:13:160:13 | [finally: exception(Exception)] {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:158:21:158:31 | [finally: exception] access to property Length | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:158:17:159:45 | [finally: exception(ArgumentNullException)] if (...) ... | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:158:21:158:36 | [finally: exception] ... == ... | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:158:17:159:45 | [finally: exception(Exception)] if (...) ... | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:158:36:158:36 | [finally: exception] 1 | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:158:21:158:24 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:159:21:159:45 | [finally: exception] throw ...; | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:158:21:158:24 | [finally: exception(Exception)] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:159:27:159:44 | [finally: exception] object creation of type Exception | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:158:21:158:31 | [finally: exception(ArgumentNullException)] access to property Length | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:159:41:159:43 | [finally: exception] "1" | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:158:21:158:31 | [finally: exception(Exception)] access to property Length | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:161:13:164:13 | [finally: exception, exception: Exception] catch (...) {...} | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:158:21:158:36 | [finally: exception(ArgumentNullException)] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:161:30:161:30 | [finally: exception, exception: Exception] Exception e | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:158:36:158:36 | [finally: exception(ArgumentNullException)] 1 | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:158:36:158:36 | [finally: exception(Exception)] 1 | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:161:39:161:39 | [finally: exception, exception: Exception] access to local variable e | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:159:21:159:45 | [finally: exception(ArgumentNullException)] throw ...; | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:161:39:161:39 | [finally: exception, exception: NullReferenceException] access to local variable e | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:159:21:159:45 | [finally: exception(Exception)] throw ...; | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:161:39:161:47 | [finally: exception, exception: Exception] access to property Message | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:159:27:159:44 | [finally: exception(ArgumentNullException)] object creation of type Exception | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:161:39:161:47 | [finally: exception, exception: NullReferenceException] access to property Message | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:159:27:159:44 | [finally: exception(Exception)] object creation of type Exception | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:161:39:161:54 | [finally: exception, exception: Exception] ... == ... | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "1" | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:161:39:161:54 | [finally: exception, exception: NullReferenceException] ... == ... | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:161:52:161:54 | [finally: exception, exception: Exception] "1" | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: Exception] catch (...) {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:161:52:161:54 | [finally: exception, exception: NullReferenceException] "1" | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:161:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:162:13:164:13 | [finally: exception] {...} | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: Exception] catch (...) {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:163:17:163:42 | [finally: exception] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:163:17:163:43 | [finally: exception] ...; | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: Exception] Exception e | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:163:35:163:38 | [finally: exception] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:163:35:163:41 | [finally: exception] access to array element | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: Exception] Exception e | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:163:40:163:40 | [finally: exception] 0 | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: Exception] access to local variable e | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:166:13:168:13 | [finally: exception] {...} | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:167:17:167:37 | [finally: exception] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: Exception] access to local variable e | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:167:17:167:38 | [finally: exception] ...; | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:167:35:167:36 | [finally: exception] "" | Finally.cs:149:9:169:9 | try {...} ... |
| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: Exception] access to property Message | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:183:9:192:9 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... |
| Finally.cs:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:184:13:191:13 | [finally: exception, b1 (line 176): true] try {...} ... | Finally.cs:178:9:192:9 | try {...} ... |
| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: Exception] access to property Message | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:185:13:187:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... |
| Finally.cs:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:186:17:186:47 | [finally: exception, b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... |
| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:186:21:186:22 | [finally: exception, b1 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... |
| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:178:9:192:9 | try {...} ... |
| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:186:31:186:46 | [finally: exception, b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:178:9:192:9 | try {...} ... |
| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:188:13:191:13 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:178:9:192:9 | try {...} ... |
| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:188:13:191:13 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:178:9:192:9 | try {...} ... |
| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:188:38:188:39 | [finally: exception, exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... |
| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:188:38:188:39 | [finally: exception, exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... |
| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... |
| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:190:17:190:47 | [finally: exception, b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... |
| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:190:21:190:22 | [finally: exception, b1 (line 176): true] access to parameter b1 | Finally.cs:178:9:192:9 | try {...} ... |
| Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:190:25:190:47 | [finally: exception] throw ...; | Finally.cs:178:9:192:9 | try {...} ... |
| Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:178:9:192:9 | try {...} ... |
| Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:203:13:210:13 | [finally: exception] try {...} ... | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:204:13:206:13 | [finally: exception] {...} | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:205:17:205:47 | [finally: exception] if (...) ... | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:208:13:210:13 | [finally(1): exception] {...} | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:209:17:209:47 | [finally(1): exception] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:209:17:209:47 | [finally: exception, finally(1): exception] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:209:17:209:47 | [finally: exception] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:209:21:209:22 | [finally(1): exception] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:209:21:209:22 | [finally: exception, finally(1): exception] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:209:21:209:22 | [finally: exception] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:209:25:209:47 | [finally(1): exception] throw ...; | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | Finally.cs:149:9:169:9 | try {...} ... | | Finally.cs:209:25:209:47 | [finally: exception, finally(1): exception] throw ...; | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:209:25:209:47 | [finally: exception] throw ...; | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:209:31:209:46 | [finally: exception, finally(1): exception] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:211:13:211:16 | [finally: exception] this access | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:211:13:211:28 | [finally: exception] ... = ... | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:186:17:186:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:211:13:211:29 | [finally: exception] ...; | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:211:26:211:28 | [finally: exception] "0" | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:186:21:186:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:244:17:252:17 | [finally: exception] try {...} ... | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:186:25:186:47 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:245:17:248:17 | [finally: exception] {...} | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:186:25:186:47 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:246:21:247:47 | [finally: exception] if (...) ... | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:186:31:186:46 | [finally: exception(Exception), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:186:31:186:46 | [finally: exception(ExceptionA), b1 (line 176): true, b2 (line 176): true] object creation of type ExceptionB | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:188:13:191:13 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:250:17:252:17 | [finally(1): exception] {...} | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:188:13:191:13 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] catch (...) {...} | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:250:17:252:17 | [finally: exception] {...} | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:251:21:251:54 | [finally(1): exception] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:188:38:188:39 | [finally: exception(Exception), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:251:21:251:54 | [finally: exception, finally(1): exception] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: Exception, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:251:21:251:54 | [finally: exception] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:188:38:188:39 | [finally: exception(ExceptionA), exception: ExceptionB, b1 (line 176): true, b2 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:251:21:251:55 | [finally(1): exception] ...; | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:251:21:251:55 | [finally: exception, finally(1): exception] ...; | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:251:21:251:55 | [finally: exception] ...; | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:251:39:251:53 | [finally(1): exception] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:251:39:251:53 | [finally: exception, finally(1): exception] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:190:21:190:22 | [finally: exception(Exception), b1 (line 176): true] access to parameter b1 | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:251:39:251:53 | [finally: exception] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:257:9:259:9 | [finally: exception] {...} | Finally.cs:235:9:259:9 | try {...} ... |
| Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:258:13:258:46 | [finally: exception] call to method WriteLine | Finally.cs:235:9:259:9 | try {...} ... |
| Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:258:13:258:47 | [finally: exception] ...; | Finally.cs:235:9:259:9 | try {...} ... |
| Finally.cs:190:31:190:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:258:31:258:45 | [finally: exception] "Outer finally" | Finally.cs:235:9:259:9 | try {...} ... |
| Finally.cs:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:178:9:192:9 | try {...} ... | | Finally.cs:270:9:273:9 | [finally: exception] {...} | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:197:9:212:9 | try {...} ... | | Finally.cs:271:13:271:34 | [finally: exception] call to method WriteLine | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:197:9:212:9 | try {...} ... | | Finally.cs:271:13:271:35 | [finally: exception] ...; | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:197:9:212:9 | try {...} ... | | Finally.cs:271:31:271:33 | [finally: exception] "3" | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:197:9:212:9 | try {...} ... | | Finally.cs:272:13:272:13 | [finally: exception] access to parameter i | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | Finally.cs:197:9:212:9 | try {...} ... | | Finally.cs:272:13:272:18 | [finally: exception] ... + ... | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:197:9:212:9 | try {...} ... | | Finally.cs:272:13:272:18 | [finally: exception] ... = ... | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:197:9:212:9 | try {...} ... | | Finally.cs:272:13:272:19 | [finally: exception] ...; | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:197:9:212:9 | try {...} ... | | Finally.cs:272:18:272:18 | [finally: exception] 3 | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:205:21:205:22 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:205:21:205:22 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:205:25:205:47 | [finally: exception(Exception)] throw ...; | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:205:31:205:46 | [finally: exception(Exception)] object creation of type ExceptionB | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:205:31:205:46 | [finally: exception(ExceptionA)] object creation of type ExceptionB | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:208:13:210:13 | [finally(1): exception(Exception)] {...} | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:208:13:210:13 | [finally(1): exception(ExceptionB)] {...} | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:208:13:210:13 | [finally: exception(Exception), finally(1): exception(ExceptionB)] {...} | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:208:13:210:13 | [finally: exception(Exception)] {...} | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] {...} | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:17:209:47 | [finally(1): exception(Exception)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:17:209:47 | [finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:17:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:17:209:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:17:209:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:21:209:22 | [finally(1): exception(Exception)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:21:209:22 | [finally: exception(Exception), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:21:209:22 | [finally: exception(Exception)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(Exception)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:21:209:22 | [finally: exception(ExceptionA)] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:25:209:47 | [finally(1): exception(Exception)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:25:209:47 | [finally(1): exception(ExceptionB)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(Exception)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:25:209:47 | [finally: exception(Exception), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:25:209:47 | [finally: exception(Exception)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(Exception)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:25:209:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:31:209:46 | [finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:31:209:46 | [finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:31:209:46 | [finally: exception(Exception), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:31:209:46 | [finally: exception(Exception)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(Exception)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA), finally(1): exception(ExceptionB)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:209:31:209:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... |
| Finally.cs:211:13:211:16 | [finally: exception(Exception)] this access | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:211:13:211:16 | [finally: exception(ExceptionA)] this access | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:211:13:211:29 | [finally: exception(Exception)] ...; | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:211:26:211:28 | [finally: exception(Exception)] "0" | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:211:26:211:28 | [finally: exception(ExceptionA)] "0" | Finally.cs:197:9:212:9 | try {...} ... |
| Finally.cs:243:13:253:13 | [finally: exception(Exception)] {...} | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:243:13:253:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:244:17:252:17 | [finally: exception(Exception)] try {...} ... | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:244:17:252:17 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:245:17:248:17 | [finally: exception(Exception)] {...} | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:245:17:248:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:246:21:247:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:246:21:247:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:246:25:246:26 | [finally: exception(Exception)] access to parameter b2 | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:247:25:247:47 | [finally: exception(Exception)] throw ...; | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:247:25:247:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:247:31:247:46 | [finally: exception(Exception)] object creation of type ExceptionA | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] object creation of type ExceptionA | Finally.cs:237:13:253:13 | try {...} ... |
| Finally.cs:250:17:252:17 | [finally(1): exception(Exception)] {...} | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:250:17:252:17 | [finally(1): exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(Exception)] {...} | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:250:17:252:17 | [finally: exception(Exception), finally(1): exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:250:17:252:17 | [finally: exception(Exception)] {...} | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:21:251:54 | [finally(1): exception(Exception)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:21:251:54 | [finally: exception(Exception), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:21:251:54 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(Exception)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:21:251:54 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:21:251:55 | [finally(1): exception(Exception)] ...; | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:21:251:55 | [finally(1): exception(ExceptionA)] ...; | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(Exception)] ...; | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:21:251:55 | [finally: exception(Exception), finally(1): exception(ExceptionA)] ...; | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:21:251:55 | [finally: exception(Exception)] ...; | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(Exception)] ...; | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] ...; | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:21:251:55 | [finally: exception(ExceptionA)] ...; | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:39:251:53 | [finally(1): exception(Exception)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:39:251:53 | [finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(Exception)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:39:251:53 | [finally: exception(Exception), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:39:251:53 | [finally: exception(Exception)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(Exception)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA), finally(1): exception(ExceptionA)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:251:39:251:53 | [finally: exception(ExceptionA)] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... |
| Finally.cs:257:9:259:9 | [finally: exception(Exception)] {...} | Finally.cs:235:9:259:9 | try {...} ... |
| Finally.cs:257:9:259:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:235:9:259:9 | try {...} ... |
| Finally.cs:258:13:258:46 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:235:9:259:9 | try {...} ... |
| Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] call to method WriteLine | Finally.cs:235:9:259:9 | try {...} ... |
| Finally.cs:258:13:258:47 | [finally: exception(Exception)] ...; | Finally.cs:235:9:259:9 | try {...} ... |
| Finally.cs:258:13:258:47 | [finally: exception(ExceptionA)] ...; | Finally.cs:235:9:259:9 | try {...} ... |
| Finally.cs:258:31:258:45 | [finally: exception(Exception)] "Outer finally" | Finally.cs:235:9:259:9 | try {...} ... |
| Finally.cs:258:31:258:45 | [finally: exception(ExceptionA)] "Outer finally" | Finally.cs:235:9:259:9 | try {...} ... |
| Finally.cs:270:9:273:9 | [finally: exception(Exception)] {...} | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:271:13:271:34 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:271:13:271:35 | [finally: exception(Exception)] ...; | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:271:31:271:33 | [finally: exception(Exception)] "3" | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:272:13:272:13 | [finally: exception(Exception)] access to parameter i | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... + ... | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:272:13:272:18 | [finally: exception(Exception)] ... = ... | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:272:13:272:19 | [finally: exception(Exception)] ...; | Finally.cs:265:9:273:9 | try {...} ... |
| Finally.cs:272:18:272:18 | [finally: exception(Exception)] 3 | Finally.cs:265:9:273:9 | try {...} ... |
| cflow.cs:274:9:276:9 | [finally: return] {...} | cflow.cs:268:9:276:9 | try {...} ... | | cflow.cs:274:9:276:9 | [finally: return] {...} | cflow.cs:268:9:276:9 | try {...} ... |
| cflow.cs:275:13:275:41 | [finally: return] call to method WriteLine | cflow.cs:268:9:276:9 | try {...} ... | | cflow.cs:275:13:275:41 | [finally: return] call to method WriteLine | cflow.cs:268:9:276:9 | try {...} ... |
| cflow.cs:275:13:275:42 | [finally: return] ...; | cflow.cs:268:9:276:9 | try {...} ... | | cflow.cs:275:13:275:42 | [finally: return] ...; | cflow.cs:268:9:276:9 | try {...} ... |

View File

@@ -12,7 +12,7 @@ class MyFinallySplitControlFlowNode extends ElementNode {
exists(Splitting::FinallySplitting::FinallySplitType type | exists(Splitting::FinallySplitting::FinallySplitType type |
type = this.getASplit().(FinallySplit).getType() type = this.getASplit().(FinallySplit).getType()
| |
not type instanceof SuccessorTypes::NormalSuccessor not type instanceof DirectSuccessor
) )
} }

View File

@@ -45,9 +45,9 @@
| patterns.cs:110:25:110:25 | 0 | patterns.cs:110:22:110:26 | (..., ...) | semmle.label | successor | | patterns.cs:110:25:110:25 | 0 | patterns.cs:110:22:110:26 | (..., ...) | semmle.label | successor |
| patterns.cs:111:13:111:17 | ( ... ) | patterns.cs:111:13:111:17 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:111:13:111:17 | ( ... ) | patterns.cs:111:13:111:17 | [no-match] { ... } | semmle.label | no-match |
| patterns.cs:111:13:111:17 | ( ... ) | patterns.cs:111:14:111:14 | 1 | semmle.label | match | | patterns.cs:111:13:111:17 | ( ... ) | patterns.cs:111:14:111:14 | 1 | semmle.label | match |
| patterns.cs:111:13:111:17 | [match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception(InvalidOperationException) | | patterns.cs:111:13:111:17 | [match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception |
| patterns.cs:111:13:111:17 | [match] { ... } | patterns.cs:111:23:111:23 | 0 | semmle.label | match | | patterns.cs:111:13:111:17 | [match] { ... } | patterns.cs:111:23:111:23 | 0 | semmle.label | match |
| patterns.cs:111:13:111:17 | [no-match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception(InvalidOperationException) | | patterns.cs:111:13:111:17 | [no-match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception |
| patterns.cs:111:13:111:26 | ... => ... | patterns.cs:108:24:112:9 | ... switch { ... } | semmle.label | successor | | patterns.cs:111:13:111:26 | ... => ... | patterns.cs:108:24:112:9 | ... switch { ... } | semmle.label | successor |
| patterns.cs:111:14:111:14 | 1 | patterns.cs:111:13:111:17 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:111:14:111:14 | 1 | patterns.cs:111:13:111:17 | [no-match] { ... } | semmle.label | no-match |
| patterns.cs:111:14:111:14 | 1 | patterns.cs:111:16:111:16 | 0 | semmle.label | match | | patterns.cs:111:14:111:14 | 1 | patterns.cs:111:16:111:16 | 0 | semmle.label | match |
@@ -89,9 +89,9 @@
| patterns.cs:118:32:118:33 | access to local variable x2 | patterns.cs:118:28:118:34 | (..., ...) | semmle.label | successor | | patterns.cs:118:32:118:33 | access to local variable x2 | patterns.cs:118:28:118:34 | (..., ...) | semmle.label | successor |
| patterns.cs:119:13:119:28 | ( ... ) | patterns.cs:119:13:119:28 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:119:13:119:28 | ( ... ) | patterns.cs:119:13:119:28 | [no-match] { ... } | semmle.label | no-match |
| patterns.cs:119:13:119:28 | ( ... ) | patterns.cs:119:14:119:19 | Int32 x2 | semmle.label | match | | patterns.cs:119:13:119:28 | ( ... ) | patterns.cs:119:14:119:19 | Int32 x2 | semmle.label | match |
| patterns.cs:119:13:119:28 | [match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception(InvalidOperationException) | | patterns.cs:119:13:119:28 | [match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception |
| patterns.cs:119:13:119:28 | [match] { ... } | patterns.cs:119:34:119:34 | 0 | semmle.label | match | | patterns.cs:119:13:119:28 | [match] { ... } | patterns.cs:119:34:119:34 | 0 | semmle.label | match |
| patterns.cs:119:13:119:28 | [no-match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception(InvalidOperationException) | | patterns.cs:119:13:119:28 | [no-match] { ... } | patterns.cs:98:10:98:20 | exit Expressions (abnormal) | semmle.label | exception |
| patterns.cs:119:13:119:38 | ... => ... | patterns.cs:115:20:120:9 | ... switch { ... } | semmle.label | successor | | patterns.cs:119:13:119:38 | ... => ... | patterns.cs:115:20:120:9 | ... switch { ... } | semmle.label | successor |
| patterns.cs:119:14:119:19 | Int32 x2 | patterns.cs:119:13:119:28 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:119:14:119:19 | Int32 x2 | patterns.cs:119:13:119:28 | [no-match] { ... } | semmle.label | no-match |
| patterns.cs:119:14:119:19 | Int32 x2 | patterns.cs:119:22:119:27 | Int32 y2 | semmle.label | match | | patterns.cs:119:14:119:19 | Int32 x2 | patterns.cs:119:22:119:27 | Int32 y2 | semmle.label | match |
@@ -148,7 +148,7 @@
| patterns.cs:130:17:130:17 | 2 | patterns.cs:130:13:130:18 | [match] { ... } | semmle.label | match | | patterns.cs:130:17:130:17 | 2 | patterns.cs:130:13:130:18 | [match] { ... } | semmle.label | match |
| patterns.cs:130:17:130:17 | 2 | patterns.cs:130:13:130:18 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:130:17:130:17 | 2 | patterns.cs:130:13:130:18 | [no-match] { ... } | semmle.label | no-match |
| patterns.cs:130:23:130:23 | 2 | patterns.cs:130:13:130:23 | ... => ... | semmle.label | successor | | patterns.cs:130:23:130:23 | 2 | patterns.cs:130:13:130:23 | ... => ... | semmle.label | successor |
| patterns.cs:131:13:131:22 | (..., ...) | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception(InvalidOperationException) | | patterns.cs:131:13:131:22 | (..., ...) | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception |
| patterns.cs:131:13:131:22 | (..., ...) | patterns.cs:131:27:131:27 | 3 | semmle.label | match | | patterns.cs:131:13:131:22 | (..., ...) | patterns.cs:131:27:131:27 | 3 | semmle.label | match |
| patterns.cs:131:13:131:27 | ... => ... | patterns.cs:126:17:132:9 | ... switch { ... } | semmle.label | successor | | patterns.cs:131:13:131:27 | ... => ... | patterns.cs:126:17:132:9 | ... switch { ... } | semmle.label | successor |
| patterns.cs:131:18:131:18 | Int32 x | patterns.cs:131:21:131:21 | _ | semmle.label | successor | | patterns.cs:131:18:131:18 | Int32 x | patterns.cs:131:21:131:21 | _ | semmle.label | successor |
@@ -162,9 +162,9 @@
| patterns.cs:136:17:143:13 | ... switch { ... } | patterns.cs:136:13:143:13 | ... = ... | semmle.label | successor | | patterns.cs:136:17:143:13 | ... switch { ... } | patterns.cs:136:13:143:13 | ... = ... | semmle.label | successor |
| patterns.cs:138:17:138:17 | 1 | patterns.cs:138:28:138:50 | object creation of type ArgumentException | semmle.label | match | | patterns.cs:138:17:138:17 | 1 | patterns.cs:138:28:138:50 | object creation of type ArgumentException | semmle.label | match |
| patterns.cs:138:17:138:17 | 1 | patterns.cs:139:17:139:17 | 2 | semmle.label | no-match | | patterns.cs:138:17:138:17 | 1 | patterns.cs:139:17:139:17 | 2 | semmle.label | no-match |
| patterns.cs:138:22:138:50 | throw ... | patterns.cs:145:9:148:9 | [exception: ArgumentException] catch (...) {...} | semmle.label | exception(ArgumentException) | | patterns.cs:138:22:138:50 | throw ... | patterns.cs:145:9:148:9 | [exception: ArgumentException] catch (...) {...} | semmle.label | exception |
| patterns.cs:138:28:138:50 | object creation of type ArgumentException | patterns.cs:138:22:138:50 | throw ... | semmle.label | successor | | patterns.cs:138:28:138:50 | object creation of type ArgumentException | patterns.cs:138:22:138:50 | throw ... | semmle.label | successor |
| patterns.cs:138:28:138:50 | object creation of type ArgumentException | patterns.cs:145:9:148:9 | [exception: Exception] catch (...) {...} | semmle.label | exception(Exception) | | patterns.cs:138:28:138:50 | object creation of type ArgumentException | patterns.cs:145:9:148:9 | [exception: Exception] catch (...) {...} | semmle.label | exception |
| patterns.cs:139:17:139:17 | 2 | patterns.cs:139:22:139:22 | 3 | semmle.label | match | | patterns.cs:139:17:139:17 | 2 | patterns.cs:139:22:139:22 | 3 | semmle.label | match |
| patterns.cs:139:17:139:17 | 2 | patterns.cs:140:17:140:24 | Object y | semmle.label | no-match | | patterns.cs:139:17:139:17 | 2 | patterns.cs:140:17:140:24 | Object y | semmle.label | no-match |
| patterns.cs:139:17:139:22 | ... => ... | patterns.cs:136:17:143:13 | ... switch { ... } | semmle.label | successor | | patterns.cs:139:17:139:22 | ... => ... | patterns.cs:136:17:143:13 | ... switch { ... } | semmle.label | successor |
@@ -187,16 +187,16 @@
| patterns.cs:142:17:142:24 | access to type MyStruct | patterns.cs:142:17:142:36 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:142:17:142:24 | access to type MyStruct | patterns.cs:142:17:142:36 | [no-match] { ... } | semmle.label | no-match |
| patterns.cs:142:17:142:24 | access to type MyStruct | patterns.cs:142:31:142:32 | 10 | semmle.label | match | | patterns.cs:142:17:142:24 | access to type MyStruct | patterns.cs:142:31:142:32 | 10 | semmle.label | match |
| patterns.cs:142:17:142:36 | [match] { ... } | patterns.cs:142:41:142:41 | 6 | semmle.label | match | | patterns.cs:142:17:142:36 | [match] { ... } | patterns.cs:142:41:142:41 | 6 | semmle.label | match |
| patterns.cs:142:17:142:36 | [match] { ... } | patterns.cs:145:9:148:9 | [exception: InvalidOperationException] catch (...) {...} | semmle.label | exception(InvalidOperationException) | | patterns.cs:142:17:142:36 | [match] { ... } | patterns.cs:145:9:148:9 | [exception: InvalidOperationException] catch (...) {...} | semmle.label | exception |
| patterns.cs:142:17:142:36 | [no-match] { ... } | patterns.cs:145:9:148:9 | [exception: InvalidOperationException] catch (...) {...} | semmle.label | exception(InvalidOperationException) | | patterns.cs:142:17:142:36 | [no-match] { ... } | patterns.cs:145:9:148:9 | [exception: InvalidOperationException] catch (...) {...} | semmle.label | exception |
| patterns.cs:142:17:142:41 | ... => ... | patterns.cs:136:17:143:13 | ... switch { ... } | semmle.label | successor | | patterns.cs:142:17:142:41 | ... => ... | patterns.cs:136:17:143:13 | ... switch { ... } | semmle.label | successor |
| patterns.cs:142:26:142:34 | [match] { ... } | patterns.cs:142:17:142:36 | [match] { ... } | semmle.label | match | | patterns.cs:142:26:142:34 | [match] { ... } | patterns.cs:142:17:142:36 | [match] { ... } | semmle.label | match |
| patterns.cs:142:26:142:34 | [no-match] { ... } | patterns.cs:142:17:142:36 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:142:26:142:34 | [no-match] { ... } | patterns.cs:142:17:142:36 | [no-match] { ... } | semmle.label | no-match |
| patterns.cs:142:31:142:32 | 10 | patterns.cs:142:26:142:34 | [match] { ... } | semmle.label | match | | patterns.cs:142:31:142:32 | 10 | patterns.cs:142:26:142:34 | [match] { ... } | semmle.label | match |
| patterns.cs:142:31:142:32 | 10 | patterns.cs:142:26:142:34 | [no-match] { ... } | semmle.label | no-match | | patterns.cs:142:31:142:32 | 10 | patterns.cs:142:26:142:34 | [no-match] { ... } | semmle.label | no-match |
| patterns.cs:142:41:142:41 | 6 | patterns.cs:142:17:142:41 | ... => ... | semmle.label | successor | | patterns.cs:142:41:142:41 | 6 | patterns.cs:142:17:142:41 | ... => ... | semmle.label | successor |
| patterns.cs:145:9:148:9 | [exception: ArgumentException] catch (...) {...} | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception(ArgumentException) | | patterns.cs:145:9:148:9 | [exception: ArgumentException] catch (...) {...} | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception |
| patterns.cs:145:9:148:9 | [exception: Exception] catch (...) {...} | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception(Exception) | | patterns.cs:145:9:148:9 | [exception: Exception] catch (...) {...} | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception |
| patterns.cs:145:9:148:9 | [exception: Exception] catch (...) {...} | patterns.cs:145:41:145:42 | [exception: Exception] InvalidOperationException ex | semmle.label | match | | patterns.cs:145:9:148:9 | [exception: Exception] catch (...) {...} | patterns.cs:145:41:145:42 | [exception: Exception] InvalidOperationException ex | semmle.label | match |
| patterns.cs:145:9:148:9 | [exception: InvalidOperationException] catch (...) {...} | patterns.cs:145:41:145:42 | [exception: InvalidOperationException] InvalidOperationException ex | semmle.label | match | | patterns.cs:145:9:148:9 | [exception: InvalidOperationException] catch (...) {...} | patterns.cs:145:41:145:42 | [exception: InvalidOperationException] InvalidOperationException ex | semmle.label | match |
| patterns.cs:145:41:145:42 | [exception: Exception] InvalidOperationException ex | patterns.cs:146:9:148:9 | {...} | semmle.label | successor | | patterns.cs:145:41:145:42 | [exception: Exception] InvalidOperationException ex | patterns.cs:146:9:148:9 | {...} | semmle.label | successor |

View File

@@ -35,7 +35,7 @@
| Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | | Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) |
| Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | | Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) |
| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) |
| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception] SSA def(i) |
| Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) |
| Consistency.cs:26:13:26:19 | c.Field | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | | Consistency.cs:26:13:26:19 | c.Field | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) |
| Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | | Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) |

View File

@@ -35,7 +35,7 @@
| Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | ... = ... | | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | ... = ... |
| Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:7:25:7:25 | b | | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:7:25:7:25 | b |
| Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | | Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... |
| Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | | Consistency.cs:15:17:15:21 | [finally: exception] SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... |
| Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:9:25:30 | call to method Out | | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:9:25:30 | call to method Out |
| Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | Consistency.cs:25:9:25:30 | call to method Out | | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | Consistency.cs:25:9:25:30 | call to method Out |
| Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | ... = ... | | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | ... = ... |

View File

@@ -15,7 +15,7 @@
| Capture.cs:212:30:212:35 | exited | Capture.cs:212:30:212:71 | SSA def(exited) | Capture.cs:212:30:212:71 | EventHandler exited = ... | | Capture.cs:212:30:212:35 | exited | Capture.cs:212:30:212:71 | SSA def(exited) | Capture.cs:212:30:212:71 | EventHandler exited = ... |
| Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | ... = ... | | Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | ... = ... |
| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... |
| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception] SSA def(i) | Consistency.cs:15:17:15:21 | Int32 i = ... |
| Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:29:25:29 | Consistency c | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:29:25:29 | Consistency c |
| Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | ... = ... | | Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | ... = ... |
| Consistency.cs:44:11:44:11 | s | Consistency.cs:44:11:44:11 | SSA def(s) | Consistency.cs:44:11:44:11 | S s | | Consistency.cs:44:11:44:11 | s | Consistency.cs:44:11:44:11 | SSA def(s) | Consistency.cs:44:11:44:11 | S s |

View File

@@ -35,7 +35,7 @@
| Capture.cs:212:30:212:35 | exited | Capture.cs:212:30:212:71 | SSA def(exited) | Capture.cs:213:29:213:34 | access to local variable exited | | Capture.cs:212:30:212:35 | exited | Capture.cs:212:30:212:71 | SSA def(exited) | Capture.cs:213:29:213:34 | access to local variable exited |
| Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:11:17:11:17 | access to parameter b | | Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:11:17:11:17 | access to parameter b |
| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:16:17:16:17 | access to local variable i | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:16:17:16:17 | access to local variable i |
| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | Consistency.cs:16:17:16:17 | access to local variable i | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception] SSA def(i) | Consistency.cs:16:17:16:17 | access to local variable i |
| Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:26:13:26:13 | access to local variable c | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:26:13:26:13 | access to local variable c |
| Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:27:13:27:13 | access to local variable c | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:27:13:27:13 | access to local variable c |
| Consistency.cs:26:13:26:19 | c.Field | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | Consistency.cs:26:13:26:19 | access to field Field | | Consistency.cs:26:13:26:19 | c.Field | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | Consistency.cs:26:13:26:19 | access to field Field |

View File

@@ -35,7 +35,7 @@
| Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | SSA def(j) | | Capture.cs:248:36:248:36 | j | Capture.cs:251:13:251:17 | SSA def(j) | Capture.cs:251:13:251:17 | SSA def(j) |
| Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:7:25:7:25 | SSA param(b) | | Consistency.cs:7:25:7:25 | b | Consistency.cs:7:25:7:25 | SSA param(b) | Consistency.cs:7:25:7:25 | SSA param(b) |
| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:15:17:15:21 | SSA def(i) | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | SSA def(i) | Consistency.cs:15:17:15:21 | SSA def(i) |
| Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | Consistency.cs:15:17:15:21 | [finally: exception(Exception)] SSA def(i) | | Consistency.cs:15:17:15:17 | i | Consistency.cs:15:17:15:21 | [finally: exception] SSA def(i) | Consistency.cs:15:17:15:21 | [finally: exception] SSA def(i) |
| Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:29:25:29 | SSA def(c) | | Consistency.cs:25:29:25:29 | c | Consistency.cs:25:29:25:29 | SSA def(c) | Consistency.cs:25:29:25:29 | SSA def(c) |
| Consistency.cs:26:13:26:19 | c.Field | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | | Consistency.cs:26:13:26:19 | c.Field | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) | Consistency.cs:25:29:25:29 | SSA qualifier def(c.Field) |
| Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | SSA def(c) | | Consistency.cs:30:30:30:30 | c | Consistency.cs:32:9:32:29 | SSA def(c) | Consistency.cs:32:9:32:29 | SSA def(c) |

View File

@@ -7,7 +7,7 @@
| goto.cs:5:5:20:5 | {...} | goto.cs:6:9:8:9 | {...} | semmle.label | successor | | goto.cs:5:5:20:5 | {...} | goto.cs:6:9:8:9 | {...} | semmle.label | successor |
| goto.cs:6:9:8:9 | {...} | goto.cs:7:13:7:14 | s1: | semmle.label | successor | | goto.cs:6:9:8:9 | {...} | goto.cs:7:13:7:14 | s1: | semmle.label | successor |
| goto.cs:7:13:7:14 | s1: | goto.cs:7:17:7:24 | goto ...; | semmle.label | successor | | goto.cs:7:13:7:14 | s1: | goto.cs:7:17:7:24 | goto ...; | semmle.label | successor |
| goto.cs:7:17:7:24 | goto ...; | goto.cs:9:9:9:10 | s2: | semmle.label | goto(s2) | | goto.cs:7:17:7:24 | goto ...; | goto.cs:9:9:9:10 | s2: | semmle.label | goto |
| goto.cs:9:9:9:10 | s2: | goto.cs:9:13:9:27 | ... ...; | semmle.label | successor | | goto.cs:9:9:9:10 | s2: | goto.cs:9:13:9:27 | ... ...; | semmle.label | successor |
| goto.cs:9:13:9:27 | ... ...; | goto.cs:9:24:9:26 | "5" | semmle.label | successor | | goto.cs:9:13:9:27 | ... ...; | goto.cs:9:24:9:26 | "5" | semmle.label | successor |
| goto.cs:9:20:9:26 | String s = ... | goto.cs:10:9:18:9 | switch (...) {...} | semmle.label | successor | | goto.cs:9:20:9:26 | String s = ... | goto.cs:10:9:18:9 | switch (...) {...} | semmle.label | successor |
@@ -18,24 +18,24 @@
| goto.cs:12:18:12:21 | null | goto.cs:12:24:12:25 | s3: | semmle.label | match | | goto.cs:12:18:12:21 | null | goto.cs:12:24:12:25 | s3: | semmle.label | match |
| goto.cs:12:18:12:21 | null | goto.cs:13:13:13:21 | case ...: | semmle.label | no-match | | goto.cs:12:18:12:21 | null | goto.cs:13:13:13:21 | case ...: | semmle.label | no-match |
| goto.cs:12:24:12:25 | s3: | goto.cs:12:38:12:40 | "1" | semmle.label | successor | | goto.cs:12:24:12:25 | s3: | goto.cs:12:38:12:40 | "1" | semmle.label | successor |
| goto.cs:12:28:12:41 | goto case ...; | goto.cs:13:13:13:21 | case ...: | semmle.label | goto(1) | | goto.cs:12:28:12:41 | goto case ...; | goto.cs:13:13:13:21 | case ...: | semmle.label | goto |
| goto.cs:12:38:12:40 | "1" | goto.cs:12:28:12:41 | goto case ...; | semmle.label | successor | | goto.cs:12:38:12:40 | "1" | goto.cs:12:28:12:41 | goto case ...; | semmle.label | successor |
| goto.cs:13:13:13:21 | case ...: | goto.cs:13:18:13:20 | "1" | semmle.label | successor | | goto.cs:13:13:13:21 | case ...: | goto.cs:13:18:13:20 | "1" | semmle.label | successor |
| goto.cs:13:18:13:20 | "1" | goto.cs:13:23:13:24 | s4: | semmle.label | match | | goto.cs:13:18:13:20 | "1" | goto.cs:13:23:13:24 | s4: | semmle.label | match |
| goto.cs:13:18:13:20 | "1" | goto.cs:14:13:14:21 | case ...: | semmle.label | no-match | | goto.cs:13:18:13:20 | "1" | goto.cs:14:13:14:21 | case ...: | semmle.label | no-match |
| goto.cs:13:23:13:24 | s4: | goto.cs:13:37:13:39 | "2" | semmle.label | successor | | goto.cs:13:23:13:24 | s4: | goto.cs:13:37:13:39 | "2" | semmle.label | successor |
| goto.cs:13:27:13:40 | goto case ...; | goto.cs:14:13:14:21 | case ...: | semmle.label | goto(2) | | goto.cs:13:27:13:40 | goto case ...; | goto.cs:14:13:14:21 | case ...: | semmle.label | goto |
| goto.cs:13:37:13:39 | "2" | goto.cs:13:27:13:40 | goto case ...; | semmle.label | successor | | goto.cs:13:37:13:39 | "2" | goto.cs:13:27:13:40 | goto case ...; | semmle.label | successor |
| goto.cs:14:13:14:21 | case ...: | goto.cs:14:18:14:20 | "2" | semmle.label | successor | | goto.cs:14:13:14:21 | case ...: | goto.cs:14:18:14:20 | "2" | semmle.label | successor |
| goto.cs:14:18:14:20 | "2" | goto.cs:14:23:14:24 | s5: | semmle.label | match | | goto.cs:14:18:14:20 | "2" | goto.cs:14:23:14:24 | s5: | semmle.label | match |
| goto.cs:14:18:14:20 | "2" | goto.cs:15:13:15:21 | case ...: | semmle.label | no-match | | goto.cs:14:18:14:20 | "2" | goto.cs:15:13:15:21 | case ...: | semmle.label | no-match |
| goto.cs:14:23:14:24 | s5: | goto.cs:14:27:14:34 | goto ...; | semmle.label | successor | | goto.cs:14:23:14:24 | s5: | goto.cs:14:27:14:34 | goto ...; | semmle.label | successor |
| goto.cs:14:27:14:34 | goto ...; | goto.cs:9:9:9:10 | s2: | semmle.label | goto(s2) | | goto.cs:14:27:14:34 | goto ...; | goto.cs:9:9:9:10 | s2: | semmle.label | goto |
| goto.cs:15:13:15:21 | case ...: | goto.cs:15:18:15:20 | "3" | semmle.label | successor | | goto.cs:15:13:15:21 | case ...: | goto.cs:15:18:15:20 | "3" | semmle.label | successor |
| goto.cs:15:18:15:20 | "3" | goto.cs:15:23:15:24 | s6: | semmle.label | match | | goto.cs:15:18:15:20 | "3" | goto.cs:15:23:15:24 | s6: | semmle.label | match |
| goto.cs:15:18:15:20 | "3" | goto.cs:16:13:16:21 | case ...: | semmle.label | no-match | | goto.cs:15:18:15:20 | "3" | goto.cs:16:13:16:21 | case ...: | semmle.label | no-match |
| goto.cs:15:23:15:24 | s6: | goto.cs:15:27:15:39 | goto default; | semmle.label | successor | | goto.cs:15:23:15:24 | s6: | goto.cs:15:27:15:39 | goto default; | semmle.label | successor |
| goto.cs:15:27:15:39 | goto default; | goto.cs:17:13:17:20 | default: | semmle.label | goto(default) | | goto.cs:15:27:15:39 | goto default; | goto.cs:17:13:17:20 | default: | semmle.label | goto |
| goto.cs:16:13:16:21 | case ...: | goto.cs:16:18:16:20 | "4" | semmle.label | successor | | goto.cs:16:13:16:21 | case ...: | goto.cs:16:18:16:20 | "4" | semmle.label | successor |
| goto.cs:16:18:16:20 | "4" | goto.cs:16:23:16:24 | s7: | semmle.label | match | | goto.cs:16:18:16:20 | "4" | goto.cs:16:23:16:24 | s7: | semmle.label | match |
| goto.cs:16:18:16:20 | "4" | goto.cs:17:13:17:20 | default: | semmle.label | no-match | | goto.cs:16:18:16:20 | "4" | goto.cs:17:13:17:20 | default: | semmle.label | no-match |
@@ -43,7 +43,7 @@
| goto.cs:16:27:16:32 | break; | goto.cs:19:9:19:10 | s9: | semmle.label | break | | goto.cs:16:27:16:32 | break; | goto.cs:19:9:19:10 | s9: | semmle.label | break |
| goto.cs:17:13:17:20 | default: | goto.cs:17:22:17:23 | s8: | semmle.label | successor | | goto.cs:17:13:17:20 | default: | goto.cs:17:22:17:23 | s8: | semmle.label | successor |
| goto.cs:17:22:17:23 | s8: | goto.cs:17:36:17:39 | null | semmle.label | successor | | goto.cs:17:22:17:23 | s8: | goto.cs:17:36:17:39 | null | semmle.label | successor |
| goto.cs:17:26:17:40 | goto case ...; | goto.cs:12:13:12:22 | case ...: | semmle.label | goto(null) | | goto.cs:17:26:17:40 | goto case ...; | goto.cs:12:13:12:22 | case ...: | semmle.label | goto |
| goto.cs:17:36:17:39 | null | goto.cs:17:26:17:40 | goto case ...; | semmle.label | successor | | goto.cs:17:36:17:39 | null | goto.cs:17:26:17:40 | goto case ...; | semmle.label | successor |
| goto.cs:19:9:19:10 | s9: | goto.cs:19:12:19:12 | ; | semmle.label | successor | | goto.cs:19:9:19:10 | s9: | goto.cs:19:12:19:12 | ; | semmle.label | successor |
| goto.cs:19:12:19:12 | ; | goto.cs:4:17:4:20 | exit Main (normal) | semmle.label | successor | | goto.cs:19:12:19:12 | ; | goto.cs:4:17:4:20 | exit Main (normal) | semmle.label | successor |

View File

@@ -7,10 +7,9 @@ module;
import java import java
import Dominance import Dominance
private import codeql.controlflow.BasicBlock as BB private import codeql.controlflow.BasicBlock as BB
private import codeql.controlflow.SuccessorType
private module Input implements BB::InputSig<Location> { private module Input implements BB::InputSig<Location> {
import SuccessorType
/** Hold if `t` represents a conditional successor type. */ /** Hold if `t` represents a conditional successor type. */
predicate successorTypeIsCondition(SuccessorType t) { none() } predicate successorTypeIsCondition(SuccessorType t) { none() }
@@ -34,7 +33,7 @@ private module Input implements BB::InputSig<Location> {
result = getASpecificSuccessor(node, t) result = getASpecificSuccessor(node, t)
or or
node.getASuccessor() = result and node.getASuccessor() = result and
t instanceof NormalSuccessor and t instanceof DirectSuccessor and
not result = getASpecificSuccessor(node, _) not result = getASpecificSuccessor(node, _)
} }
@@ -96,7 +95,7 @@ class BasicBlock extends BbImpl::BasicBlock {
predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) }
/** Gets an immediate successor of this basic block of a given type, if any. */ /** Gets an immediate successor of this basic block of a given type, if any. */
BasicBlock getASuccessor(Input::SuccessorType t) { result = super.getASuccessor(t) } BasicBlock getASuccessor(SuccessorType t) { result = super.getASuccessor(t) }
BasicBlock getASuccessor() { result = super.getASuccessor() } BasicBlock getASuccessor() { result = super.getASuccessor() }
@@ -161,8 +160,6 @@ private class BasicBlockAlias = BasicBlock;
module Cfg implements BB::CfgSig<Location> { module Cfg implements BB::CfgSig<Location> {
class ControlFlowNode = BbImpl::ControlFlowNode; class ControlFlowNode = BbImpl::ControlFlowNode;
class SuccessorType = BbImpl::SuccessorType;
class BasicBlock = BasicBlockAlias; class BasicBlock = BasicBlockAlias;
class EntryBasicBlock extends BasicBlock instanceof BbImpl::EntryBasicBlock { } class EntryBasicBlock extends BasicBlock instanceof BbImpl::EntryBasicBlock { }

View File

@@ -139,10 +139,6 @@ private predicate isNonFallThroughPredecessor(SwitchCase sc, ControlFlowNode pre
) )
} }
private module SuccessorTypes implements SharedGuards::SuccessorTypesSig<SuccessorType> {
import SuccessorType
}
private module GuardsInput implements SharedGuards::InputSig<Location, ControlFlowNode, BasicBlock> { private module GuardsInput implements SharedGuards::InputSig<Location, ControlFlowNode, BasicBlock> {
private import java as J private import java as J
private import semmle.code.java.dataflow.internal.BaseSSA private import semmle.code.java.dataflow.internal.BaseSSA
@@ -379,7 +375,7 @@ private module GuardsInput implements SharedGuards::InputSig<Location, ControlFl
} }
} }
private module GuardsImpl = SharedGuards::Make<Location, Cfg, SuccessorTypes, GuardsInput>; private module GuardsImpl = SharedGuards::Make<Location, Cfg, GuardsInput>;
private module LogicInputCommon { private module LogicInputCommon {
private import semmle.code.java.dataflow.NullGuards as NullGuards private import semmle.code.java.dataflow.NullGuards as NullGuards

View File

@@ -1,74 +0,0 @@
/**
* Provides different types of control flow successor types.
*/
overlay[local?]
module;
import java
private import codeql.util.Boolean
private newtype TSuccessorType =
TNormalSuccessor() or
TBooleanSuccessor(Boolean branch) or
TExceptionSuccessor()
/** The type of a control flow successor. */
class SuccessorType extends TSuccessorType {
/** Gets a textual representation of successor type. */
string toString() { result = "SuccessorType" }
}
/** A normal control flow successor. */
class NormalSuccessor extends SuccessorType, TNormalSuccessor { }
/**
* An exceptional control flow successor.
*
* This marks control flow edges that are taken when an exception is thrown.
*/
class ExceptionSuccessor extends SuccessorType, TExceptionSuccessor { }
/**
* A conditional control flow successor.
*
* This currently only includes boolean successors (`BooleanSuccessor`).
*/
class ConditionalSuccessor extends SuccessorType, TBooleanSuccessor {
/** Gets the Boolean value of this successor. */
boolean getValue() { this = TBooleanSuccessor(result) }
}
/**
* A Boolean control flow successor.
*
* For example, this program fragment:
*
* ```java
* if (x < 0)
* return 0;
* else
* return 1;
* ```
*
* has a control flow graph containing Boolean successors:
*
* ```
* if
* |
* x < 0
* / \
* / \
* / \
* true false
* | \
* return 0 return 1
* ```
*/
class BooleanSuccessor = ConditionalSuccessor;
/**
* A nullness control flow successor. This is currently unused for Java.
*/
class NullnessSuccessor extends ConditionalSuccessor {
NullnessSuccessor() { none() }
}

View File

@@ -372,16 +372,28 @@ module Public {
module Cfg implements BB::CfgSig<Location> { module Cfg implements BB::CfgSig<Location> {
private import javascript as Js private import javascript as Js
private import codeql.util.Unit private import codeql.controlflow.SuccessorType
class ControlFlowNode = Js::ControlFlowNode; class ControlFlowNode = Js::ControlFlowNode;
class SuccessorType = Unit; private predicate conditionSucc(BasicBlock bb1, BasicBlock bb2, boolean branch) {
exists(ConditionGuardNode g |
bb1 = g.getTest().getBasicBlock() and
bb2 = g.getBasicBlock() and
branch = g.getOutcome()
)
}
class BasicBlock extends FinalBasicBlock { class BasicBlock extends FinalBasicBlock {
BasicBlock getASuccessor() { result = super.getASuccessor() } BasicBlock getASuccessor() { result = super.getASuccessor() }
BasicBlock getASuccessor(SuccessorType t) { result = super.getASuccessor() and exists(t) } BasicBlock getASuccessor(SuccessorType t) {
conditionSucc(this, result, t.(BooleanSuccessor).getValue())
or
result = super.getASuccessor() and
t instanceof DirectSuccessor and
not conditionSucc(this, result, _)
}
predicate strictlyDominates(BasicBlock bb) { predicate strictlyDominates(BasicBlock bb) {
this.(ReachableBasicBlock).strictlyDominates(bb) this.(ReachableBasicBlock).strictlyDominates(bb)

View File

@@ -1259,9 +1259,9 @@ private class ControlFlowNodeAlias = ControlFlowNode;
final private class FinalBasicBlock = BasicBlock; final private class FinalBasicBlock = BasicBlock;
module Cfg implements BB::CfgSig<Location> { module Cfg implements BB::CfgSig<Location> {
class ControlFlowNode = ControlFlowNodeAlias; private import codeql.controlflow.SuccessorType
class SuccessorType = Unit; class ControlFlowNode = ControlFlowNodeAlias;
class BasicBlock extends FinalBasicBlock { class BasicBlock extends FinalBasicBlock {
// Note `PY:BasicBlock` does not have a `getLocation`. // Note `PY:BasicBlock` does not have a `getLocation`.
@@ -1275,7 +1275,24 @@ module Cfg implements BB::CfgSig<Location> {
BasicBlock getASuccessor() { result = super.getASuccessor() } BasicBlock getASuccessor() { result = super.getASuccessor() }
BasicBlock getASuccessor(SuccessorType t) { result = super.getASuccessor() and exists(t) } private BasicBlock getANonDirectSuccessor(SuccessorType t) {
result = this.getATrueSuccessor() and
t.(BooleanSuccessor).getValue() = true
or
result = this.getAFalseSuccessor() and
t.(BooleanSuccessor).getValue() = false
or
result = this.getAnExceptionalSuccessor() and
t instanceof ExceptionSuccessor
}
BasicBlock getASuccessor(SuccessorType t) {
result = this.getANonDirectSuccessor(t)
or
result = super.getASuccessor() and
t instanceof DirectSuccessor and
not result = this.getANonDirectSuccessor(_)
}
predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) }

View File

@@ -28,7 +28,7 @@ private module Input implements InputSig<Location, RubyDataFlow> {
exists(CfgNodes::ExprCfgNode n | exists(CfgNodes::ExprCfgNode n |
arg.argumentOf(call, _) and arg.argumentOf(call, _) and
n = call.asCall() and n = call.asCall() and
arg.asExpr().getASuccessor(any(SuccessorTypes::ConditionalSuccessor c)).getASuccessor*() = n and arg.asExpr().getASuccessor(any(ConditionalSuccessor c)).getASuccessor*() = n and
n.getASplit() instanceof Split::ConditionalCompletionSplit n.getASplit() instanceof Split::ConditionalCompletionSplit
) )
} }

View File

@@ -8,7 +8,6 @@ private import codeql.ruby.ast.internal.TreeSitter
private import codeql.ruby.controlflow.ControlFlowGraph private import codeql.ruby.controlflow.ControlFlowGraph
private import internal.ControlFlowGraphImpl as CfgImpl private import internal.ControlFlowGraphImpl as CfgImpl
private import CfgNodes private import CfgNodes
private import SuccessorTypes
private import CfgImpl::BasicBlocks as BasicBlocksImpl private import CfgImpl::BasicBlocks as BasicBlocksImpl
private import codeql.controlflow.BasicBlock as BB private import codeql.controlflow.BasicBlock as BB
@@ -302,13 +301,9 @@ private class BasicBlockAlias = BasicBlock;
private class EntryBasicBlockAlias = EntryBasicBlock; private class EntryBasicBlockAlias = EntryBasicBlock;
private class SuccessorTypeAlias = SuccessorType;
module Cfg implements BB::CfgSig<Location> { module Cfg implements BB::CfgSig<Location> {
class ControlFlowNode = CfgNode; class ControlFlowNode = CfgNode;
class SuccessorType = SuccessorTypeAlias;
class BasicBlock = BasicBlockAlias; class BasicBlock = BasicBlockAlias;
class EntryBasicBlock = EntryBasicBlockAlias; class EntryBasicBlock = EntryBasicBlockAlias;

View File

@@ -2,9 +2,9 @@
overlay[local] overlay[local]
module; module;
import codeql.controlflow.SuccessorType
private import codeql.ruby.AST private import codeql.ruby.AST
private import codeql.ruby.controlflow.BasicBlocks private import codeql.ruby.controlflow.BasicBlocks
private import SuccessorTypes
private import internal.ControlFlowGraphImpl as CfgImpl private import internal.ControlFlowGraphImpl as CfgImpl
private import internal.Splitting as Splitting private import internal.Splitting as Splitting
private import internal.Completion private import internal.Completion
@@ -59,241 +59,6 @@ class CfgNode extends CfgImpl::Node {
BasicBlock getBasicBlock() { result.getANode() = this } BasicBlock getBasicBlock() { result.getANode() = this }
} }
/** The type of a control flow successor. */
class SuccessorType extends CfgImpl::TSuccessorType {
/** Gets a textual representation of successor type. */
string toString() { none() }
}
/** Provides different types of control flow successor types. */
module SuccessorTypes {
/** A normal control flow successor. */
class NormalSuccessor extends SuccessorType, CfgImpl::TSuccessorSuccessor {
final override string toString() { result = "successor" }
}
/**
* A conditional control flow successor. Either a Boolean successor (`BooleanSuccessor`)
* or a matching successor (`MatchingSuccessor`)
*/
class ConditionalSuccessor extends SuccessorType {
boolean value;
ConditionalSuccessor() {
this = CfgImpl::TBooleanSuccessor(value) or
this = CfgImpl::TMatchingSuccessor(value)
}
/** Gets the Boolean value of this successor. */
final boolean getValue() { result = value }
override string toString() { result = this.getValue().toString() }
}
/**
* A Boolean control flow successor.
*
* For example, in
*
* ```rb
* if x >= 0
* puts "positive"
* else
* puts "negative"
* end
* ```
*
* `x >= 0` has both a `true` successor and a `false` successor.
*/
class BooleanSuccessor extends ConditionalSuccessor, CfgImpl::TBooleanSuccessor { }
/**
* A matching control flow successor.
*
* For example, this program fragment:
*
* ```rb
* case x
* when 1 then puts "one"
* else puts "not one"
* end
* ```
*
* has a control flow graph containing matching successors:
*
* ```
* x
* |
* 1
* / \
* / \
* / \
* / \
* match non-match
* | |
* puts "one" puts "not one"
* ```
*/
class MatchingSuccessor extends ConditionalSuccessor, CfgImpl::TMatchingSuccessor {
override string toString() { if value = true then result = "match" else result = "no-match" }
}
/**
* A `return` control flow successor.
*
* Example:
*
* ```rb
* def sum(x,y)
* return x + y
* end
* ```
*
* The exit node of `sum` is a `return` successor of the `return x + y`
* statement.
*/
class ReturnSuccessor extends SuccessorType, CfgImpl::TReturnSuccessor {
final override string toString() { result = "return" }
}
/**
* A `break` control flow successor.
*
* Example:
*
* ```rb
* def m
* while x >= 0
* x -= 1
* if num > 100
* break
* end
* end
* puts "done"
* end
* ```
*
* The node `puts "done"` is `break` successor of the node `break`.
*/
class BreakSuccessor extends SuccessorType, CfgImpl::TBreakSuccessor {
final override string toString() { result = "break" }
}
/**
* A `next` control flow successor.
*
* Example:
*
* ```rb
* def m
* while x >= 0
* x -= 1
* if num > 100
* next
* end
* end
* puts "done"
* end
* ```
*
* The node `x >= 0` is `next` successor of the node `next`.
*/
class NextSuccessor extends SuccessorType, CfgImpl::TNextSuccessor {
final override string toString() { result = "next" }
}
/**
* A `redo` control flow successor.
*
* Example:
*
* Example:
*
* ```rb
* def m
* while x >= 0
* x -= 1
* if num > 100
* redo
* end
* end
* puts "done"
* end
* ```
*
* The node `x -= 1` is `redo` successor of the node `redo`.
*/
class RedoSuccessor extends SuccessorType, CfgImpl::TRedoSuccessor {
final override string toString() { result = "redo" }
}
/**
* A `retry` control flow successor.
*
* Example:
*
* Example:
*
* ```rb
* def m
* begin
* puts "Retry"
* raise
* rescue
* retry
* end
* end
* ```
*
* The node `puts "Retry"` is `retry` successor of the node `retry`.
*/
class RetrySuccessor extends SuccessorType, CfgImpl::TRetrySuccessor {
final override string toString() { result = "retry" }
}
/**
* An exceptional control flow successor.
*
* Example:
*
* ```rb
* def m x
* if x > 2
* raise "x > 2"
* end
* puts "x <= 2"
* end
* ```
*
* The exit node of `m` is an exceptional successor of the node
* `raise "x > 2"`.
*/
class RaiseSuccessor extends SuccessorType, CfgImpl::TRaiseSuccessor {
final override string toString() { result = "raise" }
}
/**
* An exit control flow successor.
*
* Example:
*
* ```rb
* def m x
* if x > 2
* exit 1
* end
* puts "x <= 2"
* end
* ```
*
* The exit node of `m` is an exit successor of the node
* `exit 1`.
*/
class ExitSuccessor extends SuccessorType, CfgImpl::TExitSuccessor {
final override string toString() { result = "exit" }
}
}
class Split = Splitting::Split; class Split = Splitting::Split;
/** Provides different kinds of control flow graph splittings. */ /** Provides different kinds of control flow graph splittings. */

View File

@@ -12,7 +12,6 @@ private import codeql.ruby.ast.internal.Control
private import codeql.ruby.controlflow.ControlFlowGraph private import codeql.ruby.controlflow.ControlFlowGraph
private import ControlFlowGraphImpl as CfgImpl private import ControlFlowGraphImpl as CfgImpl
private import NonReturning private import NonReturning
private import SuccessorTypes
private newtype TCompletion = private newtype TCompletion =
TSimpleCompletion() or TSimpleCompletion() or
@@ -267,7 +266,7 @@ abstract private class NonNestedNormalCompletion extends NormalCompletion { }
/** A simple (normal) completion. */ /** A simple (normal) completion. */
class SimpleCompletion extends NonNestedNormalCompletion, TSimpleCompletion { class SimpleCompletion extends NonNestedNormalCompletion, TSimpleCompletion {
override NormalSuccessor getAMatchingSuccessorType() { any() } override DirectSuccessor getAMatchingSuccessorType() { any() }
override string toString() { result = "simple" } override string toString() { result = "simple" }
} }
@@ -377,7 +376,7 @@ class NextCompletion extends Completion {
this = TNestedCompletion(_, TNextCompletion(), _) this = TNestedCompletion(_, TNextCompletion(), _)
} }
override NextSuccessor getAMatchingSuccessorType() { any() } override ContinueSuccessor getAMatchingSuccessorType() { any() }
override string toString() { override string toString() {
// `NestedCompletion` defines `toString()` for the other case // `NestedCompletion` defines `toString()` for the other case
@@ -431,7 +430,7 @@ class RaiseCompletion extends Completion {
this = TNestedCompletion(_, TRaiseCompletion(), _) this = TNestedCompletion(_, TRaiseCompletion(), _)
} }
override RaiseSuccessor getAMatchingSuccessorType() { any() } override ExceptionSuccessor getAMatchingSuccessorType() { any() }
override string toString() { override string toString() {
// `NestedCompletion` defines `toString()` for the other case // `NestedCompletion` defines `toString()` for the other case

View File

@@ -46,23 +46,10 @@ private module CfgInput implements CfgShared::InputSig<Location> {
scope.(Impl::CfgScopeImpl).exit(last, c) scope.(Impl::CfgScopeImpl).exit(last, c)
} }
class SuccessorType = Cfg::SuccessorType; private class SuccessorType = Cfg::SuccessorType;
SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() } SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() }
predicate successorTypeIsSimple(SuccessorType t) {
t instanceof Cfg::SuccessorTypes::NormalSuccessor
}
predicate successorTypeIsCondition(SuccessorType t) {
t instanceof Cfg::SuccessorTypes::ConditionalSuccessor
}
predicate isAbnormalExitType(SuccessorType t) {
t instanceof Cfg::SuccessorTypes::RaiseSuccessor or
t instanceof Cfg::SuccessorTypes::ExitSuccessor
}
private predicate id(Ruby::AstNode node1, Ruby::AstNode node2) { node1 = node2 } private predicate id(Ruby::AstNode node1, Ruby::AstNode node2) { node1 = node2 }
private predicate idOf(Ruby::AstNode node, int id) = equivalenceRelation(id/2)(node, id) private predicate idOf(Ruby::AstNode node, int id) = equivalenceRelation(id/2)(node, id)
@@ -1528,21 +1515,3 @@ CfgScope getCfgScope(AstNode n) {
pragma[only_bind_into](result) = getCfgScopeImpl(n0) pragma[only_bind_into](result) = getCfgScopeImpl(n0)
) )
} }
cached
private module Cached {
cached
newtype TSuccessorType =
TSuccessorSuccessor() or
TBooleanSuccessor(boolean b) { b in [false, true] } or
TMatchingSuccessor(boolean isMatch) { isMatch in [false, true] } or
TReturnSuccessor() or
TBreakSuccessor() or
TNextSuccessor() or
TRedoSuccessor() or
TRetrySuccessor() or
TRaiseSuccessor() or // TODO: Add exception type?
TExitSuccessor()
}
import Cached

View File

@@ -6,7 +6,7 @@ private import codeql.ruby.CFG
/** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */ /** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */
pragma[nomagic] pragma[nomagic]
predicate guardControlsBlock(CfgNodes::AstCfgNode guard, BasicBlock bb, boolean branch) { predicate guardControlsBlock(CfgNodes::AstCfgNode guard, BasicBlock bb, boolean branch) {
exists(ConditionBlock conditionBlock, SuccessorTypes::ConditionalSuccessor s | exists(ConditionBlock conditionBlock, ConditionalSuccessor s |
guard = conditionBlock.getLastNode() and guard = conditionBlock.getLastNode() and
s.getValue() = branch and s.getValue() = branch and
conditionBlock.edgeDominates(bb, s) conditionBlock.edgeDominates(bb, s)

View File

@@ -8,7 +8,6 @@ private import codeql.ruby.AST as Ast
private import Completion as Comp private import Completion as Comp
private import Comp private import Comp
private import ControlFlowGraphImpl private import ControlFlowGraphImpl
private import SuccessorTypes
private import codeql.ruby.controlflow.ControlFlowGraph private import codeql.ruby.controlflow.ControlFlowGraph
cached cached
@@ -132,7 +131,7 @@ module EnsureSplitting {
then then
// If the entry into the `ensure` block completes with any normal completion, // If the entry into the `ensure` block completes with any normal completion,
// it simply means normal execution after the `ensure` block // it simply means normal execution after the `ensure` block
this instanceof NormalSuccessor this instanceof DirectSuccessor
else this = c.getAMatchingSuccessorType() else this = c.getAMatchingSuccessorType()
} }
} }
@@ -195,7 +194,7 @@ module EnsureSplitting {
int getNestLevel() { result = nestLevel } int getNestLevel() { result = nestLevel }
override string toString() { override string toString() {
if type instanceof NormalSuccessor if type instanceof DirectSuccessor
then result = "" then result = ""
else else
if nestLevel > 0 if nestLevel > 0
@@ -271,14 +270,14 @@ module EnsureSplitting {
or or
not c instanceof NormalCompletion not c instanceof NormalCompletion
or or
type instanceof NormalSuccessor type instanceof DirectSuccessor
) )
else ( else (
// `ensure` block can exit with inherited completion `c`, which must // `ensure` block can exit with inherited completion `c`, which must
// match this split // match this split
inherited = true and inherited = true and
type = c.getAMatchingSuccessorType() and type = c.getAMatchingSuccessorType() and
not type instanceof NormalSuccessor not type instanceof DirectSuccessor
) )
) )
or or
@@ -308,7 +307,7 @@ module EnsureSplitting {
exists(EnsureSplitImpl outer | exists(EnsureSplitImpl outer |
outer.(EnsureSplit).getNestLevel() = super.getNestLevel() - 1 and outer.(EnsureSplit).getNestLevel() = super.getNestLevel() - 1 and
outer.exit(pred, c, inherited) and outer.exit(pred, c, inherited) and
super.getType() instanceof NormalSuccessor and super.getType() instanceof DirectSuccessor and
inherited = true inherited = true
) )
} }

View File

@@ -153,7 +153,7 @@ module LocalFlow {
exprTo = nodeTo.asExpr() and exprTo = nodeTo.asExpr() and
n.getReturningNode().getAstNode() instanceof BreakStmt and n.getReturningNode().getAstNode() instanceof BreakStmt and
exprTo.getAstNode() instanceof Loop and exprTo.getAstNode() instanceof Loop and
nodeTo.asExpr().getAPredecessor(any(SuccessorTypes::BreakSuccessor s)) = n.getReturningNode() nodeTo.asExpr().getAPredecessor(any(BreakSuccessor s)) = n.getReturningNode()
) )
or or
nodeFrom.asExpr() = nodeTo.(ReturningStatementNode).getReturningNode().getReturnedValueNode() nodeFrom.asExpr() = nodeTo.(ReturningStatementNode).getReturningNode().getReturnedValueNode()
@@ -161,7 +161,7 @@ module LocalFlow {
nodeTo.asExpr() = nodeTo.asExpr() =
any(CfgNodes::ExprNodes::ForExprCfgNode for | any(CfgNodes::ExprNodes::ForExprCfgNode for |
exists(SuccessorType s | exists(SuccessorType s |
not s instanceof SuccessorTypes::BreakSuccessor and not s instanceof BreakSuccessor and
exists(for.getAPredecessor(s)) exists(for.getAPredecessor(s))
) and ) and
nodeFrom.asExpr() = for.getValue() nodeFrom.asExpr() = for.getValue()
@@ -2386,8 +2386,7 @@ module TypeInference {
| |
m = resolveConstantReadAccess(pattern.getExpr()) and m = resolveConstantReadAccess(pattern.getExpr()) and
cb.getLastNode() = pattern and cb.getLastNode() = pattern and
cb.edgeDominates(read.getBasicBlock(), cb.edgeDominates(read.getBasicBlock(), any(MatchingSuccessor match | match.getValue() = true)) and
any(SuccessorTypes::MatchingSuccessor match | match.getValue() = true)) and
caseRead = def.getARead() and caseRead = def.getARead() and
read = def.getARead() and read = def.getARead() and
case.getValue() = caseRead case.getValue() = caseRead

View File

@@ -487,7 +487,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu
* from `bb1` to `bb2`. * from `bb1` to `bb2`.
*/ */
predicate hasValueBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue branch) { predicate hasValueBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue branch) {
exists(Cfg::SuccessorTypes::ConditionalSuccessor s | exists(Cfg::ConditionalSuccessor s |
this.getBasicBlock() = bb1 and this.getBasicBlock() = bb1 and
bb2 = bb1.getASuccessor(s) and bb2 = bb1.getASuccessor(s) and
s.getValue() = branch s.getValue() = branch

View File

@@ -9,7 +9,7 @@ query predicate immediateDominator(BasicBlock bb1, BasicBlock bb2) {
bb1.getImmediateDominator() = bb2 bb1.getImmediateDominator() = bb2
} }
query predicate controls(ConditionBlock bb1, BasicBlock bb2, SuccessorTypes::ConditionalSuccessor t) { query predicate controls(ConditionBlock bb1, BasicBlock bb2, ConditionalSuccessor t) {
bb1.edgeDominates(bb2, t) bb1.edgeDominates(bb2, t)
} }

View File

@@ -9,37 +9,37 @@
| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:2:13:2:13 | 0 | | | break_ensure.rb:2:9:2:9 | x | break_ensure.rb:2:13:2:13 | 0 | |
| break_ensure.rb:2:9:2:13 | ... < ... | break_ensure.rb:2:3:6:5 | while ... | false | | break_ensure.rb:2:9:2:13 | ... < ... | break_ensure.rb:2:3:6:5 | while ... | false |
| break_ensure.rb:2:9:2:13 | ... < ... | break_ensure.rb:3:8:3:8 | x | true | | break_ensure.rb:2:9:2:13 | ... < ... | break_ensure.rb:3:8:3:8 | x | true |
| break_ensure.rb:2:9:2:13 | ... < ... | break_ensure.rb:8:6:8:13 | [ensure: raise] self | raise | | break_ensure.rb:2:9:2:13 | ... < ... | break_ensure.rb:8:6:8:13 | [ensure: exception] self | exception |
| break_ensure.rb:2:13:2:13 | 0 | break_ensure.rb:2:9:2:13 | ... < ... | | | break_ensure.rb:2:13:2:13 | 0 | break_ensure.rb:2:9:2:13 | ... < ... | |
| break_ensure.rb:2:14:6:5 | do ... | break_ensure.rb:2:9:2:9 | x | | | break_ensure.rb:2:14:6:5 | do ... | break_ensure.rb:2:9:2:9 | x | |
| break_ensure.rb:3:5:5:7 | if ... | break_ensure.rb:2:14:6:5 | do ... | | | break_ensure.rb:3:5:5:7 | if ... | break_ensure.rb:2:14:6:5 | do ... | |
| break_ensure.rb:3:8:3:8 | x | break_ensure.rb:3:12:3:12 | 0 | | | break_ensure.rb:3:8:3:8 | x | break_ensure.rb:3:12:3:12 | 0 | |
| break_ensure.rb:3:8:3:12 | ... > ... | break_ensure.rb:2:3:6:5 | while ... | raise | | break_ensure.rb:3:8:3:12 | ... > ... | break_ensure.rb:2:3:6:5 | while ... | exception |
| break_ensure.rb:3:8:3:12 | ... > ... | break_ensure.rb:3:5:5:7 | if ... | false | | break_ensure.rb:3:8:3:12 | ... > ... | break_ensure.rb:3:5:5:7 | if ... | false |
| break_ensure.rb:3:8:3:12 | ... > ... | break_ensure.rb:4:7:4:11 | break | true | | break_ensure.rb:3:8:3:12 | ... > ... | break_ensure.rb:4:7:4:11 | break | true |
| break_ensure.rb:3:12:3:12 | 0 | break_ensure.rb:3:8:3:12 | ... > ... | | | break_ensure.rb:3:12:3:12 | 0 | break_ensure.rb:3:8:3:12 | ... > ... | |
| break_ensure.rb:4:7:4:11 | break | break_ensure.rb:2:3:6:5 | while ... | break | | break_ensure.rb:4:7:4:11 | break | break_ensure.rb:2:3:6:5 | while ... | break |
| break_ensure.rb:7:1:10:5 | [ensure: raise] ensure ... | break_ensure.rb:1:1:11:3 | exit m1 (abnormal) | raise | | break_ensure.rb:7:1:10:5 | [ensure: exception] ensure ... | break_ensure.rb:1:1:11:3 | exit m1 (abnormal) | exception |
| break_ensure.rb:7:1:10:5 | ensure ... | break_ensure.rb:1:1:11:3 | exit m1 (normal) | | | break_ensure.rb:7:1:10:5 | ensure ... | break_ensure.rb:1:1:11:3 | exit m1 (normal) | |
| break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | break_ensure.rb:7:1:10:5 | [ensure: raise] ensure ... | | | break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | break_ensure.rb:7:1:10:5 | [ensure: exception] ensure ... | |
| break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:7:1:10:5 | ensure ... | | | break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:7:1:10:5 | ensure ... | |
| break_ensure.rb:8:6:8:13 | [ensure: raise] call to elements | break_ensure.rb:8:6:8:18 | [ensure: raise] call to nil? | | | break_ensure.rb:8:6:8:13 | [ensure: exception] call to elements | break_ensure.rb:8:6:8:18 | [ensure: exception] call to nil? | |
| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:8:6:8:13 | [ensure: raise] call to elements | | | break_ensure.rb:8:6:8:13 | [ensure: exception] self | break_ensure.rb:8:6:8:13 | [ensure: exception] call to elements | |
| break_ensure.rb:8:6:8:13 | call to elements | break_ensure.rb:8:6:8:18 | call to nil? | | | break_ensure.rb:8:6:8:13 | call to elements | break_ensure.rb:8:6:8:18 | call to nil? | |
| break_ensure.rb:8:6:8:13 | self | break_ensure.rb:8:6:8:13 | call to elements | | | break_ensure.rb:8:6:8:13 | self | break_ensure.rb:8:6:8:13 | call to elements | |
| break_ensure.rb:8:6:8:18 | [ensure: raise] call to nil? | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | false | | break_ensure.rb:8:6:8:18 | [ensure: exception] call to nil? | break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | false |
| break_ensure.rb:8:6:8:18 | [ensure: raise] call to nil? | break_ensure.rb:9:5:9:23 | [ensure: raise] self | true | | break_ensure.rb:8:6:8:18 | [ensure: exception] call to nil? | break_ensure.rb:9:5:9:23 | [ensure: exception] self | true |
| break_ensure.rb:8:6:8:18 | call to nil? | break_ensure.rb:8:3:10:5 | if ... | false | | break_ensure.rb:8:6:8:18 | call to nil? | break_ensure.rb:8:3:10:5 | if ... | false |
| break_ensure.rb:8:6:8:18 | call to nil? | break_ensure.rb:9:5:9:23 | self | true | | break_ensure.rb:8:6:8:18 | call to nil? | break_ensure.rb:9:5:9:23 | self | true |
| break_ensure.rb:8:20:9:23 | [ensure: raise] then ... | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | | | break_ensure.rb:8:20:9:23 | [ensure: exception] then ... | break_ensure.rb:8:3:10:5 | [ensure: exception] if ... | |
| break_ensure.rb:8:20:9:23 | then ... | break_ensure.rb:8:3:10:5 | if ... | | | break_ensure.rb:8:20:9:23 | then ... | break_ensure.rb:8:3:10:5 | if ... | |
| break_ensure.rb:9:5:9:23 | [ensure: raise] call to puts | break_ensure.rb:8:20:9:23 | [ensure: raise] then ... | | | break_ensure.rb:9:5:9:23 | [ensure: exception] call to puts | break_ensure.rb:8:20:9:23 | [ensure: exception] then ... | |
| break_ensure.rb:9:5:9:23 | [ensure: raise] self | break_ensure.rb:9:11:9:22 | [ensure: raise] elements nil | | | break_ensure.rb:9:5:9:23 | [ensure: exception] self | break_ensure.rb:9:11:9:22 | [ensure: exception] elements nil | |
| break_ensure.rb:9:5:9:23 | call to puts | break_ensure.rb:8:20:9:23 | then ... | | | break_ensure.rb:9:5:9:23 | call to puts | break_ensure.rb:8:20:9:23 | then ... | |
| break_ensure.rb:9:5:9:23 | self | break_ensure.rb:9:11:9:22 | elements nil | | | break_ensure.rb:9:5:9:23 | self | break_ensure.rb:9:11:9:22 | elements nil | |
| break_ensure.rb:9:10:9:23 | "elements nil" | break_ensure.rb:9:5:9:23 | call to puts | | | break_ensure.rb:9:10:9:23 | "elements nil" | break_ensure.rb:9:5:9:23 | call to puts | |
| break_ensure.rb:9:10:9:23 | [ensure: raise] "elements nil" | break_ensure.rb:9:5:9:23 | [ensure: raise] call to puts | | | break_ensure.rb:9:10:9:23 | [ensure: exception] "elements nil" | break_ensure.rb:9:5:9:23 | [ensure: exception] call to puts | |
| break_ensure.rb:9:11:9:22 | [ensure: raise] elements nil | break_ensure.rb:9:10:9:23 | [ensure: raise] "elements nil" | | | break_ensure.rb:9:11:9:22 | [ensure: exception] elements nil | break_ensure.rb:9:10:9:23 | [ensure: exception] "elements nil" | |
| break_ensure.rb:9:11:9:22 | elements nil | break_ensure.rb:9:10:9:23 | "elements nil" | | | break_ensure.rb:9:11:9:22 | elements nil | break_ensure.rb:9:10:9:23 | "elements nil" | |
| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:13:8:13:8 | x | | | break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:13:8:13:8 | x | |
| break_ensure.rb:13:1:25:3 | exit m2 (normal) | break_ensure.rb:13:1:25:3 | exit m2 | | | break_ensure.rb:13:1:25:3 | exit m2 (normal) | break_ensure.rb:13:1:25:3 | exit m2 | |
@@ -56,38 +56,38 @@
| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:16:14:16:14 | 0 | | | break_ensure.rb:16:10:16:10 | x | break_ensure.rb:16:14:16:14 | 0 | |
| break_ensure.rb:16:10:16:14 | ... > ... | break_ensure.rb:16:7:18:9 | if ... | false | | break_ensure.rb:16:10:16:14 | ... > ... | break_ensure.rb:16:7:18:9 | if ... | false |
| break_ensure.rb:16:10:16:14 | ... > ... | break_ensure.rb:17:9:17:13 | break | true | | break_ensure.rb:16:10:16:14 | ... > ... | break_ensure.rb:17:9:17:13 | break | true |
| break_ensure.rb:16:10:16:14 | ... > ... | break_ensure.rb:20:10:20:10 | [ensure: raise] y | raise | | break_ensure.rb:16:10:16:14 | ... > ... | break_ensure.rb:20:10:20:10 | [ensure: exception] y | exception |
| break_ensure.rb:16:14:16:14 | 0 | break_ensure.rb:16:10:16:14 | ... > ... | | | break_ensure.rb:16:14:16:14 | 0 | break_ensure.rb:16:10:16:14 | ... > ... | |
| break_ensure.rb:17:9:17:13 | break | break_ensure.rb:20:10:20:10 | [ensure: break] y | break | | break_ensure.rb:17:9:17:13 | break | break_ensure.rb:20:10:20:10 | [ensure: break] y | break |
| break_ensure.rb:19:5:22:9 | [ensure: break] ensure ... | break_ensure.rb:14:3:24:5 | while ... | break | | break_ensure.rb:19:5:22:9 | [ensure: break] ensure ... | break_ensure.rb:14:3:24:5 | while ... | break |
| break_ensure.rb:19:5:22:9 | [ensure: raise] ensure ... | break_ensure.rb:14:3:24:5 | while ... | raise | | break_ensure.rb:19:5:22:9 | [ensure: exception] ensure ... | break_ensure.rb:14:3:24:5 | while ... | exception |
| break_ensure.rb:19:5:22:9 | ensure ... | break_ensure.rb:14:14:24:5 | do ... | | | break_ensure.rb:19:5:22:9 | ensure ... | break_ensure.rb:14:14:24:5 | do ... | |
| break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:19:5:22:9 | [ensure: break] ensure ... | | | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:19:5:22:9 | [ensure: break] ensure ... | |
| break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | break_ensure.rb:19:5:22:9 | [ensure: raise] ensure ... | | | break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | break_ensure.rb:19:5:22:9 | [ensure: exception] ensure ... | |
| break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:19:5:22:9 | ensure ... | | | break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:19:5:22:9 | ensure ... | |
| break_ensure.rb:20:10:20:10 | [ensure: break] y | break_ensure.rb:20:10:20:15 | [ensure: break] call to nil? | | | break_ensure.rb:20:10:20:10 | [ensure: break] y | break_ensure.rb:20:10:20:15 | [ensure: break] call to nil? | |
| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:20:10:20:15 | [ensure: raise] call to nil? | | | break_ensure.rb:20:10:20:10 | [ensure: exception] y | break_ensure.rb:20:10:20:15 | [ensure: exception] call to nil? | |
| break_ensure.rb:20:10:20:10 | y | break_ensure.rb:20:10:20:15 | call to nil? | | | break_ensure.rb:20:10:20:10 | y | break_ensure.rb:20:10:20:15 | call to nil? | |
| break_ensure.rb:20:10:20:15 | [ensure: break] call to nil? | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | false | | break_ensure.rb:20:10:20:15 | [ensure: break] call to nil? | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | false |
| break_ensure.rb:20:10:20:15 | [ensure: break] call to nil? | break_ensure.rb:21:9:21:20 | [ensure: break] self | true | | break_ensure.rb:20:10:20:15 | [ensure: break] call to nil? | break_ensure.rb:21:9:21:20 | [ensure: break] self | true |
| break_ensure.rb:20:10:20:15 | [ensure: raise] call to nil? | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | false | | break_ensure.rb:20:10:20:15 | [ensure: exception] call to nil? | break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | false |
| break_ensure.rb:20:10:20:15 | [ensure: raise] call to nil? | break_ensure.rb:21:9:21:20 | [ensure: raise] self | true | | break_ensure.rb:20:10:20:15 | [ensure: exception] call to nil? | break_ensure.rb:21:9:21:20 | [ensure: exception] self | true |
| break_ensure.rb:20:10:20:15 | call to nil? | break_ensure.rb:20:7:22:9 | if ... | false | | break_ensure.rb:20:10:20:15 | call to nil? | break_ensure.rb:20:7:22:9 | if ... | false |
| break_ensure.rb:20:10:20:15 | call to nil? | break_ensure.rb:21:9:21:20 | self | true | | break_ensure.rb:20:10:20:15 | call to nil? | break_ensure.rb:21:9:21:20 | self | true |
| break_ensure.rb:20:17:21:20 | [ensure: break] then ... | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | | | break_ensure.rb:20:17:21:20 | [ensure: break] then ... | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | |
| break_ensure.rb:20:17:21:20 | [ensure: raise] then ... | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | | | break_ensure.rb:20:17:21:20 | [ensure: exception] then ... | break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | |
| break_ensure.rb:20:17:21:20 | then ... | break_ensure.rb:20:7:22:9 | if ... | | | break_ensure.rb:20:17:21:20 | then ... | break_ensure.rb:20:7:22:9 | if ... | |
| break_ensure.rb:21:9:21:20 | [ensure: break] call to puts | break_ensure.rb:20:17:21:20 | [ensure: break] then ... | | | break_ensure.rb:21:9:21:20 | [ensure: break] call to puts | break_ensure.rb:20:17:21:20 | [ensure: break] then ... | |
| break_ensure.rb:21:9:21:20 | [ensure: break] self | break_ensure.rb:21:15:21:19 | [ensure: break] y nil | | | break_ensure.rb:21:9:21:20 | [ensure: break] self | break_ensure.rb:21:15:21:19 | [ensure: break] y nil | |
| break_ensure.rb:21:9:21:20 | [ensure: raise] call to puts | break_ensure.rb:20:17:21:20 | [ensure: raise] then ... | | | break_ensure.rb:21:9:21:20 | [ensure: exception] call to puts | break_ensure.rb:20:17:21:20 | [ensure: exception] then ... | |
| break_ensure.rb:21:9:21:20 | [ensure: raise] self | break_ensure.rb:21:15:21:19 | [ensure: raise] y nil | | | break_ensure.rb:21:9:21:20 | [ensure: exception] self | break_ensure.rb:21:15:21:19 | [ensure: exception] y nil | |
| break_ensure.rb:21:9:21:20 | call to puts | break_ensure.rb:20:17:21:20 | then ... | | | break_ensure.rb:21:9:21:20 | call to puts | break_ensure.rb:20:17:21:20 | then ... | |
| break_ensure.rb:21:9:21:20 | self | break_ensure.rb:21:15:21:19 | y nil | | | break_ensure.rb:21:9:21:20 | self | break_ensure.rb:21:15:21:19 | y nil | |
| break_ensure.rb:21:14:21:20 | "y nil" | break_ensure.rb:21:9:21:20 | call to puts | | | break_ensure.rb:21:14:21:20 | "y nil" | break_ensure.rb:21:9:21:20 | call to puts | |
| break_ensure.rb:21:14:21:20 | [ensure: break] "y nil" | break_ensure.rb:21:9:21:20 | [ensure: break] call to puts | | | break_ensure.rb:21:14:21:20 | [ensure: break] "y nil" | break_ensure.rb:21:9:21:20 | [ensure: break] call to puts | |
| break_ensure.rb:21:14:21:20 | [ensure: raise] "y nil" | break_ensure.rb:21:9:21:20 | [ensure: raise] call to puts | | | break_ensure.rb:21:14:21:20 | [ensure: exception] "y nil" | break_ensure.rb:21:9:21:20 | [ensure: exception] call to puts | |
| break_ensure.rb:21:15:21:19 | [ensure: break] y nil | break_ensure.rb:21:14:21:20 | [ensure: break] "y nil" | | | break_ensure.rb:21:15:21:19 | [ensure: break] y nil | break_ensure.rb:21:14:21:20 | [ensure: break] "y nil" | |
| break_ensure.rb:21:15:21:19 | [ensure: raise] y nil | break_ensure.rb:21:14:21:20 | [ensure: raise] "y nil" | | | break_ensure.rb:21:15:21:19 | [ensure: exception] y nil | break_ensure.rb:21:14:21:20 | [ensure: exception] "y nil" | |
| break_ensure.rb:21:15:21:19 | y nil | break_ensure.rb:21:14:21:20 | "y nil" | | | break_ensure.rb:21:15:21:19 | y nil | break_ensure.rb:21:14:21:20 | "y nil" | |
| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:27:8:27:8 | x | | | break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:27:8:27:8 | x | |
| break_ensure.rb:27:1:42:3 | exit m3 (abnormal) | break_ensure.rb:27:1:42:3 | exit m3 | | | break_ensure.rb:27:1:42:3 | exit m3 (abnormal) | break_ensure.rb:27:1:42:3 | exit m3 | |
@@ -99,45 +99,45 @@
| break_ensure.rb:29:8:29:8 | x | break_ensure.rb:29:8:29:13 | call to nil? | | | break_ensure.rb:29:8:29:8 | x | break_ensure.rb:29:8:29:13 | call to nil? | |
| break_ensure.rb:29:8:29:13 | call to nil? | break_ensure.rb:29:5:31:7 | if ... | false | | break_ensure.rb:29:8:29:13 | call to nil? | break_ensure.rb:29:5:31:7 | if ... | false |
| break_ensure.rb:29:8:29:13 | call to nil? | break_ensure.rb:30:7:30:12 | return | true | | break_ensure.rb:29:8:29:13 | call to nil? | break_ensure.rb:30:7:30:12 | return | true |
| break_ensure.rb:29:8:29:13 | call to nil? | break_ensure.rb:33:11:33:11 | [ensure: raise] y | raise | | break_ensure.rb:29:8:29:13 | call to nil? | break_ensure.rb:33:11:33:11 | [ensure: exception] y | exception |
| break_ensure.rb:30:7:30:12 | return | break_ensure.rb:33:11:33:11 | [ensure: return] y | return | | break_ensure.rb:30:7:30:12 | return | break_ensure.rb:33:11:33:11 | [ensure: return] y | return |
| break_ensure.rb:32:3:39:7 | [ensure: raise] ensure ... | break_ensure.rb:27:1:42:3 | exit m3 (abnormal) | raise | | break_ensure.rb:32:3:39:7 | [ensure: exception] ensure ... | break_ensure.rb:27:1:42:3 | exit m3 (abnormal) | exception |
| break_ensure.rb:32:3:39:7 | [ensure: return] ensure ... | break_ensure.rb:27:1:42:3 | exit m3 (normal) | return | | break_ensure.rb:32:3:39:7 | [ensure: return] ensure ... | break_ensure.rb:27:1:42:3 | exit m3 (normal) | return |
| break_ensure.rb:32:3:39:7 | ensure ... | break_ensure.rb:41:3:41:13 | self | | | break_ensure.rb:32:3:39:7 | ensure ... | break_ensure.rb:41:3:41:13 | self | |
| break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | break_ensure.rb:32:3:39:7 | [ensure: raise] ensure ... | | | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | break_ensure.rb:32:3:39:7 | [ensure: exception] ensure ... | |
| break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:32:3:39:7 | [ensure: return] ensure ... | | | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:32:3:39:7 | [ensure: return] ensure ... | |
| break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:32:3:39:7 | ensure ... | | | break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:32:3:39:7 | ensure ... | |
| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:33:15:33:15 | [ensure: raise] 0 | | | break_ensure.rb:33:11:33:11 | [ensure: exception] y | break_ensure.rb:33:15:33:15 | [ensure: exception] 0 | |
| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:33:15:33:15 | [ensure: return] 0 | | | break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:33:15:33:15 | [ensure: return] 0 | |
| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:33:15:33:15 | 0 | | | break_ensure.rb:33:11:33:11 | y | break_ensure.rb:33:15:33:15 | 0 | |
| break_ensure.rb:33:11:33:15 | ... < ... | break_ensure.rb:33:5:39:7 | while ... | false | | break_ensure.rb:33:11:33:15 | ... < ... | break_ensure.rb:33:5:39:7 | while ... | false |
| break_ensure.rb:33:11:33:15 | ... < ... | break_ensure.rb:35:12:35:12 | x | true | | break_ensure.rb:33:11:33:15 | ... < ... | break_ensure.rb:35:12:35:12 | x | true |
| break_ensure.rb:33:11:33:15 | [ensure: raise] ... < ... | break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | false | | break_ensure.rb:33:11:33:15 | [ensure: exception] ... < ... | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | false |
| break_ensure.rb:33:11:33:15 | [ensure: raise] ... < ... | break_ensure.rb:35:12:35:12 | [ensure: raise] x | true | | break_ensure.rb:33:11:33:15 | [ensure: exception] ... < ... | break_ensure.rb:35:12:35:12 | [ensure: exception] x | true |
| break_ensure.rb:33:11:33:15 | [ensure: return] ... < ... | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | false | | break_ensure.rb:33:11:33:15 | [ensure: return] ... < ... | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | false |
| break_ensure.rb:33:11:33:15 | [ensure: return] ... < ... | break_ensure.rb:35:12:35:12 | [ensure: return] x | true | | break_ensure.rb:33:11:33:15 | [ensure: return] ... < ... | break_ensure.rb:35:12:35:12 | [ensure: return] x | true |
| break_ensure.rb:33:15:33:15 | 0 | break_ensure.rb:33:11:33:15 | ... < ... | | | break_ensure.rb:33:15:33:15 | 0 | break_ensure.rb:33:11:33:15 | ... < ... | |
| break_ensure.rb:33:15:33:15 | [ensure: raise] 0 | break_ensure.rb:33:11:33:15 | [ensure: raise] ... < ... | | | break_ensure.rb:33:15:33:15 | [ensure: exception] 0 | break_ensure.rb:33:11:33:15 | [ensure: exception] ... < ... | |
| break_ensure.rb:33:15:33:15 | [ensure: return] 0 | break_ensure.rb:33:11:33:15 | [ensure: return] ... < ... | | | break_ensure.rb:33:15:33:15 | [ensure: return] 0 | break_ensure.rb:33:11:33:15 | [ensure: return] ... < ... | |
| break_ensure.rb:33:16:39:7 | [ensure: raise] do ... | break_ensure.rb:33:11:33:11 | [ensure: raise] y | | | break_ensure.rb:33:16:39:7 | [ensure: exception] do ... | break_ensure.rb:33:11:33:11 | [ensure: exception] y | |
| break_ensure.rb:33:16:39:7 | [ensure: return] do ... | break_ensure.rb:33:11:33:11 | [ensure: return] y | | | break_ensure.rb:33:16:39:7 | [ensure: return] do ... | break_ensure.rb:33:11:33:11 | [ensure: return] y | |
| break_ensure.rb:33:16:39:7 | do ... | break_ensure.rb:33:11:33:11 | y | | | break_ensure.rb:33:16:39:7 | do ... | break_ensure.rb:33:11:33:11 | y | |
| break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | break_ensure.rb:33:16:39:7 | [ensure: raise] do ... | | | break_ensure.rb:35:9:37:11 | [ensure: exception] if ... | break_ensure.rb:33:16:39:7 | [ensure: exception] do ... | |
| break_ensure.rb:35:9:37:11 | [ensure: return] if ... | break_ensure.rb:33:16:39:7 | [ensure: return] do ... | | | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | break_ensure.rb:33:16:39:7 | [ensure: return] do ... | |
| break_ensure.rb:35:9:37:11 | if ... | break_ensure.rb:33:16:39:7 | do ... | | | break_ensure.rb:35:9:37:11 | if ... | break_ensure.rb:33:16:39:7 | do ... | |
| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:35:16:35:16 | [ensure: raise] 0 | | | break_ensure.rb:35:12:35:12 | [ensure: exception] x | break_ensure.rb:35:16:35:16 | [ensure: exception] 0 | |
| break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:35:16:35:16 | [ensure: return] 0 | | | break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:35:16:35:16 | [ensure: return] 0 | |
| break_ensure.rb:35:12:35:12 | x | break_ensure.rb:35:16:35:16 | 0 | | | break_ensure.rb:35:12:35:12 | x | break_ensure.rb:35:16:35:16 | 0 | |
| break_ensure.rb:35:12:35:16 | ... > ... | break_ensure.rb:35:9:37:11 | if ... | false | | break_ensure.rb:35:12:35:16 | ... > ... | break_ensure.rb:35:9:37:11 | if ... | false |
| break_ensure.rb:35:12:35:16 | ... > ... | break_ensure.rb:36:11:36:15 | break | true | | break_ensure.rb:35:12:35:16 | ... > ... | break_ensure.rb:36:11:36:15 | break | true |
| break_ensure.rb:35:12:35:16 | [ensure: raise] ... > ... | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | false | | break_ensure.rb:35:12:35:16 | [ensure: exception] ... > ... | break_ensure.rb:35:9:37:11 | [ensure: exception] if ... | false |
| break_ensure.rb:35:12:35:16 | [ensure: raise] ... > ... | break_ensure.rb:36:11:36:15 | [ensure: raise] break | true | | break_ensure.rb:35:12:35:16 | [ensure: exception] ... > ... | break_ensure.rb:36:11:36:15 | [ensure: exception] break | true |
| break_ensure.rb:35:12:35:16 | [ensure: return] ... > ... | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | false | | break_ensure.rb:35:12:35:16 | [ensure: return] ... > ... | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | false |
| break_ensure.rb:35:12:35:16 | [ensure: return] ... > ... | break_ensure.rb:36:11:36:15 | [ensure: return] break | true | | break_ensure.rb:35:12:35:16 | [ensure: return] ... > ... | break_ensure.rb:36:11:36:15 | [ensure: return] break | true |
| break_ensure.rb:35:16:35:16 | 0 | break_ensure.rb:35:12:35:16 | ... > ... | | | break_ensure.rb:35:16:35:16 | 0 | break_ensure.rb:35:12:35:16 | ... > ... | |
| break_ensure.rb:35:16:35:16 | [ensure: raise] 0 | break_ensure.rb:35:12:35:16 | [ensure: raise] ... > ... | | | break_ensure.rb:35:16:35:16 | [ensure: exception] 0 | break_ensure.rb:35:12:35:16 | [ensure: exception] ... > ... | |
| break_ensure.rb:35:16:35:16 | [ensure: return] 0 | break_ensure.rb:35:12:35:16 | [ensure: return] ... > ... | | | break_ensure.rb:35:16:35:16 | [ensure: return] 0 | break_ensure.rb:35:12:35:16 | [ensure: return] ... > ... | |
| break_ensure.rb:36:11:36:15 | [ensure: raise] break | break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | break | | break_ensure.rb:36:11:36:15 | [ensure: exception] break | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | break |
| break_ensure.rb:36:11:36:15 | [ensure: return] break | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break | | break_ensure.rb:36:11:36:15 | [ensure: return] break | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break |
| break_ensure.rb:36:11:36:15 | break | break_ensure.rb:33:5:39:7 | while ... | break | | break_ensure.rb:36:11:36:15 | break | break_ensure.rb:33:5:39:7 | while ... | break |
| break_ensure.rb:41:3:41:13 | call to puts | break_ensure.rb:27:1:42:3 | exit m3 (normal) | | | break_ensure.rb:41:3:41:13 | call to puts | break_ensure.rb:27:1:42:3 | exit m3 (normal) | |
@@ -158,27 +158,27 @@
| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:47:14:47:14 | 1 | | | break_ensure.rb:47:10:47:10 | x | break_ensure.rb:47:14:47:14 | 1 | |
| break_ensure.rb:47:10:47:14 | ... > ... | break_ensure.rb:47:7:49:9 | if ... | false | | break_ensure.rb:47:10:47:14 | ... > ... | break_ensure.rb:47:7:49:9 | if ... | false |
| break_ensure.rb:47:10:47:14 | ... > ... | break_ensure.rb:48:9:48:16 | self | true | | break_ensure.rb:47:10:47:14 | ... > ... | break_ensure.rb:48:9:48:16 | self | true |
| break_ensure.rb:47:10:47:14 | ... > ... | break_ensure.rb:51:10:51:10 | [ensure: raise] x | raise | | break_ensure.rb:47:10:47:14 | ... > ... | break_ensure.rb:51:10:51:10 | [ensure: exception] x | exception |
| break_ensure.rb:47:14:47:14 | 1 | break_ensure.rb:47:10:47:14 | ... > ... | | | break_ensure.rb:47:14:47:14 | 1 | break_ensure.rb:47:10:47:14 | ... > ... | |
| break_ensure.rb:48:9:48:16 | call to raise | break_ensure.rb:51:10:51:10 | [ensure: raise] x | raise | | break_ensure.rb:48:9:48:16 | call to raise | break_ensure.rb:51:10:51:10 | [ensure: exception] x | exception |
| break_ensure.rb:48:9:48:16 | self | break_ensure.rb:48:15:48:16 | "" | | | break_ensure.rb:48:9:48:16 | self | break_ensure.rb:48:15:48:16 | "" | |
| break_ensure.rb:48:15:48:16 | "" | break_ensure.rb:48:9:48:16 | call to raise | | | break_ensure.rb:48:15:48:16 | "" | break_ensure.rb:48:9:48:16 | call to raise | |
| break_ensure.rb:50:5:53:9 | [ensure: raise] ensure ... | break_ensure.rb:45:3:55:5 | while ... | raise | | break_ensure.rb:50:5:53:9 | [ensure: exception] ensure ... | break_ensure.rb:45:3:55:5 | while ... | exception |
| break_ensure.rb:50:5:53:9 | ensure ... | break_ensure.rb:45:14:55:5 | do ... | | | break_ensure.rb:50:5:53:9 | ensure ... | break_ensure.rb:45:14:55:5 | do ... | |
| break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | break_ensure.rb:50:5:53:9 | [ensure: raise] ensure ... | | | break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | break_ensure.rb:50:5:53:9 | [ensure: exception] ensure ... | |
| break_ensure.rb:51:7:53:9 | if ... | break_ensure.rb:50:5:53:9 | ensure ... | | | break_ensure.rb:51:7:53:9 | if ... | break_ensure.rb:50:5:53:9 | ensure ... | |
| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:51:14:51:14 | [ensure: raise] 0 | | | break_ensure.rb:51:10:51:10 | [ensure: exception] x | break_ensure.rb:51:14:51:14 | [ensure: exception] 0 | |
| break_ensure.rb:51:10:51:10 | x | break_ensure.rb:51:14:51:14 | 0 | | | break_ensure.rb:51:10:51:10 | x | break_ensure.rb:51:14:51:14 | 0 | |
| break_ensure.rb:51:10:51:14 | ... > ... | break_ensure.rb:51:7:53:9 | if ... | false | | break_ensure.rb:51:10:51:14 | ... > ... | break_ensure.rb:51:7:53:9 | if ... | false |
| break_ensure.rb:51:10:51:14 | ... > ... | break_ensure.rb:52:15:52:16 | 10 | true | | break_ensure.rb:51:10:51:14 | ... > ... | break_ensure.rb:52:15:52:16 | 10 | true |
| break_ensure.rb:51:10:51:14 | [ensure: raise] ... > ... | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | false | | break_ensure.rb:51:10:51:14 | [ensure: exception] ... > ... | break_ensure.rb:51:7:53:9 | [ensure: exception] if ... | false |
| break_ensure.rb:51:10:51:14 | [ensure: raise] ... > ... | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | true | | break_ensure.rb:51:10:51:14 | [ensure: exception] ... > ... | break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | true |
| break_ensure.rb:51:14:51:14 | 0 | break_ensure.rb:51:10:51:14 | ... > ... | | | break_ensure.rb:51:14:51:14 | 0 | break_ensure.rb:51:10:51:14 | ... > ... | |
| break_ensure.rb:51:14:51:14 | [ensure: raise] 0 | break_ensure.rb:51:10:51:14 | [ensure: raise] ... > ... | | | break_ensure.rb:51:14:51:14 | [ensure: exception] 0 | break_ensure.rb:51:10:51:14 | [ensure: exception] ... > ... | |
| break_ensure.rb:52:9:52:16 | [ensure: raise] break | break_ensure.rb:45:3:55:5 | while ... | break | | break_ensure.rb:52:9:52:16 | [ensure: exception] break | break_ensure.rb:45:3:55:5 | while ... | break |
| break_ensure.rb:52:9:52:16 | break | break_ensure.rb:45:3:55:5 | while ... | break | | break_ensure.rb:52:9:52:16 | break | break_ensure.rb:45:3:55:5 | while ... | break |
| break_ensure.rb:52:15:52:16 | 10 | break_ensure.rb:52:9:52:16 | break | | | break_ensure.rb:52:15:52:16 | 10 | break_ensure.rb:52:9:52:16 | break | |
| break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | break_ensure.rb:52:9:52:16 | [ensure: raise] break | | | break_ensure.rb:52:15:52:16 | [ensure: exception] 10 | break_ensure.rb:52:9:52:16 | [ensure: exception] break | |
| case.rb:1:1:6:3 | enter if_in_case | case.rb:2:8:2:9 | self | | | case.rb:1:1:6:3 | enter if_in_case | case.rb:2:8:2:9 | self | |
| case.rb:1:1:6:3 | exit if_in_case (normal) | case.rb:1:1:6:3 | exit if_in_case | | | case.rb:1:1:6:3 | exit if_in_case (normal) | case.rb:1:1:6:3 | exit if_in_case | |
| case.rb:1:1:6:3 | if_in_case | case.rb:8:1:18:3 | case_match | | | case.rb:1:1:6:3 | if_in_case | case.rb:8:1:18:3 | case_match | |
@@ -256,7 +256,7 @@
| case.rb:21:3:23:5 | case ... | case.rb:20:1:24:3 | exit case_match_no_match (normal) | | | case.rb:21:3:23:5 | case ... | case.rb:20:1:24:3 | exit case_match_no_match (normal) | |
| case.rb:21:8:21:12 | value | case.rb:22:5:22:8 | in ... then ... | | | case.rb:21:8:21:12 | value | case.rb:22:5:22:8 | in ... then ... | |
| case.rb:22:5:22:8 | in ... then ... | case.rb:22:8:22:8 | 1 | | | case.rb:22:5:22:8 | in ... then ... | case.rb:22:8:22:8 | 1 | |
| case.rb:22:8:22:8 | 1 | case.rb:20:1:24:3 | exit case_match_no_match (abnormal) | raise | | case.rb:22:8:22:8 | 1 | case.rb:20:1:24:3 | exit case_match_no_match (abnormal) | exception |
| case.rb:22:8:22:8 | 1 | case.rb:21:3:23:5 | case ... | match | | case.rb:22:8:22:8 | 1 | case.rb:21:3:23:5 | case ... | match |
| case.rb:26:1:30:3 | case_match_raise | case.rb:32:1:39:3 | case_match_array | | | case.rb:26:1:30:3 | case_match_raise | case.rb:32:1:39:3 | case_match_array | |
| case.rb:26:1:30:3 | enter case_match_raise | case.rb:26:22:26:26 | value | | | case.rb:26:1:30:3 | enter case_match_raise | case.rb:26:22:26:26 | value | |
@@ -266,12 +266,12 @@
| case.rb:27:3:29:5 | case ... | case.rb:26:1:30:3 | exit case_match_raise (normal) | | | case.rb:27:3:29:5 | case ... | case.rb:26:1:30:3 | exit case_match_raise (normal) | |
| case.rb:27:8:27:12 | value | case.rb:28:4:28:28 | in ... then ... | | | case.rb:27:8:27:12 | value | case.rb:28:4:28:28 | in ... then ... | |
| case.rb:28:4:28:28 | in ... then ... | case.rb:28:7:28:28 | -> { ... } | | | case.rb:28:4:28:28 | in ... then ... | case.rb:28:7:28:28 | -> { ... } | |
| case.rb:28:7:28:28 | -> { ... } | case.rb:26:1:30:3 | exit case_match_raise (abnormal) | raise | | case.rb:28:7:28:28 | -> { ... } | case.rb:26:1:30:3 | exit case_match_raise (abnormal) | exception |
| case.rb:28:7:28:28 | -> { ... } | case.rb:27:3:29:5 | case ... | match | | case.rb:28:7:28:28 | -> { ... } | case.rb:27:3:29:5 | case ... | match |
| case.rb:28:7:28:28 | enter -> { ... } | case.rb:28:10:28:10 | x | | | case.rb:28:7:28:28 | enter -> { ... } | case.rb:28:10:28:10 | x | |
| case.rb:28:7:28:28 | exit -> { ... } (abnormal) | case.rb:28:7:28:28 | exit -> { ... } | | | case.rb:28:7:28:28 | exit -> { ... } (abnormal) | case.rb:28:7:28:28 | exit -> { ... } | |
| case.rb:28:10:28:10 | x | case.rb:28:14:28:25 | self | | | case.rb:28:10:28:10 | x | case.rb:28:14:28:25 | self | |
| case.rb:28:14:28:25 | call to raise | case.rb:28:7:28:28 | exit -> { ... } (abnormal) | raise | | case.rb:28:14:28:25 | call to raise | case.rb:28:7:28:28 | exit -> { ... } (abnormal) | exception |
| case.rb:28:14:28:25 | self | case.rb:28:21:28:24 | oops | | | case.rb:28:14:28:25 | self | case.rb:28:21:28:24 | oops | |
| case.rb:28:20:28:25 | "oops" | case.rb:28:14:28:25 | call to raise | | | case.rb:28:20:28:25 | "oops" | case.rb:28:14:28:25 | call to raise | |
| case.rb:28:21:28:24 | oops | case.rb:28:20:28:25 | "oops" | | | case.rb:28:21:28:24 | oops | case.rb:28:20:28:25 | "oops" | |
@@ -294,9 +294,9 @@
| case.rb:36:8:36:12 | [ ..., * ] | case.rb:37:5:37:27 | in ... then ... | no-match | | case.rb:36:8:36:12 | [ ..., * ] | case.rb:37:5:37:27 | in ... then ... | no-match |
| case.rb:36:9:36:9 | x | case.rb:33:3:38:5 | case ... | match | | case.rb:36:9:36:9 | x | case.rb:33:3:38:5 | case ... | match |
| case.rb:37:5:37:27 | in ... then ... | case.rb:37:8:37:10 | Bar | | | case.rb:37:5:37:27 | in ... then ... | case.rb:37:8:37:10 | Bar | |
| case.rb:37:8:37:10 | Bar | case.rb:32:1:39:3 | exit case_match_array (abnormal) | raise | | case.rb:37:8:37:10 | Bar | case.rb:32:1:39:3 | exit case_match_array (abnormal) | exception |
| case.rb:37:8:37:10 | Bar | case.rb:37:8:37:26 | [ ..., * ] | match | | case.rb:37:8:37:10 | Bar | case.rb:37:8:37:26 | [ ..., * ] | match |
| case.rb:37:8:37:26 | [ ..., * ] | case.rb:32:1:39:3 | exit case_match_array (abnormal) | raise | | case.rb:37:8:37:26 | [ ..., * ] | case.rb:32:1:39:3 | exit case_match_array (abnormal) | exception |
| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:12:37:12 | a | false, match, true | | case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:12:37:12 | a | false, match, true |
| case.rb:37:12:37:12 | a | case.rb:37:15:37:15 | b | match | | case.rb:37:12:37:12 | a | case.rb:37:15:37:15 | b | match |
| case.rb:37:15:37:15 | b | case.rb:37:19:37:19 | c | match | | case.rb:37:15:37:15 | b | case.rb:37:19:37:19 | c | match |
@@ -311,12 +311,12 @@
| case.rb:42:3:44:5 | case ... | case.rb:41:1:45:3 | exit case_match_find (normal) | | | case.rb:42:3:44:5 | case ... | case.rb:41:1:45:3 | exit case_match_find (normal) | |
| case.rb:42:8:42:12 | value | case.rb:43:5:43:22 | in ... then ... | | | case.rb:42:8:42:12 | value | case.rb:43:5:43:22 | in ... then ... | |
| case.rb:43:5:43:22 | in ... then ... | case.rb:43:8:43:21 | [ *,...,* ] | | | case.rb:43:5:43:22 | in ... then ... | case.rb:43:8:43:21 | [ *,...,* ] | |
| case.rb:43:8:43:21 | [ *,...,* ] | case.rb:41:1:45:3 | exit case_match_find (abnormal) | raise | | case.rb:43:8:43:21 | [ *,...,* ] | case.rb:41:1:45:3 | exit case_match_find (abnormal) | exception |
| case.rb:43:8:43:21 | [ *,...,* ] | case.rb:43:10:43:10 | x | false, match, true | | case.rb:43:8:43:21 | [ *,...,* ] | case.rb:43:10:43:10 | x | false, match, true |
| case.rb:43:10:43:10 | x | case.rb:43:13:43:13 | 1 | | | case.rb:43:10:43:10 | x | case.rb:43:13:43:13 | 1 | |
| case.rb:43:13:43:13 | 1 | case.rb:41:1:45:3 | exit case_match_find (abnormal) | raise | | case.rb:43:13:43:13 | 1 | case.rb:41:1:45:3 | exit case_match_find (abnormal) | exception |
| case.rb:43:13:43:13 | 1 | case.rb:43:16:43:16 | 2 | match | | case.rb:43:13:43:13 | 1 | case.rb:43:16:43:16 | 2 | match |
| case.rb:43:16:43:16 | 2 | case.rb:41:1:45:3 | exit case_match_find (abnormal) | raise | | case.rb:43:16:43:16 | 2 | case.rb:41:1:45:3 | exit case_match_find (abnormal) | exception |
| case.rb:43:16:43:16 | 2 | case.rb:43:20:43:20 | y | match | | case.rb:43:16:43:16 | 2 | case.rb:43:20:43:20 | y | match |
| case.rb:43:20:43:20 | y | case.rb:42:3:44:5 | case ... | | | case.rb:43:20:43:20 | y | case.rb:42:3:44:5 | case ... | |
| case.rb:47:1:53:3 | case_match_hash | case.rb:55:1:61:3 | case_match_variable | | | case.rb:47:1:53:3 | case_match_hash | case.rb:55:1:61:3 | case_match_variable | |
@@ -344,9 +344,9 @@
| case.rb:50:16:50:16 | 1 | case.rb:48:3:52:5 | case ... | match | | case.rb:50:16:50:16 | 1 | case.rb:48:3:52:5 | case ... | match |
| case.rb:50:16:50:16 | 1 | case.rb:51:5:51:17 | in ... then ... | no-match | | case.rb:50:16:50:16 | 1 | case.rb:51:5:51:17 | in ... then ... | no-match |
| case.rb:51:5:51:17 | in ... then ... | case.rb:51:8:51:10 | Bar | | | case.rb:51:5:51:17 | in ... then ... | case.rb:51:8:51:10 | Bar | |
| case.rb:51:8:51:10 | Bar | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | raise | | case.rb:51:8:51:10 | Bar | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | exception |
| case.rb:51:8:51:10 | Bar | case.rb:51:8:51:16 | { ..., ** } | match | | case.rb:51:8:51:10 | Bar | case.rb:51:8:51:16 | { ..., ** } | match |
| case.rb:51:8:51:16 | { ..., ** } | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | raise | | case.rb:51:8:51:16 | { ..., ** } | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | exception |
| case.rb:51:8:51:16 | { ..., ** } | case.rb:48:3:52:5 | case ... | false, match, true | | case.rb:51:8:51:16 | { ..., ** } | case.rb:48:3:52:5 | case ... | false, match, true |
| case.rb:55:1:61:3 | case_match_variable | case.rb:63:1:67:3 | case_match_underscore | | | case.rb:55:1:61:3 | case_match_variable | case.rb:63:1:67:3 | case_match_underscore | |
| case.rb:55:1:61:3 | enter case_match_variable | case.rb:55:25:55:29 | value | | | case.rb:55:1:61:3 | enter case_match_variable | case.rb:55:25:55:29 | value | |
@@ -500,7 +500,7 @@
| case.rb:91:13:91:14 | "" | case.rb:91:18:91:19 | [ ..., * ] | no-match | | case.rb:91:13:91:14 | "" | case.rb:91:18:91:19 | [ ..., * ] | no-match |
| case.rb:91:18:91:19 | [ ..., * ] | case.rb:72:3:92:5 | case ... | match | | case.rb:91:18:91:19 | [ ..., * ] | case.rb:72:3:92:5 | case ... | match |
| case.rb:91:18:91:19 | [ ..., * ] | case.rb:91:23:91:24 | { ..., ** } | no-match | | case.rb:91:18:91:19 | [ ..., * ] | case.rb:91:23:91:24 | { ..., ** } | no-match |
| case.rb:91:23:91:24 | { ..., ** } | case.rb:69:1:93:3 | exit case_match_various (abnormal) | raise | | case.rb:91:23:91:24 | { ..., ** } | case.rb:69:1:93:3 | exit case_match_various (abnormal) | exception |
| case.rb:91:23:91:24 | { ..., ** } | case.rb:72:3:92:5 | case ... | false, match, true | | case.rb:91:23:91:24 | { ..., ** } | case.rb:72:3:92:5 | case ... | false, match, true |
| case.rb:95:1:99:3 | case_match_guard_no_else | case.rb:1:1:99:4 | exit case.rb (normal) | | | case.rb:95:1:99:3 | case_match_guard_no_else | case.rb:1:1:99:4 | exit case.rb (normal) | |
| case.rb:95:1:99:3 | enter case_match_guard_no_else | case.rb:95:30:95:34 | value | | | case.rb:95:1:99:3 | enter case_match_guard_no_else | case.rb:95:30:95:34 | value | |
@@ -512,7 +512,7 @@
| case.rb:97:5:97:25 | in ... then ... | case.rb:97:8:97:8 | x | | | case.rb:97:5:97:25 | in ... then ... | case.rb:97:8:97:8 | x | |
| case.rb:97:8:97:8 | x | case.rb:97:13:97:13 | x | match | | case.rb:97:8:97:8 | x | case.rb:97:13:97:13 | x | match |
| case.rb:97:13:97:13 | x | case.rb:97:18:97:18 | 5 | | | case.rb:97:13:97:13 | x | case.rb:97:18:97:18 | 5 | |
| case.rb:97:13:97:18 | ... == ... | case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | raise | | case.rb:97:13:97:18 | ... == ... | case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | exception |
| case.rb:97:13:97:18 | ... == ... | case.rb:97:25:97:25 | 6 | true | | case.rb:97:13:97:18 | ... == ... | case.rb:97:25:97:25 | 6 | true |
| case.rb:97:18:97:18 | 5 | case.rb:97:13:97:18 | ... == ... | | | case.rb:97:18:97:18 | 5 | case.rb:97:13:97:18 | ... == ... | |
| case.rb:97:20:97:25 | then ... | case.rb:96:3:98:5 | case ... | | | case.rb:97:20:97:25 | then ... | case.rb:96:3:98:5 | case ... | |
@@ -870,7 +870,7 @@
| cfg.rb:91:6:91:10 | ... > ... | cfg.rb:91:3:91:24 | if ... | false | | cfg.rb:91:6:91:10 | ... > ... | cfg.rb:91:3:91:24 | if ... | false |
| cfg.rb:91:6:91:10 | ... > ... | cfg.rb:91:17:91:20 | next | true | | cfg.rb:91:6:91:10 | ... > ... | cfg.rb:91:17:91:20 | next | true |
| cfg.rb:91:10:91:10 | 3 | cfg.rb:91:6:91:10 | ... > ... | | | cfg.rb:91:10:91:10 | 3 | cfg.rb:91:6:91:10 | ... > ... | |
| cfg.rb:91:17:91:20 | next | cfg.rb:90:1:93:3 | exit { ... } (normal) | next | | cfg.rb:91:17:91:20 | next | cfg.rb:90:1:93:3 | exit { ... } (normal) | continue |
| cfg.rb:92:3:92:8 | call to puts | cfg.rb:90:1:93:3 | exit { ... } (normal) | | | cfg.rb:92:3:92:8 | call to puts | cfg.rb:90:1:93:3 | exit { ... } (normal) | |
| cfg.rb:92:3:92:8 | self | cfg.rb:92:8:92:8 | x | | | cfg.rb:92:3:92:8 | self | cfg.rb:92:8:92:8 | x | |
| cfg.rb:92:8:92:8 | x | cfg.rb:92:3:92:8 | call to puts | | | cfg.rb:92:8:92:8 | x | cfg.rb:92:3:92:8 | call to puts | |
@@ -1024,7 +1024,7 @@
| cfg.rb:134:1:134:23 | EmptyModule | cfg.rb:136:1:136:1 | 1 | | | cfg.rb:134:1:134:23 | EmptyModule | cfg.rb:136:1:136:1 | 1 | |
| cfg.rb:136:1:136:1 | 1 | cfg.rb:136:3:136:3 | 0 | | | cfg.rb:136:1:136:1 | 1 | cfg.rb:136:3:136:3 | 0 | |
| cfg.rb:136:1:136:3 | ... / ... | cfg.rb:136:1:136:29 | ... rescue ... | | | cfg.rb:136:1:136:3 | ... / ... | cfg.rb:136:1:136:29 | ... rescue ... | |
| cfg.rb:136:1:136:3 | ... / ... | cfg.rb:136:12:136:29 | self | raise | | cfg.rb:136:1:136:3 | ... / ... | cfg.rb:136:12:136:29 | self | exception |
| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:138:17:138:23 | __synth__2 | | | cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:138:17:138:23 | __synth__2 | |
| cfg.rb:136:3:136:3 | 0 | cfg.rb:136:1:136:3 | ... / ... | | | cfg.rb:136:3:136:3 | 0 | cfg.rb:136:1:136:3 | ... / ... | |
| cfg.rb:136:12:136:29 | call to puts | cfg.rb:136:1:136:29 | ... rescue ... | | | cfg.rb:136:12:136:29 | call to puts | cfg.rb:136:1:136:29 | ... rescue ... | |
@@ -1828,7 +1828,7 @@
| loops.rb:14:11:14:16 | ... > ... | loops.rb:15:7:15:10 | next | true | | loops.rb:14:11:14:16 | ... > ... | loops.rb:15:7:15:10 | next | true |
| loops.rb:14:11:14:16 | ... > ... | loops.rb:16:11:16:11 | x | false | | loops.rb:14:11:14:16 | ... > ... | loops.rb:16:11:16:11 | x | false |
| loops.rb:14:15:14:16 | 50 | loops.rb:14:11:14:16 | ... > ... | | | loops.rb:14:15:14:16 | 50 | loops.rb:14:11:14:16 | ... > ... | |
| loops.rb:15:7:15:10 | next | loops.rb:9:9:9:9 | x | next | | loops.rb:15:7:15:10 | next | loops.rb:9:9:9:9 | x | continue |
| loops.rb:16:5:17:10 | elsif ... | loops.rb:14:5:17:10 | elsif ... | | | loops.rb:16:5:17:10 | elsif ... | loops.rb:14:5:17:10 | elsif ... | |
| loops.rb:16:11:16:11 | x | loops.rb:16:15:16:16 | 10 | | | loops.rb:16:11:16:11 | x | loops.rb:16:15:16:16 | 10 | |
| loops.rb:16:11:16:16 | ... > ... | loops.rb:16:5:17:10 | elsif ... | false | | loops.rb:16:11:16:16 | ... > ... | loops.rb:16:5:17:10 | elsif ... | false |
@@ -1886,7 +1886,7 @@
| raise.rb:8:6:8:10 | ... > ... | raise.rb:8:3:10:5 | if ... | false | | raise.rb:8:6:8:10 | ... > ... | raise.rb:8:3:10:5 | if ... | false |
| raise.rb:8:6:8:10 | ... > ... | raise.rb:9:5:9:17 | self | true | | raise.rb:8:6:8:10 | ... > ... | raise.rb:9:5:9:17 | self | true |
| raise.rb:8:10:8:10 | 2 | raise.rb:8:6:8:10 | ... > ... | | | raise.rb:8:10:8:10 | 2 | raise.rb:8:6:8:10 | ... > ... | |
| raise.rb:9:5:9:17 | call to raise | raise.rb:7:1:12:3 | exit m1 (abnormal) | raise | | raise.rb:9:5:9:17 | call to raise | raise.rb:7:1:12:3 | exit m1 (abnormal) | exception |
| raise.rb:9:5:9:17 | self | raise.rb:9:12:9:16 | x > 2 | | | raise.rb:9:5:9:17 | self | raise.rb:9:12:9:16 | x > 2 | |
| raise.rb:9:11:9:17 | "x > 2" | raise.rb:9:5:9:17 | call to raise | | | raise.rb:9:11:9:17 | "x > 2" | raise.rb:9:5:9:17 | call to raise | |
| raise.rb:9:12:9:16 | x > 2 | raise.rb:9:11:9:17 | "x > 2" | | | raise.rb:9:12:9:16 | x > 2 | raise.rb:9:11:9:17 | "x > 2" | |
@@ -1902,11 +1902,11 @@
| raise.rb:16:5:18:7 | if ... | raise.rb:22:3:22:15 | self | | | raise.rb:16:5:18:7 | if ... | raise.rb:22:3:22:15 | self | |
| raise.rb:16:8:16:8 | b | raise.rb:16:5:18:7 | if ... | false | | raise.rb:16:8:16:8 | b | raise.rb:16:5:18:7 | if ... | false |
| raise.rb:16:8:16:8 | b | raise.rb:17:7:17:22 | self | true | | raise.rb:16:8:16:8 | b | raise.rb:17:7:17:22 | self | true |
| raise.rb:17:7:17:22 | call to raise | raise.rb:19:10:19:19 | ExceptionA | raise | | raise.rb:17:7:17:22 | call to raise | raise.rb:19:10:19:19 | ExceptionA | exception |
| raise.rb:17:7:17:22 | self | raise.rb:17:13:17:22 | ExceptionA | | | raise.rb:17:7:17:22 | self | raise.rb:17:13:17:22 | ExceptionA | |
| raise.rb:17:13:17:22 | ExceptionA | raise.rb:17:7:17:22 | call to raise | | | raise.rb:17:13:17:22 | ExceptionA | raise.rb:17:7:17:22 | call to raise | |
| raise.rb:19:3:20:18 | rescue ... | raise.rb:22:3:22:15 | self | | | raise.rb:19:3:20:18 | rescue ... | raise.rb:22:3:22:15 | self | |
| raise.rb:19:10:19:19 | ExceptionA | raise.rb:14:1:23:3 | exit m2 (abnormal) | raise | | raise.rb:19:10:19:19 | ExceptionA | raise.rb:14:1:23:3 | exit m2 (abnormal) | exception |
| raise.rb:19:10:19:19 | ExceptionA | raise.rb:20:5:20:18 | self | match | | raise.rb:19:10:19:19 | ExceptionA | raise.rb:20:5:20:18 | self | match |
| raise.rb:19:20:20:18 | then ... | raise.rb:19:3:20:18 | rescue ... | | | raise.rb:19:20:20:18 | then ... | raise.rb:19:3:20:18 | rescue ... | |
| raise.rb:20:5:20:18 | call to puts | raise.rb:19:20:20:18 | then ... | | | raise.rb:20:5:20:18 | call to puts | raise.rb:19:20:20:18 | then ... | |
@@ -1924,7 +1924,7 @@
| raise.rb:27:5:29:7 | if ... | raise.rb:33:3:33:15 | self | | | raise.rb:27:5:29:7 | if ... | raise.rb:33:3:33:15 | self | |
| raise.rb:27:8:27:8 | b | raise.rb:27:5:29:7 | if ... | false | | raise.rb:27:8:27:8 | b | raise.rb:27:5:29:7 | if ... | false |
| raise.rb:27:8:27:8 | b | raise.rb:28:7:28:22 | self | true | | raise.rb:27:8:27:8 | b | raise.rb:28:7:28:22 | self | true |
| raise.rb:28:7:28:22 | call to raise | raise.rb:31:5:31:18 | self | raise | | raise.rb:28:7:28:22 | call to raise | raise.rb:31:5:31:18 | self | exception |
| raise.rb:28:7:28:22 | self | raise.rb:28:13:28:22 | ExceptionA | | | raise.rb:28:7:28:22 | self | raise.rb:28:13:28:22 | ExceptionA | |
| raise.rb:28:13:28:22 | ExceptionA | raise.rb:28:7:28:22 | call to raise | | | raise.rb:28:13:28:22 | ExceptionA | raise.rb:28:7:28:22 | call to raise | |
| raise.rb:30:3:31:18 | rescue ... | raise.rb:33:3:33:15 | self | | | raise.rb:30:3:31:18 | rescue ... | raise.rb:33:3:33:15 | self | |
@@ -1944,7 +1944,7 @@
| raise.rb:38:5:40:7 | if ... | raise.rb:44:3:44:15 | self | | | raise.rb:38:5:40:7 | if ... | raise.rb:44:3:44:15 | self | |
| raise.rb:38:8:38:8 | b | raise.rb:38:5:40:7 | if ... | false | | raise.rb:38:8:38:8 | b | raise.rb:38:5:40:7 | if ... | false |
| raise.rb:38:8:38:8 | b | raise.rb:39:7:39:22 | self | true | | raise.rb:38:8:38:8 | b | raise.rb:39:7:39:22 | self | true |
| raise.rb:39:7:39:22 | call to raise | raise.rb:41:13:41:13 | e | raise | | raise.rb:39:7:39:22 | call to raise | raise.rb:41:13:41:13 | e | exception |
| raise.rb:39:7:39:22 | self | raise.rb:39:13:39:22 | ExceptionA | | | raise.rb:39:7:39:22 | self | raise.rb:39:13:39:22 | ExceptionA | |
| raise.rb:39:13:39:22 | ExceptionA | raise.rb:39:7:39:22 | call to raise | | | raise.rb:39:13:39:22 | ExceptionA | raise.rb:39:7:39:22 | call to raise | |
| raise.rb:41:3:42:22 | rescue ... | raise.rb:44:3:44:15 | self | | | raise.rb:41:3:42:22 | rescue ... | raise.rb:44:3:44:15 | self | |
@@ -1965,7 +1965,7 @@
| raise.rb:49:5:51:7 | if ... | raise.rb:54:3:54:15 | self | | | raise.rb:49:5:51:7 | if ... | raise.rb:54:3:54:15 | self | |
| raise.rb:49:8:49:8 | b | raise.rb:49:5:51:7 | if ... | false | | raise.rb:49:8:49:8 | b | raise.rb:49:5:51:7 | if ... | false |
| raise.rb:49:8:49:8 | b | raise.rb:50:7:50:22 | self | true | | raise.rb:49:8:49:8 | b | raise.rb:50:7:50:22 | self | true |
| raise.rb:50:7:50:22 | call to raise | raise.rb:52:13:52:13 | e | raise | | raise.rb:50:7:50:22 | call to raise | raise.rb:52:13:52:13 | e | exception |
| raise.rb:50:7:50:22 | self | raise.rb:50:13:50:22 | ExceptionA | | | raise.rb:50:7:50:22 | self | raise.rb:50:13:50:22 | ExceptionA | |
| raise.rb:50:13:50:22 | ExceptionA | raise.rb:50:7:50:22 | call to raise | | | raise.rb:50:13:50:22 | ExceptionA | raise.rb:50:7:50:22 | call to raise | |
| raise.rb:52:3:52:13 | rescue ... | raise.rb:54:3:54:15 | self | | | raise.rb:52:3:52:13 | rescue ... | raise.rb:54:3:54:15 | self | |
@@ -1982,13 +1982,13 @@
| raise.rb:59:5:61:7 | if ... | raise.rb:65:3:65:15 | self | | | raise.rb:59:5:61:7 | if ... | raise.rb:65:3:65:15 | self | |
| raise.rb:59:8:59:8 | b | raise.rb:59:5:61:7 | if ... | false | | raise.rb:59:8:59:8 | b | raise.rb:59:5:61:7 | if ... | false |
| raise.rb:59:8:59:8 | b | raise.rb:60:7:60:22 | self | true | | raise.rb:59:8:59:8 | b | raise.rb:60:7:60:22 | self | true |
| raise.rb:60:7:60:22 | call to raise | raise.rb:62:10:62:19 | ExceptionA | raise | | raise.rb:60:7:60:22 | call to raise | raise.rb:62:10:62:19 | ExceptionA | exception |
| raise.rb:60:7:60:22 | self | raise.rb:60:13:60:22 | ExceptionA | | | raise.rb:60:7:60:22 | self | raise.rb:60:13:60:22 | ExceptionA | |
| raise.rb:60:13:60:22 | ExceptionA | raise.rb:60:7:60:22 | call to raise | | | raise.rb:60:13:60:22 | ExceptionA | raise.rb:60:7:60:22 | call to raise | |
| raise.rb:62:3:63:22 | rescue ... | raise.rb:65:3:65:15 | self | | | raise.rb:62:3:63:22 | rescue ... | raise.rb:65:3:65:15 | self | |
| raise.rb:62:10:62:19 | ExceptionA | raise.rb:62:22:62:31 | ExceptionB | no-match | | raise.rb:62:10:62:19 | ExceptionA | raise.rb:62:22:62:31 | ExceptionB | no-match |
| raise.rb:62:10:62:19 | ExceptionA | raise.rb:62:36:62:36 | e | match | | raise.rb:62:10:62:19 | ExceptionA | raise.rb:62:36:62:36 | e | match |
| raise.rb:62:22:62:31 | ExceptionB | raise.rb:57:1:66:3 | exit m6 (abnormal) | raise | | raise.rb:62:22:62:31 | ExceptionB | raise.rb:57:1:66:3 | exit m6 (abnormal) | exception |
| raise.rb:62:22:62:31 | ExceptionB | raise.rb:62:36:62:36 | e | match | | raise.rb:62:22:62:31 | ExceptionB | raise.rb:62:36:62:36 | e | match |
| raise.rb:62:36:62:36 | e | raise.rb:63:5:63:22 | self | | | raise.rb:62:36:62:36 | e | raise.rb:63:5:63:22 | self | |
| raise.rb:62:37:63:22 | then ... | raise.rb:62:3:63:22 | rescue ... | | | raise.rb:62:37:63:22 | then ... | raise.rb:62:3:63:22 | rescue ... | |
@@ -2009,9 +2009,9 @@
| raise.rb:69:6:69:6 | x | raise.rb:69:10:69:10 | 2 | | | raise.rb:69:6:69:6 | x | raise.rb:69:10:69:10 | 2 | |
| raise.rb:69:6:69:10 | ... > ... | raise.rb:70:5:70:17 | self | true | | raise.rb:69:6:69:10 | ... > ... | raise.rb:70:5:70:17 | self | true |
| raise.rb:69:6:69:10 | ... > ... | raise.rb:71:9:71:9 | x | false | | raise.rb:69:6:69:10 | ... > ... | raise.rb:71:9:71:9 | x | false |
| raise.rb:69:6:69:10 | ... > ... | raise.rb:76:3:76:15 | [ensure: raise] self | raise | | raise.rb:69:6:69:10 | ... > ... | raise.rb:76:3:76:15 | [ensure: exception] self | exception |
| raise.rb:69:10:69:10 | 2 | raise.rb:69:6:69:10 | ... > ... | | | raise.rb:69:10:69:10 | 2 | raise.rb:69:6:69:10 | ... > ... | |
| raise.rb:70:5:70:17 | call to raise | raise.rb:76:3:76:15 | [ensure: raise] self | raise | | raise.rb:70:5:70:17 | call to raise | raise.rb:76:3:76:15 | [ensure: exception] self | exception |
| raise.rb:70:5:70:17 | self | raise.rb:70:12:70:16 | x > 2 | | | raise.rb:70:5:70:17 | self | raise.rb:70:12:70:16 | x > 2 | |
| raise.rb:70:11:70:17 | "x > 2" | raise.rb:70:5:70:17 | call to raise | | | raise.rb:70:11:70:17 | "x > 2" | raise.rb:70:5:70:17 | call to raise | |
| raise.rb:70:12:70:16 | x > 2 | raise.rb:70:11:70:17 | "x > 2" | | | raise.rb:70:12:70:16 | x > 2 | raise.rb:70:11:70:17 | "x > 2" | |
@@ -2019,29 +2019,29 @@
| raise.rb:71:9:71:9 | x | raise.rb:71:13:71:13 | 0 | | | raise.rb:71:9:71:9 | x | raise.rb:71:13:71:13 | 0 | |
| raise.rb:71:9:71:13 | ... < ... | raise.rb:71:3:72:18 | elsif ... | false | | raise.rb:71:9:71:13 | ... < ... | raise.rb:71:3:72:18 | elsif ... | false |
| raise.rb:71:9:71:13 | ... < ... | raise.rb:72:13:72:17 | x < 0 | true | | raise.rb:71:9:71:13 | ... < ... | raise.rb:72:13:72:17 | x < 0 | true |
| raise.rb:71:9:71:13 | ... < ... | raise.rb:76:3:76:15 | [ensure: raise] self | raise | | raise.rb:71:9:71:13 | ... < ... | raise.rb:76:3:76:15 | [ensure: exception] self | exception |
| raise.rb:71:13:71:13 | 0 | raise.rb:71:9:71:13 | ... < ... | | | raise.rb:71:13:71:13 | 0 | raise.rb:71:9:71:13 | ... < ... | |
| raise.rb:72:5:72:18 | return | raise.rb:76:3:76:15 | [ensure: return] self | return | | raise.rb:72:5:72:18 | return | raise.rb:76:3:76:15 | [ensure: return] self | return |
| raise.rb:72:12:72:18 | "x < 0" | raise.rb:72:5:72:18 | return | | | raise.rb:72:12:72:18 | "x < 0" | raise.rb:72:5:72:18 | return | |
| raise.rb:72:13:72:17 | x < 0 | raise.rb:72:12:72:18 | "x < 0" | | | raise.rb:72:13:72:17 | x < 0 | raise.rb:72:12:72:18 | "x < 0" | |
| raise.rb:74:3:74:20 | call to puts | raise.rb:76:3:76:15 | [ensure: raise] self | raise | | raise.rb:74:3:74:20 | call to puts | raise.rb:76:3:76:15 | [ensure: exception] self | exception |
| raise.rb:74:3:74:20 | call to puts | raise.rb:76:3:76:15 | self | | | raise.rb:74:3:74:20 | call to puts | raise.rb:76:3:76:15 | self | |
| raise.rb:74:3:74:20 | self | raise.rb:74:9:74:19 | 0 <= x <= 2 | | | raise.rb:74:3:74:20 | self | raise.rb:74:9:74:19 | 0 <= x <= 2 | |
| raise.rb:74:8:74:20 | "0 <= x <= 2" | raise.rb:74:3:74:20 | call to puts | | | raise.rb:74:8:74:20 | "0 <= x <= 2" | raise.rb:74:3:74:20 | call to puts | |
| raise.rb:74:9:74:19 | 0 <= x <= 2 | raise.rb:74:8:74:20 | "0 <= x <= 2" | | | raise.rb:74:9:74:19 | 0 <= x <= 2 | raise.rb:74:8:74:20 | "0 <= x <= 2" | |
| raise.rb:75:1:76:15 | [ensure: raise] ensure ... | raise.rb:68:1:77:3 | exit m7 (abnormal) | raise | | raise.rb:75:1:76:15 | [ensure: exception] ensure ... | raise.rb:68:1:77:3 | exit m7 (abnormal) | exception |
| raise.rb:75:1:76:15 | [ensure: return] ensure ... | raise.rb:68:1:77:3 | exit m7 (normal) | return | | raise.rb:75:1:76:15 | [ensure: return] ensure ... | raise.rb:68:1:77:3 | exit m7 (normal) | return |
| raise.rb:75:1:76:15 | ensure ... | raise.rb:68:1:77:3 | exit m7 (normal) | | | raise.rb:75:1:76:15 | ensure ... | raise.rb:68:1:77:3 | exit m7 (normal) | |
| raise.rb:76:3:76:15 | [ensure: raise] call to puts | raise.rb:75:1:76:15 | [ensure: raise] ensure ... | | | raise.rb:76:3:76:15 | [ensure: exception] call to puts | raise.rb:75:1:76:15 | [ensure: exception] ensure ... | |
| raise.rb:76:3:76:15 | [ensure: raise] self | raise.rb:76:9:76:14 | [ensure: raise] ensure | | | raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:76:9:76:14 | [ensure: exception] ensure | |
| raise.rb:76:3:76:15 | [ensure: return] call to puts | raise.rb:75:1:76:15 | [ensure: return] ensure ... | | | raise.rb:76:3:76:15 | [ensure: return] call to puts | raise.rb:75:1:76:15 | [ensure: return] ensure ... | |
| raise.rb:76:3:76:15 | [ensure: return] self | raise.rb:76:9:76:14 | [ensure: return] ensure | | | raise.rb:76:3:76:15 | [ensure: return] self | raise.rb:76:9:76:14 | [ensure: return] ensure | |
| raise.rb:76:3:76:15 | call to puts | raise.rb:75:1:76:15 | ensure ... | | | raise.rb:76:3:76:15 | call to puts | raise.rb:75:1:76:15 | ensure ... | |
| raise.rb:76:3:76:15 | self | raise.rb:76:9:76:14 | ensure | | | raise.rb:76:3:76:15 | self | raise.rb:76:9:76:14 | ensure | |
| raise.rb:76:8:76:15 | "ensure" | raise.rb:76:3:76:15 | call to puts | | | raise.rb:76:8:76:15 | "ensure" | raise.rb:76:3:76:15 | call to puts | |
| raise.rb:76:8:76:15 | [ensure: raise] "ensure" | raise.rb:76:3:76:15 | [ensure: raise] call to puts | | | raise.rb:76:8:76:15 | [ensure: exception] "ensure" | raise.rb:76:3:76:15 | [ensure: exception] call to puts | |
| raise.rb:76:8:76:15 | [ensure: return] "ensure" | raise.rb:76:3:76:15 | [ensure: return] call to puts | | | raise.rb:76:8:76:15 | [ensure: return] "ensure" | raise.rb:76:3:76:15 | [ensure: return] call to puts | |
| raise.rb:76:9:76:14 | [ensure: raise] ensure | raise.rb:76:8:76:15 | [ensure: raise] "ensure" | | | raise.rb:76:9:76:14 | [ensure: exception] ensure | raise.rb:76:8:76:15 | [ensure: exception] "ensure" | |
| raise.rb:76:9:76:14 | [ensure: return] ensure | raise.rb:76:8:76:15 | [ensure: return] "ensure" | | | raise.rb:76:9:76:14 | [ensure: return] ensure | raise.rb:76:8:76:15 | [ensure: return] "ensure" | |
| raise.rb:76:9:76:14 | ensure | raise.rb:76:8:76:15 | "ensure" | | | raise.rb:76:9:76:14 | ensure | raise.rb:76:8:76:15 | "ensure" | |
| raise.rb:79:1:92:3 | enter m8 | raise.rb:79:8:79:8 | x | | | raise.rb:79:1:92:3 | enter m8 | raise.rb:79:8:79:8 | x | |
@@ -2057,9 +2057,9 @@
| raise.rb:82:8:82:8 | x | raise.rb:82:12:82:12 | 2 | | | raise.rb:82:8:82:8 | x | raise.rb:82:12:82:12 | 2 | |
| raise.rb:82:8:82:12 | ... > ... | raise.rb:83:7:83:19 | self | true | | raise.rb:82:8:82:12 | ... > ... | raise.rb:83:7:83:19 | self | true |
| raise.rb:82:8:82:12 | ... > ... | raise.rb:84:11:84:11 | x | false | | raise.rb:82:8:82:12 | ... > ... | raise.rb:84:11:84:11 | x | false |
| raise.rb:82:8:82:12 | ... > ... | raise.rb:89:5:89:17 | [ensure: raise] self | raise | | raise.rb:82:8:82:12 | ... > ... | raise.rb:89:5:89:17 | [ensure: exception] self | exception |
| raise.rb:82:12:82:12 | 2 | raise.rb:82:8:82:12 | ... > ... | | | raise.rb:82:12:82:12 | 2 | raise.rb:82:8:82:12 | ... > ... | |
| raise.rb:83:7:83:19 | call to raise | raise.rb:89:5:89:17 | [ensure: raise] self | raise | | raise.rb:83:7:83:19 | call to raise | raise.rb:89:5:89:17 | [ensure: exception] self | exception |
| raise.rb:83:7:83:19 | self | raise.rb:83:14:83:18 | x > 2 | | | raise.rb:83:7:83:19 | self | raise.rb:83:14:83:18 | x > 2 | |
| raise.rb:83:13:83:19 | "x > 2" | raise.rb:83:7:83:19 | call to raise | | | raise.rb:83:13:83:19 | "x > 2" | raise.rb:83:7:83:19 | call to raise | |
| raise.rb:83:14:83:18 | x > 2 | raise.rb:83:13:83:19 | "x > 2" | | | raise.rb:83:14:83:18 | x > 2 | raise.rb:83:13:83:19 | "x > 2" | |
@@ -2067,29 +2067,29 @@
| raise.rb:84:11:84:11 | x | raise.rb:84:15:84:15 | 0 | | | raise.rb:84:11:84:11 | x | raise.rb:84:15:84:15 | 0 | |
| raise.rb:84:11:84:15 | ... < ... | raise.rb:84:5:85:20 | elsif ... | false | | raise.rb:84:11:84:15 | ... < ... | raise.rb:84:5:85:20 | elsif ... | false |
| raise.rb:84:11:84:15 | ... < ... | raise.rb:85:15:85:19 | x < 0 | true | | raise.rb:84:11:84:15 | ... < ... | raise.rb:85:15:85:19 | x < 0 | true |
| raise.rb:84:11:84:15 | ... < ... | raise.rb:89:5:89:17 | [ensure: raise] self | raise | | raise.rb:84:11:84:15 | ... < ... | raise.rb:89:5:89:17 | [ensure: exception] self | exception |
| raise.rb:84:15:84:15 | 0 | raise.rb:84:11:84:15 | ... < ... | | | raise.rb:84:15:84:15 | 0 | raise.rb:84:11:84:15 | ... < ... | |
| raise.rb:85:7:85:20 | return | raise.rb:89:5:89:17 | [ensure: return] self | return | | raise.rb:85:7:85:20 | return | raise.rb:89:5:89:17 | [ensure: return] self | return |
| raise.rb:85:14:85:20 | "x < 0" | raise.rb:85:7:85:20 | return | | | raise.rb:85:14:85:20 | "x < 0" | raise.rb:85:7:85:20 | return | |
| raise.rb:85:15:85:19 | x < 0 | raise.rb:85:14:85:20 | "x < 0" | | | raise.rb:85:15:85:19 | x < 0 | raise.rb:85:14:85:20 | "x < 0" | |
| raise.rb:87:5:87:22 | call to puts | raise.rb:89:5:89:17 | [ensure: raise] self | raise | | raise.rb:87:5:87:22 | call to puts | raise.rb:89:5:89:17 | [ensure: exception] self | exception |
| raise.rb:87:5:87:22 | call to puts | raise.rb:89:5:89:17 | self | | | raise.rb:87:5:87:22 | call to puts | raise.rb:89:5:89:17 | self | |
| raise.rb:87:5:87:22 | self | raise.rb:87:11:87:21 | 0 <= x <= 2 | | | raise.rb:87:5:87:22 | self | raise.rb:87:11:87:21 | 0 <= x <= 2 | |
| raise.rb:87:10:87:22 | "0 <= x <= 2" | raise.rb:87:5:87:22 | call to puts | | | raise.rb:87:10:87:22 | "0 <= x <= 2" | raise.rb:87:5:87:22 | call to puts | |
| raise.rb:87:11:87:21 | 0 <= x <= 2 | raise.rb:87:10:87:22 | "0 <= x <= 2" | | | raise.rb:87:11:87:21 | 0 <= x <= 2 | raise.rb:87:10:87:22 | "0 <= x <= 2" | |
| raise.rb:88:3:89:17 | [ensure: raise] ensure ... | raise.rb:79:1:92:3 | exit m8 (abnormal) | raise | | raise.rb:88:3:89:17 | [ensure: exception] ensure ... | raise.rb:79:1:92:3 | exit m8 (abnormal) | exception |
| raise.rb:88:3:89:17 | [ensure: return] ensure ... | raise.rb:79:1:92:3 | exit m8 (normal) | return | | raise.rb:88:3:89:17 | [ensure: return] ensure ... | raise.rb:79:1:92:3 | exit m8 (normal) | return |
| raise.rb:88:3:89:17 | ensure ... | raise.rb:91:3:91:15 | self | | | raise.rb:88:3:89:17 | ensure ... | raise.rb:91:3:91:15 | self | |
| raise.rb:89:5:89:17 | [ensure: raise] call to puts | raise.rb:88:3:89:17 | [ensure: raise] ensure ... | | | raise.rb:89:5:89:17 | [ensure: exception] call to puts | raise.rb:88:3:89:17 | [ensure: exception] ensure ... | |
| raise.rb:89:5:89:17 | [ensure: raise] self | raise.rb:89:11:89:16 | [ensure: raise] ensure | | | raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:89:11:89:16 | [ensure: exception] ensure | |
| raise.rb:89:5:89:17 | [ensure: return] call to puts | raise.rb:88:3:89:17 | [ensure: return] ensure ... | | | raise.rb:89:5:89:17 | [ensure: return] call to puts | raise.rb:88:3:89:17 | [ensure: return] ensure ... | |
| raise.rb:89:5:89:17 | [ensure: return] self | raise.rb:89:11:89:16 | [ensure: return] ensure | | | raise.rb:89:5:89:17 | [ensure: return] self | raise.rb:89:11:89:16 | [ensure: return] ensure | |
| raise.rb:89:5:89:17 | call to puts | raise.rb:88:3:89:17 | ensure ... | | | raise.rb:89:5:89:17 | call to puts | raise.rb:88:3:89:17 | ensure ... | |
| raise.rb:89:5:89:17 | self | raise.rb:89:11:89:16 | ensure | | | raise.rb:89:5:89:17 | self | raise.rb:89:11:89:16 | ensure | |
| raise.rb:89:10:89:17 | "ensure" | raise.rb:89:5:89:17 | call to puts | | | raise.rb:89:10:89:17 | "ensure" | raise.rb:89:5:89:17 | call to puts | |
| raise.rb:89:10:89:17 | [ensure: raise] "ensure" | raise.rb:89:5:89:17 | [ensure: raise] call to puts | | | raise.rb:89:10:89:17 | [ensure: exception] "ensure" | raise.rb:89:5:89:17 | [ensure: exception] call to puts | |
| raise.rb:89:10:89:17 | [ensure: return] "ensure" | raise.rb:89:5:89:17 | [ensure: return] call to puts | | | raise.rb:89:10:89:17 | [ensure: return] "ensure" | raise.rb:89:5:89:17 | [ensure: return] call to puts | |
| raise.rb:89:11:89:16 | [ensure: raise] ensure | raise.rb:89:10:89:17 | [ensure: raise] "ensure" | | | raise.rb:89:11:89:16 | [ensure: exception] ensure | raise.rb:89:10:89:17 | [ensure: exception] "ensure" | |
| raise.rb:89:11:89:16 | [ensure: return] ensure | raise.rb:89:10:89:17 | [ensure: return] "ensure" | | | raise.rb:89:11:89:16 | [ensure: return] ensure | raise.rb:89:10:89:17 | [ensure: return] "ensure" | |
| raise.rb:89:11:89:16 | ensure | raise.rb:89:10:89:17 | "ensure" | | | raise.rb:89:11:89:16 | ensure | raise.rb:89:10:89:17 | "ensure" | |
| raise.rb:91:3:91:15 | call to puts | raise.rb:79:1:92:3 | exit m8 (normal) | | | raise.rb:91:3:91:15 | call to puts | raise.rb:79:1:92:3 | exit m8 (normal) | |
@@ -2104,7 +2104,7 @@
| raise.rb:94:11:94:12 | b1 | raise.rb:94:15:94:16 | b2 | | | raise.rb:94:11:94:12 | b1 | raise.rb:94:15:94:16 | b2 | |
| raise.rb:94:15:94:16 | b2 | raise.rb:95:3:95:17 | self | | | raise.rb:94:15:94:16 | b2 | raise.rb:95:3:95:17 | self | |
| raise.rb:95:3:95:17 | call to puts | raise.rb:97:8:97:8 | x | | | raise.rb:95:3:95:17 | call to puts | raise.rb:97:8:97:8 | x | |
| raise.rb:95:3:95:17 | call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | | raise.rb:95:3:95:17 | call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
| raise.rb:95:3:95:17 | self | raise.rb:95:9:95:16 | Begin m9 | | | raise.rb:95:3:95:17 | self | raise.rb:95:9:95:16 | Begin m9 | |
| raise.rb:95:8:95:17 | "Begin m9" | raise.rb:95:3:95:17 | call to puts | | | raise.rb:95:8:95:17 | "Begin m9" | raise.rb:95:3:95:17 | call to puts | |
| raise.rb:95:9:95:16 | Begin m9 | raise.rb:95:8:95:17 | "Begin m9" | | | raise.rb:95:9:95:16 | Begin m9 | raise.rb:95:8:95:17 | "Begin m9" | |
@@ -2112,9 +2112,9 @@
| raise.rb:97:8:97:8 | x | raise.rb:97:12:97:12 | 2 | | | raise.rb:97:8:97:8 | x | raise.rb:97:12:97:12 | 2 | |
| raise.rb:97:8:97:12 | ... > ... | raise.rb:98:7:98:19 | self | true | | raise.rb:97:8:97:12 | ... > ... | raise.rb:98:7:98:19 | self | true |
| raise.rb:97:8:97:12 | ... > ... | raise.rb:99:11:99:11 | x | false | | raise.rb:97:8:97:12 | ... > ... | raise.rb:99:11:99:11 | x | false |
| raise.rb:97:8:97:12 | ... > ... | raise.rb:104:5:104:23 | [ensure: raise] self | raise | | raise.rb:97:8:97:12 | ... > ... | raise.rb:104:5:104:23 | [ensure: exception] self | exception |
| raise.rb:97:12:97:12 | 2 | raise.rb:97:8:97:12 | ... > ... | | | raise.rb:97:12:97:12 | 2 | raise.rb:97:8:97:12 | ... > ... | |
| raise.rb:98:7:98:19 | call to raise | raise.rb:104:5:104:23 | [ensure: raise] self | raise | | raise.rb:98:7:98:19 | call to raise | raise.rb:104:5:104:23 | [ensure: exception] self | exception |
| raise.rb:98:7:98:19 | self | raise.rb:98:14:98:18 | x > 2 | | | raise.rb:98:7:98:19 | self | raise.rb:98:14:98:18 | x > 2 | |
| raise.rb:98:13:98:19 | "x > 2" | raise.rb:98:7:98:19 | call to raise | | | raise.rb:98:13:98:19 | "x > 2" | raise.rb:98:7:98:19 | call to raise | |
| raise.rb:98:14:98:18 | x > 2 | raise.rb:98:13:98:19 | "x > 2" | | | raise.rb:98:14:98:18 | x > 2 | raise.rb:98:13:98:19 | "x > 2" | |
@@ -2122,130 +2122,130 @@
| raise.rb:99:11:99:11 | x | raise.rb:99:15:99:15 | 0 | | | raise.rb:99:11:99:11 | x | raise.rb:99:15:99:15 | 0 | |
| raise.rb:99:11:99:15 | ... < ... | raise.rb:99:5:100:20 | elsif ... | false | | raise.rb:99:11:99:15 | ... < ... | raise.rb:99:5:100:20 | elsif ... | false |
| raise.rb:99:11:99:15 | ... < ... | raise.rb:100:15:100:19 | x < 0 | true | | raise.rb:99:11:99:15 | ... < ... | raise.rb:100:15:100:19 | x < 0 | true |
| raise.rb:99:11:99:15 | ... < ... | raise.rb:104:5:104:23 | [ensure: raise] self | raise | | raise.rb:99:11:99:15 | ... < ... | raise.rb:104:5:104:23 | [ensure: exception] self | exception |
| raise.rb:99:15:99:15 | 0 | raise.rb:99:11:99:15 | ... < ... | | | raise.rb:99:15:99:15 | 0 | raise.rb:99:11:99:15 | ... < ... | |
| raise.rb:100:7:100:20 | return | raise.rb:104:5:104:23 | [ensure: return] self | return | | raise.rb:100:7:100:20 | return | raise.rb:104:5:104:23 | [ensure: return] self | return |
| raise.rb:100:14:100:20 | "x < 0" | raise.rb:100:7:100:20 | return | | | raise.rb:100:14:100:20 | "x < 0" | raise.rb:100:7:100:20 | return | |
| raise.rb:100:15:100:19 | x < 0 | raise.rb:100:14:100:20 | "x < 0" | | | raise.rb:100:15:100:19 | x < 0 | raise.rb:100:14:100:20 | "x < 0" | |
| raise.rb:102:5:102:22 | call to puts | raise.rb:104:5:104:23 | [ensure: raise] self | raise | | raise.rb:102:5:102:22 | call to puts | raise.rb:104:5:104:23 | [ensure: exception] self | exception |
| raise.rb:102:5:102:22 | call to puts | raise.rb:104:5:104:23 | self | | | raise.rb:102:5:102:22 | call to puts | raise.rb:104:5:104:23 | self | |
| raise.rb:102:5:102:22 | self | raise.rb:102:11:102:21 | 0 <= x <= 2 | | | raise.rb:102:5:102:22 | self | raise.rb:102:11:102:21 | 0 <= x <= 2 | |
| raise.rb:102:10:102:22 | "0 <= x <= 2" | raise.rb:102:5:102:22 | call to puts | | | raise.rb:102:10:102:22 | "0 <= x <= 2" | raise.rb:102:5:102:22 | call to puts | |
| raise.rb:102:11:102:21 | 0 <= x <= 2 | raise.rb:102:10:102:22 | "0 <= x <= 2" | | | raise.rb:102:11:102:21 | 0 <= x <= 2 | raise.rb:102:10:102:22 | "0 <= x <= 2" | |
| raise.rb:103:3:111:7 | [ensure: raise] ensure ... | raise.rb:115:3:115:22 | [ensure: raise] self | raise | | raise.rb:103:3:111:7 | [ensure: exception] ensure ... | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
| raise.rb:103:3:111:7 | [ensure: return] ensure ... | raise.rb:115:3:115:22 | [ensure: return] self | return | | raise.rb:103:3:111:7 | [ensure: return] ensure ... | raise.rb:115:3:115:22 | [ensure: return] self | return |
| raise.rb:103:3:111:7 | ensure ... | raise.rb:113:3:113:15 | self | | | raise.rb:103:3:111:7 | ensure ... | raise.rb:113:3:113:15 | self | |
| raise.rb:104:5:104:23 | [ensure: raise] call to puts | raise.rb:106:10:106:11 | [ensure: raise] b1 | | | raise.rb:104:5:104:23 | [ensure: exception] call to puts | raise.rb:106:10:106:11 | [ensure: exception] b1 | |
| raise.rb:104:5:104:23 | [ensure: raise] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | | raise.rb:104:5:104:23 | [ensure: exception] call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:104:11:104:22 | [ensure: raise] outer ensure | | | raise.rb:104:5:104:23 | [ensure: exception] self | raise.rb:104:11:104:22 | [ensure: exception] outer ensure | |
| raise.rb:104:5:104:23 | [ensure: return] call to puts | raise.rb:106:10:106:11 | [ensure: return] b1 | | | raise.rb:104:5:104:23 | [ensure: return] call to puts | raise.rb:106:10:106:11 | [ensure: return] b1 | |
| raise.rb:104:5:104:23 | [ensure: return] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | | raise.rb:104:5:104:23 | [ensure: return] call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
| raise.rb:104:5:104:23 | [ensure: return] self | raise.rb:104:11:104:22 | [ensure: return] outer ensure | | | raise.rb:104:5:104:23 | [ensure: return] self | raise.rb:104:11:104:22 | [ensure: return] outer ensure | |
| raise.rb:104:5:104:23 | call to puts | raise.rb:106:10:106:11 | b1 | | | raise.rb:104:5:104:23 | call to puts | raise.rb:106:10:106:11 | b1 | |
| raise.rb:104:5:104:23 | call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | | raise.rb:104:5:104:23 | call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
| raise.rb:104:5:104:23 | self | raise.rb:104:11:104:22 | outer ensure | | | raise.rb:104:5:104:23 | self | raise.rb:104:11:104:22 | outer ensure | |
| raise.rb:104:10:104:23 | "outer ensure" | raise.rb:104:5:104:23 | call to puts | | | raise.rb:104:10:104:23 | "outer ensure" | raise.rb:104:5:104:23 | call to puts | |
| raise.rb:104:10:104:23 | [ensure: raise] "outer ensure" | raise.rb:104:5:104:23 | [ensure: raise] call to puts | | | raise.rb:104:10:104:23 | [ensure: exception] "outer ensure" | raise.rb:104:5:104:23 | [ensure: exception] call to puts | |
| raise.rb:104:10:104:23 | [ensure: return] "outer ensure" | raise.rb:104:5:104:23 | [ensure: return] call to puts | | | raise.rb:104:10:104:23 | [ensure: return] "outer ensure" | raise.rb:104:5:104:23 | [ensure: return] call to puts | |
| raise.rb:104:11:104:22 | [ensure: raise] outer ensure | raise.rb:104:10:104:23 | [ensure: raise] "outer ensure" | | | raise.rb:104:11:104:22 | [ensure: exception] outer ensure | raise.rb:104:10:104:23 | [ensure: exception] "outer ensure" | |
| raise.rb:104:11:104:22 | [ensure: return] outer ensure | raise.rb:104:10:104:23 | [ensure: return] "outer ensure" | | | raise.rb:104:11:104:22 | [ensure: return] outer ensure | raise.rb:104:10:104:23 | [ensure: return] "outer ensure" | |
| raise.rb:104:11:104:22 | outer ensure | raise.rb:104:10:104:23 | "outer ensure" | | | raise.rb:104:11:104:22 | outer ensure | raise.rb:104:10:104:23 | "outer ensure" | |
| raise.rb:106:7:108:9 | [ensure: raise] if ... | raise.rb:110:7:110:25 | [ensure: raise] self | | | raise.rb:106:7:108:9 | [ensure: exception] if ... | raise.rb:110:7:110:25 | [ensure: exception] self | |
| raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:110:7:110:25 | [ensure: return] self | | | raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:110:7:110:25 | [ensure: return] self | |
| raise.rb:106:7:108:9 | if ... | raise.rb:110:7:110:25 | self | | | raise.rb:106:7:108:9 | if ... | raise.rb:110:7:110:25 | self | |
| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:106:7:108:9 | [ensure: raise] if ... | false | | raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:106:7:108:9 | [ensure: exception] if ... | false |
| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:107:9:107:26 | [ensure: raise] self | true | | raise.rb:106:10:106:11 | [ensure: exception] b1 | raise.rb:107:9:107:26 | [ensure: exception] self | true |
| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:106:7:108:9 | [ensure: return] if ... | false | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:106:7:108:9 | [ensure: return] if ... | false |
| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:107:9:107:26 | [ensure: return] self | true | | raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:107:9:107:26 | [ensure: return] self | true |
| raise.rb:106:10:106:11 | b1 | raise.rb:106:7:108:9 | if ... | false | | raise.rb:106:10:106:11 | b1 | raise.rb:106:7:108:9 | if ... | false |
| raise.rb:106:10:106:11 | b1 | raise.rb:107:9:107:26 | self | true | | raise.rb:106:10:106:11 | b1 | raise.rb:107:9:107:26 | self | true |
| raise.rb:107:9:107:26 | [ensure: raise] call to raise | raise.rb:110:7:110:25 | [ensure: raise, ensure(1): raise] self | raise | | raise.rb:107:9:107:26 | [ensure: exception] call to raise | raise.rb:110:7:110:25 | [ensure: exception, ensure(1): exception] self | exception |
| raise.rb:107:9:107:26 | [ensure: raise] self | raise.rb:107:16:107:25 | [ensure: raise] b1 is true | | | raise.rb:107:9:107:26 | [ensure: exception] self | raise.rb:107:16:107:25 | [ensure: exception] b1 is true | |
| raise.rb:107:9:107:26 | [ensure: return] call to raise | raise.rb:110:7:110:25 | [ensure: return, ensure(1): raise] self | raise | | raise.rb:107:9:107:26 | [ensure: return] call to raise | raise.rb:110:7:110:25 | [ensure: return, ensure(1): exception] self | exception |
| raise.rb:107:9:107:26 | [ensure: return] self | raise.rb:107:16:107:25 | [ensure: return] b1 is true | | | raise.rb:107:9:107:26 | [ensure: return] self | raise.rb:107:16:107:25 | [ensure: return] b1 is true | |
| raise.rb:107:9:107:26 | call to raise | raise.rb:110:7:110:25 | [ensure(1): raise] self | raise | | raise.rb:107:9:107:26 | call to raise | raise.rb:110:7:110:25 | [ensure(1): exception] self | exception |
| raise.rb:107:9:107:26 | self | raise.rb:107:16:107:25 | b1 is true | | | raise.rb:107:9:107:26 | self | raise.rb:107:16:107:25 | b1 is true | |
| raise.rb:107:15:107:26 | "b1 is true" | raise.rb:107:9:107:26 | call to raise | | | raise.rb:107:15:107:26 | "b1 is true" | raise.rb:107:9:107:26 | call to raise | |
| raise.rb:107:15:107:26 | [ensure: raise] "b1 is true" | raise.rb:107:9:107:26 | [ensure: raise] call to raise | | | raise.rb:107:15:107:26 | [ensure: exception] "b1 is true" | raise.rb:107:9:107:26 | [ensure: exception] call to raise | |
| raise.rb:107:15:107:26 | [ensure: return] "b1 is true" | raise.rb:107:9:107:26 | [ensure: return] call to raise | | | raise.rb:107:15:107:26 | [ensure: return] "b1 is true" | raise.rb:107:9:107:26 | [ensure: return] call to raise | |
| raise.rb:107:16:107:25 | [ensure: raise] b1 is true | raise.rb:107:15:107:26 | [ensure: raise] "b1 is true" | | | raise.rb:107:16:107:25 | [ensure: exception] b1 is true | raise.rb:107:15:107:26 | [ensure: exception] "b1 is true" | |
| raise.rb:107:16:107:25 | [ensure: return] b1 is true | raise.rb:107:15:107:26 | [ensure: return] "b1 is true" | | | raise.rb:107:16:107:25 | [ensure: return] b1 is true | raise.rb:107:15:107:26 | [ensure: return] "b1 is true" | |
| raise.rb:107:16:107:25 | b1 is true | raise.rb:107:15:107:26 | "b1 is true" | | | raise.rb:107:16:107:25 | b1 is true | raise.rb:107:15:107:26 | "b1 is true" | |
| raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | raise.rb:115:3:115:22 | [ensure: raise] self | raise | | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
| raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | raise.rb:115:3:115:22 | [ensure: raise] self | raise | | raise.rb:109:5:110:25 | [ensure: exception, ensure(1): exception] ensure ... | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
| raise.rb:109:5:110:25 | [ensure: raise] ensure ... | raise.rb:103:3:111:7 | [ensure: raise] ensure ... | | | raise.rb:109:5:110:25 | [ensure: exception] ensure ... | raise.rb:103:3:111:7 | [ensure: exception] ensure ... | |
| raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | raise.rb:115:3:115:22 | [ensure: raise] self | raise | | raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
| raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:103:3:111:7 | [ensure: return] ensure ... | | | raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:103:3:111:7 | [ensure: return] ensure ... | |
| raise.rb:109:5:110:25 | ensure ... | raise.rb:103:3:111:7 | ensure ... | | | raise.rb:109:5:110:25 | ensure ... | raise.rb:103:3:111:7 | ensure ... | |
| raise.rb:110:7:110:25 | [ensure(1): raise] call to puts | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | | | raise.rb:110:7:110:25 | [ensure(1): exception] call to puts | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | |
| raise.rb:110:7:110:25 | [ensure(1): raise] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | | raise.rb:110:7:110:25 | [ensure(1): exception] call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
| raise.rb:110:7:110:25 | [ensure(1): raise] self | raise.rb:110:13:110:24 | [ensure(1): raise] inner ensure | | | raise.rb:110:7:110:25 | [ensure(1): exception] self | raise.rb:110:13:110:24 | [ensure(1): exception] inner ensure | |
| raise.rb:110:7:110:25 | [ensure: raise, ensure(1): raise] call to puts | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | | | raise.rb:110:7:110:25 | [ensure: exception, ensure(1): exception] call to puts | raise.rb:109:5:110:25 | [ensure: exception, ensure(1): exception] ensure ... | |
| raise.rb:110:7:110:25 | [ensure: raise, ensure(1): raise] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | | raise.rb:110:7:110:25 | [ensure: exception, ensure(1): exception] call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
| raise.rb:110:7:110:25 | [ensure: raise, ensure(1): raise] self | raise.rb:110:13:110:24 | [ensure: raise, ensure(1): raise] inner ensure | | | raise.rb:110:7:110:25 | [ensure: exception, ensure(1): exception] self | raise.rb:110:13:110:24 | [ensure: exception, ensure(1): exception] inner ensure | |
| raise.rb:110:7:110:25 | [ensure: raise] call to puts | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | | | raise.rb:110:7:110:25 | [ensure: exception] call to puts | raise.rb:109:5:110:25 | [ensure: exception] ensure ... | |
| raise.rb:110:7:110:25 | [ensure: raise] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | | raise.rb:110:7:110:25 | [ensure: exception] call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
| raise.rb:110:7:110:25 | [ensure: raise] self | raise.rb:110:13:110:24 | [ensure: raise] inner ensure | | | raise.rb:110:7:110:25 | [ensure: exception] self | raise.rb:110:13:110:24 | [ensure: exception] inner ensure | |
| raise.rb:110:7:110:25 | [ensure: return, ensure(1): raise] call to puts | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | | | raise.rb:110:7:110:25 | [ensure: return, ensure(1): exception] call to puts | raise.rb:109:5:110:25 | [ensure: return, ensure(1): exception] ensure ... | |
| raise.rb:110:7:110:25 | [ensure: return, ensure(1): raise] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | | raise.rb:110:7:110:25 | [ensure: return, ensure(1): exception] call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
| raise.rb:110:7:110:25 | [ensure: return, ensure(1): raise] self | raise.rb:110:13:110:24 | [ensure: return, ensure(1): raise] inner ensure | | | raise.rb:110:7:110:25 | [ensure: return, ensure(1): exception] self | raise.rb:110:13:110:24 | [ensure: return, ensure(1): exception] inner ensure | |
| raise.rb:110:7:110:25 | [ensure: return] call to puts | raise.rb:109:5:110:25 | [ensure: return] ensure ... | | | raise.rb:110:7:110:25 | [ensure: return] call to puts | raise.rb:109:5:110:25 | [ensure: return] ensure ... | |
| raise.rb:110:7:110:25 | [ensure: return] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | | raise.rb:110:7:110:25 | [ensure: return] call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
| raise.rb:110:7:110:25 | [ensure: return] self | raise.rb:110:13:110:24 | [ensure: return] inner ensure | | | raise.rb:110:7:110:25 | [ensure: return] self | raise.rb:110:13:110:24 | [ensure: return] inner ensure | |
| raise.rb:110:7:110:25 | call to puts | raise.rb:109:5:110:25 | ensure ... | | | raise.rb:110:7:110:25 | call to puts | raise.rb:109:5:110:25 | ensure ... | |
| raise.rb:110:7:110:25 | call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | | raise.rb:110:7:110:25 | call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
| raise.rb:110:7:110:25 | self | raise.rb:110:13:110:24 | inner ensure | | | raise.rb:110:7:110:25 | self | raise.rb:110:13:110:24 | inner ensure | |
| raise.rb:110:12:110:25 | "inner ensure" | raise.rb:110:7:110:25 | call to puts | | | raise.rb:110:12:110:25 | "inner ensure" | raise.rb:110:7:110:25 | call to puts | |
| raise.rb:110:12:110:25 | [ensure(1): raise] "inner ensure" | raise.rb:110:7:110:25 | [ensure(1): raise] call to puts | | | raise.rb:110:12:110:25 | [ensure(1): exception] "inner ensure" | raise.rb:110:7:110:25 | [ensure(1): exception] call to puts | |
| raise.rb:110:12:110:25 | [ensure: raise, ensure(1): raise] "inner ensure" | raise.rb:110:7:110:25 | [ensure: raise, ensure(1): raise] call to puts | | | raise.rb:110:12:110:25 | [ensure: exception, ensure(1): exception] "inner ensure" | raise.rb:110:7:110:25 | [ensure: exception, ensure(1): exception] call to puts | |
| raise.rb:110:12:110:25 | [ensure: raise] "inner ensure" | raise.rb:110:7:110:25 | [ensure: raise] call to puts | | | raise.rb:110:12:110:25 | [ensure: exception] "inner ensure" | raise.rb:110:7:110:25 | [ensure: exception] call to puts | |
| raise.rb:110:12:110:25 | [ensure: return, ensure(1): raise] "inner ensure" | raise.rb:110:7:110:25 | [ensure: return, ensure(1): raise] call to puts | | | raise.rb:110:12:110:25 | [ensure: return, ensure(1): exception] "inner ensure" | raise.rb:110:7:110:25 | [ensure: return, ensure(1): exception] call to puts | |
| raise.rb:110:12:110:25 | [ensure: return] "inner ensure" | raise.rb:110:7:110:25 | [ensure: return] call to puts | | | raise.rb:110:12:110:25 | [ensure: return] "inner ensure" | raise.rb:110:7:110:25 | [ensure: return] call to puts | |
| raise.rb:110:13:110:24 | [ensure(1): raise] inner ensure | raise.rb:110:12:110:25 | [ensure(1): raise] "inner ensure" | | | raise.rb:110:13:110:24 | [ensure(1): exception] inner ensure | raise.rb:110:12:110:25 | [ensure(1): exception] "inner ensure" | |
| raise.rb:110:13:110:24 | [ensure: raise, ensure(1): raise] inner ensure | raise.rb:110:12:110:25 | [ensure: raise, ensure(1): raise] "inner ensure" | | | raise.rb:110:13:110:24 | [ensure: exception, ensure(1): exception] inner ensure | raise.rb:110:12:110:25 | [ensure: exception, ensure(1): exception] "inner ensure" | |
| raise.rb:110:13:110:24 | [ensure: raise] inner ensure | raise.rb:110:12:110:25 | [ensure: raise] "inner ensure" | | | raise.rb:110:13:110:24 | [ensure: exception] inner ensure | raise.rb:110:12:110:25 | [ensure: exception] "inner ensure" | |
| raise.rb:110:13:110:24 | [ensure: return, ensure(1): raise] inner ensure | raise.rb:110:12:110:25 | [ensure: return, ensure(1): raise] "inner ensure" | | | raise.rb:110:13:110:24 | [ensure: return, ensure(1): exception] inner ensure | raise.rb:110:12:110:25 | [ensure: return, ensure(1): exception] "inner ensure" | |
| raise.rb:110:13:110:24 | [ensure: return] inner ensure | raise.rb:110:12:110:25 | [ensure: return] "inner ensure" | | | raise.rb:110:13:110:24 | [ensure: return] inner ensure | raise.rb:110:12:110:25 | [ensure: return] "inner ensure" | |
| raise.rb:110:13:110:24 | inner ensure | raise.rb:110:12:110:25 | "inner ensure" | | | raise.rb:110:13:110:24 | inner ensure | raise.rb:110:12:110:25 | "inner ensure" | |
| raise.rb:113:3:113:15 | call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise | | raise.rb:113:3:113:15 | call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
| raise.rb:113:3:113:15 | call to puts | raise.rb:115:3:115:22 | self | | | raise.rb:113:3:113:15 | call to puts | raise.rb:115:3:115:22 | self | |
| raise.rb:113:3:113:15 | self | raise.rb:113:9:113:14 | End m9 | | | raise.rb:113:3:113:15 | self | raise.rb:113:9:113:14 | End m9 | |
| raise.rb:113:8:113:15 | "End m9" | raise.rb:113:3:113:15 | call to puts | | | raise.rb:113:8:113:15 | "End m9" | raise.rb:113:3:113:15 | call to puts | |
| raise.rb:113:9:113:14 | End m9 | raise.rb:113:8:113:15 | "End m9" | | | raise.rb:113:9:113:14 | End m9 | raise.rb:113:8:113:15 | "End m9" | |
| raise.rb:114:1:118:5 | [ensure: raise] ensure ... | raise.rb:94:1:119:3 | exit m9 (abnormal) | raise | | raise.rb:114:1:118:5 | [ensure: exception] ensure ... | raise.rb:94:1:119:3 | exit m9 (abnormal) | exception |
| raise.rb:114:1:118:5 | [ensure: return] ensure ... | raise.rb:94:1:119:3 | exit m9 (normal) | return | | raise.rb:114:1:118:5 | [ensure: return] ensure ... | raise.rb:94:1:119:3 | exit m9 (normal) | return |
| raise.rb:114:1:118:5 | ensure ... | raise.rb:94:1:119:3 | exit m9 (normal) | | | raise.rb:114:1:118:5 | ensure ... | raise.rb:94:1:119:3 | exit m9 (normal) | |
| raise.rb:115:3:115:22 | [ensure: raise] call to puts | raise.rb:116:6:116:7 | [ensure: raise] b2 | | | raise.rb:115:3:115:22 | [ensure: exception] call to puts | raise.rb:116:6:116:7 | [ensure: exception] b2 | |
| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:115:9:115:21 | [ensure: raise] method ensure | | | raise.rb:115:3:115:22 | [ensure: exception] self | raise.rb:115:9:115:21 | [ensure: exception] method ensure | |
| raise.rb:115:3:115:22 | [ensure: return] call to puts | raise.rb:116:6:116:7 | [ensure: return] b2 | | | raise.rb:115:3:115:22 | [ensure: return] call to puts | raise.rb:116:6:116:7 | [ensure: return] b2 | |
| raise.rb:115:3:115:22 | [ensure: return] self | raise.rb:115:9:115:21 | [ensure: return] method ensure | | | raise.rb:115:3:115:22 | [ensure: return] self | raise.rb:115:9:115:21 | [ensure: return] method ensure | |
| raise.rb:115:3:115:22 | call to puts | raise.rb:116:6:116:7 | b2 | | | raise.rb:115:3:115:22 | call to puts | raise.rb:116:6:116:7 | b2 | |
| raise.rb:115:3:115:22 | self | raise.rb:115:9:115:21 | method ensure | | | raise.rb:115:3:115:22 | self | raise.rb:115:9:115:21 | method ensure | |
| raise.rb:115:8:115:22 | "method ensure" | raise.rb:115:3:115:22 | call to puts | | | raise.rb:115:8:115:22 | "method ensure" | raise.rb:115:3:115:22 | call to puts | |
| raise.rb:115:8:115:22 | [ensure: raise] "method ensure" | raise.rb:115:3:115:22 | [ensure: raise] call to puts | | | raise.rb:115:8:115:22 | [ensure: exception] "method ensure" | raise.rb:115:3:115:22 | [ensure: exception] call to puts | |
| raise.rb:115:8:115:22 | [ensure: return] "method ensure" | raise.rb:115:3:115:22 | [ensure: return] call to puts | | | raise.rb:115:8:115:22 | [ensure: return] "method ensure" | raise.rb:115:3:115:22 | [ensure: return] call to puts | |
| raise.rb:115:9:115:21 | [ensure: raise] method ensure | raise.rb:115:8:115:22 | [ensure: raise] "method ensure" | | | raise.rb:115:9:115:21 | [ensure: exception] method ensure | raise.rb:115:8:115:22 | [ensure: exception] "method ensure" | |
| raise.rb:115:9:115:21 | [ensure: return] method ensure | raise.rb:115:8:115:22 | [ensure: return] "method ensure" | | | raise.rb:115:9:115:21 | [ensure: return] method ensure | raise.rb:115:8:115:22 | [ensure: return] "method ensure" | |
| raise.rb:115:9:115:21 | method ensure | raise.rb:115:8:115:22 | "method ensure" | | | raise.rb:115:9:115:21 | method ensure | raise.rb:115:8:115:22 | "method ensure" | |
| raise.rb:116:3:118:5 | [ensure: raise] if ... | raise.rb:114:1:118:5 | [ensure: raise] ensure ... | | | raise.rb:116:3:118:5 | [ensure: exception] if ... | raise.rb:114:1:118:5 | [ensure: exception] ensure ... | |
| raise.rb:116:3:118:5 | [ensure: return] if ... | raise.rb:114:1:118:5 | [ensure: return] ensure ... | | | raise.rb:116:3:118:5 | [ensure: return] if ... | raise.rb:114:1:118:5 | [ensure: return] ensure ... | |
| raise.rb:116:3:118:5 | if ... | raise.rb:114:1:118:5 | ensure ... | | | raise.rb:116:3:118:5 | if ... | raise.rb:114:1:118:5 | ensure ... | |
| raise.rb:116:6:116:7 | [ensure: raise] b2 | raise.rb:116:3:118:5 | [ensure: raise] if ... | false | | raise.rb:116:6:116:7 | [ensure: exception] b2 | raise.rb:116:3:118:5 | [ensure: exception] if ... | false |
| raise.rb:116:6:116:7 | [ensure: raise] b2 | raise.rb:117:5:117:22 | [ensure: raise] self | true | | raise.rb:116:6:116:7 | [ensure: exception] b2 | raise.rb:117:5:117:22 | [ensure: exception] self | true |
| raise.rb:116:6:116:7 | [ensure: return] b2 | raise.rb:116:3:118:5 | [ensure: return] if ... | false | | raise.rb:116:6:116:7 | [ensure: return] b2 | raise.rb:116:3:118:5 | [ensure: return] if ... | false |
| raise.rb:116:6:116:7 | [ensure: return] b2 | raise.rb:117:5:117:22 | [ensure: return] self | true | | raise.rb:116:6:116:7 | [ensure: return] b2 | raise.rb:117:5:117:22 | [ensure: return] self | true |
| raise.rb:116:6:116:7 | b2 | raise.rb:116:3:118:5 | if ... | false | | raise.rb:116:6:116:7 | b2 | raise.rb:116:3:118:5 | if ... | false |
| raise.rb:116:6:116:7 | b2 | raise.rb:117:5:117:22 | self | true | | raise.rb:116:6:116:7 | b2 | raise.rb:117:5:117:22 | self | true |
| raise.rb:117:5:117:22 | [ensure: raise] call to raise | raise.rb:94:1:119:3 | exit m9 (abnormal) | raise | | raise.rb:117:5:117:22 | [ensure: exception] call to raise | raise.rb:94:1:119:3 | exit m9 (abnormal) | exception |
| raise.rb:117:5:117:22 | [ensure: raise] self | raise.rb:117:12:117:21 | [ensure: raise] b2 is true | | | raise.rb:117:5:117:22 | [ensure: exception] self | raise.rb:117:12:117:21 | [ensure: exception] b2 is true | |
| raise.rb:117:5:117:22 | [ensure: return] call to raise | raise.rb:94:1:119:3 | exit m9 (abnormal) | raise | | raise.rb:117:5:117:22 | [ensure: return] call to raise | raise.rb:94:1:119:3 | exit m9 (abnormal) | exception |
| raise.rb:117:5:117:22 | [ensure: return] self | raise.rb:117:12:117:21 | [ensure: return] b2 is true | | | raise.rb:117:5:117:22 | [ensure: return] self | raise.rb:117:12:117:21 | [ensure: return] b2 is true | |
| raise.rb:117:5:117:22 | call to raise | raise.rb:94:1:119:3 | exit m9 (abnormal) | raise | | raise.rb:117:5:117:22 | call to raise | raise.rb:94:1:119:3 | exit m9 (abnormal) | exception |
| raise.rb:117:5:117:22 | self | raise.rb:117:12:117:21 | b2 is true | | | raise.rb:117:5:117:22 | self | raise.rb:117:12:117:21 | b2 is true | |
| raise.rb:117:11:117:22 | "b2 is true" | raise.rb:117:5:117:22 | call to raise | | | raise.rb:117:11:117:22 | "b2 is true" | raise.rb:117:5:117:22 | call to raise | |
| raise.rb:117:11:117:22 | [ensure: raise] "b2 is true" | raise.rb:117:5:117:22 | [ensure: raise] call to raise | | | raise.rb:117:11:117:22 | [ensure: exception] "b2 is true" | raise.rb:117:5:117:22 | [ensure: exception] call to raise | |
| raise.rb:117:11:117:22 | [ensure: return] "b2 is true" | raise.rb:117:5:117:22 | [ensure: return] call to raise | | | raise.rb:117:11:117:22 | [ensure: return] "b2 is true" | raise.rb:117:5:117:22 | [ensure: return] call to raise | |
| raise.rb:117:12:117:21 | [ensure: raise] b2 is true | raise.rb:117:11:117:22 | [ensure: raise] "b2 is true" | | | raise.rb:117:12:117:21 | [ensure: exception] b2 is true | raise.rb:117:11:117:22 | [ensure: exception] "b2 is true" | |
| raise.rb:117:12:117:21 | [ensure: return] b2 is true | raise.rb:117:11:117:22 | [ensure: return] "b2 is true" | | | raise.rb:117:12:117:21 | [ensure: return] b2 is true | raise.rb:117:11:117:22 | [ensure: return] "b2 is true" | |
| raise.rb:117:12:117:21 | b2 is true | raise.rb:117:11:117:22 | "b2 is true" | | | raise.rb:117:12:117:21 | b2 is true | raise.rb:117:11:117:22 | "b2 is true" | |
| raise.rb:121:1:126:3 | enter m10 | raise.rb:121:9:121:9 | p | | | raise.rb:121:1:126:3 | enter m10 | raise.rb:121:9:121:9 | p | |
@@ -2254,7 +2254,7 @@
| raise.rb:121:1:126:3 | m10 | raise.rb:128:1:140:3 | m11 | | | raise.rb:121:1:126:3 | m10 | raise.rb:128:1:140:3 | m11 | |
| raise.rb:121:9:121:9 | p | raise.rb:121:14:121:30 | self | false, no-match, true | | raise.rb:121:9:121:9 | p | raise.rb:121:14:121:30 | self | false, no-match, true |
| raise.rb:121:9:121:9 | p | raise.rb:125:3:125:51 | self | match | | raise.rb:121:9:121:9 | p | raise.rb:125:3:125:51 | self | match |
| raise.rb:121:14:121:30 | call to raise | raise.rb:121:1:126:3 | exit m10 (abnormal) | raise | | raise.rb:121:14:121:30 | call to raise | raise.rb:121:1:126:3 | exit m10 (abnormal) | exception |
| raise.rb:121:14:121:30 | self | raise.rb:121:21:121:29 | Exception | | | raise.rb:121:14:121:30 | self | raise.rb:121:21:121:29 | Exception | |
| raise.rb:121:20:121:30 | "Exception" | raise.rb:121:14:121:30 | call to raise | | | raise.rb:121:20:121:30 | "Exception" | raise.rb:121:14:121:30 | call to raise | |
| raise.rb:121:21:121:29 | Exception | raise.rb:121:20:121:30 | "Exception" | | | raise.rb:121:21:121:29 | Exception | raise.rb:121:20:121:30 | "Exception" | |
@@ -2271,7 +2271,7 @@
| raise.rb:130:5:132:7 | if ... | raise.rb:137:5:137:17 | self | | | raise.rb:130:5:132:7 | if ... | raise.rb:137:5:137:17 | self | |
| raise.rb:130:8:130:8 | b | raise.rb:130:5:132:7 | if ... | false | | raise.rb:130:8:130:8 | b | raise.rb:130:5:132:7 | if ... | false |
| raise.rb:130:8:130:8 | b | raise.rb:131:7:131:22 | self | true | | raise.rb:130:8:130:8 | b | raise.rb:131:7:131:22 | self | true |
| raise.rb:131:7:131:22 | call to raise | raise.rb:133:10:133:19 | ExceptionA | raise | | raise.rb:131:7:131:22 | call to raise | raise.rb:133:10:133:19 | ExceptionA | exception |
| raise.rb:131:7:131:22 | self | raise.rb:131:13:131:22 | ExceptionA | | | raise.rb:131:7:131:22 | self | raise.rb:131:13:131:22 | ExceptionA | |
| raise.rb:131:13:131:22 | ExceptionA | raise.rb:131:7:131:22 | call to raise | | | raise.rb:131:13:131:22 | ExceptionA | raise.rb:131:7:131:22 | call to raise | |
| raise.rb:133:3:133:19 | rescue ... | raise.rb:137:5:137:17 | self | | | raise.rb:133:3:133:19 | rescue ... | raise.rb:137:5:137:17 | self | |
@@ -2279,22 +2279,22 @@
| raise.rb:133:10:133:19 | ExceptionA | raise.rb:134:10:134:19 | ExceptionB | no-match | | raise.rb:133:10:133:19 | ExceptionA | raise.rb:134:10:134:19 | ExceptionB | no-match |
| raise.rb:134:3:135:21 | rescue ... | raise.rb:137:5:137:17 | self | | | raise.rb:134:3:135:21 | rescue ... | raise.rb:137:5:137:17 | self | |
| raise.rb:134:10:134:19 | ExceptionB | raise.rb:135:5:135:21 | self | match | | raise.rb:134:10:134:19 | ExceptionB | raise.rb:135:5:135:21 | self | match |
| raise.rb:134:10:134:19 | ExceptionB | raise.rb:137:5:137:17 | [ensure: raise] self | raise | | raise.rb:134:10:134:19 | ExceptionB | raise.rb:137:5:137:17 | [ensure: exception] self | exception |
| raise.rb:134:20:135:21 | then ... | raise.rb:134:3:135:21 | rescue ... | | | raise.rb:134:20:135:21 | then ... | raise.rb:134:3:135:21 | rescue ... | |
| raise.rb:135:5:135:21 | call to puts | raise.rb:134:20:135:21 | then ... | | | raise.rb:135:5:135:21 | call to puts | raise.rb:134:20:135:21 | then ... | |
| raise.rb:135:5:135:21 | self | raise.rb:135:11:135:20 | ExceptionB | | | raise.rb:135:5:135:21 | self | raise.rb:135:11:135:20 | ExceptionB | |
| raise.rb:135:10:135:21 | "ExceptionB" | raise.rb:135:5:135:21 | call to puts | | | raise.rb:135:10:135:21 | "ExceptionB" | raise.rb:135:5:135:21 | call to puts | |
| raise.rb:135:11:135:20 | ExceptionB | raise.rb:135:10:135:21 | "ExceptionB" | | | raise.rb:135:11:135:20 | ExceptionB | raise.rb:135:10:135:21 | "ExceptionB" | |
| raise.rb:136:3:137:17 | [ensure: raise] ensure ... | raise.rb:128:1:140:3 | exit m11 (abnormal) | raise | | raise.rb:136:3:137:17 | [ensure: exception] ensure ... | raise.rb:128:1:140:3 | exit m11 (abnormal) | exception |
| raise.rb:136:3:137:17 | ensure ... | raise.rb:139:3:139:16 | self | | | raise.rb:136:3:137:17 | ensure ... | raise.rb:139:3:139:16 | self | |
| raise.rb:137:5:137:17 | [ensure: raise] call to puts | raise.rb:136:3:137:17 | [ensure: raise] ensure ... | | | raise.rb:137:5:137:17 | [ensure: exception] call to puts | raise.rb:136:3:137:17 | [ensure: exception] ensure ... | |
| raise.rb:137:5:137:17 | [ensure: raise] self | raise.rb:137:11:137:16 | [ensure: raise] Ensure | | | raise.rb:137:5:137:17 | [ensure: exception] self | raise.rb:137:11:137:16 | [ensure: exception] Ensure | |
| raise.rb:137:5:137:17 | call to puts | raise.rb:136:3:137:17 | ensure ... | | | raise.rb:137:5:137:17 | call to puts | raise.rb:136:3:137:17 | ensure ... | |
| raise.rb:137:5:137:17 | self | raise.rb:137:11:137:16 | Ensure | | | raise.rb:137:5:137:17 | self | raise.rb:137:11:137:16 | Ensure | |
| raise.rb:137:10:137:17 | "Ensure" | raise.rb:137:5:137:17 | call to puts | | | raise.rb:137:10:137:17 | "Ensure" | raise.rb:137:5:137:17 | call to puts | |
| raise.rb:137:10:137:17 | [ensure: raise] "Ensure" | raise.rb:137:5:137:17 | [ensure: raise] call to puts | | | raise.rb:137:10:137:17 | [ensure: exception] "Ensure" | raise.rb:137:5:137:17 | [ensure: exception] call to puts | |
| raise.rb:137:11:137:16 | Ensure | raise.rb:137:10:137:17 | "Ensure" | | | raise.rb:137:11:137:16 | Ensure | raise.rb:137:10:137:17 | "Ensure" | |
| raise.rb:137:11:137:16 | [ensure: raise] Ensure | raise.rb:137:10:137:17 | [ensure: raise] "Ensure" | | | raise.rb:137:11:137:16 | [ensure: exception] Ensure | raise.rb:137:10:137:17 | [ensure: exception] "Ensure" | |
| raise.rb:139:3:139:16 | call to puts | raise.rb:128:1:140:3 | exit m11 (normal) | | | raise.rb:139:3:139:16 | call to puts | raise.rb:128:1:140:3 | exit m11 (normal) | |
| raise.rb:139:3:139:16 | self | raise.rb:139:9:139:15 | End m11 | | | raise.rb:139:3:139:16 | self | raise.rb:139:9:139:15 | End m11 | |
| raise.rb:139:8:139:16 | "End m11" | raise.rb:139:3:139:16 | call to puts | | | raise.rb:139:8:139:16 | "End m11" | raise.rb:139:3:139:16 | call to puts | |
@@ -2306,13 +2306,13 @@
| raise.rb:143:3:145:5 | if ... | raise.rb:147:10:147:10 | 3 | | | raise.rb:143:3:145:5 | if ... | raise.rb:147:10:147:10 | 3 | |
| raise.rb:143:6:143:6 | b | raise.rb:143:3:145:5 | if ... | false | | raise.rb:143:6:143:6 | b | raise.rb:143:3:145:5 | if ... | false |
| raise.rb:143:6:143:6 | b | raise.rb:144:5:144:12 | self | true | | raise.rb:143:6:143:6 | b | raise.rb:144:5:144:12 | self | true |
| raise.rb:144:5:144:12 | call to raise | raise.rb:147:10:147:10 | [ensure: raise] 3 | raise | | raise.rb:144:5:144:12 | call to raise | raise.rb:147:10:147:10 | [ensure: exception] 3 | exception |
| raise.rb:144:5:144:12 | self | raise.rb:144:11:144:12 | "" | | | raise.rb:144:5:144:12 | self | raise.rb:144:11:144:12 | "" | |
| raise.rb:144:11:144:12 | "" | raise.rb:144:5:144:12 | call to raise | | | raise.rb:144:11:144:12 | "" | raise.rb:144:5:144:12 | call to raise | |
| raise.rb:147:3:147:10 | [ensure: raise] return | raise.rb:142:1:148:3 | exit m12 (normal) | return | | raise.rb:147:3:147:10 | [ensure: exception] return | raise.rb:142:1:148:3 | exit m12 (normal) | return |
| raise.rb:147:3:147:10 | return | raise.rb:142:1:148:3 | exit m12 (normal) | return | | raise.rb:147:3:147:10 | return | raise.rb:142:1:148:3 | exit m12 (normal) | return |
| raise.rb:147:10:147:10 | 3 | raise.rb:147:3:147:10 | return | | | raise.rb:147:10:147:10 | 3 | raise.rb:147:3:147:10 | return | |
| raise.rb:147:10:147:10 | [ensure: raise] 3 | raise.rb:147:3:147:10 | [ensure: raise] return | | | raise.rb:147:10:147:10 | [ensure: exception] 3 | raise.rb:147:3:147:10 | [ensure: exception] return | |
| raise.rb:150:1:152:3 | enter m13 | raise.rb:151:1:151:6 | ensure ... | | | raise.rb:150:1:152:3 | enter m13 | raise.rb:151:1:151:6 | ensure ... | |
| raise.rb:150:1:152:3 | exit m13 (normal) | raise.rb:150:1:152:3 | exit m13 | | | raise.rb:150:1:152:3 | exit m13 (normal) | raise.rb:150:1:152:3 | exit m13 | |
| raise.rb:150:1:152:3 | m13 | raise.rb:154:1:156:3 | m14 | | | raise.rb:150:1:152:3 | m13 | raise.rb:154:1:156:3 | m14 | |
@@ -2328,7 +2328,7 @@
| raise.rb:155:16:155:50 | exit { ... } (normal) | raise.rb:155:16:155:50 | exit { ... } | | | raise.rb:155:16:155:50 | exit { ... } (normal) | raise.rb:155:16:155:50 | exit { ... } | |
| raise.rb:155:16:155:50 | { ... } | raise.rb:155:3:155:50 | call to each | | | raise.rb:155:16:155:50 | { ... } | raise.rb:155:3:155:50 | call to each | |
| raise.rb:155:19:155:22 | elem | raise.rb:155:37:155:43 | element | | | raise.rb:155:19:155:22 | elem | raise.rb:155:37:155:43 | element | |
| raise.rb:155:25:155:32 | call to raise | raise.rb:155:16:155:50 | exit { ... } (abnormal) | raise | | raise.rb:155:25:155:32 | call to raise | raise.rb:155:16:155:50 | exit { ... } (abnormal) | exception |
| raise.rb:155:25:155:32 | self | raise.rb:155:31:155:32 | "" | | | raise.rb:155:25:155:32 | self | raise.rb:155:31:155:32 | "" | |
| raise.rb:155:25:155:48 | ... if ... | raise.rb:155:16:155:50 | exit { ... } (normal) | | | raise.rb:155:25:155:48 | ... if ... | raise.rb:155:16:155:50 | exit { ... } (normal) | |
| raise.rb:155:31:155:32 | "" | raise.rb:155:25:155:32 | call to raise | | | raise.rb:155:31:155:32 | "" | raise.rb:155:25:155:32 | call to raise | |
@@ -2350,7 +2350,7 @@
| raise.rb:160:9:162:7 | exit -> { ... } (abnormal) | raise.rb:160:9:162:7 | exit -> { ... } | | | raise.rb:160:9:162:7 | exit -> { ... } (abnormal) | raise.rb:160:9:162:7 | exit -> { ... } | |
| raise.rb:160:9:162:7 | exit -> { ... } (normal) | raise.rb:160:9:162:7 | exit -> { ... } | | | raise.rb:160:9:162:7 | exit -> { ... } (normal) | raise.rb:160:9:162:7 | exit -> { ... } | |
| raise.rb:160:12:160:12 | x | raise.rb:161:23:161:23 | x | | | raise.rb:160:12:160:12 | x | raise.rb:161:23:161:23 | x | |
| raise.rb:161:7:161:14 | call to raise | raise.rb:160:9:162:7 | exit -> { ... } (abnormal) | raise | | raise.rb:161:7:161:14 | call to raise | raise.rb:160:9:162:7 | exit -> { ... } (abnormal) | exception |
| raise.rb:161:7:161:14 | self | raise.rb:161:13:161:14 | "" | | | raise.rb:161:7:161:14 | self | raise.rb:161:13:161:14 | "" | |
| raise.rb:161:7:161:23 | ... unless ... | raise.rb:160:9:162:7 | exit -> { ... } (normal) | | | raise.rb:161:7:161:23 | ... unless ... | raise.rb:160:9:162:7 | exit -> { ... } (normal) | |
| raise.rb:161:13:161:14 | "" | raise.rb:161:7:161:14 | call to raise | | | raise.rb:161:13:161:14 | "" | raise.rb:161:7:161:14 | call to raise | |
@@ -2361,7 +2361,7 @@
| raise.rb:167:3:169:5 | exit m (abnormal) | raise.rb:167:3:169:5 | exit m | | | raise.rb:167:3:169:5 | exit m (abnormal) | raise.rb:167:3:169:5 | exit m | |
| raise.rb:167:3:169:5 | m | raise.rb:172:1:182:3 | m16 | | | raise.rb:167:3:169:5 | m | raise.rb:172:1:182:3 | m16 | |
| raise.rb:167:7:167:10 | self | raise.rb:167:3:169:5 | m | | | raise.rb:167:7:167:10 | self | raise.rb:167:3:169:5 | m | |
| raise.rb:168:5:168:12 | call to raise | raise.rb:167:3:169:5 | exit m (abnormal) | raise | | raise.rb:168:5:168:12 | call to raise | raise.rb:167:3:169:5 | exit m (abnormal) | exception |
| raise.rb:168:5:168:12 | self | raise.rb:168:11:168:12 | "" | | | raise.rb:168:5:168:12 | self | raise.rb:168:11:168:12 | "" | |
| raise.rb:168:11:168:12 | "" | raise.rb:168:5:168:12 | call to raise | | | raise.rb:168:11:168:12 | "" | raise.rb:168:5:168:12 | call to raise | |
| raise.rb:172:1:182:3 | enter m16 | raise.rb:172:9:172:10 | b1 | | | raise.rb:172:1:182:3 | enter m16 | raise.rb:172:9:172:10 | b1 | |
@@ -2373,19 +2373,19 @@
| raise.rb:174:8:174:9 | b1 | raise.rb:174:8:174:23 | [true] ... \|\| ... | true | | raise.rb:174:8:174:9 | b1 | raise.rb:174:8:174:23 | [true] ... \|\| ... | true |
| raise.rb:174:8:174:9 | b1 | raise.rb:174:14:174:15 | b2 | false | | raise.rb:174:8:174:9 | b1 | raise.rb:174:14:174:15 | b2 | false |
| raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:177:14:177:14 | 2 | false | | raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:177:14:177:14 | 2 | false |
| raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:179:10:179:19 | ExceptionA | raise | | raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:179:10:179:19 | ExceptionA | exception |
| raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:175:14:175:14 | 1 | true | | raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:175:14:175:14 | 1 | true |
| raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:179:10:179:19 | ExceptionA | raise | | raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:179:10:179:19 | ExceptionA | exception |
| raise.rb:174:14:174:15 | b2 | raise.rb:174:20:174:23 | true | | | raise.rb:174:14:174:15 | b2 | raise.rb:174:20:174:23 | true | |
| raise.rb:174:14:174:23 | ... == ... | raise.rb:174:8:174:23 | [false] ... \|\| ... | false | | raise.rb:174:14:174:23 | ... == ... | raise.rb:174:8:174:23 | [false] ... \|\| ... | false |
| raise.rb:174:14:174:23 | ... == ... | raise.rb:174:8:174:23 | [true] ... \|\| ... | true | | raise.rb:174:14:174:23 | ... == ... | raise.rb:174:8:174:23 | [true] ... \|\| ... | true |
| raise.rb:174:14:174:23 | ... == ... | raise.rb:179:10:179:19 | ExceptionA | raise | | raise.rb:174:14:174:23 | ... == ... | raise.rb:179:10:179:19 | ExceptionA | exception |
| raise.rb:174:20:174:23 | true | raise.rb:174:14:174:23 | ... == ... | | | raise.rb:174:20:174:23 | true | raise.rb:174:14:174:23 | ... == ... | |
| raise.rb:175:7:175:14 | return | raise.rb:172:1:182:3 | exit m16 (normal) | return | | raise.rb:175:7:175:14 | return | raise.rb:172:1:182:3 | exit m16 (normal) | return |
| raise.rb:175:14:175:14 | 1 | raise.rb:175:7:175:14 | return | | | raise.rb:175:14:175:14 | 1 | raise.rb:175:7:175:14 | return | |
| raise.rb:177:7:177:14 | return | raise.rb:172:1:182:3 | exit m16 (normal) | return | | raise.rb:177:7:177:14 | return | raise.rb:172:1:182:3 | exit m16 (normal) | return |
| raise.rb:177:14:177:14 | 2 | raise.rb:177:7:177:14 | return | | | raise.rb:177:14:177:14 | 2 | raise.rb:177:7:177:14 | return | |
| raise.rb:179:10:179:19 | ExceptionA | raise.rb:172:1:182:3 | exit m16 (abnormal) | raise | | raise.rb:179:10:179:19 | ExceptionA | raise.rb:172:1:182:3 | exit m16 (abnormal) | exception |
| raise.rb:179:10:179:19 | ExceptionA | raise.rb:180:12:180:12 | 3 | match | | raise.rb:179:10:179:19 | ExceptionA | raise.rb:180:12:180:12 | 3 | match |
| raise.rb:180:5:180:12 | return | raise.rb:172:1:182:3 | exit m16 (normal) | return | | raise.rb:180:5:180:12 | return | raise.rb:172:1:182:3 | exit m16 (normal) | return |
| raise.rb:180:12:180:12 | 3 | raise.rb:180:5:180:12 | return | | | raise.rb:180:12:180:12 | 3 | raise.rb:180:5:180:12 | return | |

View File

@@ -1,10 +1,10 @@
callsWithNoArguments callsWithNoArguments
| break_ensure.rb:8:6:8:13 | [ensure: raise] call to elements | | break_ensure.rb:8:6:8:13 | [ensure: exception] call to elements |
| break_ensure.rb:8:6:8:13 | call to elements | | break_ensure.rb:8:6:8:13 | call to elements |
| break_ensure.rb:8:6:8:18 | [ensure: raise] call to nil? | | break_ensure.rb:8:6:8:18 | [ensure: exception] call to nil? |
| break_ensure.rb:8:6:8:18 | call to nil? | | break_ensure.rb:8:6:8:18 | call to nil? |
| break_ensure.rb:20:10:20:15 | [ensure: break] call to nil? | | break_ensure.rb:20:10:20:15 | [ensure: break] call to nil? |
| break_ensure.rb:20:10:20:15 | [ensure: raise] call to nil? | | break_ensure.rb:20:10:20:15 | [ensure: exception] call to nil? |
| break_ensure.rb:20:10:20:15 | call to nil? | | break_ensure.rb:20:10:20:15 | call to nil? |
| break_ensure.rb:29:8:29:13 | call to nil? | | break_ensure.rb:29:8:29:13 | call to nil? |
| case.rb:2:8:2:9 | call to x1 | | case.rb:2:8:2:9 | call to x1 |
@@ -72,25 +72,25 @@ callsWithNoArguments
positionalArguments positionalArguments
| break_ensure.rb:2:9:2:13 | ... < ... | break_ensure.rb:2:13:2:13 | 0 | | break_ensure.rb:2:9:2:13 | ... < ... | break_ensure.rb:2:13:2:13 | 0 |
| break_ensure.rb:3:8:3:12 | ... > ... | break_ensure.rb:3:12:3:12 | 0 | | break_ensure.rb:3:8:3:12 | ... > ... | break_ensure.rb:3:12:3:12 | 0 |
| break_ensure.rb:9:5:9:23 | [ensure: raise] call to puts | break_ensure.rb:9:10:9:23 | [ensure: raise] "elements nil" | | break_ensure.rb:9:5:9:23 | [ensure: exception] call to puts | break_ensure.rb:9:10:9:23 | [ensure: exception] "elements nil" |
| break_ensure.rb:9:5:9:23 | call to puts | break_ensure.rb:9:10:9:23 | "elements nil" | | break_ensure.rb:9:5:9:23 | call to puts | break_ensure.rb:9:10:9:23 | "elements nil" |
| break_ensure.rb:14:9:14:13 | ... < ... | break_ensure.rb:14:13:14:13 | 0 | | break_ensure.rb:14:9:14:13 | ... < ... | break_ensure.rb:14:13:14:13 | 0 |
| break_ensure.rb:16:10:16:14 | ... > ... | break_ensure.rb:16:14:16:14 | 0 | | break_ensure.rb:16:10:16:14 | ... > ... | break_ensure.rb:16:14:16:14 | 0 |
| break_ensure.rb:21:9:21:20 | [ensure: break] call to puts | break_ensure.rb:21:14:21:20 | [ensure: break] "y nil" | | break_ensure.rb:21:9:21:20 | [ensure: break] call to puts | break_ensure.rb:21:14:21:20 | [ensure: break] "y nil" |
| break_ensure.rb:21:9:21:20 | [ensure: raise] call to puts | break_ensure.rb:21:14:21:20 | [ensure: raise] "y nil" | | break_ensure.rb:21:9:21:20 | [ensure: exception] call to puts | break_ensure.rb:21:14:21:20 | [ensure: exception] "y nil" |
| break_ensure.rb:21:9:21:20 | call to puts | break_ensure.rb:21:14:21:20 | "y nil" | | break_ensure.rb:21:9:21:20 | call to puts | break_ensure.rb:21:14:21:20 | "y nil" |
| break_ensure.rb:33:11:33:15 | ... < ... | break_ensure.rb:33:15:33:15 | 0 | | break_ensure.rb:33:11:33:15 | ... < ... | break_ensure.rb:33:15:33:15 | 0 |
| break_ensure.rb:33:11:33:15 | [ensure: raise] ... < ... | break_ensure.rb:33:15:33:15 | [ensure: raise] 0 | | break_ensure.rb:33:11:33:15 | [ensure: exception] ... < ... | break_ensure.rb:33:15:33:15 | [ensure: exception] 0 |
| break_ensure.rb:33:11:33:15 | [ensure: return] ... < ... | break_ensure.rb:33:15:33:15 | [ensure: return] 0 | | break_ensure.rb:33:11:33:15 | [ensure: return] ... < ... | break_ensure.rb:33:15:33:15 | [ensure: return] 0 |
| break_ensure.rb:35:12:35:16 | ... > ... | break_ensure.rb:35:16:35:16 | 0 | | break_ensure.rb:35:12:35:16 | ... > ... | break_ensure.rb:35:16:35:16 | 0 |
| break_ensure.rb:35:12:35:16 | [ensure: raise] ... > ... | break_ensure.rb:35:16:35:16 | [ensure: raise] 0 | | break_ensure.rb:35:12:35:16 | [ensure: exception] ... > ... | break_ensure.rb:35:16:35:16 | [ensure: exception] 0 |
| break_ensure.rb:35:12:35:16 | [ensure: return] ... > ... | break_ensure.rb:35:16:35:16 | [ensure: return] 0 | | break_ensure.rb:35:12:35:16 | [ensure: return] ... > ... | break_ensure.rb:35:16:35:16 | [ensure: return] 0 |
| break_ensure.rb:41:3:41:13 | call to puts | break_ensure.rb:41:8:41:13 | "Done" | | break_ensure.rb:41:3:41:13 | call to puts | break_ensure.rb:41:8:41:13 | "Done" |
| break_ensure.rb:45:9:45:13 | ... < ... | break_ensure.rb:45:13:45:13 | 0 | | break_ensure.rb:45:9:45:13 | ... < ... | break_ensure.rb:45:13:45:13 | 0 |
| break_ensure.rb:47:10:47:14 | ... > ... | break_ensure.rb:47:14:47:14 | 1 | | break_ensure.rb:47:10:47:14 | ... > ... | break_ensure.rb:47:14:47:14 | 1 |
| break_ensure.rb:48:9:48:16 | call to raise | break_ensure.rb:48:15:48:16 | "" | | break_ensure.rb:48:9:48:16 | call to raise | break_ensure.rb:48:15:48:16 | "" |
| break_ensure.rb:51:10:51:14 | ... > ... | break_ensure.rb:51:14:51:14 | 0 | | break_ensure.rb:51:10:51:14 | ... > ... | break_ensure.rb:51:14:51:14 | 0 |
| break_ensure.rb:51:10:51:14 | [ensure: raise] ... > ... | break_ensure.rb:51:14:51:14 | [ensure: raise] 0 | | break_ensure.rb:51:10:51:14 | [ensure: exception] ... > ... | break_ensure.rb:51:14:51:14 | [ensure: exception] 0 |
| case.rb:3:29:3:37 | call to puts | case.rb:3:34:3:37 | "x2" | | case.rb:3:29:3:37 | call to puts | case.rb:3:34:3:37 | "x2" |
| case.rb:4:17:4:24 | call to puts | case.rb:4:22:4:24 | "2" | | case.rb:4:17:4:24 | call to puts | case.rb:4:22:4:24 | "2" |
| case.rb:14:13:14:18 | ... == ... | case.rb:14:18:14:18 | 5 | | case.rb:14:13:14:18 | ... == ... | case.rb:14:18:14:18 | 5 |
@@ -319,7 +319,7 @@ positionalArguments
| raise.rb:70:5:70:17 | call to raise | raise.rb:70:11:70:17 | "x > 2" | | raise.rb:70:5:70:17 | call to raise | raise.rb:70:11:70:17 | "x > 2" |
| raise.rb:71:9:71:13 | ... < ... | raise.rb:71:13:71:13 | 0 | | raise.rb:71:9:71:13 | ... < ... | raise.rb:71:13:71:13 | 0 |
| raise.rb:74:3:74:20 | call to puts | raise.rb:74:8:74:20 | "0 <= x <= 2" | | raise.rb:74:3:74:20 | call to puts | raise.rb:74:8:74:20 | "0 <= x <= 2" |
| raise.rb:76:3:76:15 | [ensure: raise] call to puts | raise.rb:76:8:76:15 | [ensure: raise] "ensure" | | raise.rb:76:3:76:15 | [ensure: exception] call to puts | raise.rb:76:8:76:15 | [ensure: exception] "ensure" |
| raise.rb:76:3:76:15 | [ensure: return] call to puts | raise.rb:76:8:76:15 | [ensure: return] "ensure" | | raise.rb:76:3:76:15 | [ensure: return] call to puts | raise.rb:76:8:76:15 | [ensure: return] "ensure" |
| raise.rb:76:3:76:15 | call to puts | raise.rb:76:8:76:15 | "ensure" | | raise.rb:76:3:76:15 | call to puts | raise.rb:76:8:76:15 | "ensure" |
| raise.rb:80:3:80:17 | call to puts | raise.rb:80:8:80:17 | "Begin m8" | | raise.rb:80:3:80:17 | call to puts | raise.rb:80:8:80:17 | "Begin m8" |
@@ -327,7 +327,7 @@ positionalArguments
| raise.rb:83:7:83:19 | call to raise | raise.rb:83:13:83:19 | "x > 2" | | raise.rb:83:7:83:19 | call to raise | raise.rb:83:13:83:19 | "x > 2" |
| raise.rb:84:11:84:15 | ... < ... | raise.rb:84:15:84:15 | 0 | | raise.rb:84:11:84:15 | ... < ... | raise.rb:84:15:84:15 | 0 |
| raise.rb:87:5:87:22 | call to puts | raise.rb:87:10:87:22 | "0 <= x <= 2" | | raise.rb:87:5:87:22 | call to puts | raise.rb:87:10:87:22 | "0 <= x <= 2" |
| raise.rb:89:5:89:17 | [ensure: raise] call to puts | raise.rb:89:10:89:17 | [ensure: raise] "ensure" | | raise.rb:89:5:89:17 | [ensure: exception] call to puts | raise.rb:89:10:89:17 | [ensure: exception] "ensure" |
| raise.rb:89:5:89:17 | [ensure: return] call to puts | raise.rb:89:10:89:17 | [ensure: return] "ensure" | | raise.rb:89:5:89:17 | [ensure: return] call to puts | raise.rb:89:10:89:17 | [ensure: return] "ensure" |
| raise.rb:89:5:89:17 | call to puts | raise.rb:89:10:89:17 | "ensure" | | raise.rb:89:5:89:17 | call to puts | raise.rb:89:10:89:17 | "ensure" |
| raise.rb:91:3:91:15 | call to puts | raise.rb:91:8:91:15 | "End m8" | | raise.rb:91:3:91:15 | call to puts | raise.rb:91:8:91:15 | "End m8" |
@@ -336,30 +336,30 @@ positionalArguments
| raise.rb:98:7:98:19 | call to raise | raise.rb:98:13:98:19 | "x > 2" | | raise.rb:98:7:98:19 | call to raise | raise.rb:98:13:98:19 | "x > 2" |
| raise.rb:99:11:99:15 | ... < ... | raise.rb:99:15:99:15 | 0 | | raise.rb:99:11:99:15 | ... < ... | raise.rb:99:15:99:15 | 0 |
| raise.rb:102:5:102:22 | call to puts | raise.rb:102:10:102:22 | "0 <= x <= 2" | | raise.rb:102:5:102:22 | call to puts | raise.rb:102:10:102:22 | "0 <= x <= 2" |
| raise.rb:104:5:104:23 | [ensure: raise] call to puts | raise.rb:104:10:104:23 | [ensure: raise] "outer ensure" | | raise.rb:104:5:104:23 | [ensure: exception] call to puts | raise.rb:104:10:104:23 | [ensure: exception] "outer ensure" |
| raise.rb:104:5:104:23 | [ensure: return] call to puts | raise.rb:104:10:104:23 | [ensure: return] "outer ensure" | | raise.rb:104:5:104:23 | [ensure: return] call to puts | raise.rb:104:10:104:23 | [ensure: return] "outer ensure" |
| raise.rb:104:5:104:23 | call to puts | raise.rb:104:10:104:23 | "outer ensure" | | raise.rb:104:5:104:23 | call to puts | raise.rb:104:10:104:23 | "outer ensure" |
| raise.rb:107:9:107:26 | [ensure: raise] call to raise | raise.rb:107:15:107:26 | [ensure: raise] "b1 is true" | | raise.rb:107:9:107:26 | [ensure: exception] call to raise | raise.rb:107:15:107:26 | [ensure: exception] "b1 is true" |
| raise.rb:107:9:107:26 | [ensure: return] call to raise | raise.rb:107:15:107:26 | [ensure: return] "b1 is true" | | raise.rb:107:9:107:26 | [ensure: return] call to raise | raise.rb:107:15:107:26 | [ensure: return] "b1 is true" |
| raise.rb:107:9:107:26 | call to raise | raise.rb:107:15:107:26 | "b1 is true" | | raise.rb:107:9:107:26 | call to raise | raise.rb:107:15:107:26 | "b1 is true" |
| raise.rb:110:7:110:25 | [ensure(1): raise] call to puts | raise.rb:110:12:110:25 | [ensure(1): raise] "inner ensure" | | raise.rb:110:7:110:25 | [ensure(1): exception] call to puts | raise.rb:110:12:110:25 | [ensure(1): exception] "inner ensure" |
| raise.rb:110:7:110:25 | [ensure: raise, ensure(1): raise] call to puts | raise.rb:110:12:110:25 | [ensure: raise, ensure(1): raise] "inner ensure" | | raise.rb:110:7:110:25 | [ensure: exception, ensure(1): exception] call to puts | raise.rb:110:12:110:25 | [ensure: exception, ensure(1): exception] "inner ensure" |
| raise.rb:110:7:110:25 | [ensure: raise] call to puts | raise.rb:110:12:110:25 | [ensure: raise] "inner ensure" | | raise.rb:110:7:110:25 | [ensure: exception] call to puts | raise.rb:110:12:110:25 | [ensure: exception] "inner ensure" |
| raise.rb:110:7:110:25 | [ensure: return, ensure(1): raise] call to puts | raise.rb:110:12:110:25 | [ensure: return, ensure(1): raise] "inner ensure" | | raise.rb:110:7:110:25 | [ensure: return, ensure(1): exception] call to puts | raise.rb:110:12:110:25 | [ensure: return, ensure(1): exception] "inner ensure" |
| raise.rb:110:7:110:25 | [ensure: return] call to puts | raise.rb:110:12:110:25 | [ensure: return] "inner ensure" | | raise.rb:110:7:110:25 | [ensure: return] call to puts | raise.rb:110:12:110:25 | [ensure: return] "inner ensure" |
| raise.rb:110:7:110:25 | call to puts | raise.rb:110:12:110:25 | "inner ensure" | | raise.rb:110:7:110:25 | call to puts | raise.rb:110:12:110:25 | "inner ensure" |
| raise.rb:113:3:113:15 | call to puts | raise.rb:113:8:113:15 | "End m9" | | raise.rb:113:3:113:15 | call to puts | raise.rb:113:8:113:15 | "End m9" |
| raise.rb:115:3:115:22 | [ensure: raise] call to puts | raise.rb:115:8:115:22 | [ensure: raise] "method ensure" | | raise.rb:115:3:115:22 | [ensure: exception] call to puts | raise.rb:115:8:115:22 | [ensure: exception] "method ensure" |
| raise.rb:115:3:115:22 | [ensure: return] call to puts | raise.rb:115:8:115:22 | [ensure: return] "method ensure" | | raise.rb:115:3:115:22 | [ensure: return] call to puts | raise.rb:115:8:115:22 | [ensure: return] "method ensure" |
| raise.rb:115:3:115:22 | call to puts | raise.rb:115:8:115:22 | "method ensure" | | raise.rb:115:3:115:22 | call to puts | raise.rb:115:8:115:22 | "method ensure" |
| raise.rb:117:5:117:22 | [ensure: raise] call to raise | raise.rb:117:11:117:22 | [ensure: raise] "b2 is true" | | raise.rb:117:5:117:22 | [ensure: exception] call to raise | raise.rb:117:11:117:22 | [ensure: exception] "b2 is true" |
| raise.rb:117:5:117:22 | [ensure: return] call to raise | raise.rb:117:11:117:22 | [ensure: return] "b2 is true" | | raise.rb:117:5:117:22 | [ensure: return] call to raise | raise.rb:117:11:117:22 | [ensure: return] "b2 is true" |
| raise.rb:117:5:117:22 | call to raise | raise.rb:117:11:117:22 | "b2 is true" | | raise.rb:117:5:117:22 | call to raise | raise.rb:117:11:117:22 | "b2 is true" |
| raise.rb:121:14:121:30 | call to raise | raise.rb:121:20:121:30 | "Exception" | | raise.rb:121:14:121:30 | call to raise | raise.rb:121:20:121:30 | "Exception" |
| raise.rb:125:3:125:51 | call to puts | raise.rb:125:8:125:51 | "Will not get executed if p is..." | | raise.rb:125:3:125:51 | call to puts | raise.rb:125:8:125:51 | "Will not get executed if p is..." |
| raise.rb:131:7:131:22 | call to raise | raise.rb:131:13:131:22 | ExceptionA | | raise.rb:131:7:131:22 | call to raise | raise.rb:131:13:131:22 | ExceptionA |
| raise.rb:135:5:135:21 | call to puts | raise.rb:135:10:135:21 | "ExceptionB" | | raise.rb:135:5:135:21 | call to puts | raise.rb:135:10:135:21 | "ExceptionB" |
| raise.rb:137:5:137:17 | [ensure: raise] call to puts | raise.rb:137:10:137:17 | [ensure: raise] "Ensure" | | raise.rb:137:5:137:17 | [ensure: exception] call to puts | raise.rb:137:10:137:17 | [ensure: exception] "Ensure" |
| raise.rb:137:5:137:17 | call to puts | raise.rb:137:10:137:17 | "Ensure" | | raise.rb:137:5:137:17 | call to puts | raise.rb:137:10:137:17 | "Ensure" |
| raise.rb:139:3:139:16 | call to puts | raise.rb:139:8:139:16 | "End m11" | | raise.rb:139:3:139:16 | call to puts | raise.rb:139:8:139:16 | "End m11" |
| raise.rb:144:5:144:12 | call to raise | raise.rb:144:11:144:12 | "" | | raise.rb:144:5:144:12 | call to raise | raise.rb:144:11:144:12 | "" |

View File

@@ -12,7 +12,7 @@ query predicate newStyleBarrierGuards(DataFlow::Node n) {
n instanceof StringConstArrayInclusionCallBarrier n instanceof StringConstArrayInclusionCallBarrier
} }
query predicate controls(CfgNode condition, BasicBlock bb, SuccessorTypes::ConditionalSuccessor s) { query predicate controls(CfgNode condition, BasicBlock bb, ConditionalSuccessor s) {
exists(ConditionBlock cb | exists(ConditionBlock cb |
cb.edgeDominates(bb, s) and cb.edgeDominates(bb, s) and
condition = cb.getLastNode() condition = cb.getLastNode()

View File

@@ -21,8 +21,6 @@ final class JoinPredecessorBasicBlock = BasicBlocksImpl::JoinPredecessorBasicBlo
module Cfg implements BB::CfgSig<Location> { module Cfg implements BB::CfgSig<Location> {
class ControlFlowNode = ControlFlowGraph::CfgNode; class ControlFlowNode = ControlFlowGraph::CfgNode;
class SuccessorType = ControlFlowGraph::SuccessorType;
class BasicBlock = BasicBlocksImpl::BasicBlock; class BasicBlock = BasicBlocksImpl::BasicBlock;
class EntryBasicBlock = BasicBlocksImpl::EntryBasicBlock; class EntryBasicBlock = BasicBlocksImpl::EntryBasicBlock;

View File

@@ -1,25 +1,9 @@
/** Provides classes representing the control flow graph. */ /** Provides classes representing the control flow graph. */
private import internal.ControlFlowGraphImpl private import internal.ControlFlowGraphImpl
private import internal.SuccessorType
private import internal.Scope as Scope private import internal.Scope as Scope
import codeql.controlflow.SuccessorType
final class CfgScope = Scope::CfgScope; final class CfgScope = Scope::CfgScope;
final class SuccessorType = SuccessorTypeImpl;
final class NormalSuccessor = NormalSuccessorImpl;
final class ConditionalSuccessor = ConditionalSuccessorImpl;
final class BooleanSuccessor = BooleanSuccessorImpl;
final class MatchSuccessor = MatchSuccessorImpl;
final class BreakSuccessor = BreakSuccessorImpl;
final class ContinueSuccessor = ContinueSuccessorImpl;
final class ReturnSuccessor = ReturnSuccessorImpl;
final class CfgNode = Node; final class CfgNode = Node;

View File

@@ -1,7 +1,6 @@
private import codeql.util.Boolean private import codeql.util.Boolean
private import codeql.rust.controlflow.ControlFlowGraph private import codeql.rust.controlflow.ControlFlowGraph
private import rust private import rust
private import SuccessorType
newtype TCompletion = newtype TCompletion =
TSimpleCompletion() or TSimpleCompletion() or
@@ -32,7 +31,7 @@ abstract class NormalCompletion extends Completion { }
/** A simple (normal) completion. */ /** A simple (normal) completion. */
class SimpleCompletion extends NormalCompletion, TSimpleCompletion { class SimpleCompletion extends NormalCompletion, TSimpleCompletion {
override NormalSuccessor getAMatchingSuccessorType() { any() } override DirectSuccessor getAMatchingSuccessorType() { any() }
// `SimpleCompletion` is the "default" completion type, thus it is valid for // `SimpleCompletion` is the "default" completion type, thus it is valid for
// any node where there isn't another more specific completion type. // any node where there isn't another more specific completion type.
@@ -184,7 +183,7 @@ class MatchCompletion extends TMatchCompletion, ConditionalCompletion {
e instanceof TryExpr and value = true e instanceof TryExpr and value = true
} }
override MatchSuccessor getAMatchingSuccessorType() { result.getValue() = value } override MatchingSuccessor getAMatchingSuccessorType() { result.getValue() = value }
/** Gets the dual match completion. */ /** Gets the dual match completion. */
override MatchCompletion getDual() { result = TMatchCompletion(value.booleanNot()) } override MatchCompletion getDual() { result = TMatchCompletion(value.booleanNot()) }

View File

@@ -29,19 +29,11 @@ private module CfgInput implements InputSig<Location> {
Stages::CfgStage::ref() Stages::CfgStage::ref()
} }
class SuccessorType = Cfg::SuccessorType; private class SuccessorType = Cfg::SuccessorType;
/** Gets a successor type that matches completion `c`. */ /** Gets a successor type that matches completion `c`. */
SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() } SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() }
/**
* Hold if `c` represents simple (normal) evaluation of a statement or an expression.
*/
predicate successorTypeIsSimple(SuccessorType t) { t instanceof Cfg::NormalSuccessor }
/** Holds if `t` is an abnormal exit type out of a CFG scope. */
predicate isAbnormalExitType(SuccessorType t) { none() }
/** Hold if `t` represents a conditional successor type. */ /** Hold if `t` represents a conditional successor type. */
predicate successorTypeIsCondition(SuccessorType t) { t instanceof Cfg::BooleanSuccessor } predicate successorTypeIsCondition(SuccessorType t) { t instanceof Cfg::BooleanSuccessor }

View File

@@ -1,74 +0,0 @@
private import rust
private import codeql.util.Boolean
private import Completion
private import codeql.rust.internal.CachedStages
cached
newtype TSuccessorType =
TNormalSuccessor() { Stages::CfgStage::ref() } or
TBooleanSuccessor(Boolean b) or
TMatchSuccessor(Boolean b) or
TBreakSuccessor() or
TContinueSuccessor() or
TReturnSuccessor()
/** The type of a control flow successor. */
abstract class SuccessorTypeImpl extends TSuccessorType {
/** Gets a textual representation of successor type. */
abstract string toString();
}
/** A normal control flow successor. */
class NormalSuccessorImpl extends SuccessorTypeImpl, TNormalSuccessor {
override string toString() { result = "successor" }
}
/** A conditional control flow successor. */
abstract class ConditionalSuccessorImpl extends SuccessorTypeImpl {
boolean value;
bindingset[value]
ConditionalSuccessorImpl() { exists(value) }
/** Gets the Boolean value of this successor. */
boolean getValue() { result = value }
}
/** A Boolean control flow successor for a boolean conditon. */
class BooleanSuccessorImpl extends ConditionalSuccessorImpl, TBooleanSuccessor {
BooleanSuccessorImpl() { this = TBooleanSuccessor(value) }
override string toString() { result = this.getValue().toString() }
}
/**
* A control flow successor of a pattern match.
*/
class MatchSuccessorImpl extends ConditionalSuccessorImpl, TMatchSuccessor {
MatchSuccessorImpl() { this = TMatchSuccessor(value) }
override string toString() {
if this.getValue() = true then result = "match" else result = "no-match"
}
}
/**
* A control flow successor of a `break` expression.
*/
class BreakSuccessorImpl extends SuccessorTypeImpl, TBreakSuccessor {
override string toString() { result = "break" }
}
/**
* A control flow successor of a `continue` expression.
*/
class ContinueSuccessorImpl extends SuccessorTypeImpl, TContinueSuccessor {
override string toString() { result = "continue" }
}
/**
* A `return` control flow successor.
*/
class ReturnSuccessorImpl extends SuccessorTypeImpl, TReturnSuccessor {
override string toString() { result = "return" }
}

View File

@@ -65,7 +65,6 @@ module Stages {
cached cached
module CfgStage { module CfgStage {
private import codeql.rust.controlflow.internal.Splitting private import codeql.rust.controlflow.internal.Splitting
private import codeql.rust.controlflow.internal.SuccessorType
private import codeql.rust.controlflow.internal.ControlFlowGraphImpl private import codeql.rust.controlflow.internal.ControlFlowGraphImpl
private import codeql.rust.controlflow.CfgNodes private import codeql.rust.controlflow.CfgNodes
@@ -87,8 +86,6 @@ module Stages {
or or
exists(TConditionalCompletionSplitKind()) exists(TConditionalCompletionSplitKind())
or or
exists(TNormalSuccessor())
or
exists(AstCfgNode n) exists(AstCfgNode n)
or or
exists(CallExprCfgNode n | exists(n.getFunction())) exists(CallExprCfgNode n | exists(n.getFunction()))

View File

@@ -9,17 +9,12 @@ overlay[local?]
module; module;
private import codeql.util.Location private import codeql.util.Location
private import SuccessorType
/** Provides the language-specific input specification. */ /** Provides the language-specific input specification. */
signature module InputSig<LocationSig Location> { signature module InputSig<LocationSig Location> {
/** The type of a control flow successor. */
class SuccessorType {
/** Gets a textual representation of this successor type. */
string toString();
}
/** Hold if `t` represents a conditional successor type. */ /** Hold if `t` represents a conditional successor type. */
predicate successorTypeIsCondition(SuccessorType t); default predicate successorTypeIsCondition(SuccessorType t) { t instanceof ConditionalSuccessor }
/** A delineated part of the AST with its own CFG. */ /** A delineated part of the AST with its own CFG. */
class CfgScope; class CfgScope;
@@ -61,12 +56,6 @@ signature module CfgSig<LocationSig Location> {
Location getLocation(); Location getLocation();
} }
/** The type of a control flow successor. */
class SuccessorType {
/** Gets a textual representation of this successor type. */
string toString();
}
/** /**
* A basic block, that is, a maximal straight-line sequence of control flow nodes * A basic block, that is, a maximal straight-line sequence of control flow nodes
* without branches or joins. * without branches or joins.
@@ -180,8 +169,6 @@ module Make<LocationSig Location, InputSig<Location> Input> implements CfgSig<Lo
class ControlFlowNode = Input::Node; class ControlFlowNode = Input::Node;
class SuccessorType = Input::SuccessorType;
/** /**
* A basic block, that is, a maximal straight-line sequence of control flow nodes * A basic block, that is, a maximal straight-line sequence of control flow nodes
* without branches or joins. * without branches or joins.

View File

@@ -8,6 +8,7 @@ module;
private import codeql.util.Location private import codeql.util.Location
private import codeql.util.FileSystem private import codeql.util.FileSystem
private import codeql.util.Void private import codeql.util.Void
private import SuccessorType
/** Provides the language-specific input specification. */ /** Provides the language-specific input specification. */
signature module InputSig<LocationSig Location> { signature module InputSig<LocationSig Location> {
@@ -59,26 +60,11 @@ signature module InputSig<LocationSig Location> {
/** Holds if `scope` is exited when `last` finishes with completion `c`. */ /** Holds if `scope` is exited when `last` finishes with completion `c`. */
predicate scopeLast(CfgScope scope, AstNode last, Completion c); predicate scopeLast(CfgScope scope, AstNode last, Completion c);
/** A type of a control flow successor. */
class SuccessorType {
/** Gets a textual representation of this successor type. */
string toString();
}
/** Gets a successor type that matches completion `c`. */ /** Gets a successor type that matches completion `c`. */
SuccessorType getAMatchingSuccessorType(Completion c); SuccessorType getAMatchingSuccessorType(Completion c);
/**
* Hold if `t` represents simple (normal) evaluation of a statement or an
* expression.
*/
predicate successorTypeIsSimple(SuccessorType t);
/** Hold if `t` represents a conditional successor type. */ /** Hold if `t` represents a conditional successor type. */
predicate successorTypeIsCondition(SuccessorType t); default predicate successorTypeIsCondition(SuccessorType t) { t instanceof ConditionalSuccessor }
/** Holds if `t` is an abnormal exit type out of a CFG scope. */
predicate isAbnormalExitType(SuccessorType t);
/** /**
* Gets an `id` of `node`. This is used to order the predecessors of a join * Gets an `id` of `node`. This is used to order the predecessors of a join
@@ -522,7 +508,7 @@ module MakeWithSplitting<
private predicate succEntrySplits(CfgScope pred, AstNode succ, Splits succSplits, SuccessorType t) { private predicate succEntrySplits(CfgScope pred, AstNode succ, Splits succSplits, SuccessorType t) {
exists(int rnk | exists(int rnk |
scopeFirst(pred, succ) and scopeFirst(pred, succ) and
successorTypeIsSimple(t) and t instanceof DirectSuccessor and
succEntrySplitsFromRank(pred, succ, succSplits, rnk) succEntrySplitsFromRank(pred, succ, succSplits, rnk)
| |
rnk = 0 and rnk = 0 and
@@ -959,6 +945,12 @@ module MakeWithSplitting<
) )
} }
/** Holds if `t` is an abnormal exit type out of a CFG scope. */
private predicate isAbnormalExitType(SuccessorType t) {
t instanceof ExceptionSuccessor or
t instanceof ExitSuccessor
}
/** /**
* Internal representation of control flow nodes in the control flow graph. * Internal representation of control flow nodes in the control flow graph.
* The control flow graph is pruned for unreachable nodes. * The control flow graph is pruned for unreachable nodes.
@@ -1016,7 +1008,7 @@ module MakeWithSplitting<
exists(CfgScope scope | exists(CfgScope scope |
pred = TAnnotatedExitNode(scope, _) and pred = TAnnotatedExitNode(scope, _) and
result = TExitNode(scope) and result = TExitNode(scope) and
successorTypeIsSimple(t) t instanceof DirectSuccessor
) )
} }
@@ -1320,7 +1312,7 @@ module MakeWithSplitting<
label = label =
strictconcat(SuccessorType t, string s | strictconcat(SuccessorType t, string s |
succ = getASuccessor(pred, t) and succ = getASuccessor(pred, t) and
if successorTypeIsSimple(t) then s = "" else s = t.toString() if t instanceof DirectSuccessor then s = "" else s = t.toString()
| |
s, ", " order by s s, ", " order by s
) )
@@ -1535,6 +1527,8 @@ module MakeWithSplitting<
query predicate multipleSuccessors(Node node, SuccessorType t, Node successor) { query predicate multipleSuccessors(Node node, SuccessorType t, Node successor) {
strictcount(getASuccessor(node, t)) > 1 and strictcount(getASuccessor(node, t)) > 1 and
successor = getASuccessor(node, t) and successor = getASuccessor(node, t) and
// allow for multiple exception successors
not t instanceof ExceptionSuccessor and
// allow for functions with multiple bodies // allow for functions with multiple bodies
not (t instanceof SimpleSuccessorType and node instanceof EntryNode) not (t instanceof SimpleSuccessorType and node instanceof EntryNode)
} }
@@ -1590,8 +1584,6 @@ module MakeWithSplitting<
private class NodeAlias = Node; private class NodeAlias = Node;
private module BasicBlockInputSig implements BB::InputSig<Location> { private module BasicBlockInputSig implements BB::InputSig<Location> {
class SuccessorType = Input::SuccessorType;
predicate successorTypeIsCondition = Input::successorTypeIsCondition/1; predicate successorTypeIsCondition = Input::successorTypeIsCondition/1;
class CfgScope = CfgScopeAlias; class CfgScope = CfgScopeAlias;

View File

@@ -51,25 +51,13 @@ overlay[local?]
module; module;
private import codeql.controlflow.BasicBlock as BB private import codeql.controlflow.BasicBlock as BB
private import codeql.controlflow.SuccessorType
private import codeql.util.Boolean private import codeql.util.Boolean
private import codeql.util.Location private import codeql.util.Location
private import codeql.util.Unit private import codeql.util.Unit
signature class TypSig; signature class TypSig;
signature module SuccessorTypesSig<TypSig SuccessorType> {
class ExceptionSuccessor extends SuccessorType;
class ConditionalSuccessor extends SuccessorType {
/** Gets the Boolean value of this successor. */
boolean getValue();
}
class BooleanSuccessor extends ConditionalSuccessor;
class NullnessSuccessor extends ConditionalSuccessor;
}
signature module InputSig<LocationSig Location, TypSig ControlFlowNode, TypSig BasicBlock> { signature module InputSig<LocationSig Location, TypSig ControlFlowNode, TypSig BasicBlock> {
/** A control flow node indicating normal termination of a callable. */ /** A control flow node indicating normal termination of a callable. */
class NormalExitNode extends ControlFlowNode; class NormalExitNode extends ControlFlowNode;
@@ -205,13 +193,11 @@ signature module InputSig<LocationSig Location, TypSig ControlFlowNode, TypSig B
/** Provides guards-related predicates and classes. */ /** Provides guards-related predicates and classes. */
module Make< module Make<
LocationSig Location, BB::CfgSig<Location> Cfg, LocationSig Location, BB::CfgSig<Location> Cfg,
SuccessorTypesSig<Cfg::SuccessorType> SuccessorTypes,
InputSig<Location, Cfg::ControlFlowNode, Cfg::BasicBlock> Input> InputSig<Location, Cfg::ControlFlowNode, Cfg::BasicBlock> Input>
{ {
private module Cfg_ = Cfg; private module Cfg_ = Cfg;
private import Cfg_ private import Cfg_
private import SuccessorTypes
private import Input private import Input
private newtype TAbstractSingleValue = private newtype TAbstractSingleValue =

View File

@@ -0,0 +1,343 @@
/**
* Provides different types of control flow successor types. These are used as
* edge labels in the control flow graph.
*
* ```text
* SuccessorType
* |- NormalSuccessor
* | |- DirectSuccessor
* | \- ConditionalSuccessor
* | |- BooleanSuccessor
* | |- NullnessSuccessor
* | |- MatchingSuccessor
* | \- EmptinessSuccessor
* \- AbruptSuccessor
* |- ExceptionSuccessor
* |- ReturnSuccessor
* |- ExitSuccessor (program termination)
* \- JumpSuccessor
* |- BreakSuccessor
* |- ContinueSuccessor
* |- GotoSuccessor
* |- RedoSuccessor // rare, used in Ruby
* \- RetrySuccessor // rare, used in Ruby
* ```
*/
overlay[local]
module;
private import codeql.util.Boolean
private newtype TSuccessorType =
TDirectSuccessor() or
TBooleanSuccessor(Boolean branch) or
TNullnessSuccessor(Boolean isNull) or
TMatchingSuccessor(Boolean isMatch) or
TEmptinessSuccessor(Boolean isEmpty) or
TExceptionSuccessor() or
TReturnSuccessor() or
TExitSuccessor() or
TBreakSuccessor() or
TContinueSuccessor() or
TGotoSuccessor() or
TRedoSuccessor() or
TRetrySuccessor()
/**
* The type of a control flow successor.
*
* A successor is either normal, which covers direct and conditional
* successors, or abrupt, which covers all other types of successors including
* for example exceptions, returns, and other jumps.
*/
private class SuccessorTypeImpl extends TSuccessorType {
/** Gets a textual representation of this successor type. */
abstract string toString();
}
final class SuccessorType = SuccessorTypeImpl;
private class TNormalSuccessor = TDirectSuccessor or TConditionalSuccessor;
/**
* A normal control flow successor. This is either a direct or a conditional
* successor.
*/
abstract private class NormalSuccessorImpl extends SuccessorTypeImpl, TNormalSuccessor { }
final class NormalSuccessor = NormalSuccessorImpl;
/** A direct control flow successor. */
class DirectSuccessor extends NormalSuccessorImpl, TDirectSuccessor {
override string toString() { result = "successor" }
}
private class TConditionalSuccessor =
TBooleanSuccessor or TMatchingSuccessor or TNullnessSuccessor or TEmptinessSuccessor;
/**
* A conditional control flow successor. Either a Boolean successor (`BooleanSuccessor`),
* a nullness successor (`NullnessSuccessor`), a matching successor (`MatchingSuccessor`),
* or an emptiness successor (`EmptinessSuccessor`).
*/
abstract private class ConditionalSuccessorImpl extends NormalSuccessorImpl, TConditionalSuccessor {
/** Gets the Boolean value of this successor. */
abstract boolean getValue();
}
final class ConditionalSuccessor = ConditionalSuccessorImpl;
/**
* A Boolean control flow successor.
*
* For example, this program fragment:
*
* ```csharp
* if (x < 0)
* return 0;
* else
* return 1;
* ```
*
* has a control flow graph containing Boolean successors:
*
* ```text
* if
* |
* x < 0
* / \
* / \
* / \
* true false
* | \
* return 0 return 1
* ```
*/
class BooleanSuccessor extends ConditionalSuccessorImpl, TBooleanSuccessor {
override boolean getValue() { this = TBooleanSuccessor(result) }
override string toString() { result = this.getValue().toString() }
}
/**
* A nullness control flow successor.
*
* For example, this program fragment:
*
* ```csharp
* int? M(string s) => s?.Length;
* ```
*
* has a control flow graph containing nullness successors:
*
* ```text
* enter M
* |
* s
* / \
* / \
* / \
* null non-null
* \ |
* \ Length
* \ /
* \ /
* exit M
* ```
*/
class NullnessSuccessor extends ConditionalSuccessorImpl, TNullnessSuccessor {
/** Holds if this is a `null` successor. */
predicate isNull() { this = TNullnessSuccessor(true) }
override boolean getValue() { this = TNullnessSuccessor(result) }
override string toString() { if this.isNull() then result = "null" else result = "non-null" }
}
/**
* A matching control flow successor.
*
* For example, this program fragment:
*
* ```csharp
* switch (x) {
* case 0 :
* return 0;
* default :
* return 1;
* }
* ```
*
* has a control flow graph containing matching successors:
*
* ```text
* switch
* |
* x
* |
* case 0
* / \
* / \
* / \
* match no-match
* | \
* return 0 default
* |
* return 1
* ```
*/
class MatchingSuccessor extends ConditionalSuccessorImpl, TMatchingSuccessor {
/** Holds if this is a match successor. */
predicate isMatch() { this = TMatchingSuccessor(true) }
override boolean getValue() { this = TMatchingSuccessor(result) }
override string toString() { if this.isMatch() then result = "match" else result = "no-match" }
}
/**
* An emptiness control flow successor.
*
* For example, this program fragment:
*
* ```csharp
* foreach (var arg in args)
* {
* yield return arg;
* }
* yield return "";
* ```
*
* has a control flow graph containing emptiness successors:
*
* ```text
* args
* |
* loop-header------<-----
* / \ \
* / \ |
* / \ |
* / \ |
* empty non-empty |
* | \ |
* yield return "" \ |
* var arg |
* | |
* yield return arg |
* \_________/
* ```
*/
class EmptinessSuccessor extends ConditionalSuccessorImpl, TEmptinessSuccessor {
/** Holds if this is an empty successor. */
predicate isEmpty() { this = TEmptinessSuccessor(true) }
override boolean getValue() { this = TEmptinessSuccessor(result) }
override string toString() { if this.isEmpty() then result = "empty" else result = "non-empty" }
}
private class TAbruptSuccessor =
TExceptionSuccessor or TReturnSuccessor or TExitSuccessor or TJumpSuccessor;
/** An abrupt control flow successor. */
abstract private class AbruptSuccessorImpl extends SuccessorTypeImpl, TAbruptSuccessor { }
final class AbruptSuccessor = AbruptSuccessorImpl;
/**
* An exceptional control flow successor.
*
* Example:
*
* ```csharp
* int M(string s)
* {
* if (s == null)
* throw new ArgumentNullException(nameof(s));
* return s.Length;
* }
* ```
*
* The callable exit node of `M` is an exceptional successor of the node
* `throw new ArgumentNullException(nameof(s));`.
*/
class ExceptionSuccessor extends AbruptSuccessorImpl, TExceptionSuccessor {
override string toString() { result = "exception" }
}
/**
* A `return` control flow successor.
*
* Example:
*
* ```csharp
* void M()
* {
* return;
* }
* ```
*
* The callable exit node of `M` is a `return` successor of the `return;`
* statement.
*/
class ReturnSuccessor extends AbruptSuccessorImpl, TReturnSuccessor {
override string toString() { result = "return" }
}
/**
* An exit control flow successor.
*
* Example:
*
* ```csharp
* int M(string s)
* {
* if (s == null)
* System.Environment.Exit(0);
* return s.Length;
* }
* ```
*
* The callable exit node of `M` is an exit successor of the node on line 4.
*/
class ExitSuccessor extends AbruptSuccessorImpl, TExitSuccessor {
override string toString() { result = "exit" }
}
private class TJumpSuccessor =
TBreakSuccessor or TContinueSuccessor or TGotoSuccessor or TRedoSuccessor or TRetrySuccessor;
/**
* A jump control flow successor.
*
* This covers non-exceptional, non-local control flow, such as `break`,
* `continue`, and `goto`.
*/
abstract private class JumpSuccessorImpl extends AbruptSuccessorImpl, TJumpSuccessor { }
final class JumpSuccessor = JumpSuccessorImpl;
/** A `break` control flow successor. */
class BreakSuccessor extends JumpSuccessorImpl, TBreakSuccessor {
override string toString() { result = "break" }
}
/** A `continue` control flow successor. */
class ContinueSuccessor extends JumpSuccessorImpl, TContinueSuccessor {
override string toString() { result = "continue" }
}
/** A `goto` control flow successor. */
class GotoSuccessor extends JumpSuccessorImpl, TGotoSuccessor {
override string toString() { result = "goto" }
}
/** A `redo` control flow successor (rare, used in Ruby). */
class RedoSuccessor extends JumpSuccessorImpl, TRedoSuccessor {
override string toString() { result = "redo" }
}
/** A `retry` control flow successor (rare, used in Ruby). */
class RetrySuccessor extends JumpSuccessorImpl, TRetrySuccessor {
override string toString() { result = "retry" }
}

View File

@@ -3,7 +3,6 @@
private import swift private import swift
private import ControlFlowGraph private import ControlFlowGraph
private import internal.ControlFlowGraphImpl as CfgImpl private import internal.ControlFlowGraphImpl as CfgImpl
private import SuccessorTypes
private import CfgImpl::BasicBlocks as BasicBlocksImpl private import CfgImpl::BasicBlocks as BasicBlocksImpl
private import codeql.controlflow.BasicBlock as BB private import codeql.controlflow.BasicBlock as BB
@@ -120,13 +119,9 @@ private class EntryBasicBlockAlias = EntryBasicBlock;
private class ControlFlowNodeAlias = ControlFlowNode; private class ControlFlowNodeAlias = ControlFlowNode;
private class SuccessorTypeAlias = SuccessorType;
module Cfg implements BB::CfgSig<Location> { module Cfg implements BB::CfgSig<Location> {
class ControlFlowNode = ControlFlowNodeAlias; class ControlFlowNode = ControlFlowNodeAlias;
class SuccessorType = SuccessorTypeAlias;
class BasicBlock = BasicBlockAlias; class BasicBlock = BasicBlockAlias;
class EntryBasicBlock = EntryBasicBlockAlias; class EntryBasicBlock = EntryBasicBlockAlias;

View File

@@ -2,11 +2,11 @@
private import swift private import swift
private import BasicBlocks private import BasicBlocks
private import SuccessorTypes
private import internal.ControlFlowGraphImpl as CfgImpl private import internal.ControlFlowGraphImpl as CfgImpl
private import internal.Completion private import internal.Completion
private import internal.Scope private import internal.Scope
private import internal.ControlFlowElements private import internal.ControlFlowElements
import codeql.controlflow.SuccessorType
/** An AST node with an associated control-flow graph. */ /** An AST node with an associated control-flow graph. */
class CfgScope extends Scope instanceof CfgImpl::CfgScope::Range_ { class CfgScope extends Scope instanceof CfgImpl::CfgScope::Range_ {
@@ -61,72 +61,3 @@ class ControlFlowNode extends CfgImpl::Node {
/** Holds if this node has more than one successor. */ /** Holds if this node has more than one successor. */
final predicate isBranch() { strictcount(this.getASuccessor()) > 1 } final predicate isBranch() { strictcount(this.getASuccessor()) > 1 }
} }
/** The type of a control flow successor. */
class SuccessorType extends CfgImpl::TSuccessorType {
/** Gets a textual representation of successor type. */
string toString() { none() }
}
/** Provides different types of control flow successor types. */
module SuccessorTypes {
/** A normal control flow successor. */
class NormalSuccessor extends SuccessorType, CfgImpl::TSuccessorSuccessor {
final override string toString() { result = "successor" }
}
/** A conditional control flow successor. */
abstract class ConditionalSuccessor extends SuccessorType {
boolean value;
bindingset[value]
ConditionalSuccessor() { any() }
/** Gets the Boolean value of this successor. */
final boolean getValue() { result = value }
override string toString() { result = this.getValue().toString() }
}
/** A Boolean control flow successor. */
class BooleanSuccessor extends ConditionalSuccessor, CfgImpl::TBooleanSuccessor {
BooleanSuccessor() { this = CfgImpl::TBooleanSuccessor(value) }
}
class BreakSuccessor extends SuccessorType, CfgImpl::TBreakSuccessor {
final override string toString() { result = "break" }
}
class ContinueSuccessor extends SuccessorType, CfgImpl::TContinueSuccessor {
final override string toString() { result = "continue" }
}
class ReturnSuccessor extends SuccessorType, CfgImpl::TReturnSuccessor {
final override string toString() { result = "return" }
}
class MatchingSuccessor extends ConditionalSuccessor, CfgImpl::TMatchingSuccessor {
MatchingSuccessor() { this = CfgImpl::TMatchingSuccessor(value) }
/** Holds if this is a match successor. */
predicate isMatch() { value = true }
override string toString() { if this.isMatch() then result = "match" else result = "no-match" }
}
class FallthroughSuccessor extends SuccessorType, CfgImpl::TFallthroughSuccessor {
final override string toString() { result = "fallthrough" }
}
class EmptinessSuccessor extends ConditionalSuccessor, CfgImpl::TEmptinessSuccessor {
EmptinessSuccessor() { this = CfgImpl::TEmptinessSuccessor(value) }
predicate isEmpty() { value = true }
override string toString() { if this.isEmpty() then result = "empty" else result = "non-empty" }
}
class ExceptionSuccessor extends SuccessorType, CfgImpl::TExceptionSuccessor {
override string toString() { result = "exception" }
}
}

View File

@@ -8,7 +8,6 @@ private import swift
private import codeql.swift.controlflow.ControlFlowGraph private import codeql.swift.controlflow.ControlFlowGraph
private import ControlFlowElements private import ControlFlowElements
private import ControlFlowGraphImpl private import ControlFlowGraphImpl
private import SuccessorTypes
private newtype TCompletion = private newtype TCompletion =
TSimpleCompletion() or TSimpleCompletion() or
@@ -324,7 +323,7 @@ abstract class NormalCompletion extends Completion {
/** A simple (normal) completion. */ /** A simple (normal) completion. */
class SimpleCompletion extends NormalCompletion, TSimpleCompletion { class SimpleCompletion extends NormalCompletion, TSimpleCompletion {
override NormalSuccessor getAMatchingSuccessorType() { any() } override DirectSuccessor getAMatchingSuccessorType() { any() }
override string toString() { result = "simple" } override string toString() { result = "simple" }
} }
@@ -468,7 +467,7 @@ class FallthroughCompletion extends Completion, TFallthroughCompletion {
FallthroughCompletion() { this = TFallthroughCompletion(dest) } FallthroughCompletion() { this = TFallthroughCompletion(dest) }
override FallthroughSuccessor getAMatchingSuccessorType() { any() } override DirectSuccessor getAMatchingSuccessorType() { any() }
CaseStmt getDestination() { result = dest } CaseStmt getDestination() { result = dest }

View File

@@ -1976,18 +1976,6 @@ private module Cached {
result = n.(FuncDeclElement).getAst() or result = n.(FuncDeclElement).getAst() or
result = n.(KeyPathElement).getAst() result = n.(KeyPathElement).getAst()
} }
cached
newtype TSuccessorType =
TSuccessorSuccessor() or
TBooleanSuccessor(boolean b) { b in [false, true] } or
TBreakSuccessor() or
TContinueSuccessor() or
TReturnSuccessor() or
TMatchingSuccessor(boolean match) { match in [false, true] } or
TFallthroughSuccessor() or
TEmptinessSuccessor(boolean isEmpty) { isEmpty in [false, true] } or
TExceptionSuccessor()
} }
import Cached import Cached

View File

@@ -48,33 +48,11 @@ module CfgInput implements InputSig<Location> {
CfgScope getCfgScope(AstNode n) { result = scopeOfAst(n.asAstNode()) } CfgScope getCfgScope(AstNode n) { result = scopeOfAst(n.asAstNode()) }
class SuccessorType = Cfg::SuccessorType; private class SuccessorType = Cfg::SuccessorType;
/** Gets a successor type that matches completion `c`. */ /** Gets a successor type that matches completion `c`. */
SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() } SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() }
/**
* Hold if `c` represents simple (normal) evaluation of a statement or an
* expression.
*/
predicate successorTypeIsSimple(SuccessorType t) {
t instanceof Cfg::SuccessorTypes::NormalSuccessor
}
/** Holds if `t` is an abnormal exit type out of a CFG scope. */
predicate isAbnormalExitType(SuccessorType t) {
t instanceof Cfg::SuccessorTypes::ExceptionSuccessor
}
/** Hold if `t` represents a conditional successor type. */
predicate successorTypeIsCondition(SuccessorType t) {
t instanceof Cfg::SuccessorTypes::BooleanSuccessor or
t instanceof Cfg::SuccessorTypes::BreakSuccessor or
t instanceof Cfg::SuccessorTypes::ContinueSuccessor or
t instanceof Cfg::SuccessorTypes::MatchingSuccessor or
t instanceof Cfg::SuccessorTypes::EmptinessSuccessor
}
/** Holds if `first` is first executed when entering `scope`. */ /** Holds if `first` is first executed when entering `scope`. */
predicate scopeFirst(CfgScope scope, AstNode first) { predicate scopeFirst(CfgScope scope, AstNode first) {
scope.(Impl::CfgScope::Range_).entry(first) scope.(Impl::CfgScope::Range_).entry(first)

View File

@@ -108,7 +108,7 @@ private class DefaultPathInjectionBarrier extends PathInjectionBarrier {
TaintTracking::localTaint(validated, DataFlow::exprNode(normalize.getQualifier())) and TaintTracking::localTaint(validated, DataFlow::exprNode(normalize.getQualifier())) and
DataFlow::localExprFlow(normalize, starts.getQualifier()) and DataFlow::localExprFlow(normalize, starts.getQualifier()) and
DataFlow::localFlow(validated, this) and DataFlow::localFlow(validated, this) and
exists(ConditionBlock bb, SuccessorTypes::BooleanSuccessor b | exists(ConditionBlock bb, BooleanSuccessor b |
bb.getANode().getNode().asAstNode().(IfStmt).getACondition() = getImmediateParent*(starts) and bb.getANode().getNode().asAstNode().(IfStmt).getACondition() = getImmediateParent*(starts) and
b.getValue() = true b.getValue() = true
| |