mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Merge pull request #20300 from aschackmull/cfg/successortype
Shared: Add a shared SuccessorType implementation
This commit is contained in:
@@ -3,6 +3,8 @@ private import codeql.controlflow.Cfg as CfgShared
|
||||
private import codeql.Locations
|
||||
|
||||
module Completion {
|
||||
import codeql.controlflow.SuccessorType
|
||||
|
||||
private newtype TCompletion =
|
||||
TSimpleCompletion() 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 NormalSuccessor getAMatchingSuccessorType() { any() }
|
||||
override DirectSuccessor getAMatchingSuccessorType() { any() }
|
||||
}
|
||||
|
||||
class BooleanCompletion extends NormalCompletion, TBooleanCompletion {
|
||||
@@ -49,34 +51,6 @@ module Completion {
|
||||
|
||||
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 {
|
||||
@@ -127,14 +101,8 @@ private module Implementation implements CfgShared::InputSig<Location> {
|
||||
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() }
|
||||
|
||||
predicate isAbnormalExitType(SuccessorType t) { none() }
|
||||
|
||||
int idOfAstNode(AstNode node) { none() }
|
||||
|
||||
int idOfCfgScope(CfgScope scope) { none() }
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
* Provides classes that specify the conditions under which control flows along a given edge.
|
||||
*/
|
||||
|
||||
private import codeql.controlflow.SuccessorType
|
||||
private import internal.EdgeKindInternal
|
||||
|
||||
private newtype TEdgeKind =
|
||||
@@ -28,6 +29,21 @@ abstract private class EdgeKindImpl extends TEdgeKind {
|
||||
|
||||
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`
|
||||
* or `IRBlock`.
|
||||
|
||||
@@ -265,9 +265,9 @@ private predicate isEntryBlock(TIRBlock block) {
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@@ -280,7 +280,12 @@ module IRCfg implements BB::CfgSig<Language::Location> {
|
||||
|
||||
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) }
|
||||
|
||||
|
||||
@@ -265,9 +265,9 @@ private predicate isEntryBlock(TIRBlock block) {
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@@ -280,7 +280,12 @@ module IRCfg implements BB::CfgSig<Language::Location> {
|
||||
|
||||
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) }
|
||||
|
||||
|
||||
@@ -265,9 +265,9 @@ private predicate isEntryBlock(TIRBlock block) {
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@@ -280,7 +280,12 @@ module IRCfg implements BB::CfgSig<Language::Location> {
|
||||
|
||||
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) }
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@ module Stages {
|
||||
cached
|
||||
module ControlFlowStage {
|
||||
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
|
||||
|
||||
cached
|
||||
@@ -20,8 +19,6 @@ module Stages {
|
||||
private predicate forceCachingInSameStageRev() {
|
||||
exists(Split s)
|
||||
or
|
||||
exists(SuccessorType st)
|
||||
or
|
||||
exists(ControlFlow::Node n)
|
||||
or
|
||||
Guards::Internal::isCustomNullCheck(_, _, _, _)
|
||||
|
||||
@@ -6,9 +6,7 @@ private import semmle.code.csharp.commons.StructuralComparison as StructuralComp
|
||||
|
||||
pragma[noinline]
|
||||
private predicate isConstantCondition0(ControlFlow::Node cfn, boolean b) {
|
||||
exists(
|
||||
cfn.getASuccessorByType(any(ControlFlow::SuccessorTypes::BooleanSuccessor t | t.getValue() = b))
|
||||
) and
|
||||
exists(cfn.getASuccessorByType(any(ControlFlow::BooleanSuccessor t | t.getValue() = b))) and
|
||||
strictcount(ControlFlow::SuccessorType t | exists(cfn.getASuccessorByType(t))) = 1
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*/
|
||||
|
||||
import csharp
|
||||
private import ControlFlow::SuccessorTypes
|
||||
private import ControlFlow
|
||||
private import semmle.code.csharp.controlflow.internal.ControlFlowGraphImpl as CfgImpl
|
||||
private import CfgImpl::BasicBlocks as BasicBlocksImpl
|
||||
private import codeql.controlflow.BasicBlock as BB
|
||||
@@ -346,8 +346,6 @@ private class EntryBasicBlockAlias = EntryBasicBlock;
|
||||
module Cfg implements BB::CfgSig<Location> {
|
||||
class ControlFlowNode = ControlFlow::Node;
|
||||
|
||||
class SuccessorType = ControlFlow::SuccessorType;
|
||||
|
||||
class BasicBlock = BasicBlockAlias;
|
||||
|
||||
class EntryBasicBlock = EntryBasicBlockAlias;
|
||||
|
||||
@@ -5,7 +5,6 @@ private import semmle.code.csharp.ExprOrStmtParent
|
||||
private import semmle.code.csharp.commons.Compilation
|
||||
private import ControlFlow
|
||||
private import ControlFlow::BasicBlocks
|
||||
private import SuccessorTypes
|
||||
private import semmle.code.csharp.Caching
|
||||
private import internal.ControlFlowGraphImpl as Impl
|
||||
|
||||
|
||||
@@ -6,7 +6,6 @@ import csharp
|
||||
module ControlFlow {
|
||||
private import semmle.code.csharp.controlflow.BasicBlocks as BBs
|
||||
import semmle.code.csharp.controlflow.internal.SuccessorType
|
||||
private import SuccessorTypes
|
||||
private import internal.ControlFlowGraphImpl as Impl
|
||||
private import internal.Splitting as Splitting
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
*/
|
||||
|
||||
import csharp
|
||||
private import ControlFlow::SuccessorTypes
|
||||
private import ControlFlow
|
||||
private import semmle.code.csharp.commons.Assertions
|
||||
private import semmle.code.csharp.commons.ComparisonTest
|
||||
private import semmle.code.csharp.commons.StructuralComparison as SC
|
||||
@@ -1424,6 +1424,7 @@ module Internal {
|
||||
|
||||
cached
|
||||
predicate isGuard(Expr e, AbstractValue val) {
|
||||
Stages::ControlFlowStage::forceCachingInSameStage() and
|
||||
(
|
||||
e.getType() instanceof BoolType and
|
||||
not e instanceof BoolLiteral and
|
||||
|
||||
@@ -26,7 +26,6 @@ private import semmle.code.csharp.frameworks.System
|
||||
private import ControlFlowGraphImpl
|
||||
private import NonReturning
|
||||
private import SuccessorType
|
||||
private import SuccessorTypes
|
||||
|
||||
private newtype TCompletion =
|
||||
TSimpleCompletion() or
|
||||
@@ -573,7 +572,7 @@ abstract private class NonNestedNormalCompletion extends NormalCompletion { }
|
||||
|
||||
/** A simple (normal) completion. */
|
||||
class SimpleCompletion extends NonNestedNormalCompletion, TSimpleCompletion {
|
||||
override NormalSuccessor getAMatchingSuccessorType() { any() }
|
||||
override DirectSuccessor getAMatchingSuccessorType() { any() }
|
||||
|
||||
override string toString() { result = "normal" }
|
||||
}
|
||||
@@ -857,7 +856,7 @@ class GotoCompletion extends Completion {
|
||||
/** Gets the label of the `goto` completion. */
|
||||
string getLabel() { result = label }
|
||||
|
||||
override GotoSuccessor getAMatchingSuccessorType() { result.getLabel() = label }
|
||||
override GotoSuccessor getAMatchingSuccessorType() { any() }
|
||||
|
||||
override string toString() {
|
||||
// `NestedCompletion` defines `toString()` for the other case
|
||||
@@ -880,7 +879,7 @@ class ThrowCompletion extends Completion {
|
||||
/** Gets the type of the exception being thrown. */
|
||||
ExceptionClass getExceptionClass() { result = ec }
|
||||
|
||||
override ExceptionSuccessor getAMatchingSuccessorType() { result.getExceptionClass() = ec }
|
||||
override ExceptionSuccessor getAMatchingSuccessorType() { any() }
|
||||
|
||||
override string toString() {
|
||||
// `NestedCompletion` defines `toString()` for the other case
|
||||
|
||||
@@ -79,23 +79,10 @@ private module CfgInput implements CfgShared::InputSig<Location> {
|
||||
Impl::scopeLast(scope, last, c)
|
||||
}
|
||||
|
||||
class SuccessorType = ST::SuccessorType;
|
||||
private class SuccessorType = ST::SuccessorType;
|
||||
|
||||
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 idOfCfgScope(CfgScope node) { result = idOfAstNode(node) }
|
||||
|
||||
@@ -150,7 +150,7 @@ class ConditionBlock extends PreBasicBlock {
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
predicate controls(PreBasicBlock controlled, Cfg::SuccessorTypes::ConditionalSuccessor s) {
|
||||
predicate controls(PreBasicBlock controlled, Cfg::ConditionalSuccessor s) {
|
||||
exists(PreBasicBlock succ, ConditionalCompletion c |
|
||||
conditionBlockImmediatelyControls(this, succ, c)
|
||||
|
|
||||
@@ -163,8 +163,6 @@ class ConditionBlock extends PreBasicBlock {
|
||||
module PreCfg implements BB::CfgSig<Location> {
|
||||
class ControlFlowNode = ControlFlowElement;
|
||||
|
||||
class SuccessorType = Cfg::SuccessorType;
|
||||
|
||||
class BasicBlock = PreBasicBlock;
|
||||
|
||||
class EntryBasicBlock extends BasicBlock {
|
||||
|
||||
@@ -82,6 +82,8 @@ module PreSsa {
|
||||
}
|
||||
|
||||
module SsaInput implements SsaImplCommon::InputSig<Location, PreBasicBlocks::PreBasicBlock> {
|
||||
private import semmle.code.csharp.Caching
|
||||
|
||||
private class ExitBasicBlock extends PreBasicBlocks::PreBasicBlock {
|
||||
ExitBasicBlock() { scopeLast(_, this.getLastNode(), _) }
|
||||
}
|
||||
@@ -124,6 +126,7 @@ module PreSsa {
|
||||
predicate variableWrite(
|
||||
PreBasicBlocks::PreBasicBlock bb, int i, SourceVariable v, boolean certain
|
||||
) {
|
||||
Stages::ControlFlowStage::forceCachingInSameStage() and
|
||||
exists(AssignableDefinition def |
|
||||
definitionAt(def, bb, i, v) and
|
||||
if def.getTargetAccess().isRefArgument() then certain = false else certain = true
|
||||
|
||||
@@ -471,7 +471,7 @@ module FinallySplitting {
|
||||
* the `finally` block exits normally).
|
||||
*/
|
||||
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`. */
|
||||
predicate isSplitForEntryCompletion(Completion c) {
|
||||
@@ -479,7 +479,7 @@ module FinallySplitting {
|
||||
then
|
||||
// If the entry into the `finally` block completes with any normal completion,
|
||||
// it simply means normal execution after the `finally` block
|
||||
this instanceof Cfg::SuccessorTypes::NormalSuccessor
|
||||
this instanceof Cfg::DirectSuccessor
|
||||
else this = c.getAMatchingSuccessorType()
|
||||
}
|
||||
}
|
||||
@@ -533,7 +533,7 @@ module FinallySplitting {
|
||||
int getNestLevel() { result = nestLevel }
|
||||
|
||||
override string toString() {
|
||||
if type instanceof Cfg::SuccessorTypes::NormalSuccessor
|
||||
if type instanceof Cfg::DirectSuccessor
|
||||
then result = ""
|
||||
else
|
||||
if nestLevel > 0
|
||||
@@ -617,14 +617,14 @@ module FinallySplitting {
|
||||
or
|
||||
not c instanceof NormalCompletion
|
||||
or
|
||||
type instanceof Cfg::SuccessorTypes::NormalSuccessor
|
||||
type instanceof Cfg::DirectSuccessor
|
||||
)
|
||||
else (
|
||||
// Finally block can exit with completion `c` inherited from try/catch
|
||||
// block: must match this split
|
||||
inherited = true and
|
||||
type = c.getAMatchingSuccessorType() and
|
||||
not type instanceof Cfg::SuccessorTypes::NormalSuccessor
|
||||
not type instanceof Cfg::DirectSuccessor
|
||||
)
|
||||
)
|
||||
or
|
||||
@@ -657,7 +657,7 @@ module FinallySplitting {
|
||||
exists(FinallySplit outer |
|
||||
outer.getNestLevel() = super.getNestLevel() - 1 and
|
||||
outer.(FinallySplitImpl).exit(pred, c, inherited) and
|
||||
super.getType() instanceof Cfg::SuccessorTypes::NormalSuccessor and
|
||||
super.getType() instanceof Cfg::DirectSuccessor and
|
||||
inherited = true
|
||||
)
|
||||
}
|
||||
|
||||
@@ -4,329 +4,4 @@
|
||||
* Provides different types of control flow successor types.
|
||||
*/
|
||||
|
||||
import csharp
|
||||
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" }
|
||||
}
|
||||
}
|
||||
import codeql.controlflow.SuccessorType
|
||||
|
||||
@@ -151,9 +151,7 @@ private predicate exprImpliesSsaDef(
|
||||
* If the returned element takes the `s` branch, then `def` is guaranteed to be
|
||||
* `null` if `nv.isNull()` holds, and non-`null` otherwise.
|
||||
*/
|
||||
private ControlFlowElement getANullCheck(
|
||||
Ssa::Definition def, SuccessorTypes::ConditionalSuccessor s, NullValue nv
|
||||
) {
|
||||
private ControlFlowElement getANullCheck(Ssa::Definition def, ConditionalSuccessor s, NullValue 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()
|
||||
)
|
||||
) and
|
||||
not exists(SuccessorTypes::ConditionalSuccessor s, NullValue nv |
|
||||
not exists(ConditionalSuccessor s, NullValue nv |
|
||||
bb1.getLastNode() = getANullCheck(def1, s, nv).getAControlFlowNode()
|
||||
|
|
||||
bb2 = bb1.getASuccessor(s) and
|
||||
|
||||
@@ -28,7 +28,7 @@ module BaseSsa {
|
||||
private predicate implicitEntryDef(
|
||||
Callable c, ControlFlow::BasicBlocks::EntryBlock bb, SsaInput::SourceVariable v
|
||||
) {
|
||||
exists(ControlFlow::ControlFlow::BasicBlocks::EntryBlock entry |
|
||||
exists(ControlFlow::BasicBlocks::EntryBlock entry |
|
||||
c = entry.getCallable() and
|
||||
// In case `c` has multiple bodies, we want each body to get its own implicit
|
||||
// entry definition. In case `c` doesn't have multiple bodies, the line below
|
||||
|
||||
@@ -2583,9 +2583,7 @@ class NodeRegion instanceof ControlFlow::BasicBlock {
|
||||
* Holds if the nodes in `nr` are unreachable when the call context is `call`.
|
||||
*/
|
||||
predicate isUnreachableInCall(NodeRegion nr, DataFlowCall call) {
|
||||
exists(
|
||||
ExplicitParameterNode paramNode, Guard guard, ControlFlow::SuccessorTypes::BooleanSuccessor bs
|
||||
|
|
||||
exists(ExplicitParameterNode paramNode, Guard guard, ControlFlow::BooleanSuccessor bs |
|
||||
viableConstantBooleanParamArg(paramNode, bs.getValue().booleanNot(), call) and
|
||||
paramNode.getSsaDefinition().getARead() = guard and
|
||||
guard.controlsBlock(nr, bs, _)
|
||||
|
||||
@@ -818,8 +818,8 @@ private module Cached {
|
||||
}
|
||||
|
||||
cached
|
||||
predicate implicitEntryDefinition(ControlFlow::ControlFlow::BasicBlock bb, Ssa::SourceVariable v) {
|
||||
exists(ControlFlow::ControlFlow::BasicBlocks::EntryBlock entry, Callable c |
|
||||
predicate implicitEntryDefinition(ControlFlow::BasicBlock bb, Ssa::SourceVariable v) {
|
||||
exists(ControlFlow::BasicBlocks::EntryBlock entry, Callable c |
|
||||
c = entry.getCallable() and
|
||||
// In case `c` has multiple bodies, we want each body to get its own implicit
|
||||
// entry definition. In case `c` doesn't have multiple bodies, the line below
|
||||
@@ -1045,7 +1045,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu
|
||||
* from `bb1` to `bb2`.
|
||||
*/
|
||||
predicate hasValueBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue branch) {
|
||||
exists(ControlFlow::SuccessorTypes::ConditionalSuccessor s |
|
||||
exists(ControlFlow::ConditionalSuccessor s |
|
||||
this.getAControlFlowNode() = bb1.getLastNode() and
|
||||
bb2 = bb1.getASuccessor(s) and
|
||||
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`. */
|
||||
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
|
||||
s.getValue() = branch and
|
||||
conditionBlock.edgeDominates(bb, s)
|
||||
|
||||
@@ -74,7 +74,7 @@ class ReverseDnsSource extends Source {
|
||||
|
||||
pragma[noinline]
|
||||
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, _))
|
||||
}
|
||||
@@ -82,9 +82,7 @@ private predicate conditionControlsCall0(
|
||||
private predicate conditionControlsCall(
|
||||
SensitiveExecutionMethodCall call, SensitiveExecutionMethod def, Expr e, boolean cond
|
||||
) {
|
||||
exists(ControlFlow::SuccessorTypes::BooleanSuccessor s | cond = s.getValue() |
|
||||
conditionControlsCall0(call, e, s)
|
||||
) and
|
||||
exists(ControlFlow::BooleanSuccessor s | cond = s.getValue() | conditionControlsCall0(call, e, s)) and
|
||||
def = call.getTarget().getUnboundDeclaration()
|
||||
}
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ class ConstantNullnessCondition extends ConstantCondition {
|
||||
|
||||
ConstantNullnessCondition() {
|
||||
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)
|
||||
|
|
||||
b = t.getValue() and
|
||||
@@ -112,7 +112,7 @@ class ConstantMatchingCondition extends ConstantCondition {
|
||||
|
||||
ConstantMatchingCondition() {
|
||||
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()
|
||||
) and
|
||||
strictcount(ControlFlow::SuccessorType t | exists(cfn.getASuccessorByType(t))) = 1
|
||||
|
||||
@@ -21,10 +21,10 @@ predicate loginMethod(Method m, ControlFlow::SuccessorType flowFrom) {
|
||||
or
|
||||
m = any(SystemWebSecurityFormsAuthenticationClass c).getAuthenticateMethod()
|
||||
) and
|
||||
flowFrom.(ControlFlow::SuccessorTypes::BooleanSuccessor).getValue() = true
|
||||
flowFrom.(ControlFlow::BooleanSuccessor).getValue() = true
|
||||
or
|
||||
m = any(SystemWebSecurityFormsAuthenticationClass c).getSignOutMethod() and
|
||||
flowFrom instanceof ControlFlow::SuccessorTypes::NormalSuccessor
|
||||
flowFrom instanceof ControlFlow::DirectSuccessor
|
||||
}
|
||||
|
||||
/** The `System.Web.SessionState.HttpSessionState` class. */
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
| 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: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: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 |
|
||||
|
||||
@@ -435,33 +435,32 @@
|
||||
| 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 | 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: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 (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: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: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: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: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 | 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: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: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: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: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 | 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 |
|
||||
@@ -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: 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: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: 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(1): exception] {...} | Finally.cs:97:21:97:23 | [finally(1): 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: 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: 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.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 |
|
||||
@@ -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: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: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: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(NullReferenceException)] {...} | Finally.cs:114:19:114:35 | [finally: exception(NullReferenceException)] ... == ... | 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.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(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: exception] !... | Finally.cs:114:17:114:36 | [false, finally: exception] !... | 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 | [true, finally: exception(Exception)] !... | Finally.cs:114:17:114:36 | [true, finally: exception(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: exception] !... | Finally.cs:114:17:114:36 | [true, finally: exception] !... | 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: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(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: exception] ...; | Finally.cs:115:17:115:40 | [finally: exception] 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(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: exception] if (...) ... | Finally.cs:116:17:116:32 | [finally: exception] ... > ... | 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: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(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: exception] ...; | Finally.cs:117:17:117:36 | [finally: exception] 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: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: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: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 (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: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: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: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(Exception)] 1 | Finally.cs:158:21:158:36 | [finally: exception(Exception)] ... == ... | 2 |
|
||||
| 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:158:36:158:36 | [finally: exception] 1 | Finally.cs:158:21:158:36 | [finally: 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 | 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 | [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(Exception)] "1" | Finally.cs:159:27:159:44 | [finally: exception(Exception)] 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: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 | [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(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), 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: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, exception: NullReferenceException] catch (...) {...} | Finally.cs:161:13:164:13 | [finally: 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: 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(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), exception: Exception] Exception e | Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | 5 |
|
||||
| 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: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, exception: NullReferenceException] Exception e | Finally.cs:161:39:161:54 | [finally: exception, exception: NullReferenceException] ... == ... | 5 |
|
||||
| Finally.cs:162:13:164:13 | [finally: exception] {...} | Finally.cs:163:17:163:42 | [finally: 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: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(Exception)] catch {...} | Finally.cs:167:17:167:37 | [finally: exception(Exception)] 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 | 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: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 (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: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: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 | [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(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: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: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(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: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: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(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: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: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 | [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: 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(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: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: 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: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(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(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: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:190:31:190:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:190:25:190:47 | [finally: exception] 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 | 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: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: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: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(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:209:21:209:22 | [finally(1): exception(ExceptionB)] access to parameter b3 | 4 |
|
||||
| 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:25:205:47 | [finally: exception] throw ...; | Finally.cs:205:25:205:47 | [finally: exception] throw ...; | 1 |
|
||||
| Finally.cs:205:25:205:47 | throw ...; | Finally.cs:205:25:205:47 | throw ...; | 1 |
|
||||
| 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 | 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: 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(Exception)] {...} | Finally.cs:209:21:209:22 | [finally: exception(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(1): exception] {...} | Finally.cs:209:21:209:22 | [finally(1): 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] {...} | Finally.cs:209:21:209:22 | [finally: exception] 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(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(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(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 | [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: 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] object creation of type ExceptionC | Finally.cs:209:25:209:47 | [finally: exception] 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: exception(Exception)] ...; | Finally.cs:211:13:211:28 | [finally: exception(Exception)] ... = ... | 4 |
|
||||
| Finally.cs:211:13:211:29 | [finally: exception(ExceptionA)] ...; | Finally.cs:211:13:211:28 | [finally: exception(ExceptionA)] ... = ... | 4 |
|
||||
| Finally.cs:211:13:211:29 | [finally: exception] ...; | Finally.cs:211:13:211:28 | [finally: exception] ... = ... | 4 |
|
||||
| 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: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 | 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:246:25:246:26 | [finally: exception(ExceptionA)] access to parameter b2 | 6 |
|
||||
| Finally.cs:240:21:240:43 | throw ...; | Finally.cs:240:21:240:43 | throw ...; | 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: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(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:251:21:251:54 | [finally(1): exception(ExceptionA)] call to method WriteLine | 5 |
|
||||
| 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:25:247:47 | [finally: exception] throw ...; | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | 1 |
|
||||
| Finally.cs:247:25:247:47 | throw ...; | Finally.cs:247:25:247:47 | throw ...; | 1 |
|
||||
| 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 | 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: 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(Exception)] {...} | Finally.cs:251:21:251:54 | [finally: exception(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(1): exception] {...} | Finally.cs:251:21:251:54 | [finally(1): 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] {...} | Finally.cs:251:21:251:54 | [finally: exception] call to method WriteLine | 4 |
|
||||
| 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(ExceptionA)] {...} | Finally.cs:258:13:258:46 | [finally: exception(ExceptionA)] 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.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 | 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 |
|
||||
| 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 |
|
||||
|
||||
@@ -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: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: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: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: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: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 |
|
||||
@@ -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: 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: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: break, 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] {...} | 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: 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 | {...} | 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: 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:96:17:98:17 | [finally(1): exception(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(1): 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: 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: 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 | {...} | 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: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: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 |
|
||||
@@ -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: 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:96:17:98:17 | [finally(1): exception(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(1): 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: 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 | {...} | 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: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: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 |
|
||||
@@ -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: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:96:17:98:17 | [finally(1): exception(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(1): exception] {...} | false |
|
||||
| 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 | {...} | 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: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: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: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: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 |
|
||||
@@ -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: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: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] !... | 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] !... | 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: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 | 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 | [finally: exception(OutOfMemoryException)] ...; | false |
|
||||
| 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 | [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: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: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 | [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: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:117:17:117:37 | ...; | false |
|
||||
| Finally.cs:109:33:109:33 | 1 | Finally.cs:117:17:117:37 | [finally: exception(OutOfMemoryException)] ...; | true |
|
||||
| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:114:17:114:36 | [false, finally: exception(OutOfMemoryException)] !... | true |
|
||||
| Finally.cs:110:17:110:49 | throw ...; | Finally.cs:114:17:114:36 | [true, finally: exception(OutOfMemoryException)] !... | 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: exception] {...} | Finally.cs:114:17:114:36 | [false, finally: exception] !... | true |
|
||||
| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:114:17:114:36 | [true, finally: exception] !... | false |
|
||||
| Finally.cs:113:9:118:9 | [finally: exception] {...} | Finally.cs:115:17:115:41 | [finally: exception] ...; | 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 | [true] !... | 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(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: exception] !... | Finally.cs:115:17:115:41 | [finally: exception] ...; | 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: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(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: exception] if (...) ... | Finally.cs:117:17:117:37 | [finally: exception] ...; | 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: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: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: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: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(Exception)] 1 | 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:158:36:158:36 | [finally: 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 | 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 | [finally: exception(ArgumentNullException)] "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:159:41:159:43 | [finally: 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: 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(ArgumentNullException), 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: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, 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: 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(ArgumentNullException), 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: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: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, exception: NullReferenceException] 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: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(Exception)] 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 | 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: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(ArgumentNullException)] 1 | Finally.cs:159:41:159:43 | [finally: exception(ArgumentNullException)] "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: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] 1 | Finally.cs:159:41:159:43 | [finally: 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: 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(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), 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: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, exception: NullReferenceException] catch (...) {...} | Finally.cs:161:30:161:30 | [finally: 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: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: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 | [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(ExceptionA), 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: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(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: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: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(ExceptionA), 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: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 | [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: 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: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: 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 | [finally: exception(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(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: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:190:31:190:46 | [finally: exception] 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: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: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: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(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(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(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(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(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(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:186:25:186:47 | [finally: 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: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, 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, 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, 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, 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, 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 | [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(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: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: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(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(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: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: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: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: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: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(ExceptionA)] 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 | 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(ExceptionA)] 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 | 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: exception(Exception), finally(1): exception(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(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 | [finally(1): exception] {...} | false |
|
||||
| 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] {...} | 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: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(ExceptionB)] object creation of type ExceptionC | false |
|
||||
| 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(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 | [finally(1): exception] 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] 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: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(ExceptionA)] ...; | true |
|
||||
| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:205:25:205:47 | [finally: exception(ExceptionA)] throw ...; | 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:199:21:199:43 | throw ...; | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA), finally(1): exception(Exception)] {...} | true |
|
||||
| Finally.cs:199:21:199:43 | throw ...; | Finally.cs:208:13:210:13 | [finally: exception(ExceptionA)] {...} | false |
|
||||
| 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: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: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:195:10:195:12 | enter M10 | Finally.cs:211:13:211:29 | [finally: exception] ...; | true |
|
||||
| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:205:25:205:47 | [finally: exception] 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:202:9:212:9 | [finally: exception] {...} | Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | true |
|
||||
| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:208:13:210:13 | [finally: exception] {...} | 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:202:9:212:9 | [finally: exception] {...} | Finally.cs:209:31:209:46 | [finally: exception] object creation of type ExceptionC | false |
|
||||
| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:211:13:211:29 | [finally: 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: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: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(ExceptionB)] 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 | object creation of type ExceptionC | 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: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: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(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(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(1): exception] {...} | Finally.cs:209:31:209:46 | [finally(1): exception] 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: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: exception] {...} | Finally.cs:211:13:211:29 | [finally: exception] ...; | 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: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: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: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(ExceptionA)] 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 | 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(ExceptionA)] 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 | 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: exception(Exception), finally(1): exception(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(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 | [finally(1): exception] {...} | false |
|
||||
| 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] {...} | 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: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:240:21:240:43 | throw ...; | Finally.cs:247:31:247:46 | [finally: exception(ExceptionA)] 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:240:21:240:43 | throw ...; | Finally.cs:250:17:252:17 | [finally: exception(ExceptionA)] {...} | 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: exception] {...} | Finally.cs:247:25:247:47 | [finally: exception] throw ...; | 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:243:13:253:13 | [finally: exception] {...} | Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | true |
|
||||
| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:250:17:252:17 | [finally: 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: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:257:9:259:9 | {...} | false |
|
||||
| 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: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: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(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: exception] !... | Finally.cs:116:13:117:37 | [finally: exception] 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 | [true, finally: exception(Exception)] !... | Finally.cs:115:17:115:41 | [finally: exception(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: exception] !... | Finally.cs:115:17:115:41 | [finally: exception] ...; | 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: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: exception(Exception)] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception(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(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: exception] ... == ... | Finally.cs:114:17:114:36 | [false, finally: exception] !... | true |
|
||||
| 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: 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: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: exception(Exception)] ... > ... | Finally.cs:117:17:117:37 | [finally: exception(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: exception] ... > ... | Finally.cs:117:17:117:37 | [finally: exception] ...; | 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: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: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(Exception)] ... == ... | Finally.cs:159:41:159:43 | [finally: exception(Exception)] "1" | true |
|
||||
| Finally.cs:158:21:158:36 | [finally: exception] ... == ... | Finally.cs:159:41:159:43 | [finally: 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: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: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(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] 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(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] 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: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, exception: Exception] ... == ... | Finally.cs:165:13:168:13 | [finally: exception] catch {...} | false |
|
||||
| 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, exception: NullReferenceException] ... == ... | Finally.cs:165:13:168:13 | [finally: 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: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: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(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: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: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 | [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: 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(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: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: 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: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(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: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: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: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(Exception)] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception(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 | [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] access to parameter b2 | Finally.cs:208:13:210:13 | [finally: exception] {...} | 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: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(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(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(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(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 | [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: 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] 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] access to parameter b3 | Finally.cs:211:13:211:29 | [finally: exception] ...; | 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: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: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(Exception)] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception(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 | [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] access to parameter b2 | Finally.cs:250:17:252:17 | [finally: exception] {...} | 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:250:17:252:17 | {...} | false |
|
||||
| LoopUnrolling.cs:9:13:9:28 | ... == ... | LoopUnrolling.cs:10:13:10:19 | return ...; | true |
|
||||
|
||||
@@ -4,8 +4,7 @@ import ControlFlow
|
||||
query predicate conditionBlock(
|
||||
BasicBlocks::ConditionBlock cb, BasicBlock controlled, boolean testIsTrue
|
||||
) {
|
||||
cb.edgeDominates(controlled,
|
||||
any(SuccessorTypes::ConditionalSuccessor s | testIsTrue = s.getValue()))
|
||||
cb.edgeDominates(controlled, any(ConditionalSuccessor s | testIsTrue = s.getValue()))
|
||||
}
|
||||
|
||||
ControlFlow::Node successor(ControlFlow::Node node, boolean kind) {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -508,65 +508,45 @@ booleanNode
|
||||
| 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: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(ExceptionA), 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: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(ExceptionA), 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: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(ExceptionA), 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: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(ExceptionA), 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: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(ExceptionA), 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: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 | [finally: exception(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(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: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, 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 | 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(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: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, 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 (...) {...} | 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 (...) {...} | 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: 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), 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: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, 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 (...) {...} | b1 (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: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: 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 | [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: 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), 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: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, 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 | 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 | b2 (line 176): true |
|
||||
| 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(ExceptionA), 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: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(ExceptionA), 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: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(ExceptionA), 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 |
|
||||
| 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: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: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 {...} ... |
|
||||
| CompileTimeOperators.cs:36:9:38:9 | [finally: goto(End)] {...} | 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:41 | [finally: goto(End)] ...; | CompileTimeOperators.cs:30:9:38:9 | try {...} ... |
|
||||
| CompileTimeOperators.cs:37:31:37:39 | [finally: goto(End)] "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:15:13:15:40 | [finally: exception(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:31:15:39 | [finally: exception(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:38:17:38:44 | [finally: exception(ArgumentException)] 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:37:38:42 | [finally: exception(ArgumentException)] "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(IOException)] {...} | Finally.cs:21:9:51: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] call to method WriteLine | 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] "Finally" | CompileTimeOperators.cs:30:9:38: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] call to method WriteLine | 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] "Finally" | Finally.cs:9:9:16:9 | try {...} ... |
|
||||
| Finally.cs:37:13:39:13 | [finally: exception] {...} | 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] object creation of type Exception | 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] {...} | 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(IOException)] 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: 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(IOException)] ...; | 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: 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(IOException)] "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: 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(IOException)] {...} | 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: 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(IOException)] 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: 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(IOException)] ...; | 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: 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(IOException)] "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: 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: 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: 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:96:17:98:17 | [finally(1): exception(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(1): 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: 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: 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: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: break, 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] 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: 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:23 | [finally(1): exception(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(1): 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: 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: 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:24 | [finally(1): exception(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(1): 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: 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: 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:113:9:118:9 | [finally: exception(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: exception] {...} | 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(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: exception] 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(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: exception] !... | 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(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: exception] !... | 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(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: exception] access to field Field | 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: 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:30 | [finally: exception(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: exception] 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(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: exception] ... == ... | 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(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: exception] 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(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: exception] 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(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: exception] ...; | 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(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: exception] access to field Field | 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: 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:116:13:117:37 | [finally: exception(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: exception] 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(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: exception] access to field Field | 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: 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:28 | [finally: exception(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: exception] 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(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: exception] ... > ... | 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(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: exception] 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(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: exception] 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(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: exception] ...; | 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(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: exception] 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:141:13:141:44 | [finally: exception(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:41:141:42 | [finally: exception(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(Exception)] {...} | 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:156:13:168:13 | [finally: exception(Exception)] try {...} ... | 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:157:13:160:13 | [finally: exception(Exception)] {...} | 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:17:159:45 | [finally: exception(Exception)] if (...) ... | 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:158:21:158:24 | [finally: exception(Exception)] access to parameter args | 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:158:21:158:31 | [finally: exception(Exception)] access to property Length | 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:158:21:158:36 | [finally: exception(Exception)] ... == ... | 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:158:36:158:36 | [finally: exception(Exception)] 1 | 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:159:21:159:45 | [finally: exception(Exception)] throw ...; | 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:159:27:159:44 | [finally: exception(Exception)] object creation of type 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:159:41:159:43 | [finally: 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:13:164:13 | [finally: exception(ArgumentNullException), exception: NullReferenceException] catch (...) {...} | 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:161:13:164:13 | [finally: exception(Exception), exception: NullReferenceException] catch (...) {...} | 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:161:30:161:30 | [finally: exception(ArgumentNullException), exception: NullReferenceException] Exception e | 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:161:30:161:30 | [finally: exception(Exception), exception: NullReferenceException] Exception e | 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:161:39:161:39 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to local variable e | 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:161:39:161:39 | [finally: exception(Exception), exception: NullReferenceException] access to local variable e | 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:161:39:161:47 | [finally: exception(ArgumentNullException), exception: NullReferenceException] access to property Message | Finally.cs:149:9:169: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:161:39:161:47 | [finally: exception(Exception), exception: NullReferenceException] access to property Message | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: Exception] ... == ... | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:161:39:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] ... == ... | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: Exception] ... == ... | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:161:39:161:54 | [finally: exception(Exception), exception: NullReferenceException] ... == ... | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: Exception] "1" | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:161:52:161:54 | [finally: exception(ArgumentNullException), exception: NullReferenceException] "1" | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: Exception] "1" | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:161:52:161:54 | [finally: exception(Exception), exception: NullReferenceException] "1" | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:162:13:164:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:162:13:164:13 | [finally: exception(Exception)] {...} | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:163:17:163:42 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:163:17:163:42 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:163:17:163:43 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:163:17:163:43 | [finally: exception(Exception)] ...; | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:163:35:163:38 | [finally: exception(ArgumentNullException)] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:163:35:163:38 | [finally: exception(Exception)] access to parameter args | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:163:35:163:41 | [finally: exception(ArgumentNullException)] access to array element | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:163:35:163:41 | [finally: exception(Exception)] access to array element | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:163:40:163:40 | [finally: exception(ArgumentNullException)] 0 | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:163:40:163:40 | [finally: exception(Exception)] 0 | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:165:13:168:13 | [finally: exception(ArgumentNullException)] catch {...} | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:165:13:168:13 | [finally: exception(Exception)] catch {...} | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:166:13:168:13 | [finally: exception(ArgumentNullException)] {...} | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:166:13:168:13 | [finally: exception(Exception)] {...} | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:167:17:167:37 | [finally: exception(ArgumentNullException)] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:167:17:167:37 | [finally: exception(Exception)] call to method WriteLine | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:167:17:167:38 | [finally: exception(ArgumentNullException)] ...; | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:167:17:167:38 | [finally: exception(Exception)] ...; | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:167:35:167:36 | [finally: exception(ArgumentNullException)] "" | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:167:35:167:36 | [finally: exception(Exception)] "" | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:183:9:192:9 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... |
|
||||
| Finally.cs:183:9:192:9 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... |
|
||||
| Finally.cs:184:13:191:13 | [finally: exception(Exception), b1 (line 176): true] try {...} ... | Finally.cs:178:9:192:9 | try {...} ... |
|
||||
| Finally.cs:184:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] try {...} ... | Finally.cs:178:9:192:9 | try {...} ... |
|
||||
| Finally.cs:185:13:187:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... |
|
||||
| Finally.cs:185:13:187:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:178:9:192: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:186:17:186:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:178:9:192: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:186:21:186:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b2 | Finally.cs:178:9:192:9 | 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: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: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: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: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: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: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: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: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: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: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: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:189:13:191:13 | [finally: exception(Exception), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... |
|
||||
| Finally.cs:189:13:191:13 | [finally: exception(ExceptionA), b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... |
|
||||
| Finally.cs:190:17:190:47 | [finally: exception(Exception), b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | try {...} ... |
|
||||
| Finally.cs:190:17:190:47 | [finally: exception(ExceptionA), b1 (line 176): true] if (...) ... | Finally.cs:178:9:192:9 | 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:190:21:190:22 | [finally: exception(ExceptionA), b1 (line 176): true] access to parameter b1 | Finally.cs:178:9:192:9 | try {...} ... |
|
||||
| Finally.cs:190:25:190:47 | [finally: exception(Exception)] throw ...; | Finally.cs:178:9:192:9 | try {...} ... |
|
||||
| Finally.cs:190:25:190:47 | [finally: exception(ExceptionA)] throw ...; | Finally.cs:178:9:192: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:190:31:190:46 | [finally: exception(ExceptionA)] object creation of type ExceptionC | Finally.cs:178:9:192:9 | try {...} ... |
|
||||
| Finally.cs:202:9:212:9 | [finally: exception(Exception)] {...} | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:202:9:212:9 | [finally: exception(ExceptionA)] {...} | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:203:13:210:13 | [finally: exception(Exception)] try {...} ... | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:203:13:210:13 | [finally: exception(ExceptionA)] try {...} ... | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:204:13:206:13 | [finally: exception(Exception)] {...} | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:204:13:206:13 | [finally: exception(ExceptionA)] {...} | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:205:17:205:47 | [finally: exception(Exception)] if (...) ... | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:205:17:205:47 | [finally: exception(ExceptionA)] if (...) ... | Finally.cs:197:9:212: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 {...} ... |
|
||||
| Finally.cs:140:9:143:9 | [finally: exception] {...} | 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] object creation of type ArgumentException | 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] {...} | 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:157:13:160:13 | [finally: exception] {...} | 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:158:21:158:24 | [finally: exception] access to parameter args | 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:21:158:36 | [finally: exception] ... == ... | 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:159:21:159:45 | [finally: exception] throw ...; | 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:159:41:159:43 | [finally: exception] "1" | 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:161:13:164:13 | [finally: exception, exception: NullReferenceException] catch (...) {...} | 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:161:30:161:30 | [finally: exception, exception: NullReferenceException] Exception e | 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:161:39:161:39 | [finally: exception, exception: NullReferenceException] access to local variable e | 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:161:39:161:47 | [finally: exception, exception: NullReferenceException] access to property Message | 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:161:39:161:54 | [finally: exception, exception: NullReferenceException] ... == ... | 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:52:161:54 | [finally: exception, exception: NullReferenceException] "1" | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:162:13:164:13 | [finally: exception] {...} | 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:163:17:163:43 | [finally: exception] ...; | 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:163:35:163:41 | [finally: exception] access to array element | 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:165:13:168:13 | [finally: exception] catch {...} | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:166:13:168:13 | [finally: exception] {...} | 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:167:17:167:38 | [finally: exception] ...; | Finally.cs:149:9:169:9 | try {...} ... |
|
||||
| Finally.cs:167:35:167:36 | [finally: exception] "" | 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:184:13:191:13 | [finally: exception, b1 (line 176): true] try {...} ... | Finally.cs:178:9:192:9 | try {...} ... |
|
||||
| Finally.cs:185:13:187:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... |
|
||||
| Finally.cs:186:17:186:47 | [finally: exception, b1 (line 176): true] if (...) ... | Finally.cs:178:9:192: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:186:25:186:47 | [finally: exception, b1 (line 176): true, b2 (line 176): true] throw ...; | Finally.cs:178:9:192: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: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: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: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: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:189:13:191:13 | [finally: exception, b1 (line 176): true] {...} | Finally.cs:178:9:192:9 | try {...} ... |
|
||||
| Finally.cs:190:17:190:47 | [finally: exception, b1 (line 176): true] if (...) ... | Finally.cs:178:9:192: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:190:25:190:47 | [finally: exception] throw ...; | Finally.cs:178:9:192:9 | try {...} ... |
|
||||
| Finally.cs:190:31:190:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:178:9:192:9 | try {...} ... |
|
||||
| Finally.cs:202:9:212:9 | [finally: exception] {...} | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:203:13:210:13 | [finally: exception] try {...} ... | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:204:13:206:13 | [finally: exception] {...} | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:205:17:205:47 | [finally: exception] if (...) ... | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:205:21:205:22 | [finally: exception] access to parameter b2 | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:205:25:205:47 | [finally: exception] throw ...; | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:205:31:205:46 | [finally: exception] object creation of type ExceptionB | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:208:13:210:13 | [finally(1): exception] {...} | Finally.cs:203:13:210:13 | try {...} ... |
|
||||
| Finally.cs:208:13:210:13 | [finally: exception, finally(1): exception] {...} | Finally.cs:203:13:210:13 | try {...} ... |
|
||||
| Finally.cs:208:13:210:13 | [finally: exception] {...} | Finally.cs:203:13:210:13 | try {...} ... |
|
||||
| Finally.cs:209:17:209:47 | [finally(1): exception] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... |
|
||||
| Finally.cs:209:17:209:47 | [finally: exception, finally(1): exception] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... |
|
||||
| Finally.cs:209:17:209:47 | [finally: exception] if (...) ... | Finally.cs:203:13:210:13 | try {...} ... |
|
||||
| Finally.cs:209:21:209:22 | [finally(1): exception] access to parameter b3 | Finally.cs:203:13:210:13 | 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:209:21:209:22 | [finally: exception] access to parameter b3 | Finally.cs:203:13:210:13 | try {...} ... |
|
||||
| Finally.cs:209:25:209:47 | [finally(1): exception] throw ...; | Finally.cs:203:13:210:13 | try {...} ... |
|
||||
| Finally.cs:209:25:209:47 | [finally: exception, finally(1): exception] throw ...; | Finally.cs:203:13:210:13 | try {...} ... |
|
||||
| Finally.cs:209:25:209:47 | [finally: exception] throw ...; | Finally.cs:203:13:210:13 | try {...} ... |
|
||||
| Finally.cs:209:31:209:46 | [finally(1): exception] object creation of type ExceptionC | Finally.cs:203:13:210:13 | 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:209:31:209:46 | [finally: exception] object creation of type ExceptionC | Finally.cs:203:13:210:13 | try {...} ... |
|
||||
| Finally.cs:211:13:211:16 | [finally: exception] this access | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:211:13:211:28 | [finally: exception] ... = ... | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:211:13:211:29 | [finally: exception] ...; | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:211:26:211:28 | [finally: exception] "0" | Finally.cs:197:9:212:9 | try {...} ... |
|
||||
| Finally.cs:243:13:253:13 | [finally: exception] {...} | Finally.cs:237:13:253:13 | try {...} ... |
|
||||
| Finally.cs:244:17:252:17 | [finally: exception] try {...} ... | Finally.cs:237:13:253:13 | try {...} ... |
|
||||
| Finally.cs:245:17:248:17 | [finally: exception] {...} | Finally.cs:237:13:253:13 | try {...} ... |
|
||||
| Finally.cs:246:21:247:47 | [finally: exception] if (...) ... | Finally.cs:237:13:253:13 | try {...} ... |
|
||||
| Finally.cs:246:25:246:26 | [finally: exception] access to parameter b2 | Finally.cs:237:13:253:13 | try {...} ... |
|
||||
| Finally.cs:247:25:247:47 | [finally: exception] throw ...; | Finally.cs:237:13:253:13 | try {...} ... |
|
||||
| Finally.cs:247:31:247:46 | [finally: exception] object creation of type ExceptionA | Finally.cs:237:13:253:13 | try {...} ... |
|
||||
| Finally.cs:250:17:252:17 | [finally(1): exception] {...} | Finally.cs:244:17:252:17 | try {...} ... |
|
||||
| Finally.cs:250:17:252:17 | [finally: exception, finally(1): exception] {...} | Finally.cs:244:17:252:17 | try {...} ... |
|
||||
| Finally.cs:250:17:252:17 | [finally: exception] {...} | Finally.cs:244:17:252:17 | try {...} ... |
|
||||
| Finally.cs:251:21:251:54 | [finally(1): exception] call to method WriteLine | Finally.cs:244:17:252:17 | 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:251:21:251:54 | [finally: exception] call to method WriteLine | Finally.cs:244:17:252:17 | try {...} ... |
|
||||
| Finally.cs:251:21:251:55 | [finally(1): exception] ...; | Finally.cs:244:17:252:17 | try {...} ... |
|
||||
| Finally.cs:251:21:251:55 | [finally: exception, finally(1): exception] ...; | Finally.cs:244:17:252:17 | try {...} ... |
|
||||
| Finally.cs:251:21:251:55 | [finally: exception] ...; | Finally.cs:244:17:252:17 | try {...} ... |
|
||||
| Finally.cs:251:39:251:53 | [finally(1): exception] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... |
|
||||
| Finally.cs:251:39:251:53 | [finally: exception, finally(1): exception] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... |
|
||||
| Finally.cs:251:39:251:53 | [finally: exception] "Inner finally" | Finally.cs:244:17:252:17 | try {...} ... |
|
||||
| Finally.cs:257:9:259:9 | [finally: exception] {...} | Finally.cs:235:9:259:9 | try {...} ... |
|
||||
| Finally.cs:258:13:258:46 | [finally: exception] call to method WriteLine | Finally.cs:235:9:259:9 | try {...} ... |
|
||||
| Finally.cs:258:13:258:47 | [finally: exception] ...; | Finally.cs:235:9:259:9 | try {...} ... |
|
||||
| Finally.cs:258:31:258:45 | [finally: exception] "Outer finally" | Finally.cs:235:9:259:9 | try {...} ... |
|
||||
| Finally.cs:270:9:273:9 | [finally: exception] {...} | Finally.cs:265:9:273:9 | try {...} ... |
|
||||
| Finally.cs:271:13:271:34 | [finally: exception] call to method WriteLine | Finally.cs:265:9:273:9 | try {...} ... |
|
||||
| Finally.cs:271:13:271:35 | [finally: exception] ...; | Finally.cs:265:9:273:9 | try {...} ... |
|
||||
| Finally.cs:271:31:271:33 | [finally: exception] "3" | Finally.cs:265:9:273:9 | try {...} ... |
|
||||
| Finally.cs:272:13:272:13 | [finally: exception] access to parameter i | Finally.cs:265:9:273:9 | try {...} ... |
|
||||
| Finally.cs:272:13:272:18 | [finally: exception] ... + ... | Finally.cs:265:9:273:9 | try {...} ... |
|
||||
| Finally.cs:272:13:272:18 | [finally: exception] ... = ... | Finally.cs:265:9:273:9 | try {...} ... |
|
||||
| Finally.cs:272:13:272:19 | [finally: exception] ...; | Finally.cs:265:9:273:9 | try {...} ... |
|
||||
| Finally.cs:272:18:272:18 | [finally: 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: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 {...} ... |
|
||||
|
||||
@@ -12,7 +12,7 @@ class MyFinallySplitControlFlowNode extends ElementNode {
|
||||
exists(Splitting::FinallySplitting::FinallySplitType type |
|
||||
type = this.getASplit().(FinallySplit).getType()
|
||||
|
|
||||
not type instanceof SuccessorTypes::NormalSuccessor
|
||||
not type instanceof DirectSuccessor
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -45,9 +45,9 @@
|
||||
| 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: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 | [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: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 |
|
||||
@@ -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: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 | [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 | [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: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 |
|
||||
@@ -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 | [no-match] { ... } | semmle.label | no-match |
|
||||
| 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: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 |
|
||||
@@ -162,9 +162,9 @@
|
||||
| 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: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: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: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 |
|
||||
@@ -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: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: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(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 |
|
||||
| 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 | [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 | [no-match] { ... } | semmle.label | no-match |
|
||||
| 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: Exception] catch (...) {...} | patterns.cs:123:10:123:21 | exit Expressions2 (abnormal) | semmle.label | exception(Exception) |
|
||||
| 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 |
|
||||
| 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:41:145:42 | [exception: Exception] InvalidOperationException ex | patterns.cs:146:9:148:9 | {...} | semmle.label | successor |
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
| 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: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: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) |
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
| 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: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 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 | ... = ... |
|
||||
|
||||
@@ -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: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 | [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: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 |
|
||||
|
||||
@@ -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 |
|
||||
| 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 | [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: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 |
|
||||
|
||||
@@ -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) |
|
||||
| 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 | [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: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) |
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
| 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: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: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 |
|
||||
@@ -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: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: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: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: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: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: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: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: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: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: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: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 |
|
||||
@@ -43,7 +43,7 @@
|
||||
| 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: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: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 |
|
||||
|
||||
@@ -7,10 +7,9 @@ module;
|
||||
import java
|
||||
import Dominance
|
||||
private import codeql.controlflow.BasicBlock as BB
|
||||
private import codeql.controlflow.SuccessorType
|
||||
|
||||
private module Input implements BB::InputSig<Location> {
|
||||
import SuccessorType
|
||||
|
||||
/** Hold if `t` represents a conditional successor type. */
|
||||
predicate successorTypeIsCondition(SuccessorType t) { none() }
|
||||
|
||||
@@ -34,7 +33,7 @@ private module Input implements BB::InputSig<Location> {
|
||||
result = getASpecificSuccessor(node, t)
|
||||
or
|
||||
node.getASuccessor() = result and
|
||||
t instanceof NormalSuccessor and
|
||||
t instanceof DirectSuccessor and
|
||||
not result = getASpecificSuccessor(node, _)
|
||||
}
|
||||
|
||||
@@ -96,7 +95,7 @@ class BasicBlock extends BbImpl::BasicBlock {
|
||||
predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) }
|
||||
|
||||
/** 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() }
|
||||
|
||||
@@ -161,8 +160,6 @@ private class BasicBlockAlias = BasicBlock;
|
||||
module Cfg implements BB::CfgSig<Location> {
|
||||
class ControlFlowNode = BbImpl::ControlFlowNode;
|
||||
|
||||
class SuccessorType = BbImpl::SuccessorType;
|
||||
|
||||
class BasicBlock = BasicBlockAlias;
|
||||
|
||||
class EntryBasicBlock extends BasicBlock instanceof BbImpl::EntryBasicBlock { }
|
||||
|
||||
@@ -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 import java as J
|
||||
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 import semmle.code.java.dataflow.NullGuards as NullGuards
|
||||
|
||||
@@ -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() }
|
||||
}
|
||||
@@ -372,16 +372,28 @@ module Public {
|
||||
|
||||
module Cfg implements BB::CfgSig<Location> {
|
||||
private import javascript as Js
|
||||
private import codeql.util.Unit
|
||||
private import codeql.controlflow.SuccessorType
|
||||
|
||||
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 {
|
||||
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) {
|
||||
this.(ReachableBasicBlock).strictlyDominates(bb)
|
||||
|
||||
@@ -1259,9 +1259,9 @@ private class ControlFlowNodeAlias = ControlFlowNode;
|
||||
final private class FinalBasicBlock = BasicBlock;
|
||||
|
||||
module Cfg implements BB::CfgSig<Location> {
|
||||
class ControlFlowNode = ControlFlowNodeAlias;
|
||||
private import codeql.controlflow.SuccessorType
|
||||
|
||||
class SuccessorType = Unit;
|
||||
class ControlFlowNode = ControlFlowNodeAlias;
|
||||
|
||||
class BasicBlock extends FinalBasicBlock {
|
||||
// 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(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) }
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ private module Input implements InputSig<Location, RubyDataFlow> {
|
||||
exists(CfgNodes::ExprCfgNode n |
|
||||
arg.argumentOf(call, _) 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
|
||||
)
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ private import codeql.ruby.ast.internal.TreeSitter
|
||||
private import codeql.ruby.controlflow.ControlFlowGraph
|
||||
private import internal.ControlFlowGraphImpl as CfgImpl
|
||||
private import CfgNodes
|
||||
private import SuccessorTypes
|
||||
private import CfgImpl::BasicBlocks as BasicBlocksImpl
|
||||
private import codeql.controlflow.BasicBlock as BB
|
||||
|
||||
@@ -302,13 +301,9 @@ private class BasicBlockAlias = BasicBlock;
|
||||
|
||||
private class EntryBasicBlockAlias = EntryBasicBlock;
|
||||
|
||||
private class SuccessorTypeAlias = SuccessorType;
|
||||
|
||||
module Cfg implements BB::CfgSig<Location> {
|
||||
class ControlFlowNode = CfgNode;
|
||||
|
||||
class SuccessorType = SuccessorTypeAlias;
|
||||
|
||||
class BasicBlock = BasicBlockAlias;
|
||||
|
||||
class EntryBasicBlock = EntryBasicBlockAlias;
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
overlay[local]
|
||||
module;
|
||||
|
||||
import codeql.controlflow.SuccessorType
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.controlflow.BasicBlocks
|
||||
private import SuccessorTypes
|
||||
private import internal.ControlFlowGraphImpl as CfgImpl
|
||||
private import internal.Splitting as Splitting
|
||||
private import internal.Completion
|
||||
@@ -59,241 +59,6 @@ class CfgNode extends CfgImpl::Node {
|
||||
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;
|
||||
|
||||
/** Provides different kinds of control flow graph splittings. */
|
||||
|
||||
@@ -12,7 +12,6 @@ private import codeql.ruby.ast.internal.Control
|
||||
private import codeql.ruby.controlflow.ControlFlowGraph
|
||||
private import ControlFlowGraphImpl as CfgImpl
|
||||
private import NonReturning
|
||||
private import SuccessorTypes
|
||||
|
||||
private newtype TCompletion =
|
||||
TSimpleCompletion() or
|
||||
@@ -267,7 +266,7 @@ abstract private class NonNestedNormalCompletion extends NormalCompletion { }
|
||||
|
||||
/** A simple (normal) completion. */
|
||||
class SimpleCompletion extends NonNestedNormalCompletion, TSimpleCompletion {
|
||||
override NormalSuccessor getAMatchingSuccessorType() { any() }
|
||||
override DirectSuccessor getAMatchingSuccessorType() { any() }
|
||||
|
||||
override string toString() { result = "simple" }
|
||||
}
|
||||
@@ -377,7 +376,7 @@ class NextCompletion extends Completion {
|
||||
this = TNestedCompletion(_, TNextCompletion(), _)
|
||||
}
|
||||
|
||||
override NextSuccessor getAMatchingSuccessorType() { any() }
|
||||
override ContinueSuccessor getAMatchingSuccessorType() { any() }
|
||||
|
||||
override string toString() {
|
||||
// `NestedCompletion` defines `toString()` for the other case
|
||||
@@ -431,7 +430,7 @@ class RaiseCompletion extends Completion {
|
||||
this = TNestedCompletion(_, TRaiseCompletion(), _)
|
||||
}
|
||||
|
||||
override RaiseSuccessor getAMatchingSuccessorType() { any() }
|
||||
override ExceptionSuccessor getAMatchingSuccessorType() { any() }
|
||||
|
||||
override string toString() {
|
||||
// `NestedCompletion` defines `toString()` for the other case
|
||||
|
||||
@@ -46,23 +46,10 @@ private module CfgInput implements CfgShared::InputSig<Location> {
|
||||
scope.(Impl::CfgScopeImpl).exit(last, c)
|
||||
}
|
||||
|
||||
class SuccessorType = Cfg::SuccessorType;
|
||||
private class SuccessorType = Cfg::SuccessorType;
|
||||
|
||||
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 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)
|
||||
)
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
@@ -6,7 +6,7 @@ private import codeql.ruby.CFG
|
||||
/** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */
|
||||
pragma[nomagic]
|
||||
predicate guardControlsBlock(CfgNodes::AstCfgNode guard, BasicBlock bb, boolean branch) {
|
||||
exists(ConditionBlock conditionBlock, SuccessorTypes::ConditionalSuccessor s |
|
||||
exists(ConditionBlock conditionBlock, ConditionalSuccessor s |
|
||||
guard = conditionBlock.getLastNode() and
|
||||
s.getValue() = branch and
|
||||
conditionBlock.edgeDominates(bb, s)
|
||||
|
||||
@@ -8,7 +8,6 @@ private import codeql.ruby.AST as Ast
|
||||
private import Completion as Comp
|
||||
private import Comp
|
||||
private import ControlFlowGraphImpl
|
||||
private import SuccessorTypes
|
||||
private import codeql.ruby.controlflow.ControlFlowGraph
|
||||
|
||||
cached
|
||||
@@ -132,7 +131,7 @@ module EnsureSplitting {
|
||||
then
|
||||
// If the entry into the `ensure` block completes with any normal completion,
|
||||
// it simply means normal execution after the `ensure` block
|
||||
this instanceof NormalSuccessor
|
||||
this instanceof DirectSuccessor
|
||||
else this = c.getAMatchingSuccessorType()
|
||||
}
|
||||
}
|
||||
@@ -195,7 +194,7 @@ module EnsureSplitting {
|
||||
int getNestLevel() { result = nestLevel }
|
||||
|
||||
override string toString() {
|
||||
if type instanceof NormalSuccessor
|
||||
if type instanceof DirectSuccessor
|
||||
then result = ""
|
||||
else
|
||||
if nestLevel > 0
|
||||
@@ -271,14 +270,14 @@ module EnsureSplitting {
|
||||
or
|
||||
not c instanceof NormalCompletion
|
||||
or
|
||||
type instanceof NormalSuccessor
|
||||
type instanceof DirectSuccessor
|
||||
)
|
||||
else (
|
||||
// `ensure` block can exit with inherited completion `c`, which must
|
||||
// match this split
|
||||
inherited = true and
|
||||
type = c.getAMatchingSuccessorType() and
|
||||
not type instanceof NormalSuccessor
|
||||
not type instanceof DirectSuccessor
|
||||
)
|
||||
)
|
||||
or
|
||||
@@ -308,7 +307,7 @@ module EnsureSplitting {
|
||||
exists(EnsureSplitImpl outer |
|
||||
outer.(EnsureSplit).getNestLevel() = super.getNestLevel() - 1 and
|
||||
outer.exit(pred, c, inherited) and
|
||||
super.getType() instanceof NormalSuccessor and
|
||||
super.getType() instanceof DirectSuccessor and
|
||||
inherited = true
|
||||
)
|
||||
}
|
||||
|
||||
@@ -153,7 +153,7 @@ module LocalFlow {
|
||||
exprTo = nodeTo.asExpr() and
|
||||
n.getReturningNode().getAstNode() instanceof BreakStmt and
|
||||
exprTo.getAstNode() instanceof Loop and
|
||||
nodeTo.asExpr().getAPredecessor(any(SuccessorTypes::BreakSuccessor s)) = n.getReturningNode()
|
||||
nodeTo.asExpr().getAPredecessor(any(BreakSuccessor s)) = n.getReturningNode()
|
||||
)
|
||||
or
|
||||
nodeFrom.asExpr() = nodeTo.(ReturningStatementNode).getReturningNode().getReturnedValueNode()
|
||||
@@ -161,7 +161,7 @@ module LocalFlow {
|
||||
nodeTo.asExpr() =
|
||||
any(CfgNodes::ExprNodes::ForExprCfgNode for |
|
||||
exists(SuccessorType s |
|
||||
not s instanceof SuccessorTypes::BreakSuccessor and
|
||||
not s instanceof BreakSuccessor and
|
||||
exists(for.getAPredecessor(s))
|
||||
) and
|
||||
nodeFrom.asExpr() = for.getValue()
|
||||
@@ -2386,8 +2386,7 @@ module TypeInference {
|
||||
|
|
||||
m = resolveConstantReadAccess(pattern.getExpr()) and
|
||||
cb.getLastNode() = pattern and
|
||||
cb.edgeDominates(read.getBasicBlock(),
|
||||
any(SuccessorTypes::MatchingSuccessor match | match.getValue() = true)) and
|
||||
cb.edgeDominates(read.getBasicBlock(), any(MatchingSuccessor match | match.getValue() = true)) and
|
||||
caseRead = def.getARead() and
|
||||
read = def.getARead() and
|
||||
case.getValue() = caseRead
|
||||
|
||||
@@ -487,7 +487,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu
|
||||
* from `bb1` to `bb2`.
|
||||
*/
|
||||
predicate hasValueBranchEdge(BasicBlock bb1, BasicBlock bb2, GuardValue branch) {
|
||||
exists(Cfg::SuccessorTypes::ConditionalSuccessor s |
|
||||
exists(Cfg::ConditionalSuccessor s |
|
||||
this.getBasicBlock() = bb1 and
|
||||
bb2 = bb1.getASuccessor(s) and
|
||||
s.getValue() = branch
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -9,7 +9,7 @@ query predicate immediateDominator(BasicBlock bb1, BasicBlock 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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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: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: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: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: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:4:7:4:11 | break | true |
|
||||
| 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: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: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: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: raise] self | 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:18 | [ensure: exception] call to nil? | |
|
||||
| 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 | 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: 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:8:3:10:5 | [ensure: exception] if ... | false |
|
||||
| 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: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: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: raise] self | break_ensure.rb:9:11:9:22 | [ensure: raise] elements nil | |
|
||||
| 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: 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 | 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 | [ensure: raise] "elements nil" | break_ensure.rb:9:5:9:23 | [ensure: raise] 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: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: 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: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 | |
|
||||
@@ -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: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: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: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: 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: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: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: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: raise] call to nil? | break_ensure.rb:20:7:22:9 | [ensure: raise] 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:20:7:22:9 | [ensure: exception] if ... | false |
|
||||
| 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: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: 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: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: raise] call to puts | break_ensure.rb:20:17:21:20 | [ensure: raise] 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] call to puts | break_ensure.rb:20:17:21:20 | [ensure: exception] then ... | |
|
||||
| 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 | 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 | [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: 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: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 | |
|
||||
@@ -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: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: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: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 ... | 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 | 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 | 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: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: raise] ... < ... | break_ensure.rb:35:12:35:12 | [ensure: raise] x | true |
|
||||
| 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: 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: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 | [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: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 | 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 | 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 | 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: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: raise] ... > ... | break_ensure.rb:36:11:36:15 | [ensure: raise] break | true |
|
||||
| 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: 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: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 | [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: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 | 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) | |
|
||||
@@ -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: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: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: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: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: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: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: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 | [ensure: raise] ... > ... | break_ensure.rb:51:7:53:9 | [ensure: raise] 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:51:7:53:9 | [ensure: exception] if ... | false |
|
||||
| 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 | [ensure: raise] 0 | break_ensure.rb:51:10:51:14 | [ensure: raise] ... > ... | |
|
||||
| break_ensure.rb:52:9:52:16 | [ensure: raise] break | break_ensure.rb:45:3:55:5 | while ... | break |
|
||||
| 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: 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: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 | 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 | |
|
||||
@@ -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: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: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: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 | |
|
||||
@@ -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: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: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 | 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: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: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" | |
|
||||
@@ -294,9 +294,9 @@
|
||||
| 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: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: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: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 |
|
||||
@@ -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: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: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: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: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: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 | |
|
||||
@@ -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: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: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: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: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 | |
|
||||
@@ -500,7 +500,7 @@
|
||||
| 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: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: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 | |
|
||||
@@ -512,7 +512,7 @@
|
||||
| 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: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:18:97:18 | 5 | case.rb:97:13:97:18 | ... == ... | |
|
||||
| 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:17:91:20 | next | true |
|
||||
| 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 | self | cfg.rb:92:8:92:8 | x | |
|
||||
| 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: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: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: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 ... | |
|
||||
@@ -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:16:11:16:11 | x | false |
|
||||
| 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: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 |
|
||||
@@ -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:9:5:9:17 | self | true |
|
||||
| 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: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" | |
|
||||
@@ -1902,11 +1902,11 @@
|
||||
| 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: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: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: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: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 ... | |
|
||||
@@ -1924,7 +1924,7 @@
|
||||
| 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: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: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 | |
|
||||
@@ -1944,7 +1944,7 @@
|
||||
| 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: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: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 | |
|
||||
@@ -1965,7 +1965,7 @@
|
||||
| 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: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: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 | |
|
||||
@@ -1982,13 +1982,13 @@
|
||||
| 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: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: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: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: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: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 ... | |
|
||||
@@ -2009,9 +2009,9 @@
|
||||
| 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: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: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: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" | |
|
||||
@@ -2019,29 +2019,29 @@
|
||||
| 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: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: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: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 | 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: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 ... | 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: raise] self | raise.rb:76:9:76:14 | [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: 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] 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 | 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] "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: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 | raise.rb:76:8:76:15 | "ensure" | |
|
||||
| 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: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: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: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: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" | |
|
||||
@@ -2067,29 +2067,29 @@
|
||||
| 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: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: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: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 | 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: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 ... | 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: raise] self | raise.rb:89:11:89:16 | [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: 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] 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 | 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] "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: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 | 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) | |
|
||||
@@ -2104,7 +2104,7 @@
|
||||
| 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: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: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" | |
|
||||
@@ -2112,9 +2112,9 @@
|
||||
| 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: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: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: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" | |
|
||||
@@ -2122,130 +2122,130 @@
|
||||
| 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: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: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: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 | 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: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 ... | 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: raise] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise |
|
||||
| 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] call to puts | raise.rb:106:10:106:11 | [ensure: exception] b1 | |
|
||||
| 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: 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: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 | 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: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: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 | 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 | 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: raise] b1 | raise.rb:107:9:107:26 | [ensure: raise] self | true |
|
||||
| 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: 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: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: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: raise] self | raise.rb:107:16:107:25 | [ensure: raise] 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: exception] call to raise | raise.rb:110:7:110:25 | [ensure: exception, ensure(1): exception] self | exception |
|
||||
| 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): 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 | 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: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: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 | 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: raise, ensure(1): raise] ensure ... | raise.rb:115:3:115:22 | [ensure: raise] self | raise |
|
||||
| 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: return, 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: exception, ensure(1): exception] ensure ... | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
|
||||
| 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): 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 ... | 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): raise] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise |
|
||||
| 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: 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: raise, ensure(1): raise] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise |
|
||||
| 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: raise] call to puts | raise.rb:109:5:110:25 | [ensure: raise] 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: raise] self | raise.rb:110:13:110:24 | [ensure: raise] 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): raise] call to puts | raise.rb:115:3:115:22 | [ensure: raise] self | raise |
|
||||
| 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(1): exception] call to puts | raise.rb:109:5:110:25 | [ensure(1): exception] ensure ... | |
|
||||
| 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): exception] self | raise.rb:110:13:110:24 | [ensure(1): exception] inner 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: exception, ensure(1): exception] call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
|
||||
| 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: exception] call to puts | raise.rb:109:5:110:25 | [ensure: exception] ensure ... | |
|
||||
| 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: exception] self | raise.rb:110:13:110:24 | [ensure: exception] inner 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): exception] call to puts | raise.rb:115:3:115:22 | [ensure: exception] self | exception |
|
||||
| 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: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 | 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: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: 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: raise] "inner ensure" | raise.rb:110:7:110:25 | [ensure: 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): 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: 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: exception] "inner ensure" | raise.rb:110:7:110:25 | [ensure: 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, 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: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: 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: raise] inner ensure | raise.rb:110:12:110:25 | [ensure: raise] "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(1): exception] inner ensure | raise.rb:110:12:110:25 | [ensure(1): exception] "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: exception] inner ensure | raise.rb:110:12:110:25 | [ensure: exception] "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 | 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 | 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: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 ... | 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: raise] self | raise.rb:115:9:115:21 | [ensure: raise] method ensure | |
|
||||
| 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: 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] 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 | 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 | [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: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 | 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 | 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: raise] b2 | raise.rb:117:5:117:22 | [ensure: raise] self | true |
|
||||
| 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: 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: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: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: raise] self | raise.rb:117:12:117:21 | [ensure: raise] 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: exception] call to raise | raise.rb:94:1:119:3 | exit m9 (abnormal) | exception |
|
||||
| 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) | 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 | 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: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: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 | 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 | |
|
||||
@@ -2254,7 +2254,7 @@
|
||||
| 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: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: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" | |
|
||||
@@ -2271,7 +2271,7 @@
|
||||
| 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: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: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 | |
|
||||
@@ -2279,22 +2279,22 @@
|
||||
| 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: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: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: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: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: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: raise] self | raise.rb:137:11:137:16 | [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: 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 | 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] "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] 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 | 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 | |
|
||||
@@ -2306,13 +2306,13 @@
|
||||
| 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: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: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: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 | 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 | |
|
||||
@@ -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 | { ... } | 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: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: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 | |
|
||||
@@ -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 -> { ... } (normal) | raise.rb:160:9:162:7 | exit -> { ... } | |
|
||||
| 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: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 | |
|
||||
@@ -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 | m | raise.rb:172:1:182:3 | m16 | |
|
||||
| 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: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 | |
|
||||
@@ -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: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: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: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: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: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: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: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: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: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 | |
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
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: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: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:29:8:29:13 | call to nil? |
|
||||
| case.rb:2:8:2:9 | call to x1 |
|
||||
@@ -72,25 +72,25 @@ callsWithNoArguments
|
||||
positionalArguments
|
||||
| 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: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: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: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: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: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: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: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: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: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 |
|
||||
@@ -319,7 +319,7 @@ positionalArguments
|
||||
| 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: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 | 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" |
|
||||
@@ -327,7 +327,7 @@ positionalArguments
|
||||
| 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: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 | 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" |
|
||||
@@ -336,30 +336,30 @@ positionalArguments
|
||||
| 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: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 | 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 | 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: 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: raise] call to puts | raise.rb:110:12:110:25 | [ensure: 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): 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: 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: exception] call to puts | raise.rb:110:12:110:25 | [ensure: 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, 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 | 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: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 | 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 | 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: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: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: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 | "" |
|
||||
|
||||
@@ -12,7 +12,7 @@ query predicate newStyleBarrierGuards(DataFlow::Node n) {
|
||||
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 |
|
||||
cb.edgeDominates(bb, s) and
|
||||
condition = cb.getLastNode()
|
||||
|
||||
@@ -21,8 +21,6 @@ final class JoinPredecessorBasicBlock = BasicBlocksImpl::JoinPredecessorBasicBlo
|
||||
module Cfg implements BB::CfgSig<Location> {
|
||||
class ControlFlowNode = ControlFlowGraph::CfgNode;
|
||||
|
||||
class SuccessorType = ControlFlowGraph::SuccessorType;
|
||||
|
||||
class BasicBlock = BasicBlocksImpl::BasicBlock;
|
||||
|
||||
class EntryBasicBlock = BasicBlocksImpl::EntryBasicBlock;
|
||||
|
||||
@@ -1,25 +1,9 @@
|
||||
/** Provides classes representing the control flow graph. */
|
||||
|
||||
private import internal.ControlFlowGraphImpl
|
||||
private import internal.SuccessorType
|
||||
private import internal.Scope as Scope
|
||||
import codeql.controlflow.SuccessorType
|
||||
|
||||
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;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
private import codeql.util.Boolean
|
||||
private import codeql.rust.controlflow.ControlFlowGraph
|
||||
private import rust
|
||||
private import SuccessorType
|
||||
|
||||
newtype TCompletion =
|
||||
TSimpleCompletion() or
|
||||
@@ -32,7 +31,7 @@ abstract class NormalCompletion extends Completion { }
|
||||
|
||||
/** A simple (normal) completion. */
|
||||
class SimpleCompletion extends NormalCompletion, TSimpleCompletion {
|
||||
override NormalSuccessor getAMatchingSuccessorType() { any() }
|
||||
override DirectSuccessor getAMatchingSuccessorType() { any() }
|
||||
|
||||
// `SimpleCompletion` is the "default" completion type, thus it is valid for
|
||||
// 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
|
||||
}
|
||||
|
||||
override MatchSuccessor getAMatchingSuccessorType() { result.getValue() = value }
|
||||
override MatchingSuccessor getAMatchingSuccessorType() { result.getValue() = value }
|
||||
|
||||
/** Gets the dual match completion. */
|
||||
override MatchCompletion getDual() { result = TMatchCompletion(value.booleanNot()) }
|
||||
|
||||
@@ -29,19 +29,11 @@ private module CfgInput implements InputSig<Location> {
|
||||
Stages::CfgStage::ref()
|
||||
}
|
||||
|
||||
class SuccessorType = Cfg::SuccessorType;
|
||||
private class SuccessorType = Cfg::SuccessorType;
|
||||
|
||||
/** Gets a successor type that matches completion `c`. */
|
||||
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. */
|
||||
predicate successorTypeIsCondition(SuccessorType t) { t instanceof Cfg::BooleanSuccessor }
|
||||
|
||||
|
||||
@@ -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" }
|
||||
}
|
||||
@@ -65,7 +65,6 @@ module Stages {
|
||||
cached
|
||||
module CfgStage {
|
||||
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.CfgNodes
|
||||
|
||||
@@ -87,8 +86,6 @@ module Stages {
|
||||
or
|
||||
exists(TConditionalCompletionSplitKind())
|
||||
or
|
||||
exists(TNormalSuccessor())
|
||||
or
|
||||
exists(AstCfgNode n)
|
||||
or
|
||||
exists(CallExprCfgNode n | exists(n.getFunction()))
|
||||
|
||||
@@ -9,17 +9,12 @@ overlay[local?]
|
||||
module;
|
||||
|
||||
private import codeql.util.Location
|
||||
private import SuccessorType
|
||||
|
||||
/** Provides the language-specific input specification. */
|
||||
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. */
|
||||
predicate successorTypeIsCondition(SuccessorType t);
|
||||
default predicate successorTypeIsCondition(SuccessorType t) { t instanceof ConditionalSuccessor }
|
||||
|
||||
/** A delineated part of the AST with its own CFG. */
|
||||
class CfgScope;
|
||||
@@ -61,12 +56,6 @@ signature module CfgSig<LocationSig Location> {
|
||||
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
|
||||
* without branches or joins.
|
||||
@@ -180,8 +169,6 @@ module Make<LocationSig Location, InputSig<Location> Input> implements CfgSig<Lo
|
||||
|
||||
class ControlFlowNode = Input::Node;
|
||||
|
||||
class SuccessorType = Input::SuccessorType;
|
||||
|
||||
/**
|
||||
* A basic block, that is, a maximal straight-line sequence of control flow nodes
|
||||
* without branches or joins.
|
||||
|
||||
@@ -8,6 +8,7 @@ module;
|
||||
private import codeql.util.Location
|
||||
private import codeql.util.FileSystem
|
||||
private import codeql.util.Void
|
||||
private import SuccessorType
|
||||
|
||||
/** Provides the language-specific input specification. */
|
||||
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`. */
|
||||
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`. */
|
||||
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. */
|
||||
predicate successorTypeIsCondition(SuccessorType t);
|
||||
|
||||
/** Holds if `t` is an abnormal exit type out of a CFG scope. */
|
||||
predicate isAbnormalExitType(SuccessorType t);
|
||||
default predicate successorTypeIsCondition(SuccessorType t) { t instanceof ConditionalSuccessor }
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
exists(int rnk |
|
||||
scopeFirst(pred, succ) and
|
||||
successorTypeIsSimple(t) and
|
||||
t instanceof DirectSuccessor and
|
||||
succEntrySplitsFromRank(pred, succ, succSplits, rnk)
|
||||
|
|
||||
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.
|
||||
* The control flow graph is pruned for unreachable nodes.
|
||||
@@ -1016,7 +1008,7 @@ module MakeWithSplitting<
|
||||
exists(CfgScope scope |
|
||||
pred = TAnnotatedExitNode(scope, _) and
|
||||
result = TExitNode(scope) and
|
||||
successorTypeIsSimple(t)
|
||||
t instanceof DirectSuccessor
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1320,7 +1312,7 @@ module MakeWithSplitting<
|
||||
label =
|
||||
strictconcat(SuccessorType t, string s |
|
||||
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
|
||||
)
|
||||
@@ -1535,6 +1527,8 @@ module MakeWithSplitting<
|
||||
query predicate multipleSuccessors(Node node, SuccessorType t, Node successor) {
|
||||
strictcount(getASuccessor(node, t)) > 1 and
|
||||
successor = getASuccessor(node, t) and
|
||||
// allow for multiple exception successors
|
||||
not t instanceof ExceptionSuccessor and
|
||||
// allow for functions with multiple bodies
|
||||
not (t instanceof SimpleSuccessorType and node instanceof EntryNode)
|
||||
}
|
||||
@@ -1590,8 +1584,6 @@ module MakeWithSplitting<
|
||||
private class NodeAlias = Node;
|
||||
|
||||
private module BasicBlockInputSig implements BB::InputSig<Location> {
|
||||
class SuccessorType = Input::SuccessorType;
|
||||
|
||||
predicate successorTypeIsCondition = Input::successorTypeIsCondition/1;
|
||||
|
||||
class CfgScope = CfgScopeAlias;
|
||||
|
||||
@@ -51,25 +51,13 @@ overlay[local?]
|
||||
module;
|
||||
|
||||
private import codeql.controlflow.BasicBlock as BB
|
||||
private import codeql.controlflow.SuccessorType
|
||||
private import codeql.util.Boolean
|
||||
private import codeql.util.Location
|
||||
private import codeql.util.Unit
|
||||
|
||||
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> {
|
||||
/** A control flow node indicating normal termination of a callable. */
|
||||
class NormalExitNode extends ControlFlowNode;
|
||||
@@ -205,13 +193,11 @@ signature module InputSig<LocationSig Location, TypSig ControlFlowNode, TypSig B
|
||||
/** Provides guards-related predicates and classes. */
|
||||
module Make<
|
||||
LocationSig Location, BB::CfgSig<Location> Cfg,
|
||||
SuccessorTypesSig<Cfg::SuccessorType> SuccessorTypes,
|
||||
InputSig<Location, Cfg::ControlFlowNode, Cfg::BasicBlock> Input>
|
||||
{
|
||||
private module Cfg_ = Cfg;
|
||||
|
||||
private import Cfg_
|
||||
private import SuccessorTypes
|
||||
private import Input
|
||||
|
||||
private newtype TAbstractSingleValue =
|
||||
|
||||
343
shared/controlflow/codeql/controlflow/SuccessorType.qll
Normal file
343
shared/controlflow/codeql/controlflow/SuccessorType.qll
Normal 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" }
|
||||
}
|
||||
@@ -3,7 +3,6 @@
|
||||
private import swift
|
||||
private import ControlFlowGraph
|
||||
private import internal.ControlFlowGraphImpl as CfgImpl
|
||||
private import SuccessorTypes
|
||||
private import CfgImpl::BasicBlocks as BasicBlocksImpl
|
||||
private import codeql.controlflow.BasicBlock as BB
|
||||
|
||||
@@ -120,13 +119,9 @@ private class EntryBasicBlockAlias = EntryBasicBlock;
|
||||
|
||||
private class ControlFlowNodeAlias = ControlFlowNode;
|
||||
|
||||
private class SuccessorTypeAlias = SuccessorType;
|
||||
|
||||
module Cfg implements BB::CfgSig<Location> {
|
||||
class ControlFlowNode = ControlFlowNodeAlias;
|
||||
|
||||
class SuccessorType = SuccessorTypeAlias;
|
||||
|
||||
class BasicBlock = BasicBlockAlias;
|
||||
|
||||
class EntryBasicBlock = EntryBasicBlockAlias;
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
private import swift
|
||||
private import BasicBlocks
|
||||
private import SuccessorTypes
|
||||
private import internal.ControlFlowGraphImpl as CfgImpl
|
||||
private import internal.Completion
|
||||
private import internal.Scope
|
||||
private import internal.ControlFlowElements
|
||||
import codeql.controlflow.SuccessorType
|
||||
|
||||
/** An AST node with an associated control-flow graph. */
|
||||
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. */
|
||||
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" }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ private import swift
|
||||
private import codeql.swift.controlflow.ControlFlowGraph
|
||||
private import ControlFlowElements
|
||||
private import ControlFlowGraphImpl
|
||||
private import SuccessorTypes
|
||||
|
||||
private newtype TCompletion =
|
||||
TSimpleCompletion() or
|
||||
@@ -324,7 +323,7 @@ abstract class NormalCompletion extends Completion {
|
||||
|
||||
/** A simple (normal) completion. */
|
||||
class SimpleCompletion extends NormalCompletion, TSimpleCompletion {
|
||||
override NormalSuccessor getAMatchingSuccessorType() { any() }
|
||||
override DirectSuccessor getAMatchingSuccessorType() { any() }
|
||||
|
||||
override string toString() { result = "simple" }
|
||||
}
|
||||
@@ -468,7 +467,7 @@ class FallthroughCompletion extends Completion, TFallthroughCompletion {
|
||||
|
||||
FallthroughCompletion() { this = TFallthroughCompletion(dest) }
|
||||
|
||||
override FallthroughSuccessor getAMatchingSuccessorType() { any() }
|
||||
override DirectSuccessor getAMatchingSuccessorType() { any() }
|
||||
|
||||
CaseStmt getDestination() { result = dest }
|
||||
|
||||
|
||||
@@ -1976,18 +1976,6 @@ private module Cached {
|
||||
result = n.(FuncDeclElement).getAst() or
|
||||
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
|
||||
|
||||
@@ -48,33 +48,11 @@ module CfgInput implements InputSig<Location> {
|
||||
|
||||
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`. */
|
||||
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`. */
|
||||
predicate scopeFirst(CfgScope scope, AstNode first) {
|
||||
scope.(Impl::CfgScope::Range_).entry(first)
|
||||
|
||||
@@ -108,7 +108,7 @@ private class DefaultPathInjectionBarrier extends PathInjectionBarrier {
|
||||
TaintTracking::localTaint(validated, DataFlow::exprNode(normalize.getQualifier())) and
|
||||
DataFlow::localExprFlow(normalize, starts.getQualifier()) 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
|
||||
b.getValue() = true
|
||||
|
|
||||
|
||||
Reference in New Issue
Block a user