diff --git a/actions/ql/lib/codeql/actions/controlflow/internal/Cfg.qll b/actions/ql/lib/codeql/actions/controlflow/internal/Cfg.qll index 318cd2820a35..06295e3d88d4 100644 --- a/actions/ql/lib/codeql/actions/controlflow/internal/Cfg.qll +++ b/actions/ql/lib/codeql/actions/controlflow/internal/Cfg.qll @@ -134,6 +134,10 @@ private module Implementation implements CfgShared::InputSig { SuccessorType getAMatchingSuccessorType(Completion c) { result = c.getAMatchingSuccessorType() } predicate isAbnormalExitType(SuccessorType t) { none() } + + int idOfAstNode(AstNode node) { none() } + + int idOfCfgScope(CfgScope scope) { none() } } module CfgImpl = CfgShared::Make; diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/BasicBlocks.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/BasicBlocks.qll index 4392a42f9acd..c3581e8f0c86 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/BasicBlocks.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/BasicBlocks.qll @@ -4,26 +4,20 @@ import csharp private import ControlFlow::SuccessorTypes +private import semmle.code.csharp.controlflow.internal.ControlFlowGraphImpl as CfgImpl +private import CfgImpl::BasicBlocks as BasicBlocksImpl /** * A basic block, that is, a maximal straight-line sequence of control flow nodes * without branches or joins. */ -class BasicBlock extends TBasicBlockStart { - /** Gets an immediate successor of this basic block, if any. */ - BasicBlock getASuccessor() { result.getFirstNode() = this.getLastNode().getASuccessor() } - +final class BasicBlock extends BasicBlocksImpl::BasicBlock { /** Gets an immediate successor of this basic block of a given type, if any. */ - BasicBlock getASuccessorByType(ControlFlow::SuccessorType t) { - result.getFirstNode() = this.getLastNode().getASuccessorByType(t) - } - - /** Gets an immediate predecessor of this basic block, if any. */ - BasicBlock getAPredecessor() { result.getASuccessor() = this } + BasicBlock getASuccessorByType(ControlFlow::SuccessorType t) { result = this.getASuccessor(t) } /** Gets an immediate predecessor of this basic block of a given type, if any. */ BasicBlock getAPredecessorByType(ControlFlow::SuccessorType t) { - result.getASuccessorByType(t) = this + result = this.getAPredecessor(t) } /** @@ -65,23 +59,20 @@ class BasicBlock extends TBasicBlockStart { } /** Gets the control flow node at a specific (zero-indexed) position in this basic block. */ - ControlFlow::Node getNode(int pos) { bbIndex(this.getFirstNode(), result, pos) } + ControlFlow::Node getNode(int pos) { result = super.getNode(pos) } /** Gets a control flow node in this basic block. */ - ControlFlow::Node getANode() { result = this.getNode(_) } + ControlFlow::Node getANode() { result = super.getANode() } /** Gets the first control flow node in this basic block. */ - ControlFlow::Node getFirstNode() { this = TBasicBlockStart(result) } + ControlFlow::Node getFirstNode() { result = super.getFirstNode() } /** Gets the last control flow node in this basic block. */ - ControlFlow::Node getLastNode() { result = this.getNode(this.length() - 1) } + ControlFlow::Node getLastNode() { result = super.getLastNode() } /** Gets the callable that this basic block belongs to. */ final Callable getCallable() { result = this.getFirstNode().getEnclosingCallable() } - /** Gets the length of this basic block. */ - int length() { result = strictcount(this.getANode()) } - /** * Holds if this basic block immediately dominates basic block `bb`. * @@ -103,7 +94,7 @@ class BasicBlock extends TBasicBlockStart { * basic block on line 4 (all paths from the entry point of `M` * to `return s.Length;` must go through the null check). */ - predicate immediatelyDominates(BasicBlock bb) { bbIDominates(this, bb) } + predicate immediatelyDominates(BasicBlock bb) { super.immediatelyDominates(bb) } /** * Holds if this basic block strictly dominates basic block `bb`. @@ -126,7 +117,7 @@ class BasicBlock extends TBasicBlockStart { * basic block on line 4 (all paths from the entry point of `M` * to `return s.Length;` must go through the null check). */ - predicate strictlyDominates(BasicBlock bb) { bbIDominates+(this, bb) } + predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } /** * Holds if this basic block dominates basic block `bb`. @@ -178,15 +169,7 @@ class BasicBlock extends TBasicBlockStart { * `Console.Write(x);`. Also, the basic block starting on line 2 * does not dominate the basic block on line 6. */ - predicate inDominanceFrontier(BasicBlock df) { - this.dominatesPredecessor(df) and - not this.strictlyDominates(df) - } - - /** - * Holds if this basic block dominates a predecessor of `df`. - */ - private predicate dominatesPredecessor(BasicBlock df) { this.dominates(df.getAPredecessor()) } + predicate inDominanceFrontier(BasicBlock df) { super.inDominanceFrontier(df) } /** * Gets the basic block that immediately dominates this basic block, if any. @@ -208,7 +191,7 @@ class BasicBlock extends TBasicBlockStart { * the basic block online 4 (all paths from the entry point of `M` * to `return s.Length;` must go through the null check. */ - BasicBlock getImmediateDominator() { bbIDominates(result, this) } + BasicBlock getImmediateDominator() { result = super.getImmediateDominator() } /** * Holds if this basic block strictly post-dominates basic block `bb`. @@ -234,7 +217,7 @@ class BasicBlock extends TBasicBlockStart { * line 3 (all paths to the exit point of `M` from `return s.Length;` * must go through the `WriteLine` call). */ - predicate strictlyPostDominates(BasicBlock bb) { bbIPostDominates+(this, bb) } + predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) } /** * Holds if this basic block post-dominates basic block `bb`. @@ -262,10 +245,7 @@ class BasicBlock extends TBasicBlockStart { * This predicate is *reflexive*, so for example `Console.WriteLine("M");` * post-dominates itself. */ - predicate postDominates(BasicBlock bb) { - this.strictlyPostDominates(bb) or - this = bb - } + predicate postDominates(BasicBlock bb) { super.postDominates(bb) } /** * Holds if this basic block is in a loop in the control flow graph. This @@ -274,230 +254,44 @@ class BasicBlock extends TBasicBlockStart { * necessary back edges are unreachable. */ predicate inLoop() { this.getASuccessor+() = this } - - /** Gets a textual representation of this basic block. */ - string toString() { result = this.getFirstNode().toString() } - - /** Gets the location of this basic block. */ - Location getLocation() { result = this.getFirstNode().getLocation() } -} - -/** - * Internal implementation details. - */ -cached -private module Internal { - /** Internal representation of basic blocks. */ - cached - newtype TBasicBlock = TBasicBlockStart(ControlFlow::Node cfn) { startsBB(cfn) } - - /** Holds if `cfn` starts a new basic block. */ - private predicate startsBB(ControlFlow::Node cfn) { - not exists(cfn.getAPredecessor()) and exists(cfn.getASuccessor()) - or - cfn.isJoin() - or - cfn.getAPredecessor().isBranch() - or - /* - * In cases such as - * ```csharp - * if (b) - * M() - * ``` - * where the `false` edge out of `b` is not present (because we can prove it - * impossible), we still split up the basic block in two, in order to generate - * a `ConditionBlock` which can be used by the guards library. - */ - - exists(cfn.getAPredecessorByType(any(ControlFlow::SuccessorTypes::ConditionalSuccessor s))) - } - - /** - * Holds if `succ` is a control flow successor of `pred` within - * the same basic block. - */ - private predicate intraBBSucc(ControlFlow::Node pred, ControlFlow::Node succ) { - succ = pred.getASuccessor() and - not startsBB(succ) - } - - /** - * Holds if `cfn` is the `i`th node in basic block `bb`. - * - * In other words, `i` is the shortest distance from a node `bb` - * that starts a basic block to `cfn` along the `intraBBSucc` relation. - */ - cached - predicate bbIndex(ControlFlow::Node bbStart, ControlFlow::Node cfn, int i) = - shortestDistances(startsBB/1, intraBBSucc/2)(bbStart, cfn, i) - - /** - * Holds if the first node of basic block `succ` is a control flow - * successor of the last node of basic block `pred`. - */ - private predicate succBB(BasicBlock pred, BasicBlock succ) { succ = pred.getASuccessor() } - - /** Holds if `dom` is an immediate dominator of `bb`. */ - cached - predicate bbIDominates(BasicBlock dom, BasicBlock bb) = - idominance(entryBB/1, succBB/2)(_, dom, bb) - - /** Holds if `pred` is a basic block predecessor of `succ`. */ - private predicate predBB(BasicBlock succ, BasicBlock pred) { succBB(pred, succ) } - - /** Holds if `bb` is an exit basic block that represents normal exit. */ - private predicate normalExitBB(BasicBlock bb) { - bb.getANode().(ControlFlow::Nodes::AnnotatedExitNode).isNormal() - } - - /** Holds if `dom` is an immediate post-dominator of `bb`. */ - cached - predicate bbIPostDominates(BasicBlock dom, BasicBlock bb) = - idominance(normalExitBB/1, predBB/2)(_, dom, bb) } -private import Internal - /** * An entry basic block, that is, a basic block whose first node is - * the entry node of a callable. + * an entry node. */ -class EntryBasicBlock extends BasicBlock { - EntryBasicBlock() { entryBB(this) } -} - -/** Holds if `bb` is an entry basic block. */ -private predicate entryBB(BasicBlock bb) { - bb.getFirstNode() instanceof ControlFlow::Nodes::EntryNode -} +final class EntryBasicBlock extends BasicBlock, BasicBlocksImpl::EntryBasicBlock { } /** - * An annotated exit basic block, that is, a basic block that contains - * an annotated exit node. + * An annotated exit basic block, that is, a basic block that contains an + * annotated exit node. */ -class AnnotatedExitBasicBlock extends BasicBlock { - private boolean isNormal; - - AnnotatedExitBasicBlock() { - this.getANode() = - any(ControlFlow::Nodes::AnnotatedExitNode n | - if n.isNormal() then isNormal = true else isNormal = false - ) - } - - /** Holds if this block represents a normal exit. */ - predicate isNormal() { isNormal = true } -} +final class AnnotatedExitBasicBlock extends BasicBlock, BasicBlocksImpl::AnnotatedExitBasicBlock { } /** * An exit basic block, that is, a basic block whose last node is - * the exit node of a callable. + * an exit node. */ -class ExitBasicBlock extends BasicBlock { - ExitBasicBlock() { this.getLastNode() instanceof ControlFlow::Nodes::ExitNode } -} - -private module JoinBlockPredecessors { - private import ControlFlow::Nodes - private import semmle.code.csharp.controlflow.internal.ControlFlowGraphImpl as Impl - - int getId(JoinBlockPredecessor jbp) { - exists(Impl::AstNode n | result = n.getId() | - n = jbp.getFirstNode().getAstNode() - or - n = jbp.(EntryBasicBlock).getCallable() - ) - } - - string getSplitString(JoinBlockPredecessor jbp) { - result = jbp.getFirstNode().(ElementNode).getSplitsString() - or - not exists(jbp.getFirstNode().(ElementNode).getSplitsString()) and - result = "" - } -} +final class ExitBasicBlock extends BasicBlock, BasicBlocksImpl::ExitBasicBlock { } /** A basic block with more than one predecessor. */ -class JoinBlock extends BasicBlock { - JoinBlock() { this.getFirstNode().isJoin() } - - /** - * Gets the `i`th predecessor of this join block, with respect to some - * arbitrary order. - */ - cached - JoinBlockPredecessor getJoinBlockPredecessor(int i) { - result = - rank[i + 1](JoinBlockPredecessor jbp | - jbp = this.getAPredecessor() - | - jbp order by JoinBlockPredecessors::getId(jbp), JoinBlockPredecessors::getSplitString(jbp) - ) - } +final class JoinBlock extends BasicBlock, BasicBlocksImpl::JoinBasicBlock { + JoinBlockPredecessor getJoinBlockPredecessor(int i) { result = super.getJoinBlockPredecessor(i) } } /** A basic block that is an immediate predecessor of a join block. */ -class JoinBlockPredecessor extends BasicBlock { - JoinBlockPredecessor() { this.getASuccessor() instanceof JoinBlock } -} - -/** A basic block that terminates in a condition, splitting the subsequent control flow. */ -class ConditionBlock extends BasicBlock { - ConditionBlock() { this.getLastNode().isCondition() } +final class JoinBlockPredecessor extends BasicBlock, BasicBlocksImpl::JoinPredecessorBasicBlock { } - /** - * Holds if basic block `succ` is immediately controlled by this basic - * block with conditional value `s`. That is, `succ` is an immediate - * successor of this block, and `succ` can only be reached from - * the callable entry point by going via the `s` edge out of this basic block. - */ - pragma[nomagic] +/** + * A basic block that terminates in a condition, splitting the subsequent + * control flow. + */ +final class ConditionBlock extends BasicBlock, BasicBlocksImpl::ConditionBasicBlock { predicate immediatelyControls(BasicBlock succ, ConditionalSuccessor s) { - succ = this.getASuccessorByType(s) and - forall(BasicBlock pred | pred = succ.getAPredecessor() and pred != this | succ.dominates(pred)) + super.immediatelyControls(succ, s) } - /** - * Holds if basic block `controlled` is controlled by this basic block with - * conditional value `s`. That is, `controlled` can only be reached from - * the callable entry point by going via the `s` edge out of this basic block. - */ predicate controls(BasicBlock controlled, ConditionalSuccessor s) { - /* - * For this block to control the block `controlled` with `testIsTrue` the following must be true: - * Execution must have passed through the test i.e. `this` must strictly dominate `controlled`. - * Execution must have passed through the `testIsTrue` edge leaving `this`. - * - * Although "passed through the true edge" implies that `this.getATrueSuccessor()` dominates `controlled`, - * the reverse is not true, as flow may have passed through another edge to get to `this.getATrueSuccessor()` - * so we need to assert that `this.getATrueSuccessor()` dominates `controlled` *and* that - * all predecessors of `this.getATrueSuccessor()` are either `this` or dominated by `this.getATrueSuccessor()`. - * - * For example, in the following C# snippet: - * ```csharp - * if (x) - * controlled; - * false_successor; - * uncontrolled; - * ``` - * `false_successor` dominates `uncontrolled`, but not all of its predecessors are `this` (`if (x)`) - * or dominated by itself. Whereas in the following code: - * ```csharp - * if (x) - * while (controlled) - * also_controlled; - * false_successor; - * uncontrolled; - * ``` - * the block `while controlled` is controlled because all of its predecessors are `this` (`if (x)`) - * or (in the case of `also_controlled`) dominated by itself. - * - * The additional constraint on the predecessors of the test successor implies - * that `this` strictly dominates `controlled` so that isn't necessary to check - * directly. - */ - - exists(BasicBlock succ | this.immediatelyControls(succ, s) | succ.dominates(controlled)) + super.controls(controlled, s) } } diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll index 463ed260067c..e4f1891012f2 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll @@ -95,6 +95,10 @@ private module CfgInput implements CfgShared::InputSig { 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) } } private module CfgSplittingInput implements CfgShared::SplittingInputSig { diff --git a/ruby/ql/lib/codeql/ruby/controlflow/BasicBlocks.qll b/ruby/ql/lib/codeql/ruby/controlflow/BasicBlocks.qll index 350f07a431a7..1c4fbc5dcb37 100644 --- a/ruby/ql/lib/codeql/ruby/controlflow/BasicBlocks.qll +++ b/ruby/ql/lib/codeql/ruby/controlflow/BasicBlocks.qll @@ -4,45 +4,38 @@ private import codeql.ruby.AST private import codeql.ruby.ast.internal.AST 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 /** * A basic block, that is, a maximal straight-line sequence of control flow nodes * without branches or joins. */ -class BasicBlock extends TBasicBlockStart { - /** Gets the scope of this basic block. */ - final CfgScope getScope() { result = this.getFirstNode().getScope() } - +final class BasicBlock extends BasicBlocksImpl::BasicBlock { /** Gets an immediate successor of this basic block, if any. */ - BasicBlock getASuccessor() { result = this.getASuccessor(_) } + BasicBlock getASuccessor() { result = super.getASuccessor() } /** Gets an immediate successor of this basic block of a given type, if any. */ - BasicBlock getASuccessor(SuccessorType t) { - result.getFirstNode() = this.getLastNode().getASuccessor(t) - } + BasicBlock getASuccessor(SuccessorType t) { result = super.getASuccessor(t) } /** Gets an immediate predecessor of this basic block, if any. */ - BasicBlock getAPredecessor() { result.getASuccessor() = this } + BasicBlock getAPredecessor() { result = super.getAPredecessor() } /** Gets an immediate predecessor of this basic block of a given type, if any. */ - BasicBlock getAPredecessor(SuccessorType t) { result.getASuccessor(t) = this } + BasicBlock getAPredecessor(SuccessorType t) { result = super.getAPredecessor(t) } - /** Gets the control flow node at a specific (zero-indexed) position in this basic block. */ - CfgNode getNode(int pos) { bbIndex(this.getFirstNode(), result, pos) } + // The overrides below are to use `CfgNode` instead of `CfgImpl::Node` + CfgNode getNode(int pos) { result = super.getNode(pos) } - /** Gets a control flow node in this basic block. */ - CfgNode getANode() { result = this.getNode(_) } + CfgNode getANode() { result = super.getANode() } /** Gets the first control flow node in this basic block. */ - CfgNode getFirstNode() { this = TBasicBlockStart(result) } + CfgNode getFirstNode() { result = super.getFirstNode() } /** Gets the last control flow node in this basic block. */ - CfgNode getLastNode() { result = this.getNode(this.length() - 1) } - - /** Gets the length of this basic block. */ - int length() { result = strictcount(this.getANode()) } + CfgNode getLastNode() { result = super.getLastNode() } /** * Holds if this basic block immediately dominates basic block `bb`. @@ -66,7 +59,7 @@ class BasicBlock extends TBasicBlockStart { * basic block on line 5 (all paths from the entry point of `m` * to `return 1` must go through the `if` block). */ - predicate immediatelyDominates(BasicBlock bb) { bbIDominates(this, bb) } + predicate immediatelyDominates(BasicBlock bb) { super.immediatelyDominates(bb) } /** * Holds if this basic block strictly dominates basic block `bb`. @@ -90,7 +83,7 @@ class BasicBlock extends TBasicBlockStart { * basic block on line 5 (all paths from the entry point of `m` * to `return 1` must go through the `if` block). */ - predicate strictlyDominates(BasicBlock bb) { bbIDominates+(this, bb) } + predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } /** * Holds if this basic block dominates basic block `bb`. @@ -113,10 +106,7 @@ class BasicBlock extends TBasicBlockStart { * basic block on line 5 (all paths from the entry point of `m` * to `return 1` must go through the `if` block). */ - predicate dominates(BasicBlock bb) { - bb = this or - this.strictlyDominates(bb) - } + predicate dominates(BasicBlock bb) { super.dominates(bb) } /** * Holds if `df` is in the dominance frontier of this basic block. @@ -143,15 +133,7 @@ class BasicBlock extends TBasicBlockStart { * `puts x`. Also, the basic block starting on line 3 does not * dominate the basic block on line 8. */ - predicate inDominanceFrontier(BasicBlock df) { - this.dominatesPredecessor(df) and - not this.strictlyDominates(df) - } - - /** - * Holds if this basic block dominates a predecessor of `df`. - */ - private predicate dominatesPredecessor(BasicBlock df) { this.dominates(df.getAPredecessor()) } + predicate inDominanceFrontier(BasicBlock df) { super.inDominanceFrontier(df) } /** * Gets the basic block that immediately dominates this basic block, if any. @@ -176,7 +158,7 @@ class BasicBlock extends TBasicBlockStart { * to `return 1` must go through the `if` block, and the `if` block * is an immediate predecessor of `return 1`). */ - BasicBlock getImmediateDominator() { bbIDominates(result, this) } + BasicBlock getImmediateDominator() { result = super.getImmediateDominator() } /** * Holds if this basic block strictly post-dominates basic block `bb`. @@ -200,7 +182,7 @@ class BasicBlock extends TBasicBlockStart { * line 3 (all paths to the exit point of `m` from `puts "b"` must go * through `puts "m"`). */ - predicate strictlyPostDominates(BasicBlock bb) { bbIPostDominates+(this, bb) } + predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) } /** * Holds if this basic block post-dominates basic block `bb`. @@ -223,205 +205,40 @@ class BasicBlock extends TBasicBlockStart { * (all paths to the exit point of `m` from `puts "b"` must go through * `puts "m"`). */ - predicate postDominates(BasicBlock bb) { - this.strictlyPostDominates(bb) or - this = bb - } - - /** Holds if this basic block is in a loop in the control flow graph. */ - predicate inLoop() { this.getASuccessor+() = this } - - /** Gets a textual representation of this basic block. */ - string toString() { result = this.getFirstNode().toString() } - - /** Gets the location of this basic block. */ - Location getLocation() { result = this.getFirstNode().getLocation() } + predicate postDominates(BasicBlock bb) { super.postDominates(bb) } } -cached -private module Cached { - /** Internal representation of basic blocks. */ - cached - newtype TBasicBlock = TBasicBlockStart(CfgNode cfn) { startsBB(cfn) } - - /** Holds if `cfn` starts a new basic block. */ - private predicate startsBB(CfgNode cfn) { - not exists(cfn.getAPredecessor()) and exists(cfn.getASuccessor()) - or - cfn.isJoin() - or - cfn.getAPredecessor().isBranch() - or - /* - * In cases such as - * - * ```rb - * if x or y - * foo - * else - * bar - * ``` - * - * we have a CFG that looks like - * - * x --false--> [false] x or y --false--> bar - * \ | - * --true--> y --false-- - * \ - * --true--> [true] x or y --true--> foo - * - * and we want to ensure that both `foo` and `bar` start a new basic block, - * in order to get a `ConditionalBlock` out of the disjunction. - */ - - exists(cfn.getAPredecessor(any(SuccessorTypes::ConditionalSuccessor s))) - } - - /** - * Holds if `succ` is a control flow successor of `pred` within - * the same basic block. - */ - private predicate intraBBSucc(CfgNode pred, CfgNode succ) { - succ = pred.getASuccessor() and - not startsBB(succ) - } - - /** - * Holds if `cfn` is the `i`th node in basic block `bb`. - * - * In other words, `i` is the shortest distance from a node `bb` - * that starts a basic block to `cfn` along the `intraBBSucc` relation. - */ - cached - predicate bbIndex(CfgNode bbStart, CfgNode cfn, int i) = - shortestDistances(startsBB/1, intraBBSucc/2)(bbStart, cfn, i) - - /** - * Holds if the first node of basic block `succ` is a control flow - * successor of the last node of basic block `pred`. - */ - private predicate succBB(BasicBlock pred, BasicBlock succ) { succ = pred.getASuccessor() } - - /** Holds if `dom` is an immediate dominator of `bb`. */ - cached - predicate bbIDominates(BasicBlock dom, BasicBlock bb) = - idominance(entryBB/1, succBB/2)(_, dom, bb) - - /** Holds if `pred` is a basic block predecessor of `succ`. */ - private predicate predBB(BasicBlock succ, BasicBlock pred) { succBB(pred, succ) } - - /** Holds if `bb` is an exit basic block that represents normal exit. */ - private predicate normalExitBB(BasicBlock bb) { bb.getANode().(AnnotatedExitNode).isNormal() } - - /** Holds if `dom` is an immediate post-dominator of `bb`. */ - cached - predicate bbIPostDominates(BasicBlock dom, BasicBlock bb) = - idominance(normalExitBB/1, predBB/2)(_, dom, bb) - - /** - * Gets the `i`th predecessor of join block `jb`, with respect to some - * arbitrary order. - */ - cached - JoinBlockPredecessor getJoinBlockPredecessor(JoinBlock jb, int i) { - result = - rank[i + 1](JoinBlockPredecessor jbp | - jbp = jb.getAPredecessor() - | - jbp order by JoinBlockPredecessors::getId(jbp), JoinBlockPredecessors::getSplitString(jbp) - ) - } - - cached - predicate immediatelyControls(ConditionBlock cb, BasicBlock succ, ConditionalSuccessor s) { - succ = cb.getASuccessor(s) and - forall(BasicBlock pred | pred = succ.getAPredecessor() and pred != cb | succ.dominates(pred)) - } - - cached - predicate controls(ConditionBlock cb, BasicBlock controlled, ConditionalSuccessor s) { - exists(BasicBlock succ | cb.immediatelyControls(succ, s) | succ.dominates(controlled)) - } -} - -private import Cached - -/** Holds if `bb` is an entry basic block. */ -private predicate entryBB(BasicBlock bb) { bb.getFirstNode() instanceof EntryNode } - /** * An entry basic block, that is, a basic block whose first node is * an entry node. */ -class EntryBasicBlock extends BasicBlock { - EntryBasicBlock() { entryBB(this) } -} +final class EntryBasicBlock extends BasicBlock, BasicBlocksImpl::EntryBasicBlock { } /** - * An annotated exit basic block, that is, a basic block whose last node is - * an annotated exit node. + * An annotated exit basic block, that is, a basic block that contains an + * annotated exit node. */ -class AnnotatedExitBasicBlock extends BasicBlock { - private boolean normal; - - AnnotatedExitBasicBlock() { - exists(AnnotatedExitNode n | - n = this.getANode() and - if n.isNormal() then normal = true else normal = false - ) - } - - /** Holds if this block represent a normal exit. */ - final predicate isNormal() { normal = true } -} +final class AnnotatedExitBasicBlock extends BasicBlock, BasicBlocksImpl::AnnotatedExitBasicBlock { } /** * An exit basic block, that is, a basic block whose last node is * an exit node. */ -class ExitBasicBlock extends BasicBlock { - ExitBasicBlock() { this.getLastNode() instanceof ExitNode } -} - -private module JoinBlockPredecessors { - private predicate id(Ruby::AstNode x, Ruby::AstNode y) { x = y } - - private predicate idOf(Ruby::AstNode x, int y) = equivalenceRelation(id/2)(x, y) - - int getId(JoinBlockPredecessor jbp) { - idOf(toGeneratedInclSynth(jbp.getFirstNode().(AstCfgNode).getAstNode()), result) - or - idOf(toGeneratedInclSynth(jbp.(EntryBasicBlock).getScope()), result) - } - - string getSplitString(JoinBlockPredecessor jbp) { - result = jbp.getFirstNode().(AstCfgNode).getSplitsString() - or - not exists(jbp.getFirstNode().(AstCfgNode).getSplitsString()) and - result = "" - } -} +final class ExitBasicBlock extends BasicBlock, BasicBlocksImpl::ExitBasicBlock { } /** A basic block with more than one predecessor. */ -class JoinBlock extends BasicBlock { - JoinBlock() { this.getFirstNode().isJoin() } - - /** - * Gets the `i`th predecessor of this join block, with respect to some - * arbitrary order. - */ - JoinBlockPredecessor getJoinBlockPredecessor(int i) { result = getJoinBlockPredecessor(this, i) } +final class JoinBlock extends BasicBlock, BasicBlocksImpl::JoinBasicBlock { + JoinBlockPredecessor getJoinBlockPredecessor(int i) { result = super.getJoinBlockPredecessor(i) } } /** A basic block that is an immediate predecessor of a join block. */ -class JoinBlockPredecessor extends BasicBlock { - JoinBlockPredecessor() { this.getASuccessor() instanceof JoinBlock } -} - -/** A basic block that terminates in a condition, splitting the subsequent control flow. */ -class ConditionBlock extends BasicBlock { - ConditionBlock() { this.getLastNode().isCondition() } +final class JoinBlockPredecessor extends BasicBlock, BasicBlocksImpl::JoinPredecessorBasicBlock { } +/** + * A basic block that terminates in a condition, splitting the subsequent + * control flow. + */ +final class ConditionBlock extends BasicBlock, BasicBlocksImpl::ConditionBasicBlock { /** * Holds if basic block `succ` is immediately controlled by this basic * block with conditional value `s`. That is, `succ` is an immediate @@ -429,15 +246,15 @@ class ConditionBlock extends BasicBlock { * the callable entry point by going via the `s` edge out of this basic block. */ predicate immediatelyControls(BasicBlock succ, ConditionalSuccessor s) { - immediatelyControls(this, succ, s) + super.immediatelyControls(succ, s) } /** * Holds if basic block `controlled` is controlled by this basic block with - * conditional value `s`. That is, `controlled` can only be reached from - * the callable entry point by going via the `s` edge out of this basic block. + * conditional value `s`. That is, `controlled` can only be reached from the + * callable entry point by going via the `s` edge out of this basic block. */ predicate controls(BasicBlock controlled, ConditionalSuccessor s) { - controls(this, controlled, s) + super.controls(controlled, s) } } diff --git a/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll b/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll index 643decb560b9..584e5d1c1acc 100644 --- a/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll +++ b/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll @@ -60,6 +60,14 @@ private module CfgInput implements CfgShared::InputSig { 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) + + int idOfAstNode(AstNode node) { idOf(AstInternal::toGeneratedInclSynth(node), result) } + + int idOfCfgScope(CfgScope node) { result = idOfAstNode(node) } } private module CfgSplittingInput implements CfgShared::SplittingInputSig { diff --git a/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.expected b/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.expected new file mode 100644 index 000000000000..cafb6267eb9b --- /dev/null +++ b/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.expected @@ -0,0 +1,6530 @@ +dominates +| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:1:1:11:3 | enter m1 | +| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:1:1:11:3 | exit m1 | +| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:2:3:6:5 | while ... | +| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:2:9:2:9 | x | +| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:3:5:5:7 | if ... | +| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:3:8:3:8 | x | +| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:4:7:4:11 | break | +| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | +| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:8:3:10:5 | if ... | +| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:8:6:8:13 | [ensure: raise] self | +| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:9:5:9:23 | [ensure: raise] self | +| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:9:5:9:23 | self | +| break_ensure.rb:1:1:11:3 | exit m1 | break_ensure.rb:1:1:11:3 | exit m1 | +| break_ensure.rb:1:1:56:4 | enter break_ensure.rb | break_ensure.rb:1:1:56:4 | enter break_ensure.rb | +| break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:2:3:6:5 | while ... | +| break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:8:3:10:5 | if ... | +| break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:9:5:9:23 | self | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:1:1:11:3 | exit m1 | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:2:3:6:5 | while ... | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:2:9:2:9 | x | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:3:5:5:7 | if ... | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:3:8:3:8 | x | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:4:7:4:11 | break | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:8:3:10:5 | if ... | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:8:6:8:13 | [ensure: raise] self | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:9:5:9:23 | [ensure: raise] self | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:9:5:9:23 | self | +| break_ensure.rb:3:5:5:7 | if ... | break_ensure.rb:3:5:5:7 | if ... | +| break_ensure.rb:3:8:3:8 | x | break_ensure.rb:3:5:5:7 | if ... | +| break_ensure.rb:3:8:3:8 | x | break_ensure.rb:3:8:3:8 | x | +| break_ensure.rb:3:8:3:8 | x | break_ensure.rb:4:7:4:11 | break | +| break_ensure.rb:4:7:4:11 | break | break_ensure.rb:4:7:4:11 | break | +| break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | +| break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:8:3:10:5 | if ... | +| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | +| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:8:6:8:13 | [ensure: raise] self | +| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:9:5:9:23 | [ensure: raise] self | +| break_ensure.rb:9:5:9:23 | [ensure: raise] self | break_ensure.rb:9:5:9:23 | [ensure: raise] self | +| break_ensure.rb:9:5:9:23 | self | break_ensure.rb:9:5:9:23 | self | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:13:1:25:3 | enter m2 | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:14:3:24:5 | while ... | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:14:9:14:9 | x | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:16:7:18:9 | if ... | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:16:10:16:10 | x | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:17:9:17:13 | break | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:20:7:22:9 | if ... | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:20:10:20:10 | [ensure: raise] y | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:21:9:21:20 | [ensure: break] self | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:21:9:21:20 | [ensure: raise] self | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:21:9:21:20 | self | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:14:3:24:5 | while ... | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:14:3:24:5 | while ... | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:14:9:14:9 | x | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:16:7:18:9 | if ... | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:16:10:16:10 | x | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:17:9:17:13 | break | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | if ... | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:10:20:10 | [ensure: raise] y | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:21:9:21:20 | [ensure: break] self | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:21:9:21:20 | [ensure: raise] self | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:21:9:21:20 | self | +| break_ensure.rb:16:7:18:9 | if ... | break_ensure.rb:16:7:18:9 | if ... | +| break_ensure.rb:16:7:18:9 | if ... | break_ensure.rb:20:7:22:9 | if ... | +| break_ensure.rb:16:7:18:9 | if ... | break_ensure.rb:21:9:21:20 | self | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:16:7:18:9 | if ... | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:16:10:16:10 | x | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:17:9:17:13 | break | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:20:7:22:9 | if ... | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:20:10:20:10 | [ensure: raise] y | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:21:9:21:20 | [ensure: break] self | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:21:9:21:20 | [ensure: raise] self | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:21:9:21:20 | self | +| break_ensure.rb:17:9:17:13 | break | break_ensure.rb:17:9:17:13 | break | +| break_ensure.rb:17:9:17:13 | break | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | +| break_ensure.rb:17:9:17:13 | break | break_ensure.rb:21:9:21:20 | [ensure: break] self | +| break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | +| break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | +| break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:20:7:22:9 | if ... | +| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | +| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:20:10:20:10 | [ensure: raise] y | +| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:21:9:21:20 | [ensure: raise] self | +| break_ensure.rb:21:9:21:20 | [ensure: break] self | break_ensure.rb:21:9:21:20 | [ensure: break] self | +| break_ensure.rb:21:9:21:20 | [ensure: raise] self | break_ensure.rb:21:9:21:20 | [ensure: raise] self | +| break_ensure.rb:21:9:21:20 | self | break_ensure.rb:21:9:21:20 | self | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:27:1:42:3 | enter m3 | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:27:1:42:3 | exit m3 | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:27:1:42:3 | exit m3 (normal) | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:29:5:31:7 | if ... | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:30:7:30:12 | return | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:5:39:7 | while ... | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:11:33:11 | [ensure: raise] y | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:11:33:11 | [ensure: return] y | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:11:33:11 | y | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:9:37:11 | if ... | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:12:35:12 | [ensure: raise] x | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:12:35:12 | [ensure: return] x | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:12:35:12 | x | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:36:11:36:15 | [ensure: raise] break | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:36:11:36:15 | [ensure: return] break | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:36:11:36:15 | break | +| break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:27:1:42:3 | exit m3 | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:27:1:42:3 | exit m3 (normal) | +| break_ensure.rb:29:5:31:7 | if ... | break_ensure.rb:29:5:31:7 | if ... | +| break_ensure.rb:29:5:31:7 | if ... | break_ensure.rb:33:5:39:7 | while ... | +| break_ensure.rb:29:5:31:7 | if ... | break_ensure.rb:33:11:33:11 | y | +| break_ensure.rb:29:5:31:7 | if ... | break_ensure.rb:35:9:37:11 | if ... | +| break_ensure.rb:29:5:31:7 | if ... | break_ensure.rb:35:12:35:12 | x | +| break_ensure.rb:29:5:31:7 | if ... | break_ensure.rb:36:11:36:15 | break | +| break_ensure.rb:30:7:30:12 | return | break_ensure.rb:30:7:30:12 | return | +| break_ensure.rb:30:7:30:12 | return | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | +| break_ensure.rb:30:7:30:12 | return | break_ensure.rb:33:11:33:11 | [ensure: return] y | +| break_ensure.rb:30:7:30:12 | return | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | +| break_ensure.rb:30:7:30:12 | return | break_ensure.rb:35:12:35:12 | [ensure: return] x | +| break_ensure.rb:30:7:30:12 | return | break_ensure.rb:36:11:36:15 | [ensure: return] break | +| break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | +| break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | +| break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:33:5:39:7 | while ... | +| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | +| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:33:11:33:11 | [ensure: raise] y | +| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | +| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:35:12:35:12 | [ensure: raise] x | +| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:36:11:36:15 | [ensure: raise] break | +| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | +| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:33:11:33:11 | [ensure: return] y | +| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | +| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:35:12:35:12 | [ensure: return] x | +| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:36:11:36:15 | [ensure: return] break | +| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:33:5:39:7 | while ... | +| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:33:11:33:11 | y | +| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:35:9:37:11 | if ... | +| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:35:12:35:12 | x | +| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:36:11:36:15 | break | +| break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | +| break_ensure.rb:35:9:37:11 | [ensure: return] if ... | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | +| break_ensure.rb:35:9:37:11 | if ... | break_ensure.rb:35:9:37:11 | if ... | +| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | +| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:35:12:35:12 | [ensure: raise] x | +| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:36:11:36:15 | [ensure: raise] break | +| break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | +| break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:35:12:35:12 | [ensure: return] x | +| break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:36:11:36:15 | [ensure: return] break | +| break_ensure.rb:35:12:35:12 | x | break_ensure.rb:35:9:37:11 | if ... | +| break_ensure.rb:35:12:35:12 | x | break_ensure.rb:35:12:35:12 | x | +| break_ensure.rb:35:12:35:12 | x | break_ensure.rb:36:11:36:15 | break | +| break_ensure.rb:36:11:36:15 | [ensure: raise] break | break_ensure.rb:36:11:36:15 | [ensure: raise] break | +| break_ensure.rb:36:11:36:15 | [ensure: return] break | break_ensure.rb:36:11:36:15 | [ensure: return] break | +| break_ensure.rb:36:11:36:15 | break | break_ensure.rb:36:11:36:15 | break | +| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:44:1:56:3 | enter m4 | +| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:45:3:55:5 | while ... | +| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:45:9:45:9 | x | +| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:47:7:49:9 | if ... | +| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:47:10:47:10 | x | +| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:48:9:48:16 | self | +| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | +| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:51:7:53:9 | if ... | +| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:51:10:51:10 | [ensure: raise] x | +| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:52:15:52:16 | 10 | +| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:45:3:55:5 | while ... | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:45:3:55:5 | while ... | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:45:9:45:9 | x | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:47:7:49:9 | if ... | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:47:10:47:10 | x | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:48:9:48:16 | self | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:7:53:9 | if ... | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:10:51:10 | [ensure: raise] x | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:52:15:52:16 | 10 | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | +| break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:47:7:49:9 | if ... | +| break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:51:7:53:9 | if ... | +| break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:52:15:52:16 | 10 | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:47:7:49:9 | if ... | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:47:10:47:10 | x | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:48:9:48:16 | self | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:51:7:53:9 | if ... | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:51:10:51:10 | [ensure: raise] x | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:52:15:52:16 | 10 | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | +| break_ensure.rb:48:9:48:16 | self | break_ensure.rb:48:9:48:16 | self | +| break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | +| break_ensure.rb:51:7:53:9 | if ... | break_ensure.rb:51:7:53:9 | if ... | +| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | +| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:51:10:51:10 | [ensure: raise] x | +| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | +| break_ensure.rb:52:15:52:16 | 10 | break_ensure.rb:52:15:52:16 | 10 | +| break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:1:1:6:3 | enter if_in_case | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:2:3:5:5 | case ... | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:3:5:3:42 | [match] when ... | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:3:5:3:42 | [no-match] when ... | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:3:18:3:41 | if ... | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:3:21:3:22 | self | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:3:29:3:37 | self | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:4:5:4:24 | [match] when ... | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:4:5:4:24 | [no-match] when ... | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:4:10:4:10 | 2 | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:4:17:4:24 | self | +| case.rb:1:1:99:4 | enter case.rb | case.rb:1:1:99:4 | enter case.rb | +| case.rb:2:3:5:5 | case ... | case.rb:2:3:5:5 | case ... | +| case.rb:3:5:3:42 | [match] when ... | case.rb:3:5:3:42 | [match] when ... | +| case.rb:3:5:3:42 | [match] when ... | case.rb:3:18:3:41 | if ... | +| case.rb:3:5:3:42 | [match] when ... | case.rb:3:21:3:22 | self | +| case.rb:3:5:3:42 | [match] when ... | case.rb:3:29:3:37 | self | +| case.rb:3:5:3:42 | [no-match] when ... | case.rb:3:5:3:42 | [no-match] when ... | +| case.rb:3:5:3:42 | [no-match] when ... | case.rb:4:5:4:24 | [match] when ... | +| case.rb:3:5:3:42 | [no-match] when ... | case.rb:4:5:4:24 | [no-match] when ... | +| case.rb:3:5:3:42 | [no-match] when ... | case.rb:4:10:4:10 | 2 | +| case.rb:3:5:3:42 | [no-match] when ... | case.rb:4:17:4:24 | self | +| case.rb:3:18:3:41 | if ... | case.rb:3:18:3:41 | if ... | +| case.rb:3:21:3:22 | self | case.rb:3:18:3:41 | if ... | +| case.rb:3:21:3:22 | self | case.rb:3:21:3:22 | self | +| case.rb:3:21:3:22 | self | case.rb:3:29:3:37 | self | +| case.rb:3:29:3:37 | self | case.rb:3:29:3:37 | self | +| case.rb:4:5:4:24 | [match] when ... | case.rb:4:5:4:24 | [match] when ... | +| case.rb:4:5:4:24 | [match] when ... | case.rb:4:17:4:24 | self | +| case.rb:4:5:4:24 | [no-match] when ... | case.rb:4:5:4:24 | [no-match] when ... | +| case.rb:4:10:4:10 | 2 | case.rb:4:5:4:24 | [match] when ... | +| case.rb:4:10:4:10 | 2 | case.rb:4:5:4:24 | [no-match] when ... | +| case.rb:4:10:4:10 | 2 | case.rb:4:10:4:10 | 2 | +| case.rb:4:10:4:10 | 2 | case.rb:4:17:4:24 | self | +| case.rb:4:17:4:24 | self | case.rb:4:17:4:24 | self | +| case.rb:8:1:18:3 | enter case_match | case.rb:8:1:18:3 | enter case_match | +| case.rb:8:1:18:3 | enter case_match | case.rb:9:3:17:5 | case ... | +| case.rb:8:1:18:3 | enter case_match | case.rb:11:5:11:15 | in ... then ... | +| case.rb:8:1:18:3 | enter case_match | case.rb:11:15:11:15 | 3 | +| case.rb:8:1:18:3 | enter case_match | case.rb:12:5:13:7 | in ... then ... | +| case.rb:8:1:18:3 | enter case_match | case.rb:13:7:13:7 | 4 | +| case.rb:8:1:18:3 | enter case_match | case.rb:14:5:14:25 | in ... then ... | +| case.rb:8:1:18:3 | enter case_match | case.rb:14:13:14:13 | x | +| case.rb:8:1:18:3 | enter case_match | case.rb:14:25:14:25 | 6 | +| case.rb:8:1:18:3 | enter case_match | case.rb:15:5:15:28 | in ... then ... | +| case.rb:8:1:18:3 | enter case_match | case.rb:15:17:15:17 | x | +| case.rb:8:1:18:3 | enter case_match | case.rb:15:28:15:28 | 7 | +| case.rb:8:1:18:3 | enter case_match | case.rb:16:10:16:10 | 8 | +| case.rb:9:3:17:5 | case ... | case.rb:9:3:17:5 | case ... | +| case.rb:11:5:11:15 | in ... then ... | case.rb:11:5:11:15 | in ... then ... | +| case.rb:11:5:11:15 | in ... then ... | case.rb:11:15:11:15 | 3 | +| case.rb:11:5:11:15 | in ... then ... | case.rb:12:5:13:7 | in ... then ... | +| case.rb:11:5:11:15 | in ... then ... | case.rb:13:7:13:7 | 4 | +| case.rb:11:5:11:15 | in ... then ... | case.rb:14:5:14:25 | in ... then ... | +| case.rb:11:5:11:15 | in ... then ... | case.rb:14:13:14:13 | x | +| case.rb:11:5:11:15 | in ... then ... | case.rb:14:25:14:25 | 6 | +| case.rb:11:5:11:15 | in ... then ... | case.rb:15:5:15:28 | in ... then ... | +| case.rb:11:5:11:15 | in ... then ... | case.rb:15:17:15:17 | x | +| case.rb:11:5:11:15 | in ... then ... | case.rb:15:28:15:28 | 7 | +| case.rb:11:5:11:15 | in ... then ... | case.rb:16:10:16:10 | 8 | +| case.rb:11:15:11:15 | 3 | case.rb:11:15:11:15 | 3 | +| case.rb:12:5:13:7 | in ... then ... | case.rb:12:5:13:7 | in ... then ... | +| case.rb:12:5:13:7 | in ... then ... | case.rb:13:7:13:7 | 4 | +| case.rb:12:5:13:7 | in ... then ... | case.rb:14:5:14:25 | in ... then ... | +| case.rb:12:5:13:7 | in ... then ... | case.rb:14:13:14:13 | x | +| case.rb:12:5:13:7 | in ... then ... | case.rb:14:25:14:25 | 6 | +| case.rb:12:5:13:7 | in ... then ... | case.rb:15:5:15:28 | in ... then ... | +| case.rb:12:5:13:7 | in ... then ... | case.rb:15:17:15:17 | x | +| case.rb:12:5:13:7 | in ... then ... | case.rb:15:28:15:28 | 7 | +| case.rb:12:5:13:7 | in ... then ... | case.rb:16:10:16:10 | 8 | +| case.rb:13:7:13:7 | 4 | case.rb:13:7:13:7 | 4 | +| case.rb:14:5:14:25 | in ... then ... | case.rb:14:5:14:25 | in ... then ... | +| case.rb:14:5:14:25 | in ... then ... | case.rb:14:13:14:13 | x | +| case.rb:14:5:14:25 | in ... then ... | case.rb:14:25:14:25 | 6 | +| case.rb:14:5:14:25 | in ... then ... | case.rb:15:5:15:28 | in ... then ... | +| case.rb:14:5:14:25 | in ... then ... | case.rb:15:17:15:17 | x | +| case.rb:14:5:14:25 | in ... then ... | case.rb:15:28:15:28 | 7 | +| case.rb:14:5:14:25 | in ... then ... | case.rb:16:10:16:10 | 8 | +| case.rb:14:13:14:13 | x | case.rb:14:13:14:13 | x | +| case.rb:14:13:14:13 | x | case.rb:14:25:14:25 | 6 | +| case.rb:14:13:14:13 | x | case.rb:15:5:15:28 | in ... then ... | +| case.rb:14:13:14:13 | x | case.rb:15:17:15:17 | x | +| case.rb:14:13:14:13 | x | case.rb:15:28:15:28 | 7 | +| case.rb:14:13:14:13 | x | case.rb:16:10:16:10 | 8 | +| case.rb:14:25:14:25 | 6 | case.rb:14:25:14:25 | 6 | +| case.rb:15:5:15:28 | in ... then ... | case.rb:15:5:15:28 | in ... then ... | +| case.rb:15:5:15:28 | in ... then ... | case.rb:15:17:15:17 | x | +| case.rb:15:5:15:28 | in ... then ... | case.rb:15:28:15:28 | 7 | +| case.rb:15:5:15:28 | in ... then ... | case.rb:16:10:16:10 | 8 | +| case.rb:15:17:15:17 | x | case.rb:15:17:15:17 | x | +| case.rb:15:17:15:17 | x | case.rb:15:28:15:28 | 7 | +| case.rb:15:17:15:17 | x | case.rb:16:10:16:10 | 8 | +| case.rb:15:28:15:28 | 7 | case.rb:15:28:15:28 | 7 | +| case.rb:16:10:16:10 | 8 | case.rb:16:10:16:10 | 8 | +| case.rb:20:1:24:3 | enter case_match_no_match | case.rb:20:1:24:3 | enter case_match_no_match | +| case.rb:20:1:24:3 | enter case_match_no_match | case.rb:20:1:24:3 | exit case_match_no_match | +| case.rb:20:1:24:3 | enter case_match_no_match | case.rb:20:1:24:3 | exit case_match_no_match (abnormal) | +| case.rb:20:1:24:3 | enter case_match_no_match | case.rb:21:3:23:5 | case ... | +| case.rb:20:1:24:3 | exit case_match_no_match | case.rb:20:1:24:3 | exit case_match_no_match | +| case.rb:20:1:24:3 | exit case_match_no_match (abnormal) | case.rb:20:1:24:3 | exit case_match_no_match (abnormal) | +| case.rb:21:3:23:5 | case ... | case.rb:21:3:23:5 | case ... | +| case.rb:26:1:30:3 | enter case_match_raise | case.rb:26:1:30:3 | enter case_match_raise | +| case.rb:26:1:30:3 | enter case_match_raise | case.rb:26:1:30:3 | exit case_match_raise | +| case.rb:26:1:30:3 | enter case_match_raise | case.rb:26:1:30:3 | exit case_match_raise (abnormal) | +| case.rb:26:1:30:3 | enter case_match_raise | case.rb:27:3:29:5 | case ... | +| case.rb:26:1:30:3 | exit case_match_raise | case.rb:26:1:30:3 | exit case_match_raise | +| case.rb:26:1:30:3 | exit case_match_raise (abnormal) | case.rb:26:1:30:3 | exit case_match_raise (abnormal) | +| case.rb:27:3:29:5 | case ... | case.rb:27:3:29:5 | case ... | +| case.rb:28:7:28:28 | enter -> { ... } | case.rb:28:7:28:28 | enter -> { ... } | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:32:1:39:3 | enter case_match_array | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:32:1:39:3 | exit case_match_array | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:32:1:39:3 | exit case_match_array (abnormal) | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:33:3:38:5 | case ... | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:35:5:35:11 | in ... then ... | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:35:9:35:9 | x | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:36:5:36:13 | in ... then ... | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:36:9:36:9 | x | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:37:5:37:27 | in ... then ... | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:37:8:37:26 | [ ..., * ] | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:37:12:37:12 | a | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:37:15:37:15 | b | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:37:19:37:19 | c | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:37:25:37:25 | e | +| case.rb:32:1:39:3 | exit case_match_array | case.rb:32:1:39:3 | exit case_match_array | +| case.rb:32:1:39:3 | exit case_match_array (abnormal) | case.rb:32:1:39:3 | exit case_match_array (abnormal) | +| case.rb:33:3:38:5 | case ... | case.rb:33:3:38:5 | case ... | +| case.rb:35:5:35:11 | in ... then ... | case.rb:32:1:39:3 | exit case_match_array (abnormal) | +| case.rb:35:5:35:11 | in ... then ... | case.rb:35:5:35:11 | in ... then ... | +| case.rb:35:5:35:11 | in ... then ... | case.rb:35:9:35:9 | x | +| case.rb:35:5:35:11 | in ... then ... | case.rb:36:5:36:13 | in ... then ... | +| case.rb:35:5:35:11 | in ... then ... | case.rb:36:9:36:9 | x | +| case.rb:35:5:35:11 | in ... then ... | case.rb:37:5:37:27 | in ... then ... | +| case.rb:35:5:35:11 | in ... then ... | case.rb:37:8:37:26 | [ ..., * ] | +| case.rb:35:5:35:11 | in ... then ... | case.rb:37:12:37:12 | a | +| case.rb:35:5:35:11 | in ... then ... | case.rb:37:15:37:15 | b | +| case.rb:35:5:35:11 | in ... then ... | case.rb:37:19:37:19 | c | +| case.rb:35:5:35:11 | in ... then ... | case.rb:37:25:37:25 | e | +| case.rb:35:9:35:9 | x | case.rb:35:9:35:9 | x | +| case.rb:36:5:36:13 | in ... then ... | case.rb:32:1:39:3 | exit case_match_array (abnormal) | +| case.rb:36:5:36:13 | in ... then ... | case.rb:36:5:36:13 | in ... then ... | +| case.rb:36:5:36:13 | in ... then ... | case.rb:36:9:36:9 | x | +| case.rb:36:5:36:13 | in ... then ... | case.rb:37:5:37:27 | in ... then ... | +| case.rb:36:5:36:13 | in ... then ... | case.rb:37:8:37:26 | [ ..., * ] | +| case.rb:36:5:36:13 | in ... then ... | case.rb:37:12:37:12 | a | +| case.rb:36:5:36:13 | in ... then ... | case.rb:37:15:37:15 | b | +| case.rb:36:5:36:13 | in ... then ... | case.rb:37:19:37:19 | c | +| case.rb:36:5:36:13 | in ... then ... | case.rb:37:25:37:25 | e | +| case.rb:36:9:36:9 | x | case.rb:36:9:36:9 | x | +| case.rb:37:5:37:27 | in ... then ... | case.rb:32:1:39:3 | exit case_match_array (abnormal) | +| case.rb:37:5:37:27 | in ... then ... | case.rb:37:5:37:27 | in ... then ... | +| case.rb:37:5:37:27 | in ... then ... | case.rb:37:8:37:26 | [ ..., * ] | +| case.rb:37:5:37:27 | in ... then ... | case.rb:37:12:37:12 | a | +| case.rb:37:5:37:27 | in ... then ... | case.rb:37:15:37:15 | b | +| case.rb:37:5:37:27 | in ... then ... | case.rb:37:19:37:19 | c | +| case.rb:37:5:37:27 | in ... then ... | case.rb:37:25:37:25 | e | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:8:37:26 | [ ..., * ] | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:12:37:12 | a | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:15:37:15 | b | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:19:37:19 | c | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:25:37:25 | e | +| case.rb:37:12:37:12 | a | case.rb:37:12:37:12 | a | +| case.rb:37:12:37:12 | a | case.rb:37:15:37:15 | b | +| case.rb:37:12:37:12 | a | case.rb:37:19:37:19 | c | +| case.rb:37:12:37:12 | a | case.rb:37:25:37:25 | e | +| case.rb:37:15:37:15 | b | case.rb:37:15:37:15 | b | +| case.rb:37:15:37:15 | b | case.rb:37:19:37:19 | c | +| case.rb:37:15:37:15 | b | case.rb:37:25:37:25 | e | +| case.rb:37:19:37:19 | c | case.rb:37:19:37:19 | c | +| case.rb:37:19:37:19 | c | case.rb:37:25:37:25 | e | +| case.rb:37:25:37:25 | e | case.rb:37:25:37:25 | e | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:41:1:45:3 | enter case_match_find | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:41:1:45:3 | exit case_match_find | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:41:1:45:3 | exit case_match_find (abnormal) | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:43:10:43:10 | x | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:43:16:43:16 | 2 | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:43:20:43:20 | y | +| case.rb:41:1:45:3 | exit case_match_find | case.rb:41:1:45:3 | exit case_match_find | +| case.rb:41:1:45:3 | exit case_match_find (abnormal) | case.rb:41:1:45:3 | exit case_match_find (abnormal) | +| case.rb:43:10:43:10 | x | case.rb:43:10:43:10 | x | +| case.rb:43:10:43:10 | x | case.rb:43:16:43:16 | 2 | +| case.rb:43:10:43:10 | x | case.rb:43:20:43:20 | y | +| case.rb:43:16:43:16 | 2 | case.rb:43:16:43:16 | 2 | +| case.rb:43:16:43:16 | 2 | case.rb:43:20:43:20 | y | +| case.rb:43:20:43:20 | y | case.rb:43:20:43:20 | y | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:47:1:53:3 | enter case_match_hash | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:47:1:53:3 | exit case_match_hash | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:48:3:52:5 | case ... | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:49:8:49:34 | { ..., ** } | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:49:20:49:20 | 1 | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:49:23:49:23 | a | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:49:29:49:32 | rest | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:50:5:50:25 | in ... then ... | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:50:8:50:24 | { ..., ** } | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:50:16:50:16 | 1 | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:51:5:51:17 | in ... then ... | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:51:8:51:16 | { ..., ** } | +| case.rb:47:1:53:3 | exit case_match_hash | case.rb:47:1:53:3 | exit case_match_hash | +| case.rb:47:1:53:3 | exit case_match_hash (abnormal) | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | +| case.rb:48:3:52:5 | case ... | case.rb:48:3:52:5 | case ... | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:8:49:34 | { ..., ** } | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:20:49:20 | 1 | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:23:49:23 | a | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:29:49:32 | rest | +| case.rb:49:20:49:20 | 1 | case.rb:49:20:49:20 | 1 | +| case.rb:49:20:49:20 | 1 | case.rb:49:23:49:23 | a | +| case.rb:49:20:49:20 | 1 | case.rb:49:29:49:32 | rest | +| case.rb:49:23:49:23 | a | case.rb:49:23:49:23 | a | +| case.rb:49:23:49:23 | a | case.rb:49:29:49:32 | rest | +| case.rb:49:29:49:32 | rest | case.rb:49:29:49:32 | rest | +| case.rb:50:5:50:25 | in ... then ... | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | +| case.rb:50:5:50:25 | in ... then ... | case.rb:50:5:50:25 | in ... then ... | +| case.rb:50:5:50:25 | in ... then ... | case.rb:50:8:50:24 | { ..., ** } | +| case.rb:50:5:50:25 | in ... then ... | case.rb:50:16:50:16 | 1 | +| case.rb:50:5:50:25 | in ... then ... | case.rb:51:5:51:17 | in ... then ... | +| case.rb:50:5:50:25 | in ... then ... | case.rb:51:8:51:16 | { ..., ** } | +| case.rb:50:8:50:24 | { ..., ** } | case.rb:50:8:50:24 | { ..., ** } | +| case.rb:50:8:50:24 | { ..., ** } | case.rb:50:16:50:16 | 1 | +| case.rb:50:16:50:16 | 1 | case.rb:50:16:50:16 | 1 | +| case.rb:51:5:51:17 | in ... then ... | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | +| case.rb:51:5:51:17 | in ... then ... | case.rb:51:5:51:17 | in ... then ... | +| case.rb:51:5:51:17 | in ... then ... | case.rb:51:8:51:16 | { ..., ** } | +| case.rb:51:8:51:16 | { ..., ** } | case.rb:51:8:51:16 | { ..., ** } | +| case.rb:55:1:61:3 | enter case_match_variable | case.rb:55:1:61:3 | enter case_match_variable | +| case.rb:55:1:61:3 | enter case_match_variable | case.rb:56:3:60:5 | case ... | +| case.rb:55:1:61:3 | enter case_match_variable | case.rb:58:5:58:10 | in ... then ... | +| case.rb:56:3:60:5 | case ... | case.rb:56:3:60:5 | case ... | +| case.rb:58:5:58:10 | in ... then ... | case.rb:58:5:58:10 | in ... then ... | +| case.rb:63:1:67:3 | enter case_match_underscore | case.rb:63:1:67:3 | enter case_match_underscore | +| case.rb:63:1:67:3 | enter case_match_underscore | case.rb:64:3:66:5 | case ... | +| case.rb:63:1:67:3 | enter case_match_underscore | case.rb:65:12:65:12 | _ | +| case.rb:64:3:66:5 | case ... | case.rb:64:3:66:5 | case ... | +| case.rb:65:12:65:12 | _ | case.rb:65:12:65:12 | _ | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:69:1:93:3 | enter case_match_various | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:69:1:93:3 | exit case_match_various | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:72:3:92:5 | case ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:74:5:74:11 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:75:5:75:15 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:76:5:76:18 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:77:5:77:18 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:78:5:78:19 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:79:5:79:14 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:80:5:80:12 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:81:5:81:11 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:82:5:82:20 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:82:13:82:13 | x | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:82:20:82:20 | 1 | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:83:5:83:26 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:83:12:83:15 | ^... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:83:20:83:25 | string | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:84:5:84:17 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:85:5:85:23 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:86:5:86:11 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:87:5:87:17 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:88:5:88:15 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:88:14:88:15 | 10 | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:89:5:89:69 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:89:14:89:17 | self | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:89:21:89:24 | true | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:89:28:89:32 | false | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:89:36:89:43 | __LINE__ | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:89:47:89:54 | __FILE__ | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:90:5:90:13 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:91:5:91:25 | in ... then ... | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:91:13:91:14 | "" | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:69:1:93:3 | exit case_match_various | case.rb:69:1:93:3 | exit case_match_various | +| case.rb:69:1:93:3 | exit case_match_various (abnormal) | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:72:3:92:5 | case ... | case.rb:72:3:92:5 | case ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:74:5:74:11 | in ... then ... | case.rb:74:5:74:11 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:75:5:75:15 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:76:5:76:18 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:77:5:77:18 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:78:5:78:19 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:79:5:79:14 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:80:5:80:12 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:82:13:82:13 | x | +| case.rb:74:5:74:11 | in ... then ... | case.rb:82:20:82:20 | 1 | +| case.rb:74:5:74:11 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:83:12:83:15 | ^... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:83:20:83:25 | string | +| case.rb:74:5:74:11 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:88:14:88:15 | 10 | +| case.rb:74:5:74:11 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:89:14:89:17 | self | +| case.rb:74:5:74:11 | in ... then ... | case.rb:89:21:89:24 | true | +| case.rb:74:5:74:11 | in ... then ... | case.rb:89:28:89:32 | false | +| case.rb:74:5:74:11 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:74:5:74:11 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:74:5:74:11 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:74:5:74:11 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:74:5:74:11 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:74:5:74:11 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:74:5:74:11 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:75:5:75:15 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:75:5:75:15 | in ... then ... | case.rb:75:5:75:15 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:76:5:76:18 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:77:5:77:18 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:78:5:78:19 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:79:5:79:14 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:80:5:80:12 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:82:13:82:13 | x | +| case.rb:75:5:75:15 | in ... then ... | case.rb:82:20:82:20 | 1 | +| case.rb:75:5:75:15 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:83:12:83:15 | ^... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:83:20:83:25 | string | +| case.rb:75:5:75:15 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:88:14:88:15 | 10 | +| case.rb:75:5:75:15 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:89:14:89:17 | self | +| case.rb:75:5:75:15 | in ... then ... | case.rb:89:21:89:24 | true | +| case.rb:75:5:75:15 | in ... then ... | case.rb:89:28:89:32 | false | +| case.rb:75:5:75:15 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:75:5:75:15 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:75:5:75:15 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:75:5:75:15 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:75:5:75:15 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:75:5:75:15 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:76:5:76:18 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:76:5:76:18 | in ... then ... | case.rb:76:5:76:18 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:77:5:77:18 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:78:5:78:19 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:79:5:79:14 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:80:5:80:12 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:82:13:82:13 | x | +| case.rb:76:5:76:18 | in ... then ... | case.rb:82:20:82:20 | 1 | +| case.rb:76:5:76:18 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:83:12:83:15 | ^... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:83:20:83:25 | string | +| case.rb:76:5:76:18 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:88:14:88:15 | 10 | +| case.rb:76:5:76:18 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:89:14:89:17 | self | +| case.rb:76:5:76:18 | in ... then ... | case.rb:89:21:89:24 | true | +| case.rb:76:5:76:18 | in ... then ... | case.rb:89:28:89:32 | false | +| case.rb:76:5:76:18 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:76:5:76:18 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:76:5:76:18 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:76:5:76:18 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:76:5:76:18 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:76:5:76:18 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:77:5:77:18 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:77:5:77:18 | in ... then ... | case.rb:77:5:77:18 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:78:5:78:19 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:79:5:79:14 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:80:5:80:12 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:82:13:82:13 | x | +| case.rb:77:5:77:18 | in ... then ... | case.rb:82:20:82:20 | 1 | +| case.rb:77:5:77:18 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:83:12:83:15 | ^... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:83:20:83:25 | string | +| case.rb:77:5:77:18 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:88:14:88:15 | 10 | +| case.rb:77:5:77:18 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:89:14:89:17 | self | +| case.rb:77:5:77:18 | in ... then ... | case.rb:89:21:89:24 | true | +| case.rb:77:5:77:18 | in ... then ... | case.rb:89:28:89:32 | false | +| case.rb:77:5:77:18 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:77:5:77:18 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:77:5:77:18 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:77:5:77:18 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:77:5:77:18 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:77:5:77:18 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:78:5:78:19 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:78:5:78:19 | in ... then ... | case.rb:78:5:78:19 | in ... then ... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:79:5:79:14 | in ... then ... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:80:5:80:12 | in ... then ... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:82:13:82:13 | x | +| case.rb:78:5:78:19 | in ... then ... | case.rb:82:20:82:20 | 1 | +| case.rb:78:5:78:19 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:83:12:83:15 | ^... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:83:20:83:25 | string | +| case.rb:78:5:78:19 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:88:14:88:15 | 10 | +| case.rb:78:5:78:19 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:89:14:89:17 | self | +| case.rb:78:5:78:19 | in ... then ... | case.rb:89:21:89:24 | true | +| case.rb:78:5:78:19 | in ... then ... | case.rb:89:28:89:32 | false | +| case.rb:78:5:78:19 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:78:5:78:19 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:78:5:78:19 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:78:5:78:19 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:78:5:78:19 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:78:5:78:19 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:79:5:79:14 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:79:5:79:14 | in ... then ... | case.rb:79:5:79:14 | in ... then ... | +| case.rb:79:5:79:14 | in ... then ... | case.rb:80:5:80:12 | in ... then ... | +| case.rb:79:5:79:14 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | +| case.rb:79:5:79:14 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | +| case.rb:79:5:79:14 | in ... then ... | case.rb:82:13:82:13 | x | +| case.rb:79:5:79:14 | in ... then ... | case.rb:82:20:82:20 | 1 | +| case.rb:79:5:79:14 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | +| case.rb:79:5:79:14 | in ... then ... | case.rb:83:12:83:15 | ^... | +| case.rb:79:5:79:14 | in ... then ... | case.rb:83:20:83:25 | string | +| case.rb:79:5:79:14 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | +| case.rb:79:5:79:14 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | +| case.rb:79:5:79:14 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:79:5:79:14 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:79:5:79:14 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:79:5:79:14 | in ... then ... | case.rb:88:14:88:15 | 10 | +| case.rb:79:5:79:14 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:79:5:79:14 | in ... then ... | case.rb:89:14:89:17 | self | +| case.rb:79:5:79:14 | in ... then ... | case.rb:89:21:89:24 | true | +| case.rb:79:5:79:14 | in ... then ... | case.rb:89:28:89:32 | false | +| case.rb:79:5:79:14 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:79:5:79:14 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:79:5:79:14 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:79:5:79:14 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:79:5:79:14 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:79:5:79:14 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:79:5:79:14 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:79:5:79:14 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:80:5:80:12 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:80:5:80:12 | in ... then ... | case.rb:80:5:80:12 | in ... then ... | +| case.rb:80:5:80:12 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | +| case.rb:80:5:80:12 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | +| case.rb:80:5:80:12 | in ... then ... | case.rb:82:13:82:13 | x | +| case.rb:80:5:80:12 | in ... then ... | case.rb:82:20:82:20 | 1 | +| case.rb:80:5:80:12 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | +| case.rb:80:5:80:12 | in ... then ... | case.rb:83:12:83:15 | ^... | +| case.rb:80:5:80:12 | in ... then ... | case.rb:83:20:83:25 | string | +| case.rb:80:5:80:12 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | +| case.rb:80:5:80:12 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | +| case.rb:80:5:80:12 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:80:5:80:12 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:80:5:80:12 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:80:5:80:12 | in ... then ... | case.rb:88:14:88:15 | 10 | +| case.rb:80:5:80:12 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:80:5:80:12 | in ... then ... | case.rb:89:14:89:17 | self | +| case.rb:80:5:80:12 | in ... then ... | case.rb:89:21:89:24 | true | +| case.rb:80:5:80:12 | in ... then ... | case.rb:89:28:89:32 | false | +| case.rb:80:5:80:12 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:80:5:80:12 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:80:5:80:12 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:80:5:80:12 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:80:5:80:12 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:80:5:80:12 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:80:5:80:12 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:80:5:80:12 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:81:5:81:11 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:81:5:81:11 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | +| case.rb:81:5:81:11 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | +| case.rb:81:5:81:11 | in ... then ... | case.rb:82:13:82:13 | x | +| case.rb:81:5:81:11 | in ... then ... | case.rb:82:20:82:20 | 1 | +| case.rb:81:5:81:11 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | +| case.rb:81:5:81:11 | in ... then ... | case.rb:83:12:83:15 | ^... | +| case.rb:81:5:81:11 | in ... then ... | case.rb:83:20:83:25 | string | +| case.rb:81:5:81:11 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | +| case.rb:81:5:81:11 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | +| case.rb:81:5:81:11 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:81:5:81:11 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:81:5:81:11 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:81:5:81:11 | in ... then ... | case.rb:88:14:88:15 | 10 | +| case.rb:81:5:81:11 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:81:5:81:11 | in ... then ... | case.rb:89:14:89:17 | self | +| case.rb:81:5:81:11 | in ... then ... | case.rb:89:21:89:24 | true | +| case.rb:81:5:81:11 | in ... then ... | case.rb:89:28:89:32 | false | +| case.rb:81:5:81:11 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:81:5:81:11 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:81:5:81:11 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:81:5:81:11 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:81:5:81:11 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:81:5:81:11 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:81:5:81:11 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:81:5:81:11 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:82:5:82:20 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:82:5:82:20 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | +| case.rb:82:5:82:20 | in ... then ... | case.rb:82:13:82:13 | x | +| case.rb:82:5:82:20 | in ... then ... | case.rb:82:20:82:20 | 1 | +| case.rb:82:5:82:20 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | +| case.rb:82:5:82:20 | in ... then ... | case.rb:83:12:83:15 | ^... | +| case.rb:82:5:82:20 | in ... then ... | case.rb:83:20:83:25 | string | +| case.rb:82:5:82:20 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | +| case.rb:82:5:82:20 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | +| case.rb:82:5:82:20 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:82:5:82:20 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:82:5:82:20 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:82:5:82:20 | in ... then ... | case.rb:88:14:88:15 | 10 | +| case.rb:82:5:82:20 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:82:5:82:20 | in ... then ... | case.rb:89:14:89:17 | self | +| case.rb:82:5:82:20 | in ... then ... | case.rb:89:21:89:24 | true | +| case.rb:82:5:82:20 | in ... then ... | case.rb:89:28:89:32 | false | +| case.rb:82:5:82:20 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:82:5:82:20 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:82:5:82:20 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:82:5:82:20 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:82:5:82:20 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:82:5:82:20 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:82:5:82:20 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:82:5:82:20 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:82:13:82:13 | x | case.rb:82:13:82:13 | x | +| case.rb:82:13:82:13 | x | case.rb:82:20:82:20 | 1 | +| case.rb:82:20:82:20 | 1 | case.rb:82:20:82:20 | 1 | +| case.rb:83:5:83:26 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:83:5:83:26 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | +| case.rb:83:5:83:26 | in ... then ... | case.rb:83:12:83:15 | ^... | +| case.rb:83:5:83:26 | in ... then ... | case.rb:83:20:83:25 | string | +| case.rb:83:5:83:26 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | +| case.rb:83:5:83:26 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | +| case.rb:83:5:83:26 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:83:5:83:26 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:83:5:83:26 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:83:5:83:26 | in ... then ... | case.rb:88:14:88:15 | 10 | +| case.rb:83:5:83:26 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:83:5:83:26 | in ... then ... | case.rb:89:14:89:17 | self | +| case.rb:83:5:83:26 | in ... then ... | case.rb:89:21:89:24 | true | +| case.rb:83:5:83:26 | in ... then ... | case.rb:89:28:89:32 | false | +| case.rb:83:5:83:26 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:83:5:83:26 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:83:5:83:26 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:83:5:83:26 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:83:5:83:26 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:83:5:83:26 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:83:5:83:26 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:83:5:83:26 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:83:12:83:15 | ^... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:83:12:83:15 | ^... | case.rb:83:12:83:15 | ^... | +| case.rb:83:12:83:15 | ^... | case.rb:83:20:83:25 | string | +| case.rb:83:12:83:15 | ^... | case.rb:84:5:84:17 | in ... then ... | +| case.rb:83:12:83:15 | ^... | case.rb:85:5:85:23 | in ... then ... | +| case.rb:83:12:83:15 | ^... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:83:12:83:15 | ^... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:83:12:83:15 | ^... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:83:12:83:15 | ^... | case.rb:88:14:88:15 | 10 | +| case.rb:83:12:83:15 | ^... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:83:12:83:15 | ^... | case.rb:89:14:89:17 | self | +| case.rb:83:12:83:15 | ^... | case.rb:89:21:89:24 | true | +| case.rb:83:12:83:15 | ^... | case.rb:89:28:89:32 | false | +| case.rb:83:12:83:15 | ^... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:83:12:83:15 | ^... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:83:12:83:15 | ^... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:83:12:83:15 | ^... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:83:12:83:15 | ^... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:83:12:83:15 | ^... | case.rb:91:13:91:14 | "" | +| case.rb:83:12:83:15 | ^... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:83:12:83:15 | ^... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:83:20:83:25 | string | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:83:20:83:25 | string | case.rb:83:20:83:25 | string | +| case.rb:83:20:83:25 | string | case.rb:84:5:84:17 | in ... then ... | +| case.rb:83:20:83:25 | string | case.rb:85:5:85:23 | in ... then ... | +| case.rb:83:20:83:25 | string | case.rb:86:5:86:11 | in ... then ... | +| case.rb:83:20:83:25 | string | case.rb:87:5:87:17 | in ... then ... | +| case.rb:83:20:83:25 | string | case.rb:88:5:88:15 | in ... then ... | +| case.rb:83:20:83:25 | string | case.rb:88:14:88:15 | 10 | +| case.rb:83:20:83:25 | string | case.rb:89:5:89:69 | in ... then ... | +| case.rb:83:20:83:25 | string | case.rb:89:14:89:17 | self | +| case.rb:83:20:83:25 | string | case.rb:89:21:89:24 | true | +| case.rb:83:20:83:25 | string | case.rb:89:28:89:32 | false | +| case.rb:83:20:83:25 | string | case.rb:89:36:89:43 | __LINE__ | +| case.rb:83:20:83:25 | string | case.rb:89:47:89:54 | __FILE__ | +| case.rb:83:20:83:25 | string | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:83:20:83:25 | string | case.rb:90:5:90:13 | in ... then ... | +| case.rb:83:20:83:25 | string | case.rb:91:5:91:25 | in ... then ... | +| case.rb:83:20:83:25 | string | case.rb:91:13:91:14 | "" | +| case.rb:83:20:83:25 | string | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:83:20:83:25 | string | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:84:5:84:17 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:84:5:84:17 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | +| case.rb:84:5:84:17 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | +| case.rb:84:5:84:17 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:84:5:84:17 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:84:5:84:17 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:84:5:84:17 | in ... then ... | case.rb:88:14:88:15 | 10 | +| case.rb:84:5:84:17 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:84:5:84:17 | in ... then ... | case.rb:89:14:89:17 | self | +| case.rb:84:5:84:17 | in ... then ... | case.rb:89:21:89:24 | true | +| case.rb:84:5:84:17 | in ... then ... | case.rb:89:28:89:32 | false | +| case.rb:84:5:84:17 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:84:5:84:17 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:84:5:84:17 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:84:5:84:17 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:84:5:84:17 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:84:5:84:17 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:84:5:84:17 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:84:5:84:17 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:85:5:85:23 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:85:5:85:23 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | +| case.rb:85:5:85:23 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:85:5:85:23 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:85:5:85:23 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:85:5:85:23 | in ... then ... | case.rb:88:14:88:15 | 10 | +| case.rb:85:5:85:23 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:85:5:85:23 | in ... then ... | case.rb:89:14:89:17 | self | +| case.rb:85:5:85:23 | in ... then ... | case.rb:89:21:89:24 | true | +| case.rb:85:5:85:23 | in ... then ... | case.rb:89:28:89:32 | false | +| case.rb:85:5:85:23 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:85:5:85:23 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:85:5:85:23 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:85:5:85:23 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:85:5:85:23 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:85:5:85:23 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:85:5:85:23 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:85:5:85:23 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:85:8:85:23 | enter -> { ... } | case.rb:85:8:85:23 | enter -> { ... } | +| case.rb:86:5:86:11 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:86:5:86:11 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:86:5:86:11 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:86:5:86:11 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:86:5:86:11 | in ... then ... | case.rb:88:14:88:15 | 10 | +| case.rb:86:5:86:11 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:86:5:86:11 | in ... then ... | case.rb:89:14:89:17 | self | +| case.rb:86:5:86:11 | in ... then ... | case.rb:89:21:89:24 | true | +| case.rb:86:5:86:11 | in ... then ... | case.rb:89:28:89:32 | false | +| case.rb:86:5:86:11 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:86:5:86:11 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:86:5:86:11 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:86:5:86:11 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:86:5:86:11 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:86:5:86:11 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:86:5:86:11 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:86:5:86:11 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:87:5:87:17 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:87:5:87:17 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:87:5:87:17 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:87:5:87:17 | in ... then ... | case.rb:88:14:88:15 | 10 | +| case.rb:87:5:87:17 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:87:5:87:17 | in ... then ... | case.rb:89:14:89:17 | self | +| case.rb:87:5:87:17 | in ... then ... | case.rb:89:21:89:24 | true | +| case.rb:87:5:87:17 | in ... then ... | case.rb:89:28:89:32 | false | +| case.rb:87:5:87:17 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:87:5:87:17 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:87:5:87:17 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:87:5:87:17 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:87:5:87:17 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:87:5:87:17 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:87:5:87:17 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:87:5:87:17 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:88:5:88:15 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:88:5:88:15 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:88:5:88:15 | in ... then ... | case.rb:88:14:88:15 | 10 | +| case.rb:88:5:88:15 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:88:5:88:15 | in ... then ... | case.rb:89:14:89:17 | self | +| case.rb:88:5:88:15 | in ... then ... | case.rb:89:21:89:24 | true | +| case.rb:88:5:88:15 | in ... then ... | case.rb:89:28:89:32 | false | +| case.rb:88:5:88:15 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:88:5:88:15 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:88:5:88:15 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:88:5:88:15 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:88:5:88:15 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:88:5:88:15 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:88:5:88:15 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:88:5:88:15 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:88:14:88:15 | 10 | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:88:14:88:15 | 10 | case.rb:88:14:88:15 | 10 | +| case.rb:88:14:88:15 | 10 | case.rb:89:5:89:69 | in ... then ... | +| case.rb:88:14:88:15 | 10 | case.rb:89:14:89:17 | self | +| case.rb:88:14:88:15 | 10 | case.rb:89:21:89:24 | true | +| case.rb:88:14:88:15 | 10 | case.rb:89:28:89:32 | false | +| case.rb:88:14:88:15 | 10 | case.rb:89:36:89:43 | __LINE__ | +| case.rb:88:14:88:15 | 10 | case.rb:89:47:89:54 | __FILE__ | +| case.rb:88:14:88:15 | 10 | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:88:14:88:15 | 10 | case.rb:90:5:90:13 | in ... then ... | +| case.rb:88:14:88:15 | 10 | case.rb:91:5:91:25 | in ... then ... | +| case.rb:88:14:88:15 | 10 | case.rb:91:13:91:14 | "" | +| case.rb:88:14:88:15 | 10 | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:88:14:88:15 | 10 | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:89:5:89:69 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:89:5:89:69 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:89:5:89:69 | in ... then ... | case.rb:89:14:89:17 | self | +| case.rb:89:5:89:69 | in ... then ... | case.rb:89:21:89:24 | true | +| case.rb:89:5:89:69 | in ... then ... | case.rb:89:28:89:32 | false | +| case.rb:89:5:89:69 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:89:5:89:69 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:89:5:89:69 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:89:5:89:69 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:89:5:89:69 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:89:5:89:69 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:89:5:89:69 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:89:5:89:69 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:89:14:89:17 | self | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:89:14:89:17 | self | case.rb:89:14:89:17 | self | +| case.rb:89:14:89:17 | self | case.rb:89:21:89:24 | true | +| case.rb:89:14:89:17 | self | case.rb:89:28:89:32 | false | +| case.rb:89:14:89:17 | self | case.rb:89:36:89:43 | __LINE__ | +| case.rb:89:14:89:17 | self | case.rb:89:47:89:54 | __FILE__ | +| case.rb:89:14:89:17 | self | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:89:14:89:17 | self | case.rb:90:5:90:13 | in ... then ... | +| case.rb:89:14:89:17 | self | case.rb:91:5:91:25 | in ... then ... | +| case.rb:89:14:89:17 | self | case.rb:91:13:91:14 | "" | +| case.rb:89:14:89:17 | self | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:89:14:89:17 | self | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:89:21:89:24 | true | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:89:21:89:24 | true | case.rb:89:21:89:24 | true | +| case.rb:89:21:89:24 | true | case.rb:89:28:89:32 | false | +| case.rb:89:21:89:24 | true | case.rb:89:36:89:43 | __LINE__ | +| case.rb:89:21:89:24 | true | case.rb:89:47:89:54 | __FILE__ | +| case.rb:89:21:89:24 | true | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:89:21:89:24 | true | case.rb:90:5:90:13 | in ... then ... | +| case.rb:89:21:89:24 | true | case.rb:91:5:91:25 | in ... then ... | +| case.rb:89:21:89:24 | true | case.rb:91:13:91:14 | "" | +| case.rb:89:21:89:24 | true | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:89:21:89:24 | true | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:89:28:89:32 | false | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:89:28:89:32 | false | case.rb:89:28:89:32 | false | +| case.rb:89:28:89:32 | false | case.rb:89:36:89:43 | __LINE__ | +| case.rb:89:28:89:32 | false | case.rb:89:47:89:54 | __FILE__ | +| case.rb:89:28:89:32 | false | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:89:28:89:32 | false | case.rb:90:5:90:13 | in ... then ... | +| case.rb:89:28:89:32 | false | case.rb:91:5:91:25 | in ... then ... | +| case.rb:89:28:89:32 | false | case.rb:91:13:91:14 | "" | +| case.rb:89:28:89:32 | false | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:89:28:89:32 | false | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:89:36:89:43 | __LINE__ | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:89:36:89:43 | __LINE__ | case.rb:89:36:89:43 | __LINE__ | +| case.rb:89:36:89:43 | __LINE__ | case.rb:89:47:89:54 | __FILE__ | +| case.rb:89:36:89:43 | __LINE__ | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:89:36:89:43 | __LINE__ | case.rb:90:5:90:13 | in ... then ... | +| case.rb:89:36:89:43 | __LINE__ | case.rb:91:5:91:25 | in ... then ... | +| case.rb:89:36:89:43 | __LINE__ | case.rb:91:13:91:14 | "" | +| case.rb:89:36:89:43 | __LINE__ | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:89:36:89:43 | __LINE__ | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:89:47:89:54 | __FILE__ | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:89:47:89:54 | __FILE__ | case.rb:89:47:89:54 | __FILE__ | +| case.rb:89:47:89:54 | __FILE__ | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:89:47:89:54 | __FILE__ | case.rb:90:5:90:13 | in ... then ... | +| case.rb:89:47:89:54 | __FILE__ | case.rb:91:5:91:25 | in ... then ... | +| case.rb:89:47:89:54 | __FILE__ | case.rb:91:13:91:14 | "" | +| case.rb:89:47:89:54 | __FILE__ | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:89:47:89:54 | __FILE__ | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:90:5:90:13 | in ... then ... | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:91:5:91:25 | in ... then ... | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:91:13:91:14 | "" | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:90:5:90:13 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:90:5:90:13 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:90:5:90:13 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:90:5:90:13 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:90:5:90:13 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:90:5:90:13 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:91:5:91:25 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:91:5:91:25 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:91:5:91:25 | in ... then ... | case.rb:91:13:91:14 | "" | +| case.rb:91:5:91:25 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:91:5:91:25 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:91:13:91:14 | "" | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:91:13:91:14 | "" | case.rb:91:13:91:14 | "" | +| case.rb:91:13:91:14 | "" | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:91:13:91:14 | "" | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:91:18:91:19 | [ ..., * ] | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:91:18:91:19 | [ ..., * ] | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:91:18:91:19 | [ ..., * ] | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:91:23:91:24 | { ..., ** } | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:91:23:91:24 | { ..., ** } | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:95:1:99:3 | enter case_match_guard_no_else | case.rb:95:1:99:3 | enter case_match_guard_no_else | +| case.rb:95:1:99:3 | enter case_match_guard_no_else | case.rb:95:1:99:3 | exit case_match_guard_no_else | +| case.rb:95:1:99:3 | enter case_match_guard_no_else | case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | +| case.rb:95:1:99:3 | enter case_match_guard_no_else | case.rb:97:13:97:13 | x | +| case.rb:95:1:99:3 | enter case_match_guard_no_else | case.rb:97:25:97:25 | 6 | +| case.rb:95:1:99:3 | exit case_match_guard_no_else | case.rb:95:1:99:3 | exit case_match_guard_no_else | +| case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | +| case.rb:97:13:97:13 | x | case.rb:95:1:99:3 | exit case_match_guard_no_else | +| case.rb:97:13:97:13 | x | case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | +| case.rb:97:13:97:13 | x | case.rb:97:13:97:13 | x | +| case.rb:97:13:97:13 | x | case.rb:97:25:97:25 | 6 | +| case.rb:97:25:97:25 | 6 | case.rb:97:25:97:25 | 6 | +| cfg.html.erb:5:16:31:12 | enter cfg.html.erb | cfg.html.erb:5:16:31:12 | enter cfg.html.erb | +| cfg.html.erb:5:16:31:12 | enter cfg.html.erb | cfg.html.erb:18:14:22:16 | if ... | +| cfg.html.erb:5:16:31:12 | enter cfg.html.erb | cfg.html.erb:19:19:19:32 | self | +| cfg.html.erb:5:16:31:12 | enter cfg.html.erb | cfg.html.erb:21:19:21:32 | self | +| cfg.html.erb:18:14:22:16 | if ... | cfg.html.erb:18:14:22:16 | if ... | +| cfg.html.erb:19:19:19:32 | self | cfg.html.erb:19:19:19:32 | self | +| cfg.html.erb:21:19:21:32 | self | cfg.html.erb:21:19:21:32 | self | +| cfg.html.erb:29:24:31:10 | enter do ... end | cfg.html.erb:29:24:31:10 | enter do ... end | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:42:15:42:24 | self | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:43:21:43:31 | self | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:44:8:44:18 | self | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:48:20:48:29 | self | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:49:8:49:8 | b | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:49:16:49:16 | b | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:49:27:49:37 | self | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:60:27:60:31 | hello | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:60:37:60:39 | bye | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:75:23:75:23 | x | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:75:43:75:43 | x | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:90:5:90:5 | x | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:113:1:113:9 | self | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:136:12:136:29 | self | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:172:21:172:29 | self | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:172:36:172:45 | self | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:174:1:174:9 | self | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:176:7:176:7 | x | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:176:17:176:17 | x | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:179:2:179:13 | self | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:179:30:179:30 | i | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:182:7:182:7 | x | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:183:3:183:3 | x | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:184:18:184:21 | redo | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:188:2:188:13 | self | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:188:30:188:30 | i | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:205:1:205:3 | nil | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:25:9:25:22 | enter { ... } | cfg.rb:25:9:25:22 | enter { ... } | +| cfg.rb:29:10:29:24 | enter { ... } | cfg.rb:29:10:29:24 | enter { ... } | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:42:15:42:24 | self | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:43:21:43:31 | self | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:44:8:44:18 | self | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:48:20:48:29 | self | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:49:8:49:8 | b | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:49:16:49:16 | b | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:49:27:49:37 | self | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:60:27:60:31 | hello | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:60:37:60:39 | bye | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:75:23:75:23 | x | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:75:43:75:43 | x | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:90:5:90:5 | x | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:113:1:113:9 | self | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:136:12:136:29 | self | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:172:21:172:29 | self | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:172:36:172:45 | self | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:174:1:174:9 | self | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:176:7:176:7 | x | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:176:17:176:17 | x | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:179:2:179:13 | self | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:179:30:179:30 | i | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:182:7:182:7 | x | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:183:3:183:3 | x | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:184:18:184:21 | redo | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:188:2:188:13 | self | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:188:30:188:30 | i | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:205:1:205:3 | nil | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:42:15:42:24 | self | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:48:20:48:29 | self | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:60:27:60:31 | hello | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:60:37:60:39 | bye | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:75:43:75:43 | x | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:90:5:90:5 | x | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:113:1:113:9 | self | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:136:12:136:29 | self | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:172:21:172:29 | self | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:172:36:172:45 | self | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:174:1:174:9 | self | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:176:7:176:7 | x | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:176:17:176:17 | x | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:179:2:179:13 | self | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:179:30:179:30 | i | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:182:7:182:7 | x | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:184:18:184:21 | redo | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:188:2:188:13 | self | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:188:30:188:30 | i | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:205:1:205:3 | nil | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:48:20:48:29 | self | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:60:27:60:31 | hello | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:60:37:60:39 | bye | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:75:43:75:43 | x | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:90:5:90:5 | x | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:113:1:113:9 | self | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:136:12:136:29 | self | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:172:21:172:29 | self | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:172:36:172:45 | self | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:174:1:174:9 | self | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:176:7:176:7 | x | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:176:17:176:17 | x | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:179:2:179:13 | self | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:179:30:179:30 | i | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:182:7:182:7 | x | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:184:18:184:21 | redo | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:188:2:188:13 | self | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:188:30:188:30 | i | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:205:1:205:3 | nil | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:42:3:42:24 | [match] when ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:42:3:42:24 | [match] when ... | cfg.rb:42:15:42:24 | self | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:42:15:42:24 | self | cfg.rb:42:15:42:24 | self | +| cfg.rb:43:3:43:31 | [match] when ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:43:3:43:31 | [match] when ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:43:3:43:31 | [no-match] when ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:43:3:43:31 | [no-match] when ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:43:8:43:8 | 2 | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:43:8:43:8 | 2 | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:43:8:43:8 | 2 | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:43:8:43:8 | 2 | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:43:8:43:8 | 2 | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:43:8:43:8 | 2 | cfg.rb:43:21:43:31 | self | +| cfg.rb:43:8:43:8 | 2 | cfg.rb:44:8:44:18 | self | +| cfg.rb:43:11:43:11 | 3 | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:43:11:43:11 | 3 | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:43:11:43:11 | 3 | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:43:11:43:11 | 3 | cfg.rb:44:8:44:18 | self | +| cfg.rb:43:14:43:14 | 4 | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:43:14:43:14 | 4 | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:43:14:43:14 | 4 | cfg.rb:44:8:44:18 | self | +| cfg.rb:43:21:43:31 | self | cfg.rb:43:21:43:31 | self | +| cfg.rb:44:8:44:18 | self | cfg.rb:44:8:44:18 | self | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:60:27:60:31 | hello | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:60:37:60:39 | bye | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:75:43:75:43 | x | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:90:5:90:5 | x | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:113:1:113:9 | self | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:136:12:136:29 | self | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:172:21:172:29 | self | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:172:36:172:45 | self | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:174:1:174:9 | self | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:176:7:176:7 | x | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:176:17:176:17 | x | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:179:2:179:13 | self | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:179:30:179:30 | i | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:182:7:182:7 | x | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:184:18:184:21 | redo | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:188:2:188:13 | self | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:188:30:188:30 | i | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:205:1:205:3 | nil | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:48:3:48:29 | [false] when ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:48:3:48:29 | [false] when ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:48:3:48:29 | [false] when ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:48:3:48:29 | [false] when ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:48:3:48:29 | [false] when ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:48:3:48:29 | [false] when ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:48:3:48:29 | [true] when ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:48:3:48:29 | [true] when ... | cfg.rb:48:20:48:29 | self | +| cfg.rb:48:20:48:29 | self | cfg.rb:48:20:48:29 | self | +| cfg.rb:49:3:49:37 | [false] when ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:49:3:49:37 | [true] when ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:49:3:49:37 | [true] when ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:49:8:49:8 | b | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:49:8:49:8 | b | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:49:8:49:8 | b | cfg.rb:49:8:49:8 | b | +| cfg.rb:49:8:49:8 | b | cfg.rb:49:16:49:16 | b | +| cfg.rb:49:8:49:8 | b | cfg.rb:49:27:49:37 | self | +| cfg.rb:49:16:49:16 | b | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:49:16:49:16 | b | cfg.rb:49:16:49:16 | b | +| cfg.rb:49:27:49:37 | self | cfg.rb:49:27:49:37 | self | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:75:43:75:43 | x | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:90:5:90:5 | x | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:113:1:113:9 | self | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:136:12:136:29 | self | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:172:21:172:29 | self | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:172:36:172:45 | self | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:174:1:174:9 | self | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:176:7:176:7 | x | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:176:17:176:17 | x | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:179:2:179:13 | self | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:179:30:179:30 | i | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:182:7:182:7 | x | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:184:18:184:21 | redo | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:188:2:188:13 | self | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:188:30:188:30 | i | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:205:1:205:3 | nil | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:60:27:60:31 | hello | cfg.rb:60:27:60:31 | hello | +| cfg.rb:60:37:60:39 | bye | cfg.rb:60:37:60:39 | bye | +| cfg.rb:63:3:66:5 | enter pattern | cfg.rb:63:3:66:5 | enter pattern | +| cfg.rb:69:3:71:5 | enter print | cfg.rb:69:3:71:5 | enter print | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:90:5:90:5 | x | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:113:1:113:9 | self | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:136:12:136:29 | self | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:172:21:172:29 | self | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:172:36:172:45 | self | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:174:1:174:9 | self | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:176:7:176:7 | x | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:176:17:176:17 | x | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:179:2:179:13 | self | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:179:30:179:30 | i | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:182:7:182:7 | x | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:184:18:184:21 | redo | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:188:2:188:13 | self | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:188:30:188:30 | i | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:205:1:205:3 | nil | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:75:15:75:15 | 0 | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:75:17:75:43 | elsif ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:75:23:75:23 | x | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:75:23:75:23 | x | cfg.rb:75:23:75:23 | x | +| cfg.rb:75:23:75:23 | x | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:75:23:75:23 | x | cfg.rb:75:43:75:43 | x | +| cfg.rb:75:35:75:36 | 10 | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:75:43:75:43 | x | cfg.rb:75:43:75:43 | x | +| cfg.rb:90:1:93:3 | enter { ... } | cfg.rb:90:1:93:3 | enter { ... } | +| cfg.rb:90:1:93:3 | enter { ... } | cfg.rb:90:1:93:3 | exit { ... } (normal) | +| cfg.rb:90:1:93:3 | enter { ... } | cfg.rb:91:3:91:24 | if ... | +| cfg.rb:90:1:93:3 | enter { ... } | cfg.rb:91:17:91:20 | next | +| cfg.rb:90:1:93:3 | exit { ... } (normal) | cfg.rb:90:1:93:3 | exit { ... } (normal) | +| cfg.rb:90:5:90:5 | [false] ! ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:90:5:90:5 | [true] ! ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:90:5:90:5 | [true] ! ... | cfg.rb:90:5:90:5 | x | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:113:1:113:9 | self | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:136:12:136:29 | self | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:172:21:172:29 | self | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:172:36:172:45 | self | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:174:1:174:9 | self | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:176:7:176:7 | x | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:176:17:176:17 | x | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:179:2:179:13 | self | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:179:30:179:30 | i | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:182:7:182:7 | x | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:184:18:184:21 | redo | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:188:2:188:13 | self | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:188:30:188:30 | i | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:205:1:205:3 | nil | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:90:5:90:5 | x | cfg.rb:90:5:90:5 | x | +| cfg.rb:91:3:91:24 | if ... | cfg.rb:91:3:91:24 | if ... | +| cfg.rb:91:17:91:20 | next | cfg.rb:91:17:91:20 | next | +| cfg.rb:101:1:104:3 | enter parameters | cfg.rb:101:1:104:3 | enter parameters | +| cfg.rb:101:1:104:3 | enter parameters | cfg.rb:101:24:101:25 | 42 | +| cfg.rb:101:1:104:3 | enter parameters | cfg.rb:101:28:101:30 | key | +| cfg.rb:101:24:101:25 | 42 | cfg.rb:101:24:101:25 | 42 | +| cfg.rb:101:28:101:30 | key | cfg.rb:101:28:101:30 | key | +| cfg.rb:113:1:113:9 | self | cfg.rb:113:1:113:9 | self | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:136:12:136:29 | self | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:172:21:172:29 | self | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:172:36:172:45 | self | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:174:1:174:9 | self | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:176:7:176:7 | x | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:176:17:176:17 | x | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:179:2:179:13 | self | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:179:30:179:30 | i | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:182:7:182:7 | x | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:184:18:184:21 | redo | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:188:2:188:13 | self | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:188:30:188:30 | i | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:205:1:205:3 | nil | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:120:8:120:28 | enter -> { ... } | cfg.rb:120:8:120:28 | enter -> { ... } | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:172:21:172:29 | self | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:172:36:172:45 | self | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:174:1:174:9 | self | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:176:7:176:7 | x | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:176:17:176:17 | x | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:179:2:179:13 | self | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:179:30:179:30 | i | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:182:7:182:7 | x | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:184:18:184:21 | redo | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:188:2:188:13 | self | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:188:30:188:30 | i | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:205:1:205:3 | nil | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:136:12:136:29 | self | cfg.rb:136:12:136:29 | self | +| cfg.rb:145:3:148:5 | enter print | cfg.rb:145:3:148:5 | enter print | +| cfg.rb:152:1:154:3 | enter method | cfg.rb:152:1:154:3 | enter method | +| cfg.rb:156:1:156:28 | enter two_parameters | cfg.rb:156:1:156:28 | enter two_parameters | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:174:1:174:9 | self | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:176:7:176:7 | x | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:176:17:176:17 | x | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:179:2:179:13 | self | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:179:30:179:30 | i | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:182:7:182:7 | x | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:184:18:184:21 | redo | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:188:2:188:13 | self | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:188:30:188:30 | i | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:205:1:205:3 | nil | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:172:21:172:29 | self | cfg.rb:172:21:172:29 | self | +| cfg.rb:172:36:172:45 | self | cfg.rb:172:36:172:45 | self | +| cfg.rb:174:1:174:9 | self | cfg.rb:174:1:174:9 | self | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:176:7:176:7 | x | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:176:17:176:17 | x | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:179:2:179:13 | self | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:179:30:179:30 | i | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:182:7:182:7 | x | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:184:18:184:21 | redo | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:188:2:188:13 | self | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:188:30:188:30 | i | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:205:1:205:3 | nil | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:179:2:179:13 | self | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:179:30:179:30 | i | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:182:7:182:7 | x | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:184:18:184:21 | redo | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:188:2:188:13 | self | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:188:30:188:30 | i | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:205:1:205:3 | nil | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:176:7:176:7 | x | +| cfg.rb:176:7:176:7 | x | cfg.rb:176:17:176:17 | x | +| cfg.rb:176:7:176:7 | x | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:179:2:179:13 | self | +| cfg.rb:176:7:176:7 | x | cfg.rb:179:30:179:30 | i | +| cfg.rb:176:7:176:7 | x | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:182:7:182:7 | x | +| cfg.rb:176:7:176:7 | x | cfg.rb:183:3:183:3 | x | +| cfg.rb:176:7:176:7 | x | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:184:18:184:21 | redo | +| cfg.rb:176:7:176:7 | x | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:188:2:188:13 | self | +| cfg.rb:176:7:176:7 | x | cfg.rb:188:30:188:30 | i | +| cfg.rb:176:7:176:7 | x | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:176:7:176:7 | x | cfg.rb:205:1:205:3 | nil | +| cfg.rb:176:7:176:7 | x | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:176:17:176:17 | x | cfg.rb:176:17:176:17 | x | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:182:7:182:7 | x | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:184:18:184:21 | redo | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:188:2:188:13 | self | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:188:30:188:30 | i | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:205:1:205:3 | nil | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:179:2:179:13 | self | cfg.rb:179:2:179:13 | self | +| cfg.rb:179:30:179:30 | i | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:179:2:179:13 | self | +| cfg.rb:179:30:179:30 | i | cfg.rb:179:30:179:30 | i | +| cfg.rb:179:30:179:30 | i | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:182:7:182:7 | x | +| cfg.rb:179:30:179:30 | i | cfg.rb:183:3:183:3 | x | +| cfg.rb:179:30:179:30 | i | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:184:18:184:21 | redo | +| cfg.rb:179:30:179:30 | i | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:188:2:188:13 | self | +| cfg.rb:179:30:179:30 | i | cfg.rb:188:30:188:30 | i | +| cfg.rb:179:30:179:30 | i | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:179:30:179:30 | i | cfg.rb:205:1:205:3 | nil | +| cfg.rb:179:30:179:30 | i | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:188:2:188:13 | self | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:188:30:188:30 | i | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:205:1:205:3 | nil | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:182:7:182:7 | x | +| cfg.rb:182:7:182:7 | x | cfg.rb:183:3:183:3 | x | +| cfg.rb:182:7:182:7 | x | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:184:18:184:21 | redo | +| cfg.rb:182:7:182:7 | x | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:188:2:188:13 | self | +| cfg.rb:182:7:182:7 | x | cfg.rb:188:30:188:30 | i | +| cfg.rb:182:7:182:7 | x | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:182:7:182:7 | x | cfg.rb:205:1:205:3 | nil | +| cfg.rb:182:7:182:7 | x | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:183:3:183:3 | x | cfg.rb:183:3:183:3 | x | +| cfg.rb:183:3:183:3 | x | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:183:3:183:3 | x | cfg.rb:184:18:184:21 | redo | +| cfg.rb:184:3:184:25 | if ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:184:18:184:21 | redo | cfg.rb:184:18:184:21 | redo | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:205:1:205:3 | nil | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:188:2:188:13 | self | cfg.rb:188:2:188:13 | self | +| cfg.rb:188:30:188:30 | i | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:188:2:188:13 | self | +| cfg.rb:188:30:188:30 | i | cfg.rb:188:30:188:30 | i | +| cfg.rb:188:30:188:30 | i | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:188:30:188:30 | i | cfg.rb:205:1:205:3 | nil | +| cfg.rb:188:30:188:30 | i | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:190:1:192:3 | enter run_block | cfg.rb:190:1:192:3 | enter run_block | +| cfg.rb:194:11:194:23 | enter { ... } | cfg.rb:194:11:194:23 | enter { ... } | +| cfg.rb:196:1:198:3 | enter forward_param | cfg.rb:196:1:198:3 | enter forward_param | +| cfg.rb:200:9:200:32 | enter { ... } | cfg.rb:200:9:200:32 | enter { ... } | +| cfg.rb:202:9:202:35 | enter do ... end | cfg.rb:202:9:202:35 | enter do ... end | +| cfg.rb:205:1:205:3 | __synth__0__1 | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:205:1:205:3 | nil | cfg.rb:205:1:205:3 | nil | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:205:15:205:23 | enter { ... } | cfg.rb:205:15:205:23 | enter { ... } | +| cfg.rb:207:1:211:3 | enter filter_nil | cfg.rb:207:1:211:3 | enter filter_nil | +| cfg.rb:208:15:210:5 | enter do ... end | cfg.rb:208:15:210:5 | enter do ... end | +| cfg.rb:213:14:216:3 | enter do ... end | cfg.rb:213:14:216:3 | enter do ... end | +| constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | +| constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | +| constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | constant_compound_assign.rb:5:22:5:24 | 123 | +| constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | +| constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | constant_compound_assign.rb:14:18:14:20 | 123 | +| constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | +| constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | constant_compound_assign.rb:19:21:19:23 | 123 | +| constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | +| constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | +| constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | constant_compound_assign.rb:14:18:14:20 | 123 | +| constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | +| constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | constant_compound_assign.rb:19:21:19:23 | 123 | +| constant_compound_assign.rb:5:22:5:24 | 123 | constant_compound_assign.rb:5:22:5:24 | 123 | +| constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | +| constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | +| constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | constant_compound_assign.rb:19:21:19:23 | 123 | +| constant_compound_assign.rb:14:18:14:20 | 123 | constant_compound_assign.rb:14:18:14:20 | 123 | +| constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | +| constant_compound_assign.rb:19:21:19:23 | 123 | constant_compound_assign.rb:19:21:19:23 | 123 | +| desugar.rb:1:1:3:3 | enter m1 | desugar.rb:1:1:3:3 | enter m1 | +| desugar.rb:1:1:38:17 | enter desugar.rb | desugar.rb:1:1:38:17 | enter desugar.rb | +| desugar.rb:5:1:7:3 | enter m2 | desugar.rb:5:1:7:3 | enter m2 | +| desugar.rb:9:1:11:3 | enter m3 | desugar.rb:9:1:11:3 | enter m3 | +| desugar.rb:13:1:15:3 | enter m4 | desugar.rb:13:1:15:3 | enter m4 | +| desugar.rb:17:1:19:3 | enter m5 | desugar.rb:17:1:19:3 | enter m5 | +| desugar.rb:21:1:23:3 | enter m6 | desugar.rb:21:1:23:3 | enter m6 | +| desugar.rb:25:1:27:3 | enter m7 | desugar.rb:25:1:27:3 | enter m7 | +| exit.rb:1:1:6:3 | enter m1 | exit.rb:1:1:6:3 | enter m1 | +| exit.rb:1:1:6:3 | enter m1 | exit.rb:1:1:6:3 | exit m1 | +| exit.rb:1:1:6:3 | enter m1 | exit.rb:2:3:4:5 | if ... | +| exit.rb:1:1:6:3 | enter m1 | exit.rb:3:5:3:10 | self | +| exit.rb:1:1:6:3 | exit m1 | exit.rb:1:1:6:3 | exit m1 | +| exit.rb:1:1:13:4 | enter exit.rb | exit.rb:1:1:13:4 | enter exit.rb | +| exit.rb:2:3:4:5 | if ... | exit.rb:2:3:4:5 | if ... | +| exit.rb:3:5:3:10 | self | exit.rb:3:5:3:10 | self | +| exit.rb:8:1:13:3 | enter m2 | exit.rb:8:1:13:3 | enter m2 | +| exit.rb:8:1:13:3 | enter m2 | exit.rb:8:1:13:3 | exit m2 | +| exit.rb:8:1:13:3 | enter m2 | exit.rb:9:3:11:5 | if ... | +| exit.rb:8:1:13:3 | enter m2 | exit.rb:10:5:10:18 | self | +| exit.rb:8:1:13:3 | exit m2 | exit.rb:8:1:13:3 | exit m2 | +| exit.rb:9:3:11:5 | if ... | exit.rb:9:3:11:5 | if ... | +| exit.rb:10:5:10:18 | self | exit.rb:10:5:10:18 | self | +| heredoc.rb:1:1:7:3 | enter double_heredoc | heredoc.rb:1:1:7:3 | enter double_heredoc | +| heredoc.rb:1:1:7:4 | enter heredoc.rb | heredoc.rb:1:1:7:4 | enter heredoc.rb | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:1:1:9:3 | enter m1 | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:2:3:8:5 | if ... | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:3:5:3:30 | self | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:3:7:35 | elsif ... | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:9:4:9 | x | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:9:4:24 | [false] ... and ... | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:9:4:24 | [true] ... and ... | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:9:4:38 | [false] ... and ... | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:9:4:38 | [true] ... and ... | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:20:4:20 | x | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:30:4:38 | [false] ! ... | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:30:4:38 | [true] ! ... | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:31:4:38 | [false] ( ... ) | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:31:4:38 | [true] ( ... ) | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:32:4:32 | x | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:5:5:5:17 | self | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:7:5:7:35 | self | +| ifs.rb:1:1:58:4 | enter ifs.rb | ifs.rb:1:1:58:4 | enter ifs.rb | +| ifs.rb:1:1:58:4 | enter ifs.rb | ifs.rb:36:1:38:3 | conditional_method_def | +| ifs.rb:1:1:58:4 | enter ifs.rb | ifs.rb:36:1:38:17 | ... unless ... | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:2:3:8:5 | if ... | +| ifs.rb:3:5:3:30 | self | ifs.rb:3:5:3:30 | self | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:4:3:7:35 | elsif ... | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:3:7:35 | elsif ... | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:9:4:9 | x | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:9:4:24 | [false] ... and ... | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:9:4:24 | [true] ... and ... | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:9:4:38 | [false] ... and ... | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:9:4:38 | [true] ... and ... | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:20:4:20 | x | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:30:4:38 | [false] ! ... | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:30:4:38 | [true] ! ... | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:31:4:38 | [false] ( ... ) | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:31:4:38 | [true] ( ... ) | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:32:4:32 | x | +| ifs.rb:4:9:4:9 | x | ifs.rb:5:5:5:17 | self | +| ifs.rb:4:9:4:9 | x | ifs.rb:7:5:7:35 | self | +| ifs.rb:4:9:4:24 | [false] ... and ... | ifs.rb:4:9:4:24 | [false] ... and ... | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:4:9:4:24 | [true] ... and ... | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:4:9:4:38 | [true] ... and ... | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:4:30:4:38 | [false] ! ... | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:4:30:4:38 | [true] ! ... | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:4:31:4:38 | [false] ( ... ) | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:4:31:4:38 | [true] ( ... ) | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:4:32:4:32 | x | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:5:5:5:17 | self | +| ifs.rb:4:9:4:38 | [false] ... and ... | ifs.rb:4:9:4:38 | [false] ... and ... | +| ifs.rb:4:9:4:38 | [false] ... and ... | ifs.rb:7:5:7:35 | self | +| ifs.rb:4:9:4:38 | [true] ... and ... | ifs.rb:4:9:4:38 | [true] ... and ... | +| ifs.rb:4:9:4:38 | [true] ... and ... | ifs.rb:5:5:5:17 | self | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:9:4:24 | [true] ... and ... | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:9:4:38 | [true] ... and ... | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:20:4:20 | x | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:30:4:38 | [false] ! ... | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:30:4:38 | [true] ! ... | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:31:4:38 | [false] ( ... ) | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:31:4:38 | [true] ( ... ) | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:32:4:32 | x | +| ifs.rb:4:20:4:20 | x | ifs.rb:5:5:5:17 | self | +| ifs.rb:4:30:4:38 | [false] ! ... | ifs.rb:4:30:4:38 | [false] ! ... | +| ifs.rb:4:30:4:38 | [true] ! ... | ifs.rb:4:9:4:38 | [true] ... and ... | +| ifs.rb:4:30:4:38 | [true] ! ... | ifs.rb:4:30:4:38 | [true] ! ... | +| ifs.rb:4:30:4:38 | [true] ! ... | ifs.rb:5:5:5:17 | self | +| ifs.rb:4:31:4:38 | [false] ( ... ) | ifs.rb:4:9:4:38 | [true] ... and ... | +| ifs.rb:4:31:4:38 | [false] ( ... ) | ifs.rb:4:30:4:38 | [true] ! ... | +| ifs.rb:4:31:4:38 | [false] ( ... ) | ifs.rb:4:31:4:38 | [false] ( ... ) | +| ifs.rb:4:31:4:38 | [false] ( ... ) | ifs.rb:5:5:5:17 | self | +| ifs.rb:4:31:4:38 | [true] ( ... ) | ifs.rb:4:30:4:38 | [false] ! ... | +| ifs.rb:4:31:4:38 | [true] ( ... ) | ifs.rb:4:31:4:38 | [true] ( ... ) | +| ifs.rb:4:32:4:32 | x | ifs.rb:4:9:4:38 | [true] ... and ... | +| ifs.rb:4:32:4:32 | x | ifs.rb:4:30:4:38 | [false] ! ... | +| ifs.rb:4:32:4:32 | x | ifs.rb:4:30:4:38 | [true] ! ... | +| ifs.rb:4:32:4:32 | x | ifs.rb:4:31:4:38 | [false] ( ... ) | +| ifs.rb:4:32:4:32 | x | ifs.rb:4:31:4:38 | [true] ( ... ) | +| ifs.rb:4:32:4:32 | x | ifs.rb:4:32:4:32 | x | +| ifs.rb:4:32:4:32 | x | ifs.rb:5:5:5:17 | self | +| ifs.rb:5:5:5:17 | self | ifs.rb:5:5:5:17 | self | +| ifs.rb:7:5:7:35 | self | ifs.rb:7:5:7:35 | self | +| ifs.rb:11:1:16:3 | enter m2 | ifs.rb:11:1:16:3 | enter m2 | +| ifs.rb:11:1:16:3 | enter m2 | ifs.rb:11:1:16:3 | exit m2 (normal) | +| ifs.rb:11:1:16:3 | enter m2 | ifs.rb:12:3:14:5 | if ... | +| ifs.rb:11:1:16:3 | enter m2 | ifs.rb:13:12:13:12 | 0 | +| ifs.rb:11:1:16:3 | exit m2 (normal) | ifs.rb:11:1:16:3 | exit m2 (normal) | +| ifs.rb:12:3:14:5 | if ... | ifs.rb:12:3:14:5 | if ... | +| ifs.rb:13:12:13:12 | 0 | ifs.rb:13:12:13:12 | 0 | +| ifs.rb:18:1:26:3 | enter m3 | ifs.rb:18:1:26:3 | enter m3 | +| ifs.rb:18:1:26:3 | enter m3 | ifs.rb:19:3:24:5 | if ... | +| ifs.rb:18:1:26:3 | enter m3 | ifs.rb:20:5:20:5 | x | +| ifs.rb:18:1:26:3 | enter m3 | ifs.rb:21:5:23:7 | if ... | +| ifs.rb:18:1:26:3 | enter m3 | ifs.rb:22:7:22:7 | x | +| ifs.rb:19:3:24:5 | if ... | ifs.rb:19:3:24:5 | if ... | +| ifs.rb:20:5:20:5 | x | ifs.rb:20:5:20:5 | x | +| ifs.rb:20:5:20:5 | x | ifs.rb:21:5:23:7 | if ... | +| ifs.rb:20:5:20:5 | x | ifs.rb:22:7:22:7 | x | +| ifs.rb:21:5:23:7 | if ... | ifs.rb:21:5:23:7 | if ... | +| ifs.rb:22:7:22:7 | x | ifs.rb:22:7:22:7 | x | +| ifs.rb:28:1:30:3 | enter m4 | ifs.rb:28:1:30:3 | enter m4 | +| ifs.rb:28:1:30:3 | enter m4 | ifs.rb:29:10:29:23 | [false] ( ... ) | +| ifs.rb:28:1:30:3 | enter m4 | ifs.rb:29:10:29:23 | [true] ( ... ) | +| ifs.rb:28:1:30:3 | enter m4 | ifs.rb:29:10:29:51 | ... ? ... : ... | +| ifs.rb:28:1:30:3 | enter m4 | ifs.rb:29:11:29:22 | [false] ... ? ... : ... | +| ifs.rb:28:1:30:3 | enter m4 | ifs.rb:29:11:29:22 | [true] ... ? ... : ... | +| ifs.rb:28:1:30:3 | enter m4 | ifs.rb:29:16:29:17 | b2 | +| ifs.rb:28:1:30:3 | enter m4 | ifs.rb:29:21:29:22 | b3 | +| ifs.rb:28:1:30:3 | enter m4 | ifs.rb:29:28:29:35 | b2 \|\| b3 | +| ifs.rb:28:1:30:3 | enter m4 | ifs.rb:29:41:29:50 | !b2 \|\| !b3 | +| ifs.rb:29:10:29:23 | [false] ( ... ) | ifs.rb:29:10:29:23 | [false] ( ... ) | +| ifs.rb:29:10:29:23 | [false] ( ... ) | ifs.rb:29:41:29:50 | !b2 \|\| !b3 | +| ifs.rb:29:10:29:23 | [true] ( ... ) | ifs.rb:29:10:29:23 | [true] ( ... ) | +| ifs.rb:29:10:29:23 | [true] ( ... ) | ifs.rb:29:28:29:35 | b2 \|\| b3 | +| ifs.rb:29:10:29:51 | ... ? ... : ... | ifs.rb:29:10:29:51 | ... ? ... : ... | +| ifs.rb:29:11:29:22 | [false] ... ? ... : ... | ifs.rb:29:10:29:23 | [false] ( ... ) | +| ifs.rb:29:11:29:22 | [false] ... ? ... : ... | ifs.rb:29:11:29:22 | [false] ... ? ... : ... | +| ifs.rb:29:11:29:22 | [false] ... ? ... : ... | ifs.rb:29:41:29:50 | !b2 \|\| !b3 | +| ifs.rb:29:11:29:22 | [true] ... ? ... : ... | ifs.rb:29:10:29:23 | [true] ( ... ) | +| ifs.rb:29:11:29:22 | [true] ... ? ... : ... | ifs.rb:29:11:29:22 | [true] ... ? ... : ... | +| ifs.rb:29:11:29:22 | [true] ... ? ... : ... | ifs.rb:29:28:29:35 | b2 \|\| b3 | +| ifs.rb:29:16:29:17 | b2 | ifs.rb:29:16:29:17 | b2 | +| ifs.rb:29:21:29:22 | b3 | ifs.rb:29:21:29:22 | b3 | +| ifs.rb:29:28:29:35 | b2 \|\| b3 | ifs.rb:29:28:29:35 | b2 \|\| b3 | +| ifs.rb:29:41:29:50 | !b2 \|\| !b3 | ifs.rb:29:41:29:50 | !b2 \|\| !b3 | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:32:1:34:3 | enter m5 | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:3:33:100 | if ... | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:6:33:49 | [false] ( ... ) | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:6:33:49 | [true] ( ... ) | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:7:33:48 | [false] if ... | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:7:33:48 | [true] if ... | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:13:33:19 | [false] then ... | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:13:33:19 | [true] then ... | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:18:33:19 | b2 | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:21:33:44 | [false] elsif ... | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:21:33:44 | [true] elsif ... | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:27:33:28 | b3 | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:30:33:36 | [false] then ... | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:30:33:36 | [true] then ... | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:35:33:36 | b4 | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:38:33:44 | [false] else ... | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:38:33:44 | [true] else ... | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:43:33:44 | b5 | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:3:33:100 | if ... | +| ifs.rb:33:6:33:49 | [false] ( ... ) | ifs.rb:33:6:33:49 | [false] ( ... ) | +| ifs.rb:33:6:33:49 | [false] ( ... ) | ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | +| ifs.rb:33:6:33:49 | [true] ( ... ) | ifs.rb:33:6:33:49 | [true] ( ... ) | +| ifs.rb:33:6:33:49 | [true] ( ... ) | ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | +| ifs.rb:33:7:33:48 | [false] if ... | ifs.rb:33:6:33:49 | [false] ( ... ) | +| ifs.rb:33:7:33:48 | [false] if ... | ifs.rb:33:7:33:48 | [false] if ... | +| ifs.rb:33:7:33:48 | [false] if ... | ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | +| ifs.rb:33:7:33:48 | [true] if ... | ifs.rb:33:6:33:49 | [true] ( ... ) | +| ifs.rb:33:7:33:48 | [true] if ... | ifs.rb:33:7:33:48 | [true] if ... | +| ifs.rb:33:7:33:48 | [true] if ... | ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | +| ifs.rb:33:13:33:19 | [false] then ... | ifs.rb:33:13:33:19 | [false] then ... | +| ifs.rb:33:13:33:19 | [true] then ... | ifs.rb:33:13:33:19 | [true] then ... | +| ifs.rb:33:18:33:19 | b2 | ifs.rb:33:13:33:19 | [false] then ... | +| ifs.rb:33:18:33:19 | b2 | ifs.rb:33:13:33:19 | [true] then ... | +| ifs.rb:33:18:33:19 | b2 | ifs.rb:33:18:33:19 | b2 | +| ifs.rb:33:21:33:44 | [false] elsif ... | ifs.rb:33:21:33:44 | [false] elsif ... | +| ifs.rb:33:21:33:44 | [true] elsif ... | ifs.rb:33:21:33:44 | [true] elsif ... | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:21:33:44 | [false] elsif ... | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:21:33:44 | [true] elsif ... | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:27:33:28 | b3 | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:30:33:36 | [false] then ... | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:30:33:36 | [true] then ... | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:35:33:36 | b4 | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:38:33:44 | [false] else ... | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:38:33:44 | [true] else ... | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:43:33:44 | b5 | +| ifs.rb:33:30:33:36 | [false] then ... | ifs.rb:33:30:33:36 | [false] then ... | +| ifs.rb:33:30:33:36 | [true] then ... | ifs.rb:33:30:33:36 | [true] then ... | +| ifs.rb:33:35:33:36 | b4 | ifs.rb:33:30:33:36 | [false] then ... | +| ifs.rb:33:35:33:36 | b4 | ifs.rb:33:30:33:36 | [true] then ... | +| ifs.rb:33:35:33:36 | b4 | ifs.rb:33:35:33:36 | b4 | +| ifs.rb:33:38:33:44 | [false] else ... | ifs.rb:33:38:33:44 | [false] else ... | +| ifs.rb:33:38:33:44 | [true] else ... | ifs.rb:33:38:33:44 | [true] else ... | +| ifs.rb:33:43:33:44 | b5 | ifs.rb:33:38:33:44 | [false] else ... | +| ifs.rb:33:43:33:44 | b5 | ifs.rb:33:38:33:44 | [true] else ... | +| ifs.rb:33:43:33:44 | b5 | ifs.rb:33:43:33:44 | b5 | +| ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | +| ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | +| ifs.rb:36:1:38:3 | conditional_method_def | ifs.rb:36:1:38:3 | conditional_method_def | +| ifs.rb:36:1:38:3 | enter conditional_method_def | ifs.rb:36:1:38:3 | enter conditional_method_def | +| ifs.rb:36:1:38:17 | ... unless ... | ifs.rb:36:1:38:17 | ... unless ... | +| ifs.rb:40:1:44:3 | enter constant_condition | ifs.rb:40:1:44:3 | enter constant_condition | +| ifs.rb:40:1:44:3 | enter constant_condition | ifs.rb:41:3:43:5 | if ... | +| ifs.rb:40:1:44:3 | enter constant_condition | ifs.rb:41:6:41:10 | [false] ! ... | +| ifs.rb:41:3:43:5 | if ... | ifs.rb:41:3:43:5 | if ... | +| ifs.rb:41:6:41:10 | [false] ! ... | ifs.rb:41:3:43:5 | if ... | +| ifs.rb:41:6:41:10 | [false] ! ... | ifs.rb:41:6:41:10 | [false] ! ... | +| ifs.rb:46:1:52:3 | enter empty_else | ifs.rb:46:1:52:3 | enter empty_else | +| ifs.rb:46:1:52:3 | enter empty_else | ifs.rb:47:3:50:5 | if ... | +| ifs.rb:46:1:52:3 | enter empty_else | ifs.rb:48:5:48:15 | self | +| ifs.rb:46:1:52:3 | enter empty_else | ifs.rb:49:3:49:6 | else ... | +| ifs.rb:47:3:50:5 | if ... | ifs.rb:47:3:50:5 | if ... | +| ifs.rb:48:5:48:15 | self | ifs.rb:48:5:48:15 | self | +| ifs.rb:49:3:49:6 | else ... | ifs.rb:49:3:49:6 | else ... | +| ifs.rb:54:1:58:3 | enter disjunct | ifs.rb:54:1:58:3 | enter disjunct | +| ifs.rb:54:1:58:3 | enter disjunct | ifs.rb:55:3:57:5 | if ... | +| ifs.rb:54:1:58:3 | enter disjunct | ifs.rb:55:6:55:15 | [false] ( ... ) | +| ifs.rb:54:1:58:3 | enter disjunct | ifs.rb:55:6:55:15 | [true] ( ... ) | +| ifs.rb:54:1:58:3 | enter disjunct | ifs.rb:55:7:55:14 | [false] ... \|\| ... | +| ifs.rb:54:1:58:3 | enter disjunct | ifs.rb:55:7:55:14 | [true] ... \|\| ... | +| ifs.rb:54:1:58:3 | enter disjunct | ifs.rb:55:13:55:14 | b2 | +| ifs.rb:54:1:58:3 | enter disjunct | ifs.rb:56:5:56:19 | self | +| ifs.rb:55:3:57:5 | if ... | ifs.rb:55:3:57:5 | if ... | +| ifs.rb:55:6:55:15 | [false] ( ... ) | ifs.rb:55:6:55:15 | [false] ( ... ) | +| ifs.rb:55:6:55:15 | [true] ( ... ) | ifs.rb:55:6:55:15 | [true] ( ... ) | +| ifs.rb:55:6:55:15 | [true] ( ... ) | ifs.rb:56:5:56:19 | self | +| ifs.rb:55:7:55:14 | [false] ... \|\| ... | ifs.rb:55:6:55:15 | [false] ( ... ) | +| ifs.rb:55:7:55:14 | [false] ... \|\| ... | ifs.rb:55:7:55:14 | [false] ... \|\| ... | +| ifs.rb:55:7:55:14 | [true] ... \|\| ... | ifs.rb:55:6:55:15 | [true] ( ... ) | +| ifs.rb:55:7:55:14 | [true] ... \|\| ... | ifs.rb:55:7:55:14 | [true] ... \|\| ... | +| ifs.rb:55:7:55:14 | [true] ... \|\| ... | ifs.rb:56:5:56:19 | self | +| ifs.rb:55:13:55:14 | b2 | ifs.rb:55:6:55:15 | [false] ( ... ) | +| ifs.rb:55:13:55:14 | b2 | ifs.rb:55:7:55:14 | [false] ... \|\| ... | +| ifs.rb:55:13:55:14 | b2 | ifs.rb:55:13:55:14 | b2 | +| ifs.rb:56:5:56:19 | self | ifs.rb:56:5:56:19 | self | +| loops.rb:1:1:6:3 | enter m1 | loops.rb:1:1:6:3 | enter m1 | +| loops.rb:1:1:6:3 | enter m1 | loops.rb:2:3:5:5 | while ... | +| loops.rb:1:1:6:3 | enter m1 | loops.rb:2:9:2:9 | x | +| loops.rb:1:1:6:3 | enter m1 | loops.rb:3:5:3:10 | self | +| loops.rb:1:1:33:4 | enter loops.rb | loops.rb:1:1:33:4 | enter loops.rb | +| loops.rb:2:3:5:5 | while ... | loops.rb:2:3:5:5 | while ... | +| loops.rb:2:9:2:9 | x | loops.rb:2:3:5:5 | while ... | +| loops.rb:2:9:2:9 | x | loops.rb:2:9:2:9 | x | +| loops.rb:2:9:2:9 | x | loops.rb:3:5:3:10 | self | +| loops.rb:3:5:3:10 | self | loops.rb:3:5:3:10 | self | +| loops.rb:8:1:22:3 | enter m2 | loops.rb:8:1:22:3 | enter m2 | +| loops.rb:8:1:22:3 | enter m2 | loops.rb:9:3:20:5 | while ... | +| loops.rb:8:1:22:3 | enter m2 | loops.rb:9:9:9:9 | x | +| loops.rb:8:1:22:3 | enter m2 | loops.rb:10:5:10:10 | self | +| loops.rb:8:1:22:3 | enter m2 | loops.rb:13:7:13:11 | break | +| loops.rb:8:1:22:3 | enter m2 | loops.rb:14:11:14:11 | x | +| loops.rb:8:1:22:3 | enter m2 | loops.rb:15:7:15:10 | next | +| loops.rb:8:1:22:3 | enter m2 | loops.rb:16:5:17:10 | elsif ... | +| loops.rb:8:1:22:3 | enter m2 | loops.rb:16:11:16:11 | x | +| loops.rb:8:1:22:3 | enter m2 | loops.rb:17:7:17:10 | redo | +| loops.rb:9:3:20:5 | while ... | loops.rb:9:3:20:5 | while ... | +| loops.rb:9:9:9:9 | x | loops.rb:9:3:20:5 | while ... | +| loops.rb:9:9:9:9 | x | loops.rb:9:9:9:9 | x | +| loops.rb:9:9:9:9 | x | loops.rb:10:5:10:10 | self | +| loops.rb:9:9:9:9 | x | loops.rb:13:7:13:11 | break | +| loops.rb:9:9:9:9 | x | loops.rb:14:11:14:11 | x | +| loops.rb:9:9:9:9 | x | loops.rb:15:7:15:10 | next | +| loops.rb:9:9:9:9 | x | loops.rb:16:5:17:10 | elsif ... | +| loops.rb:9:9:9:9 | x | loops.rb:16:11:16:11 | x | +| loops.rb:9:9:9:9 | x | loops.rb:17:7:17:10 | redo | +| loops.rb:10:5:10:10 | self | loops.rb:10:5:10:10 | self | +| loops.rb:10:5:10:10 | self | loops.rb:13:7:13:11 | break | +| loops.rb:10:5:10:10 | self | loops.rb:14:11:14:11 | x | +| loops.rb:10:5:10:10 | self | loops.rb:15:7:15:10 | next | +| loops.rb:10:5:10:10 | self | loops.rb:16:5:17:10 | elsif ... | +| loops.rb:10:5:10:10 | self | loops.rb:16:11:16:11 | x | +| loops.rb:10:5:10:10 | self | loops.rb:17:7:17:10 | redo | +| loops.rb:13:7:13:11 | break | loops.rb:13:7:13:11 | break | +| loops.rb:14:11:14:11 | x | loops.rb:14:11:14:11 | x | +| loops.rb:14:11:14:11 | x | loops.rb:15:7:15:10 | next | +| loops.rb:14:11:14:11 | x | loops.rb:16:5:17:10 | elsif ... | +| loops.rb:14:11:14:11 | x | loops.rb:16:11:16:11 | x | +| loops.rb:14:11:14:11 | x | loops.rb:17:7:17:10 | redo | +| loops.rb:15:7:15:10 | next | loops.rb:15:7:15:10 | next | +| loops.rb:16:5:17:10 | elsif ... | loops.rb:16:5:17:10 | elsif ... | +| loops.rb:16:11:16:11 | x | loops.rb:16:5:17:10 | elsif ... | +| loops.rb:16:11:16:11 | x | loops.rb:16:11:16:11 | x | +| loops.rb:16:11:16:11 | x | loops.rb:17:7:17:10 | redo | +| loops.rb:17:7:17:10 | redo | loops.rb:17:7:17:10 | redo | +| loops.rb:24:1:28:3 | enter m3 | loops.rb:24:1:28:3 | enter m3 | +| loops.rb:25:16:27:5 | enter do ... end | loops.rb:25:16:27:5 | enter do ... end | +| loops.rb:30:1:33:3 | enter m4 | loops.rb:30:1:33:3 | enter m4 | +| loops.rb:30:1:33:3 | enter m4 | loops.rb:31:3:32:5 | while ... | +| loops.rb:30:1:33:3 | enter m4 | loops.rb:31:9:31:9 | x | +| loops.rb:30:1:33:3 | enter m4 | loops.rb:31:15:32:5 | do ... | +| loops.rb:31:3:32:5 | while ... | loops.rb:31:3:32:5 | while ... | +| loops.rb:31:9:31:9 | x | loops.rb:31:3:32:5 | while ... | +| loops.rb:31:9:31:9 | x | loops.rb:31:9:31:9 | x | +| loops.rb:31:9:31:9 | x | loops.rb:31:15:32:5 | do ... | +| loops.rb:31:15:32:5 | do ... | loops.rb:31:15:32:5 | do ... | +| raise.rb:1:1:182:4 | enter raise.rb | raise.rb:1:1:182:4 | enter raise.rb | +| raise.rb:7:1:12:3 | enter m1 | raise.rb:7:1:12:3 | enter m1 | +| raise.rb:7:1:12:3 | enter m1 | raise.rb:7:1:12:3 | exit m1 | +| raise.rb:7:1:12:3 | enter m1 | raise.rb:8:3:10:5 | if ... | +| raise.rb:7:1:12:3 | enter m1 | raise.rb:9:5:9:17 | self | +| raise.rb:7:1:12:3 | exit m1 | raise.rb:7:1:12:3 | exit m1 | +| raise.rb:8:3:10:5 | if ... | raise.rb:8:3:10:5 | if ... | +| raise.rb:9:5:9:17 | self | raise.rb:9:5:9:17 | self | +| raise.rb:14:1:23:3 | enter m2 | raise.rb:14:1:23:3 | enter m2 | +| raise.rb:14:1:23:3 | enter m2 | raise.rb:14:1:23:3 | exit m2 | +| raise.rb:14:1:23:3 | enter m2 | raise.rb:14:1:23:3 | exit m2 (abnormal) | +| raise.rb:14:1:23:3 | enter m2 | raise.rb:16:5:18:7 | if ... | +| raise.rb:14:1:23:3 | enter m2 | raise.rb:17:7:17:22 | self | +| raise.rb:14:1:23:3 | enter m2 | raise.rb:20:5:20:18 | self | +| raise.rb:14:1:23:3 | enter m2 | raise.rb:22:3:22:15 | self | +| raise.rb:14:1:23:3 | exit m2 | raise.rb:14:1:23:3 | exit m2 | +| raise.rb:14:1:23:3 | exit m2 (abnormal) | raise.rb:14:1:23:3 | exit m2 (abnormal) | +| raise.rb:16:5:18:7 | if ... | raise.rb:16:5:18:7 | if ... | +| raise.rb:17:7:17:22 | self | raise.rb:14:1:23:3 | exit m2 (abnormal) | +| raise.rb:17:7:17:22 | self | raise.rb:17:7:17:22 | self | +| raise.rb:17:7:17:22 | self | raise.rb:20:5:20:18 | self | +| raise.rb:20:5:20:18 | self | raise.rb:20:5:20:18 | self | +| raise.rb:22:3:22:15 | self | raise.rb:22:3:22:15 | self | +| raise.rb:25:1:34:3 | enter m3 | raise.rb:25:1:34:3 | enter m3 | +| raise.rb:25:1:34:3 | enter m3 | raise.rb:27:5:29:7 | if ... | +| raise.rb:25:1:34:3 | enter m3 | raise.rb:28:7:28:22 | self | +| raise.rb:25:1:34:3 | enter m3 | raise.rb:33:3:33:15 | self | +| raise.rb:27:5:29:7 | if ... | raise.rb:27:5:29:7 | if ... | +| raise.rb:28:7:28:22 | self | raise.rb:28:7:28:22 | self | +| raise.rb:33:3:33:15 | self | raise.rb:33:3:33:15 | self | +| raise.rb:36:1:45:3 | enter m4 | raise.rb:36:1:45:3 | enter m4 | +| raise.rb:36:1:45:3 | enter m4 | raise.rb:38:5:40:7 | if ... | +| raise.rb:36:1:45:3 | enter m4 | raise.rb:39:7:39:22 | self | +| raise.rb:36:1:45:3 | enter m4 | raise.rb:44:3:44:15 | self | +| raise.rb:38:5:40:7 | if ... | raise.rb:38:5:40:7 | if ... | +| raise.rb:39:7:39:22 | self | raise.rb:39:7:39:22 | self | +| raise.rb:44:3:44:15 | self | raise.rb:44:3:44:15 | self | +| raise.rb:47:1:55:3 | enter m5 | raise.rb:47:1:55:3 | enter m5 | +| raise.rb:47:1:55:3 | enter m5 | raise.rb:49:5:51:7 | if ... | +| raise.rb:47:1:55:3 | enter m5 | raise.rb:50:7:50:22 | self | +| raise.rb:47:1:55:3 | enter m5 | raise.rb:54:3:54:15 | self | +| raise.rb:49:5:51:7 | if ... | raise.rb:49:5:51:7 | if ... | +| raise.rb:50:7:50:22 | self | raise.rb:50:7:50:22 | self | +| raise.rb:54:3:54:15 | self | raise.rb:54:3:54:15 | self | +| raise.rb:57:1:66:3 | enter m6 | raise.rb:57:1:66:3 | enter m6 | +| raise.rb:57:1:66:3 | enter m6 | raise.rb:57:1:66:3 | exit m6 | +| raise.rb:57:1:66:3 | enter m6 | raise.rb:57:1:66:3 | exit m6 (abnormal) | +| raise.rb:57:1:66:3 | enter m6 | raise.rb:59:5:61:7 | if ... | +| raise.rb:57:1:66:3 | enter m6 | raise.rb:60:7:60:22 | self | +| raise.rb:57:1:66:3 | enter m6 | raise.rb:62:22:62:31 | ExceptionB | +| raise.rb:57:1:66:3 | enter m6 | raise.rb:62:36:62:36 | e | +| raise.rb:57:1:66:3 | enter m6 | raise.rb:65:3:65:15 | self | +| raise.rb:57:1:66:3 | exit m6 | raise.rb:57:1:66:3 | exit m6 | +| raise.rb:57:1:66:3 | exit m6 (abnormal) | raise.rb:57:1:66:3 | exit m6 (abnormal) | +| raise.rb:59:5:61:7 | if ... | raise.rb:59:5:61:7 | if ... | +| raise.rb:60:7:60:22 | self | raise.rb:57:1:66:3 | exit m6 (abnormal) | +| raise.rb:60:7:60:22 | self | raise.rb:60:7:60:22 | self | +| raise.rb:60:7:60:22 | self | raise.rb:62:22:62:31 | ExceptionB | +| raise.rb:60:7:60:22 | self | raise.rb:62:36:62:36 | e | +| raise.rb:62:22:62:31 | ExceptionB | raise.rb:57:1:66:3 | exit m6 (abnormal) | +| raise.rb:62:22:62:31 | ExceptionB | raise.rb:62:22:62:31 | ExceptionB | +| raise.rb:62:36:62:36 | e | raise.rb:62:36:62:36 | e | +| raise.rb:65:3:65:15 | self | raise.rb:65:3:65:15 | self | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:68:1:77:3 | enter m7 | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:68:1:77:3 | exit m7 | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:68:1:77:3 | exit m7 (normal) | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:70:5:70:17 | self | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:71:3:72:18 | elsif ... | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:71:9:71:9 | x | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:72:13:72:17 | x < 0 | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:76:3:76:15 | [ensure: raise] self | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:76:3:76:15 | self | +| raise.rb:68:1:77:3 | exit m7 | raise.rb:68:1:77:3 | exit m7 | +| raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:68:1:77:3 | exit m7 (normal) | +| raise.rb:70:5:70:17 | self | raise.rb:70:5:70:17 | self | +| raise.rb:71:3:72:18 | elsif ... | raise.rb:71:3:72:18 | elsif ... | +| raise.rb:71:3:72:18 | elsif ... | raise.rb:76:3:76:15 | self | +| raise.rb:71:9:71:9 | x | raise.rb:68:1:77:3 | exit m7 (normal) | +| raise.rb:71:9:71:9 | x | raise.rb:71:3:72:18 | elsif ... | +| raise.rb:71:9:71:9 | x | raise.rb:71:9:71:9 | x | +| raise.rb:71:9:71:9 | x | raise.rb:72:13:72:17 | x < 0 | +| raise.rb:71:9:71:9 | x | raise.rb:76:3:76:15 | self | +| raise.rb:72:13:72:17 | x < 0 | raise.rb:72:13:72:17 | x < 0 | +| raise.rb:76:3:76:15 | [ensure: raise] self | raise.rb:76:3:76:15 | [ensure: raise] self | +| raise.rb:76:3:76:15 | self | raise.rb:76:3:76:15 | self | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:79:1:92:3 | enter m8 | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:79:1:92:3 | exit m8 | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:79:1:92:3 | exit m8 (normal) | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:83:7:83:19 | self | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:84:5:85:20 | elsif ... | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:84:11:84:11 | x | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:85:15:85:19 | x < 0 | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:89:5:89:17 | [ensure: raise] self | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:89:5:89:17 | self | +| raise.rb:79:1:92:3 | exit m8 | raise.rb:79:1:92:3 | exit m8 | +| raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:79:1:92:3 | exit m8 (normal) | +| raise.rb:83:7:83:19 | self | raise.rb:83:7:83:19 | self | +| raise.rb:84:5:85:20 | elsif ... | raise.rb:84:5:85:20 | elsif ... | +| raise.rb:84:5:85:20 | elsif ... | raise.rb:89:5:89:17 | self | +| raise.rb:84:11:84:11 | x | raise.rb:79:1:92:3 | exit m8 (normal) | +| raise.rb:84:11:84:11 | x | raise.rb:84:5:85:20 | elsif ... | +| raise.rb:84:11:84:11 | x | raise.rb:84:11:84:11 | x | +| raise.rb:84:11:84:11 | x | raise.rb:85:15:85:19 | x < 0 | +| raise.rb:84:11:84:11 | x | raise.rb:89:5:89:17 | self | +| raise.rb:85:15:85:19 | x < 0 | raise.rb:85:15:85:19 | x < 0 | +| raise.rb:89:5:89:17 | [ensure: raise] self | raise.rb:89:5:89:17 | [ensure: raise] self | +| raise.rb:89:5:89:17 | self | raise.rb:89:5:89:17 | self | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:94:1:119:3 | enter m9 | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:94:1:119:3 | exit m9 | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:94:1:119:3 | exit m9 (abnormal) | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:94:1:119:3 | exit m9 (normal) | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:97:8:97:8 | x | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:98:7:98:19 | self | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:99:5:100:20 | elsif ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:99:11:99:11 | x | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:100:15:100:19 | x < 0 | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:104:5:104:23 | [ensure: raise] self | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:104:5:104:23 | self | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:106:7:108:9 | [ensure: raise] if ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:106:7:108:9 | [ensure: return] if ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:106:7:108:9 | if ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:106:10:106:11 | [ensure: raise] b1 | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:106:10:106:11 | [ensure: return] b1 | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:106:10:106:11 | b1 | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:107:9:107:26 | [ensure: raise] self | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:107:9:107:26 | [ensure: return] self | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:107:9:107:26 | self | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:109:5:110:25 | [ensure: return] ensure ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:109:5:110:25 | ensure ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:115:3:115:22 | [ensure: raise] self | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:115:3:115:22 | self | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:116:3:118:5 | [ensure: raise] if ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:116:3:118:5 | [ensure: return] if ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:116:3:118:5 | if ... | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:117:5:117:22 | [ensure: raise] self | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:117:5:117:22 | [ensure: return] self | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:117:5:117:22 | self | +| raise.rb:94:1:119:3 | exit m9 | raise.rb:94:1:119:3 | exit m9 | +| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:94:1:119:3 | exit m9 (abnormal) | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:94:1:119:3 | exit m9 (normal) | +| raise.rb:97:8:97:8 | x | raise.rb:94:1:119:3 | exit m9 (normal) | +| raise.rb:97:8:97:8 | x | raise.rb:97:8:97:8 | x | +| raise.rb:97:8:97:8 | x | raise.rb:98:7:98:19 | self | +| raise.rb:97:8:97:8 | x | raise.rb:99:5:100:20 | elsif ... | +| raise.rb:97:8:97:8 | x | raise.rb:99:11:99:11 | x | +| raise.rb:97:8:97:8 | x | raise.rb:100:15:100:19 | x < 0 | +| raise.rb:97:8:97:8 | x | raise.rb:104:5:104:23 | [ensure: raise] self | +| raise.rb:97:8:97:8 | x | raise.rb:104:5:104:23 | self | +| raise.rb:97:8:97:8 | x | raise.rb:106:7:108:9 | [ensure: raise] if ... | +| raise.rb:97:8:97:8 | x | raise.rb:106:7:108:9 | [ensure: return] if ... | +| raise.rb:97:8:97:8 | x | raise.rb:106:7:108:9 | if ... | +| raise.rb:97:8:97:8 | x | raise.rb:106:10:106:11 | [ensure: raise] b1 | +| raise.rb:97:8:97:8 | x | raise.rb:106:10:106:11 | [ensure: return] b1 | +| raise.rb:97:8:97:8 | x | raise.rb:106:10:106:11 | b1 | +| raise.rb:97:8:97:8 | x | raise.rb:107:9:107:26 | [ensure: raise] self | +| raise.rb:97:8:97:8 | x | raise.rb:107:9:107:26 | [ensure: return] self | +| raise.rb:97:8:97:8 | x | raise.rb:107:9:107:26 | self | +| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | +| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | +| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | +| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | +| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure: return] ensure ... | +| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | ensure ... | +| raise.rb:97:8:97:8 | x | raise.rb:115:3:115:22 | self | +| raise.rb:97:8:97:8 | x | raise.rb:116:3:118:5 | [ensure: return] if ... | +| raise.rb:97:8:97:8 | x | raise.rb:116:3:118:5 | if ... | +| raise.rb:97:8:97:8 | x | raise.rb:117:5:117:22 | [ensure: return] self | +| raise.rb:97:8:97:8 | x | raise.rb:117:5:117:22 | self | +| raise.rb:98:7:98:19 | self | raise.rb:98:7:98:19 | self | +| raise.rb:99:5:100:20 | elsif ... | raise.rb:99:5:100:20 | elsif ... | +| raise.rb:99:5:100:20 | elsif ... | raise.rb:104:5:104:23 | self | +| raise.rb:99:5:100:20 | elsif ... | raise.rb:106:7:108:9 | if ... | +| raise.rb:99:5:100:20 | elsif ... | raise.rb:106:10:106:11 | b1 | +| raise.rb:99:5:100:20 | elsif ... | raise.rb:107:9:107:26 | self | +| raise.rb:99:5:100:20 | elsif ... | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | +| raise.rb:99:5:100:20 | elsif ... | raise.rb:109:5:110:25 | ensure ... | +| raise.rb:99:5:100:20 | elsif ... | raise.rb:115:3:115:22 | self | +| raise.rb:99:5:100:20 | elsif ... | raise.rb:116:3:118:5 | if ... | +| raise.rb:99:5:100:20 | elsif ... | raise.rb:117:5:117:22 | self | +| raise.rb:99:11:99:11 | x | raise.rb:94:1:119:3 | exit m9 (normal) | +| raise.rb:99:11:99:11 | x | raise.rb:99:5:100:20 | elsif ... | +| raise.rb:99:11:99:11 | x | raise.rb:99:11:99:11 | x | +| raise.rb:99:11:99:11 | x | raise.rb:100:15:100:19 | x < 0 | +| raise.rb:99:11:99:11 | x | raise.rb:104:5:104:23 | self | +| raise.rb:99:11:99:11 | x | raise.rb:106:7:108:9 | [ensure: return] if ... | +| raise.rb:99:11:99:11 | x | raise.rb:106:7:108:9 | if ... | +| raise.rb:99:11:99:11 | x | raise.rb:106:10:106:11 | [ensure: return] b1 | +| raise.rb:99:11:99:11 | x | raise.rb:106:10:106:11 | b1 | +| raise.rb:99:11:99:11 | x | raise.rb:107:9:107:26 | [ensure: return] self | +| raise.rb:99:11:99:11 | x | raise.rb:107:9:107:26 | self | +| raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | +| raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | +| raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | [ensure: return] ensure ... | +| raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | ensure ... | +| raise.rb:99:11:99:11 | x | raise.rb:115:3:115:22 | self | +| raise.rb:99:11:99:11 | x | raise.rb:116:3:118:5 | [ensure: return] if ... | +| raise.rb:99:11:99:11 | x | raise.rb:116:3:118:5 | if ... | +| raise.rb:99:11:99:11 | x | raise.rb:117:5:117:22 | [ensure: return] self | +| raise.rb:99:11:99:11 | x | raise.rb:117:5:117:22 | self | +| raise.rb:100:15:100:19 | x < 0 | raise.rb:100:15:100:19 | x < 0 | +| raise.rb:100:15:100:19 | x < 0 | raise.rb:106:7:108:9 | [ensure: return] if ... | +| raise.rb:100:15:100:19 | x < 0 | raise.rb:106:10:106:11 | [ensure: return] b1 | +| raise.rb:100:15:100:19 | x < 0 | raise.rb:107:9:107:26 | [ensure: return] self | +| raise.rb:100:15:100:19 | x < 0 | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | +| raise.rb:100:15:100:19 | x < 0 | raise.rb:109:5:110:25 | [ensure: return] ensure ... | +| raise.rb:100:15:100:19 | x < 0 | raise.rb:116:3:118:5 | [ensure: return] if ... | +| raise.rb:100:15:100:19 | x < 0 | raise.rb:117:5:117:22 | [ensure: return] self | +| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:104:5:104:23 | [ensure: raise] self | +| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:106:7:108:9 | [ensure: raise] if ... | +| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:106:10:106:11 | [ensure: raise] b1 | +| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:107:9:107:26 | [ensure: raise] self | +| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | +| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | +| raise.rb:104:5:104:23 | self | raise.rb:104:5:104:23 | self | +| raise.rb:104:5:104:23 | self | raise.rb:106:7:108:9 | if ... | +| raise.rb:104:5:104:23 | self | raise.rb:106:10:106:11 | b1 | +| raise.rb:104:5:104:23 | self | raise.rb:107:9:107:26 | self | +| raise.rb:104:5:104:23 | self | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | +| raise.rb:104:5:104:23 | self | raise.rb:109:5:110:25 | ensure ... | +| raise.rb:104:5:104:23 | self | raise.rb:115:3:115:22 | self | +| raise.rb:104:5:104:23 | self | raise.rb:116:3:118:5 | if ... | +| raise.rb:104:5:104:23 | self | raise.rb:117:5:117:22 | self | +| raise.rb:106:7:108:9 | [ensure: raise] if ... | raise.rb:106:7:108:9 | [ensure: raise] if ... | +| raise.rb:106:7:108:9 | [ensure: raise] if ... | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | +| raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:106:7:108:9 | [ensure: return] if ... | +| raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:109:5:110:25 | [ensure: return] ensure ... | +| raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:116:3:118:5 | [ensure: return] if ... | +| raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:117:5:117:22 | [ensure: return] self | +| raise.rb:106:7:108:9 | if ... | raise.rb:106:7:108:9 | if ... | +| raise.rb:106:7:108:9 | if ... | raise.rb:109:5:110:25 | ensure ... | +| raise.rb:106:7:108:9 | if ... | raise.rb:115:3:115:22 | self | +| raise.rb:106:7:108:9 | if ... | raise.rb:116:3:118:5 | if ... | +| raise.rb:106:7:108:9 | if ... | raise.rb:117:5:117:22 | self | +| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:106:7:108:9 | [ensure: raise] if ... | +| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:106:10:106:11 | [ensure: raise] b1 | +| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:107:9:107:26 | [ensure: raise] self | +| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | +| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:106:7:108:9 | [ensure: return] if ... | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:106:10:106:11 | [ensure: return] b1 | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:107:9:107:26 | [ensure: return] self | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:109:5:110:25 | [ensure: return] ensure ... | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:116:3:118:5 | [ensure: return] if ... | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:117:5:117:22 | [ensure: return] self | +| raise.rb:106:10:106:11 | b1 | raise.rb:106:7:108:9 | if ... | +| raise.rb:106:10:106:11 | b1 | raise.rb:106:10:106:11 | b1 | +| raise.rb:106:10:106:11 | b1 | raise.rb:107:9:107:26 | self | +| raise.rb:106:10:106:11 | b1 | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | +| raise.rb:106:10:106:11 | b1 | raise.rb:109:5:110:25 | ensure ... | +| raise.rb:106:10:106:11 | b1 | raise.rb:115:3:115:22 | self | +| raise.rb:106:10:106:11 | b1 | raise.rb:116:3:118:5 | if ... | +| raise.rb:106:10:106:11 | b1 | raise.rb:117:5:117:22 | self | +| raise.rb:107:9:107:26 | [ensure: raise] self | raise.rb:107:9:107:26 | [ensure: raise] self | +| raise.rb:107:9:107:26 | [ensure: raise] self | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | +| raise.rb:107:9:107:26 | [ensure: return] self | raise.rb:107:9:107:26 | [ensure: return] self | +| raise.rb:107:9:107:26 | [ensure: return] self | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | +| raise.rb:107:9:107:26 | self | raise.rb:107:9:107:26 | self | +| raise.rb:107:9:107:26 | self | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | +| raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | +| raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | +| raise.rb:109:5:110:25 | [ensure: raise] ensure ... | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | +| raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | +| raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:109:5:110:25 | [ensure: return] ensure ... | +| raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:116:3:118:5 | [ensure: return] if ... | +| raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:117:5:117:22 | [ensure: return] self | +| raise.rb:109:5:110:25 | ensure ... | raise.rb:109:5:110:25 | ensure ... | +| raise.rb:109:5:110:25 | ensure ... | raise.rb:115:3:115:22 | self | +| raise.rb:109:5:110:25 | ensure ... | raise.rb:116:3:118:5 | if ... | +| raise.rb:109:5:110:25 | ensure ... | raise.rb:117:5:117:22 | self | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:115:3:115:22 | [ensure: raise] self | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:116:3:118:5 | [ensure: raise] if ... | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:117:5:117:22 | [ensure: raise] self | +| raise.rb:115:3:115:22 | self | raise.rb:115:3:115:22 | self | +| raise.rb:115:3:115:22 | self | raise.rb:116:3:118:5 | if ... | +| raise.rb:115:3:115:22 | self | raise.rb:117:5:117:22 | self | +| raise.rb:116:3:118:5 | [ensure: raise] if ... | raise.rb:116:3:118:5 | [ensure: raise] if ... | +| raise.rb:116:3:118:5 | [ensure: return] if ... | raise.rb:116:3:118:5 | [ensure: return] if ... | +| raise.rb:116:3:118:5 | if ... | raise.rb:116:3:118:5 | if ... | +| raise.rb:117:5:117:22 | [ensure: raise] self | raise.rb:117:5:117:22 | [ensure: raise] self | +| raise.rb:117:5:117:22 | [ensure: return] self | raise.rb:117:5:117:22 | [ensure: return] self | +| raise.rb:117:5:117:22 | self | raise.rb:117:5:117:22 | self | +| raise.rb:121:1:126:3 | enter m10 | raise.rb:121:1:126:3 | enter m10 | +| raise.rb:121:1:126:3 | enter m10 | raise.rb:121:1:126:3 | exit m10 | +| raise.rb:121:1:126:3 | enter m10 | raise.rb:121:14:121:30 | self | +| raise.rb:121:1:126:3 | enter m10 | raise.rb:125:3:125:51 | self | +| raise.rb:121:1:126:3 | exit m10 | raise.rb:121:1:126:3 | exit m10 | +| raise.rb:121:14:121:30 | self | raise.rb:121:14:121:30 | self | +| raise.rb:125:3:125:51 | self | raise.rb:125:3:125:51 | self | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:128:1:140:3 | enter m11 | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:128:1:140:3 | exit m11 | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:130:5:132:7 | if ... | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:131:7:131:22 | self | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:133:3:133:19 | rescue ... | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:134:10:134:19 | ExceptionB | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:135:5:135:21 | self | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:137:5:137:17 | [ensure: raise] self | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:137:5:137:17 | self | +| raise.rb:128:1:140:3 | exit m11 | raise.rb:128:1:140:3 | exit m11 | +| raise.rb:130:5:132:7 | if ... | raise.rb:130:5:132:7 | if ... | +| raise.rb:131:7:131:22 | self | raise.rb:131:7:131:22 | self | +| raise.rb:131:7:131:22 | self | raise.rb:133:3:133:19 | rescue ... | +| raise.rb:131:7:131:22 | self | raise.rb:134:10:134:19 | ExceptionB | +| raise.rb:131:7:131:22 | self | raise.rb:135:5:135:21 | self | +| raise.rb:131:7:131:22 | self | raise.rb:137:5:137:17 | [ensure: raise] self | +| raise.rb:133:3:133:19 | rescue ... | raise.rb:133:3:133:19 | rescue ... | +| raise.rb:134:10:134:19 | ExceptionB | raise.rb:134:10:134:19 | ExceptionB | +| raise.rb:134:10:134:19 | ExceptionB | raise.rb:135:5:135:21 | self | +| raise.rb:134:10:134:19 | ExceptionB | raise.rb:137:5:137:17 | [ensure: raise] self | +| raise.rb:135:5:135:21 | self | raise.rb:135:5:135:21 | self | +| raise.rb:137:5:137:17 | [ensure: raise] self | raise.rb:137:5:137:17 | [ensure: raise] self | +| raise.rb:137:5:137:17 | self | raise.rb:137:5:137:17 | self | +| raise.rb:142:1:148:3 | enter m12 | raise.rb:142:1:148:3 | enter m12 | +| raise.rb:142:1:148:3 | enter m12 | raise.rb:142:1:148:3 | exit m12 (normal) | +| raise.rb:142:1:148:3 | enter m12 | raise.rb:143:3:145:5 | if ... | +| raise.rb:142:1:148:3 | enter m12 | raise.rb:144:5:144:12 | self | +| raise.rb:142:1:148:3 | exit m12 (normal) | raise.rb:142:1:148:3 | exit m12 (normal) | +| raise.rb:143:3:145:5 | if ... | raise.rb:143:3:145:5 | if ... | +| raise.rb:144:5:144:12 | self | raise.rb:144:5:144:12 | self | +| raise.rb:150:1:152:3 | enter m13 | raise.rb:150:1:152:3 | enter m13 | +| raise.rb:154:1:156:3 | enter m14 | raise.rb:154:1:156:3 | enter m14 | +| raise.rb:155:16:155:50 | enter { ... } | raise.rb:155:16:155:50 | enter { ... } | +| raise.rb:155:16:155:50 | enter { ... } | raise.rb:155:16:155:50 | exit { ... } | +| raise.rb:155:16:155:50 | enter { ... } | raise.rb:155:25:155:32 | self | +| raise.rb:155:16:155:50 | enter { ... } | raise.rb:155:25:155:48 | ... if ... | +| raise.rb:155:16:155:50 | exit { ... } | raise.rb:155:16:155:50 | exit { ... } | +| raise.rb:155:25:155:32 | self | raise.rb:155:25:155:32 | self | +| raise.rb:155:25:155:48 | ... if ... | raise.rb:155:25:155:48 | ... if ... | +| raise.rb:158:1:164:3 | enter m15 | raise.rb:158:1:164:3 | enter m15 | +| raise.rb:159:7:163:5 | enter do ... end | raise.rb:159:7:163:5 | enter do ... end | +| raise.rb:160:9:162:7 | enter -> { ... } | raise.rb:160:9:162:7 | enter -> { ... } | +| raise.rb:160:9:162:7 | enter -> { ... } | raise.rb:160:9:162:7 | exit -> { ... } | +| raise.rb:160:9:162:7 | enter -> { ... } | raise.rb:161:7:161:14 | self | +| raise.rb:160:9:162:7 | enter -> { ... } | raise.rb:161:7:161:23 | ... unless ... | +| raise.rb:160:9:162:7 | exit -> { ... } | raise.rb:160:9:162:7 | exit -> { ... } | +| raise.rb:161:7:161:14 | self | raise.rb:161:7:161:14 | self | +| raise.rb:161:7:161:23 | ... unless ... | raise.rb:161:7:161:23 | ... unless ... | +| raise.rb:167:3:169:5 | enter m | raise.rb:167:3:169:5 | enter m | +| raise.rb:172:1:182:3 | enter m16 | raise.rb:172:1:182:3 | enter m16 | +| raise.rb:172:1:182:3 | enter m16 | raise.rb:172:1:182:3 | exit m16 | +| raise.rb:172:1:182:3 | enter m16 | raise.rb:172:1:182:3 | exit m16 (abnormal) | +| raise.rb:172:1:182:3 | enter m16 | raise.rb:172:1:182:3 | exit m16 (normal) | +| raise.rb:172:1:182:3 | enter m16 | raise.rb:174:8:174:23 | [false] ... \|\| ... | +| raise.rb:172:1:182:3 | enter m16 | raise.rb:174:8:174:23 | [true] ... \|\| ... | +| raise.rb:172:1:182:3 | enter m16 | raise.rb:174:14:174:15 | b2 | +| raise.rb:172:1:182:3 | enter m16 | raise.rb:175:14:175:14 | 1 | +| raise.rb:172:1:182:3 | enter m16 | raise.rb:177:14:177:14 | 2 | +| raise.rb:172:1:182:3 | enter m16 | raise.rb:179:10:179:19 | ExceptionA | +| raise.rb:172:1:182:3 | enter m16 | raise.rb:180:12:180:12 | 3 | +| raise.rb:172:1:182:3 | exit m16 | raise.rb:172:1:182:3 | exit m16 | +| raise.rb:172:1:182:3 | exit m16 (abnormal) | raise.rb:172:1:182:3 | exit m16 (abnormal) | +| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:172:1:182:3 | exit m16 (normal) | +| raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:174:8:174:23 | [false] ... \|\| ... | +| raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:177:14:177:14 | 2 | +| raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:174:8:174:23 | [true] ... \|\| ... | +| raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:175:14:175:14 | 1 | +| raise.rb:174:14:174:15 | b2 | raise.rb:174:8:174:23 | [false] ... \|\| ... | +| raise.rb:174:14:174:15 | b2 | raise.rb:174:14:174:15 | b2 | +| raise.rb:174:14:174:15 | b2 | raise.rb:177:14:177:14 | 2 | +| raise.rb:175:14:175:14 | 1 | raise.rb:175:14:175:14 | 1 | +| raise.rb:177:14:177:14 | 2 | raise.rb:177:14:177:14 | 2 | +| raise.rb:179:10:179:19 | ExceptionA | raise.rb:172:1:182:3 | exit m16 (abnormal) | +| raise.rb:179:10:179:19 | ExceptionA | raise.rb:179:10:179:19 | ExceptionA | +| raise.rb:179:10:179:19 | ExceptionA | raise.rb:180:12:180:12 | 3 | +| raise.rb:180:12:180:12 | 3 | raise.rb:180:12:180:12 | 3 | +postDominance +| break_ensure.rb:1:1:11:3 | enter m1 | break_ensure.rb:1:1:11:3 | enter m1 | +| break_ensure.rb:1:1:11:3 | exit m1 | break_ensure.rb:1:1:11:3 | exit m1 | +| break_ensure.rb:1:1:56:4 | enter break_ensure.rb | break_ensure.rb:1:1:56:4 | enter break_ensure.rb | +| break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:1:1:11:3 | enter m1 | +| break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:2:3:6:5 | while ... | +| break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:2:9:2:9 | x | +| break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:3:5:5:7 | if ... | +| break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:3:8:3:8 | x | +| break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:4:7:4:11 | break | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:1:1:11:3 | enter m1 | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:2:9:2:9 | x | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:3:5:5:7 | if ... | +| break_ensure.rb:3:5:5:7 | if ... | break_ensure.rb:3:5:5:7 | if ... | +| break_ensure.rb:3:8:3:8 | x | break_ensure.rb:3:8:3:8 | x | +| break_ensure.rb:4:7:4:11 | break | break_ensure.rb:4:7:4:11 | break | +| break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | +| break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:1:1:11:3 | enter m1 | +| break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:2:3:6:5 | while ... | +| break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:2:9:2:9 | x | +| break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:3:5:5:7 | if ... | +| break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:3:8:3:8 | x | +| break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:4:7:4:11 | break | +| break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:8:3:10:5 | if ... | +| break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:9:5:9:23 | self | +| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:8:6:8:13 | [ensure: raise] self | +| break_ensure.rb:9:5:9:23 | [ensure: raise] self | break_ensure.rb:9:5:9:23 | [ensure: raise] self | +| break_ensure.rb:9:5:9:23 | self | break_ensure.rb:9:5:9:23 | self | +| break_ensure.rb:13:1:25:3 | enter m2 | break_ensure.rb:13:1:25:3 | enter m2 | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:13:1:25:3 | enter m2 | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:14:3:24:5 | while ... | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:14:9:14:9 | x | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:16:7:18:9 | if ... | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:16:10:16:10 | x | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:17:9:17:13 | break | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:20:7:22:9 | if ... | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:20:10:20:10 | [ensure: raise] y | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:21:9:21:20 | [ensure: break] self | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:21:9:21:20 | [ensure: raise] self | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:21:9:21:20 | self | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:13:1:25:3 | enter m2 | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:14:9:14:9 | x | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:16:7:18:9 | if ... | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | if ... | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:21:9:21:20 | self | +| break_ensure.rb:16:7:18:9 | if ... | break_ensure.rb:16:7:18:9 | if ... | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:16:10:16:10 | x | +| break_ensure.rb:17:9:17:13 | break | break_ensure.rb:17:9:17:13 | break | +| break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:17:9:17:13 | break | +| break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | +| break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:21:9:21:20 | [ensure: break] self | +| break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | +| break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | break_ensure.rb:20:10:20:10 | [ensure: raise] y | +| break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | break_ensure.rb:21:9:21:20 | [ensure: raise] self | +| break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:16:7:18:9 | if ... | +| break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:20:7:22:9 | if ... | +| break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:21:9:21:20 | self | +| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:20:10:20:10 | [ensure: raise] y | +| break_ensure.rb:21:9:21:20 | [ensure: break] self | break_ensure.rb:21:9:21:20 | [ensure: break] self | +| break_ensure.rb:21:9:21:20 | [ensure: raise] self | break_ensure.rb:21:9:21:20 | [ensure: raise] self | +| break_ensure.rb:21:9:21:20 | self | break_ensure.rb:21:9:21:20 | self | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:27:1:42:3 | enter m3 | +| break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:27:1:42:3 | exit m3 | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:27:1:42:3 | enter m3 | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:27:1:42:3 | exit m3 (normal) | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:29:5:31:7 | if ... | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:30:7:30:12 | return | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:33:5:39:7 | while ... | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:33:11:33:11 | [ensure: return] y | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:33:11:33:11 | y | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:35:9:37:11 | if ... | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:35:12:35:12 | [ensure: return] x | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:35:12:35:12 | x | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:36:11:36:15 | [ensure: return] break | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:36:11:36:15 | break | +| break_ensure.rb:29:5:31:7 | if ... | break_ensure.rb:29:5:31:7 | if ... | +| break_ensure.rb:30:7:30:12 | return | break_ensure.rb:30:7:30:12 | return | +| break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | +| break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:30:7:30:12 | return | +| break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | +| break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:33:11:33:11 | [ensure: return] y | +| break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | +| break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:35:12:35:12 | [ensure: return] x | +| break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:36:11:36:15 | [ensure: return] break | +| break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:29:5:31:7 | if ... | +| break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:33:5:39:7 | while ... | +| break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:33:11:33:11 | y | +| break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:35:9:37:11 | if ... | +| break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:35:12:35:12 | x | +| break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:36:11:36:15 | break | +| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:33:11:33:11 | [ensure: raise] y | +| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:30:7:30:12 | return | +| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:33:11:33:11 | [ensure: return] y | +| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | +| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:29:5:31:7 | if ... | +| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:33:11:33:11 | y | +| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:35:9:37:11 | if ... | +| break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | +| break_ensure.rb:35:9:37:11 | [ensure: return] if ... | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | +| break_ensure.rb:35:9:37:11 | if ... | break_ensure.rb:35:9:37:11 | if ... | +| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:35:12:35:12 | [ensure: raise] x | +| break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:35:12:35:12 | [ensure: return] x | +| break_ensure.rb:35:12:35:12 | x | break_ensure.rb:35:12:35:12 | x | +| break_ensure.rb:36:11:36:15 | [ensure: raise] break | break_ensure.rb:36:11:36:15 | [ensure: raise] break | +| break_ensure.rb:36:11:36:15 | [ensure: return] break | break_ensure.rb:36:11:36:15 | [ensure: return] break | +| break_ensure.rb:36:11:36:15 | break | break_ensure.rb:36:11:36:15 | break | +| break_ensure.rb:44:1:56:3 | enter m4 | break_ensure.rb:44:1:56:3 | enter m4 | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:44:1:56:3 | enter m4 | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:45:3:55:5 | while ... | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:45:9:45:9 | x | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:47:7:49:9 | if ... | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:47:10:47:10 | x | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:48:9:48:16 | self | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:51:7:53:9 | if ... | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:51:10:51:10 | [ensure: raise] x | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:52:15:52:16 | 10 | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:44:1:56:3 | enter m4 | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:45:9:45:9 | x | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:7:53:9 | if ... | +| break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:47:7:49:9 | if ... | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:47:10:47:10 | x | +| break_ensure.rb:48:9:48:16 | self | break_ensure.rb:48:9:48:16 | self | +| break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | +| break_ensure.rb:51:7:53:9 | if ... | break_ensure.rb:51:7:53:9 | if ... | +| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:48:9:48:16 | self | +| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:51:10:51:10 | [ensure: raise] x | +| break_ensure.rb:52:15:52:16 | 10 | break_ensure.rb:52:15:52:16 | 10 | +| break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:1:1:6:3 | enter if_in_case | +| case.rb:1:1:99:4 | enter case.rb | case.rb:1:1:99:4 | enter case.rb | +| case.rb:2:3:5:5 | case ... | case.rb:1:1:6:3 | enter if_in_case | +| case.rb:2:3:5:5 | case ... | case.rb:2:3:5:5 | case ... | +| case.rb:2:3:5:5 | case ... | case.rb:3:5:3:42 | [match] when ... | +| case.rb:2:3:5:5 | case ... | case.rb:3:5:3:42 | [no-match] when ... | +| case.rb:2:3:5:5 | case ... | case.rb:3:18:3:41 | if ... | +| case.rb:2:3:5:5 | case ... | case.rb:3:21:3:22 | self | +| case.rb:2:3:5:5 | case ... | case.rb:3:29:3:37 | self | +| case.rb:2:3:5:5 | case ... | case.rb:4:5:4:24 | [match] when ... | +| case.rb:2:3:5:5 | case ... | case.rb:4:5:4:24 | [no-match] when ... | +| case.rb:2:3:5:5 | case ... | case.rb:4:10:4:10 | 2 | +| case.rb:2:3:5:5 | case ... | case.rb:4:17:4:24 | self | +| case.rb:3:5:3:42 | [match] when ... | case.rb:3:5:3:42 | [match] when ... | +| case.rb:3:5:3:42 | [no-match] when ... | case.rb:3:5:3:42 | [no-match] when ... | +| case.rb:3:18:3:41 | if ... | case.rb:3:5:3:42 | [match] when ... | +| case.rb:3:18:3:41 | if ... | case.rb:3:18:3:41 | if ... | +| case.rb:3:18:3:41 | if ... | case.rb:3:21:3:22 | self | +| case.rb:3:18:3:41 | if ... | case.rb:3:29:3:37 | self | +| case.rb:3:21:3:22 | self | case.rb:3:5:3:42 | [match] when ... | +| case.rb:3:21:3:22 | self | case.rb:3:21:3:22 | self | +| case.rb:3:29:3:37 | self | case.rb:3:29:3:37 | self | +| case.rb:4:5:4:24 | [match] when ... | case.rb:4:5:4:24 | [match] when ... | +| case.rb:4:5:4:24 | [no-match] when ... | case.rb:4:5:4:24 | [no-match] when ... | +| case.rb:4:10:4:10 | 2 | case.rb:3:5:3:42 | [no-match] when ... | +| case.rb:4:10:4:10 | 2 | case.rb:4:10:4:10 | 2 | +| case.rb:4:17:4:24 | self | case.rb:4:5:4:24 | [match] when ... | +| case.rb:4:17:4:24 | self | case.rb:4:17:4:24 | self | +| case.rb:8:1:18:3 | enter case_match | case.rb:8:1:18:3 | enter case_match | +| case.rb:9:3:17:5 | case ... | case.rb:8:1:18:3 | enter case_match | +| case.rb:9:3:17:5 | case ... | case.rb:9:3:17:5 | case ... | +| case.rb:9:3:17:5 | case ... | case.rb:11:5:11:15 | in ... then ... | +| case.rb:9:3:17:5 | case ... | case.rb:11:15:11:15 | 3 | +| case.rb:9:3:17:5 | case ... | case.rb:12:5:13:7 | in ... then ... | +| case.rb:9:3:17:5 | case ... | case.rb:13:7:13:7 | 4 | +| case.rb:9:3:17:5 | case ... | case.rb:14:5:14:25 | in ... then ... | +| case.rb:9:3:17:5 | case ... | case.rb:14:13:14:13 | x | +| case.rb:9:3:17:5 | case ... | case.rb:14:25:14:25 | 6 | +| case.rb:9:3:17:5 | case ... | case.rb:15:5:15:28 | in ... then ... | +| case.rb:9:3:17:5 | case ... | case.rb:15:17:15:17 | x | +| case.rb:9:3:17:5 | case ... | case.rb:15:28:15:28 | 7 | +| case.rb:9:3:17:5 | case ... | case.rb:16:10:16:10 | 8 | +| case.rb:11:5:11:15 | in ... then ... | case.rb:11:5:11:15 | in ... then ... | +| case.rb:11:15:11:15 | 3 | case.rb:11:15:11:15 | 3 | +| case.rb:12:5:13:7 | in ... then ... | case.rb:12:5:13:7 | in ... then ... | +| case.rb:13:7:13:7 | 4 | case.rb:13:7:13:7 | 4 | +| case.rb:14:5:14:25 | in ... then ... | case.rb:14:5:14:25 | in ... then ... | +| case.rb:14:13:14:13 | x | case.rb:14:5:14:25 | in ... then ... | +| case.rb:14:13:14:13 | x | case.rb:14:13:14:13 | x | +| case.rb:14:25:14:25 | 6 | case.rb:14:25:14:25 | 6 | +| case.rb:15:5:15:28 | in ... then ... | case.rb:15:5:15:28 | in ... then ... | +| case.rb:15:17:15:17 | x | case.rb:15:5:15:28 | in ... then ... | +| case.rb:15:17:15:17 | x | case.rb:15:17:15:17 | x | +| case.rb:15:28:15:28 | 7 | case.rb:15:28:15:28 | 7 | +| case.rb:16:10:16:10 | 8 | case.rb:16:10:16:10 | 8 | +| case.rb:20:1:24:3 | enter case_match_no_match | case.rb:20:1:24:3 | enter case_match_no_match | +| case.rb:20:1:24:3 | exit case_match_no_match | case.rb:20:1:24:3 | exit case_match_no_match | +| case.rb:20:1:24:3 | exit case_match_no_match (abnormal) | case.rb:20:1:24:3 | exit case_match_no_match (abnormal) | +| case.rb:21:3:23:5 | case ... | case.rb:20:1:24:3 | enter case_match_no_match | +| case.rb:21:3:23:5 | case ... | case.rb:21:3:23:5 | case ... | +| case.rb:26:1:30:3 | enter case_match_raise | case.rb:26:1:30:3 | enter case_match_raise | +| case.rb:26:1:30:3 | exit case_match_raise | case.rb:26:1:30:3 | exit case_match_raise | +| case.rb:26:1:30:3 | exit case_match_raise (abnormal) | case.rb:26:1:30:3 | exit case_match_raise (abnormal) | +| case.rb:27:3:29:5 | case ... | case.rb:26:1:30:3 | enter case_match_raise | +| case.rb:27:3:29:5 | case ... | case.rb:27:3:29:5 | case ... | +| case.rb:28:7:28:28 | enter -> { ... } | case.rb:28:7:28:28 | enter -> { ... } | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:32:1:39:3 | enter case_match_array | +| case.rb:32:1:39:3 | exit case_match_array | case.rb:32:1:39:3 | exit case_match_array | +| case.rb:32:1:39:3 | exit case_match_array (abnormal) | case.rb:32:1:39:3 | exit case_match_array (abnormal) | +| case.rb:33:3:38:5 | case ... | case.rb:32:1:39:3 | enter case_match_array | +| case.rb:33:3:38:5 | case ... | case.rb:33:3:38:5 | case ... | +| case.rb:33:3:38:5 | case ... | case.rb:35:5:35:11 | in ... then ... | +| case.rb:33:3:38:5 | case ... | case.rb:35:9:35:9 | x | +| case.rb:33:3:38:5 | case ... | case.rb:36:5:36:13 | in ... then ... | +| case.rb:33:3:38:5 | case ... | case.rb:36:9:36:9 | x | +| case.rb:33:3:38:5 | case ... | case.rb:37:5:37:27 | in ... then ... | +| case.rb:33:3:38:5 | case ... | case.rb:37:8:37:26 | [ ..., * ] | +| case.rb:33:3:38:5 | case ... | case.rb:37:12:37:12 | a | +| case.rb:33:3:38:5 | case ... | case.rb:37:15:37:15 | b | +| case.rb:33:3:38:5 | case ... | case.rb:37:19:37:19 | c | +| case.rb:33:3:38:5 | case ... | case.rb:37:25:37:25 | e | +| case.rb:35:5:35:11 | in ... then ... | case.rb:35:5:35:11 | in ... then ... | +| case.rb:35:9:35:9 | x | case.rb:35:9:35:9 | x | +| case.rb:36:5:36:13 | in ... then ... | case.rb:36:5:36:13 | in ... then ... | +| case.rb:36:9:36:9 | x | case.rb:36:9:36:9 | x | +| case.rb:37:5:37:27 | in ... then ... | case.rb:37:5:37:27 | in ... then ... | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:5:37:27 | in ... then ... | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:8:37:26 | [ ..., * ] | +| case.rb:37:12:37:12 | a | case.rb:37:5:37:27 | in ... then ... | +| case.rb:37:12:37:12 | a | case.rb:37:8:37:26 | [ ..., * ] | +| case.rb:37:12:37:12 | a | case.rb:37:12:37:12 | a | +| case.rb:37:15:37:15 | b | case.rb:37:5:37:27 | in ... then ... | +| case.rb:37:15:37:15 | b | case.rb:37:8:37:26 | [ ..., * ] | +| case.rb:37:15:37:15 | b | case.rb:37:12:37:12 | a | +| case.rb:37:15:37:15 | b | case.rb:37:15:37:15 | b | +| case.rb:37:19:37:19 | c | case.rb:37:5:37:27 | in ... then ... | +| case.rb:37:19:37:19 | c | case.rb:37:8:37:26 | [ ..., * ] | +| case.rb:37:19:37:19 | c | case.rb:37:12:37:12 | a | +| case.rb:37:19:37:19 | c | case.rb:37:15:37:15 | b | +| case.rb:37:19:37:19 | c | case.rb:37:19:37:19 | c | +| case.rb:37:25:37:25 | e | case.rb:37:5:37:27 | in ... then ... | +| case.rb:37:25:37:25 | e | case.rb:37:8:37:26 | [ ..., * ] | +| case.rb:37:25:37:25 | e | case.rb:37:12:37:12 | a | +| case.rb:37:25:37:25 | e | case.rb:37:15:37:15 | b | +| case.rb:37:25:37:25 | e | case.rb:37:19:37:19 | c | +| case.rb:37:25:37:25 | e | case.rb:37:25:37:25 | e | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:41:1:45:3 | enter case_match_find | +| case.rb:41:1:45:3 | exit case_match_find | case.rb:41:1:45:3 | exit case_match_find | +| case.rb:41:1:45:3 | exit case_match_find (abnormal) | case.rb:41:1:45:3 | exit case_match_find (abnormal) | +| case.rb:43:10:43:10 | x | case.rb:41:1:45:3 | enter case_match_find | +| case.rb:43:10:43:10 | x | case.rb:43:10:43:10 | x | +| case.rb:43:16:43:16 | 2 | case.rb:41:1:45:3 | enter case_match_find | +| case.rb:43:16:43:16 | 2 | case.rb:43:10:43:10 | x | +| case.rb:43:16:43:16 | 2 | case.rb:43:16:43:16 | 2 | +| case.rb:43:20:43:20 | y | case.rb:41:1:45:3 | enter case_match_find | +| case.rb:43:20:43:20 | y | case.rb:43:10:43:10 | x | +| case.rb:43:20:43:20 | y | case.rb:43:16:43:16 | 2 | +| case.rb:43:20:43:20 | y | case.rb:43:20:43:20 | y | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:47:1:53:3 | enter case_match_hash | +| case.rb:47:1:53:3 | exit case_match_hash | case.rb:47:1:53:3 | exit case_match_hash | +| case.rb:47:1:53:3 | exit case_match_hash (abnormal) | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | +| case.rb:48:3:52:5 | case ... | case.rb:47:1:53:3 | enter case_match_hash | +| case.rb:48:3:52:5 | case ... | case.rb:48:3:52:5 | case ... | +| case.rb:48:3:52:5 | case ... | case.rb:49:8:49:34 | { ..., ** } | +| case.rb:48:3:52:5 | case ... | case.rb:49:20:49:20 | 1 | +| case.rb:48:3:52:5 | case ... | case.rb:49:23:49:23 | a | +| case.rb:48:3:52:5 | case ... | case.rb:49:29:49:32 | rest | +| case.rb:48:3:52:5 | case ... | case.rb:50:5:50:25 | in ... then ... | +| case.rb:48:3:52:5 | case ... | case.rb:50:8:50:24 | { ..., ** } | +| case.rb:48:3:52:5 | case ... | case.rb:50:16:50:16 | 1 | +| case.rb:48:3:52:5 | case ... | case.rb:51:5:51:17 | in ... then ... | +| case.rb:48:3:52:5 | case ... | case.rb:51:8:51:16 | { ..., ** } | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:8:49:34 | { ..., ** } | +| case.rb:49:20:49:20 | 1 | case.rb:49:20:49:20 | 1 | +| case.rb:49:23:49:23 | a | case.rb:49:23:49:23 | a | +| case.rb:49:29:49:32 | rest | case.rb:49:23:49:23 | a | +| case.rb:49:29:49:32 | rest | case.rb:49:29:49:32 | rest | +| case.rb:50:5:50:25 | in ... then ... | case.rb:50:5:50:25 | in ... then ... | +| case.rb:50:8:50:24 | { ..., ** } | case.rb:50:8:50:24 | { ..., ** } | +| case.rb:50:16:50:16 | 1 | case.rb:50:16:50:16 | 1 | +| case.rb:51:5:51:17 | in ... then ... | case.rb:51:5:51:17 | in ... then ... | +| case.rb:51:8:51:16 | { ..., ** } | case.rb:51:5:51:17 | in ... then ... | +| case.rb:51:8:51:16 | { ..., ** } | case.rb:51:8:51:16 | { ..., ** } | +| case.rb:55:1:61:3 | enter case_match_variable | case.rb:55:1:61:3 | enter case_match_variable | +| case.rb:56:3:60:5 | case ... | case.rb:55:1:61:3 | enter case_match_variable | +| case.rb:56:3:60:5 | case ... | case.rb:56:3:60:5 | case ... | +| case.rb:56:3:60:5 | case ... | case.rb:58:5:58:10 | in ... then ... | +| case.rb:58:5:58:10 | in ... then ... | case.rb:58:5:58:10 | in ... then ... | +| case.rb:63:1:67:3 | enter case_match_underscore | case.rb:63:1:67:3 | enter case_match_underscore | +| case.rb:64:3:66:5 | case ... | case.rb:63:1:67:3 | enter case_match_underscore | +| case.rb:64:3:66:5 | case ... | case.rb:64:3:66:5 | case ... | +| case.rb:64:3:66:5 | case ... | case.rb:65:12:65:12 | _ | +| case.rb:65:12:65:12 | _ | case.rb:65:12:65:12 | _ | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:69:1:93:3 | enter case_match_various | +| case.rb:69:1:93:3 | exit case_match_various | case.rb:69:1:93:3 | exit case_match_various | +| case.rb:69:1:93:3 | exit case_match_various (abnormal) | case.rb:69:1:93:3 | exit case_match_various (abnormal) | +| case.rb:72:3:92:5 | case ... | case.rb:69:1:93:3 | enter case_match_various | +| case.rb:72:3:92:5 | case ... | case.rb:72:3:92:5 | case ... | +| case.rb:72:3:92:5 | case ... | case.rb:74:5:74:11 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:75:5:75:15 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:76:5:76:18 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:77:5:77:18 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:78:5:78:19 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:79:5:79:14 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:80:5:80:12 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:81:5:81:11 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:82:5:82:20 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:82:13:82:13 | x | +| case.rb:72:3:92:5 | case ... | case.rb:82:20:82:20 | 1 | +| case.rb:72:3:92:5 | case ... | case.rb:83:5:83:26 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:83:12:83:15 | ^... | +| case.rb:72:3:92:5 | case ... | case.rb:83:20:83:25 | string | +| case.rb:72:3:92:5 | case ... | case.rb:84:5:84:17 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:85:5:85:23 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:88:14:88:15 | 10 | +| case.rb:72:3:92:5 | case ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:89:14:89:17 | self | +| case.rb:72:3:92:5 | case ... | case.rb:89:21:89:24 | true | +| case.rb:72:3:92:5 | case ... | case.rb:89:28:89:32 | false | +| case.rb:72:3:92:5 | case ... | case.rb:89:36:89:43 | __LINE__ | +| case.rb:72:3:92:5 | case ... | case.rb:89:47:89:54 | __FILE__ | +| case.rb:72:3:92:5 | case ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:72:3:92:5 | case ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:72:3:92:5 | case ... | case.rb:91:13:91:14 | "" | +| case.rb:72:3:92:5 | case ... | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:72:3:92:5 | case ... | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:74:5:74:11 | in ... then ... | case.rb:74:5:74:11 | in ... then ... | +| case.rb:75:5:75:15 | in ... then ... | case.rb:75:5:75:15 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:76:5:76:18 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:77:5:77:18 | in ... then ... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:78:5:78:19 | in ... then ... | +| case.rb:79:5:79:14 | in ... then ... | case.rb:79:5:79:14 | in ... then ... | +| case.rb:80:5:80:12 | in ... then ... | case.rb:80:5:80:12 | in ... then ... | +| case.rb:81:5:81:11 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | +| case.rb:82:5:82:20 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | +| case.rb:82:13:82:13 | x | case.rb:82:13:82:13 | x | +| case.rb:82:20:82:20 | 1 | case.rb:82:13:82:13 | x | +| case.rb:82:20:82:20 | 1 | case.rb:82:20:82:20 | 1 | +| case.rb:83:5:83:26 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | +| case.rb:83:12:83:15 | ^... | case.rb:83:12:83:15 | ^... | +| case.rb:83:20:83:25 | string | case.rb:83:20:83:25 | string | +| case.rb:84:5:84:17 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | +| case.rb:85:5:85:23 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | +| case.rb:85:8:85:23 | enter -> { ... } | case.rb:85:8:85:23 | enter -> { ... } | +| case.rb:86:5:86:11 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:87:5:87:17 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:88:5:88:15 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | +| case.rb:88:14:88:15 | 10 | case.rb:88:14:88:15 | 10 | +| case.rb:89:5:89:69 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | +| case.rb:89:14:89:17 | self | case.rb:89:14:89:17 | self | +| case.rb:89:21:89:24 | true | case.rb:89:21:89:24 | true | +| case.rb:89:28:89:32 | false | case.rb:89:28:89:32 | false | +| case.rb:89:36:89:43 | __LINE__ | case.rb:89:36:89:43 | __LINE__ | +| case.rb:89:47:89:54 | __FILE__ | case.rb:89:47:89:54 | __FILE__ | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:90:5:90:13 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:91:5:91:25 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | +| case.rb:91:13:91:14 | "" | case.rb:91:13:91:14 | "" | +| case.rb:91:18:91:19 | [ ..., * ] | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:91:23:91:24 | { ..., ** } | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:95:1:99:3 | enter case_match_guard_no_else | case.rb:95:1:99:3 | enter case_match_guard_no_else | +| case.rb:95:1:99:3 | exit case_match_guard_no_else | case.rb:95:1:99:3 | exit case_match_guard_no_else | +| case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | +| case.rb:97:13:97:13 | x | case.rb:95:1:99:3 | enter case_match_guard_no_else | +| case.rb:97:13:97:13 | x | case.rb:97:13:97:13 | x | +| case.rb:97:25:97:25 | 6 | case.rb:95:1:99:3 | enter case_match_guard_no_else | +| case.rb:97:25:97:25 | 6 | case.rb:97:13:97:13 | x | +| case.rb:97:25:97:25 | 6 | case.rb:97:25:97:25 | 6 | +| cfg.html.erb:5:16:31:12 | enter cfg.html.erb | cfg.html.erb:5:16:31:12 | enter cfg.html.erb | +| cfg.html.erb:18:14:22:16 | if ... | cfg.html.erb:5:16:31:12 | enter cfg.html.erb | +| cfg.html.erb:18:14:22:16 | if ... | cfg.html.erb:18:14:22:16 | if ... | +| cfg.html.erb:18:14:22:16 | if ... | cfg.html.erb:19:19:19:32 | self | +| cfg.html.erb:18:14:22:16 | if ... | cfg.html.erb:21:19:21:32 | self | +| cfg.html.erb:19:19:19:32 | self | cfg.html.erb:19:19:19:32 | self | +| cfg.html.erb:21:19:21:32 | self | cfg.html.erb:21:19:21:32 | self | +| cfg.html.erb:29:24:31:10 | enter do ... end | cfg.html.erb:29:24:31:10 | enter do ... end | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:25:9:25:22 | enter { ... } | cfg.rb:25:9:25:22 | enter { ... } | +| cfg.rb:29:10:29:24 | enter { ... } | cfg.rb:29:10:29:24 | enter { ... } | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:42:15:42:24 | self | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:42:3:42:24 | [match] when ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:42:15:42:24 | self | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:42:15:42:24 | self | cfg.rb:42:15:42:24 | self | +| cfg.rb:43:3:43:31 | [match] when ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:43:3:43:31 | [no-match] when ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:43:8:43:8 | 2 | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:43:8:43:8 | 2 | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:43:11:43:11 | 3 | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:43:14:43:14 | 4 | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:43:21:43:31 | self | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:43:21:43:31 | self | cfg.rb:43:21:43:31 | self | +| cfg.rb:44:8:44:18 | self | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:44:8:44:18 | self | cfg.rb:44:8:44:18 | self | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:42:15:42:24 | self | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:48:20:48:29 | self | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:48:3:48:29 | [false] when ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:48:3:48:29 | [true] when ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:48:20:48:29 | self | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:48:20:48:29 | self | cfg.rb:48:20:48:29 | self | +| cfg.rb:49:3:49:37 | [false] when ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:49:3:49:37 | [true] when ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:49:8:49:8 | b | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:49:8:49:8 | b | cfg.rb:49:8:49:8 | b | +| cfg.rb:49:16:49:16 | b | cfg.rb:49:16:49:16 | b | +| cfg.rb:49:27:49:37 | self | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:49:27:49:37 | self | cfg.rb:49:27:49:37 | self | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:42:15:42:24 | self | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:48:20:48:29 | self | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:60:27:60:31 | hello | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:60:37:60:39 | bye | +| cfg.rb:60:27:60:31 | hello | cfg.rb:60:27:60:31 | hello | +| cfg.rb:60:37:60:39 | bye | cfg.rb:60:37:60:39 | bye | +| cfg.rb:63:3:66:5 | enter pattern | cfg.rb:63:3:66:5 | enter pattern | +| cfg.rb:69:3:71:5 | enter print | cfg.rb:69:3:71:5 | enter print | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:42:15:42:24 | self | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:48:20:48:29 | self | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:60:27:60:31 | hello | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:60:37:60:39 | bye | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:75:43:75:43 | x | +| cfg.rb:75:15:75:15 | 0 | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:75:17:75:43 | elsif ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:75:17:75:43 | elsif ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:75:17:75:43 | elsif ... | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:75:17:75:43 | elsif ... | cfg.rb:75:43:75:43 | x | +| cfg.rb:75:23:75:23 | x | cfg.rb:75:23:75:23 | x | +| cfg.rb:75:35:75:36 | 10 | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:75:43:75:43 | x | cfg.rb:75:43:75:43 | x | +| cfg.rb:90:1:93:3 | enter { ... } | cfg.rb:90:1:93:3 | enter { ... } | +| cfg.rb:90:1:93:3 | exit { ... } (normal) | cfg.rb:90:1:93:3 | enter { ... } | +| cfg.rb:90:1:93:3 | exit { ... } (normal) | cfg.rb:90:1:93:3 | exit { ... } (normal) | +| cfg.rb:90:1:93:3 | exit { ... } (normal) | cfg.rb:91:3:91:24 | if ... | +| cfg.rb:90:1:93:3 | exit { ... } (normal) | cfg.rb:91:17:91:20 | next | +| cfg.rb:90:5:90:5 | [false] ! ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:90:5:90:5 | [true] ! ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:42:15:42:24 | self | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:48:20:48:29 | self | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:60:27:60:31 | hello | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:60:37:60:39 | bye | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:75:43:75:43 | x | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:90:5:90:5 | x | +| cfg.rb:90:5:90:5 | x | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:90:5:90:5 | x | cfg.rb:90:5:90:5 | x | +| cfg.rb:91:3:91:24 | if ... | cfg.rb:91:3:91:24 | if ... | +| cfg.rb:91:17:91:20 | next | cfg.rb:91:17:91:20 | next | +| cfg.rb:101:1:104:3 | enter parameters | cfg.rb:101:1:104:3 | enter parameters | +| cfg.rb:101:24:101:25 | 42 | cfg.rb:101:24:101:25 | 42 | +| cfg.rb:101:28:101:30 | key | cfg.rb:101:1:104:3 | enter parameters | +| cfg.rb:101:28:101:30 | key | cfg.rb:101:24:101:25 | 42 | +| cfg.rb:101:28:101:30 | key | cfg.rb:101:28:101:30 | key | +| cfg.rb:113:1:113:9 | self | cfg.rb:113:1:113:9 | self | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:42:15:42:24 | self | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:48:20:48:29 | self | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:60:27:60:31 | hello | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:60:37:60:39 | bye | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:75:43:75:43 | x | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:90:5:90:5 | x | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:113:1:113:9 | self | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:120:8:120:28 | enter -> { ... } | cfg.rb:120:8:120:28 | enter -> { ... } | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:42:15:42:24 | self | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:48:20:48:29 | self | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:60:27:60:31 | hello | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:60:37:60:39 | bye | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:75:43:75:43 | x | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:90:5:90:5 | x | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:113:1:113:9 | self | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:136:12:136:29 | self | +| cfg.rb:136:12:136:29 | self | cfg.rb:136:12:136:29 | self | +| cfg.rb:145:3:148:5 | enter print | cfg.rb:145:3:148:5 | enter print | +| cfg.rb:152:1:154:3 | enter method | cfg.rb:152:1:154:3 | enter method | +| cfg.rb:156:1:156:28 | enter two_parameters | cfg.rb:156:1:156:28 | enter two_parameters | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:42:15:42:24 | self | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:48:20:48:29 | self | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:60:27:60:31 | hello | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:60:37:60:39 | bye | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:75:43:75:43 | x | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:90:5:90:5 | x | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:113:1:113:9 | self | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:136:12:136:29 | self | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:172:21:172:29 | self | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:172:36:172:45 | self | +| cfg.rb:172:21:172:29 | self | cfg.rb:172:21:172:29 | self | +| cfg.rb:172:36:172:45 | self | cfg.rb:172:36:172:45 | self | +| cfg.rb:174:1:174:9 | self | cfg.rb:174:1:174:9 | self | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:42:15:42:24 | self | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:48:20:48:29 | self | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:60:27:60:31 | hello | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:60:37:60:39 | bye | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:75:43:75:43 | x | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:90:5:90:5 | x | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:113:1:113:9 | self | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:136:12:136:29 | self | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:172:21:172:29 | self | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:172:36:172:45 | self | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:174:1:174:9 | self | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:42:15:42:24 | self | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:48:20:48:29 | self | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:60:27:60:31 | hello | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:60:37:60:39 | bye | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:75:43:75:43 | x | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:90:5:90:5 | x | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:113:1:113:9 | self | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:136:12:136:29 | self | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:172:21:172:29 | self | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:172:36:172:45 | self | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:174:1:174:9 | self | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:176:7:176:7 | x | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:176:17:176:17 | x | +| cfg.rb:176:7:176:7 | x | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:176:7:176:7 | x | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:176:7:176:7 | x | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:42:15:42:24 | self | +| cfg.rb:176:7:176:7 | x | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:176:7:176:7 | x | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:176:7:176:7 | x | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:176:7:176:7 | x | cfg.rb:43:21:43:31 | self | +| cfg.rb:176:7:176:7 | x | cfg.rb:44:8:44:18 | self | +| cfg.rb:176:7:176:7 | x | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:48:20:48:29 | self | +| cfg.rb:176:7:176:7 | x | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:49:8:49:8 | b | +| cfg.rb:176:7:176:7 | x | cfg.rb:49:16:49:16 | b | +| cfg.rb:176:7:176:7 | x | cfg.rb:49:27:49:37 | self | +| cfg.rb:176:7:176:7 | x | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:60:27:60:31 | hello | +| cfg.rb:176:7:176:7 | x | cfg.rb:60:37:60:39 | bye | +| cfg.rb:176:7:176:7 | x | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:176:7:176:7 | x | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:75:23:75:23 | x | +| cfg.rb:176:7:176:7 | x | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:176:7:176:7 | x | cfg.rb:75:43:75:43 | x | +| cfg.rb:176:7:176:7 | x | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:90:5:90:5 | x | +| cfg.rb:176:7:176:7 | x | cfg.rb:113:1:113:9 | self | +| cfg.rb:176:7:176:7 | x | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:136:12:136:29 | self | +| cfg.rb:176:7:176:7 | x | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:172:21:172:29 | self | +| cfg.rb:176:7:176:7 | x | cfg.rb:172:36:172:45 | self | +| cfg.rb:176:7:176:7 | x | cfg.rb:174:1:174:9 | self | +| cfg.rb:176:7:176:7 | x | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:176:7:176:7 | x | cfg.rb:176:7:176:7 | x | +| cfg.rb:176:7:176:7 | x | cfg.rb:176:17:176:17 | x | +| cfg.rb:176:17:176:17 | x | cfg.rb:176:17:176:17 | x | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:42:15:42:24 | self | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:48:20:48:29 | self | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:60:27:60:31 | hello | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:60:37:60:39 | bye | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:75:43:75:43 | x | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:90:5:90:5 | x | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:113:1:113:9 | self | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:136:12:136:29 | self | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:172:21:172:29 | self | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:172:36:172:45 | self | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:174:1:174:9 | self | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:176:7:176:7 | x | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:176:17:176:17 | x | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:179:2:179:13 | self | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:179:30:179:30 | i | +| cfg.rb:179:2:179:13 | self | cfg.rb:179:2:179:13 | self | +| cfg.rb:179:30:179:30 | i | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:179:30:179:30 | i | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:179:30:179:30 | i | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:42:15:42:24 | self | +| cfg.rb:179:30:179:30 | i | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:179:30:179:30 | i | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:179:30:179:30 | i | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:179:30:179:30 | i | cfg.rb:43:21:43:31 | self | +| cfg.rb:179:30:179:30 | i | cfg.rb:44:8:44:18 | self | +| cfg.rb:179:30:179:30 | i | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:48:20:48:29 | self | +| cfg.rb:179:30:179:30 | i | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:49:8:49:8 | b | +| cfg.rb:179:30:179:30 | i | cfg.rb:49:16:49:16 | b | +| cfg.rb:179:30:179:30 | i | cfg.rb:49:27:49:37 | self | +| cfg.rb:179:30:179:30 | i | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:60:27:60:31 | hello | +| cfg.rb:179:30:179:30 | i | cfg.rb:60:37:60:39 | bye | +| cfg.rb:179:30:179:30 | i | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:179:30:179:30 | i | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:75:23:75:23 | x | +| cfg.rb:179:30:179:30 | i | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:179:30:179:30 | i | cfg.rb:75:43:75:43 | x | +| cfg.rb:179:30:179:30 | i | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:90:5:90:5 | x | +| cfg.rb:179:30:179:30 | i | cfg.rb:113:1:113:9 | self | +| cfg.rb:179:30:179:30 | i | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:136:12:136:29 | self | +| cfg.rb:179:30:179:30 | i | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:172:21:172:29 | self | +| cfg.rb:179:30:179:30 | i | cfg.rb:172:36:172:45 | self | +| cfg.rb:179:30:179:30 | i | cfg.rb:174:1:174:9 | self | +| cfg.rb:179:30:179:30 | i | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:179:30:179:30 | i | cfg.rb:176:7:176:7 | x | +| cfg.rb:179:30:179:30 | i | cfg.rb:176:17:176:17 | x | +| cfg.rb:179:30:179:30 | i | cfg.rb:179:2:179:13 | self | +| cfg.rb:179:30:179:30 | i | cfg.rb:179:30:179:30 | i | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:42:15:42:24 | self | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:48:20:48:29 | self | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:60:27:60:31 | hello | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:60:37:60:39 | bye | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:75:43:75:43 | x | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:90:5:90:5 | x | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:113:1:113:9 | self | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:136:12:136:29 | self | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:172:21:172:29 | self | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:172:36:172:45 | self | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:174:1:174:9 | self | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:176:7:176:7 | x | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:176:17:176:17 | x | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:179:2:179:13 | self | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:179:30:179:30 | i | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:182:7:182:7 | x | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:184:18:184:21 | redo | +| cfg.rb:182:7:182:7 | x | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:182:7:182:7 | x | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:182:7:182:7 | x | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:42:15:42:24 | self | +| cfg.rb:182:7:182:7 | x | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:182:7:182:7 | x | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:182:7:182:7 | x | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:182:7:182:7 | x | cfg.rb:43:21:43:31 | self | +| cfg.rb:182:7:182:7 | x | cfg.rb:44:8:44:18 | self | +| cfg.rb:182:7:182:7 | x | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:48:20:48:29 | self | +| cfg.rb:182:7:182:7 | x | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:49:8:49:8 | b | +| cfg.rb:182:7:182:7 | x | cfg.rb:49:16:49:16 | b | +| cfg.rb:182:7:182:7 | x | cfg.rb:49:27:49:37 | self | +| cfg.rb:182:7:182:7 | x | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:60:27:60:31 | hello | +| cfg.rb:182:7:182:7 | x | cfg.rb:60:37:60:39 | bye | +| cfg.rb:182:7:182:7 | x | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:182:7:182:7 | x | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:75:23:75:23 | x | +| cfg.rb:182:7:182:7 | x | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:182:7:182:7 | x | cfg.rb:75:43:75:43 | x | +| cfg.rb:182:7:182:7 | x | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:90:5:90:5 | x | +| cfg.rb:182:7:182:7 | x | cfg.rb:113:1:113:9 | self | +| cfg.rb:182:7:182:7 | x | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:136:12:136:29 | self | +| cfg.rb:182:7:182:7 | x | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:172:21:172:29 | self | +| cfg.rb:182:7:182:7 | x | cfg.rb:172:36:172:45 | self | +| cfg.rb:182:7:182:7 | x | cfg.rb:174:1:174:9 | self | +| cfg.rb:182:7:182:7 | x | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:176:7:176:7 | x | +| cfg.rb:182:7:182:7 | x | cfg.rb:176:17:176:17 | x | +| cfg.rb:182:7:182:7 | x | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:179:2:179:13 | self | +| cfg.rb:182:7:182:7 | x | cfg.rb:179:30:179:30 | i | +| cfg.rb:182:7:182:7 | x | cfg.rb:182:7:182:7 | x | +| cfg.rb:182:7:182:7 | x | cfg.rb:183:3:183:3 | x | +| cfg.rb:182:7:182:7 | x | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:182:7:182:7 | x | cfg.rb:184:18:184:21 | redo | +| cfg.rb:183:3:183:3 | x | cfg.rb:183:3:183:3 | x | +| cfg.rb:183:3:183:3 | x | cfg.rb:184:18:184:21 | redo | +| cfg.rb:184:3:184:25 | if ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:184:3:184:25 | if ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:184:3:184:25 | if ... | cfg.rb:184:18:184:21 | redo | +| cfg.rb:184:18:184:21 | redo | cfg.rb:184:18:184:21 | redo | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:42:15:42:24 | self | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:48:20:48:29 | self | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:60:27:60:31 | hello | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:60:37:60:39 | bye | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:75:43:75:43 | x | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:90:5:90:5 | x | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:113:1:113:9 | self | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:136:12:136:29 | self | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:172:21:172:29 | self | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:172:36:172:45 | self | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:174:1:174:9 | self | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:176:7:176:7 | x | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:176:17:176:17 | x | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:179:2:179:13 | self | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:179:30:179:30 | i | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:182:7:182:7 | x | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:184:18:184:21 | redo | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:188:2:188:13 | self | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:188:30:188:30 | i | +| cfg.rb:188:2:188:13 | self | cfg.rb:188:2:188:13 | self | +| cfg.rb:188:30:188:30 | i | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:188:30:188:30 | i | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:188:30:188:30 | i | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:42:15:42:24 | self | +| cfg.rb:188:30:188:30 | i | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:188:30:188:30 | i | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:188:30:188:30 | i | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:188:30:188:30 | i | cfg.rb:43:21:43:31 | self | +| cfg.rb:188:30:188:30 | i | cfg.rb:44:8:44:18 | self | +| cfg.rb:188:30:188:30 | i | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:48:20:48:29 | self | +| cfg.rb:188:30:188:30 | i | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:49:8:49:8 | b | +| cfg.rb:188:30:188:30 | i | cfg.rb:49:16:49:16 | b | +| cfg.rb:188:30:188:30 | i | cfg.rb:49:27:49:37 | self | +| cfg.rb:188:30:188:30 | i | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:60:27:60:31 | hello | +| cfg.rb:188:30:188:30 | i | cfg.rb:60:37:60:39 | bye | +| cfg.rb:188:30:188:30 | i | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:188:30:188:30 | i | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:75:23:75:23 | x | +| cfg.rb:188:30:188:30 | i | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:188:30:188:30 | i | cfg.rb:75:43:75:43 | x | +| cfg.rb:188:30:188:30 | i | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:90:5:90:5 | x | +| cfg.rb:188:30:188:30 | i | cfg.rb:113:1:113:9 | self | +| cfg.rb:188:30:188:30 | i | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:136:12:136:29 | self | +| cfg.rb:188:30:188:30 | i | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:172:21:172:29 | self | +| cfg.rb:188:30:188:30 | i | cfg.rb:172:36:172:45 | self | +| cfg.rb:188:30:188:30 | i | cfg.rb:174:1:174:9 | self | +| cfg.rb:188:30:188:30 | i | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:176:7:176:7 | x | +| cfg.rb:188:30:188:30 | i | cfg.rb:176:17:176:17 | x | +| cfg.rb:188:30:188:30 | i | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:179:2:179:13 | self | +| cfg.rb:188:30:188:30 | i | cfg.rb:179:30:179:30 | i | +| cfg.rb:188:30:188:30 | i | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:182:7:182:7 | x | +| cfg.rb:188:30:188:30 | i | cfg.rb:183:3:183:3 | x | +| cfg.rb:188:30:188:30 | i | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:188:30:188:30 | i | cfg.rb:184:18:184:21 | redo | +| cfg.rb:188:30:188:30 | i | cfg.rb:188:2:188:13 | self | +| cfg.rb:188:30:188:30 | i | cfg.rb:188:30:188:30 | i | +| cfg.rb:190:1:192:3 | enter run_block | cfg.rb:190:1:192:3 | enter run_block | +| cfg.rb:194:11:194:23 | enter { ... } | cfg.rb:194:11:194:23 | enter { ... } | +| cfg.rb:196:1:198:3 | enter forward_param | cfg.rb:196:1:198:3 | enter forward_param | +| cfg.rb:200:9:200:32 | enter { ... } | cfg.rb:200:9:200:32 | enter { ... } | +| cfg.rb:202:9:202:35 | enter do ... end | cfg.rb:202:9:202:35 | enter do ... end | +| cfg.rb:205:1:205:3 | __synth__0__1 | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:205:1:205:3 | nil | cfg.rb:205:1:205:3 | nil | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:42:15:42:24 | self | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:43:21:43:31 | self | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:44:8:44:18 | self | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:48:20:48:29 | self | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:49:3:49:37 | [false] when ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:49:27:49:37 | self | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:60:27:60:31 | hello | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:60:37:60:39 | bye | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:75:15:75:15 | 0 | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:75:17:75:43 | elsif ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:75:35:75:36 | 10 | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:75:43:75:43 | x | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:90:5:90:5 | [false] ! ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:90:5:90:5 | x | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:113:1:113:9 | self | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:136:12:136:29 | self | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:172:21:172:29 | self | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:172:36:172:45 | self | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:174:1:174:9 | self | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:176:7:176:7 | x | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:176:17:176:17 | x | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:179:2:179:13 | self | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:179:30:179:30 | i | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:182:7:182:7 | x | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:184:3:184:25 | if ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:184:18:184:21 | redo | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:188:2:188:13 | self | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:188:30:188:30 | i | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:205:1:205:3 | __synth__0__1 | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:205:1:205:3 | nil | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:205:4:205:5 | if ... | +| cfg.rb:205:15:205:23 | enter { ... } | cfg.rb:205:15:205:23 | enter { ... } | +| cfg.rb:207:1:211:3 | enter filter_nil | cfg.rb:207:1:211:3 | enter filter_nil | +| cfg.rb:208:15:210:5 | enter do ... end | cfg.rb:208:15:210:5 | enter do ... end | +| cfg.rb:213:14:216:3 | enter do ... end | cfg.rb:213:14:216:3 | enter do ... end | +| constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | +| constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | +| constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | +| constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | constant_compound_assign.rb:5:22:5:24 | 123 | +| constant_compound_assign.rb:5:22:5:24 | 123 | constant_compound_assign.rb:5:22:5:24 | 123 | +| constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | +| constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | +| constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | constant_compound_assign.rb:5:22:5:24 | 123 | +| constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | +| constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | constant_compound_assign.rb:14:18:14:20 | 123 | +| constant_compound_assign.rb:14:18:14:20 | 123 | constant_compound_assign.rb:14:18:14:20 | 123 | +| constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | +| constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | +| constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | constant_compound_assign.rb:5:22:5:24 | 123 | +| constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | +| constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | constant_compound_assign.rb:14:18:14:20 | 123 | +| constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | +| constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | constant_compound_assign.rb:19:21:19:23 | 123 | +| constant_compound_assign.rb:19:21:19:23 | 123 | constant_compound_assign.rb:19:21:19:23 | 123 | +| desugar.rb:1:1:3:3 | enter m1 | desugar.rb:1:1:3:3 | enter m1 | +| desugar.rb:1:1:38:17 | enter desugar.rb | desugar.rb:1:1:38:17 | enter desugar.rb | +| desugar.rb:5:1:7:3 | enter m2 | desugar.rb:5:1:7:3 | enter m2 | +| desugar.rb:9:1:11:3 | enter m3 | desugar.rb:9:1:11:3 | enter m3 | +| desugar.rb:13:1:15:3 | enter m4 | desugar.rb:13:1:15:3 | enter m4 | +| desugar.rb:17:1:19:3 | enter m5 | desugar.rb:17:1:19:3 | enter m5 | +| desugar.rb:21:1:23:3 | enter m6 | desugar.rb:21:1:23:3 | enter m6 | +| desugar.rb:25:1:27:3 | enter m7 | desugar.rb:25:1:27:3 | enter m7 | +| exit.rb:1:1:6:3 | enter m1 | exit.rb:1:1:6:3 | enter m1 | +| exit.rb:1:1:6:3 | exit m1 | exit.rb:1:1:6:3 | exit m1 | +| exit.rb:1:1:13:4 | enter exit.rb | exit.rb:1:1:13:4 | enter exit.rb | +| exit.rb:2:3:4:5 | if ... | exit.rb:1:1:6:3 | enter m1 | +| exit.rb:2:3:4:5 | if ... | exit.rb:2:3:4:5 | if ... | +| exit.rb:3:5:3:10 | self | exit.rb:3:5:3:10 | self | +| exit.rb:8:1:13:3 | enter m2 | exit.rb:8:1:13:3 | enter m2 | +| exit.rb:8:1:13:3 | exit m2 | exit.rb:8:1:13:3 | exit m2 | +| exit.rb:9:3:11:5 | if ... | exit.rb:8:1:13:3 | enter m2 | +| exit.rb:9:3:11:5 | if ... | exit.rb:9:3:11:5 | if ... | +| exit.rb:10:5:10:18 | self | exit.rb:10:5:10:18 | self | +| heredoc.rb:1:1:7:3 | enter double_heredoc | heredoc.rb:1:1:7:3 | enter double_heredoc | +| heredoc.rb:1:1:7:4 | enter heredoc.rb | heredoc.rb:1:1:7:4 | enter heredoc.rb | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:1:1:9:3 | enter m1 | +| ifs.rb:1:1:58:4 | enter ifs.rb | ifs.rb:1:1:58:4 | enter ifs.rb | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:1:1:9:3 | enter m1 | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:2:3:8:5 | if ... | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:3:5:3:30 | self | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:4:3:7:35 | elsif ... | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:4:9:4:9 | x | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:4:9:4:24 | [false] ... and ... | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:4:9:4:24 | [true] ... and ... | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:4:9:4:38 | [false] ... and ... | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:4:9:4:38 | [true] ... and ... | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:4:20:4:20 | x | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:4:30:4:38 | [false] ! ... | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:4:30:4:38 | [true] ! ... | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:4:31:4:38 | [false] ( ... ) | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:4:31:4:38 | [true] ( ... ) | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:4:32:4:32 | x | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:5:5:5:17 | self | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:7:5:7:35 | self | +| ifs.rb:3:5:3:30 | self | ifs.rb:3:5:3:30 | self | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:4:3:7:35 | elsif ... | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:4:9:4:9 | x | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:4:9:4:24 | [false] ... and ... | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:4:9:4:24 | [true] ... and ... | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:4:9:4:38 | [false] ... and ... | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:4:9:4:38 | [true] ... and ... | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:4:20:4:20 | x | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:4:30:4:38 | [false] ! ... | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:4:30:4:38 | [true] ! ... | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:4:31:4:38 | [false] ( ... ) | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:4:31:4:38 | [true] ( ... ) | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:4:32:4:32 | x | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:5:5:5:17 | self | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:7:5:7:35 | self | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:9:4:9 | x | +| ifs.rb:4:9:4:24 | [false] ... and ... | ifs.rb:4:9:4:24 | [false] ... and ... | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:4:9:4:24 | [true] ... and ... | +| ifs.rb:4:9:4:38 | [false] ... and ... | ifs.rb:4:9:4:24 | [false] ... and ... | +| ifs.rb:4:9:4:38 | [false] ... and ... | ifs.rb:4:9:4:38 | [false] ... and ... | +| ifs.rb:4:9:4:38 | [false] ... and ... | ifs.rb:4:30:4:38 | [false] ! ... | +| ifs.rb:4:9:4:38 | [false] ... and ... | ifs.rb:4:31:4:38 | [true] ( ... ) | +| ifs.rb:4:9:4:38 | [true] ... and ... | ifs.rb:4:9:4:38 | [true] ... and ... | +| ifs.rb:4:9:4:38 | [true] ... and ... | ifs.rb:4:30:4:38 | [true] ! ... | +| ifs.rb:4:9:4:38 | [true] ... and ... | ifs.rb:4:31:4:38 | [false] ( ... ) | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:20:4:20 | x | +| ifs.rb:4:30:4:38 | [false] ! ... | ifs.rb:4:30:4:38 | [false] ! ... | +| ifs.rb:4:30:4:38 | [false] ! ... | ifs.rb:4:31:4:38 | [true] ( ... ) | +| ifs.rb:4:30:4:38 | [true] ! ... | ifs.rb:4:30:4:38 | [true] ! ... | +| ifs.rb:4:30:4:38 | [true] ! ... | ifs.rb:4:31:4:38 | [false] ( ... ) | +| ifs.rb:4:31:4:38 | [false] ( ... ) | ifs.rb:4:31:4:38 | [false] ( ... ) | +| ifs.rb:4:31:4:38 | [true] ( ... ) | ifs.rb:4:31:4:38 | [true] ( ... ) | +| ifs.rb:4:32:4:32 | x | ifs.rb:4:9:4:24 | [true] ... and ... | +| ifs.rb:4:32:4:32 | x | ifs.rb:4:32:4:32 | x | +| ifs.rb:5:5:5:17 | self | ifs.rb:4:9:4:38 | [true] ... and ... | +| ifs.rb:5:5:5:17 | self | ifs.rb:4:30:4:38 | [true] ! ... | +| ifs.rb:5:5:5:17 | self | ifs.rb:4:31:4:38 | [false] ( ... ) | +| ifs.rb:5:5:5:17 | self | ifs.rb:5:5:5:17 | self | +| ifs.rb:7:5:7:35 | self | ifs.rb:4:9:4:24 | [false] ... and ... | +| ifs.rb:7:5:7:35 | self | ifs.rb:4:9:4:38 | [false] ... and ... | +| ifs.rb:7:5:7:35 | self | ifs.rb:4:30:4:38 | [false] ! ... | +| ifs.rb:7:5:7:35 | self | ifs.rb:4:31:4:38 | [true] ( ... ) | +| ifs.rb:7:5:7:35 | self | ifs.rb:7:5:7:35 | self | +| ifs.rb:11:1:16:3 | enter m2 | ifs.rb:11:1:16:3 | enter m2 | +| ifs.rb:11:1:16:3 | exit m2 (normal) | ifs.rb:11:1:16:3 | enter m2 | +| ifs.rb:11:1:16:3 | exit m2 (normal) | ifs.rb:11:1:16:3 | exit m2 (normal) | +| ifs.rb:11:1:16:3 | exit m2 (normal) | ifs.rb:12:3:14:5 | if ... | +| ifs.rb:11:1:16:3 | exit m2 (normal) | ifs.rb:13:12:13:12 | 0 | +| ifs.rb:12:3:14:5 | if ... | ifs.rb:12:3:14:5 | if ... | +| ifs.rb:13:12:13:12 | 0 | ifs.rb:13:12:13:12 | 0 | +| ifs.rb:18:1:26:3 | enter m3 | ifs.rb:18:1:26:3 | enter m3 | +| ifs.rb:19:3:24:5 | if ... | ifs.rb:18:1:26:3 | enter m3 | +| ifs.rb:19:3:24:5 | if ... | ifs.rb:19:3:24:5 | if ... | +| ifs.rb:19:3:24:5 | if ... | ifs.rb:20:5:20:5 | x | +| ifs.rb:19:3:24:5 | if ... | ifs.rb:21:5:23:7 | if ... | +| ifs.rb:19:3:24:5 | if ... | ifs.rb:22:7:22:7 | x | +| ifs.rb:20:5:20:5 | x | ifs.rb:20:5:20:5 | x | +| ifs.rb:21:5:23:7 | if ... | ifs.rb:20:5:20:5 | x | +| ifs.rb:21:5:23:7 | if ... | ifs.rb:21:5:23:7 | if ... | +| ifs.rb:21:5:23:7 | if ... | ifs.rb:22:7:22:7 | x | +| ifs.rb:22:7:22:7 | x | ifs.rb:22:7:22:7 | x | +| ifs.rb:28:1:30:3 | enter m4 | ifs.rb:28:1:30:3 | enter m4 | +| ifs.rb:29:10:29:23 | [false] ( ... ) | ifs.rb:29:10:29:23 | [false] ( ... ) | +| ifs.rb:29:10:29:23 | [false] ( ... ) | ifs.rb:29:11:29:22 | [false] ... ? ... : ... | +| ifs.rb:29:10:29:23 | [true] ( ... ) | ifs.rb:29:10:29:23 | [true] ( ... ) | +| ifs.rb:29:10:29:23 | [true] ( ... ) | ifs.rb:29:11:29:22 | [true] ... ? ... : ... | +| ifs.rb:29:10:29:51 | ... ? ... : ... | ifs.rb:28:1:30:3 | enter m4 | +| ifs.rb:29:10:29:51 | ... ? ... : ... | ifs.rb:29:10:29:23 | [false] ( ... ) | +| ifs.rb:29:10:29:51 | ... ? ... : ... | ifs.rb:29:10:29:23 | [true] ( ... ) | +| ifs.rb:29:10:29:51 | ... ? ... : ... | ifs.rb:29:10:29:51 | ... ? ... : ... | +| ifs.rb:29:10:29:51 | ... ? ... : ... | ifs.rb:29:11:29:22 | [false] ... ? ... : ... | +| ifs.rb:29:10:29:51 | ... ? ... : ... | ifs.rb:29:11:29:22 | [true] ... ? ... : ... | +| ifs.rb:29:10:29:51 | ... ? ... : ... | ifs.rb:29:16:29:17 | b2 | +| ifs.rb:29:10:29:51 | ... ? ... : ... | ifs.rb:29:21:29:22 | b3 | +| ifs.rb:29:10:29:51 | ... ? ... : ... | ifs.rb:29:28:29:35 | b2 \|\| b3 | +| ifs.rb:29:10:29:51 | ... ? ... : ... | ifs.rb:29:41:29:50 | !b2 \|\| !b3 | +| ifs.rb:29:11:29:22 | [false] ... ? ... : ... | ifs.rb:29:11:29:22 | [false] ... ? ... : ... | +| ifs.rb:29:11:29:22 | [true] ... ? ... : ... | ifs.rb:29:11:29:22 | [true] ... ? ... : ... | +| ifs.rb:29:16:29:17 | b2 | ifs.rb:29:16:29:17 | b2 | +| ifs.rb:29:21:29:22 | b3 | ifs.rb:29:21:29:22 | b3 | +| ifs.rb:29:28:29:35 | b2 \|\| b3 | ifs.rb:29:10:29:23 | [true] ( ... ) | +| ifs.rb:29:28:29:35 | b2 \|\| b3 | ifs.rb:29:11:29:22 | [true] ... ? ... : ... | +| ifs.rb:29:28:29:35 | b2 \|\| b3 | ifs.rb:29:28:29:35 | b2 \|\| b3 | +| ifs.rb:29:41:29:50 | !b2 \|\| !b3 | ifs.rb:29:10:29:23 | [false] ( ... ) | +| ifs.rb:29:41:29:50 | !b2 \|\| !b3 | ifs.rb:29:11:29:22 | [false] ... ? ... : ... | +| ifs.rb:29:41:29:50 | !b2 \|\| !b3 | ifs.rb:29:41:29:50 | !b2 \|\| !b3 | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:32:1:34:3 | enter m5 | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:32:1:34:3 | enter m5 | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:3:33:100 | if ... | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:6:33:49 | [false] ( ... ) | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:6:33:49 | [true] ( ... ) | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:7:33:48 | [false] if ... | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:7:33:48 | [true] if ... | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:13:33:19 | [false] then ... | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:13:33:19 | [true] then ... | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:18:33:19 | b2 | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:21:33:44 | [false] elsif ... | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:21:33:44 | [true] elsif ... | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:27:33:28 | b3 | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:30:33:36 | [false] then ... | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:30:33:36 | [true] then ... | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:35:33:36 | b4 | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:38:33:44 | [false] else ... | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:38:33:44 | [true] else ... | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:43:33:44 | b5 | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | +| ifs.rb:33:6:33:49 | [false] ( ... ) | ifs.rb:33:6:33:49 | [false] ( ... ) | +| ifs.rb:33:6:33:49 | [false] ( ... ) | ifs.rb:33:7:33:48 | [false] if ... | +| ifs.rb:33:6:33:49 | [false] ( ... ) | ifs.rb:33:13:33:19 | [false] then ... | +| ifs.rb:33:6:33:49 | [false] ( ... ) | ifs.rb:33:21:33:44 | [false] elsif ... | +| ifs.rb:33:6:33:49 | [false] ( ... ) | ifs.rb:33:30:33:36 | [false] then ... | +| ifs.rb:33:6:33:49 | [false] ( ... ) | ifs.rb:33:38:33:44 | [false] else ... | +| ifs.rb:33:6:33:49 | [true] ( ... ) | ifs.rb:33:6:33:49 | [true] ( ... ) | +| ifs.rb:33:6:33:49 | [true] ( ... ) | ifs.rb:33:7:33:48 | [true] if ... | +| ifs.rb:33:6:33:49 | [true] ( ... ) | ifs.rb:33:13:33:19 | [true] then ... | +| ifs.rb:33:6:33:49 | [true] ( ... ) | ifs.rb:33:21:33:44 | [true] elsif ... | +| ifs.rb:33:6:33:49 | [true] ( ... ) | ifs.rb:33:30:33:36 | [true] then ... | +| ifs.rb:33:6:33:49 | [true] ( ... ) | ifs.rb:33:38:33:44 | [true] else ... | +| ifs.rb:33:7:33:48 | [false] if ... | ifs.rb:33:7:33:48 | [false] if ... | +| ifs.rb:33:7:33:48 | [false] if ... | ifs.rb:33:13:33:19 | [false] then ... | +| ifs.rb:33:7:33:48 | [false] if ... | ifs.rb:33:21:33:44 | [false] elsif ... | +| ifs.rb:33:7:33:48 | [false] if ... | ifs.rb:33:30:33:36 | [false] then ... | +| ifs.rb:33:7:33:48 | [false] if ... | ifs.rb:33:38:33:44 | [false] else ... | +| ifs.rb:33:7:33:48 | [true] if ... | ifs.rb:33:7:33:48 | [true] if ... | +| ifs.rb:33:7:33:48 | [true] if ... | ifs.rb:33:13:33:19 | [true] then ... | +| ifs.rb:33:7:33:48 | [true] if ... | ifs.rb:33:21:33:44 | [true] elsif ... | +| ifs.rb:33:7:33:48 | [true] if ... | ifs.rb:33:30:33:36 | [true] then ... | +| ifs.rb:33:7:33:48 | [true] if ... | ifs.rb:33:38:33:44 | [true] else ... | +| ifs.rb:33:13:33:19 | [false] then ... | ifs.rb:33:13:33:19 | [false] then ... | +| ifs.rb:33:13:33:19 | [true] then ... | ifs.rb:33:13:33:19 | [true] then ... | +| ifs.rb:33:18:33:19 | b2 | ifs.rb:33:18:33:19 | b2 | +| ifs.rb:33:21:33:44 | [false] elsif ... | ifs.rb:33:21:33:44 | [false] elsif ... | +| ifs.rb:33:21:33:44 | [false] elsif ... | ifs.rb:33:30:33:36 | [false] then ... | +| ifs.rb:33:21:33:44 | [false] elsif ... | ifs.rb:33:38:33:44 | [false] else ... | +| ifs.rb:33:21:33:44 | [true] elsif ... | ifs.rb:33:21:33:44 | [true] elsif ... | +| ifs.rb:33:21:33:44 | [true] elsif ... | ifs.rb:33:30:33:36 | [true] then ... | +| ifs.rb:33:21:33:44 | [true] elsif ... | ifs.rb:33:38:33:44 | [true] else ... | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:27:33:28 | b3 | +| ifs.rb:33:30:33:36 | [false] then ... | ifs.rb:33:30:33:36 | [false] then ... | +| ifs.rb:33:30:33:36 | [true] then ... | ifs.rb:33:30:33:36 | [true] then ... | +| ifs.rb:33:35:33:36 | b4 | ifs.rb:33:35:33:36 | b4 | +| ifs.rb:33:38:33:44 | [false] else ... | ifs.rb:33:38:33:44 | [false] else ... | +| ifs.rb:33:38:33:44 | [true] else ... | ifs.rb:33:38:33:44 | [true] else ... | +| ifs.rb:33:43:33:44 | b5 | ifs.rb:33:43:33:44 | b5 | +| ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | ifs.rb:33:6:33:49 | [true] ( ... ) | +| ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | ifs.rb:33:7:33:48 | [true] if ... | +| ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | ifs.rb:33:13:33:19 | [true] then ... | +| ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | ifs.rb:33:21:33:44 | [true] elsif ... | +| ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | ifs.rb:33:30:33:36 | [true] then ... | +| ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | ifs.rb:33:38:33:44 | [true] else ... | +| ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | +| ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | ifs.rb:33:6:33:49 | [false] ( ... ) | +| ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | ifs.rb:33:7:33:48 | [false] if ... | +| ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | ifs.rb:33:13:33:19 | [false] then ... | +| ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | ifs.rb:33:21:33:44 | [false] elsif ... | +| ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | ifs.rb:33:30:33:36 | [false] then ... | +| ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | ifs.rb:33:38:33:44 | [false] else ... | +| ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | +| ifs.rb:36:1:38:3 | conditional_method_def | ifs.rb:36:1:38:3 | conditional_method_def | +| ifs.rb:36:1:38:3 | enter conditional_method_def | ifs.rb:36:1:38:3 | enter conditional_method_def | +| ifs.rb:36:1:38:17 | ... unless ... | ifs.rb:1:1:58:4 | enter ifs.rb | +| ifs.rb:36:1:38:17 | ... unless ... | ifs.rb:36:1:38:3 | conditional_method_def | +| ifs.rb:36:1:38:17 | ... unless ... | ifs.rb:36:1:38:17 | ... unless ... | +| ifs.rb:40:1:44:3 | enter constant_condition | ifs.rb:40:1:44:3 | enter constant_condition | +| ifs.rb:41:3:43:5 | if ... | ifs.rb:40:1:44:3 | enter constant_condition | +| ifs.rb:41:3:43:5 | if ... | ifs.rb:41:3:43:5 | if ... | +| ifs.rb:41:3:43:5 | if ... | ifs.rb:41:6:41:10 | [false] ! ... | +| ifs.rb:41:6:41:10 | [false] ! ... | ifs.rb:40:1:44:3 | enter constant_condition | +| ifs.rb:41:6:41:10 | [false] ! ... | ifs.rb:41:6:41:10 | [false] ! ... | +| ifs.rb:46:1:52:3 | enter empty_else | ifs.rb:46:1:52:3 | enter empty_else | +| ifs.rb:47:3:50:5 | if ... | ifs.rb:46:1:52:3 | enter empty_else | +| ifs.rb:47:3:50:5 | if ... | ifs.rb:47:3:50:5 | if ... | +| ifs.rb:47:3:50:5 | if ... | ifs.rb:48:5:48:15 | self | +| ifs.rb:47:3:50:5 | if ... | ifs.rb:49:3:49:6 | else ... | +| ifs.rb:48:5:48:15 | self | ifs.rb:48:5:48:15 | self | +| ifs.rb:49:3:49:6 | else ... | ifs.rb:49:3:49:6 | else ... | +| ifs.rb:54:1:58:3 | enter disjunct | ifs.rb:54:1:58:3 | enter disjunct | +| ifs.rb:55:3:57:5 | if ... | ifs.rb:54:1:58:3 | enter disjunct | +| ifs.rb:55:3:57:5 | if ... | ifs.rb:55:3:57:5 | if ... | +| ifs.rb:55:3:57:5 | if ... | ifs.rb:55:6:55:15 | [false] ( ... ) | +| ifs.rb:55:3:57:5 | if ... | ifs.rb:55:6:55:15 | [true] ( ... ) | +| ifs.rb:55:3:57:5 | if ... | ifs.rb:55:7:55:14 | [false] ... \|\| ... | +| ifs.rb:55:3:57:5 | if ... | ifs.rb:55:7:55:14 | [true] ... \|\| ... | +| ifs.rb:55:3:57:5 | if ... | ifs.rb:55:13:55:14 | b2 | +| ifs.rb:55:3:57:5 | if ... | ifs.rb:56:5:56:19 | self | +| ifs.rb:55:6:55:15 | [false] ( ... ) | ifs.rb:55:6:55:15 | [false] ( ... ) | +| ifs.rb:55:6:55:15 | [false] ( ... ) | ifs.rb:55:7:55:14 | [false] ... \|\| ... | +| ifs.rb:55:6:55:15 | [true] ( ... ) | ifs.rb:55:6:55:15 | [true] ( ... ) | +| ifs.rb:55:6:55:15 | [true] ( ... ) | ifs.rb:55:7:55:14 | [true] ... \|\| ... | +| ifs.rb:55:7:55:14 | [false] ... \|\| ... | ifs.rb:55:7:55:14 | [false] ... \|\| ... | +| ifs.rb:55:7:55:14 | [true] ... \|\| ... | ifs.rb:55:7:55:14 | [true] ... \|\| ... | +| ifs.rb:55:13:55:14 | b2 | ifs.rb:55:13:55:14 | b2 | +| ifs.rb:56:5:56:19 | self | ifs.rb:55:6:55:15 | [true] ( ... ) | +| ifs.rb:56:5:56:19 | self | ifs.rb:55:7:55:14 | [true] ... \|\| ... | +| ifs.rb:56:5:56:19 | self | ifs.rb:56:5:56:19 | self | +| loops.rb:1:1:6:3 | enter m1 | loops.rb:1:1:6:3 | enter m1 | +| loops.rb:1:1:33:4 | enter loops.rb | loops.rb:1:1:33:4 | enter loops.rb | +| loops.rb:2:3:5:5 | while ... | loops.rb:1:1:6:3 | enter m1 | +| loops.rb:2:3:5:5 | while ... | loops.rb:2:3:5:5 | while ... | +| loops.rb:2:3:5:5 | while ... | loops.rb:2:9:2:9 | x | +| loops.rb:2:3:5:5 | while ... | loops.rb:3:5:3:10 | self | +| loops.rb:2:9:2:9 | x | loops.rb:1:1:6:3 | enter m1 | +| loops.rb:2:9:2:9 | x | loops.rb:2:9:2:9 | x | +| loops.rb:2:9:2:9 | x | loops.rb:3:5:3:10 | self | +| loops.rb:3:5:3:10 | self | loops.rb:3:5:3:10 | self | +| loops.rb:8:1:22:3 | enter m2 | loops.rb:8:1:22:3 | enter m2 | +| loops.rb:9:3:20:5 | while ... | loops.rb:8:1:22:3 | enter m2 | +| loops.rb:9:3:20:5 | while ... | loops.rb:9:3:20:5 | while ... | +| loops.rb:9:3:20:5 | while ... | loops.rb:9:9:9:9 | x | +| loops.rb:9:3:20:5 | while ... | loops.rb:10:5:10:10 | self | +| loops.rb:9:3:20:5 | while ... | loops.rb:13:7:13:11 | break | +| loops.rb:9:3:20:5 | while ... | loops.rb:14:11:14:11 | x | +| loops.rb:9:3:20:5 | while ... | loops.rb:15:7:15:10 | next | +| loops.rb:9:3:20:5 | while ... | loops.rb:16:5:17:10 | elsif ... | +| loops.rb:9:3:20:5 | while ... | loops.rb:16:11:16:11 | x | +| loops.rb:9:3:20:5 | while ... | loops.rb:17:7:17:10 | redo | +| loops.rb:9:9:9:9 | x | loops.rb:8:1:22:3 | enter m2 | +| loops.rb:9:9:9:9 | x | loops.rb:9:9:9:9 | x | +| loops.rb:9:9:9:9 | x | loops.rb:15:7:15:10 | next | +| loops.rb:9:9:9:9 | x | loops.rb:16:5:17:10 | elsif ... | +| loops.rb:10:5:10:10 | self | loops.rb:10:5:10:10 | self | +| loops.rb:10:5:10:10 | self | loops.rb:17:7:17:10 | redo | +| loops.rb:13:7:13:11 | break | loops.rb:13:7:13:11 | break | +| loops.rb:14:11:14:11 | x | loops.rb:14:11:14:11 | x | +| loops.rb:15:7:15:10 | next | loops.rb:15:7:15:10 | next | +| loops.rb:16:5:17:10 | elsif ... | loops.rb:16:5:17:10 | elsif ... | +| loops.rb:16:11:16:11 | x | loops.rb:16:11:16:11 | x | +| loops.rb:17:7:17:10 | redo | loops.rb:17:7:17:10 | redo | +| loops.rb:24:1:28:3 | enter m3 | loops.rb:24:1:28:3 | enter m3 | +| loops.rb:25:16:27:5 | enter do ... end | loops.rb:25:16:27:5 | enter do ... end | +| loops.rb:30:1:33:3 | enter m4 | loops.rb:30:1:33:3 | enter m4 | +| loops.rb:31:3:32:5 | while ... | loops.rb:30:1:33:3 | enter m4 | +| loops.rb:31:3:32:5 | while ... | loops.rb:31:3:32:5 | while ... | +| loops.rb:31:3:32:5 | while ... | loops.rb:31:9:31:9 | x | +| loops.rb:31:3:32:5 | while ... | loops.rb:31:15:32:5 | do ... | +| loops.rb:31:9:31:9 | x | loops.rb:30:1:33:3 | enter m4 | +| loops.rb:31:9:31:9 | x | loops.rb:31:9:31:9 | x | +| loops.rb:31:9:31:9 | x | loops.rb:31:15:32:5 | do ... | +| loops.rb:31:15:32:5 | do ... | loops.rb:31:15:32:5 | do ... | +| raise.rb:1:1:182:4 | enter raise.rb | raise.rb:1:1:182:4 | enter raise.rb | +| raise.rb:7:1:12:3 | enter m1 | raise.rb:7:1:12:3 | enter m1 | +| raise.rb:7:1:12:3 | exit m1 | raise.rb:7:1:12:3 | exit m1 | +| raise.rb:8:3:10:5 | if ... | raise.rb:7:1:12:3 | enter m1 | +| raise.rb:8:3:10:5 | if ... | raise.rb:8:3:10:5 | if ... | +| raise.rb:9:5:9:17 | self | raise.rb:9:5:9:17 | self | +| raise.rb:14:1:23:3 | enter m2 | raise.rb:14:1:23:3 | enter m2 | +| raise.rb:14:1:23:3 | exit m2 | raise.rb:14:1:23:3 | exit m2 | +| raise.rb:14:1:23:3 | exit m2 (abnormal) | raise.rb:14:1:23:3 | exit m2 (abnormal) | +| raise.rb:16:5:18:7 | if ... | raise.rb:16:5:18:7 | if ... | +| raise.rb:17:7:17:22 | self | raise.rb:17:7:17:22 | self | +| raise.rb:20:5:20:18 | self | raise.rb:17:7:17:22 | self | +| raise.rb:20:5:20:18 | self | raise.rb:20:5:20:18 | self | +| raise.rb:22:3:22:15 | self | raise.rb:14:1:23:3 | enter m2 | +| raise.rb:22:3:22:15 | self | raise.rb:16:5:18:7 | if ... | +| raise.rb:22:3:22:15 | self | raise.rb:17:7:17:22 | self | +| raise.rb:22:3:22:15 | self | raise.rb:20:5:20:18 | self | +| raise.rb:22:3:22:15 | self | raise.rb:22:3:22:15 | self | +| raise.rb:25:1:34:3 | enter m3 | raise.rb:25:1:34:3 | enter m3 | +| raise.rb:27:5:29:7 | if ... | raise.rb:27:5:29:7 | if ... | +| raise.rb:28:7:28:22 | self | raise.rb:28:7:28:22 | self | +| raise.rb:33:3:33:15 | self | raise.rb:25:1:34:3 | enter m3 | +| raise.rb:33:3:33:15 | self | raise.rb:27:5:29:7 | if ... | +| raise.rb:33:3:33:15 | self | raise.rb:28:7:28:22 | self | +| raise.rb:33:3:33:15 | self | raise.rb:33:3:33:15 | self | +| raise.rb:36:1:45:3 | enter m4 | raise.rb:36:1:45:3 | enter m4 | +| raise.rb:38:5:40:7 | if ... | raise.rb:38:5:40:7 | if ... | +| raise.rb:39:7:39:22 | self | raise.rb:39:7:39:22 | self | +| raise.rb:44:3:44:15 | self | raise.rb:36:1:45:3 | enter m4 | +| raise.rb:44:3:44:15 | self | raise.rb:38:5:40:7 | if ... | +| raise.rb:44:3:44:15 | self | raise.rb:39:7:39:22 | self | +| raise.rb:44:3:44:15 | self | raise.rb:44:3:44:15 | self | +| raise.rb:47:1:55:3 | enter m5 | raise.rb:47:1:55:3 | enter m5 | +| raise.rb:49:5:51:7 | if ... | raise.rb:49:5:51:7 | if ... | +| raise.rb:50:7:50:22 | self | raise.rb:50:7:50:22 | self | +| raise.rb:54:3:54:15 | self | raise.rb:47:1:55:3 | enter m5 | +| raise.rb:54:3:54:15 | self | raise.rb:49:5:51:7 | if ... | +| raise.rb:54:3:54:15 | self | raise.rb:50:7:50:22 | self | +| raise.rb:54:3:54:15 | self | raise.rb:54:3:54:15 | self | +| raise.rb:57:1:66:3 | enter m6 | raise.rb:57:1:66:3 | enter m6 | +| raise.rb:57:1:66:3 | exit m6 | raise.rb:57:1:66:3 | exit m6 | +| raise.rb:57:1:66:3 | exit m6 (abnormal) | raise.rb:57:1:66:3 | exit m6 (abnormal) | +| raise.rb:59:5:61:7 | if ... | raise.rb:59:5:61:7 | if ... | +| raise.rb:60:7:60:22 | self | raise.rb:60:7:60:22 | self | +| raise.rb:62:22:62:31 | ExceptionB | raise.rb:62:22:62:31 | ExceptionB | +| raise.rb:62:36:62:36 | e | raise.rb:60:7:60:22 | self | +| raise.rb:62:36:62:36 | e | raise.rb:62:22:62:31 | ExceptionB | +| raise.rb:62:36:62:36 | e | raise.rb:62:36:62:36 | e | +| raise.rb:65:3:65:15 | self | raise.rb:57:1:66:3 | enter m6 | +| raise.rb:65:3:65:15 | self | raise.rb:59:5:61:7 | if ... | +| raise.rb:65:3:65:15 | self | raise.rb:60:7:60:22 | self | +| raise.rb:65:3:65:15 | self | raise.rb:62:22:62:31 | ExceptionB | +| raise.rb:65:3:65:15 | self | raise.rb:62:36:62:36 | e | +| raise.rb:65:3:65:15 | self | raise.rb:65:3:65:15 | self | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:68:1:77:3 | enter m7 | +| raise.rb:68:1:77:3 | exit m7 | raise.rb:68:1:77:3 | exit m7 | +| raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:68:1:77:3 | enter m7 | +| raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:68:1:77:3 | exit m7 (normal) | +| raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:71:3:72:18 | elsif ... | +| raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:71:9:71:9 | x | +| raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:72:13:72:17 | x < 0 | +| raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:76:3:76:15 | self | +| raise.rb:70:5:70:17 | self | raise.rb:70:5:70:17 | self | +| raise.rb:71:3:72:18 | elsif ... | raise.rb:71:3:72:18 | elsif ... | +| raise.rb:71:9:71:9 | x | raise.rb:68:1:77:3 | enter m7 | +| raise.rb:71:9:71:9 | x | raise.rb:71:9:71:9 | x | +| raise.rb:72:13:72:17 | x < 0 | raise.rb:72:13:72:17 | x < 0 | +| raise.rb:76:3:76:15 | [ensure: raise] self | raise.rb:76:3:76:15 | [ensure: raise] self | +| raise.rb:76:3:76:15 | self | raise.rb:71:3:72:18 | elsif ... | +| raise.rb:76:3:76:15 | self | raise.rb:76:3:76:15 | self | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:79:1:92:3 | enter m8 | +| raise.rb:79:1:92:3 | exit m8 | raise.rb:79:1:92:3 | exit m8 | +| raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:79:1:92:3 | enter m8 | +| raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:79:1:92:3 | exit m8 (normal) | +| raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:84:5:85:20 | elsif ... | +| raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:84:11:84:11 | x | +| raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:85:15:85:19 | x < 0 | +| raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:89:5:89:17 | self | +| raise.rb:83:7:83:19 | self | raise.rb:83:7:83:19 | self | +| raise.rb:84:5:85:20 | elsif ... | raise.rb:84:5:85:20 | elsif ... | +| raise.rb:84:11:84:11 | x | raise.rb:79:1:92:3 | enter m8 | +| raise.rb:84:11:84:11 | x | raise.rb:84:11:84:11 | x | +| raise.rb:85:15:85:19 | x < 0 | raise.rb:85:15:85:19 | x < 0 | +| raise.rb:89:5:89:17 | [ensure: raise] self | raise.rb:89:5:89:17 | [ensure: raise] self | +| raise.rb:89:5:89:17 | self | raise.rb:84:5:85:20 | elsif ... | +| raise.rb:89:5:89:17 | self | raise.rb:89:5:89:17 | self | +| raise.rb:94:1:119:3 | enter m9 | raise.rb:94:1:119:3 | enter m9 | +| raise.rb:94:1:119:3 | exit m9 | raise.rb:94:1:119:3 | exit m9 | +| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:94:1:119:3 | exit m9 (abnormal) | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:94:1:119:3 | enter m9 | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:94:1:119:3 | exit m9 (normal) | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:97:8:97:8 | x | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:99:5:100:20 | elsif ... | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:99:11:99:11 | x | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:100:15:100:19 | x < 0 | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:104:5:104:23 | self | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:106:7:108:9 | [ensure: return] if ... | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:106:7:108:9 | if ... | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:106:10:106:11 | [ensure: return] b1 | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:106:10:106:11 | b1 | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:109:5:110:25 | [ensure: return] ensure ... | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:109:5:110:25 | ensure ... | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:115:3:115:22 | self | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:116:3:118:5 | [ensure: return] if ... | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:116:3:118:5 | if ... | +| raise.rb:97:8:97:8 | x | raise.rb:94:1:119:3 | enter m9 | +| raise.rb:97:8:97:8 | x | raise.rb:97:8:97:8 | x | +| raise.rb:98:7:98:19 | self | raise.rb:98:7:98:19 | self | +| raise.rb:99:5:100:20 | elsif ... | raise.rb:99:5:100:20 | elsif ... | +| raise.rb:99:11:99:11 | x | raise.rb:94:1:119:3 | enter m9 | +| raise.rb:99:11:99:11 | x | raise.rb:97:8:97:8 | x | +| raise.rb:99:11:99:11 | x | raise.rb:99:11:99:11 | x | +| raise.rb:100:15:100:19 | x < 0 | raise.rb:100:15:100:19 | x < 0 | +| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:104:5:104:23 | [ensure: raise] self | +| raise.rb:104:5:104:23 | self | raise.rb:99:5:100:20 | elsif ... | +| raise.rb:104:5:104:23 | self | raise.rb:104:5:104:23 | self | +| raise.rb:106:7:108:9 | [ensure: raise] if ... | raise.rb:106:7:108:9 | [ensure: raise] if ... | +| raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:100:15:100:19 | x < 0 | +| raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:106:7:108:9 | [ensure: return] if ... | +| raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:106:10:106:11 | [ensure: return] b1 | +| raise.rb:106:7:108:9 | if ... | raise.rb:99:5:100:20 | elsif ... | +| raise.rb:106:7:108:9 | if ... | raise.rb:104:5:104:23 | self | +| raise.rb:106:7:108:9 | if ... | raise.rb:106:7:108:9 | if ... | +| raise.rb:106:7:108:9 | if ... | raise.rb:106:10:106:11 | b1 | +| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:106:10:106:11 | [ensure: raise] b1 | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:100:15:100:19 | x < 0 | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:106:10:106:11 | [ensure: return] b1 | +| raise.rb:106:10:106:11 | b1 | raise.rb:99:5:100:20 | elsif ... | +| raise.rb:106:10:106:11 | b1 | raise.rb:104:5:104:23 | self | +| raise.rb:106:10:106:11 | b1 | raise.rb:106:10:106:11 | b1 | +| raise.rb:107:9:107:26 | [ensure: raise] self | raise.rb:107:9:107:26 | [ensure: raise] self | +| raise.rb:107:9:107:26 | [ensure: return] self | raise.rb:107:9:107:26 | [ensure: return] self | +| raise.rb:107:9:107:26 | self | raise.rb:107:9:107:26 | self | +| raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | +| raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | +| raise.rb:109:5:110:25 | [ensure: raise] ensure ... | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | +| raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | +| raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:100:15:100:19 | x < 0 | +| raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:106:7:108:9 | [ensure: return] if ... | +| raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:106:10:106:11 | [ensure: return] b1 | +| raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:109:5:110:25 | [ensure: return] ensure ... | +| raise.rb:109:5:110:25 | ensure ... | raise.rb:99:5:100:20 | elsif ... | +| raise.rb:109:5:110:25 | ensure ... | raise.rb:104:5:104:23 | self | +| raise.rb:109:5:110:25 | ensure ... | raise.rb:106:7:108:9 | if ... | +| raise.rb:109:5:110:25 | ensure ... | raise.rb:106:10:106:11 | b1 | +| raise.rb:109:5:110:25 | ensure ... | raise.rb:109:5:110:25 | ensure ... | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:115:3:115:22 | [ensure: raise] self | +| raise.rb:115:3:115:22 | self | raise.rb:99:5:100:20 | elsif ... | +| raise.rb:115:3:115:22 | self | raise.rb:104:5:104:23 | self | +| raise.rb:115:3:115:22 | self | raise.rb:106:7:108:9 | if ... | +| raise.rb:115:3:115:22 | self | raise.rb:106:10:106:11 | b1 | +| raise.rb:115:3:115:22 | self | raise.rb:109:5:110:25 | ensure ... | +| raise.rb:115:3:115:22 | self | raise.rb:115:3:115:22 | self | +| raise.rb:116:3:118:5 | [ensure: raise] if ... | raise.rb:116:3:118:5 | [ensure: raise] if ... | +| raise.rb:116:3:118:5 | [ensure: return] if ... | raise.rb:100:15:100:19 | x < 0 | +| raise.rb:116:3:118:5 | [ensure: return] if ... | raise.rb:106:7:108:9 | [ensure: return] if ... | +| raise.rb:116:3:118:5 | [ensure: return] if ... | raise.rb:106:10:106:11 | [ensure: return] b1 | +| raise.rb:116:3:118:5 | [ensure: return] if ... | raise.rb:109:5:110:25 | [ensure: return] ensure ... | +| raise.rb:116:3:118:5 | [ensure: return] if ... | raise.rb:116:3:118:5 | [ensure: return] if ... | +| raise.rb:116:3:118:5 | if ... | raise.rb:99:5:100:20 | elsif ... | +| raise.rb:116:3:118:5 | if ... | raise.rb:104:5:104:23 | self | +| raise.rb:116:3:118:5 | if ... | raise.rb:106:7:108:9 | if ... | +| raise.rb:116:3:118:5 | if ... | raise.rb:106:10:106:11 | b1 | +| raise.rb:116:3:118:5 | if ... | raise.rb:109:5:110:25 | ensure ... | +| raise.rb:116:3:118:5 | if ... | raise.rb:115:3:115:22 | self | +| raise.rb:116:3:118:5 | if ... | raise.rb:116:3:118:5 | if ... | +| raise.rb:117:5:117:22 | [ensure: raise] self | raise.rb:117:5:117:22 | [ensure: raise] self | +| raise.rb:117:5:117:22 | [ensure: return] self | raise.rb:117:5:117:22 | [ensure: return] self | +| raise.rb:117:5:117:22 | self | raise.rb:117:5:117:22 | self | +| raise.rb:121:1:126:3 | enter m10 | raise.rb:121:1:126:3 | enter m10 | +| raise.rb:121:1:126:3 | exit m10 | raise.rb:121:1:126:3 | exit m10 | +| raise.rb:121:14:121:30 | self | raise.rb:121:14:121:30 | self | +| raise.rb:125:3:125:51 | self | raise.rb:121:1:126:3 | enter m10 | +| raise.rb:125:3:125:51 | self | raise.rb:125:3:125:51 | self | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:128:1:140:3 | enter m11 | +| raise.rb:128:1:140:3 | exit m11 | raise.rb:128:1:140:3 | exit m11 | +| raise.rb:130:5:132:7 | if ... | raise.rb:130:5:132:7 | if ... | +| raise.rb:131:7:131:22 | self | raise.rb:131:7:131:22 | self | +| raise.rb:133:3:133:19 | rescue ... | raise.rb:133:3:133:19 | rescue ... | +| raise.rb:134:10:134:19 | ExceptionB | raise.rb:134:10:134:19 | ExceptionB | +| raise.rb:135:5:135:21 | self | raise.rb:134:10:134:19 | ExceptionB | +| raise.rb:135:5:135:21 | self | raise.rb:135:5:135:21 | self | +| raise.rb:137:5:137:17 | [ensure: raise] self | raise.rb:137:5:137:17 | [ensure: raise] self | +| raise.rb:137:5:137:17 | self | raise.rb:128:1:140:3 | enter m11 | +| raise.rb:137:5:137:17 | self | raise.rb:130:5:132:7 | if ... | +| raise.rb:137:5:137:17 | self | raise.rb:131:7:131:22 | self | +| raise.rb:137:5:137:17 | self | raise.rb:133:3:133:19 | rescue ... | +| raise.rb:137:5:137:17 | self | raise.rb:134:10:134:19 | ExceptionB | +| raise.rb:137:5:137:17 | self | raise.rb:135:5:135:21 | self | +| raise.rb:137:5:137:17 | self | raise.rb:137:5:137:17 | self | +| raise.rb:142:1:148:3 | enter m12 | raise.rb:142:1:148:3 | enter m12 | +| raise.rb:142:1:148:3 | exit m12 (normal) | raise.rb:142:1:148:3 | enter m12 | +| raise.rb:142:1:148:3 | exit m12 (normal) | raise.rb:142:1:148:3 | exit m12 (normal) | +| raise.rb:142:1:148:3 | exit m12 (normal) | raise.rb:143:3:145:5 | if ... | +| raise.rb:142:1:148:3 | exit m12 (normal) | raise.rb:144:5:144:12 | self | +| raise.rb:143:3:145:5 | if ... | raise.rb:143:3:145:5 | if ... | +| raise.rb:144:5:144:12 | self | raise.rb:144:5:144:12 | self | +| raise.rb:150:1:152:3 | enter m13 | raise.rb:150:1:152:3 | enter m13 | +| raise.rb:154:1:156:3 | enter m14 | raise.rb:154:1:156:3 | enter m14 | +| raise.rb:155:16:155:50 | enter { ... } | raise.rb:155:16:155:50 | enter { ... } | +| raise.rb:155:16:155:50 | exit { ... } | raise.rb:155:16:155:50 | exit { ... } | +| raise.rb:155:25:155:32 | self | raise.rb:155:25:155:32 | self | +| raise.rb:155:25:155:48 | ... if ... | raise.rb:155:16:155:50 | enter { ... } | +| raise.rb:155:25:155:48 | ... if ... | raise.rb:155:25:155:48 | ... if ... | +| raise.rb:158:1:164:3 | enter m15 | raise.rb:158:1:164:3 | enter m15 | +| raise.rb:159:7:163:5 | enter do ... end | raise.rb:159:7:163:5 | enter do ... end | +| raise.rb:160:9:162:7 | enter -> { ... } | raise.rb:160:9:162:7 | enter -> { ... } | +| raise.rb:160:9:162:7 | exit -> { ... } | raise.rb:160:9:162:7 | exit -> { ... } | +| raise.rb:161:7:161:14 | self | raise.rb:161:7:161:14 | self | +| raise.rb:161:7:161:23 | ... unless ... | raise.rb:160:9:162:7 | enter -> { ... } | +| raise.rb:161:7:161:23 | ... unless ... | raise.rb:161:7:161:23 | ... unless ... | +| raise.rb:167:3:169:5 | enter m | raise.rb:167:3:169:5 | enter m | +| raise.rb:172:1:182:3 | enter m16 | raise.rb:172:1:182:3 | enter m16 | +| raise.rb:172:1:182:3 | exit m16 | raise.rb:172:1:182:3 | exit m16 | +| raise.rb:172:1:182:3 | exit m16 (abnormal) | raise.rb:172:1:182:3 | exit m16 (abnormal) | +| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:172:1:182:3 | enter m16 | +| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:172:1:182:3 | exit m16 (normal) | +| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:174:8:174:23 | [false] ... \|\| ... | +| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:174:8:174:23 | [true] ... \|\| ... | +| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:174:14:174:15 | b2 | +| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:175:14:175:14 | 1 | +| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:177:14:177:14 | 2 | +| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:179:10:179:19 | ExceptionA | +| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:180:12:180:12 | 3 | +| raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:174:8:174:23 | [false] ... \|\| ... | +| raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:174:8:174:23 | [true] ... \|\| ... | +| raise.rb:174:14:174:15 | b2 | raise.rb:174:14:174:15 | b2 | +| raise.rb:175:14:175:14 | 1 | raise.rb:175:14:175:14 | 1 | +| raise.rb:177:14:177:14 | 2 | raise.rb:177:14:177:14 | 2 | +| raise.rb:179:10:179:19 | ExceptionA | raise.rb:179:10:179:19 | ExceptionA | +| raise.rb:180:12:180:12 | 3 | raise.rb:179:10:179:19 | ExceptionA | +| raise.rb:180:12:180:12 | 3 | raise.rb:180:12:180:12 | 3 | +immediateDominator +| break_ensure.rb:1:1:11:3 | exit m1 | break_ensure.rb:2:9:2:9 | x | +| break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:2:9:2:9 | x | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:1:1:11:3 | enter m1 | +| break_ensure.rb:3:5:5:7 | if ... | break_ensure.rb:3:8:3:8 | x | +| break_ensure.rb:3:8:3:8 | x | break_ensure.rb:2:9:2:9 | x | +| break_ensure.rb:4:7:4:11 | break | break_ensure.rb:3:8:3:8 | x | +| break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | break_ensure.rb:8:6:8:13 | [ensure: raise] self | +| break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:2:3:6:5 | while ... | +| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:2:9:2:9 | x | +| break_ensure.rb:9:5:9:23 | [ensure: raise] self | break_ensure.rb:8:6:8:13 | [ensure: raise] self | +| break_ensure.rb:9:5:9:23 | self | break_ensure.rb:2:3:6:5 | while ... | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:14:9:14:9 | x | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:13:1:25:3 | enter m2 | +| break_ensure.rb:16:7:18:9 | if ... | break_ensure.rb:16:10:16:10 | x | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:14:9:14:9 | x | +| break_ensure.rb:17:9:17:13 | break | break_ensure.rb:16:10:16:10 | x | +| break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:17:9:17:13 | break | +| break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | break_ensure.rb:20:10:20:10 | [ensure: raise] y | +| break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:16:7:18:9 | if ... | +| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:16:10:16:10 | x | +| break_ensure.rb:21:9:21:20 | [ensure: break] self | break_ensure.rb:17:9:17:13 | break | +| break_ensure.rb:21:9:21:20 | [ensure: raise] self | break_ensure.rb:20:10:20:10 | [ensure: raise] y | +| break_ensure.rb:21:9:21:20 | self | break_ensure.rb:16:7:18:9 | if ... | +| break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:27:1:42:3 | enter m3 | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:27:1:42:3 | enter m3 | +| break_ensure.rb:29:5:31:7 | if ... | break_ensure.rb:27:1:42:3 | enter m3 | +| break_ensure.rb:30:7:30:12 | return | break_ensure.rb:27:1:42:3 | enter m3 | +| break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | break_ensure.rb:33:11:33:11 | [ensure: raise] y | +| break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:33:11:33:11 | [ensure: return] y | +| break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:33:11:33:11 | y | +| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:27:1:42:3 | enter m3 | +| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:30:7:30:12 | return | +| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:29:5:31:7 | if ... | +| break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | break_ensure.rb:35:12:35:12 | [ensure: raise] x | +| break_ensure.rb:35:9:37:11 | [ensure: return] if ... | break_ensure.rb:35:12:35:12 | [ensure: return] x | +| break_ensure.rb:35:9:37:11 | if ... | break_ensure.rb:35:12:35:12 | x | +| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:33:11:33:11 | [ensure: raise] y | +| break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:33:11:33:11 | [ensure: return] y | +| break_ensure.rb:35:12:35:12 | x | break_ensure.rb:33:11:33:11 | y | +| break_ensure.rb:36:11:36:15 | [ensure: raise] break | break_ensure.rb:35:12:35:12 | [ensure: raise] x | +| break_ensure.rb:36:11:36:15 | [ensure: return] break | break_ensure.rb:35:12:35:12 | [ensure: return] x | +| break_ensure.rb:36:11:36:15 | break | break_ensure.rb:35:12:35:12 | x | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:45:9:45:9 | x | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:44:1:56:3 | enter m4 | +| break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:47:10:47:10 | x | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:45:9:45:9 | x | +| break_ensure.rb:48:9:48:16 | self | break_ensure.rb:47:10:47:10 | x | +| break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | break_ensure.rb:51:10:51:10 | [ensure: raise] x | +| break_ensure.rb:51:7:53:9 | if ... | break_ensure.rb:47:7:49:9 | if ... | +| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:47:10:47:10 | x | +| break_ensure.rb:52:15:52:16 | 10 | break_ensure.rb:47:7:49:9 | if ... | +| break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | break_ensure.rb:51:10:51:10 | [ensure: raise] x | +| case.rb:2:3:5:5 | case ... | case.rb:1:1:6:3 | enter if_in_case | +| case.rb:3:5:3:42 | [match] when ... | case.rb:1:1:6:3 | enter if_in_case | +| case.rb:3:5:3:42 | [no-match] when ... | case.rb:1:1:6:3 | enter if_in_case | +| case.rb:3:18:3:41 | if ... | case.rb:3:21:3:22 | self | +| case.rb:3:21:3:22 | self | case.rb:3:5:3:42 | [match] when ... | +| case.rb:3:29:3:37 | self | case.rb:3:21:3:22 | self | +| case.rb:4:5:4:24 | [match] when ... | case.rb:4:10:4:10 | 2 | +| case.rb:4:5:4:24 | [no-match] when ... | case.rb:4:10:4:10 | 2 | +| case.rb:4:10:4:10 | 2 | case.rb:3:5:3:42 | [no-match] when ... | +| case.rb:4:17:4:24 | self | case.rb:4:5:4:24 | [match] when ... | +| case.rb:9:3:17:5 | case ... | case.rb:8:1:18:3 | enter case_match | +| case.rb:11:5:11:15 | in ... then ... | case.rb:8:1:18:3 | enter case_match | +| case.rb:11:15:11:15 | 3 | case.rb:11:5:11:15 | in ... then ... | +| case.rb:12:5:13:7 | in ... then ... | case.rb:11:5:11:15 | in ... then ... | +| case.rb:13:7:13:7 | 4 | case.rb:12:5:13:7 | in ... then ... | +| case.rb:14:5:14:25 | in ... then ... | case.rb:12:5:13:7 | in ... then ... | +| case.rb:14:13:14:13 | x | case.rb:14:5:14:25 | in ... then ... | +| case.rb:14:25:14:25 | 6 | case.rb:14:13:14:13 | x | +| case.rb:15:5:15:28 | in ... then ... | case.rb:14:13:14:13 | x | +| case.rb:15:17:15:17 | x | case.rb:15:5:15:28 | in ... then ... | +| case.rb:15:28:15:28 | 7 | case.rb:15:17:15:17 | x | +| case.rb:16:10:16:10 | 8 | case.rb:15:17:15:17 | x | +| case.rb:20:1:24:3 | exit case_match_no_match | case.rb:20:1:24:3 | enter case_match_no_match | +| case.rb:20:1:24:3 | exit case_match_no_match (abnormal) | case.rb:20:1:24:3 | enter case_match_no_match | +| case.rb:21:3:23:5 | case ... | case.rb:20:1:24:3 | enter case_match_no_match | +| case.rb:26:1:30:3 | exit case_match_raise | case.rb:26:1:30:3 | enter case_match_raise | +| case.rb:26:1:30:3 | exit case_match_raise (abnormal) | case.rb:26:1:30:3 | enter case_match_raise | +| case.rb:27:3:29:5 | case ... | case.rb:26:1:30:3 | enter case_match_raise | +| case.rb:32:1:39:3 | exit case_match_array | case.rb:32:1:39:3 | enter case_match_array | +| case.rb:32:1:39:3 | exit case_match_array (abnormal) | case.rb:37:5:37:27 | in ... then ... | +| case.rb:33:3:38:5 | case ... | case.rb:32:1:39:3 | enter case_match_array | +| case.rb:35:5:35:11 | in ... then ... | case.rb:32:1:39:3 | enter case_match_array | +| case.rb:35:9:35:9 | x | case.rb:35:5:35:11 | in ... then ... | +| case.rb:36:5:36:13 | in ... then ... | case.rb:35:5:35:11 | in ... then ... | +| case.rb:36:9:36:9 | x | case.rb:36:5:36:13 | in ... then ... | +| case.rb:37:5:37:27 | in ... then ... | case.rb:36:5:36:13 | in ... then ... | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:5:37:27 | in ... then ... | +| case.rb:37:12:37:12 | a | case.rb:37:8:37:26 | [ ..., * ] | +| case.rb:37:15:37:15 | b | case.rb:37:12:37:12 | a | +| case.rb:37:19:37:19 | c | case.rb:37:15:37:15 | b | +| case.rb:37:25:37:25 | e | case.rb:37:19:37:19 | c | +| case.rb:41:1:45:3 | exit case_match_find | case.rb:41:1:45:3 | enter case_match_find | +| case.rb:41:1:45:3 | exit case_match_find (abnormal) | case.rb:41:1:45:3 | enter case_match_find | +| case.rb:43:10:43:10 | x | case.rb:41:1:45:3 | enter case_match_find | +| case.rb:43:16:43:16 | 2 | case.rb:43:10:43:10 | x | +| case.rb:43:20:43:20 | y | case.rb:43:16:43:16 | 2 | +| case.rb:47:1:53:3 | exit case_match_hash | case.rb:47:1:53:3 | enter case_match_hash | +| case.rb:47:1:53:3 | exit case_match_hash (abnormal) | case.rb:51:5:51:17 | in ... then ... | +| case.rb:48:3:52:5 | case ... | case.rb:47:1:53:3 | enter case_match_hash | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:47:1:53:3 | enter case_match_hash | +| case.rb:49:20:49:20 | 1 | case.rb:49:8:49:34 | { ..., ** } | +| case.rb:49:23:49:23 | a | case.rb:49:20:49:20 | 1 | +| case.rb:49:29:49:32 | rest | case.rb:49:23:49:23 | a | +| case.rb:50:5:50:25 | in ... then ... | case.rb:47:1:53:3 | enter case_match_hash | +| case.rb:50:8:50:24 | { ..., ** } | case.rb:50:5:50:25 | in ... then ... | +| case.rb:50:16:50:16 | 1 | case.rb:50:8:50:24 | { ..., ** } | +| case.rb:51:5:51:17 | in ... then ... | case.rb:50:5:50:25 | in ... then ... | +| case.rb:51:8:51:16 | { ..., ** } | case.rb:51:5:51:17 | in ... then ... | +| case.rb:56:3:60:5 | case ... | case.rb:55:1:61:3 | enter case_match_variable | +| case.rb:58:5:58:10 | in ... then ... | case.rb:55:1:61:3 | enter case_match_variable | +| case.rb:64:3:66:5 | case ... | case.rb:63:1:67:3 | enter case_match_underscore | +| case.rb:65:12:65:12 | _ | case.rb:63:1:67:3 | enter case_match_underscore | +| case.rb:69:1:93:3 | exit case_match_various | case.rb:69:1:93:3 | enter case_match_various | +| case.rb:69:1:93:3 | exit case_match_various (abnormal) | case.rb:91:23:91:24 | { ..., ** } | +| case.rb:72:3:92:5 | case ... | case.rb:69:1:93:3 | enter case_match_various | +| case.rb:74:5:74:11 | in ... then ... | case.rb:69:1:93:3 | enter case_match_various | +| case.rb:75:5:75:15 | in ... then ... | case.rb:74:5:74:11 | in ... then ... | +| case.rb:76:5:76:18 | in ... then ... | case.rb:75:5:75:15 | in ... then ... | +| case.rb:77:5:77:18 | in ... then ... | case.rb:76:5:76:18 | in ... then ... | +| case.rb:78:5:78:19 | in ... then ... | case.rb:77:5:77:18 | in ... then ... | +| case.rb:79:5:79:14 | in ... then ... | case.rb:78:5:78:19 | in ... then ... | +| case.rb:80:5:80:12 | in ... then ... | case.rb:79:5:79:14 | in ... then ... | +| case.rb:81:5:81:11 | in ... then ... | case.rb:80:5:80:12 | in ... then ... | +| case.rb:82:5:82:20 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | +| case.rb:82:13:82:13 | x | case.rb:82:5:82:20 | in ... then ... | +| case.rb:82:20:82:20 | 1 | case.rb:82:13:82:13 | x | +| case.rb:83:5:83:26 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | +| case.rb:83:12:83:15 | ^... | case.rb:83:5:83:26 | in ... then ... | +| case.rb:83:20:83:25 | string | case.rb:83:12:83:15 | ^... | +| case.rb:84:5:84:17 | in ... then ... | case.rb:83:20:83:25 | string | +| case.rb:85:5:85:23 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | +| case.rb:86:5:86:11 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | +| case.rb:87:5:87:17 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | +| case.rb:88:5:88:15 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | +| case.rb:88:14:88:15 | 10 | case.rb:88:5:88:15 | in ... then ... | +| case.rb:89:5:89:69 | in ... then ... | case.rb:88:14:88:15 | 10 | +| case.rb:89:14:89:17 | self | case.rb:89:5:89:69 | in ... then ... | +| case.rb:89:21:89:24 | true | case.rb:89:14:89:17 | self | +| case.rb:89:28:89:32 | false | case.rb:89:21:89:24 | true | +| case.rb:89:36:89:43 | __LINE__ | case.rb:89:28:89:32 | false | +| case.rb:89:47:89:54 | __FILE__ | case.rb:89:36:89:43 | __LINE__ | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:89:47:89:54 | __FILE__ | +| case.rb:90:5:90:13 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | +| case.rb:91:5:91:25 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | +| case.rb:91:13:91:14 | "" | case.rb:91:5:91:25 | in ... then ... | +| case.rb:91:18:91:19 | [ ..., * ] | case.rb:91:13:91:14 | "" | +| case.rb:91:23:91:24 | { ..., ** } | case.rb:91:18:91:19 | [ ..., * ] | +| case.rb:95:1:99:3 | exit case_match_guard_no_else | case.rb:97:13:97:13 | x | +| case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | case.rb:97:13:97:13 | x | +| case.rb:97:13:97:13 | x | case.rb:95:1:99:3 | enter case_match_guard_no_else | +| case.rb:97:25:97:25 | 6 | case.rb:97:13:97:13 | x | +| cfg.html.erb:18:14:22:16 | if ... | cfg.html.erb:5:16:31:12 | enter cfg.html.erb | +| cfg.html.erb:19:19:19:32 | self | cfg.html.erb:5:16:31:12 | enter cfg.html.erb | +| cfg.html.erb:21:19:21:32 | self | cfg.html.erb:5:16:31:12 | enter cfg.html.erb | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:1:1:221:1 | enter cfg.rb | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:32:9:32:9 | 1 | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:42:3:42:24 | [match] when ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:35:1:37:3 | if ... | +| cfg.rb:42:15:42:24 | self | cfg.rb:42:3:42:24 | [match] when ... | +| cfg.rb:43:3:43:31 | [match] when ... | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:43:3:43:31 | [no-match] when ... | cfg.rb:43:14:43:14 | 4 | +| cfg.rb:43:8:43:8 | 2 | cfg.rb:42:3:42:24 | [no-match] when ... | +| cfg.rb:43:11:43:11 | 3 | cfg.rb:43:8:43:8 | 2 | +| cfg.rb:43:14:43:14 | 4 | cfg.rb:43:11:43:11 | 3 | +| cfg.rb:43:21:43:31 | self | cfg.rb:43:3:43:31 | [match] when ... | +| cfg.rb:44:8:44:18 | self | cfg.rb:43:3:43:31 | [no-match] when ... | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:48:3:48:29 | [false] when ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:48:3:48:29 | [true] when ... | cfg.rb:41:1:45:3 | case ... | +| cfg.rb:48:20:48:29 | self | cfg.rb:48:3:48:29 | [true] when ... | +| cfg.rb:49:3:49:37 | [false] when ... | cfg.rb:49:16:49:16 | b | +| cfg.rb:49:3:49:37 | [true] when ... | cfg.rb:49:8:49:8 | b | +| cfg.rb:49:8:49:8 | b | cfg.rb:48:3:48:29 | [false] when ... | +| cfg.rb:49:16:49:16 | b | cfg.rb:49:8:49:8 | b | +| cfg.rb:49:27:49:37 | self | cfg.rb:49:3:49:37 | [true] when ... | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:60:27:60:31 | hello | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:60:37:60:39 | bye | cfg.rb:47:1:50:3 | case ... | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:75:15:75:15 | 0 | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:75:17:75:43 | elsif ... | cfg.rb:75:23:75:23 | x | +| cfg.rb:75:23:75:23 | x | cfg.rb:60:17:60:40 | ... ? ... : ... | +| cfg.rb:75:35:75:36 | 10 | cfg.rb:75:23:75:23 | x | +| cfg.rb:75:43:75:43 | x | cfg.rb:75:23:75:23 | x | +| cfg.rb:90:1:93:3 | exit { ... } (normal) | cfg.rb:90:1:93:3 | enter { ... } | +| cfg.rb:90:5:90:5 | [false] ! ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:90:5:90:5 | [true] ! ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:75:1:75:47 | if ... | +| cfg.rb:90:5:90:5 | x | cfg.rb:90:5:90:5 | [true] ! ... | +| cfg.rb:91:3:91:24 | if ... | cfg.rb:90:1:93:3 | enter { ... } | +| cfg.rb:91:17:91:20 | next | cfg.rb:90:1:93:3 | enter { ... } | +| cfg.rb:101:24:101:25 | 42 | cfg.rb:101:1:104:3 | enter parameters | +| cfg.rb:101:28:101:30 | key | cfg.rb:101:1:104:3 | enter parameters | +| cfg.rb:113:1:113:9 | self | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:90:5:90:5 | if ... | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:136:12:136:29 | self | cfg.rb:113:1:113:19 | ... if ... | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:172:21:172:29 | self | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:172:36:172:45 | self | cfg.rb:136:1:136:29 | ... rescue ... | +| cfg.rb:174:1:174:9 | self | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:172:1:172:49 | unless ... | +| cfg.rb:176:1:176:41 | until ... | cfg.rb:176:7:176:7 | x | +| cfg.rb:176:7:176:7 | x | cfg.rb:174:1:174:23 | ... unless ... | +| cfg.rb:176:17:176:17 | x | cfg.rb:176:7:176:7 | x | +| cfg.rb:179:1:179:36 | ... until ... | cfg.rb:179:30:179:30 | i | +| cfg.rb:179:2:179:13 | self | cfg.rb:179:30:179:30 | i | +| cfg.rb:179:30:179:30 | i | cfg.rb:176:1:176:41 | until ... | +| cfg.rb:182:1:186:3 | while ... | cfg.rb:182:7:182:7 | x | +| cfg.rb:182:7:182:7 | x | cfg.rb:179:1:179:36 | ... until ... | +| cfg.rb:183:3:183:3 | x | cfg.rb:182:7:182:7 | x | +| cfg.rb:184:3:184:25 | if ... | cfg.rb:183:3:183:3 | x | +| cfg.rb:184:18:184:21 | redo | cfg.rb:183:3:183:3 | x | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:188:30:188:30 | i | +| cfg.rb:188:2:188:13 | self | cfg.rb:188:30:188:30 | i | +| cfg.rb:188:30:188:30 | i | cfg.rb:182:1:186:3 | while ... | +| cfg.rb:205:1:205:3 | __synth__0__1 | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:205:1:205:3 | nil | cfg.rb:188:1:188:35 | ... while ... | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:188:1:188:35 | ... while ... | +| constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | +| constant_compound_assign.rb:5:22:5:24 | 123 | constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | +| constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | +| constant_compound_assign.rb:14:18:14:20 | 123 | constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | +| constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | +| constant_compound_assign.rb:19:21:19:23 | 123 | constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | +| exit.rb:1:1:6:3 | exit m1 | exit.rb:1:1:6:3 | enter m1 | +| exit.rb:2:3:4:5 | if ... | exit.rb:1:1:6:3 | enter m1 | +| exit.rb:3:5:3:10 | self | exit.rb:1:1:6:3 | enter m1 | +| exit.rb:8:1:13:3 | exit m2 | exit.rb:8:1:13:3 | enter m2 | +| exit.rb:9:3:11:5 | if ... | exit.rb:8:1:13:3 | enter m2 | +| exit.rb:10:5:10:18 | self | exit.rb:8:1:13:3 | enter m2 | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:1:1:9:3 | enter m1 | +| ifs.rb:3:5:3:30 | self | ifs.rb:1:1:9:3 | enter m1 | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:4:9:4:9 | x | +| ifs.rb:4:9:4:9 | x | ifs.rb:1:1:9:3 | enter m1 | +| ifs.rb:4:9:4:24 | [false] ... and ... | ifs.rb:4:9:4:9 | x | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:4:20:4:20 | x | +| ifs.rb:4:9:4:38 | [false] ... and ... | ifs.rb:4:9:4:9 | x | +| ifs.rb:4:9:4:38 | [true] ... and ... | ifs.rb:4:30:4:38 | [true] ! ... | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:9:4:9 | x | +| ifs.rb:4:30:4:38 | [false] ! ... | ifs.rb:4:31:4:38 | [true] ( ... ) | +| ifs.rb:4:30:4:38 | [true] ! ... | ifs.rb:4:31:4:38 | [false] ( ... ) | +| ifs.rb:4:31:4:38 | [false] ( ... ) | ifs.rb:4:32:4:32 | x | +| ifs.rb:4:31:4:38 | [true] ( ... ) | ifs.rb:4:32:4:32 | x | +| ifs.rb:4:32:4:32 | x | ifs.rb:4:9:4:24 | [true] ... and ... | +| ifs.rb:5:5:5:17 | self | ifs.rb:4:9:4:38 | [true] ... and ... | +| ifs.rb:7:5:7:35 | self | ifs.rb:4:9:4:38 | [false] ... and ... | +| ifs.rb:11:1:16:3 | exit m2 (normal) | ifs.rb:11:1:16:3 | enter m2 | +| ifs.rb:12:3:14:5 | if ... | ifs.rb:11:1:16:3 | enter m2 | +| ifs.rb:13:12:13:12 | 0 | ifs.rb:11:1:16:3 | enter m2 | +| ifs.rb:19:3:24:5 | if ... | ifs.rb:18:1:26:3 | enter m3 | +| ifs.rb:20:5:20:5 | x | ifs.rb:18:1:26:3 | enter m3 | +| ifs.rb:21:5:23:7 | if ... | ifs.rb:20:5:20:5 | x | +| ifs.rb:22:7:22:7 | x | ifs.rb:20:5:20:5 | x | +| ifs.rb:29:10:29:23 | [false] ( ... ) | ifs.rb:29:11:29:22 | [false] ... ? ... : ... | +| ifs.rb:29:10:29:23 | [true] ( ... ) | ifs.rb:29:11:29:22 | [true] ... ? ... : ... | +| ifs.rb:29:10:29:51 | ... ? ... : ... | ifs.rb:28:1:30:3 | enter m4 | +| ifs.rb:29:11:29:22 | [false] ... ? ... : ... | ifs.rb:28:1:30:3 | enter m4 | +| ifs.rb:29:11:29:22 | [true] ... ? ... : ... | ifs.rb:28:1:30:3 | enter m4 | +| ifs.rb:29:16:29:17 | b2 | ifs.rb:28:1:30:3 | enter m4 | +| ifs.rb:29:21:29:22 | b3 | ifs.rb:28:1:30:3 | enter m4 | +| ifs.rb:29:28:29:35 | b2 \|\| b3 | ifs.rb:29:10:29:23 | [true] ( ... ) | +| ifs.rb:29:41:29:50 | !b2 \|\| !b3 | ifs.rb:29:10:29:23 | [false] ( ... ) | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:32:1:34:3 | enter m5 | +| ifs.rb:33:6:33:49 | [false] ( ... ) | ifs.rb:33:7:33:48 | [false] if ... | +| ifs.rb:33:6:33:49 | [true] ( ... ) | ifs.rb:33:7:33:48 | [true] if ... | +| ifs.rb:33:7:33:48 | [false] if ... | ifs.rb:32:1:34:3 | enter m5 | +| ifs.rb:33:7:33:48 | [true] if ... | ifs.rb:32:1:34:3 | enter m5 | +| ifs.rb:33:13:33:19 | [false] then ... | ifs.rb:33:18:33:19 | b2 | +| ifs.rb:33:13:33:19 | [true] then ... | ifs.rb:33:18:33:19 | b2 | +| ifs.rb:33:18:33:19 | b2 | ifs.rb:32:1:34:3 | enter m5 | +| ifs.rb:33:21:33:44 | [false] elsif ... | ifs.rb:33:27:33:28 | b3 | +| ifs.rb:33:21:33:44 | [true] elsif ... | ifs.rb:33:27:33:28 | b3 | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:32:1:34:3 | enter m5 | +| ifs.rb:33:30:33:36 | [false] then ... | ifs.rb:33:35:33:36 | b4 | +| ifs.rb:33:30:33:36 | [true] then ... | ifs.rb:33:35:33:36 | b4 | +| ifs.rb:33:35:33:36 | b4 | ifs.rb:33:27:33:28 | b3 | +| ifs.rb:33:38:33:44 | [false] else ... | ifs.rb:33:43:33:44 | b5 | +| ifs.rb:33:38:33:44 | [true] else ... | ifs.rb:33:43:33:44 | b5 | +| ifs.rb:33:43:33:44 | b5 | ifs.rb:33:27:33:28 | b3 | +| ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | ifs.rb:33:6:33:49 | [true] ( ... ) | +| ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | ifs.rb:33:6:33:49 | [false] ( ... ) | +| ifs.rb:36:1:38:3 | conditional_method_def | ifs.rb:1:1:58:4 | enter ifs.rb | +| ifs.rb:36:1:38:17 | ... unless ... | ifs.rb:1:1:58:4 | enter ifs.rb | +| ifs.rb:41:3:43:5 | if ... | ifs.rb:41:6:41:10 | [false] ! ... | +| ifs.rb:41:6:41:10 | [false] ! ... | ifs.rb:40:1:44:3 | enter constant_condition | +| ifs.rb:47:3:50:5 | if ... | ifs.rb:46:1:52:3 | enter empty_else | +| ifs.rb:48:5:48:15 | self | ifs.rb:46:1:52:3 | enter empty_else | +| ifs.rb:49:3:49:6 | else ... | ifs.rb:46:1:52:3 | enter empty_else | +| ifs.rb:55:3:57:5 | if ... | ifs.rb:54:1:58:3 | enter disjunct | +| ifs.rb:55:6:55:15 | [false] ( ... ) | ifs.rb:55:7:55:14 | [false] ... \|\| ... | +| ifs.rb:55:6:55:15 | [true] ( ... ) | ifs.rb:55:7:55:14 | [true] ... \|\| ... | +| ifs.rb:55:7:55:14 | [false] ... \|\| ... | ifs.rb:55:13:55:14 | b2 | +| ifs.rb:55:7:55:14 | [true] ... \|\| ... | ifs.rb:54:1:58:3 | enter disjunct | +| ifs.rb:55:13:55:14 | b2 | ifs.rb:54:1:58:3 | enter disjunct | +| ifs.rb:56:5:56:19 | self | ifs.rb:55:6:55:15 | [true] ( ... ) | +| loops.rb:2:3:5:5 | while ... | loops.rb:2:9:2:9 | x | +| loops.rb:2:9:2:9 | x | loops.rb:1:1:6:3 | enter m1 | +| loops.rb:3:5:3:10 | self | loops.rb:2:9:2:9 | x | +| loops.rb:9:3:20:5 | while ... | loops.rb:9:9:9:9 | x | +| loops.rb:9:9:9:9 | x | loops.rb:8:1:22:3 | enter m2 | +| loops.rb:10:5:10:10 | self | loops.rb:9:9:9:9 | x | +| loops.rb:13:7:13:11 | break | loops.rb:10:5:10:10 | self | +| loops.rb:14:11:14:11 | x | loops.rb:10:5:10:10 | self | +| loops.rb:15:7:15:10 | next | loops.rb:14:11:14:11 | x | +| loops.rb:16:5:17:10 | elsif ... | loops.rb:16:11:16:11 | x | +| loops.rb:16:11:16:11 | x | loops.rb:14:11:14:11 | x | +| loops.rb:17:7:17:10 | redo | loops.rb:16:11:16:11 | x | +| loops.rb:31:3:32:5 | while ... | loops.rb:31:9:31:9 | x | +| loops.rb:31:9:31:9 | x | loops.rb:30:1:33:3 | enter m4 | +| loops.rb:31:15:32:5 | do ... | loops.rb:31:9:31:9 | x | +| raise.rb:7:1:12:3 | exit m1 | raise.rb:7:1:12:3 | enter m1 | +| raise.rb:8:3:10:5 | if ... | raise.rb:7:1:12:3 | enter m1 | +| raise.rb:9:5:9:17 | self | raise.rb:7:1:12:3 | enter m1 | +| raise.rb:14:1:23:3 | exit m2 | raise.rb:14:1:23:3 | enter m2 | +| raise.rb:14:1:23:3 | exit m2 (abnormal) | raise.rb:17:7:17:22 | self | +| raise.rb:16:5:18:7 | if ... | raise.rb:14:1:23:3 | enter m2 | +| raise.rb:17:7:17:22 | self | raise.rb:14:1:23:3 | enter m2 | +| raise.rb:20:5:20:18 | self | raise.rb:17:7:17:22 | self | +| raise.rb:22:3:22:15 | self | raise.rb:14:1:23:3 | enter m2 | +| raise.rb:27:5:29:7 | if ... | raise.rb:25:1:34:3 | enter m3 | +| raise.rb:28:7:28:22 | self | raise.rb:25:1:34:3 | enter m3 | +| raise.rb:33:3:33:15 | self | raise.rb:25:1:34:3 | enter m3 | +| raise.rb:38:5:40:7 | if ... | raise.rb:36:1:45:3 | enter m4 | +| raise.rb:39:7:39:22 | self | raise.rb:36:1:45:3 | enter m4 | +| raise.rb:44:3:44:15 | self | raise.rb:36:1:45:3 | enter m4 | +| raise.rb:49:5:51:7 | if ... | raise.rb:47:1:55:3 | enter m5 | +| raise.rb:50:7:50:22 | self | raise.rb:47:1:55:3 | enter m5 | +| raise.rb:54:3:54:15 | self | raise.rb:47:1:55:3 | enter m5 | +| raise.rb:57:1:66:3 | exit m6 | raise.rb:57:1:66:3 | enter m6 | +| raise.rb:57:1:66:3 | exit m6 (abnormal) | raise.rb:62:22:62:31 | ExceptionB | +| raise.rb:59:5:61:7 | if ... | raise.rb:57:1:66:3 | enter m6 | +| raise.rb:60:7:60:22 | self | raise.rb:57:1:66:3 | enter m6 | +| raise.rb:62:22:62:31 | ExceptionB | raise.rb:60:7:60:22 | self | +| raise.rb:62:36:62:36 | e | raise.rb:60:7:60:22 | self | +| raise.rb:65:3:65:15 | self | raise.rb:57:1:66:3 | enter m6 | +| raise.rb:68:1:77:3 | exit m7 | raise.rb:68:1:77:3 | enter m7 | +| raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:71:9:71:9 | x | +| raise.rb:70:5:70:17 | self | raise.rb:68:1:77:3 | enter m7 | +| raise.rb:71:3:72:18 | elsif ... | raise.rb:71:9:71:9 | x | +| raise.rb:71:9:71:9 | x | raise.rb:68:1:77:3 | enter m7 | +| raise.rb:72:13:72:17 | x < 0 | raise.rb:71:9:71:9 | x | +| raise.rb:76:3:76:15 | [ensure: raise] self | raise.rb:68:1:77:3 | enter m7 | +| raise.rb:76:3:76:15 | self | raise.rb:71:3:72:18 | elsif ... | +| raise.rb:79:1:92:3 | exit m8 | raise.rb:79:1:92:3 | enter m8 | +| raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:84:11:84:11 | x | +| raise.rb:83:7:83:19 | self | raise.rb:79:1:92:3 | enter m8 | +| raise.rb:84:5:85:20 | elsif ... | raise.rb:84:11:84:11 | x | +| raise.rb:84:11:84:11 | x | raise.rb:79:1:92:3 | enter m8 | +| raise.rb:85:15:85:19 | x < 0 | raise.rb:84:11:84:11 | x | +| raise.rb:89:5:89:17 | [ensure: raise] self | raise.rb:79:1:92:3 | enter m8 | +| raise.rb:89:5:89:17 | self | raise.rb:84:5:85:20 | elsif ... | +| raise.rb:94:1:119:3 | exit m9 | raise.rb:94:1:119:3 | enter m9 | +| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:94:1:119:3 | enter m9 | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:99:11:99:11 | x | +| raise.rb:97:8:97:8 | x | raise.rb:94:1:119:3 | enter m9 | +| raise.rb:98:7:98:19 | self | raise.rb:97:8:97:8 | x | +| raise.rb:99:5:100:20 | elsif ... | raise.rb:99:11:99:11 | x | +| raise.rb:99:11:99:11 | x | raise.rb:97:8:97:8 | x | +| raise.rb:100:15:100:19 | x < 0 | raise.rb:99:11:99:11 | x | +| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:97:8:97:8 | x | +| raise.rb:104:5:104:23 | self | raise.rb:99:5:100:20 | elsif ... | +| raise.rb:106:7:108:9 | [ensure: raise] if ... | raise.rb:106:10:106:11 | [ensure: raise] b1 | +| raise.rb:106:7:108:9 | [ensure: return] if ... | raise.rb:106:10:106:11 | [ensure: return] b1 | +| raise.rb:106:7:108:9 | if ... | raise.rb:106:10:106:11 | b1 | +| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:104:5:104:23 | [ensure: raise] self | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:100:15:100:19 | x < 0 | +| raise.rb:106:10:106:11 | b1 | raise.rb:104:5:104:23 | self | +| raise.rb:107:9:107:26 | [ensure: raise] self | raise.rb:106:10:106:11 | [ensure: raise] b1 | +| raise.rb:107:9:107:26 | [ensure: return] self | raise.rb:106:10:106:11 | [ensure: return] b1 | +| raise.rb:107:9:107:26 | self | raise.rb:106:10:106:11 | b1 | +| raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | raise.rb:107:9:107:26 | self | +| raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | raise.rb:107:9:107:26 | [ensure: raise] self | +| raise.rb:109:5:110:25 | [ensure: raise] ensure ... | raise.rb:106:7:108:9 | [ensure: raise] if ... | +| raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | raise.rb:107:9:107:26 | [ensure: return] self | +| raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:106:7:108:9 | [ensure: return] if ... | +| raise.rb:109:5:110:25 | ensure ... | raise.rb:106:7:108:9 | if ... | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:94:1:119:3 | enter m9 | +| raise.rb:115:3:115:22 | self | raise.rb:109:5:110:25 | ensure ... | +| raise.rb:116:3:118:5 | [ensure: raise] if ... | raise.rb:115:3:115:22 | [ensure: raise] self | +| raise.rb:116:3:118:5 | [ensure: return] if ... | raise.rb:109:5:110:25 | [ensure: return] ensure ... | +| raise.rb:116:3:118:5 | if ... | raise.rb:115:3:115:22 | self | +| raise.rb:117:5:117:22 | [ensure: raise] self | raise.rb:115:3:115:22 | [ensure: raise] self | +| raise.rb:117:5:117:22 | [ensure: return] self | raise.rb:109:5:110:25 | [ensure: return] ensure ... | +| raise.rb:117:5:117:22 | self | raise.rb:115:3:115:22 | self | +| raise.rb:121:1:126:3 | exit m10 | raise.rb:121:1:126:3 | enter m10 | +| raise.rb:121:14:121:30 | self | raise.rb:121:1:126:3 | enter m10 | +| raise.rb:125:3:125:51 | self | raise.rb:121:1:126:3 | enter m10 | +| raise.rb:128:1:140:3 | exit m11 | raise.rb:128:1:140:3 | enter m11 | +| raise.rb:130:5:132:7 | if ... | raise.rb:128:1:140:3 | enter m11 | +| raise.rb:131:7:131:22 | self | raise.rb:128:1:140:3 | enter m11 | +| raise.rb:133:3:133:19 | rescue ... | raise.rb:131:7:131:22 | self | +| raise.rb:134:10:134:19 | ExceptionB | raise.rb:131:7:131:22 | self | +| raise.rb:135:5:135:21 | self | raise.rb:134:10:134:19 | ExceptionB | +| raise.rb:137:5:137:17 | [ensure: raise] self | raise.rb:134:10:134:19 | ExceptionB | +| raise.rb:137:5:137:17 | self | raise.rb:128:1:140:3 | enter m11 | +| raise.rb:142:1:148:3 | exit m12 (normal) | raise.rb:142:1:148:3 | enter m12 | +| raise.rb:143:3:145:5 | if ... | raise.rb:142:1:148:3 | enter m12 | +| raise.rb:144:5:144:12 | self | raise.rb:142:1:148:3 | enter m12 | +| raise.rb:155:16:155:50 | exit { ... } | raise.rb:155:16:155:50 | enter { ... } | +| raise.rb:155:25:155:32 | self | raise.rb:155:16:155:50 | enter { ... } | +| raise.rb:155:25:155:48 | ... if ... | raise.rb:155:16:155:50 | enter { ... } | +| raise.rb:160:9:162:7 | exit -> { ... } | raise.rb:160:9:162:7 | enter -> { ... } | +| raise.rb:161:7:161:14 | self | raise.rb:160:9:162:7 | enter -> { ... } | +| raise.rb:161:7:161:23 | ... unless ... | raise.rb:160:9:162:7 | enter -> { ... } | +| raise.rb:172:1:182:3 | exit m16 | raise.rb:172:1:182:3 | enter m16 | +| raise.rb:172:1:182:3 | exit m16 (abnormal) | raise.rb:179:10:179:19 | ExceptionA | +| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:172:1:182:3 | enter m16 | +| raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:174:14:174:15 | b2 | +| raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:172:1:182:3 | enter m16 | +| raise.rb:174:14:174:15 | b2 | raise.rb:172:1:182:3 | enter m16 | +| raise.rb:175:14:175:14 | 1 | raise.rb:174:8:174:23 | [true] ... \|\| ... | +| raise.rb:177:14:177:14 | 2 | raise.rb:174:8:174:23 | [false] ... \|\| ... | +| raise.rb:179:10:179:19 | ExceptionA | raise.rb:172:1:182:3 | enter m16 | +| raise.rb:180:12:180:12 | 3 | raise.rb:179:10:179:19 | ExceptionA | +controls +| break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:9:5:9:23 | self | true | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:3:5:5:7 | if ... | true | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:3:8:3:8 | x | true | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:4:7:4:11 | break | true | +| break_ensure.rb:3:8:3:8 | x | break_ensure.rb:3:5:5:7 | if ... | false | +| break_ensure.rb:3:8:3:8 | x | break_ensure.rb:4:7:4:11 | break | true | +| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:9:5:9:23 | [ensure: raise] self | true | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:16:7:18:9 | if ... | true | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:16:10:16:10 | x | true | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:17:9:17:13 | break | true | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | true | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | true | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | if ... | true | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:10:20:10 | [ensure: raise] y | true | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:21:9:21:20 | [ensure: break] self | true | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:21:9:21:20 | [ensure: raise] self | true | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:21:9:21:20 | self | true | +| break_ensure.rb:16:7:18:9 | if ... | break_ensure.rb:21:9:21:20 | self | true | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:16:7:18:9 | if ... | false | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:17:9:17:13 | break | true | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | true | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:20:7:22:9 | if ... | false | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:21:9:21:20 | [ensure: break] self | true | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:21:9:21:20 | self | false | +| break_ensure.rb:17:9:17:13 | break | break_ensure.rb:21:9:21:20 | [ensure: break] self | true | +| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:21:9:21:20 | [ensure: raise] self | true | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:29:5:31:7 | if ... | false | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:30:7:30:12 | return | true | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | true | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:5:39:7 | while ... | false | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:11:33:11 | [ensure: return] y | true | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:11:33:11 | y | false | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | true | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:9:37:11 | if ... | false | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:12:35:12 | [ensure: return] x | true | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:35:12:35:12 | x | false | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:36:11:36:15 | [ensure: return] break | true | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:36:11:36:15 | break | false | +| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | true | +| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:35:12:35:12 | [ensure: raise] x | true | +| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:36:11:36:15 | [ensure: raise] break | true | +| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | true | +| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:35:12:35:12 | [ensure: return] x | true | +| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:36:11:36:15 | [ensure: return] break | true | +| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:35:9:37:11 | if ... | true | +| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:35:12:35:12 | x | true | +| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:36:11:36:15 | break | true | +| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | false | +| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:36:11:36:15 | [ensure: raise] break | true | +| break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | false | +| break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:36:11:36:15 | [ensure: return] break | true | +| break_ensure.rb:35:12:35:12 | x | break_ensure.rb:35:9:37:11 | if ... | false | +| break_ensure.rb:35:12:35:12 | x | break_ensure.rb:36:11:36:15 | break | true | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:47:7:49:9 | if ... | true | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:47:10:47:10 | x | true | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:48:9:48:16 | self | true | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | true | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:7:53:9 | if ... | true | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:10:51:10 | [ensure: raise] x | true | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:52:15:52:16 | 10 | true | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | true | +| break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:51:7:53:9 | if ... | false | +| break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:52:15:52:16 | 10 | true | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:47:7:49:9 | if ... | false | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:48:9:48:16 | self | true | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:51:7:53:9 | if ... | false | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:52:15:52:16 | 10 | false | +| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | false | +| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | true | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:3:5:3:42 | [match] when ... | match | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:3:5:3:42 | [no-match] when ... | no-match | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:3:18:3:41 | if ... | match | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:3:21:3:22 | self | match | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:3:29:3:37 | self | match | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:4:5:4:24 | [match] when ... | no-match | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:4:5:4:24 | [no-match] when ... | no-match | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:4:10:4:10 | 2 | no-match | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:4:17:4:24 | self | no-match | +| case.rb:3:5:3:42 | [match] when ... | case.rb:3:18:3:41 | if ... | match | +| case.rb:3:5:3:42 | [match] when ... | case.rb:3:21:3:22 | self | match | +| case.rb:3:5:3:42 | [match] when ... | case.rb:3:29:3:37 | self | match | +| case.rb:3:5:3:42 | [no-match] when ... | case.rb:4:5:4:24 | [match] when ... | no-match | +| case.rb:3:5:3:42 | [no-match] when ... | case.rb:4:5:4:24 | [no-match] when ... | no-match | +| case.rb:3:5:3:42 | [no-match] when ... | case.rb:4:10:4:10 | 2 | no-match | +| case.rb:3:5:3:42 | [no-match] when ... | case.rb:4:17:4:24 | self | no-match | +| case.rb:3:21:3:22 | self | case.rb:3:29:3:37 | self | true | +| case.rb:4:5:4:24 | [match] when ... | case.rb:4:17:4:24 | self | match | +| case.rb:4:10:4:10 | 2 | case.rb:4:5:4:24 | [match] when ... | match | +| case.rb:4:10:4:10 | 2 | case.rb:4:5:4:24 | [no-match] when ... | no-match | +| case.rb:4:10:4:10 | 2 | case.rb:4:17:4:24 | self | match | +| case.rb:8:1:18:3 | enter case_match | case.rb:11:5:11:15 | in ... then ... | no-match | +| case.rb:8:1:18:3 | enter case_match | case.rb:11:15:11:15 | 3 | no-match | +| case.rb:8:1:18:3 | enter case_match | case.rb:12:5:13:7 | in ... then ... | no-match | +| case.rb:8:1:18:3 | enter case_match | case.rb:13:7:13:7 | 4 | no-match | +| case.rb:8:1:18:3 | enter case_match | case.rb:14:5:14:25 | in ... then ... | no-match | +| case.rb:8:1:18:3 | enter case_match | case.rb:14:13:14:13 | x | no-match | +| case.rb:8:1:18:3 | enter case_match | case.rb:14:25:14:25 | 6 | no-match | +| case.rb:8:1:18:3 | enter case_match | case.rb:15:5:15:28 | in ... then ... | no-match | +| case.rb:8:1:18:3 | enter case_match | case.rb:15:17:15:17 | x | no-match | +| case.rb:8:1:18:3 | enter case_match | case.rb:15:28:15:28 | 7 | no-match | +| case.rb:8:1:18:3 | enter case_match | case.rb:16:10:16:10 | 8 | no-match | +| case.rb:11:5:11:15 | in ... then ... | case.rb:11:15:11:15 | 3 | match | +| case.rb:11:5:11:15 | in ... then ... | case.rb:12:5:13:7 | in ... then ... | no-match | +| case.rb:11:5:11:15 | in ... then ... | case.rb:13:7:13:7 | 4 | no-match | +| case.rb:11:5:11:15 | in ... then ... | case.rb:14:5:14:25 | in ... then ... | no-match | +| case.rb:11:5:11:15 | in ... then ... | case.rb:14:13:14:13 | x | no-match | +| case.rb:11:5:11:15 | in ... then ... | case.rb:14:25:14:25 | 6 | no-match | +| case.rb:11:5:11:15 | in ... then ... | case.rb:15:5:15:28 | in ... then ... | no-match | +| case.rb:11:5:11:15 | in ... then ... | case.rb:15:17:15:17 | x | no-match | +| case.rb:11:5:11:15 | in ... then ... | case.rb:15:28:15:28 | 7 | no-match | +| case.rb:11:5:11:15 | in ... then ... | case.rb:16:10:16:10 | 8 | no-match | +| case.rb:12:5:13:7 | in ... then ... | case.rb:13:7:13:7 | 4 | match | +| case.rb:12:5:13:7 | in ... then ... | case.rb:14:5:14:25 | in ... then ... | no-match | +| case.rb:12:5:13:7 | in ... then ... | case.rb:14:13:14:13 | x | no-match | +| case.rb:12:5:13:7 | in ... then ... | case.rb:14:25:14:25 | 6 | no-match | +| case.rb:12:5:13:7 | in ... then ... | case.rb:15:5:15:28 | in ... then ... | no-match | +| case.rb:12:5:13:7 | in ... then ... | case.rb:15:17:15:17 | x | no-match | +| case.rb:12:5:13:7 | in ... then ... | case.rb:15:28:15:28 | 7 | no-match | +| case.rb:12:5:13:7 | in ... then ... | case.rb:16:10:16:10 | 8 | no-match | +| case.rb:14:5:14:25 | in ... then ... | case.rb:14:13:14:13 | x | match | +| case.rb:14:5:14:25 | in ... then ... | case.rb:14:25:14:25 | 6 | match | +| case.rb:14:5:14:25 | in ... then ... | case.rb:15:5:15:28 | in ... then ... | match | +| case.rb:14:5:14:25 | in ... then ... | case.rb:15:17:15:17 | x | match | +| case.rb:14:5:14:25 | in ... then ... | case.rb:15:28:15:28 | 7 | match | +| case.rb:14:5:14:25 | in ... then ... | case.rb:16:10:16:10 | 8 | match | +| case.rb:14:13:14:13 | x | case.rb:14:25:14:25 | 6 | true | +| case.rb:14:13:14:13 | x | case.rb:15:5:15:28 | in ... then ... | false | +| case.rb:14:13:14:13 | x | case.rb:15:17:15:17 | x | false | +| case.rb:14:13:14:13 | x | case.rb:15:28:15:28 | 7 | false | +| case.rb:14:13:14:13 | x | case.rb:16:10:16:10 | 8 | false | +| case.rb:15:5:15:28 | in ... then ... | case.rb:15:17:15:17 | x | match | +| case.rb:15:5:15:28 | in ... then ... | case.rb:15:28:15:28 | 7 | match | +| case.rb:15:5:15:28 | in ... then ... | case.rb:16:10:16:10 | 8 | match | +| case.rb:15:17:15:17 | x | case.rb:15:28:15:28 | 7 | false | +| case.rb:15:17:15:17 | x | case.rb:16:10:16:10 | 8 | true | +| case.rb:20:1:24:3 | enter case_match_no_match | case.rb:21:3:23:5 | case ... | match | +| case.rb:26:1:30:3 | enter case_match_raise | case.rb:27:3:29:5 | case ... | match | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:32:1:39:3 | exit case_match_array (abnormal) | no-match | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:35:5:35:11 | in ... then ... | no-match | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:35:9:35:9 | x | no-match | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:36:5:36:13 | in ... then ... | no-match | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:36:9:36:9 | x | no-match | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:37:5:37:27 | in ... then ... | no-match | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:37:8:37:26 | [ ..., * ] | no-match | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:37:12:37:12 | a | no-match | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:37:15:37:15 | b | no-match | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:37:19:37:19 | c | no-match | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:37:25:37:25 | e | no-match | +| case.rb:35:5:35:11 | in ... then ... | case.rb:32:1:39:3 | exit case_match_array (abnormal) | no-match | +| case.rb:35:5:35:11 | in ... then ... | case.rb:35:9:35:9 | x | false | +| case.rb:35:5:35:11 | in ... then ... | case.rb:35:9:35:9 | x | match | +| case.rb:35:5:35:11 | in ... then ... | case.rb:35:9:35:9 | x | true | +| case.rb:35:5:35:11 | in ... then ... | case.rb:36:5:36:13 | in ... then ... | no-match | +| case.rb:35:5:35:11 | in ... then ... | case.rb:36:9:36:9 | x | no-match | +| case.rb:35:5:35:11 | in ... then ... | case.rb:37:5:37:27 | in ... then ... | no-match | +| case.rb:35:5:35:11 | in ... then ... | case.rb:37:8:37:26 | [ ..., * ] | no-match | +| case.rb:35:5:35:11 | in ... then ... | case.rb:37:12:37:12 | a | no-match | +| case.rb:35:5:35:11 | in ... then ... | case.rb:37:15:37:15 | b | no-match | +| case.rb:35:5:35:11 | in ... then ... | case.rb:37:19:37:19 | c | no-match | +| case.rb:35:5:35:11 | in ... then ... | case.rb:37:25:37:25 | e | no-match | +| case.rb:36:5:36:13 | in ... then ... | case.rb:32:1:39:3 | exit case_match_array (abnormal) | no-match | +| case.rb:36:5:36:13 | in ... then ... | case.rb:36:9:36:9 | x | false | +| case.rb:36:5:36:13 | in ... then ... | case.rb:36:9:36:9 | x | match | +| case.rb:36:5:36:13 | in ... then ... | case.rb:36:9:36:9 | x | true | +| case.rb:36:5:36:13 | in ... then ... | case.rb:37:5:37:27 | in ... then ... | no-match | +| case.rb:36:5:36:13 | in ... then ... | case.rb:37:8:37:26 | [ ..., * ] | no-match | +| case.rb:36:5:36:13 | in ... then ... | case.rb:37:12:37:12 | a | no-match | +| case.rb:36:5:36:13 | in ... then ... | case.rb:37:15:37:15 | b | no-match | +| case.rb:36:5:36:13 | in ... then ... | case.rb:37:19:37:19 | c | no-match | +| case.rb:36:5:36:13 | in ... then ... | case.rb:37:25:37:25 | e | no-match | +| case.rb:37:5:37:27 | in ... then ... | case.rb:37:8:37:26 | [ ..., * ] | match | +| case.rb:37:5:37:27 | in ... then ... | case.rb:37:12:37:12 | a | match | +| case.rb:37:5:37:27 | in ... then ... | case.rb:37:15:37:15 | b | match | +| case.rb:37:5:37:27 | in ... then ... | case.rb:37:19:37:19 | c | match | +| case.rb:37:5:37:27 | in ... then ... | case.rb:37:25:37:25 | e | match | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:12:37:12 | a | false | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:12:37:12 | a | match | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:12:37:12 | a | true | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:15:37:15 | b | false | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:15:37:15 | b | match | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:15:37:15 | b | true | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:19:37:19 | c | false | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:19:37:19 | c | match | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:19:37:19 | c | true | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:25:37:25 | e | false | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:25:37:25 | e | match | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:25:37:25 | e | true | +| case.rb:37:12:37:12 | a | case.rb:37:15:37:15 | b | match | +| case.rb:37:12:37:12 | a | case.rb:37:19:37:19 | c | match | +| case.rb:37:12:37:12 | a | case.rb:37:25:37:25 | e | match | +| case.rb:37:15:37:15 | b | case.rb:37:19:37:19 | c | match | +| case.rb:37:15:37:15 | b | case.rb:37:25:37:25 | e | match | +| case.rb:37:19:37:19 | c | case.rb:37:25:37:25 | e | match | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:43:10:43:10 | x | false | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:43:10:43:10 | x | match | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:43:10:43:10 | x | true | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:43:16:43:16 | 2 | false | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:43:16:43:16 | 2 | match | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:43:16:43:16 | 2 | true | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:43:20:43:20 | y | false | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:43:20:43:20 | y | match | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:43:20:43:20 | y | true | +| case.rb:43:10:43:10 | x | case.rb:43:16:43:16 | 2 | match | +| case.rb:43:10:43:10 | x | case.rb:43:20:43:20 | y | match | +| case.rb:43:16:43:16 | 2 | case.rb:43:20:43:20 | y | match | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:49:8:49:34 | { ..., ** } | match | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:49:20:49:20 | 1 | match | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:49:23:49:23 | a | match | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:49:29:49:32 | rest | match | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:20:49:20 | 1 | false | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:20:49:20 | 1 | match | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:20:49:20 | 1 | true | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:23:49:23 | a | false | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:23:49:23 | a | match | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:23:49:23 | a | true | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:29:49:32 | rest | false | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:29:49:32 | rest | match | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:29:49:32 | rest | true | +| case.rb:49:20:49:20 | 1 | case.rb:49:23:49:23 | a | match | +| case.rb:49:20:49:20 | 1 | case.rb:49:29:49:32 | rest | match | +| case.rb:49:23:49:23 | a | case.rb:49:29:49:32 | rest | match | +| case.rb:50:5:50:25 | in ... then ... | case.rb:50:8:50:24 | { ..., ** } | match | +| case.rb:50:5:50:25 | in ... then ... | case.rb:50:16:50:16 | 1 | match | +| case.rb:50:8:50:24 | { ..., ** } | case.rb:50:16:50:16 | 1 | false | +| case.rb:50:8:50:24 | { ..., ** } | case.rb:50:16:50:16 | 1 | match | +| case.rb:50:8:50:24 | { ..., ** } | case.rb:50:16:50:16 | 1 | true | +| case.rb:51:5:51:17 | in ... then ... | case.rb:51:8:51:16 | { ..., ** } | match | +| case.rb:55:1:61:3 | enter case_match_variable | case.rb:58:5:58:10 | in ... then ... | no-match | +| case.rb:63:1:67:3 | enter case_match_underscore | case.rb:65:12:65:12 | _ | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:74:5:74:11 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:75:5:75:15 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:76:5:76:18 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:77:5:77:18 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:78:5:78:19 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:79:5:79:14 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:80:5:80:12 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:81:5:81:11 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:82:5:82:20 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:82:13:82:13 | x | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:82:20:82:20 | 1 | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:83:5:83:26 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:83:12:83:15 | ^... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:83:20:83:25 | string | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:84:5:84:17 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:85:5:85:23 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:86:5:86:11 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:89:14:89:17 | self | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:89:21:89:24 | true | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:89:28:89:32 | false | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:91:13:91:14 | "" | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:75:5:75:15 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:76:5:76:18 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:77:5:77:18 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:78:5:78:19 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:79:5:79:14 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:80:5:80:12 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:82:13:82:13 | x | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:82:20:82:20 | 1 | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:83:12:83:15 | ^... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:83:20:83:25 | string | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:89:21:89:24 | true | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:89:28:89:32 | false | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:76:5:76:18 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:77:5:77:18 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:78:5:78:19 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:79:5:79:14 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:80:5:80:12 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:82:13:82:13 | x | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:82:20:82:20 | 1 | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:83:12:83:15 | ^... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:83:20:83:25 | string | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:89:21:89:24 | true | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:89:28:89:32 | false | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:77:5:77:18 | in ... then ... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:78:5:78:19 | in ... then ... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:79:5:79:14 | in ... then ... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:80:5:80:12 | in ... then ... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:82:13:82:13 | x | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:82:20:82:20 | 1 | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:83:12:83:15 | ^... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:83:20:83:25 | string | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:89:21:89:24 | true | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:89:28:89:32 | false | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:78:5:78:19 | in ... then ... | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:79:5:79:14 | in ... then ... | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:80:5:80:12 | in ... then ... | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:82:13:82:13 | x | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:82:20:82:20 | 1 | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:83:12:83:15 | ^... | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:83:20:83:25 | string | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:89:21:89:24 | true | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:89:28:89:32 | false | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:79:5:79:14 | in ... then ... | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:80:5:80:12 | in ... then ... | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:82:13:82:13 | x | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:82:20:82:20 | 1 | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:83:12:83:15 | ^... | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:83:20:83:25 | string | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:89:21:89:24 | true | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:89:28:89:32 | false | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:80:5:80:12 | in ... then ... | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:82:13:82:13 | x | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:82:20:82:20 | 1 | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:83:12:83:15 | ^... | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:83:20:83:25 | string | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:89:21:89:24 | true | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:89:28:89:32 | false | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:82:13:82:13 | x | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:82:20:82:20 | 1 | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:83:12:83:15 | ^... | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:83:20:83:25 | string | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:89:21:89:24 | true | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:89:28:89:32 | false | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:82:13:82:13 | x | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:82:20:82:20 | 1 | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:83:12:83:15 | ^... | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:83:20:83:25 | string | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:89:21:89:24 | true | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:89:28:89:32 | false | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:82:13:82:13 | x | match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:82:20:82:20 | 1 | match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:83:12:83:15 | ^... | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:83:20:83:25 | string | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:89:21:89:24 | true | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:89:28:89:32 | false | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:82:13:82:13 | x | case.rb:82:20:82:20 | 1 | match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:83:12:83:15 | ^... | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:83:20:83:25 | string | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:84:5:84:17 | in ... then ... | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:89:21:89:24 | true | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:89:28:89:32 | false | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:83:20:83:25 | string | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:84:5:84:17 | in ... then ... | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:85:5:85:23 | in ... then ... | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:86:5:86:11 | in ... then ... | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:89:14:89:17 | self | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:89:21:89:24 | true | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:89:28:89:32 | false | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:83:20:83:25 | string | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:83:20:83:25 | string | case.rb:84:5:84:17 | in ... then ... | no-match | +| case.rb:83:20:83:25 | string | case.rb:85:5:85:23 | in ... then ... | no-match | +| case.rb:83:20:83:25 | string | case.rb:86:5:86:11 | in ... then ... | no-match | +| case.rb:83:20:83:25 | string | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:83:20:83:25 | string | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:83:20:83:25 | string | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:83:20:83:25 | string | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:83:20:83:25 | string | case.rb:89:14:89:17 | self | no-match | +| case.rb:83:20:83:25 | string | case.rb:89:21:89:24 | true | no-match | +| case.rb:83:20:83:25 | string | case.rb:89:28:89:32 | false | no-match | +| case.rb:83:20:83:25 | string | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:83:20:83:25 | string | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:83:20:83:25 | string | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:83:20:83:25 | string | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:83:20:83:25 | string | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:83:20:83:25 | string | case.rb:91:13:91:14 | "" | no-match | +| case.rb:83:20:83:25 | string | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:83:20:83:25 | string | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:89:21:89:24 | true | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:89:28:89:32 | false | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:89:21:89:24 | true | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:89:28:89:32 | false | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:89:21:89:24 | true | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:89:28:89:32 | false | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:89:21:89:24 | true | no-match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:89:28:89:32 | false | no-match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:88:5:88:15 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:88:5:88:15 | in ... then ... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:88:5:88:15 | in ... then ... | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:88:5:88:15 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:88:5:88:15 | in ... then ... | case.rb:89:21:89:24 | true | no-match | +| case.rb:88:5:88:15 | in ... then ... | case.rb:89:28:89:32 | false | no-match | +| case.rb:88:5:88:15 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:88:5:88:15 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:88:5:88:15 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:88:5:88:15 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:88:5:88:15 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:88:5:88:15 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:88:5:88:15 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:88:5:88:15 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:88:14:88:15 | 10 | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:88:14:88:15 | 10 | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:88:14:88:15 | 10 | case.rb:89:14:89:17 | self | no-match | +| case.rb:88:14:88:15 | 10 | case.rb:89:21:89:24 | true | no-match | +| case.rb:88:14:88:15 | 10 | case.rb:89:28:89:32 | false | no-match | +| case.rb:88:14:88:15 | 10 | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:88:14:88:15 | 10 | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:88:14:88:15 | 10 | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:88:14:88:15 | 10 | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:88:14:88:15 | 10 | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:88:14:88:15 | 10 | case.rb:91:13:91:14 | "" | no-match | +| case.rb:88:14:88:15 | 10 | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:88:14:88:15 | 10 | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:89:5:89:69 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:89:5:89:69 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:89:5:89:69 | in ... then ... | case.rb:89:21:89:24 | true | no-match | +| case.rb:89:5:89:69 | in ... then ... | case.rb:89:28:89:32 | false | no-match | +| case.rb:89:5:89:69 | in ... then ... | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:89:5:89:69 | in ... then ... | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:89:5:89:69 | in ... then ... | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:89:5:89:69 | in ... then ... | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:89:5:89:69 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:89:5:89:69 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:89:5:89:69 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:89:5:89:69 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:89:14:89:17 | self | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:89:14:89:17 | self | case.rb:89:21:89:24 | true | no-match | +| case.rb:89:14:89:17 | self | case.rb:89:28:89:32 | false | no-match | +| case.rb:89:14:89:17 | self | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:89:14:89:17 | self | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:89:14:89:17 | self | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:89:14:89:17 | self | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:89:14:89:17 | self | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:89:14:89:17 | self | case.rb:91:13:91:14 | "" | no-match | +| case.rb:89:14:89:17 | self | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:89:14:89:17 | self | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:89:21:89:24 | true | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:89:21:89:24 | true | case.rb:89:28:89:32 | false | no-match | +| case.rb:89:21:89:24 | true | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:89:21:89:24 | true | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:89:21:89:24 | true | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:89:21:89:24 | true | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:89:21:89:24 | true | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:89:21:89:24 | true | case.rb:91:13:91:14 | "" | no-match | +| case.rb:89:21:89:24 | true | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:89:21:89:24 | true | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:89:28:89:32 | false | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:89:28:89:32 | false | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:89:28:89:32 | false | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:89:28:89:32 | false | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:89:28:89:32 | false | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:89:28:89:32 | false | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:89:28:89:32 | false | case.rb:91:13:91:14 | "" | no-match | +| case.rb:89:28:89:32 | false | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:89:28:89:32 | false | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:89:36:89:43 | __LINE__ | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:89:36:89:43 | __LINE__ | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:89:36:89:43 | __LINE__ | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:89:36:89:43 | __LINE__ | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:89:36:89:43 | __LINE__ | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:89:36:89:43 | __LINE__ | case.rb:91:13:91:14 | "" | no-match | +| case.rb:89:36:89:43 | __LINE__ | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:89:36:89:43 | __LINE__ | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:89:47:89:54 | __FILE__ | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:89:47:89:54 | __FILE__ | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:89:47:89:54 | __FILE__ | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:89:47:89:54 | __FILE__ | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:89:47:89:54 | __FILE__ | case.rb:91:13:91:14 | "" | no-match | +| case.rb:89:47:89:54 | __FILE__ | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:89:47:89:54 | __FILE__ | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:91:13:91:14 | "" | no-match | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:90:5:90:13 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:90:5:90:13 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:90:5:90:13 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:90:5:90:13 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:90:5:90:13 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:91:5:91:25 | in ... then ... | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:91:5:91:25 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:91:5:91:25 | in ... then ... | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:91:5:91:25 | in ... then ... | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:91:13:91:14 | "" | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:91:13:91:14 | "" | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:91:13:91:14 | "" | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:91:18:91:19 | [ ..., * ] | case.rb:69:1:93:3 | exit case_match_various (abnormal) | no-match | +| case.rb:91:18:91:19 | [ ..., * ] | case.rb:91:23:91:24 | { ..., ** } | no-match | +| case.rb:95:1:99:3 | enter case_match_guard_no_else | case.rb:95:1:99:3 | exit case_match_guard_no_else | match | +| case.rb:95:1:99:3 | enter case_match_guard_no_else | case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | match | +| case.rb:95:1:99:3 | enter case_match_guard_no_else | case.rb:97:13:97:13 | x | match | +| case.rb:95:1:99:3 | enter case_match_guard_no_else | case.rb:97:25:97:25 | 6 | match | +| case.rb:97:13:97:13 | x | case.rb:97:25:97:25 | 6 | true | +| cfg.html.erb:5:16:31:12 | enter cfg.html.erb | cfg.html.erb:19:19:19:32 | self | true | +| cfg.html.erb:5:16:31:12 | enter cfg.html.erb | cfg.html.erb:21:19:21:32 | self | false | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:32:9:32:9 | 1 | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:35:1:37:3 | if ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:41:1:45:3 | case ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:42:3:42:24 | [match] when ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:42:3:42:24 | [no-match] when ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:42:15:42:24 | self | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:43:3:43:31 | [match] when ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:43:3:43:31 | [no-match] when ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:43:8:43:8 | 2 | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:43:11:43:11 | 3 | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:43:14:43:14 | 4 | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:43:21:43:31 | self | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:44:8:44:18 | self | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:47:1:50:3 | case ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:48:3:48:29 | [false] when ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:48:3:48:29 | [true] when ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:48:20:48:29 | self | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:49:3:49:37 | [false] when ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:49:3:49:37 | [true] when ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:49:8:49:8 | b | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:49:16:49:16 | b | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:49:27:49:37 | self | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:60:17:60:40 | ... ? ... : ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:60:27:60:31 | hello | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:60:37:60:39 | bye | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:75:1:75:47 | if ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:75:15:75:15 | 0 | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:75:17:75:43 | elsif ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:75:23:75:23 | x | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:75:35:75:36 | 10 | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:75:43:75:43 | x | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:90:5:90:5 | [false] ! ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:90:5:90:5 | [true] ! ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:90:5:90:5 | if ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:90:5:90:5 | x | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:113:1:113:9 | self | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:113:1:113:19 | ... if ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:136:1:136:29 | ... rescue ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:136:12:136:29 | self | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:172:1:172:49 | unless ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:172:21:172:29 | self | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:172:36:172:45 | self | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:174:1:174:9 | self | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:174:1:174:23 | ... unless ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:176:1:176:41 | until ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:176:7:176:7 | x | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:176:17:176:17 | x | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:179:1:179:36 | ... until ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:179:2:179:13 | self | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:179:30:179:30 | i | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:182:1:186:3 | while ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:182:7:182:7 | x | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:183:3:183:3 | x | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:184:3:184:25 | if ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:184:18:184:21 | redo | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:188:1:188:35 | ... while ... | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:188:2:188:13 | self | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:188:30:188:30 | i | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:205:1:205:3 | __synth__0__1 | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:205:1:205:3 | nil | true | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:205:4:205:5 | if ... | true | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:35:1:37:3 | if ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:41:1:45:3 | case ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:42:3:42:24 | [match] when ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:42:3:42:24 | [no-match] when ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:42:15:42:24 | self | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:43:3:43:31 | [match] when ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:43:3:43:31 | [no-match] when ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:43:8:43:8 | 2 | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:43:11:43:11 | 3 | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:43:14:43:14 | 4 | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:43:21:43:31 | self | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:44:8:44:18 | self | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:47:1:50:3 | case ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:48:3:48:29 | [false] when ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:48:3:48:29 | [true] when ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:48:20:48:29 | self | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:49:3:49:37 | [false] when ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:49:3:49:37 | [true] when ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:49:8:49:8 | b | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:49:16:49:16 | b | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:49:27:49:37 | self | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:60:17:60:40 | ... ? ... : ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:60:27:60:31 | hello | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:60:37:60:39 | bye | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:75:1:75:47 | if ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:75:15:75:15 | 0 | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:75:17:75:43 | elsif ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:75:23:75:23 | x | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:75:35:75:36 | 10 | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:75:43:75:43 | x | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:90:5:90:5 | [false] ! ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:90:5:90:5 | [true] ! ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:90:5:90:5 | if ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:90:5:90:5 | x | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:113:1:113:9 | self | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:113:1:113:19 | ... if ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:136:1:136:29 | ... rescue ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:136:12:136:29 | self | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:172:1:172:49 | unless ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:172:21:172:29 | self | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:172:36:172:45 | self | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:174:1:174:9 | self | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:174:1:174:23 | ... unless ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:176:1:176:41 | until ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:176:7:176:7 | x | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:176:17:176:17 | x | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:179:1:179:36 | ... until ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:179:2:179:13 | self | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:179:30:179:30 | i | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:182:1:186:3 | while ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:182:7:182:7 | x | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:183:3:183:3 | x | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:184:3:184:25 | if ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:184:18:184:21 | redo | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:188:1:188:35 | ... while ... | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:188:2:188:13 | self | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:188:30:188:30 | i | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:205:1:205:3 | __synth__0__1 | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:205:1:205:3 | nil | false | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:205:4:205:5 | if ... | false | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:42:3:42:24 | [match] when ... | match | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:42:3:42:24 | [no-match] when ... | no-match | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:42:15:42:24 | self | match | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:43:3:43:31 | [match] when ... | no-match | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:43:3:43:31 | [no-match] when ... | no-match | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:43:8:43:8 | 2 | no-match | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:43:11:43:11 | 3 | no-match | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:43:14:43:14 | 4 | no-match | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:43:21:43:31 | self | no-match | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:44:8:44:18 | self | no-match | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:48:3:48:29 | [false] when ... | false | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:48:3:48:29 | [true] when ... | true | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:48:20:48:29 | self | true | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:49:3:49:37 | [false] when ... | false | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:49:3:49:37 | [true] when ... | false | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:49:8:49:8 | b | false | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:49:16:49:16 | b | false | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:49:27:49:37 | self | false | +| cfg.rb:42:3:42:24 | [match] when ... | cfg.rb:42:15:42:24 | self | match | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:43:3:43:31 | [match] when ... | no-match | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:43:3:43:31 | [no-match] when ... | no-match | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:43:8:43:8 | 2 | no-match | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:43:11:43:11 | 3 | no-match | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:43:14:43:14 | 4 | no-match | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:43:21:43:31 | self | no-match | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:44:8:44:18 | self | no-match | +| cfg.rb:43:3:43:31 | [match] when ... | cfg.rb:43:21:43:31 | self | match | +| cfg.rb:43:3:43:31 | [no-match] when ... | cfg.rb:44:8:44:18 | self | no-match | +| cfg.rb:43:8:43:8 | 2 | cfg.rb:43:3:43:31 | [no-match] when ... | no-match | +| cfg.rb:43:8:43:8 | 2 | cfg.rb:43:11:43:11 | 3 | no-match | +| cfg.rb:43:8:43:8 | 2 | cfg.rb:43:14:43:14 | 4 | no-match | +| cfg.rb:43:8:43:8 | 2 | cfg.rb:44:8:44:18 | self | no-match | +| cfg.rb:43:11:43:11 | 3 | cfg.rb:43:3:43:31 | [no-match] when ... | no-match | +| cfg.rb:43:11:43:11 | 3 | cfg.rb:43:14:43:14 | 4 | no-match | +| cfg.rb:43:11:43:11 | 3 | cfg.rb:44:8:44:18 | self | no-match | +| cfg.rb:43:14:43:14 | 4 | cfg.rb:43:3:43:31 | [no-match] when ... | no-match | +| cfg.rb:43:14:43:14 | 4 | cfg.rb:44:8:44:18 | self | no-match | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:60:27:60:31 | hello | true | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:60:37:60:39 | bye | false | +| cfg.rb:48:3:48:29 | [false] when ... | cfg.rb:49:3:49:37 | [false] when ... | false | +| cfg.rb:48:3:48:29 | [false] when ... | cfg.rb:49:3:49:37 | [true] when ... | false | +| cfg.rb:48:3:48:29 | [false] when ... | cfg.rb:49:8:49:8 | b | false | +| cfg.rb:48:3:48:29 | [false] when ... | cfg.rb:49:16:49:16 | b | false | +| cfg.rb:48:3:48:29 | [false] when ... | cfg.rb:49:27:49:37 | self | false | +| cfg.rb:48:3:48:29 | [true] when ... | cfg.rb:48:20:48:29 | self | true | +| cfg.rb:49:3:49:37 | [true] when ... | cfg.rb:49:27:49:37 | self | true | +| cfg.rb:49:8:49:8 | b | cfg.rb:49:3:49:37 | [false] when ... | false | +| cfg.rb:49:8:49:8 | b | cfg.rb:49:16:49:16 | b | false | +| cfg.rb:49:16:49:16 | b | cfg.rb:49:3:49:37 | [false] when ... | false | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:75:15:75:15 | 0 | true | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:75:17:75:43 | elsif ... | false | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:75:23:75:23 | x | false | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:75:35:75:36 | 10 | false | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:75:43:75:43 | x | false | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:90:5:90:5 | [false] ! ... | true | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:90:5:90:5 | [true] ! ... | false | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:90:5:90:5 | x | false | +| cfg.rb:75:23:75:23 | x | cfg.rb:75:35:75:36 | 10 | true | +| cfg.rb:75:23:75:23 | x | cfg.rb:75:43:75:43 | x | false | +| cfg.rb:90:1:93:3 | enter { ... } | cfg.rb:91:3:91:24 | if ... | false | +| cfg.rb:90:1:93:3 | enter { ... } | cfg.rb:91:17:91:20 | next | true | +| cfg.rb:90:5:90:5 | [true] ! ... | cfg.rb:90:5:90:5 | x | true | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:113:1:113:9 | self | true | +| cfg.rb:101:1:104:3 | enter parameters | cfg.rb:101:24:101:25 | 42 | false | +| cfg.rb:101:1:104:3 | enter parameters | cfg.rb:101:24:101:25 | 42 | no-match | +| cfg.rb:101:1:104:3 | enter parameters | cfg.rb:101:24:101:25 | 42 | true | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:172:21:172:29 | self | false | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:172:36:172:45 | self | true | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:174:1:174:9 | self | false | +| cfg.rb:176:7:176:7 | x | cfg.rb:176:1:176:41 | until ... | true | +| cfg.rb:176:7:176:7 | x | cfg.rb:176:17:176:17 | x | false | +| cfg.rb:176:7:176:7 | x | cfg.rb:179:1:179:36 | ... until ... | true | +| cfg.rb:176:7:176:7 | x | cfg.rb:179:2:179:13 | self | true | +| cfg.rb:176:7:176:7 | x | cfg.rb:179:30:179:30 | i | true | +| cfg.rb:176:7:176:7 | x | cfg.rb:182:1:186:3 | while ... | true | +| cfg.rb:176:7:176:7 | x | cfg.rb:182:7:182:7 | x | true | +| cfg.rb:176:7:176:7 | x | cfg.rb:183:3:183:3 | x | true | +| cfg.rb:176:7:176:7 | x | cfg.rb:184:3:184:25 | if ... | true | +| cfg.rb:176:7:176:7 | x | cfg.rb:184:18:184:21 | redo | true | +| cfg.rb:176:7:176:7 | x | cfg.rb:188:1:188:35 | ... while ... | true | +| cfg.rb:176:7:176:7 | x | cfg.rb:188:2:188:13 | self | true | +| cfg.rb:176:7:176:7 | x | cfg.rb:188:30:188:30 | i | true | +| cfg.rb:176:7:176:7 | x | cfg.rb:205:1:205:3 | __synth__0__1 | true | +| cfg.rb:176:7:176:7 | x | cfg.rb:205:1:205:3 | nil | true | +| cfg.rb:176:7:176:7 | x | cfg.rb:205:4:205:5 | if ... | true | +| cfg.rb:179:30:179:30 | i | cfg.rb:179:1:179:36 | ... until ... | true | +| cfg.rb:179:30:179:30 | i | cfg.rb:179:2:179:13 | self | false | +| cfg.rb:179:30:179:30 | i | cfg.rb:182:1:186:3 | while ... | true | +| cfg.rb:179:30:179:30 | i | cfg.rb:182:7:182:7 | x | true | +| cfg.rb:179:30:179:30 | i | cfg.rb:183:3:183:3 | x | true | +| cfg.rb:179:30:179:30 | i | cfg.rb:184:3:184:25 | if ... | true | +| cfg.rb:179:30:179:30 | i | cfg.rb:184:18:184:21 | redo | true | +| cfg.rb:179:30:179:30 | i | cfg.rb:188:1:188:35 | ... while ... | true | +| cfg.rb:179:30:179:30 | i | cfg.rb:188:2:188:13 | self | true | +| cfg.rb:179:30:179:30 | i | cfg.rb:188:30:188:30 | i | true | +| cfg.rb:179:30:179:30 | i | cfg.rb:205:1:205:3 | __synth__0__1 | true | +| cfg.rb:179:30:179:30 | i | cfg.rb:205:1:205:3 | nil | true | +| cfg.rb:179:30:179:30 | i | cfg.rb:205:4:205:5 | if ... | true | +| cfg.rb:182:7:182:7 | x | cfg.rb:182:1:186:3 | while ... | false | +| cfg.rb:182:7:182:7 | x | cfg.rb:183:3:183:3 | x | true | +| cfg.rb:182:7:182:7 | x | cfg.rb:184:3:184:25 | if ... | true | +| cfg.rb:182:7:182:7 | x | cfg.rb:184:18:184:21 | redo | true | +| cfg.rb:182:7:182:7 | x | cfg.rb:188:1:188:35 | ... while ... | false | +| cfg.rb:182:7:182:7 | x | cfg.rb:188:2:188:13 | self | false | +| cfg.rb:182:7:182:7 | x | cfg.rb:188:30:188:30 | i | false | +| cfg.rb:182:7:182:7 | x | cfg.rb:205:1:205:3 | __synth__0__1 | false | +| cfg.rb:182:7:182:7 | x | cfg.rb:205:1:205:3 | nil | false | +| cfg.rb:182:7:182:7 | x | cfg.rb:205:4:205:5 | if ... | false | +| cfg.rb:183:3:183:3 | x | cfg.rb:184:3:184:25 | if ... | false | +| cfg.rb:183:3:183:3 | x | cfg.rb:184:18:184:21 | redo | true | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:205:1:205:3 | __synth__0__1 | false | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:205:1:205:3 | nil | true | +| cfg.rb:188:30:188:30 | i | cfg.rb:188:1:188:35 | ... while ... | false | +| cfg.rb:188:30:188:30 | i | cfg.rb:188:2:188:13 | self | true | +| cfg.rb:188:30:188:30 | i | cfg.rb:205:1:205:3 | __synth__0__1 | false | +| cfg.rb:188:30:188:30 | i | cfg.rb:205:1:205:3 | nil | false | +| cfg.rb:188:30:188:30 | i | cfg.rb:205:4:205:5 | if ... | false | +| constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | constant_compound_assign.rb:5:22:5:24 | 123 | false | +| constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | constant_compound_assign.rb:14:18:14:20 | 123 | false | +| constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | constant_compound_assign.rb:19:21:19:23 | 123 | false | +| exit.rb:1:1:6:3 | enter m1 | exit.rb:2:3:4:5 | if ... | false | +| exit.rb:1:1:6:3 | enter m1 | exit.rb:3:5:3:10 | self | true | +| exit.rb:8:1:13:3 | enter m2 | exit.rb:9:3:11:5 | if ... | false | +| exit.rb:8:1:13:3 | enter m2 | exit.rb:10:5:10:18 | self | true | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:3:5:3:30 | self | true | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:3:7:35 | elsif ... | false | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:9:4:9 | x | false | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:9:4:24 | [false] ... and ... | false | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:9:4:24 | [true] ... and ... | false | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:9:4:38 | [false] ... and ... | false | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:9:4:38 | [true] ... and ... | false | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:20:4:20 | x | false | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:30:4:38 | [false] ! ... | false | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:30:4:38 | [true] ! ... | false | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:31:4:38 | [false] ( ... ) | false | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:31:4:38 | [true] ( ... ) | false | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:32:4:32 | x | false | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:5:5:5:17 | self | false | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:7:5:7:35 | self | false | +| ifs.rb:1:1:58:4 | enter ifs.rb | ifs.rb:36:1:38:3 | conditional_method_def | false | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:9:4:24 | [true] ... and ... | true | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:9:4:38 | [true] ... and ... | true | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:20:4:20 | x | true | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:30:4:38 | [false] ! ... | true | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:30:4:38 | [true] ! ... | true | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:31:4:38 | [false] ( ... ) | true | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:31:4:38 | [true] ( ... ) | true | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:32:4:32 | x | true | +| ifs.rb:4:9:4:9 | x | ifs.rb:5:5:5:17 | self | true | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:4:9:4:38 | [true] ... and ... | true | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:4:30:4:38 | [false] ! ... | true | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:4:30:4:38 | [true] ! ... | true | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:4:31:4:38 | [false] ( ... ) | true | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:4:31:4:38 | [true] ( ... ) | true | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:4:32:4:32 | x | true | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:5:5:5:17 | self | true | +| ifs.rb:4:9:4:38 | [false] ... and ... | ifs.rb:7:5:7:35 | self | false | +| ifs.rb:4:9:4:38 | [true] ... and ... | ifs.rb:5:5:5:17 | self | true | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:9:4:24 | [true] ... and ... | true | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:9:4:38 | [true] ... and ... | true | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:30:4:38 | [false] ! ... | true | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:30:4:38 | [true] ! ... | true | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:31:4:38 | [false] ( ... ) | true | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:31:4:38 | [true] ( ... ) | true | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:32:4:32 | x | true | +| ifs.rb:4:20:4:20 | x | ifs.rb:5:5:5:17 | self | true | +| ifs.rb:4:30:4:38 | [true] ! ... | ifs.rb:4:9:4:38 | [true] ... and ... | true | +| ifs.rb:4:30:4:38 | [true] ! ... | ifs.rb:5:5:5:17 | self | true | +| ifs.rb:4:31:4:38 | [false] ( ... ) | ifs.rb:4:9:4:38 | [true] ... and ... | false | +| ifs.rb:4:31:4:38 | [false] ( ... ) | ifs.rb:4:30:4:38 | [true] ! ... | false | +| ifs.rb:4:31:4:38 | [false] ( ... ) | ifs.rb:5:5:5:17 | self | false | +| ifs.rb:4:31:4:38 | [true] ( ... ) | ifs.rb:4:30:4:38 | [false] ! ... | true | +| ifs.rb:4:32:4:32 | x | ifs.rb:4:9:4:38 | [true] ... and ... | false | +| ifs.rb:4:32:4:32 | x | ifs.rb:4:30:4:38 | [false] ! ... | true | +| ifs.rb:4:32:4:32 | x | ifs.rb:4:30:4:38 | [true] ! ... | false | +| ifs.rb:4:32:4:32 | x | ifs.rb:4:31:4:38 | [false] ( ... ) | false | +| ifs.rb:4:32:4:32 | x | ifs.rb:4:31:4:38 | [true] ( ... ) | true | +| ifs.rb:4:32:4:32 | x | ifs.rb:5:5:5:17 | self | false | +| ifs.rb:11:1:16:3 | enter m2 | ifs.rb:12:3:14:5 | if ... | false | +| ifs.rb:11:1:16:3 | enter m2 | ifs.rb:13:12:13:12 | 0 | true | +| ifs.rb:18:1:26:3 | enter m3 | ifs.rb:20:5:20:5 | x | true | +| ifs.rb:18:1:26:3 | enter m3 | ifs.rb:21:5:23:7 | if ... | true | +| ifs.rb:18:1:26:3 | enter m3 | ifs.rb:22:7:22:7 | x | true | +| ifs.rb:20:5:20:5 | x | ifs.rb:22:7:22:7 | x | true | +| ifs.rb:28:1:30:3 | enter m4 | ifs.rb:29:16:29:17 | b2 | true | +| ifs.rb:28:1:30:3 | enter m4 | ifs.rb:29:21:29:22 | b3 | false | +| ifs.rb:29:10:29:23 | [false] ( ... ) | ifs.rb:29:41:29:50 | !b2 \|\| !b3 | false | +| ifs.rb:29:10:29:23 | [true] ( ... ) | ifs.rb:29:28:29:35 | b2 \|\| b3 | true | +| ifs.rb:29:11:29:22 | [false] ... ? ... : ... | ifs.rb:29:10:29:23 | [false] ( ... ) | false | +| ifs.rb:29:11:29:22 | [false] ... ? ... : ... | ifs.rb:29:41:29:50 | !b2 \|\| !b3 | false | +| ifs.rb:29:11:29:22 | [true] ... ? ... : ... | ifs.rb:29:10:29:23 | [true] ( ... ) | true | +| ifs.rb:29:11:29:22 | [true] ... ? ... : ... | ifs.rb:29:28:29:35 | b2 \|\| b3 | true | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:13:33:19 | [false] then ... | true | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:13:33:19 | [true] then ... | true | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:18:33:19 | b2 | true | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:21:33:44 | [false] elsif ... | false | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:21:33:44 | [true] elsif ... | false | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:27:33:28 | b3 | false | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:30:33:36 | [false] then ... | false | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:30:33:36 | [true] then ... | false | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:35:33:36 | b4 | false | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:38:33:44 | [false] else ... | false | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:38:33:44 | [true] else ... | false | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:43:33:44 | b5 | false | +| ifs.rb:33:6:33:49 | [false] ( ... ) | ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | false | +| ifs.rb:33:6:33:49 | [true] ( ... ) | ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | true | +| ifs.rb:33:7:33:48 | [false] if ... | ifs.rb:33:6:33:49 | [false] ( ... ) | false | +| ifs.rb:33:7:33:48 | [false] if ... | ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | false | +| ifs.rb:33:7:33:48 | [true] if ... | ifs.rb:33:6:33:49 | [true] ( ... ) | true | +| ifs.rb:33:7:33:48 | [true] if ... | ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | true | +| ifs.rb:33:18:33:19 | b2 | ifs.rb:33:13:33:19 | [false] then ... | false | +| ifs.rb:33:18:33:19 | b2 | ifs.rb:33:13:33:19 | [true] then ... | true | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:30:33:36 | [false] then ... | true | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:30:33:36 | [true] then ... | true | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:35:33:36 | b4 | true | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:38:33:44 | [false] else ... | false | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:38:33:44 | [true] else ... | false | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:43:33:44 | b5 | false | +| ifs.rb:33:35:33:36 | b4 | ifs.rb:33:30:33:36 | [false] then ... | false | +| ifs.rb:33:35:33:36 | b4 | ifs.rb:33:30:33:36 | [true] then ... | true | +| ifs.rb:33:43:33:44 | b5 | ifs.rb:33:38:33:44 | [false] else ... | false | +| ifs.rb:33:43:33:44 | b5 | ifs.rb:33:38:33:44 | [true] else ... | true | +| ifs.rb:40:1:44:3 | enter constant_condition | ifs.rb:41:3:43:5 | if ... | true | +| ifs.rb:40:1:44:3 | enter constant_condition | ifs.rb:41:6:41:10 | [false] ! ... | true | +| ifs.rb:41:6:41:10 | [false] ! ... | ifs.rb:41:3:43:5 | if ... | false | +| ifs.rb:46:1:52:3 | enter empty_else | ifs.rb:48:5:48:15 | self | true | +| ifs.rb:46:1:52:3 | enter empty_else | ifs.rb:49:3:49:6 | else ... | false | +| ifs.rb:54:1:58:3 | enter disjunct | ifs.rb:55:6:55:15 | [false] ( ... ) | false | +| ifs.rb:54:1:58:3 | enter disjunct | ifs.rb:55:7:55:14 | [false] ... \|\| ... | false | +| ifs.rb:54:1:58:3 | enter disjunct | ifs.rb:55:13:55:14 | b2 | false | +| ifs.rb:55:6:55:15 | [true] ( ... ) | ifs.rb:56:5:56:19 | self | true | +| ifs.rb:55:7:55:14 | [false] ... \|\| ... | ifs.rb:55:6:55:15 | [false] ( ... ) | false | +| ifs.rb:55:7:55:14 | [true] ... \|\| ... | ifs.rb:55:6:55:15 | [true] ( ... ) | true | +| ifs.rb:55:7:55:14 | [true] ... \|\| ... | ifs.rb:56:5:56:19 | self | true | +| ifs.rb:55:13:55:14 | b2 | ifs.rb:55:6:55:15 | [false] ( ... ) | false | +| ifs.rb:55:13:55:14 | b2 | ifs.rb:55:7:55:14 | [false] ... \|\| ... | false | +| loops.rb:2:9:2:9 | x | loops.rb:2:3:5:5 | while ... | false | +| loops.rb:2:9:2:9 | x | loops.rb:3:5:3:10 | self | true | +| loops.rb:9:9:9:9 | x | loops.rb:10:5:10:10 | self | true | +| loops.rb:9:9:9:9 | x | loops.rb:13:7:13:11 | break | true | +| loops.rb:9:9:9:9 | x | loops.rb:14:11:14:11 | x | true | +| loops.rb:9:9:9:9 | x | loops.rb:15:7:15:10 | next | true | +| loops.rb:9:9:9:9 | x | loops.rb:16:5:17:10 | elsif ... | true | +| loops.rb:9:9:9:9 | x | loops.rb:16:11:16:11 | x | true | +| loops.rb:9:9:9:9 | x | loops.rb:17:7:17:10 | redo | true | +| loops.rb:10:5:10:10 | self | loops.rb:13:7:13:11 | break | true | +| loops.rb:10:5:10:10 | self | loops.rb:14:11:14:11 | x | false | +| loops.rb:10:5:10:10 | self | loops.rb:15:7:15:10 | next | false | +| loops.rb:10:5:10:10 | self | loops.rb:16:5:17:10 | elsif ... | false | +| loops.rb:10:5:10:10 | self | loops.rb:16:11:16:11 | x | false | +| loops.rb:10:5:10:10 | self | loops.rb:17:7:17:10 | redo | false | +| loops.rb:14:11:14:11 | x | loops.rb:15:7:15:10 | next | true | +| loops.rb:14:11:14:11 | x | loops.rb:16:5:17:10 | elsif ... | false | +| loops.rb:14:11:14:11 | x | loops.rb:16:11:16:11 | x | false | +| loops.rb:14:11:14:11 | x | loops.rb:17:7:17:10 | redo | false | +| loops.rb:16:11:16:11 | x | loops.rb:16:5:17:10 | elsif ... | false | +| loops.rb:16:11:16:11 | x | loops.rb:17:7:17:10 | redo | true | +| loops.rb:31:9:31:9 | x | loops.rb:31:3:32:5 | while ... | false | +| loops.rb:31:9:31:9 | x | loops.rb:31:15:32:5 | do ... | true | +| raise.rb:7:1:12:3 | enter m1 | raise.rb:8:3:10:5 | if ... | false | +| raise.rb:7:1:12:3 | enter m1 | raise.rb:9:5:9:17 | self | true | +| raise.rb:14:1:23:3 | enter m2 | raise.rb:14:1:23:3 | exit m2 (abnormal) | true | +| raise.rb:14:1:23:3 | enter m2 | raise.rb:16:5:18:7 | if ... | false | +| raise.rb:14:1:23:3 | enter m2 | raise.rb:17:7:17:22 | self | true | +| raise.rb:14:1:23:3 | enter m2 | raise.rb:20:5:20:18 | self | true | +| raise.rb:17:7:17:22 | self | raise.rb:20:5:20:18 | self | match | +| raise.rb:25:1:34:3 | enter m3 | raise.rb:27:5:29:7 | if ... | false | +| raise.rb:25:1:34:3 | enter m3 | raise.rb:28:7:28:22 | self | true | +| raise.rb:36:1:45:3 | enter m4 | raise.rb:38:5:40:7 | if ... | false | +| raise.rb:36:1:45:3 | enter m4 | raise.rb:39:7:39:22 | self | true | +| raise.rb:47:1:55:3 | enter m5 | raise.rb:49:5:51:7 | if ... | false | +| raise.rb:47:1:55:3 | enter m5 | raise.rb:50:7:50:22 | self | true | +| raise.rb:57:1:66:3 | enter m6 | raise.rb:57:1:66:3 | exit m6 (abnormal) | true | +| raise.rb:57:1:66:3 | enter m6 | raise.rb:59:5:61:7 | if ... | false | +| raise.rb:57:1:66:3 | enter m6 | raise.rb:60:7:60:22 | self | true | +| raise.rb:57:1:66:3 | enter m6 | raise.rb:62:22:62:31 | ExceptionB | true | +| raise.rb:57:1:66:3 | enter m6 | raise.rb:62:36:62:36 | e | true | +| raise.rb:60:7:60:22 | self | raise.rb:57:1:66:3 | exit m6 (abnormal) | no-match | +| raise.rb:60:7:60:22 | self | raise.rb:62:22:62:31 | ExceptionB | no-match | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:68:1:77:3 | exit m7 (normal) | false | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:70:5:70:17 | self | true | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:71:3:72:18 | elsif ... | false | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:71:9:71:9 | x | false | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:72:13:72:17 | x < 0 | false | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:76:3:76:15 | self | false | +| raise.rb:71:9:71:9 | x | raise.rb:71:3:72:18 | elsif ... | false | +| raise.rb:71:9:71:9 | x | raise.rb:72:13:72:17 | x < 0 | true | +| raise.rb:71:9:71:9 | x | raise.rb:76:3:76:15 | self | false | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:79:1:92:3 | exit m8 (normal) | false | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:83:7:83:19 | self | true | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:84:5:85:20 | elsif ... | false | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:84:11:84:11 | x | false | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:85:15:85:19 | x < 0 | false | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:89:5:89:17 | self | false | +| raise.rb:84:11:84:11 | x | raise.rb:84:5:85:20 | elsif ... | false | +| raise.rb:84:11:84:11 | x | raise.rb:85:15:85:19 | x < 0 | true | +| raise.rb:84:11:84:11 | x | raise.rb:89:5:89:17 | self | false | +| raise.rb:97:8:97:8 | x | raise.rb:94:1:119:3 | exit m9 (normal) | false | +| raise.rb:97:8:97:8 | x | raise.rb:98:7:98:19 | self | true | +| raise.rb:97:8:97:8 | x | raise.rb:99:5:100:20 | elsif ... | false | +| raise.rb:97:8:97:8 | x | raise.rb:99:11:99:11 | x | false | +| raise.rb:97:8:97:8 | x | raise.rb:100:15:100:19 | x < 0 | false | +| raise.rb:97:8:97:8 | x | raise.rb:104:5:104:23 | self | false | +| raise.rb:97:8:97:8 | x | raise.rb:106:7:108:9 | [ensure: return] if ... | false | +| raise.rb:97:8:97:8 | x | raise.rb:106:7:108:9 | if ... | false | +| raise.rb:97:8:97:8 | x | raise.rb:106:10:106:11 | [ensure: return] b1 | false | +| raise.rb:97:8:97:8 | x | raise.rb:106:10:106:11 | b1 | false | +| raise.rb:97:8:97:8 | x | raise.rb:107:9:107:26 | [ensure: return] self | false | +| raise.rb:97:8:97:8 | x | raise.rb:107:9:107:26 | self | false | +| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | false | +| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | false | +| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | [ensure: return] ensure ... | false | +| raise.rb:97:8:97:8 | x | raise.rb:109:5:110:25 | ensure ... | false | +| raise.rb:97:8:97:8 | x | raise.rb:115:3:115:22 | self | false | +| raise.rb:97:8:97:8 | x | raise.rb:116:3:118:5 | [ensure: return] if ... | false | +| raise.rb:97:8:97:8 | x | raise.rb:116:3:118:5 | if ... | false | +| raise.rb:97:8:97:8 | x | raise.rb:117:5:117:22 | [ensure: return] self | false | +| raise.rb:97:8:97:8 | x | raise.rb:117:5:117:22 | self | false | +| raise.rb:99:11:99:11 | x | raise.rb:99:5:100:20 | elsif ... | false | +| raise.rb:99:11:99:11 | x | raise.rb:100:15:100:19 | x < 0 | true | +| raise.rb:99:11:99:11 | x | raise.rb:104:5:104:23 | self | false | +| raise.rb:99:11:99:11 | x | raise.rb:106:7:108:9 | [ensure: return] if ... | true | +| raise.rb:99:11:99:11 | x | raise.rb:106:7:108:9 | if ... | false | +| raise.rb:99:11:99:11 | x | raise.rb:106:10:106:11 | [ensure: return] b1 | true | +| raise.rb:99:11:99:11 | x | raise.rb:106:10:106:11 | b1 | false | +| raise.rb:99:11:99:11 | x | raise.rb:107:9:107:26 | [ensure: return] self | true | +| raise.rb:99:11:99:11 | x | raise.rb:107:9:107:26 | self | false | +| raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | false | +| raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | true | +| raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | [ensure: return] ensure ... | true | +| raise.rb:99:11:99:11 | x | raise.rb:109:5:110:25 | ensure ... | false | +| raise.rb:99:11:99:11 | x | raise.rb:115:3:115:22 | self | false | +| raise.rb:99:11:99:11 | x | raise.rb:116:3:118:5 | [ensure: return] if ... | true | +| raise.rb:99:11:99:11 | x | raise.rb:116:3:118:5 | if ... | false | +| raise.rb:99:11:99:11 | x | raise.rb:117:5:117:22 | [ensure: return] self | true | +| raise.rb:99:11:99:11 | x | raise.rb:117:5:117:22 | self | false | +| 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: raise] b1 | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | true | +| raise.rb:106:10:106:11 | [ensure: raise] b1 | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | false | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:106:7:108:9 | [ensure: return] if ... | false | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:107:9:107:26 | [ensure: return] self | true | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | true | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:109:5:110:25 | [ensure: return] ensure ... | false | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:116:3:118:5 | [ensure: return] if ... | false | +| raise.rb:106:10:106:11 | [ensure: return] b1 | raise.rb:117:5:117:22 | [ensure: return] self | false | +| raise.rb:106:10:106:11 | b1 | raise.rb:106:7:108:9 | if ... | false | +| raise.rb:106:10:106:11 | b1 | raise.rb:107:9:107:26 | self | true | +| raise.rb:106:10:106:11 | b1 | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | true | +| raise.rb:106:10:106:11 | b1 | raise.rb:109:5:110:25 | ensure ... | false | +| raise.rb:106:10:106:11 | b1 | raise.rb:115:3:115:22 | self | false | +| raise.rb:106:10:106:11 | b1 | raise.rb:116:3:118:5 | if ... | false | +| raise.rb:106:10:106:11 | b1 | raise.rb:117:5:117:22 | self | false | +| raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:116:3:118:5 | [ensure: return] if ... | false | +| raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:117:5:117:22 | [ensure: return] self | true | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:116:3:118:5 | [ensure: raise] if ... | false | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:117:5:117:22 | [ensure: raise] self | true | +| raise.rb:115:3:115:22 | self | raise.rb:116:3:118:5 | if ... | false | +| raise.rb:115:3:115:22 | self | raise.rb:117:5:117:22 | self | true | +| raise.rb:121:1:126:3 | enter m10 | raise.rb:121:14:121:30 | self | false | +| raise.rb:121:1:126:3 | enter m10 | raise.rb:121:14:121:30 | self | no-match | +| raise.rb:121:1:126:3 | enter m10 | raise.rb:121:14:121:30 | self | true | +| raise.rb:121:1:126:3 | enter m10 | raise.rb:125:3:125:51 | self | match | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:130:5:132:7 | if ... | false | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:131:7:131:22 | self | true | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:133:3:133:19 | rescue ... | true | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:134:10:134:19 | ExceptionB | true | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:135:5:135:21 | self | true | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:137:5:137:17 | [ensure: raise] self | true | +| raise.rb:131:7:131:22 | self | raise.rb:133:3:133:19 | rescue ... | match | +| raise.rb:131:7:131:22 | self | raise.rb:134:10:134:19 | ExceptionB | no-match | +| raise.rb:131:7:131:22 | self | raise.rb:135:5:135:21 | self | no-match | +| raise.rb:131:7:131:22 | self | raise.rb:137:5:137:17 | [ensure: raise] self | no-match | +| raise.rb:134:10:134:19 | ExceptionB | raise.rb:135:5:135:21 | self | match | +| raise.rb:142:1:148:3 | enter m12 | raise.rb:143:3:145:5 | if ... | false | +| raise.rb:142:1:148:3 | enter m12 | raise.rb:144:5:144:12 | self | true | +| raise.rb:155:16:155:50 | enter { ... } | raise.rb:155:25:155:32 | self | true | +| raise.rb:155:16:155:50 | enter { ... } | raise.rb:155:25:155:48 | ... if ... | false | +| raise.rb:160:9:162:7 | enter -> { ... } | raise.rb:161:7:161:14 | self | false | +| raise.rb:160:9:162:7 | enter -> { ... } | raise.rb:161:7:161:23 | ... unless ... | true | +| raise.rb:172:1:182:3 | enter m16 | raise.rb:174:8:174:23 | [false] ... \|\| ... | false | +| raise.rb:172:1:182:3 | enter m16 | raise.rb:174:14:174:15 | b2 | false | +| raise.rb:172:1:182:3 | enter m16 | raise.rb:177:14:177:14 | 2 | false | +| raise.rb:174:8:174:23 | [false] ... \|\| ... | raise.rb:177:14:177:14 | 2 | false | +| raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:175:14:175:14 | 1 | true | +| raise.rb:174:14:174:15 | b2 | raise.rb:174:8:174:23 | [false] ... \|\| ... | false | +| raise.rb:174:14:174:15 | b2 | raise.rb:177:14:177:14 | 2 | false | +| raise.rb:179:10:179:19 | ExceptionA | raise.rb:180:12:180:12 | 3 | match | +successor +| break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:8:3:10:5 | if ... | false | +| break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:9:5:9:23 | self | true | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:2:3:6:5 | while ... | false | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:3:8:3:8 | x | true | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:8:6:8:13 | [ensure: raise] self | raise | +| break_ensure.rb:3:8:3:8 | x | break_ensure.rb:2:3:6:5 | while ... | raise | +| break_ensure.rb:3:8:3:8 | x | break_ensure.rb:3:5:5:7 | if ... | false | +| break_ensure.rb:3:8:3:8 | x | break_ensure.rb:4:7:4:11 | break | true | +| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | false | +| break_ensure.rb:8:6:8:13 | [ensure: raise] self | break_ensure.rb:9:5:9:23 | [ensure: raise] self | true | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:14:3:24:5 | while ... | false | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:16:10:16:10 | x | true | +| break_ensure.rb:16:7:18:9 | if ... | break_ensure.rb:20:7:22:9 | if ... | false | +| break_ensure.rb:16:7:18:9 | if ... | break_ensure.rb:21:9:21:20 | self | true | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:16:7:18:9 | if ... | false | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:17:9:17:13 | break | true | +| break_ensure.rb:16:10:16:10 | x | break_ensure.rb:20:10:20:10 | [ensure: raise] y | raise | +| break_ensure.rb:17:9:17:13 | break | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | false | +| break_ensure.rb:17:9:17:13 | break | break_ensure.rb:21:9:21:20 | [ensure: break] self | true | +| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | false | +| break_ensure.rb:20:10:20:10 | [ensure: raise] y | break_ensure.rb:21:9:21:20 | [ensure: raise] self | true | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:29:5:31:7 | if ... | false | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:30:7:30:12 | return | true | +| break_ensure.rb:27:1:42:3 | enter m3 | break_ensure.rb:33:11:33:11 | [ensure: raise] y | raise | +| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | false | +| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:35:12:35:12 | [ensure: raise] x | true | +| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | false | +| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:35:12:35:12 | [ensure: return] x | true | +| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:33:5:39:7 | while ... | false | +| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:35:12:35:12 | x | true | +| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | false | +| break_ensure.rb:35:12:35:12 | [ensure: raise] x | break_ensure.rb:36:11:36:15 | [ensure: raise] break | true | +| break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | false | +| break_ensure.rb:35:12:35:12 | [ensure: return] x | break_ensure.rb:36:11:36:15 | [ensure: return] break | true | +| break_ensure.rb:35:12:35:12 | x | break_ensure.rb:35:9:37:11 | if ... | false | +| break_ensure.rb:35:12:35:12 | x | break_ensure.rb:36:11:36:15 | break | true | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:45:3:55:5 | while ... | false | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:47:10:47:10 | x | true | +| break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:51:7:53:9 | if ... | false | +| break_ensure.rb:47:7:49:9 | if ... | break_ensure.rb:52:15:52:16 | 10 | true | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:47:7:49:9 | if ... | false | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:48:9:48:16 | self | true | +| break_ensure.rb:47:10:47:10 | x | break_ensure.rb:51:10:51:10 | [ensure: raise] x | raise | +| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | false | +| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | true | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:3:5:3:42 | [match] when ... | match | +| case.rb:1:1:6:3 | enter if_in_case | case.rb:3:5:3:42 | [no-match] when ... | no-match | +| case.rb:3:5:3:42 | [match] when ... | case.rb:3:21:3:22 | self | match | +| case.rb:3:5:3:42 | [no-match] when ... | case.rb:4:10:4:10 | 2 | no-match | +| case.rb:3:21:3:22 | self | case.rb:3:18:3:41 | if ... | false | +| case.rb:3:21:3:22 | self | case.rb:3:29:3:37 | self | true | +| case.rb:4:5:4:24 | [match] when ... | case.rb:4:17:4:24 | self | match | +| case.rb:4:5:4:24 | [no-match] when ... | case.rb:2:3:5:5 | case ... | no-match | +| case.rb:4:10:4:10 | 2 | case.rb:4:5:4:24 | [match] when ... | match | +| case.rb:4:10:4:10 | 2 | case.rb:4:5:4:24 | [no-match] when ... | no-match | +| case.rb:8:1:18:3 | enter case_match | case.rb:9:3:17:5 | case ... | match | +| case.rb:8:1:18:3 | enter case_match | case.rb:11:5:11:15 | in ... then ... | no-match | +| case.rb:11:5:11:15 | in ... then ... | case.rb:11:15:11:15 | 3 | match | +| case.rb:11:5:11:15 | in ... then ... | case.rb:12:5:13:7 | in ... then ... | no-match | +| case.rb:12:5:13:7 | in ... then ... | case.rb:13:7:13:7 | 4 | match | +| case.rb:12:5:13:7 | in ... then ... | case.rb:14:5:14:25 | in ... then ... | no-match | +| case.rb:14:5:14:25 | in ... then ... | case.rb:14:13:14:13 | x | match | +| case.rb:14:13:14:13 | x | case.rb:14:25:14:25 | 6 | true | +| case.rb:14:13:14:13 | x | case.rb:15:5:15:28 | in ... then ... | false | +| case.rb:15:5:15:28 | in ... then ... | case.rb:15:17:15:17 | x | match | +| case.rb:15:17:15:17 | x | case.rb:15:28:15:28 | 7 | false | +| case.rb:15:17:15:17 | x | case.rb:16:10:16:10 | 8 | true | +| case.rb:20:1:24:3 | enter case_match_no_match | case.rb:20:1:24:3 | exit case_match_no_match (abnormal) | raise | +| case.rb:20:1:24:3 | enter case_match_no_match | case.rb:21:3:23:5 | case ... | match | +| case.rb:26:1:30:3 | enter case_match_raise | case.rb:26:1:30:3 | exit case_match_raise (abnormal) | raise | +| case.rb:26:1:30:3 | enter case_match_raise | case.rb:27:3:29:5 | case ... | match | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:33:3:38:5 | case ... | match | +| case.rb:32:1:39:3 | enter case_match_array | case.rb:35:5:35:11 | in ... then ... | no-match | +| case.rb:35:5:35:11 | in ... then ... | case.rb:35:9:35:9 | x | false | +| case.rb:35:5:35:11 | in ... then ... | case.rb:35:9:35:9 | x | match | +| case.rb:35:5:35:11 | in ... then ... | case.rb:35:9:35:9 | x | true | +| case.rb:35:5:35:11 | in ... then ... | case.rb:36:5:36:13 | in ... then ... | no-match | +| case.rb:35:9:35:9 | x | case.rb:33:3:38:5 | case ... | match | +| case.rb:36:5:36:13 | in ... then ... | case.rb:36:9:36:9 | x | false | +| case.rb:36:5:36:13 | in ... then ... | case.rb:36:9:36:9 | x | match | +| case.rb:36:5:36:13 | in ... then ... | case.rb:36:9:36:9 | x | true | +| case.rb:36:5:36:13 | in ... then ... | 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:32:1:39:3 | exit case_match_array (abnormal) | raise | +| case.rb:37:5:37:27 | in ... then ... | 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:37:12:37:12 | a | false | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:12:37:12 | a | match | +| case.rb:37:8:37:26 | [ ..., * ] | case.rb:37:12:37:12 | a | 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 | +| case.rb:37:19:37:19 | c | case.rb:37:25:37:25 | e | match | +| case.rb:37:25:37:25 | e | case.rb:33:3:38:5 | case ... | match | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:41:1:45:3 | exit case_match_find (abnormal) | raise | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:43:10:43:10 | x | false | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:43:10:43:10 | x | match | +| case.rb:41:1:45:3 | enter case_match_find | case.rb:43:10:43:10 | x | true | +| case.rb:43:10:43:10 | x | case.rb:41:1:45:3 | exit case_match_find (abnormal) | raise | +| case.rb:43:10:43:10 | x | 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:43:20:43:20 | y | match | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:49:8:49:34 | { ..., ** } | match | +| case.rb:47:1:53:3 | enter case_match_hash | case.rb:50:5:50:25 | in ... then ... | no-match | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:20:49:20 | 1 | false | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:20:49:20 | 1 | match | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:49:20:49:20 | 1 | true | +| case.rb:49:8:49:34 | { ..., ** } | case.rb:50:5:50:25 | in ... then ... | no-match | +| case.rb:49:20:49:20 | 1 | case.rb:49:23:49:23 | a | match | +| case.rb:49:20:49:20 | 1 | case.rb:50:5:50:25 | in ... then ... | no-match | +| case.rb:49:23:49:23 | a | case.rb:49:29:49:32 | rest | match | +| case.rb:50:5:50:25 | in ... then ... | case.rb:50:8:50:24 | { ..., ** } | match | +| case.rb:50:5:50:25 | in ... then ... | case.rb:51:5:51:17 | in ... then ... | no-match | +| case.rb:50:8:50:24 | { ..., ** } | case.rb:50:16:50:16 | 1 | false | +| case.rb:50:8:50:24 | { ..., ** } | case.rb:50:16:50:16 | 1 | match | +| case.rb:50:8:50:24 | { ..., ** } | case.rb:50:16:50:16 | 1 | true | +| case.rb:50:8:50:24 | { ..., ** } | case.rb:51:5:51:17 | in ... then ... | no-match | +| case.rb:50:16:50:16 | 1 | case.rb:48:3:52:5 | case ... | match | +| case.rb:50:16:50:16 | 1 | case.rb:51:5:51:17 | in ... then ... | no-match | +| case.rb:51:5:51:17 | in ... then ... | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | raise | +| case.rb:51:5:51:17 | in ... then ... | 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:48:3:52:5 | case ... | false | +| case.rb:51:8:51:16 | { ..., ** } | case.rb:48:3:52:5 | case ... | match | +| case.rb:51:8:51:16 | { ..., ** } | case.rb:48:3:52:5 | case ... | true | +| case.rb:55:1:61:3 | enter case_match_variable | case.rb:56:3:60:5 | case ... | match | +| case.rb:55:1:61:3 | enter case_match_variable | case.rb:58:5:58:10 | in ... then ... | no-match | +| case.rb:58:5:58:10 | in ... then ... | case.rb:56:3:60:5 | case ... | match | +| case.rb:63:1:67:3 | enter case_match_underscore | case.rb:64:3:66:5 | case ... | match | +| case.rb:63:1:67:3 | enter case_match_underscore | case.rb:65:12:65:12 | _ | no-match | +| case.rb:65:12:65:12 | _ | case.rb:64:3:66:5 | case ... | match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:72:3:92:5 | case ... | match | +| case.rb:69:1:93:3 | enter case_match_various | case.rb:74:5:74:11 | in ... then ... | no-match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:74:5:74:11 | in ... then ... | case.rb:75:5:75:15 | in ... then ... | no-match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:75:5:75:15 | in ... then ... | case.rb:76:5:76:18 | in ... then ... | no-match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:76:5:76:18 | in ... then ... | case.rb:77:5:77:18 | in ... then ... | no-match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:77:5:77:18 | in ... then ... | case.rb:78:5:78:19 | in ... then ... | no-match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:78:5:78:19 | in ... then ... | case.rb:79:5:79:14 | in ... then ... | no-match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:79:5:79:14 | in ... then ... | case.rb:80:5:80:12 | in ... then ... | no-match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:80:5:80:12 | in ... then ... | case.rb:81:5:81:11 | in ... then ... | no-match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:81:5:81:11 | in ... then ... | case.rb:82:5:82:20 | in ... then ... | no-match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:82:13:82:13 | x | match | +| case.rb:82:5:82:20 | in ... then ... | case.rb:83:5:83:26 | in ... then ... | no-match | +| case.rb:82:13:82:13 | x | case.rb:82:20:82:20 | 1 | match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:83:5:83:26 | in ... then ... | case.rb:83:12:83:15 | ^... | no-match | +| case.rb:83:12:83:15 | ^... | case.rb:72:3:92:5 | case ... | match | +| case.rb:83:12:83:15 | ^... | case.rb:83:20:83:25 | string | no-match | +| case.rb:83:20:83:25 | string | case.rb:72:3:92:5 | case ... | match | +| case.rb:83:20:83:25 | string | case.rb:84:5:84:17 | in ... then ... | no-match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:84:5:84:17 | in ... then ... | case.rb:85:5:85:23 | in ... then ... | no-match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:85:5:85:23 | in ... then ... | case.rb:86:5:86:11 | in ... then ... | no-match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:86:5:86:11 | in ... then ... | case.rb:87:5:87:17 | in ... then ... | no-match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:87:5:87:17 | in ... then ... | case.rb:88:5:88:15 | in ... then ... | no-match | +| case.rb:88:5:88:15 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:88:5:88:15 | in ... then ... | case.rb:88:14:88:15 | 10 | no-match | +| case.rb:88:14:88:15 | 10 | case.rb:72:3:92:5 | case ... | match | +| case.rb:88:14:88:15 | 10 | case.rb:89:5:89:69 | in ... then ... | no-match | +| case.rb:89:5:89:69 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:89:5:89:69 | in ... then ... | case.rb:89:14:89:17 | self | no-match | +| case.rb:89:14:89:17 | self | case.rb:72:3:92:5 | case ... | match | +| case.rb:89:14:89:17 | self | case.rb:89:21:89:24 | true | no-match | +| case.rb:89:21:89:24 | true | case.rb:72:3:92:5 | case ... | match | +| case.rb:89:21:89:24 | true | case.rb:89:28:89:32 | false | no-match | +| case.rb:89:28:89:32 | false | case.rb:72:3:92:5 | case ... | match | +| case.rb:89:28:89:32 | false | case.rb:89:36:89:43 | __LINE__ | no-match | +| case.rb:89:36:89:43 | __LINE__ | case.rb:72:3:92:5 | case ... | match | +| case.rb:89:36:89:43 | __LINE__ | case.rb:89:47:89:54 | __FILE__ | no-match | +| case.rb:89:47:89:54 | __FILE__ | case.rb:72:3:92:5 | case ... | match | +| case.rb:89:47:89:54 | __FILE__ | case.rb:89:58:89:69 | __ENCODING__ | no-match | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:72:3:92:5 | case ... | match | +| case.rb:89:58:89:69 | __ENCODING__ | case.rb:90:5:90:13 | in ... then ... | no-match | +| case.rb:90:5:90:13 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:90:5:90:13 | in ... then ... | case.rb:91:5:91:25 | in ... then ... | no-match | +| case.rb:91:5:91:25 | in ... then ... | case.rb:72:3:92:5 | case ... | match | +| case.rb:91:5:91:25 | in ... then ... | case.rb:91:13:91:14 | "" | no-match | +| case.rb:91:13:91:14 | "" | case.rb:72:3:92:5 | case ... | match | +| case.rb:91:13:91:14 | "" | case.rb:91:18:91:19 | [ ..., * ] | no-match | +| case.rb:91:18:91:19 | [ ..., * ] | case.rb:72:3:92:5 | case ... | match | +| case.rb:91:18:91:19 | [ ..., * ] | case.rb: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:72:3:92:5 | case ... | false | +| case.rb:91:23:91:24 | { ..., ** } | case.rb:72:3:92:5 | case ... | match | +| case.rb:91:23:91:24 | { ..., ** } | case.rb:72:3:92:5 | case ... | true | +| case.rb:95:1:99:3 | enter case_match_guard_no_else | case.rb:97:13:97:13 | x | match | +| case.rb:97:13:97:13 | x | case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | raise | +| case.rb:97:13:97:13 | x | case.rb:97:25:97:25 | 6 | true | +| cfg.html.erb:5:16:31:12 | enter cfg.html.erb | cfg.html.erb:19:19:19:32 | self | true | +| cfg.html.erb:5:16:31:12 | enter cfg.html.erb | cfg.html.erb:21:19:21:32 | self | false | +| cfg.rb:1:1:221:1 | enter cfg.rb | cfg.rb:32:9:32:9 | 1 | true | +| cfg.rb:32:9:32:9 | 1 | cfg.rb:35:1:37:3 | if ... | false | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:42:3:42:24 | [match] when ... | match | +| cfg.rb:35:1:37:3 | if ... | cfg.rb:42:3:42:24 | [no-match] when ... | no-match | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:48:3:48:29 | [false] when ... | false | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:48:3:48:29 | [true] when ... | true | +| cfg.rb:42:3:42:24 | [match] when ... | cfg.rb:42:15:42:24 | self | match | +| cfg.rb:42:3:42:24 | [no-match] when ... | cfg.rb:43:8:43:8 | 2 | no-match | +| cfg.rb:43:3:43:31 | [match] when ... | cfg.rb:43:21:43:31 | self | match | +| cfg.rb:43:3:43:31 | [no-match] when ... | cfg.rb:44:8:44:18 | self | no-match | +| cfg.rb:43:8:43:8 | 2 | cfg.rb:43:3:43:31 | [match] when ... | match | +| cfg.rb:43:8:43:8 | 2 | cfg.rb:43:11:43:11 | 3 | no-match | +| cfg.rb:43:11:43:11 | 3 | cfg.rb:43:3:43:31 | [match] when ... | match | +| cfg.rb:43:11:43:11 | 3 | cfg.rb:43:14:43:14 | 4 | no-match | +| cfg.rb:43:14:43:14 | 4 | cfg.rb:43:3:43:31 | [match] when ... | match | +| cfg.rb:43:14:43:14 | 4 | cfg.rb:43:3:43:31 | [no-match] when ... | no-match | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:60:27:60:31 | hello | true | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:60:37:60:39 | bye | false | +| cfg.rb:48:3:48:29 | [false] when ... | cfg.rb:49:8:49:8 | b | false | +| cfg.rb:48:3:48:29 | [true] when ... | cfg.rb:48:20:48:29 | self | true | +| cfg.rb:49:3:49:37 | [false] when ... | cfg.rb:47:1:50:3 | case ... | false | +| cfg.rb:49:3:49:37 | [true] when ... | cfg.rb:49:27:49:37 | self | true | +| cfg.rb:49:8:49:8 | b | cfg.rb:49:3:49:37 | [true] when ... | true | +| cfg.rb:49:8:49:8 | b | cfg.rb:49:16:49:16 | b | false | +| cfg.rb:49:16:49:16 | b | cfg.rb:49:3:49:37 | [false] when ... | false | +| cfg.rb:49:16:49:16 | b | cfg.rb:49:3:49:37 | [true] when ... | true | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:75:15:75:15 | 0 | true | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:75:23:75:23 | x | false | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:90:5:90:5 | [false] ! ... | true | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:90:5:90:5 | [true] ! ... | false | +| cfg.rb:75:23:75:23 | x | cfg.rb:75:35:75:36 | 10 | true | +| cfg.rb:75:23:75:23 | x | cfg.rb:75:43:75:43 | x | false | +| cfg.rb:90:1:93:3 | enter { ... } | cfg.rb:91:3:91:24 | if ... | false | +| cfg.rb:90:1:93:3 | enter { ... } | cfg.rb:91:17:91:20 | next | true | +| cfg.rb:90:5:90:5 | [false] ! ... | cfg.rb:90:5:90:5 | if ... | false | +| cfg.rb:90:5:90:5 | [true] ! ... | cfg.rb:90:5:90:5 | x | true | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:113:1:113:9 | self | true | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:113:1:113:19 | ... if ... | false | +| cfg.rb:101:1:104:3 | enter parameters | cfg.rb:101:24:101:25 | 42 | false | +| cfg.rb:101:1:104:3 | enter parameters | cfg.rb:101:24:101:25 | 42 | no-match | +| cfg.rb:101:1:104:3 | enter parameters | cfg.rb:101:24:101:25 | 42 | true | +| cfg.rb:101:1:104:3 | enter parameters | cfg.rb:101:28:101:30 | key | match | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:172:21:172:29 | self | false | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:172:36:172:45 | self | true | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:174:1:174:9 | self | false | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:174:1:174:23 | ... unless ... | true | +| cfg.rb:176:7:176:7 | x | cfg.rb:176:1:176:41 | until ... | true | +| cfg.rb:176:7:176:7 | x | cfg.rb:176:17:176:17 | x | false | +| cfg.rb:179:30:179:30 | i | cfg.rb:179:1:179:36 | ... until ... | true | +| cfg.rb:179:30:179:30 | i | cfg.rb:179:2:179:13 | self | false | +| cfg.rb:182:7:182:7 | x | cfg.rb:182:1:186:3 | while ... | false | +| cfg.rb:182:7:182:7 | x | cfg.rb:183:3:183:3 | x | true | +| cfg.rb:183:3:183:3 | x | cfg.rb:184:3:184:25 | if ... | false | +| cfg.rb:183:3:183:3 | x | cfg.rb:184:18:184:21 | redo | true | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:205:1:205:3 | __synth__0__1 | false | +| cfg.rb:188:1:188:35 | ... while ... | cfg.rb:205:1:205:3 | nil | true | +| cfg.rb:188:30:188:30 | i | cfg.rb:188:1:188:35 | ... while ... | false | +| cfg.rb:188:30:188:30 | i | cfg.rb:188:2:188:13 | self | true | +| constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | true | +| constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | constant_compound_assign.rb:5:22:5:24 | 123 | false | +| constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | true | +| constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | constant_compound_assign.rb:14:18:14:20 | 123 | false | +| constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | true | +| constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | constant_compound_assign.rb:19:21:19:23 | 123 | false | +| exit.rb:1:1:6:3 | enter m1 | exit.rb:2:3:4:5 | if ... | false | +| exit.rb:1:1:6:3 | enter m1 | exit.rb:3:5:3:10 | self | true | +| exit.rb:8:1:13:3 | enter m2 | exit.rb:9:3:11:5 | if ... | false | +| exit.rb:8:1:13:3 | enter m2 | exit.rb:10:5:10:18 | self | true | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:3:5:3:30 | self | true | +| ifs.rb:1:1:9:3 | enter m1 | ifs.rb:4:9:4:9 | x | false | +| ifs.rb:1:1:58:4 | enter ifs.rb | ifs.rb:36:1:38:3 | conditional_method_def | false | +| ifs.rb:1:1:58:4 | enter ifs.rb | ifs.rb:36:1:38:17 | ... unless ... | true | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:9:4:24 | [false] ... and ... | false | +| ifs.rb:4:9:4:9 | x | ifs.rb:4:20:4:20 | x | true | +| ifs.rb:4:9:4:24 | [false] ... and ... | ifs.rb:4:9:4:38 | [false] ... and ... | false | +| ifs.rb:4:9:4:24 | [true] ... and ... | ifs.rb:4:32:4:32 | x | true | +| ifs.rb:4:9:4:38 | [false] ... and ... | ifs.rb:7:5:7:35 | self | false | +| ifs.rb:4:9:4:38 | [true] ... and ... | ifs.rb:5:5:5:17 | self | true | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:9:4:24 | [false] ... and ... | false | +| ifs.rb:4:20:4:20 | x | ifs.rb:4:9:4:24 | [true] ... and ... | true | +| ifs.rb:4:30:4:38 | [false] ! ... | ifs.rb:4:9:4:38 | [false] ... and ... | false | +| ifs.rb:4:30:4:38 | [true] ! ... | ifs.rb:4:9:4:38 | [true] ... and ... | true | +| ifs.rb:4:31:4:38 | [false] ( ... ) | ifs.rb:4:30:4:38 | [true] ! ... | false | +| ifs.rb:4:31:4:38 | [true] ( ... ) | ifs.rb:4:30:4:38 | [false] ! ... | true | +| ifs.rb:4:32:4:32 | x | ifs.rb:4:31:4:38 | [false] ( ... ) | false | +| ifs.rb:4:32:4:32 | x | ifs.rb:4:31:4:38 | [true] ( ... ) | true | +| ifs.rb:11:1:16:3 | enter m2 | ifs.rb:12:3:14:5 | if ... | false | +| ifs.rb:11:1:16:3 | enter m2 | ifs.rb:13:12:13:12 | 0 | true | +| ifs.rb:18:1:26:3 | enter m3 | ifs.rb:19:3:24:5 | if ... | false | +| ifs.rb:18:1:26:3 | enter m3 | ifs.rb:20:5:20:5 | x | true | +| ifs.rb:20:5:20:5 | x | ifs.rb:21:5:23:7 | if ... | false | +| ifs.rb:20:5:20:5 | x | ifs.rb:22:7:22:7 | x | true | +| ifs.rb:28:1:30:3 | enter m4 | ifs.rb:29:16:29:17 | b2 | true | +| ifs.rb:28:1:30:3 | enter m4 | ifs.rb:29:21:29:22 | b3 | false | +| ifs.rb:29:10:29:23 | [false] ( ... ) | ifs.rb:29:41:29:50 | !b2 \|\| !b3 | false | +| ifs.rb:29:10:29:23 | [true] ( ... ) | ifs.rb:29:28:29:35 | b2 \|\| b3 | true | +| ifs.rb:29:11:29:22 | [false] ... ? ... : ... | ifs.rb:29:10:29:23 | [false] ( ... ) | false | +| ifs.rb:29:11:29:22 | [true] ... ? ... : ... | ifs.rb:29:10:29:23 | [true] ( ... ) | true | +| ifs.rb:29:16:29:17 | b2 | ifs.rb:29:11:29:22 | [false] ... ? ... : ... | false | +| ifs.rb:29:16:29:17 | b2 | ifs.rb:29:11:29:22 | [true] ... ? ... : ... | true | +| ifs.rb:29:21:29:22 | b3 | ifs.rb:29:11:29:22 | [false] ... ? ... : ... | false | +| ifs.rb:29:21:29:22 | b3 | ifs.rb:29:11:29:22 | [true] ... ? ... : ... | true | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:18:33:19 | b2 | true | +| ifs.rb:32:1:34:3 | enter m5 | ifs.rb:33:27:33:28 | b3 | false | +| ifs.rb:33:6:33:49 | [false] ( ... ) | ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | false | +| ifs.rb:33:6:33:49 | [true] ( ... ) | ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | true | +| ifs.rb:33:7:33:48 | [false] if ... | ifs.rb:33:6:33:49 | [false] ( ... ) | false | +| ifs.rb:33:7:33:48 | [true] if ... | ifs.rb:33:6:33:49 | [true] ( ... ) | true | +| ifs.rb:33:13:33:19 | [false] then ... | ifs.rb:33:7:33:48 | [false] if ... | false | +| ifs.rb:33:13:33:19 | [true] then ... | ifs.rb:33:7:33:48 | [true] if ... | true | +| ifs.rb:33:18:33:19 | b2 | ifs.rb:33:13:33:19 | [false] then ... | false | +| ifs.rb:33:18:33:19 | b2 | ifs.rb:33:13:33:19 | [true] then ... | true | +| ifs.rb:33:21:33:44 | [false] elsif ... | ifs.rb:33:7:33:48 | [false] if ... | false | +| ifs.rb:33:21:33:44 | [true] elsif ... | ifs.rb:33:7:33:48 | [true] if ... | true | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:35:33:36 | b4 | true | +| ifs.rb:33:27:33:28 | b3 | ifs.rb:33:43:33:44 | b5 | false | +| ifs.rb:33:30:33:36 | [false] then ... | ifs.rb:33:21:33:44 | [false] elsif ... | false | +| ifs.rb:33:30:33:36 | [true] then ... | ifs.rb:33:21:33:44 | [true] elsif ... | true | +| ifs.rb:33:35:33:36 | b4 | ifs.rb:33:30:33:36 | [false] then ... | false | +| ifs.rb:33:35:33:36 | b4 | ifs.rb:33:30:33:36 | [true] then ... | true | +| ifs.rb:33:38:33:44 | [false] else ... | ifs.rb:33:21:33:44 | [false] elsif ... | false | +| ifs.rb:33:38:33:44 | [true] else ... | ifs.rb:33:21:33:44 | [true] elsif ... | true | +| ifs.rb:33:43:33:44 | b5 | ifs.rb:33:38:33:44 | [false] else ... | false | +| ifs.rb:33:43:33:44 | b5 | ifs.rb:33:38:33:44 | [true] else ... | true | +| ifs.rb:40:1:44:3 | enter constant_condition | ifs.rb:41:6:41:10 | [false] ! ... | true | +| ifs.rb:41:6:41:10 | [false] ! ... | ifs.rb:41:3:43:5 | if ... | false | +| ifs.rb:46:1:52:3 | enter empty_else | ifs.rb:48:5:48:15 | self | true | +| ifs.rb:46:1:52:3 | enter empty_else | ifs.rb:49:3:49:6 | else ... | false | +| ifs.rb:54:1:58:3 | enter disjunct | ifs.rb:55:7:55:14 | [true] ... \|\| ... | true | +| ifs.rb:54:1:58:3 | enter disjunct | ifs.rb:55:13:55:14 | b2 | false | +| ifs.rb:55:6:55:15 | [false] ( ... ) | ifs.rb:55:3:57:5 | if ... | false | +| ifs.rb:55:6:55:15 | [true] ( ... ) | ifs.rb:56:5:56:19 | self | true | +| ifs.rb:55:7:55:14 | [false] ... \|\| ... | ifs.rb:55:6:55:15 | [false] ( ... ) | false | +| ifs.rb:55:7:55:14 | [true] ... \|\| ... | ifs.rb:55:6:55:15 | [true] ( ... ) | true | +| ifs.rb:55:13:55:14 | b2 | ifs.rb:55:7:55:14 | [false] ... \|\| ... | false | +| ifs.rb:55:13:55:14 | b2 | ifs.rb:55:7:55:14 | [true] ... \|\| ... | true | +| loops.rb:2:9:2:9 | x | loops.rb:2:3:5:5 | while ... | false | +| loops.rb:2:9:2:9 | x | loops.rb:3:5:3:10 | self | true | +| loops.rb:9:9:9:9 | x | loops.rb:9:3:20:5 | while ... | false | +| loops.rb:9:9:9:9 | x | loops.rb:10:5:10:10 | self | true | +| loops.rb:10:5:10:10 | self | loops.rb:13:7:13:11 | break | true | +| loops.rb:10:5:10:10 | self | loops.rb:14:11:14:11 | x | false | +| loops.rb:14:11:14:11 | x | loops.rb:15:7:15:10 | next | true | +| loops.rb:14:11:14:11 | x | loops.rb:16:11:16:11 | x | false | +| loops.rb:16:11:16:11 | x | loops.rb:16:5:17:10 | elsif ... | false | +| loops.rb:16:11:16:11 | x | loops.rb:17:7:17:10 | redo | true | +| loops.rb:31:9:31:9 | x | loops.rb:31:3:32:5 | while ... | false | +| loops.rb:31:9:31:9 | x | loops.rb:31:15:32:5 | do ... | true | +| raise.rb:7:1:12:3 | enter m1 | raise.rb:8:3:10:5 | if ... | false | +| raise.rb:7:1:12:3 | enter m1 | raise.rb:9:5:9:17 | self | true | +| raise.rb:14:1:23:3 | enter m2 | raise.rb:16:5:18:7 | if ... | false | +| raise.rb:14:1:23:3 | enter m2 | raise.rb:17:7:17:22 | self | true | +| raise.rb:17:7:17:22 | self | raise.rb:14:1:23:3 | exit m2 (abnormal) | raise | +| raise.rb:17:7:17:22 | self | raise.rb:20:5:20:18 | self | match | +| raise.rb:25:1:34:3 | enter m3 | raise.rb:27:5:29:7 | if ... | false | +| raise.rb:25:1:34:3 | enter m3 | raise.rb:28:7:28:22 | self | true | +| raise.rb:36:1:45:3 | enter m4 | raise.rb:38:5:40:7 | if ... | false | +| raise.rb:36:1:45:3 | enter m4 | raise.rb:39:7:39:22 | self | true | +| raise.rb:47:1:55:3 | enter m5 | raise.rb:49:5:51:7 | if ... | false | +| raise.rb:47:1:55:3 | enter m5 | raise.rb:50:7:50:22 | self | true | +| raise.rb:57:1:66:3 | enter m6 | raise.rb:59:5:61:7 | if ... | false | +| raise.rb:57:1:66:3 | enter m6 | raise.rb:60:7:60:22 | self | true | +| raise.rb:60:7:60:22 | self | raise.rb:62:22:62:31 | ExceptionB | no-match | +| raise.rb:60:7:60:22 | self | 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:62:36:62:36 | e | match | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:70:5:70:17 | self | true | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:71:9:71:9 | x | false | +| raise.rb:68:1:77:3 | enter m7 | raise.rb:76:3:76:15 | [ensure: raise] self | raise | +| raise.rb:71:9:71:9 | x | raise.rb:71:3:72:18 | elsif ... | false | +| raise.rb:71:9:71:9 | x | raise.rb:72:13:72:17 | x < 0 | true | +| raise.rb:71:9:71:9 | x | raise.rb:76:3:76:15 | [ensure: raise] self | raise | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:83:7:83:19 | self | true | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:84:11:84:11 | x | false | +| raise.rb:79:1:92:3 | enter m8 | raise.rb:89:5:89:17 | [ensure: raise] self | raise | +| raise.rb:84:11:84:11 | x | raise.rb:84:5:85:20 | elsif ... | false | +| raise.rb:84:11:84:11 | x | raise.rb:85:15:85:19 | x < 0 | true | +| raise.rb:84:11:84:11 | x | raise.rb:89:5:89:17 | [ensure: raise] self | raise | +| raise.rb:97:8:97:8 | x | raise.rb:98:7:98:19 | self | true | +| raise.rb:97:8:97:8 | x | raise.rb:99:11:99:11 | x | false | +| raise.rb:97:8:97:8 | x | raise.rb:104:5:104:23 | [ensure: raise] self | raise | +| raise.rb:99:11:99:11 | x | raise.rb:99:5:100:20 | elsif ... | false | +| raise.rb:99:11:99:11 | x | raise.rb:100:15:100:19 | x < 0 | true | +| raise.rb:99:11:99:11 | x | raise.rb:104:5:104:23 | [ensure: raise] self | raise | +| 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: 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:109:5:110:25 | [ensure: return] ensure ... | raise.rb:116:3:118:5 | [ensure: return] if ... | false | +| raise.rb:109:5:110:25 | [ensure: return] ensure ... | raise.rb:117:5:117:22 | [ensure: return] self | true | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:116:3:118:5 | [ensure: raise] if ... | false | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:117:5:117:22 | [ensure: raise] self | true | +| raise.rb:115:3:115:22 | self | raise.rb:116:3:118:5 | if ... | false | +| raise.rb:115:3:115:22 | self | raise.rb:117:5:117:22 | self | true | +| raise.rb:121:1:126:3 | enter m10 | raise.rb:121:14:121:30 | self | false | +| raise.rb:121:1:126:3 | enter m10 | raise.rb:121:14:121:30 | self | no-match | +| raise.rb:121:1:126:3 | enter m10 | raise.rb:121:14:121:30 | self | true | +| raise.rb:121:1:126:3 | enter m10 | raise.rb:125:3:125:51 | self | match | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:130:5:132:7 | if ... | false | +| raise.rb:128:1:140:3 | enter m11 | raise.rb:131:7:131:22 | self | true | +| raise.rb:131:7:131:22 | self | raise.rb:133:3:133:19 | rescue ... | match | +| raise.rb:131:7:131:22 | self | raise.rb:134:10:134:19 | ExceptionB | no-match | +| raise.rb:134:10:134:19 | ExceptionB | raise.rb:135:5:135:21 | self | match | +| raise.rb:134:10:134:19 | ExceptionB | raise.rb:137:5:137:17 | [ensure: raise] self | raise | +| raise.rb:142:1:148:3 | enter m12 | raise.rb:143:3:145:5 | if ... | false | +| raise.rb:142:1:148:3 | enter m12 | raise.rb:144:5:144:12 | self | true | +| raise.rb:155:16:155:50 | enter { ... } | raise.rb:155:25:155:32 | self | true | +| raise.rb:155:16:155:50 | enter { ... } | raise.rb:155:25:155:48 | ... if ... | false | +| raise.rb:160:9:162:7 | enter -> { ... } | raise.rb:161:7:161:14 | self | false | +| raise.rb:160:9:162:7 | enter -> { ... } | raise.rb:161:7:161:23 | ... unless ... | true | +| raise.rb:172:1:182:3 | enter m16 | raise.rb:174:8:174:23 | [true] ... \|\| ... | true | +| raise.rb:172:1:182:3 | enter m16 | 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 | [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:14:174:15 | b2 | raise.rb:174:8:174:23 | [false] ... \|\| ... | false | +| raise.rb:174:14:174:15 | b2 | raise.rb:174:8:174:23 | [true] ... \|\| ... | true | +| raise.rb:174:14:174:15 | b2 | raise.rb:179:10:179:19 | ExceptionA | raise | +| 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:180:12:180:12 | 3 | match | +joinBlockPredecessor +| break_ensure.rb:1:1:11:3 | exit m1 | break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | 1 | +| break_ensure.rb:1:1:11:3 | exit m1 | break_ensure.rb:8:3:10:5 | if ... | 0 | +| break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:2:9:2:9 | x | 0 | +| break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:3:8:3:8 | x | 1 | +| break_ensure.rb:2:3:6:5 | while ... | break_ensure.rb:4:7:4:11 | break | 2 | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:1:1:11:3 | enter m1 | 0 | +| break_ensure.rb:2:9:2:9 | x | break_ensure.rb:3:5:5:7 | if ... | 1 | +| break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | break_ensure.rb:8:6:8:13 | [ensure: raise] self | 0 | +| break_ensure.rb:8:3:10:5 | [ensure: raise] if ... | break_ensure.rb:9:5:9:23 | [ensure: raise] self | 1 | +| break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:2:3:6:5 | while ... | 0 | +| break_ensure.rb:8:3:10:5 | if ... | break_ensure.rb:9:5:9:23 | self | 1 | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:14:9:14:9 | x | 0 | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:20:7:22:9 | [ensure: break] if ... | 1 | +| break_ensure.rb:14:3:24:5 | while ... | break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | 2 | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:13:1:25:3 | enter m2 | 0 | +| break_ensure.rb:14:9:14:9 | x | break_ensure.rb:20:7:22:9 | if ... | 1 | +| break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:17:9:17:13 | break | 0 | +| break_ensure.rb:20:7:22:9 | [ensure: break] if ... | break_ensure.rb:21:9:21:20 | [ensure: break] self | 1 | +| break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | break_ensure.rb:20:10:20:10 | [ensure: raise] y | 0 | +| break_ensure.rb:20:7:22:9 | [ensure: raise] if ... | break_ensure.rb:21:9:21:20 | [ensure: raise] self | 1 | +| break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:16:7:18:9 | if ... | 0 | +| break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:21:9:21:20 | self | 1 | +| break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | 0 | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | 1 | +| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:33:5:39:7 | while ... | 0 | +| break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | break_ensure.rb:33:11:33:11 | [ensure: raise] y | 0 | +| break_ensure.rb:33:5:39:7 | [ensure: raise] while ... | break_ensure.rb:36:11:36:15 | [ensure: raise] break | 1 | +| break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:33:11:33:11 | [ensure: return] y | 0 | +| break_ensure.rb:33:5:39:7 | [ensure: return] while ... | break_ensure.rb:36:11:36:15 | [ensure: return] break | 1 | +| break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:33:11:33:11 | y | 0 | +| break_ensure.rb:33:5:39:7 | while ... | break_ensure.rb:36:11:36:15 | break | 1 | +| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:27:1:42:3 | enter m3 | 0 | +| break_ensure.rb:33:11:33:11 | [ensure: raise] y | break_ensure.rb:35:9:37:11 | [ensure: raise] if ... | 1 | +| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:30:7:30:12 | return | 0 | +| break_ensure.rb:33:11:33:11 | [ensure: return] y | break_ensure.rb:35:9:37:11 | [ensure: return] if ... | 1 | +| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:29:5:31:7 | if ... | 0 | +| break_ensure.rb:33:11:33:11 | y | break_ensure.rb:35:9:37:11 | if ... | 1 | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:45:9:45:9 | x | 0 | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:51:7:53:9 | [ensure: raise] if ... | 1 | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:52:15:52:16 | 10 | 2 | +| break_ensure.rb:45:3:55:5 | while ... | break_ensure.rb:52:15:52:16 | [ensure: raise] 10 | 3 | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:44:1:56:3 | enter m4 | 0 | +| break_ensure.rb:45:9:45:9 | x | break_ensure.rb:51:7:53:9 | if ... | 1 | +| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:47:10:47:10 | x | 0 | +| break_ensure.rb:51:10:51:10 | [ensure: raise] x | break_ensure.rb:48:9:48:16 | self | 1 | +| case.rb:2:3:5:5 | case ... | case.rb:3:18:3:41 | if ... | 0 | +| case.rb:2:3:5:5 | case ... | case.rb:4:5:4:24 | [no-match] when ... | 1 | +| case.rb:2:3:5:5 | case ... | case.rb:4:17:4:24 | self | 2 | +| case.rb:3:18:3:41 | if ... | case.rb:3:21:3:22 | self | 0 | +| case.rb:3:18:3:41 | if ... | case.rb:3:29:3:37 | self | 1 | +| case.rb:9:3:17:5 | case ... | case.rb:8:1:18:3 | enter case_match | 0 | +| case.rb:9:3:17:5 | case ... | case.rb:11:15:11:15 | 3 | 1 | +| case.rb:9:3:17:5 | case ... | case.rb:13:7:13:7 | 4 | 2 | +| case.rb:9:3:17:5 | case ... | case.rb:14:25:14:25 | 6 | 3 | +| case.rb:9:3:17:5 | case ... | case.rb:15:28:15:28 | 7 | 4 | +| case.rb:9:3:17:5 | case ... | case.rb:16:10:16:10 | 8 | 5 | +| case.rb:20:1:24:3 | exit case_match_no_match | case.rb:21:3:23:5 | case ... | 0 | +| case.rb:26:1:30:3 | exit case_match_raise | case.rb:27:3:29:5 | case ... | 0 | +| case.rb:32:1:39:3 | exit case_match_array | case.rb:33:3:38:5 | case ... | 0 | +| case.rb:32:1:39:3 | exit case_match_array (abnormal) | case.rb:37:5:37:27 | in ... then ... | 0 | +| case.rb:32:1:39:3 | exit case_match_array (abnormal) | case.rb:37:8:37:26 | [ ..., * ] | 1 | +| case.rb:33:3:38:5 | case ... | case.rb:32:1:39:3 | enter case_match_array | 0 | +| case.rb:33:3:38:5 | case ... | case.rb:35:9:35:9 | x | 1 | +| case.rb:33:3:38:5 | case ... | case.rb:36:9:36:9 | x | 2 | +| case.rb:33:3:38:5 | case ... | case.rb:37:25:37:25 | e | 3 | +| case.rb:41:1:45:3 | exit case_match_find | case.rb:43:20:43:20 | y | 0 | +| case.rb:41:1:45:3 | exit case_match_find (abnormal) | case.rb:41:1:45:3 | enter case_match_find | 0 | +| case.rb:41:1:45:3 | exit case_match_find (abnormal) | case.rb:43:10:43:10 | x | 1 | +| case.rb:41:1:45:3 | exit case_match_find (abnormal) | case.rb:43:16:43:16 | 2 | 2 | +| case.rb:47:1:53:3 | exit case_match_hash | case.rb:48:3:52:5 | case ... | 0 | +| case.rb:47:1:53:3 | exit case_match_hash (abnormal) | case.rb:51:5:51:17 | in ... then ... | 0 | +| case.rb:47:1:53:3 | exit case_match_hash (abnormal) | case.rb:51:8:51:16 | { ..., ** } | 1 | +| case.rb:48:3:52:5 | case ... | case.rb:49:29:49:32 | rest | 0 | +| case.rb:48:3:52:5 | case ... | case.rb:50:16:50:16 | 1 | 1 | +| case.rb:48:3:52:5 | case ... | case.rb:51:8:51:16 | { ..., ** } | 2 | +| case.rb:50:5:50:25 | in ... then ... | case.rb:47:1:53:3 | enter case_match_hash | 0 | +| case.rb:50:5:50:25 | in ... then ... | case.rb:49:8:49:34 | { ..., ** } | 1 | +| case.rb:50:5:50:25 | in ... then ... | case.rb:49:20:49:20 | 1 | 2 | +| case.rb:51:5:51:17 | in ... then ... | case.rb:50:5:50:25 | in ... then ... | 0 | +| case.rb:51:5:51:17 | in ... then ... | case.rb:50:8:50:24 | { ..., ** } | 1 | +| case.rb:51:5:51:17 | in ... then ... | case.rb:50:16:50:16 | 1 | 2 | +| case.rb:56:3:60:5 | case ... | case.rb:55:1:61:3 | enter case_match_variable | 0 | +| case.rb:56:3:60:5 | case ... | case.rb:58:5:58:10 | in ... then ... | 1 | +| case.rb:64:3:66:5 | case ... | case.rb:63:1:67:3 | enter case_match_underscore | 0 | +| case.rb:64:3:66:5 | case ... | case.rb:65:12:65:12 | _ | 1 | +| case.rb:69:1:93:3 | exit case_match_various | case.rb:72:3:92:5 | case ... | 0 | +| case.rb:72:3:92:5 | case ... | case.rb:69:1:93:3 | enter case_match_various | 0 | +| case.rb:72:3:92:5 | case ... | case.rb:74:5:74:11 | in ... then ... | 1 | +| case.rb:72:3:92:5 | case ... | case.rb:75:5:75:15 | in ... then ... | 2 | +| case.rb:72:3:92:5 | case ... | case.rb:76:5:76:18 | in ... then ... | 3 | +| case.rb:72:3:92:5 | case ... | case.rb:77:5:77:18 | in ... then ... | 4 | +| case.rb:72:3:92:5 | case ... | case.rb:78:5:78:19 | in ... then ... | 5 | +| case.rb:72:3:92:5 | case ... | case.rb:79:5:79:14 | in ... then ... | 6 | +| case.rb:72:3:92:5 | case ... | case.rb:80:5:80:12 | in ... then ... | 7 | +| case.rb:72:3:92:5 | case ... | case.rb:81:5:81:11 | in ... then ... | 8 | +| case.rb:72:3:92:5 | case ... | case.rb:82:20:82:20 | 1 | 9 | +| case.rb:72:3:92:5 | case ... | case.rb:83:5:83:26 | in ... then ... | 10 | +| case.rb:72:3:92:5 | case ... | case.rb:83:12:83:15 | ^... | 11 | +| case.rb:72:3:92:5 | case ... | case.rb:83:20:83:25 | string | 12 | +| case.rb:72:3:92:5 | case ... | case.rb:84:5:84:17 | in ... then ... | 13 | +| case.rb:72:3:92:5 | case ... | case.rb:85:5:85:23 | in ... then ... | 14 | +| case.rb:72:3:92:5 | case ... | case.rb:86:5:86:11 | in ... then ... | 15 | +| case.rb:72:3:92:5 | case ... | case.rb:87:5:87:17 | in ... then ... | 16 | +| case.rb:72:3:92:5 | case ... | case.rb:88:5:88:15 | in ... then ... | 17 | +| case.rb:72:3:92:5 | case ... | case.rb:88:14:88:15 | 10 | 18 | +| case.rb:72:3:92:5 | case ... | case.rb:89:5:89:69 | in ... then ... | 19 | +| case.rb:72:3:92:5 | case ... | case.rb:89:14:89:17 | self | 20 | +| case.rb:72:3:92:5 | case ... | case.rb:89:21:89:24 | true | 21 | +| case.rb:72:3:92:5 | case ... | case.rb:89:28:89:32 | false | 22 | +| case.rb:72:3:92:5 | case ... | case.rb:89:36:89:43 | __LINE__ | 23 | +| case.rb:72:3:92:5 | case ... | case.rb:89:47:89:54 | __FILE__ | 24 | +| case.rb:72:3:92:5 | case ... | case.rb:89:58:89:69 | __ENCODING__ | 25 | +| case.rb:72:3:92:5 | case ... | case.rb:90:5:90:13 | in ... then ... | 26 | +| case.rb:72:3:92:5 | case ... | case.rb:91:5:91:25 | in ... then ... | 27 | +| case.rb:72:3:92:5 | case ... | case.rb:91:13:91:14 | "" | 28 | +| case.rb:72:3:92:5 | case ... | case.rb:91:18:91:19 | [ ..., * ] | 29 | +| case.rb:72:3:92:5 | case ... | case.rb:91:23:91:24 | { ..., ** } | 30 | +| case.rb:95:1:99:3 | exit case_match_guard_no_else | case.rb:97:25:97:25 | 6 | 0 | +| cfg.html.erb:18:14:22:16 | if ... | cfg.html.erb:19:19:19:32 | self | 0 | +| cfg.html.erb:18:14:22:16 | if ... | cfg.html.erb:21:19:21:32 | self | 1 | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:42:15:42:24 | self | 0 | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:43:21:43:31 | self | 1 | +| cfg.rb:41:1:45:3 | case ... | cfg.rb:44:8:44:18 | self | 2 | +| cfg.rb:43:3:43:31 | [match] when ... | cfg.rb:43:8:43:8 | 2 | 0 | +| cfg.rb:43:3:43:31 | [match] when ... | cfg.rb:43:11:43:11 | 3 | 1 | +| cfg.rb:43:3:43:31 | [match] when ... | cfg.rb:43:14:43:14 | 4 | 2 | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:48:20:48:29 | self | 0 | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:49:3:49:37 | [false] when ... | 1 | +| cfg.rb:47:1:50:3 | case ... | cfg.rb:49:27:49:37 | self | 2 | +| cfg.rb:49:3:49:37 | [true] when ... | cfg.rb:49:8:49:8 | b | 0 | +| cfg.rb:49:3:49:37 | [true] when ... | cfg.rb:49:16:49:16 | b | 1 | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:60:27:60:31 | hello | 0 | +| cfg.rb:60:17:60:40 | ... ? ... : ... | cfg.rb:60:37:60:39 | bye | 1 | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:75:15:75:15 | 0 | 0 | +| cfg.rb:75:1:75:47 | if ... | cfg.rb:75:17:75:43 | elsif ... | 1 | +| cfg.rb:75:17:75:43 | elsif ... | cfg.rb:75:35:75:36 | 10 | 0 | +| cfg.rb:75:17:75:43 | elsif ... | cfg.rb:75:43:75:43 | x | 1 | +| cfg.rb:90:1:93:3 | exit { ... } (normal) | cfg.rb:91:3:91:24 | if ... | 0 | +| cfg.rb:90:1:93:3 | exit { ... } (normal) | cfg.rb:91:17:91:20 | next | 1 | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:90:5:90:5 | [false] ! ... | 1 | +| cfg.rb:90:5:90:5 | if ... | cfg.rb:90:5:90:5 | x | 0 | +| cfg.rb:101:28:101:30 | key | cfg.rb:101:1:104:3 | enter parameters | 0 | +| cfg.rb:101:28:101:30 | key | cfg.rb:101:24:101:25 | 42 | 1 | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:90:5:90:5 | if ... | 0 | +| cfg.rb:113:1:113:19 | ... if ... | cfg.rb:113:1:113:9 | self | 1 | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:113:1:113:19 | ... if ... | 0 | +| cfg.rb:136:1:136:29 | ... rescue ... | cfg.rb:136:12:136:29 | self | 1 | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:172:21:172:29 | self | 0 | +| cfg.rb:172:1:172:49 | unless ... | cfg.rb:172:36:172:45 | self | 1 | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:172:1:172:49 | unless ... | 0 | +| cfg.rb:174:1:174:23 | ... unless ... | cfg.rb:174:1:174:9 | self | 1 | +| cfg.rb:176:7:176:7 | x | cfg.rb:174:1:174:23 | ... unless ... | 0 | +| cfg.rb:176:7:176:7 | x | cfg.rb:176:17:176:17 | x | 1 | +| cfg.rb:179:30:179:30 | i | cfg.rb:176:1:176:41 | until ... | 0 | +| cfg.rb:179:30:179:30 | i | cfg.rb:179:2:179:13 | self | 1 | +| cfg.rb:182:7:182:7 | x | cfg.rb:179:1:179:36 | ... until ... | 0 | +| cfg.rb:182:7:182:7 | x | cfg.rb:184:3:184:25 | if ... | 1 | +| cfg.rb:183:3:183:3 | x | cfg.rb:182:7:182:7 | x | 0 | +| cfg.rb:183:3:183:3 | x | cfg.rb:184:18:184:21 | redo | 1 | +| cfg.rb:188:30:188:30 | i | cfg.rb:182:1:186:3 | while ... | 0 | +| cfg.rb:188:30:188:30 | i | cfg.rb:188:2:188:13 | self | 1 | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:205:1:205:3 | __synth__0__1 | 0 | +| cfg.rb:205:4:205:5 | if ... | cfg.rb:205:1:205:3 | nil | 0 | +| constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | constant_compound_assign.rb:1:1:22:4 | enter constant_compound_assign.rb | 0 | +| constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | constant_compound_assign.rb:5:22:5:24 | 123 | 1 | +| constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | constant_compound_assign.rb:5:18:5:20 | ... \|\| ... | 0 | +| constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | constant_compound_assign.rb:14:18:14:20 | 123 | 1 | +| constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | constant_compound_assign.rb:14:14:14:16 | ... \|\| ... | 0 | +| constant_compound_assign.rb:19:17:19:19 | ... \|\| ... | constant_compound_assign.rb:19:21:19:23 | 123 | 1 | +| exit.rb:1:1:6:3 | exit m1 | exit.rb:2:3:4:5 | if ... | 0 | +| exit.rb:1:1:6:3 | exit m1 | exit.rb:3:5:3:10 | self | 1 | +| exit.rb:8:1:13:3 | exit m2 | exit.rb:9:3:11:5 | if ... | 0 | +| exit.rb:8:1:13:3 | exit m2 | exit.rb:10:5:10:18 | self | 1 | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:3:5:3:30 | self | 0 | +| ifs.rb:2:3:8:5 | if ... | ifs.rb:4:3:7:35 | elsif ... | 1 | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:5:5:5:17 | self | 0 | +| ifs.rb:4:3:7:35 | elsif ... | ifs.rb:7:5:7:35 | self | 1 | +| ifs.rb:4:9:4:24 | [false] ... and ... | ifs.rb:4:9:4:9 | x | 0 | +| ifs.rb:4:9:4:24 | [false] ... and ... | ifs.rb:4:20:4:20 | x | 1 | +| ifs.rb:4:9:4:38 | [false] ... and ... | ifs.rb:4:9:4:24 | [false] ... and ... | 0 | +| ifs.rb:4:9:4:38 | [false] ... and ... | ifs.rb:4:30:4:38 | [false] ! ... | 1 | +| ifs.rb:11:1:16:3 | exit m2 (normal) | ifs.rb:12:3:14:5 | if ... | 0 | +| ifs.rb:11:1:16:3 | exit m2 (normal) | ifs.rb:13:12:13:12 | 0 | 1 | +| ifs.rb:19:3:24:5 | if ... | ifs.rb:18:1:26:3 | enter m3 | 0 | +| ifs.rb:19:3:24:5 | if ... | ifs.rb:21:5:23:7 | if ... | 1 | +| ifs.rb:21:5:23:7 | if ... | ifs.rb:20:5:20:5 | x | 0 | +| ifs.rb:21:5:23:7 | if ... | ifs.rb:22:7:22:7 | x | 1 | +| ifs.rb:29:10:29:51 | ... ? ... : ... | ifs.rb:29:28:29:35 | b2 \|\| b3 | 0 | +| ifs.rb:29:10:29:51 | ... ? ... : ... | ifs.rb:29:41:29:50 | !b2 \|\| !b3 | 1 | +| ifs.rb:29:11:29:22 | [false] ... ? ... : ... | ifs.rb:29:16:29:17 | b2 | 0 | +| ifs.rb:29:11:29:22 | [false] ... ? ... : ... | ifs.rb:29:21:29:22 | b3 | 1 | +| ifs.rb:29:11:29:22 | [true] ... ? ... : ... | ifs.rb:29:16:29:17 | b2 | 0 | +| ifs.rb:29:11:29:22 | [true] ... ? ... : ... | ifs.rb:29:21:29:22 | b3 | 1 | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:57:33:70 | b2 \|\| b4 \|\| b5 | 0 | +| ifs.rb:33:3:33:100 | if ... | ifs.rb:33:79:33:95 | !b2 \|\| !b4 \|\| !b5 | 1 | +| ifs.rb:33:7:33:48 | [false] if ... | ifs.rb:33:13:33:19 | [false] then ... | 0 | +| ifs.rb:33:7:33:48 | [false] if ... | ifs.rb:33:21:33:44 | [false] elsif ... | 1 | +| ifs.rb:33:7:33:48 | [true] if ... | ifs.rb:33:13:33:19 | [true] then ... | 0 | +| ifs.rb:33:7:33:48 | [true] if ... | ifs.rb:33:21:33:44 | [true] elsif ... | 1 | +| ifs.rb:33:21:33:44 | [false] elsif ... | ifs.rb:33:30:33:36 | [false] then ... | 0 | +| ifs.rb:33:21:33:44 | [false] elsif ... | ifs.rb:33:38:33:44 | [false] else ... | 1 | +| ifs.rb:33:21:33:44 | [true] elsif ... | ifs.rb:33:30:33:36 | [true] then ... | 0 | +| ifs.rb:33:21:33:44 | [true] elsif ... | ifs.rb:33:38:33:44 | [true] else ... | 1 | +| ifs.rb:36:1:38:17 | ... unless ... | ifs.rb:1:1:58:4 | enter ifs.rb | 0 | +| ifs.rb:36:1:38:17 | ... unless ... | ifs.rb:36:1:38:3 | conditional_method_def | 1 | +| ifs.rb:47:3:50:5 | if ... | ifs.rb:48:5:48:15 | self | 0 | +| ifs.rb:47:3:50:5 | if ... | ifs.rb:49:3:49:6 | else ... | 1 | +| ifs.rb:55:3:57:5 | if ... | ifs.rb:55:6:55:15 | [false] ( ... ) | 0 | +| ifs.rb:55:3:57:5 | if ... | ifs.rb:56:5:56:19 | self | 1 | +| ifs.rb:55:7:55:14 | [true] ... \|\| ... | ifs.rb:54:1:58:3 | enter disjunct | 0 | +| ifs.rb:55:7:55:14 | [true] ... \|\| ... | ifs.rb:55:13:55:14 | b2 | 1 | +| loops.rb:2:9:2:9 | x | loops.rb:1:1:6:3 | enter m1 | 0 | +| loops.rb:2:9:2:9 | x | loops.rb:3:5:3:10 | self | 1 | +| loops.rb:9:3:20:5 | while ... | loops.rb:9:9:9:9 | x | 0 | +| loops.rb:9:3:20:5 | while ... | loops.rb:13:7:13:11 | break | 1 | +| loops.rb:9:9:9:9 | x | loops.rb:8:1:22:3 | enter m2 | 0 | +| loops.rb:9:9:9:9 | x | loops.rb:15:7:15:10 | next | 1 | +| loops.rb:9:9:9:9 | x | loops.rb:16:5:17:10 | elsif ... | 2 | +| loops.rb:10:5:10:10 | self | loops.rb:9:9:9:9 | x | 0 | +| loops.rb:10:5:10:10 | self | loops.rb:17:7:17:10 | redo | 1 | +| loops.rb:31:9:31:9 | x | loops.rb:30:1:33:3 | enter m4 | 0 | +| loops.rb:31:9:31:9 | x | loops.rb:31:15:32:5 | do ... | 1 | +| raise.rb:7:1:12:3 | exit m1 | raise.rb:8:3:10:5 | if ... | 0 | +| raise.rb:7:1:12:3 | exit m1 | raise.rb:9:5:9:17 | self | 1 | +| raise.rb:14:1:23:3 | exit m2 | raise.rb:22:3:22:15 | self | 0 | +| raise.rb:22:3:22:15 | self | raise.rb:16:5:18:7 | if ... | 0 | +| raise.rb:22:3:22:15 | self | raise.rb:20:5:20:18 | self | 1 | +| raise.rb:33:3:33:15 | self | raise.rb:27:5:29:7 | if ... | 0 | +| raise.rb:33:3:33:15 | self | raise.rb:28:7:28:22 | self | 1 | +| raise.rb:44:3:44:15 | self | raise.rb:38:5:40:7 | if ... | 0 | +| raise.rb:44:3:44:15 | self | raise.rb:39:7:39:22 | self | 1 | +| raise.rb:54:3:54:15 | self | raise.rb:49:5:51:7 | if ... | 0 | +| raise.rb:54:3:54:15 | self | raise.rb:50:7:50:22 | self | 1 | +| raise.rb:57:1:66:3 | exit m6 | raise.rb:65:3:65:15 | self | 0 | +| raise.rb:62:36:62:36 | e | raise.rb:60:7:60:22 | self | 0 | +| raise.rb:62:36:62:36 | e | raise.rb:62:22:62:31 | ExceptionB | 1 | +| raise.rb:65:3:65:15 | self | raise.rb:59:5:61:7 | if ... | 0 | +| raise.rb:65:3:65:15 | self | raise.rb:62:36:62:36 | e | 1 | +| raise.rb:68:1:77:3 | exit m7 | raise.rb:76:3:76:15 | [ensure: raise] self | 0 | +| raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:72:13:72:17 | x < 0 | 0 | +| raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:76:3:76:15 | self | 1 | +| raise.rb:76:3:76:15 | [ensure: raise] self | raise.rb:68:1:77:3 | enter m7 | 0 | +| raise.rb:76:3:76:15 | [ensure: raise] self | raise.rb:70:5:70:17 | self | 1 | +| raise.rb:76:3:76:15 | [ensure: raise] self | raise.rb:71:3:72:18 | elsif ... | 2 | +| raise.rb:76:3:76:15 | [ensure: raise] self | raise.rb:71:9:71:9 | x | 3 | +| raise.rb:79:1:92:3 | exit m8 | raise.rb:89:5:89:17 | [ensure: raise] self | 0 | +| raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:85:15:85:19 | x < 0 | 0 | +| raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:89:5:89:17 | self | 1 | +| raise.rb:89:5:89:17 | [ensure: raise] self | raise.rb:79:1:92:3 | enter m8 | 0 | +| raise.rb:89:5:89:17 | [ensure: raise] self | raise.rb:83:7:83:19 | self | 1 | +| raise.rb:89:5:89:17 | [ensure: raise] self | raise.rb:84:5:85:20 | elsif ... | 2 | +| raise.rb:89:5:89:17 | [ensure: raise] self | raise.rb:84:11:84:11 | x | 3 | +| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:116:3:118:5 | [ensure: raise] if ... | 0 | +| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:117:5:117:22 | [ensure: raise] self | 2 | +| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:117:5:117:22 | [ensure: return] self | 3 | +| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:117:5:117:22 | self | 1 | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:116:3:118:5 | [ensure: return] if ... | 1 | +| raise.rb:94:1:119:3 | exit m9 (normal) | raise.rb:116:3:118:5 | if ... | 0 | +| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:97:8:97:8 | x | 0 | +| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:98:7:98:19 | self | 1 | +| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:99:5:100:20 | elsif ... | 2 | +| raise.rb:104:5:104:23 | [ensure: raise] self | raise.rb:99:11:99:11 | x | 3 | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:94:1:119:3 | enter m9 | 0 | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:100:15:100:19 | x < 0 | 1 | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:104:5:104:23 | [ensure: raise] self | 3 | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:104:5:104:23 | self | 2 | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:106:7:108:9 | [ensure: raise] if ... | 5 | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:106:7:108:9 | [ensure: return] if ... | 6 | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:106:7:108:9 | if ... | 4 | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:107:9:107:26 | [ensure: raise] self | 8 | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:107:9:107:26 | [ensure: return] self | 9 | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:107:9:107:26 | self | 7 | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:109:5:110:25 | [ensure(1): raise] ensure ... | 11 | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:109:5:110:25 | [ensure: raise, ensure(1): raise] ensure ... | 13 | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:109:5:110:25 | [ensure: raise] ensure ... | 12 | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:109:5:110:25 | [ensure: return, ensure(1): raise] ensure ... | 14 | +| raise.rb:115:3:115:22 | [ensure: raise] self | raise.rb:109:5:110:25 | ensure ... | 10 | +| raise.rb:121:1:126:3 | exit m10 | raise.rb:121:14:121:30 | self | 0 | +| raise.rb:121:1:126:3 | exit m10 | raise.rb:125:3:125:51 | self | 1 | +| raise.rb:128:1:140:3 | exit m11 | raise.rb:137:5:137:17 | [ensure: raise] self | 1 | +| raise.rb:128:1:140:3 | exit m11 | raise.rb:137:5:137:17 | self | 0 | +| raise.rb:137:5:137:17 | self | raise.rb:130:5:132:7 | if ... | 0 | +| raise.rb:137:5:137:17 | self | raise.rb:133:3:133:19 | rescue ... | 1 | +| raise.rb:137:5:137:17 | self | raise.rb:135:5:135:21 | self | 2 | +| raise.rb:142:1:148:3 | exit m12 (normal) | raise.rb:143:3:145:5 | if ... | 0 | +| raise.rb:142:1:148:3 | exit m12 (normal) | raise.rb:144:5:144:12 | self | 1 | +| raise.rb:155:16:155:50 | exit { ... } | raise.rb:155:25:155:32 | self | 1 | +| raise.rb:155:16:155:50 | exit { ... } | raise.rb:155:25:155:48 | ... if ... | 0 | +| raise.rb:160:9:162:7 | exit -> { ... } | raise.rb:161:7:161:14 | self | 1 | +| raise.rb:160:9:162:7 | exit -> { ... } | raise.rb:161:7:161:23 | ... unless ... | 0 | +| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:175:14:175:14 | 1 | 0 | +| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:177:14:177:14 | 2 | 1 | +| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:180:12:180:12 | 3 | 2 | +| raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:172:1:182:3 | enter m16 | 0 | +| raise.rb:174:8:174:23 | [true] ... \|\| ... | raise.rb:174:14:174:15 | b2 | 1 | +| raise.rb:179:10:179:19 | ExceptionA | raise.rb:174:8:174:23 | [false] ... \|\| ... | 0 | +| raise.rb:179:10:179:19 | ExceptionA | raise.rb:174:8:174:23 | [true] ... \|\| ... | 1 | +| raise.rb:179:10:179:19 | ExceptionA | raise.rb:174:14:174:15 | b2 | 2 | diff --git a/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.ql b/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.ql new file mode 100644 index 000000000000..fb265997ab31 --- /dev/null +++ b/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.ql @@ -0,0 +1,23 @@ +import ruby +import codeql.ruby.controlflow.ControlFlowGraph +import codeql.ruby.controlflow.BasicBlocks + +query predicate dominates(BasicBlock bb1, BasicBlock bb2) { bb1.dominates(bb2) } + +query predicate postDominance(BasicBlock bb1, BasicBlock bb2) { bb1.postDominates(bb2) } + +query predicate immediateDominator(BasicBlock bb1, BasicBlock bb2) { + bb1.getImmediateDominator() = bb2 +} + +query predicate controls(ConditionBlock bb1, BasicBlock bb2, SuccessorType t) { + bb1.controls(bb2, t) +} + +query predicate successor(ConditionBlock bb1, BasicBlock bb2, SuccessorType t) { + bb1.getASuccessor(t) = bb2 +} + +query predicate joinBlockPredecessor(JoinBlock bb1, BasicBlock bb2, int i) { + bb1.getJoinBlockPredecessor(i) = bb2 +} diff --git a/rust/ql/lib/codeql/rust/controlflow/BasicBlocks.qll b/rust/ql/lib/codeql/rust/controlflow/BasicBlocks.qll index f87a48a28a5b..4a4b637f3d3d 100644 --- a/rust/ql/lib/codeql/rust/controlflow/BasicBlocks.qll +++ b/rust/ql/lib/codeql/rust/controlflow/BasicBlocks.qll @@ -1,263 +1,16 @@ -private import rust -private import ControlFlowGraph -private import internal.SuccessorType -private import internal.ControlFlowGraphImpl as Impl -private import codeql.rust.elements.internal.generated.Raw -private import codeql.rust.elements.internal.generated.Synth +private import internal.ControlFlowGraphImpl as CfgImpl +private import CfgImpl::BasicBlocks as BasicBlocksImpl -final class BasicBlock = BasicBlockImpl; +final class BasicBlock = BasicBlocksImpl::BasicBlock; -/** - * A basic block, that is, a maximal straight-line sequence of control flow nodes - * without branches or joins. - */ -private class BasicBlockImpl extends TBasicBlockStart { - /** Gets the CFG scope of this basic block. */ - CfgScope getScope() { result = this.getAPredecessor().getScope() } +final class EntryBasicBlock = BasicBlocksImpl::EntryBasicBlock; - /** Gets an immediate successor of this basic block, if any. */ - BasicBlock getASuccessor() { result = this.getASuccessor(_) } +final class ExitBasicBlock = BasicBlocksImpl::ExitBasicBlock; - /** Gets an immediate successor of this basic block of a given type, if any. */ - BasicBlock getASuccessor(SuccessorType t) { - result.getFirstNode() = this.getLastNode().getASuccessor(t) - } +final class AnnotatedExitBasicBlock = BasicBlocksImpl::AnnotatedExitBasicBlock; - /** Gets an immediate predecessor of this basic block, if any. */ - BasicBlock getAPredecessor() { result.getASuccessor() = this } +final class ConditionBasicBlock = BasicBlocksImpl::ConditionBasicBlock; - /** Gets an immediate predecessor of this basic block of a given type, if any. */ - BasicBlock getAPredecessor(SuccessorType t) { result.getASuccessor(t) = this } +final class JoinBasicBlock = BasicBlocksImpl::JoinBasicBlock; - /** Gets the control flow node at a specific (zero-indexed) position in this basic block. */ - CfgNode getNode(int pos) { bbIndex(this.getFirstNode(), result, pos) } - - /** Gets a control flow node in this basic block. */ - CfgNode getANode() { result = this.getNode(_) } - - /** Gets the first control flow node in this basic block. */ - CfgNode getFirstNode() { this = TBasicBlockStart(result) } - - /** Gets the last control flow node in this basic block. */ - CfgNode getLastNode() { result = this.getNode(this.length() - 1) } - - /** Gets the length of this basic block. */ - int length() { result = strictcount(this.getANode()) } - - predicate immediatelyDominates(BasicBlock bb) { bbIDominates(this, bb) } - - predicate strictlyDominates(BasicBlock bb) { bbIDominates+(this, bb) } - - predicate dominates(BasicBlock bb) { - bb = this or - this.strictlyDominates(bb) - } - - predicate inDominanceFrontier(BasicBlock df) { - this.dominatesPredecessor(df) and - not this.strictlyDominates(df) - } - - /** - * Holds if this basic block dominates a predecessor of `df`. - */ - private predicate dominatesPredecessor(BasicBlock df) { this.dominates(df.getAPredecessor()) } - - BasicBlock getImmediateDominator() { bbIDominates(result, this) } - - predicate strictlyPostDominates(BasicBlock bb) { bbIPostDominates+(this, bb) } - - predicate postDominates(BasicBlock bb) { - this.strictlyPostDominates(bb) or - this = bb - } - - /** Holds if this basic block is in a loop in the control flow graph. */ - predicate inLoop() { this.getASuccessor+() = this } - - /** Gets a textual representation of this basic block. */ - string toString() { result = this.getFirstNode().toString() } - - /** Gets the location of this basic block. */ - Location getLocation() { result = this.getFirstNode().getLocation() } -} - -cached -private module Cached { - /** Internal representation of basic blocks. */ - cached - newtype TBasicBlock = TBasicBlockStart(CfgNode cfn) { startsBB(cfn) } - - /** Holds if `cfn` starts a new basic block. */ - private predicate startsBB(CfgNode cfn) { - not exists(cfn.getAPredecessor()) and exists(cfn.getASuccessor()) - or - cfn.isJoin() - or - cfn.getAPredecessor().isBranch() - } - - /** - * Holds if `succ` is a control flow successor of `pred` within - * the same basic block. - */ - private predicate intraBBSucc(CfgNode pred, CfgNode succ) { - succ = pred.getASuccessor() and - not startsBB(succ) - } - - /** - * Holds if `cfn` is the `i`th node in basic block `bb`. - * - * In other words, `i` is the shortest distance from a node `bb` - * that starts a basic block to `cfn` along the `intraBBSucc` relation. - */ - cached - predicate bbIndex(CfgNode bbStart, CfgNode cfn, int i) = - shortestDistances(startsBB/1, intraBBSucc/2)(bbStart, cfn, i) - - /** - * Holds if the first node of basic block `succ` is a control flow - * successor of the last node of basic block `pred`. - */ - private predicate succBB(BasicBlock pred, BasicBlock succ) { succ = pred.getASuccessor() } - - /** Holds if `dom` is an immediate dominator of `bb`. */ - cached - predicate bbIDominates(BasicBlock dom, BasicBlock bb) = - idominance(entryBB/1, succBB/2)(_, dom, bb) - - /** Holds if `pred` is a basic block predecessor of `succ`. */ - private predicate predBB(BasicBlock succ, BasicBlock pred) { succBB(pred, succ) } - - /** Holds if `bb` is an exit basic block that represents normal exit. */ - private predicate normalExitBB(BasicBlock bb) { - bb.getANode().(Impl::AnnotatedExitNode).isNormal() - } - - /** Holds if `dom` is an immediate post-dominator of `bb`. */ - cached - predicate bbIPostDominates(BasicBlock dom, BasicBlock bb) = - idominance(normalExitBB/1, predBB/2)(_, dom, bb) - - /** - * Gets the `i`th predecessor of join block `jb`, with respect to some - * arbitrary order. - */ - cached - JoinBlockPredecessor getJoinBlockPredecessor(JoinBlock jb, int i) { - result = - rank[i + 1](JoinBlockPredecessor jbp | - jbp = jb.getAPredecessor() - | - jbp order by JoinBlockPredecessors::getId(jbp), JoinBlockPredecessors::getSplitString(jbp) - ) - } -} - -private import Cached - -/** Holds if `bb` is an entry basic block. */ -private predicate entryBB(BasicBlock bb) { bb.getFirstNode() instanceof Impl::EntryNode } - -/** - * An entry basic block, that is, a basic block whose first node is - * an entry node. - */ -class EntryBasicBlock extends BasicBlockImpl { - EntryBasicBlock() { entryBB(this) } - - override CfgScope getScope() { - this.getFirstNode() = any(Impl::EntryNode node | node.getScope() = result) - } -} - -/** - * An annotated exit basic block, that is, a basic block whose last node is - * an annotated exit node. - */ -class AnnotatedExitBasicBlock extends BasicBlockImpl { - private boolean normal; - - AnnotatedExitBasicBlock() { - exists(Impl::AnnotatedExitNode n | - n = this.getANode() and - if n.isNormal() then normal = true else normal = false - ) - } - - /** Holds if this block represent a normal exit. */ - final predicate isNormal() { normal = true } -} - -/** - * An exit basic block, that is, a basic block whose last node is - * an exit node. - */ -class ExitBasicBlock extends BasicBlockImpl { - ExitBasicBlock() { this.getLastNode() instanceof Impl::ExitNode } -} - -private module JoinBlockPredecessors { - private predicate id(Raw::AstNode x, Raw::AstNode y) { x = y } - - private predicate idOfDbAstNode(Raw::AstNode x, int y) = equivalenceRelation(id/2)(x, y) - - // TODO: does not work if fresh ipa entities (`ipa: on:`) turn out to be first of the block - private predicate idOf(AstNode x, int y) { idOfDbAstNode(Synth::convertAstNodeToRaw(x), y) } - - int getId(JoinBlockPredecessor jbp) { - idOf(jbp.getFirstNode().(Impl::AstCfgNode).getAstNode(), result) - or - idOf(jbp.(EntryBasicBlock).getScope(), result) - } - - string getSplitString(JoinBlockPredecessor jbp) { - result = jbp.getFirstNode().(Impl::AstCfgNode).getSplitsString() - or - not exists(jbp.getFirstNode().(Impl::AstCfgNode).getSplitsString()) and - result = "" - } -} - -/** A basic block with more than one predecessor. */ -class JoinBlock extends BasicBlockImpl { - JoinBlock() { this.getFirstNode().isJoin() } - - /** - * Gets the `i`th predecessor of this join block, with respect to some - * arbitrary order. - */ - JoinBlockPredecessor getJoinBlockPredecessor(int i) { result = getJoinBlockPredecessor(this, i) } -} - -/** A basic block that is an immediate predecessor of a join block. */ -class JoinBlockPredecessor extends BasicBlockImpl { - JoinBlockPredecessor() { this.getASuccessor() instanceof JoinBlock } -} - -/** A basic block that terminates in a condition, splitting the subsequent control flow. */ -class ConditionBlock extends BasicBlockImpl { - ConditionBlock() { this.getLastNode().isCondition() } - - /** - * Holds if basic block `succ` is immediately controlled by this basic - * block with conditional value `s`. That is, `succ` is an immediate - * successor of this block, and `succ` can only be reached from - * the callable entry point by going via the `s` edge out of this basic block. - */ - pragma[nomagic] - predicate immediatelyControls(BasicBlock succ, SuccessorType s) { - succ = this.getASuccessor(s) and - forall(BasicBlock pred | pred = succ.getAPredecessor() and pred != this | succ.dominates(pred)) - } - - /** - * Holds if basic block `controlled` is controlled by this basic block with - * conditional value `s`. That is, `controlled` can only be reached from - * the callable entry point by going via the `s` edge out of this basic block. - */ - predicate controls(BasicBlock controlled, BooleanSuccessor s) { - exists(BasicBlock succ | this.immediatelyControls(succ, s) | succ.dominates(controlled)) - } -} +final class JoinPredecessorBasicBlock = BasicBlocksImpl::JoinPredecessorBasicBlock; diff --git a/rust/ql/lib/codeql/rust/controlflow/ControlFlowGraph.qll b/rust/ql/lib/codeql/rust/controlflow/ControlFlowGraph.qll index 20f1af4a4afb..eb8dbdea39f7 100644 --- a/rust/ql/lib/codeql/rust/controlflow/ControlFlowGraph.qll +++ b/rust/ql/lib/codeql/rust/controlflow/ControlFlowGraph.qll @@ -1,11 +1,8 @@ /** Provides classes representing the control flow graph. */ -private import rust private import internal.ControlFlowGraphImpl -private import internal.Completion private import internal.SuccessorType private import internal.Scope as Scope -private import BasicBlocks final class CfgScope = Scope::CfgScope; @@ -25,30 +22,4 @@ final class ContinueSuccessor = ContinueSuccessorImpl; final class ReturnSuccessor = ReturnSuccessorImpl; -/** - * A control flow node. - * - * A control flow node is a node in the control flow graph (CFG). There is a - * many-to-one relationship between CFG nodes and AST nodes. - * - * Only nodes that can be reached from an entry point are included in the CFG. - */ -final class CfgNode extends Node { - /** Gets the file of this control flow node. */ - File getFile() { result = this.getLocation().getFile() } - - /** Gets a successor node of a given type, if any. */ - CfgNode getASuccessor(SuccessorType t) { result = super.getASuccessor(t) } - - /** Gets an immediate successor, if any. */ - CfgNode getASuccessor() { result = this.getASuccessor(_) } - - /** Gets an immediate predecessor node of a given flow type, if any. */ - CfgNode getAPredecessor(SuccessorType t) { result.getASuccessor(t) = this } - - /** Gets an immediate predecessor, if any. */ - CfgNode getAPredecessor() { result = this.getAPredecessor(_) } - - /** Gets the basic block that this control flow node belongs to. */ - BasicBlock getBasicBlock() { result.getANode() = this } -} +final class CfgNode = Node; diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index b999c5c78488..516efe1ea024 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -3,6 +3,8 @@ import codeql.controlflow.Cfg import Completion private import Scope as Scope private import codeql.rust.controlflow.ControlFlowGraph as Cfg +private import codeql.rust.elements.internal.generated.Raw +private import codeql.rust.elements.internal.generated.Synth private module CfgInput implements InputSig { private import codeql.rust.internal.CachedStages @@ -48,6 +50,15 @@ private module CfgInput implements InputSig { /** Holds if `scope` is exited when `last` finishes with completion `c`. */ predicate scopeLast(CfgScope scope, AstNode last, Completion c) { scope.scopeLast(last, c) } + + private predicate id(Raw::AstNode x, Raw::AstNode y) { x = y } + + private predicate idOfDbAstNode(Raw::AstNode x, int y) = equivalenceRelation(id/2)(x, y) + + // TODO: does not work if fresh ipa entities (`ipa: on:`) turn out to be first of the block + int idOfAstNode(AstNode node) { idOfDbAstNode(Synth::convertAstNodeToRaw(node), result) } + + int idOfCfgScope(CfgScope node) { result = idOfAstNode(node) } } private module CfgSplittingInput implements SplittingInputSig { diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll index f2078999e60d..0ed5c3ee2a17 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll @@ -488,7 +488,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu /** Holds if the guard `guard` controls block `bb` upon evaluating to `branch`. */ predicate guardControlsBlock(Guard guard, SsaInput::BasicBlock bb, boolean branch) { - exists(ConditionBlock conditionBlock, ConditionalSuccessor s | + exists(ConditionBasicBlock conditionBlock, ConditionalSuccessor s | guard = conditionBlock.getLastNode() and s.getValue() = branch and conditionBlock.controls(bb, s) diff --git a/rust/ql/test/library-tests/controlflow/BasicBlocks.expected b/rust/ql/test/library-tests/controlflow/BasicBlocks.expected new file mode 100644 index 000000000000..a1e189a99e09 --- /dev/null +++ b/rust/ql/test/library-tests/controlflow/BasicBlocks.expected @@ -0,0 +1,1900 @@ +dominates +| test.rs:5:5:8:5 | enter fn function_call | test.rs:5:5:8:5 | enter fn function_call | +| test.rs:10:5:13:5 | enter fn method_call | test.rs:10:5:13:5 | enter fn method_call | +| test.rs:18:5:24:5 | enter fn next | test.rs:18:5:24:5 | enter fn next | +| test.rs:18:5:24:5 | enter fn next | test.rs:19:9:23:9 | if ... {...} else {...} | +| test.rs:18:5:24:5 | enter fn next | test.rs:20:13:20:13 | n | +| test.rs:18:5:24:5 | enter fn next | test.rs:22:13:22:13 | 3 | +| test.rs:19:9:23:9 | if ... {...} else {...} | test.rs:19:9:23:9 | if ... {...} else {...} | +| test.rs:20:13:20:13 | n | test.rs:20:13:20:13 | n | +| test.rs:22:13:22:13 | 3 | test.rs:22:13:22:13 | 3 | +| test.rs:26:5:42:5 | enter fn test_break_and_continue | test.rs:26:5:42:5 | enter fn test_break_and_continue | +| test.rs:26:5:42:5 | enter fn test_break_and_continue | test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | +| test.rs:26:5:42:5 | enter fn test_break_and_continue | test.rs:29:13:29:24 | ExprStmt | +| test.rs:26:5:42:5 | enter fn test_break_and_continue | test.rs:30:13:32:13 | if ... {...} | +| test.rs:26:5:42:5 | enter fn test_break_and_continue | test.rs:31:17:31:29 | ExprStmt | +| test.rs:26:5:42:5 | enter fn test_break_and_continue | test.rs:33:13:35:13 | if ... {...} | +| test.rs:26:5:42:5 | enter fn test_break_and_continue | test.rs:34:17:34:22 | ExprStmt | +| test.rs:26:5:42:5 | enter fn test_break_and_continue | test.rs:36:13:38:13 | if ... {...} | +| test.rs:26:5:42:5 | enter fn test_break_and_continue | test.rs:37:17:37:25 | ExprStmt | +| test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | +| test.rs:29:13:29:24 | ExprStmt | test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | +| test.rs:29:13:29:24 | ExprStmt | test.rs:29:13:29:24 | ExprStmt | +| test.rs:29:13:29:24 | ExprStmt | test.rs:30:13:32:13 | if ... {...} | +| test.rs:29:13:29:24 | ExprStmt | test.rs:31:17:31:29 | ExprStmt | +| test.rs:29:13:29:24 | ExprStmt | test.rs:33:13:35:13 | if ... {...} | +| test.rs:29:13:29:24 | ExprStmt | test.rs:34:17:34:22 | ExprStmt | +| test.rs:29:13:29:24 | ExprStmt | test.rs:36:13:38:13 | if ... {...} | +| test.rs:29:13:29:24 | ExprStmt | test.rs:37:17:37:25 | ExprStmt | +| test.rs:30:13:32:13 | if ... {...} | test.rs:30:13:32:13 | if ... {...} | +| test.rs:30:13:32:13 | if ... {...} | test.rs:33:13:35:13 | if ... {...} | +| test.rs:30:13:32:13 | if ... {...} | test.rs:34:17:34:22 | ExprStmt | +| test.rs:30:13:32:13 | if ... {...} | test.rs:36:13:38:13 | if ... {...} | +| test.rs:30:13:32:13 | if ... {...} | test.rs:37:17:37:25 | ExprStmt | +| test.rs:31:17:31:29 | ExprStmt | test.rs:31:17:31:29 | ExprStmt | +| test.rs:33:13:35:13 | if ... {...} | test.rs:33:13:35:13 | if ... {...} | +| test.rs:33:13:35:13 | if ... {...} | test.rs:36:13:38:13 | if ... {...} | +| test.rs:33:13:35:13 | if ... {...} | test.rs:37:17:37:25 | ExprStmt | +| test.rs:34:17:34:22 | ExprStmt | test.rs:34:17:34:22 | ExprStmt | +| test.rs:36:13:38:13 | if ... {...} | test.rs:36:13:38:13 | if ... {...} | +| test.rs:37:17:37:25 | ExprStmt | test.rs:37:17:37:25 | ExprStmt | +| test.rs:44:5:56:5 | enter fn test_break_with_labels | test.rs:44:5:56:5 | enter fn test_break_with_labels | +| test.rs:44:5:56:5 | enter fn test_break_with_labels | test.rs:46:13:53:13 | 'inner: loop { ... } | +| test.rs:44:5:56:5 | enter fn test_break_with_labels | test.rs:47:17:51:17 | ExprStmt | +| test.rs:44:5:56:5 | enter fn test_break_with_labels | test.rs:48:21:48:26 | ExprStmt | +| test.rs:44:5:56:5 | enter fn test_break_with_labels | test.rs:49:24:51:17 | if b {...} | +| test.rs:44:5:56:5 | enter fn test_break_with_labels | test.rs:49:27:49:27 | b | +| test.rs:44:5:56:5 | enter fn test_break_with_labels | test.rs:50:21:50:33 | ExprStmt | +| test.rs:46:13:53:13 | 'inner: loop { ... } | test.rs:46:13:53:13 | 'inner: loop { ... } | +| test.rs:47:17:51:17 | ExprStmt | test.rs:46:13:53:13 | 'inner: loop { ... } | +| test.rs:47:17:51:17 | ExprStmt | test.rs:47:17:51:17 | ExprStmt | +| test.rs:47:17:51:17 | ExprStmt | test.rs:48:21:48:26 | ExprStmt | +| test.rs:47:17:51:17 | ExprStmt | test.rs:49:24:51:17 | if b {...} | +| test.rs:47:17:51:17 | ExprStmt | test.rs:49:27:49:27 | b | +| test.rs:47:17:51:17 | ExprStmt | test.rs:50:21:50:33 | ExprStmt | +| test.rs:48:21:48:26 | ExprStmt | test.rs:48:21:48:26 | ExprStmt | +| test.rs:49:24:51:17 | if b {...} | test.rs:49:24:51:17 | if b {...} | +| test.rs:49:27:49:27 | b | test.rs:49:24:51:17 | if b {...} | +| test.rs:49:27:49:27 | b | test.rs:49:27:49:27 | b | +| test.rs:49:27:49:27 | b | test.rs:50:21:50:33 | ExprStmt | +| test.rs:50:21:50:33 | ExprStmt | test.rs:50:21:50:33 | ExprStmt | +| test.rs:58:5:70:5 | enter fn test_continue_with_labels | test.rs:58:5:70:5 | enter fn test_continue_with_labels | +| test.rs:58:5:70:5 | enter fn test_continue_with_labels | test.rs:60:13:60:14 | ExprStmt | +| test.rs:58:5:70:5 | enter fn test_continue_with_labels | test.rs:62:17:66:17 | ExprStmt | +| test.rs:58:5:70:5 | enter fn test_continue_with_labels | test.rs:63:21:63:29 | ExprStmt | +| test.rs:58:5:70:5 | enter fn test_continue_with_labels | test.rs:64:24:66:17 | if b {...} | +| test.rs:58:5:70:5 | enter fn test_continue_with_labels | test.rs:64:27:64:27 | b | +| test.rs:58:5:70:5 | enter fn test_continue_with_labels | test.rs:65:21:65:36 | ExprStmt | +| test.rs:60:13:60:14 | ExprStmt | test.rs:60:13:60:14 | ExprStmt | +| test.rs:60:13:60:14 | ExprStmt | test.rs:62:17:66:17 | ExprStmt | +| test.rs:60:13:60:14 | ExprStmt | test.rs:63:21:63:29 | ExprStmt | +| test.rs:60:13:60:14 | ExprStmt | test.rs:64:24:66:17 | if b {...} | +| test.rs:60:13:60:14 | ExprStmt | test.rs:64:27:64:27 | b | +| test.rs:60:13:60:14 | ExprStmt | test.rs:65:21:65:36 | ExprStmt | +| test.rs:62:17:66:17 | ExprStmt | test.rs:62:17:66:17 | ExprStmt | +| test.rs:62:17:66:17 | ExprStmt | test.rs:63:21:63:29 | ExprStmt | +| test.rs:62:17:66:17 | ExprStmt | test.rs:64:24:66:17 | if b {...} | +| test.rs:62:17:66:17 | ExprStmt | test.rs:64:27:64:27 | b | +| test.rs:62:17:66:17 | ExprStmt | test.rs:65:21:65:36 | ExprStmt | +| test.rs:63:21:63:29 | ExprStmt | test.rs:63:21:63:29 | ExprStmt | +| test.rs:64:24:66:17 | if b {...} | test.rs:64:24:66:17 | if b {...} | +| test.rs:64:27:64:27 | b | test.rs:64:24:66:17 | if b {...} | +| test.rs:64:27:64:27 | b | test.rs:64:27:64:27 | b | +| test.rs:64:27:64:27 | b | test.rs:65:21:65:36 | ExprStmt | +| test.rs:65:21:65:36 | ExprStmt | test.rs:65:21:65:36 | ExprStmt | +| test.rs:72:5:84:5 | enter fn test_loop_label_shadowing | test.rs:72:5:84:5 | enter fn test_loop_label_shadowing | +| test.rs:72:5:84:5 | enter fn test_loop_label_shadowing | test.rs:76:17:80:17 | ExprStmt | +| test.rs:72:5:84:5 | enter fn test_loop_label_shadowing | test.rs:77:21:77:29 | ExprStmt | +| test.rs:72:5:84:5 | enter fn test_loop_label_shadowing | test.rs:78:24:80:17 | if b {...} | +| test.rs:72:5:84:5 | enter fn test_loop_label_shadowing | test.rs:78:27:78:27 | b | +| test.rs:72:5:84:5 | enter fn test_loop_label_shadowing | test.rs:79:21:79:36 | ExprStmt | +| test.rs:76:17:80:17 | ExprStmt | test.rs:76:17:80:17 | ExprStmt | +| test.rs:76:17:80:17 | ExprStmt | test.rs:77:21:77:29 | ExprStmt | +| test.rs:76:17:80:17 | ExprStmt | test.rs:78:24:80:17 | if b {...} | +| test.rs:76:17:80:17 | ExprStmt | test.rs:78:27:78:27 | b | +| test.rs:76:17:80:17 | ExprStmt | test.rs:79:21:79:36 | ExprStmt | +| test.rs:77:21:77:29 | ExprStmt | test.rs:77:21:77:29 | ExprStmt | +| test.rs:78:24:80:17 | if b {...} | test.rs:78:24:80:17 | if b {...} | +| test.rs:78:27:78:27 | b | test.rs:78:24:80:17 | if b {...} | +| test.rs:78:27:78:27 | b | test.rs:78:27:78:27 | b | +| test.rs:78:27:78:27 | b | test.rs:79:21:79:36 | ExprStmt | +| test.rs:79:21:79:36 | ExprStmt | test.rs:79:21:79:36 | ExprStmt | +| test.rs:86:5:95:5 | enter fn test_while | test.rs:86:5:95:5 | enter fn test_while | +| test.rs:86:5:95:5 | enter fn test_while | test.rs:88:9:94:9 | while b { ... } | +| test.rs:86:5:95:5 | enter fn test_while | test.rs:88:15:88:15 | b | +| test.rs:86:5:95:5 | enter fn test_while | test.rs:89:13:89:14 | ExprStmt | +| test.rs:86:5:95:5 | enter fn test_while | test.rs:90:13:92:13 | if ... {...} | +| test.rs:86:5:95:5 | enter fn test_while | test.rs:91:17:91:22 | ExprStmt | +| test.rs:88:9:94:9 | while b { ... } | test.rs:88:9:94:9 | while b { ... } | +| test.rs:88:15:88:15 | b | test.rs:88:9:94:9 | while b { ... } | +| test.rs:88:15:88:15 | b | test.rs:88:15:88:15 | b | +| test.rs:88:15:88:15 | b | test.rs:89:13:89:14 | ExprStmt | +| test.rs:88:15:88:15 | b | test.rs:90:13:92:13 | if ... {...} | +| test.rs:88:15:88:15 | b | test.rs:91:17:91:22 | ExprStmt | +| test.rs:89:13:89:14 | ExprStmt | test.rs:89:13:89:14 | ExprStmt | +| test.rs:89:13:89:14 | ExprStmt | test.rs:90:13:92:13 | if ... {...} | +| test.rs:89:13:89:14 | ExprStmt | test.rs:91:17:91:22 | ExprStmt | +| test.rs:90:13:92:13 | if ... {...} | test.rs:90:13:92:13 | if ... {...} | +| test.rs:91:17:91:22 | ExprStmt | test.rs:91:17:91:22 | ExprStmt | +| test.rs:97:5:104:5 | enter fn test_while_let | test.rs:97:5:104:5 | enter fn test_while_let | +| test.rs:97:5:104:5 | enter fn test_while_let | test.rs:99:9:103:9 | while ... { ... } | +| test.rs:97:5:104:5 | enter fn test_while_let | test.rs:99:15:99:39 | let ... = ... | +| test.rs:97:5:104:5 | enter fn test_while_let | test.rs:99:24:99:24 | x | +| test.rs:97:5:104:5 | enter fn test_while_let | test.rs:100:13:102:13 | if ... {...} | +| test.rs:97:5:104:5 | enter fn test_while_let | test.rs:101:17:101:22 | ExprStmt | +| test.rs:99:9:103:9 | while ... { ... } | test.rs:99:9:103:9 | while ... { ... } | +| test.rs:99:15:99:39 | let ... = ... | test.rs:99:9:103:9 | while ... { ... } | +| test.rs:99:15:99:39 | let ... = ... | test.rs:99:15:99:39 | let ... = ... | +| test.rs:99:15:99:39 | let ... = ... | test.rs:99:24:99:24 | x | +| test.rs:99:15:99:39 | let ... = ... | test.rs:100:13:102:13 | if ... {...} | +| test.rs:99:15:99:39 | let ... = ... | test.rs:101:17:101:22 | ExprStmt | +| test.rs:99:24:99:24 | x | test.rs:99:24:99:24 | x | +| test.rs:99:24:99:24 | x | test.rs:100:13:102:13 | if ... {...} | +| test.rs:99:24:99:24 | x | test.rs:101:17:101:22 | ExprStmt | +| test.rs:100:13:102:13 | if ... {...} | test.rs:100:13:102:13 | if ... {...} | +| test.rs:101:17:101:22 | ExprStmt | test.rs:101:17:101:22 | ExprStmt | +| test.rs:106:5:113:5 | enter fn test_for | test.rs:106:5:113:5 | enter fn test_for | +| test.rs:106:5:113:5 | enter fn test_for | test.rs:107:9:112:9 | for ... in ... { ... } | +| test.rs:106:5:113:5 | enter fn test_for | test.rs:107:13:107:13 | i | +| test.rs:106:5:113:5 | enter fn test_for | test.rs:108:13:110:13 | ExprStmt | +| test.rs:106:5:113:5 | enter fn test_for | test.rs:108:13:110:13 | if ... {...} | +| test.rs:106:5:113:5 | enter fn test_for | test.rs:109:17:109:22 | ExprStmt | +| test.rs:107:9:112:9 | for ... in ... { ... } | test.rs:107:9:112:9 | for ... in ... { ... } | +| test.rs:107:13:107:13 | i | test.rs:107:9:112:9 | for ... in ... { ... } | +| test.rs:107:13:107:13 | i | test.rs:107:13:107:13 | i | +| test.rs:107:13:107:13 | i | test.rs:108:13:110:13 | ExprStmt | +| test.rs:107:13:107:13 | i | test.rs:108:13:110:13 | if ... {...} | +| test.rs:107:13:107:13 | i | test.rs:109:17:109:22 | ExprStmt | +| test.rs:108:13:110:13 | ExprStmt | test.rs:108:13:110:13 | ExprStmt | +| test.rs:108:13:110:13 | ExprStmt | test.rs:108:13:110:13 | if ... {...} | +| test.rs:108:13:110:13 | ExprStmt | test.rs:109:17:109:22 | ExprStmt | +| test.rs:108:13:110:13 | if ... {...} | test.rs:108:13:110:13 | if ... {...} | +| test.rs:109:17:109:22 | ExprStmt | test.rs:109:17:109:22 | ExprStmt | +| test.rs:115:5:119:5 | enter fn break_with_return | test.rs:115:5:119:5 | enter fn break_with_return | +| test.rs:122:1:125:1 | enter fn test_nested_function | test.rs:122:1:125:1 | enter fn test_nested_function | +| test.rs:123:19:123:27 | enter \|...\| ... | test.rs:123:19:123:27 | enter \|...\| ... | +| test.rs:129:5:135:5 | enter fn test_if_else | test.rs:129:5:135:5 | enter fn test_if_else | +| test.rs:129:5:135:5 | enter fn test_if_else | test.rs:130:9:134:9 | if ... {...} else {...} | +| test.rs:129:5:135:5 | enter fn test_if_else | test.rs:131:13:131:13 | 0 | +| test.rs:129:5:135:5 | enter fn test_if_else | test.rs:133:13:133:13 | n | +| test.rs:130:9:134:9 | if ... {...} else {...} | test.rs:130:9:134:9 | if ... {...} else {...} | +| test.rs:131:13:131:13 | 0 | test.rs:131:13:131:13 | 0 | +| test.rs:133:13:133:13 | n | test.rs:133:13:133:13 | n | +| test.rs:137:5:143:5 | enter fn test_if_let_else | test.rs:137:5:143:5 | enter fn test_if_let_else | +| test.rs:137:5:143:5 | enter fn test_if_let_else | test.rs:138:9:142:9 | if ... {...} else {...} | +| test.rs:137:5:143:5 | enter fn test_if_let_else | test.rs:138:21:138:21 | n | +| test.rs:137:5:143:5 | enter fn test_if_let_else | test.rs:141:13:141:13 | 0 | +| test.rs:138:9:142:9 | if ... {...} else {...} | test.rs:138:9:142:9 | if ... {...} else {...} | +| test.rs:138:21:138:21 | n | test.rs:138:21:138:21 | n | +| test.rs:141:13:141:13 | 0 | test.rs:141:13:141:13 | 0 | +| test.rs:145:5:150:5 | enter fn test_if_let | test.rs:145:5:150:5 | enter fn test_if_let | +| test.rs:145:5:150:5 | enter fn test_if_let | test.rs:145:5:150:5 | exit fn test_if_let (normal) | +| test.rs:145:5:150:5 | enter fn test_if_let | test.rs:146:9:148:9 | if ... {...} | +| test.rs:145:5:150:5 | enter fn test_if_let | test.rs:146:21:146:21 | n | +| test.rs:145:5:150:5 | exit fn test_if_let (normal) | test.rs:145:5:150:5 | exit fn test_if_let (normal) | +| test.rs:146:9:148:9 | if ... {...} | test.rs:146:9:148:9 | if ... {...} | +| test.rs:146:21:146:21 | n | test.rs:146:21:146:21 | n | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:152:5:158:5 | enter fn test_nested_if | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:9:157:9 | if ... {...} else {...} | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:22:153:32 | [boolean(false)] { ... } | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:22:153:32 | [boolean(true)] { ... } | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:24:153:24 | a | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:39:153:48 | [boolean(false)] { ... } | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:39:153:48 | [boolean(true)] { ... } | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:41:153:41 | a | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:154:13:154:13 | 1 | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:156:13:156:13 | 0 | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:153:9:157:9 | if ... {...} else {...} | +| test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | +| test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | test.rs:156:13:156:13 | 0 | +| test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | +| test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | test.rs:154:13:154:13 | 1 | +| test.rs:153:22:153:32 | [boolean(false)] { ... } | test.rs:153:22:153:32 | [boolean(false)] { ... } | +| test.rs:153:22:153:32 | [boolean(true)] { ... } | test.rs:153:22:153:32 | [boolean(true)] { ... } | +| test.rs:153:24:153:24 | a | test.rs:153:22:153:32 | [boolean(false)] { ... } | +| test.rs:153:24:153:24 | a | test.rs:153:22:153:32 | [boolean(true)] { ... } | +| test.rs:153:24:153:24 | a | test.rs:153:24:153:24 | a | +| test.rs:153:39:153:48 | [boolean(false)] { ... } | test.rs:153:39:153:48 | [boolean(false)] { ... } | +| test.rs:153:39:153:48 | [boolean(true)] { ... } | test.rs:153:39:153:48 | [boolean(true)] { ... } | +| test.rs:153:41:153:41 | a | test.rs:153:39:153:48 | [boolean(false)] { ... } | +| test.rs:153:41:153:41 | a | test.rs:153:39:153:48 | [boolean(true)] { ... } | +| test.rs:153:41:153:41 | a | test.rs:153:41:153:41 | a | +| test.rs:154:13:154:13 | 1 | test.rs:154:13:154:13 | 1 | +| test.rs:156:13:156:13 | 0 | test.rs:156:13:156:13 | 0 | +| test.rs:160:5:169:5 | enter fn test_nested_if_match | test.rs:160:5:169:5 | enter fn test_nested_if_match | +| test.rs:160:5:169:5 | enter fn test_nested_if_match | test.rs:161:9:168:9 | if ... {...} else {...} | +| test.rs:160:5:169:5 | enter fn test_nested_if_match | test.rs:161:13:164:9 | [boolean(false)] match a { ... } | +| test.rs:160:5:169:5 | enter fn test_nested_if_match | test.rs:161:13:164:9 | [boolean(true)] match a { ... } | +| test.rs:160:5:169:5 | enter fn test_nested_if_match | test.rs:162:18:162:21 | true | +| test.rs:160:5:169:5 | enter fn test_nested_if_match | test.rs:163:13:163:13 | _ | +| test.rs:160:5:169:5 | enter fn test_nested_if_match | test.rs:165:13:165:13 | 1 | +| test.rs:160:5:169:5 | enter fn test_nested_if_match | test.rs:167:13:167:13 | 0 | +| test.rs:161:9:168:9 | if ... {...} else {...} | test.rs:161:9:168:9 | if ... {...} else {...} | +| test.rs:161:13:164:9 | [boolean(false)] match a { ... } | test.rs:161:13:164:9 | [boolean(false)] match a { ... } | +| test.rs:161:13:164:9 | [boolean(false)] match a { ... } | test.rs:167:13:167:13 | 0 | +| test.rs:161:13:164:9 | [boolean(true)] match a { ... } | test.rs:161:13:164:9 | [boolean(true)] match a { ... } | +| test.rs:161:13:164:9 | [boolean(true)] match a { ... } | test.rs:165:13:165:13 | 1 | +| test.rs:162:18:162:21 | true | test.rs:161:13:164:9 | [boolean(true)] match a { ... } | +| test.rs:162:18:162:21 | true | test.rs:162:18:162:21 | true | +| test.rs:162:18:162:21 | true | test.rs:165:13:165:13 | 1 | +| test.rs:163:13:163:13 | _ | test.rs:161:13:164:9 | [boolean(false)] match a { ... } | +| test.rs:163:13:163:13 | _ | test.rs:163:13:163:13 | _ | +| test.rs:163:13:163:13 | _ | test.rs:167:13:167:13 | 0 | +| test.rs:165:13:165:13 | 1 | test.rs:165:13:165:13 | 1 | +| test.rs:167:13:167:13 | 0 | test.rs:167:13:167:13 | 0 | +| test.rs:171:5:180:5 | enter fn test_nested_if_block | test.rs:171:5:180:5 | enter fn test_nested_if_block | +| test.rs:171:5:180:5 | enter fn test_nested_if_block | test.rs:172:9:179:9 | if ... {...} else {...} | +| test.rs:171:5:180:5 | enter fn test_nested_if_block | test.rs:172:12:175:9 | [boolean(false)] { ... } | +| test.rs:171:5:180:5 | enter fn test_nested_if_block | test.rs:172:12:175:9 | [boolean(true)] { ... } | +| test.rs:171:5:180:5 | enter fn test_nested_if_block | test.rs:176:13:176:13 | 1 | +| test.rs:171:5:180:5 | enter fn test_nested_if_block | test.rs:178:13:178:13 | 0 | +| test.rs:172:9:179:9 | if ... {...} else {...} | test.rs:172:9:179:9 | if ... {...} else {...} | +| test.rs:172:12:175:9 | [boolean(false)] { ... } | test.rs:172:12:175:9 | [boolean(false)] { ... } | +| test.rs:172:12:175:9 | [boolean(false)] { ... } | test.rs:178:13:178:13 | 0 | +| test.rs:172:12:175:9 | [boolean(true)] { ... } | test.rs:172:12:175:9 | [boolean(true)] { ... } | +| test.rs:172:12:175:9 | [boolean(true)] { ... } | test.rs:176:13:176:13 | 1 | +| test.rs:176:13:176:13 | 1 | test.rs:176:13:176:13 | 1 | +| test.rs:178:13:178:13 | 0 | test.rs:178:13:178:13 | 0 | +| test.rs:182:5:192:5 | enter fn test_if_assignment | test.rs:182:5:192:5 | enter fn test_if_assignment | +| test.rs:182:5:192:5 | enter fn test_if_assignment | test.rs:184:9:191:9 | if ... {...} else {...} | +| test.rs:182:5:192:5 | enter fn test_if_assignment | test.rs:184:12:187:9 | [boolean(false)] { ... } | +| test.rs:182:5:192:5 | enter fn test_if_assignment | test.rs:184:12:187:9 | [boolean(true)] { ... } | +| test.rs:182:5:192:5 | enter fn test_if_assignment | test.rs:188:13:188:13 | 1 | +| test.rs:182:5:192:5 | enter fn test_if_assignment | test.rs:190:13:190:13 | 0 | +| test.rs:184:9:191:9 | if ... {...} else {...} | test.rs:184:9:191:9 | if ... {...} else {...} | +| test.rs:184:12:187:9 | [boolean(false)] { ... } | test.rs:184:12:187:9 | [boolean(false)] { ... } | +| test.rs:184:12:187:9 | [boolean(false)] { ... } | test.rs:190:13:190:13 | 0 | +| test.rs:184:12:187:9 | [boolean(true)] { ... } | test.rs:184:12:187:9 | [boolean(true)] { ... } | +| test.rs:184:12:187:9 | [boolean(true)] { ... } | test.rs:188:13:188:13 | 1 | +| test.rs:188:13:188:13 | 1 | test.rs:188:13:188:13 | 1 | +| test.rs:190:13:190:13 | 0 | test.rs:190:13:190:13 | 0 | +| test.rs:194:5:205:5 | enter fn test_if_loop1 | test.rs:194:5:205:5 | enter fn test_if_loop1 | +| test.rs:194:5:205:5 | enter fn test_if_loop1 | test.rs:195:9:204:9 | if ... {...} else {...} | +| test.rs:194:5:205:5 | enter fn test_if_loop1 | test.rs:196:13:198:13 | if ... {...} | +| test.rs:194:5:205:5 | enter fn test_if_loop1 | test.rs:196:13:198:14 | ExprStmt | +| test.rs:194:5:205:5 | enter fn test_if_loop1 | test.rs:197:17:197:28 | [boolean(false)] break ... | +| test.rs:194:5:205:5 | enter fn test_if_loop1 | test.rs:197:17:197:28 | [boolean(true)] break ... | +| test.rs:194:5:205:5 | enter fn test_if_loop1 | test.rs:197:17:197:29 | ExprStmt | +| test.rs:194:5:205:5 | enter fn test_if_loop1 | test.rs:201:13:201:13 | 1 | +| test.rs:194:5:205:5 | enter fn test_if_loop1 | test.rs:203:13:203:13 | 0 | +| test.rs:195:9:204:9 | if ... {...} else {...} | test.rs:195:9:204:9 | if ... {...} else {...} | +| test.rs:196:13:198:13 | if ... {...} | test.rs:196:13:198:13 | if ... {...} | +| test.rs:196:13:198:14 | ExprStmt | test.rs:195:9:204:9 | if ... {...} else {...} | +| test.rs:196:13:198:14 | ExprStmt | test.rs:196:13:198:13 | if ... {...} | +| test.rs:196:13:198:14 | ExprStmt | test.rs:196:13:198:14 | ExprStmt | +| test.rs:196:13:198:14 | ExprStmt | test.rs:197:17:197:28 | [boolean(false)] break ... | +| test.rs:196:13:198:14 | ExprStmt | test.rs:197:17:197:28 | [boolean(true)] break ... | +| test.rs:196:13:198:14 | ExprStmt | test.rs:197:17:197:29 | ExprStmt | +| test.rs:196:13:198:14 | ExprStmt | test.rs:201:13:201:13 | 1 | +| test.rs:196:13:198:14 | ExprStmt | test.rs:203:13:203:13 | 0 | +| test.rs:197:17:197:28 | [boolean(false)] break ... | test.rs:197:17:197:28 | [boolean(false)] break ... | +| test.rs:197:17:197:28 | [boolean(false)] break ... | test.rs:203:13:203:13 | 0 | +| test.rs:197:17:197:28 | [boolean(true)] break ... | test.rs:197:17:197:28 | [boolean(true)] break ... | +| test.rs:197:17:197:28 | [boolean(true)] break ... | test.rs:201:13:201:13 | 1 | +| test.rs:197:17:197:29 | ExprStmt | test.rs:195:9:204:9 | if ... {...} else {...} | +| test.rs:197:17:197:29 | ExprStmt | test.rs:197:17:197:28 | [boolean(false)] break ... | +| test.rs:197:17:197:29 | ExprStmt | test.rs:197:17:197:28 | [boolean(true)] break ... | +| test.rs:197:17:197:29 | ExprStmt | test.rs:197:17:197:29 | ExprStmt | +| test.rs:197:17:197:29 | ExprStmt | test.rs:201:13:201:13 | 1 | +| test.rs:197:17:197:29 | ExprStmt | test.rs:203:13:203:13 | 0 | +| test.rs:201:13:201:13 | 1 | test.rs:201:13:201:13 | 1 | +| test.rs:203:13:203:13 | 0 | test.rs:203:13:203:13 | 0 | +| test.rs:207:5:218:5 | enter fn test_if_loop2 | test.rs:207:5:218:5 | enter fn test_if_loop2 | +| test.rs:207:5:218:5 | enter fn test_if_loop2 | test.rs:208:9:217:9 | if ... {...} else {...} | +| test.rs:207:5:218:5 | enter fn test_if_loop2 | test.rs:209:13:211:13 | if ... {...} | +| test.rs:207:5:218:5 | enter fn test_if_loop2 | test.rs:209:13:211:14 | ExprStmt | +| test.rs:207:5:218:5 | enter fn test_if_loop2 | test.rs:210:17:210:35 | [boolean(false)] break ''label ... | +| test.rs:207:5:218:5 | enter fn test_if_loop2 | test.rs:210:17:210:35 | [boolean(true)] break ''label ... | +| test.rs:207:5:218:5 | enter fn test_if_loop2 | test.rs:210:17:210:36 | ExprStmt | +| test.rs:207:5:218:5 | enter fn test_if_loop2 | test.rs:214:13:214:13 | 1 | +| test.rs:207:5:218:5 | enter fn test_if_loop2 | test.rs:216:13:216:13 | 0 | +| test.rs:208:9:217:9 | if ... {...} else {...} | test.rs:208:9:217:9 | if ... {...} else {...} | +| test.rs:209:13:211:13 | if ... {...} | test.rs:209:13:211:13 | if ... {...} | +| test.rs:209:13:211:14 | ExprStmt | test.rs:208:9:217:9 | if ... {...} else {...} | +| test.rs:209:13:211:14 | ExprStmt | test.rs:209:13:211:13 | if ... {...} | +| test.rs:209:13:211:14 | ExprStmt | test.rs:209:13:211:14 | ExprStmt | +| test.rs:209:13:211:14 | ExprStmt | test.rs:210:17:210:35 | [boolean(false)] break ''label ... | +| test.rs:209:13:211:14 | ExprStmt | test.rs:210:17:210:35 | [boolean(true)] break ''label ... | +| test.rs:209:13:211:14 | ExprStmt | test.rs:210:17:210:36 | ExprStmt | +| test.rs:209:13:211:14 | ExprStmt | test.rs:214:13:214:13 | 1 | +| test.rs:209:13:211:14 | ExprStmt | test.rs:216:13:216:13 | 0 | +| test.rs:210:17:210:35 | [boolean(false)] break ''label ... | test.rs:210:17:210:35 | [boolean(false)] break ''label ... | +| test.rs:210:17:210:35 | [boolean(false)] break ''label ... | test.rs:216:13:216:13 | 0 | +| test.rs:210:17:210:35 | [boolean(true)] break ''label ... | test.rs:210:17:210:35 | [boolean(true)] break ''label ... | +| test.rs:210:17:210:35 | [boolean(true)] break ''label ... | test.rs:214:13:214:13 | 1 | +| test.rs:210:17:210:36 | ExprStmt | test.rs:208:9:217:9 | if ... {...} else {...} | +| test.rs:210:17:210:36 | ExprStmt | test.rs:210:17:210:35 | [boolean(false)] break ''label ... | +| test.rs:210:17:210:36 | ExprStmt | test.rs:210:17:210:35 | [boolean(true)] break ''label ... | +| test.rs:210:17:210:36 | ExprStmt | test.rs:210:17:210:36 | ExprStmt | +| test.rs:210:17:210:36 | ExprStmt | test.rs:214:13:214:13 | 1 | +| test.rs:210:17:210:36 | ExprStmt | test.rs:216:13:216:13 | 0 | +| test.rs:214:13:214:13 | 1 | test.rs:214:13:214:13 | 1 | +| test.rs:216:13:216:13 | 0 | test.rs:216:13:216:13 | 0 | +| test.rs:220:5:228:5 | enter fn test_labelled_block | test.rs:220:5:228:5 | enter fn test_labelled_block | +| test.rs:220:5:228:5 | enter fn test_labelled_block | test.rs:221:9:227:9 | if ... {...} else {...} | +| test.rs:220:5:228:5 | enter fn test_labelled_block | test.rs:222:13:222:30 | [boolean(false)] break ''block ... | +| test.rs:220:5:228:5 | enter fn test_labelled_block | test.rs:222:13:222:30 | [boolean(true)] break ''block ... | +| test.rs:220:5:228:5 | enter fn test_labelled_block | test.rs:224:13:224:13 | 1 | +| test.rs:220:5:228:5 | enter fn test_labelled_block | test.rs:226:13:226:13 | 0 | +| test.rs:221:9:227:9 | if ... {...} else {...} | test.rs:221:9:227:9 | if ... {...} else {...} | +| test.rs:222:13:222:30 | [boolean(false)] break ''block ... | test.rs:222:13:222:30 | [boolean(false)] break ''block ... | +| test.rs:222:13:222:30 | [boolean(false)] break ''block ... | test.rs:226:13:226:13 | 0 | +| test.rs:222:13:222:30 | [boolean(true)] break ''block ... | test.rs:222:13:222:30 | [boolean(true)] break ''block ... | +| test.rs:222:13:222:30 | [boolean(true)] break ''block ... | test.rs:224:13:224:13 | 1 | +| test.rs:224:13:224:13 | 1 | test.rs:224:13:224:13 | 1 | +| test.rs:226:13:226:13 | 0 | test.rs:226:13:226:13 | 0 | +| test.rs:233:5:236:5 | enter fn test_and_operator | test.rs:233:5:236:5 | enter fn test_and_operator | +| test.rs:233:5:236:5 | enter fn test_and_operator | test.rs:234:17:234:22 | [boolean(false)] ... && ... | +| test.rs:233:5:236:5 | enter fn test_and_operator | test.rs:234:17:234:22 | [boolean(true)] ... && ... | +| test.rs:233:5:236:5 | enter fn test_and_operator | test.rs:234:17:234:27 | ... && ... | +| test.rs:233:5:236:5 | enter fn test_and_operator | test.rs:234:22:234:22 | b | +| test.rs:233:5:236:5 | enter fn test_and_operator | test.rs:234:27:234:27 | c | +| test.rs:234:17:234:22 | [boolean(false)] ... && ... | test.rs:234:17:234:22 | [boolean(false)] ... && ... | +| test.rs:234:17:234:22 | [boolean(true)] ... && ... | test.rs:234:17:234:22 | [boolean(true)] ... && ... | +| test.rs:234:17:234:22 | [boolean(true)] ... && ... | test.rs:234:27:234:27 | c | +| test.rs:234:17:234:27 | ... && ... | test.rs:234:17:234:27 | ... && ... | +| test.rs:234:22:234:22 | b | test.rs:234:17:234:22 | [boolean(true)] ... && ... | +| test.rs:234:22:234:22 | b | test.rs:234:22:234:22 | b | +| test.rs:234:22:234:22 | b | test.rs:234:27:234:27 | c | +| test.rs:234:27:234:27 | c | test.rs:234:27:234:27 | c | +| test.rs:238:5:241:5 | enter fn test_or_operator | test.rs:238:5:241:5 | enter fn test_or_operator | +| test.rs:238:5:241:5 | enter fn test_or_operator | test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | +| test.rs:238:5:241:5 | enter fn test_or_operator | test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | +| test.rs:238:5:241:5 | enter fn test_or_operator | test.rs:239:17:239:27 | ... \|\| ... | +| test.rs:238:5:241:5 | enter fn test_or_operator | test.rs:239:22:239:22 | b | +| test.rs:238:5:241:5 | enter fn test_or_operator | test.rs:239:27:239:27 | c | +| test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | +| test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | test.rs:239:27:239:27 | c | +| test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | +| test.rs:239:17:239:27 | ... \|\| ... | test.rs:239:17:239:27 | ... \|\| ... | +| test.rs:239:22:239:22 | b | test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | +| test.rs:239:22:239:22 | b | test.rs:239:22:239:22 | b | +| test.rs:239:22:239:22 | b | test.rs:239:27:239:27 | c | +| test.rs:239:27:239:27 | c | test.rs:239:27:239:27 | c | +| test.rs:243:5:246:5 | enter fn test_or_operator_2 | test.rs:243:5:246:5 | enter fn test_or_operator_2 | +| test.rs:243:5:246:5 | enter fn test_or_operator_2 | test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | +| test.rs:243:5:246:5 | enter fn test_or_operator_2 | test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | +| test.rs:243:5:246:5 | enter fn test_or_operator_2 | test.rs:244:17:244:35 | ... \|\| ... | +| test.rs:243:5:246:5 | enter fn test_or_operator_2 | test.rs:244:23:244:23 | b | +| test.rs:243:5:246:5 | enter fn test_or_operator_2 | test.rs:244:35:244:35 | c | +| test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | +| test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | test.rs:244:35:244:35 | c | +| test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | +| test.rs:244:17:244:35 | ... \|\| ... | test.rs:244:17:244:35 | ... \|\| ... | +| test.rs:244:23:244:23 | b | test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | +| test.rs:244:23:244:23 | b | test.rs:244:23:244:23 | b | +| test.rs:244:23:244:23 | b | test.rs:244:35:244:35 | c | +| test.rs:244:35:244:35 | c | test.rs:244:35:244:35 | c | +| test.rs:248:5:251:5 | enter fn test_not_operator | test.rs:248:5:251:5 | enter fn test_not_operator | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:253:5:259:5 | enter fn test_if_and_operator | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:254:9:258:9 | if ... {...} else {...} | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:254:12:254:17 | [boolean(false)] ... && ... | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:254:12:254:17 | [boolean(true)] ... && ... | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:254:12:254:22 | [boolean(false)] ... && ... | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:254:12:254:22 | [boolean(true)] ... && ... | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:254:17:254:17 | b | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:254:22:254:22 | c | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:255:13:255:16 | true | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:257:13:257:17 | false | +| test.rs:254:9:258:9 | if ... {...} else {...} | test.rs:254:9:258:9 | if ... {...} else {...} | +| test.rs:254:12:254:17 | [boolean(false)] ... && ... | test.rs:254:12:254:17 | [boolean(false)] ... && ... | +| test.rs:254:12:254:17 | [boolean(true)] ... && ... | test.rs:254:12:254:17 | [boolean(true)] ... && ... | +| test.rs:254:12:254:17 | [boolean(true)] ... && ... | test.rs:254:12:254:22 | [boolean(true)] ... && ... | +| test.rs:254:12:254:17 | [boolean(true)] ... && ... | test.rs:254:22:254:22 | c | +| test.rs:254:12:254:17 | [boolean(true)] ... && ... | test.rs:255:13:255:16 | true | +| test.rs:254:12:254:22 | [boolean(false)] ... && ... | test.rs:254:12:254:22 | [boolean(false)] ... && ... | +| test.rs:254:12:254:22 | [boolean(false)] ... && ... | test.rs:257:13:257:17 | false | +| test.rs:254:12:254:22 | [boolean(true)] ... && ... | test.rs:254:12:254:22 | [boolean(true)] ... && ... | +| test.rs:254:12:254:22 | [boolean(true)] ... && ... | test.rs:255:13:255:16 | true | +| test.rs:254:17:254:17 | b | test.rs:254:12:254:17 | [boolean(true)] ... && ... | +| test.rs:254:17:254:17 | b | test.rs:254:12:254:22 | [boolean(true)] ... && ... | +| test.rs:254:17:254:17 | b | test.rs:254:17:254:17 | b | +| test.rs:254:17:254:17 | b | test.rs:254:22:254:22 | c | +| test.rs:254:17:254:17 | b | test.rs:255:13:255:16 | true | +| test.rs:254:22:254:22 | c | test.rs:254:12:254:22 | [boolean(true)] ... && ... | +| test.rs:254:22:254:22 | c | test.rs:254:22:254:22 | c | +| test.rs:254:22:254:22 | c | test.rs:255:13:255:16 | true | +| test.rs:255:13:255:16 | true | test.rs:255:13:255:16 | true | +| test.rs:257:13:257:17 | false | test.rs:257:13:257:17 | false | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:261:5:267:5 | enter fn test_if_or_operator | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:262:9:266:9 | if ... {...} else {...} | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:262:17:262:17 | b | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:262:22:262:22 | c | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:263:13:263:16 | true | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:265:13:265:17 | false | +| test.rs:262:9:266:9 | if ... {...} else {...} | test.rs:262:9:266:9 | if ... {...} else {...} | +| test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | +| test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | +| test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | test.rs:262:22:262:22 | c | +| test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | test.rs:265:13:265:17 | false | +| test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | +| test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | +| test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | test.rs:265:13:265:17 | false | +| test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | +| test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | test.rs:263:13:263:16 | true | +| test.rs:262:17:262:17 | b | test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | +| test.rs:262:17:262:17 | b | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | +| test.rs:262:17:262:17 | b | test.rs:262:17:262:17 | b | +| test.rs:262:17:262:17 | b | test.rs:262:22:262:22 | c | +| test.rs:262:17:262:17 | b | test.rs:265:13:265:17 | false | +| test.rs:262:22:262:22 | c | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | +| test.rs:262:22:262:22 | c | test.rs:262:22:262:22 | c | +| test.rs:262:22:262:22 | c | test.rs:265:13:265:17 | false | +| test.rs:263:13:263:16 | true | test.rs:263:13:263:16 | true | +| test.rs:265:13:265:17 | false | test.rs:265:13:265:17 | false | +| test.rs:269:5:275:5 | enter fn test_if_not_operator | test.rs:269:5:275:5 | enter fn test_if_not_operator | +| test.rs:269:5:275:5 | enter fn test_if_not_operator | test.rs:270:9:274:9 | if ... {...} else {...} | +| test.rs:269:5:275:5 | enter fn test_if_not_operator | test.rs:270:12:270:13 | [boolean(false)] ! ... | +| test.rs:269:5:275:5 | enter fn test_if_not_operator | test.rs:270:12:270:13 | [boolean(true)] ! ... | +| test.rs:269:5:275:5 | enter fn test_if_not_operator | test.rs:271:13:271:16 | true | +| test.rs:269:5:275:5 | enter fn test_if_not_operator | test.rs:273:13:273:17 | false | +| test.rs:270:9:274:9 | if ... {...} else {...} | test.rs:270:9:274:9 | if ... {...} else {...} | +| test.rs:270:12:270:13 | [boolean(false)] ! ... | test.rs:270:12:270:13 | [boolean(false)] ! ... | +| test.rs:270:12:270:13 | [boolean(false)] ! ... | test.rs:273:13:273:17 | false | +| test.rs:270:12:270:13 | [boolean(true)] ! ... | test.rs:270:12:270:13 | [boolean(true)] ! ... | +| test.rs:270:12:270:13 | [boolean(true)] ! ... | test.rs:271:13:271:16 | true | +| test.rs:271:13:271:16 | true | test.rs:271:13:271:16 | true | +| test.rs:273:13:273:17 | false | test.rs:273:13:273:17 | false | +| test.rs:277:5:279:5 | enter fn test_and_return | test.rs:277:5:279:5 | enter fn test_and_return | +| test.rs:277:5:279:5 | enter fn test_and_return | test.rs:277:5:279:5 | exit fn test_and_return (normal) | +| test.rs:277:5:279:5 | enter fn test_and_return | test.rs:278:9:278:19 | ... && ... | +| test.rs:277:5:279:5 | enter fn test_and_return | test.rs:278:14:278:19 | return | +| test.rs:277:5:279:5 | exit fn test_and_return (normal) | test.rs:277:5:279:5 | exit fn test_and_return (normal) | +| test.rs:278:9:278:19 | ... && ... | test.rs:278:9:278:19 | ... && ... | +| test.rs:278:14:278:19 | return | test.rs:278:14:278:19 | return | +| test.rs:281:5:286:5 | enter fn test_and_true | test.rs:281:5:286:5 | enter fn test_and_true | +| test.rs:281:5:286:5 | enter fn test_and_true | test.rs:281:5:286:5 | exit fn test_and_true (normal) | +| test.rs:281:5:286:5 | enter fn test_and_true | test.rs:282:9:284:9 | if ... {...} | +| test.rs:281:5:286:5 | enter fn test_and_true | test.rs:282:13:282:21 | [boolean(false)] ... && ... | +| test.rs:281:5:286:5 | enter fn test_and_true | test.rs:282:13:282:21 | [boolean(true)] ... && ... | +| test.rs:281:5:286:5 | enter fn test_and_true | test.rs:282:18:282:21 | true | +| test.rs:281:5:286:5 | enter fn test_and_true | test.rs:283:13:283:21 | ExprStmt | +| test.rs:281:5:286:5 | exit fn test_and_true (normal) | test.rs:281:5:286:5 | exit fn test_and_true (normal) | +| test.rs:282:9:284:9 | if ... {...} | test.rs:282:9:284:9 | if ... {...} | +| test.rs:282:13:282:21 | [boolean(false)] ... && ... | test.rs:282:9:284:9 | if ... {...} | +| test.rs:282:13:282:21 | [boolean(false)] ... && ... | test.rs:282:13:282:21 | [boolean(false)] ... && ... | +| test.rs:282:13:282:21 | [boolean(true)] ... && ... | test.rs:282:13:282:21 | [boolean(true)] ... && ... | +| test.rs:282:13:282:21 | [boolean(true)] ... && ... | test.rs:283:13:283:21 | ExprStmt | +| test.rs:282:18:282:21 | true | test.rs:282:13:282:21 | [boolean(true)] ... && ... | +| test.rs:282:18:282:21 | true | test.rs:282:18:282:21 | true | +| test.rs:282:18:282:21 | true | test.rs:283:13:283:21 | ExprStmt | +| test.rs:283:13:283:21 | ExprStmt | test.rs:283:13:283:21 | ExprStmt | +| test.rs:292:5:294:5 | enter fn test_question_mark_operator_1 | test.rs:292:5:294:5 | enter fn test_question_mark_operator_1 | +| test.rs:292:5:294:5 | enter fn test_question_mark_operator_1 | test.rs:292:5:294:5 | exit fn test_question_mark_operator_1 (normal) | +| test.rs:292:5:294:5 | enter fn test_question_mark_operator_1 | test.rs:293:32:293:32 | 4 | +| test.rs:292:5:294:5 | exit fn test_question_mark_operator_1 (normal) | test.rs:292:5:294:5 | exit fn test_question_mark_operator_1 (normal) | +| test.rs:293:32:293:32 | 4 | test.rs:293:32:293:32 | 4 | +| test.rs:296:5:301:5 | enter fn test_question_mark_operator_2 | test.rs:296:5:301:5 | enter fn test_question_mark_operator_2 | +| test.rs:296:5:301:5 | enter fn test_question_mark_operator_2 | test.rs:296:5:301:5 | exit fn test_question_mark_operator_2 (normal) | +| test.rs:296:5:301:5 | enter fn test_question_mark_operator_2 | test.rs:297:9:300:9 | match ... { ... } | +| test.rs:296:5:301:5 | enter fn test_question_mark_operator_2 | test.rs:298:13:298:16 | true | +| test.rs:296:5:301:5 | enter fn test_question_mark_operator_2 | test.rs:298:21:298:24 | Some | +| test.rs:296:5:301:5 | enter fn test_question_mark_operator_2 | test.rs:299:13:299:17 | false | +| test.rs:296:5:301:5 | exit fn test_question_mark_operator_2 (normal) | test.rs:296:5:301:5 | exit fn test_question_mark_operator_2 (normal) | +| test.rs:297:9:300:9 | match ... { ... } | test.rs:297:9:300:9 | match ... { ... } | +| test.rs:298:13:298:16 | true | test.rs:297:9:300:9 | match ... { ... } | +| test.rs:298:13:298:16 | true | test.rs:298:13:298:16 | true | +| test.rs:298:13:298:16 | true | test.rs:298:21:298:24 | Some | +| test.rs:298:13:298:16 | true | test.rs:299:13:299:17 | false | +| test.rs:298:21:298:24 | Some | test.rs:298:21:298:24 | Some | +| test.rs:299:13:299:17 | false | test.rs:299:13:299:17 | false | +| test.rs:307:5:313:5 | enter fn test_match | test.rs:307:5:313:5 | enter fn test_match | +| test.rs:307:5:313:5 | enter fn test_match | test.rs:308:9:312:9 | match maybe_digit { ... } | +| test.rs:307:5:313:5 | enter fn test_match | test.rs:309:26:309:26 | x | +| test.rs:307:5:313:5 | enter fn test_match | test.rs:309:42:309:42 | x | +| test.rs:307:5:313:5 | enter fn test_match | test.rs:310:13:310:27 | ...::Some(...) | +| test.rs:307:5:313:5 | enter fn test_match | test.rs:310:26:310:26 | x | +| test.rs:307:5:313:5 | enter fn test_match | test.rs:311:13:311:24 | ...::None | +| test.rs:308:9:312:9 | match maybe_digit { ... } | test.rs:308:9:312:9 | match maybe_digit { ... } | +| test.rs:309:26:309:26 | x | test.rs:309:26:309:26 | x | +| test.rs:309:26:309:26 | x | test.rs:309:42:309:42 | x | +| test.rs:309:42:309:42 | x | test.rs:309:42:309:42 | x | +| test.rs:310:13:310:27 | ...::Some(...) | test.rs:310:13:310:27 | ...::Some(...) | +| test.rs:310:13:310:27 | ...::Some(...) | test.rs:310:26:310:26 | x | +| test.rs:310:13:310:27 | ...::Some(...) | test.rs:311:13:311:24 | ...::None | +| test.rs:310:26:310:26 | x | test.rs:310:26:310:26 | x | +| test.rs:311:13:311:24 | ...::None | test.rs:311:13:311:24 | ...::None | +| test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | +| test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | +| test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | test.rs:316:9:323:9 | match ... { ... } | +| test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | test.rs:317:13:317:21 | ExprStmt | +| test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | test.rs:319:13:319:23 | maybe_digit | +| test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | test.rs:321:26:321:26 | x | +| test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | test.rs:322:13:322:24 | ...::None | +| test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | +| test.rs:316:9:323:9 | match ... { ... } | test.rs:316:9:323:9 | match ... { ... } | +| test.rs:317:13:317:21 | ExprStmt | test.rs:317:13:317:21 | ExprStmt | +| test.rs:319:13:319:23 | maybe_digit | test.rs:316:9:323:9 | match ... { ... } | +| test.rs:319:13:319:23 | maybe_digit | test.rs:319:13:319:23 | maybe_digit | +| test.rs:319:13:319:23 | maybe_digit | test.rs:321:26:321:26 | x | +| test.rs:319:13:319:23 | maybe_digit | test.rs:322:13:322:24 | ...::None | +| test.rs:321:26:321:26 | x | test.rs:321:26:321:26 | x | +| test.rs:322:13:322:24 | ...::None | test.rs:322:13:322:24 | ...::None | +| test.rs:326:5:331:5 | enter fn test_match_and | test.rs:326:5:331:5 | enter fn test_match_and | +| test.rs:326:5:331:5 | enter fn test_match_and | test.rs:327:9:330:18 | ... && ... | +| test.rs:326:5:331:5 | enter fn test_match_and | test.rs:327:10:330:9 | [boolean(false)] match r { ... } | +| test.rs:326:5:331:5 | enter fn test_match_and | test.rs:327:10:330:9 | [boolean(true)] match r { ... } | +| test.rs:326:5:331:5 | enter fn test_match_and | test.rs:328:18:328:18 | a | +| test.rs:326:5:331:5 | enter fn test_match_and | test.rs:329:13:329:13 | _ | +| test.rs:326:5:331:5 | enter fn test_match_and | test.rs:330:15:330:18 | cond | +| test.rs:327:9:330:18 | ... && ... | test.rs:327:9:330:18 | ... && ... | +| test.rs:327:10:330:9 | [boolean(false)] match r { ... } | test.rs:327:10:330:9 | [boolean(false)] match r { ... } | +| test.rs:327:10:330:9 | [boolean(true)] match r { ... } | test.rs:327:10:330:9 | [boolean(true)] match r { ... } | +| test.rs:327:10:330:9 | [boolean(true)] match r { ... } | test.rs:330:15:330:18 | cond | +| test.rs:328:18:328:18 | a | test.rs:327:10:330:9 | [boolean(true)] match r { ... } | +| test.rs:328:18:328:18 | a | test.rs:328:18:328:18 | a | +| test.rs:328:18:328:18 | a | test.rs:330:15:330:18 | cond | +| test.rs:329:13:329:13 | _ | test.rs:329:13:329:13 | _ | +| test.rs:330:15:330:18 | cond | test.rs:330:15:330:18 | cond | +| test.rs:333:5:338:5 | enter fn test_match_with_no_arms | test.rs:333:5:338:5 | enter fn test_match_with_no_arms | +| test.rs:333:5:338:5 | enter fn test_match_with_no_arms | test.rs:334:9:337:9 | match r { ... } | +| test.rs:333:5:338:5 | enter fn test_match_with_no_arms | test.rs:335:16:335:20 | value | +| test.rs:333:5:338:5 | enter fn test_match_with_no_arms | test.rs:336:13:336:22 | Err(...) | +| test.rs:334:9:337:9 | match r { ... } | test.rs:334:9:337:9 | match r { ... } | +| test.rs:335:16:335:20 | value | test.rs:335:16:335:20 | value | +| test.rs:336:13:336:22 | Err(...) | test.rs:336:13:336:22 | Err(...) | +| test.rs:343:5:346:5 | enter fn test_let_match | test.rs:343:5:346:5 | enter fn test_let_match | +| test.rs:343:5:346:5 | enter fn test_let_match | test.rs:344:18:344:18 | n | +| test.rs:343:5:346:5 | enter fn test_let_match | test.rs:344:39:344:53 | MacroStmts | +| test.rs:344:18:344:18 | n | test.rs:344:18:344:18 | n | +| test.rs:344:39:344:53 | MacroStmts | test.rs:344:39:344:53 | MacroStmts | +| test.rs:348:5:354:5 | enter fn test_let_with_return | test.rs:348:5:354:5 | enter fn test_let_with_return | +| test.rs:348:5:354:5 | enter fn test_let_with_return | test.rs:348:5:354:5 | exit fn test_let_with_return (normal) | +| test.rs:348:5:354:5 | enter fn test_let_with_return | test.rs:350:18:350:20 | ret | +| test.rs:348:5:354:5 | enter fn test_let_with_return | test.rs:351:13:351:16 | None | +| test.rs:348:5:354:5 | exit fn test_let_with_return (normal) | test.rs:348:5:354:5 | exit fn test_let_with_return (normal) | +| test.rs:350:18:350:20 | ret | test.rs:350:18:350:20 | ret | +| test.rs:351:13:351:16 | None | test.rs:351:13:351:16 | None | +| test.rs:359:5:362:5 | enter fn empty_tuple_pattern | test.rs:359:5:362:5 | enter fn empty_tuple_pattern | +| test.rs:366:5:370:5 | enter fn empty_struct_pattern | test.rs:366:5:370:5 | enter fn empty_struct_pattern | +| test.rs:372:5:379:5 | enter fn range_pattern | test.rs:372:5:379:5 | enter fn range_pattern | +| test.rs:372:5:379:5 | enter fn range_pattern | test.rs:373:9:378:9 | match 42 { ... } | +| test.rs:372:5:379:5 | enter fn range_pattern | test.rs:374:15:374:15 | 0 | +| test.rs:372:5:379:5 | enter fn range_pattern | test.rs:374:20:374:20 | 1 | +| test.rs:372:5:379:5 | enter fn range_pattern | test.rs:375:13:375:13 | 1 | +| test.rs:372:5:379:5 | enter fn range_pattern | test.rs:375:13:375:16 | RangePat | +| test.rs:372:5:379:5 | enter fn range_pattern | test.rs:375:16:375:16 | 2 | +| test.rs:372:5:379:5 | enter fn range_pattern | test.rs:375:21:375:21 | 2 | +| test.rs:372:5:379:5 | enter fn range_pattern | test.rs:376:13:376:13 | 5 | +| test.rs:372:5:379:5 | enter fn range_pattern | test.rs:376:13:376:15 | RangePat | +| test.rs:372:5:379:5 | enter fn range_pattern | test.rs:376:20:376:20 | 3 | +| test.rs:372:5:379:5 | enter fn range_pattern | test.rs:377:13:377:13 | _ | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:373:9:378:9 | match 42 { ... } | +| test.rs:374:15:374:15 | 0 | test.rs:374:15:374:15 | 0 | +| test.rs:374:15:374:15 | 0 | test.rs:374:20:374:20 | 1 | +| test.rs:374:20:374:20 | 1 | test.rs:374:20:374:20 | 1 | +| test.rs:375:13:375:13 | 1 | test.rs:375:13:375:13 | 1 | +| test.rs:375:13:375:13 | 1 | test.rs:375:16:375:16 | 2 | +| test.rs:375:13:375:13 | 1 | test.rs:375:21:375:21 | 2 | +| test.rs:375:13:375:16 | RangePat | test.rs:375:13:375:13 | 1 | +| test.rs:375:13:375:16 | RangePat | test.rs:375:13:375:16 | RangePat | +| test.rs:375:13:375:16 | RangePat | test.rs:375:16:375:16 | 2 | +| test.rs:375:13:375:16 | RangePat | test.rs:375:21:375:21 | 2 | +| test.rs:375:13:375:16 | RangePat | test.rs:376:13:376:13 | 5 | +| test.rs:375:13:375:16 | RangePat | test.rs:376:13:376:15 | RangePat | +| test.rs:375:13:375:16 | RangePat | test.rs:376:20:376:20 | 3 | +| test.rs:375:13:375:16 | RangePat | test.rs:377:13:377:13 | _ | +| test.rs:375:16:375:16 | 2 | test.rs:375:16:375:16 | 2 | +| test.rs:375:16:375:16 | 2 | test.rs:375:21:375:21 | 2 | +| test.rs:375:21:375:21 | 2 | test.rs:375:21:375:21 | 2 | +| test.rs:376:13:376:13 | 5 | test.rs:376:13:376:13 | 5 | +| test.rs:376:13:376:13 | 5 | test.rs:376:20:376:20 | 3 | +| test.rs:376:13:376:15 | RangePat | test.rs:376:13:376:13 | 5 | +| test.rs:376:13:376:15 | RangePat | test.rs:376:13:376:15 | RangePat | +| test.rs:376:13:376:15 | RangePat | test.rs:376:20:376:20 | 3 | +| test.rs:376:13:376:15 | RangePat | test.rs:377:13:377:13 | _ | +| test.rs:376:20:376:20 | 3 | test.rs:376:20:376:20 | 3 | +| test.rs:377:13:377:13 | _ | test.rs:377:13:377:13 | _ | +| test.rs:383:5:388:5 | enter fn test_infinite_loop | test.rs:383:5:388:5 | enter fn test_infinite_loop | +| test.rs:383:5:388:5 | enter fn test_infinite_loop | test.rs:385:13:385:14 | TupleExpr | +| test.rs:385:13:385:14 | TupleExpr | test.rs:385:13:385:14 | TupleExpr | +| test.rs:392:5:394:5 | enter fn say_hello | test.rs:392:5:394:5 | enter fn say_hello | +| test.rs:396:5:415:5 | enter fn async_block | test.rs:396:5:415:5 | enter fn async_block | +| test.rs:397:26:399:9 | enter { ... } | test.rs:397:26:399:9 | enter { ... } | +| test.rs:400:31:402:9 | enter { ... } | test.rs:400:31:402:9 | enter { ... } | +| test.rs:409:22:414:9 | enter \|...\| ... | test.rs:409:22:414:9 | enter \|...\| ... | +| test.rs:409:28:414:9 | enter { ... } | test.rs:409:28:414:9 | enter { ... } | +| test.rs:409:28:414:9 | enter { ... } | test.rs:409:28:414:9 | exit { ... } (normal) | +| test.rs:409:28:414:9 | enter { ... } | test.rs:410:13:412:13 | if b {...} | +| test.rs:409:28:414:9 | enter { ... } | test.rs:411:17:411:41 | ExprStmt | +| test.rs:409:28:414:9 | exit { ... } (normal) | test.rs:409:28:414:9 | exit { ... } (normal) | +| test.rs:410:13:412:13 | if b {...} | test.rs:410:13:412:13 | if b {...} | +| test.rs:411:17:411:41 | ExprStmt | test.rs:411:17:411:41 | ExprStmt | +| test.rs:421:5:423:5 | enter fn add_two | test.rs:421:5:423:5 | enter fn add_two | +| test.rs:427:5:435:5 | enter fn const_block_assert | test.rs:427:5:435:5 | enter fn const_block_assert | +| test.rs:427:5:435:5 | enter fn const_block_assert | test.rs:431:13:431:49 | ExprStmt | +| test.rs:427:5:435:5 | enter fn const_block_assert | test.rs:431:21:431:48 | [boolean(false)] ! ... | +| test.rs:427:5:435:5 | enter fn const_block_assert | test.rs:431:21:431:48 | [boolean(true)] ! ... | +| test.rs:427:5:435:5 | enter fn const_block_assert | test.rs:431:21:431:48 | if ... {...} | +| test.rs:431:13:431:49 | ExprStmt | test.rs:431:13:431:49 | ExprStmt | +| test.rs:431:13:431:49 | enter fn panic_cold_explicit | test.rs:431:13:431:49 | enter fn panic_cold_explicit | +| test.rs:431:21:431:48 | [boolean(false)] ! ... | test.rs:431:21:431:48 | [boolean(false)] ! ... | +| test.rs:431:21:431:48 | [boolean(true)] ! ... | test.rs:431:13:431:49 | ExprStmt | +| test.rs:431:21:431:48 | [boolean(true)] ! ... | test.rs:431:21:431:48 | [boolean(true)] ! ... | +| test.rs:431:21:431:48 | if ... {...} | test.rs:431:21:431:48 | if ... {...} | +| test.rs:437:5:446:5 | enter fn const_block_panic | test.rs:437:5:446:5 | enter fn const_block_panic | +| test.rs:437:5:446:5 | enter fn const_block_panic | test.rs:439:9:444:9 | if false {...} | +| test.rs:439:9:444:9 | if false {...} | test.rs:439:9:444:9 | if false {...} | +| test.rs:442:17:442:24 | enter fn panic_cold_explicit | test.rs:442:17:442:24 | enter fn panic_cold_explicit | +| test.rs:449:1:454:1 | enter fn dead_code | test.rs:449:1:454:1 | enter fn dead_code | +| test.rs:449:1:454:1 | enter fn dead_code | test.rs:451:9:451:17 | ExprStmt | +| test.rs:451:9:451:17 | ExprStmt | test.rs:451:9:451:17 | ExprStmt | +| test.rs:456:1:456:16 | enter fn do_thing | test.rs:456:1:456:16 | enter fn do_thing | +| test.rs:458:1:460:1 | enter fn condition_not_met | test.rs:458:1:460:1 | enter fn condition_not_met | +| test.rs:462:1:462:21 | enter fn do_next_thing | test.rs:462:1:462:21 | enter fn do_next_thing | +| test.rs:464:1:464:21 | enter fn do_last_thing | test.rs:464:1:464:21 | enter fn do_last_thing | +| test.rs:466:1:480:1 | enter fn labelled_block1 | test.rs:466:1:480:1 | enter fn labelled_block1 | +| test.rs:466:1:480:1 | enter fn labelled_block1 | test.rs:467:18:478:5 | 'block: { ... } | +| test.rs:466:1:480:1 | enter fn labelled_block1 | test.rs:469:9:471:9 | if ... {...} | +| test.rs:466:1:480:1 | enter fn labelled_block1 | test.rs:470:13:470:27 | ExprStmt | +| test.rs:466:1:480:1 | enter fn labelled_block1 | test.rs:473:9:475:9 | if ... {...} | +| test.rs:466:1:480:1 | enter fn labelled_block1 | test.rs:474:13:474:27 | ExprStmt | +| test.rs:467:18:478:5 | 'block: { ... } | test.rs:467:18:478:5 | 'block: { ... } | +| test.rs:469:9:471:9 | if ... {...} | test.rs:469:9:471:9 | if ... {...} | +| test.rs:469:9:471:9 | if ... {...} | test.rs:473:9:475:9 | if ... {...} | +| test.rs:469:9:471:9 | if ... {...} | test.rs:474:13:474:27 | ExprStmt | +| test.rs:470:13:470:27 | ExprStmt | test.rs:470:13:470:27 | ExprStmt | +| test.rs:473:9:475:9 | if ... {...} | test.rs:473:9:475:9 | if ... {...} | +| test.rs:474:13:474:27 | ExprStmt | test.rs:474:13:474:27 | ExprStmt | +| test.rs:482:1:490:1 | enter fn labelled_block2 | test.rs:482:1:490:1 | enter fn labelled_block2 | +| test.rs:482:1:490:1 | enter fn labelled_block2 | test.rs:483:18:489:5 | 'block: { ... } | +| test.rs:482:1:490:1 | enter fn labelled_block2 | test.rs:485:18:485:18 | y | +| test.rs:482:1:490:1 | enter fn labelled_block2 | test.rs:486:13:486:27 | ExprStmt | +| test.rs:483:18:489:5 | 'block: { ... } | test.rs:483:18:489:5 | 'block: { ... } | +| test.rs:485:18:485:18 | y | test.rs:485:18:485:18 | y | +| test.rs:486:13:486:27 | ExprStmt | test.rs:486:13:486:27 | ExprStmt | +| test.rs:492:1:498:1 | enter fn test_nested_function2 | test.rs:492:1:498:1 | enter fn test_nested_function2 | +| test.rs:494:5:496:5 | enter fn nested | test.rs:494:5:496:5 | enter fn nested | +| test.rs:509:5:511:5 | enter fn new | test.rs:509:5:511:5 | enter fn new | +| test.rs:513:5:515:5 | enter fn negated | test.rs:513:5:515:5 | enter fn negated | +| test.rs:517:5:519:5 | enter fn multifly_add | test.rs:517:5:519:5 | enter fn multifly_add | +postDominance +| test.rs:5:5:8:5 | enter fn function_call | test.rs:5:5:8:5 | enter fn function_call | +| test.rs:10:5:13:5 | enter fn method_call | test.rs:10:5:13:5 | enter fn method_call | +| test.rs:18:5:24:5 | enter fn next | test.rs:18:5:24:5 | enter fn next | +| test.rs:19:9:23:9 | if ... {...} else {...} | test.rs:18:5:24:5 | enter fn next | +| test.rs:19:9:23:9 | if ... {...} else {...} | test.rs:19:9:23:9 | if ... {...} else {...} | +| test.rs:19:9:23:9 | if ... {...} else {...} | test.rs:20:13:20:13 | n | +| test.rs:19:9:23:9 | if ... {...} else {...} | test.rs:22:13:22:13 | 3 | +| test.rs:20:13:20:13 | n | test.rs:20:13:20:13 | n | +| test.rs:22:13:22:13 | 3 | test.rs:22:13:22:13 | 3 | +| test.rs:26:5:42:5 | enter fn test_break_and_continue | test.rs:26:5:42:5 | enter fn test_break_and_continue | +| test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | test.rs:26:5:42:5 | enter fn test_break_and_continue | +| test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | +| test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | test.rs:29:13:29:24 | ExprStmt | +| test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | test.rs:30:13:32:13 | if ... {...} | +| test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | test.rs:31:17:31:29 | ExprStmt | +| test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | test.rs:33:13:35:13 | if ... {...} | +| test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | test.rs:34:17:34:22 | ExprStmt | +| test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | test.rs:36:13:38:13 | if ... {...} | +| test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | test.rs:37:17:37:25 | ExprStmt | +| test.rs:29:13:29:24 | ExprStmt | test.rs:26:5:42:5 | enter fn test_break_and_continue | +| test.rs:29:13:29:24 | ExprStmt | test.rs:29:13:29:24 | ExprStmt | +| test.rs:29:13:29:24 | ExprStmt | test.rs:33:13:35:13 | if ... {...} | +| test.rs:29:13:29:24 | ExprStmt | test.rs:36:13:38:13 | if ... {...} | +| test.rs:29:13:29:24 | ExprStmt | test.rs:37:17:37:25 | ExprStmt | +| test.rs:30:13:32:13 | if ... {...} | test.rs:30:13:32:13 | if ... {...} | +| test.rs:31:17:31:29 | ExprStmt | test.rs:31:17:31:29 | ExprStmt | +| test.rs:33:13:35:13 | if ... {...} | test.rs:33:13:35:13 | if ... {...} | +| test.rs:34:17:34:22 | ExprStmt | test.rs:34:17:34:22 | ExprStmt | +| test.rs:36:13:38:13 | if ... {...} | test.rs:36:13:38:13 | if ... {...} | +| test.rs:37:17:37:25 | ExprStmt | test.rs:37:17:37:25 | ExprStmt | +| test.rs:44:5:56:5 | enter fn test_break_with_labels | test.rs:44:5:56:5 | enter fn test_break_with_labels | +| test.rs:46:13:53:13 | 'inner: loop { ... } | test.rs:46:13:53:13 | 'inner: loop { ... } | +| test.rs:46:13:53:13 | 'inner: loop { ... } | test.rs:48:21:48:26 | ExprStmt | +| test.rs:46:13:53:13 | 'inner: loop { ... } | test.rs:49:24:51:17 | if b {...} | +| test.rs:47:17:51:17 | ExprStmt | test.rs:44:5:56:5 | enter fn test_break_with_labels | +| test.rs:47:17:51:17 | ExprStmt | test.rs:46:13:53:13 | 'inner: loop { ... } | +| test.rs:47:17:51:17 | ExprStmt | test.rs:47:17:51:17 | ExprStmt | +| test.rs:47:17:51:17 | ExprStmt | test.rs:48:21:48:26 | ExprStmt | +| test.rs:47:17:51:17 | ExprStmt | test.rs:49:24:51:17 | if b {...} | +| test.rs:48:21:48:26 | ExprStmt | test.rs:48:21:48:26 | ExprStmt | +| test.rs:49:24:51:17 | if b {...} | test.rs:49:24:51:17 | if b {...} | +| test.rs:49:27:49:27 | b | test.rs:44:5:56:5 | enter fn test_break_with_labels | +| test.rs:49:27:49:27 | b | test.rs:46:13:53:13 | 'inner: loop { ... } | +| test.rs:49:27:49:27 | b | test.rs:47:17:51:17 | ExprStmt | +| test.rs:49:27:49:27 | b | test.rs:48:21:48:26 | ExprStmt | +| test.rs:49:27:49:27 | b | test.rs:49:24:51:17 | if b {...} | +| test.rs:49:27:49:27 | b | test.rs:49:27:49:27 | b | +| test.rs:50:21:50:33 | ExprStmt | test.rs:44:5:56:5 | enter fn test_break_with_labels | +| test.rs:50:21:50:33 | ExprStmt | test.rs:46:13:53:13 | 'inner: loop { ... } | +| test.rs:50:21:50:33 | ExprStmt | test.rs:47:17:51:17 | ExprStmt | +| test.rs:50:21:50:33 | ExprStmt | test.rs:48:21:48:26 | ExprStmt | +| test.rs:50:21:50:33 | ExprStmt | test.rs:49:24:51:17 | if b {...} | +| test.rs:50:21:50:33 | ExprStmt | test.rs:49:27:49:27 | b | +| test.rs:50:21:50:33 | ExprStmt | test.rs:50:21:50:33 | ExprStmt | +| test.rs:58:5:70:5 | enter fn test_continue_with_labels | test.rs:58:5:70:5 | enter fn test_continue_with_labels | +| test.rs:60:13:60:14 | ExprStmt | test.rs:60:13:60:14 | ExprStmt | +| test.rs:62:17:66:17 | ExprStmt | test.rs:62:17:66:17 | ExprStmt | +| test.rs:63:21:63:29 | ExprStmt | test.rs:63:21:63:29 | ExprStmt | +| test.rs:64:24:66:17 | if b {...} | test.rs:64:24:66:17 | if b {...} | +| test.rs:64:27:64:27 | b | test.rs:64:27:64:27 | b | +| test.rs:65:21:65:36 | ExprStmt | test.rs:65:21:65:36 | ExprStmt | +| test.rs:72:5:84:5 | enter fn test_loop_label_shadowing | test.rs:72:5:84:5 | enter fn test_loop_label_shadowing | +| test.rs:76:17:80:17 | ExprStmt | test.rs:76:17:80:17 | ExprStmt | +| test.rs:77:21:77:29 | ExprStmt | test.rs:77:21:77:29 | ExprStmt | +| test.rs:78:24:80:17 | if b {...} | test.rs:78:24:80:17 | if b {...} | +| test.rs:78:27:78:27 | b | test.rs:78:27:78:27 | b | +| test.rs:79:21:79:36 | ExprStmt | test.rs:79:21:79:36 | ExprStmt | +| test.rs:86:5:95:5 | enter fn test_while | test.rs:86:5:95:5 | enter fn test_while | +| test.rs:88:9:94:9 | while b { ... } | test.rs:86:5:95:5 | enter fn test_while | +| test.rs:88:9:94:9 | while b { ... } | test.rs:88:9:94:9 | while b { ... } | +| test.rs:88:9:94:9 | while b { ... } | test.rs:88:15:88:15 | b | +| test.rs:88:9:94:9 | while b { ... } | test.rs:89:13:89:14 | ExprStmt | +| test.rs:88:9:94:9 | while b { ... } | test.rs:90:13:92:13 | if ... {...} | +| test.rs:88:9:94:9 | while b { ... } | test.rs:91:17:91:22 | ExprStmt | +| test.rs:88:15:88:15 | b | test.rs:86:5:95:5 | enter fn test_while | +| test.rs:88:15:88:15 | b | test.rs:88:15:88:15 | b | +| test.rs:88:15:88:15 | b | test.rs:90:13:92:13 | if ... {...} | +| test.rs:89:13:89:14 | ExprStmt | test.rs:89:13:89:14 | ExprStmt | +| test.rs:90:13:92:13 | if ... {...} | test.rs:90:13:92:13 | if ... {...} | +| test.rs:91:17:91:22 | ExprStmt | test.rs:91:17:91:22 | ExprStmt | +| test.rs:97:5:104:5 | enter fn test_while_let | test.rs:97:5:104:5 | enter fn test_while_let | +| test.rs:99:9:103:9 | while ... { ... } | test.rs:97:5:104:5 | enter fn test_while_let | +| test.rs:99:9:103:9 | while ... { ... } | test.rs:99:9:103:9 | while ... { ... } | +| test.rs:99:9:103:9 | while ... { ... } | test.rs:99:15:99:39 | let ... = ... | +| test.rs:99:9:103:9 | while ... { ... } | test.rs:99:24:99:24 | x | +| test.rs:99:9:103:9 | while ... { ... } | test.rs:100:13:102:13 | if ... {...} | +| test.rs:99:9:103:9 | while ... { ... } | test.rs:101:17:101:22 | ExprStmt | +| test.rs:99:15:99:39 | let ... = ... | test.rs:97:5:104:5 | enter fn test_while_let | +| test.rs:99:15:99:39 | let ... = ... | test.rs:99:15:99:39 | let ... = ... | +| test.rs:99:15:99:39 | let ... = ... | test.rs:100:13:102:13 | if ... {...} | +| test.rs:99:24:99:24 | x | test.rs:99:24:99:24 | x | +| test.rs:100:13:102:13 | if ... {...} | test.rs:100:13:102:13 | if ... {...} | +| test.rs:101:17:101:22 | ExprStmt | test.rs:101:17:101:22 | ExprStmt | +| test.rs:106:5:113:5 | enter fn test_for | test.rs:106:5:113:5 | enter fn test_for | +| test.rs:107:9:112:9 | for ... in ... { ... } | test.rs:106:5:113:5 | enter fn test_for | +| test.rs:107:9:112:9 | for ... in ... { ... } | test.rs:107:9:112:9 | for ... in ... { ... } | +| test.rs:107:9:112:9 | for ... in ... { ... } | test.rs:107:13:107:13 | i | +| test.rs:107:9:112:9 | for ... in ... { ... } | test.rs:108:13:110:13 | ExprStmt | +| test.rs:107:9:112:9 | for ... in ... { ... } | test.rs:108:13:110:13 | if ... {...} | +| test.rs:107:9:112:9 | for ... in ... { ... } | test.rs:109:17:109:22 | ExprStmt | +| test.rs:107:13:107:13 | i | test.rs:106:5:113:5 | enter fn test_for | +| test.rs:107:13:107:13 | i | test.rs:107:13:107:13 | i | +| test.rs:107:13:107:13 | i | test.rs:108:13:110:13 | if ... {...} | +| test.rs:108:13:110:13 | ExprStmt | test.rs:108:13:110:13 | ExprStmt | +| test.rs:108:13:110:13 | if ... {...} | test.rs:108:13:110:13 | if ... {...} | +| test.rs:109:17:109:22 | ExprStmt | test.rs:109:17:109:22 | ExprStmt | +| test.rs:115:5:119:5 | enter fn break_with_return | test.rs:115:5:119:5 | enter fn break_with_return | +| test.rs:122:1:125:1 | enter fn test_nested_function | test.rs:122:1:125:1 | enter fn test_nested_function | +| test.rs:123:19:123:27 | enter \|...\| ... | test.rs:123:19:123:27 | enter \|...\| ... | +| test.rs:129:5:135:5 | enter fn test_if_else | test.rs:129:5:135:5 | enter fn test_if_else | +| test.rs:130:9:134:9 | if ... {...} else {...} | test.rs:129:5:135:5 | enter fn test_if_else | +| test.rs:130:9:134:9 | if ... {...} else {...} | test.rs:130:9:134:9 | if ... {...} else {...} | +| test.rs:130:9:134:9 | if ... {...} else {...} | test.rs:131:13:131:13 | 0 | +| test.rs:130:9:134:9 | if ... {...} else {...} | test.rs:133:13:133:13 | n | +| test.rs:131:13:131:13 | 0 | test.rs:131:13:131:13 | 0 | +| test.rs:133:13:133:13 | n | test.rs:133:13:133:13 | n | +| test.rs:137:5:143:5 | enter fn test_if_let_else | test.rs:137:5:143:5 | enter fn test_if_let_else | +| test.rs:138:9:142:9 | if ... {...} else {...} | test.rs:137:5:143:5 | enter fn test_if_let_else | +| test.rs:138:9:142:9 | if ... {...} else {...} | test.rs:138:9:142:9 | if ... {...} else {...} | +| test.rs:138:9:142:9 | if ... {...} else {...} | test.rs:138:21:138:21 | n | +| test.rs:138:9:142:9 | if ... {...} else {...} | test.rs:141:13:141:13 | 0 | +| test.rs:138:21:138:21 | n | test.rs:138:21:138:21 | n | +| test.rs:141:13:141:13 | 0 | test.rs:141:13:141:13 | 0 | +| test.rs:145:5:150:5 | enter fn test_if_let | test.rs:145:5:150:5 | enter fn test_if_let | +| test.rs:145:5:150:5 | exit fn test_if_let (normal) | test.rs:145:5:150:5 | enter fn test_if_let | +| test.rs:145:5:150:5 | exit fn test_if_let (normal) | test.rs:145:5:150:5 | exit fn test_if_let (normal) | +| test.rs:145:5:150:5 | exit fn test_if_let (normal) | test.rs:146:9:148:9 | if ... {...} | +| test.rs:145:5:150:5 | exit fn test_if_let (normal) | test.rs:146:21:146:21 | n | +| test.rs:146:9:148:9 | if ... {...} | test.rs:146:9:148:9 | if ... {...} | +| test.rs:146:21:146:21 | n | test.rs:146:21:146:21 | n | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:152:5:158:5 | enter fn test_nested_if | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:152:5:158:5 | enter fn test_nested_if | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:153:9:157:9 | if ... {...} else {...} | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:153:22:153:32 | [boolean(false)] { ... } | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:153:22:153:32 | [boolean(true)] { ... } | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:153:24:153:24 | a | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:153:39:153:48 | [boolean(false)] { ... } | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:153:39:153:48 | [boolean(true)] { ... } | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:153:41:153:41 | a | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:154:13:154:13 | 1 | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:156:13:156:13 | 0 | +| test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | +| test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | test.rs:153:22:153:32 | [boolean(false)] { ... } | +| test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | test.rs:153:39:153:48 | [boolean(false)] { ... } | +| test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | +| test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | test.rs:153:22:153:32 | [boolean(true)] { ... } | +| test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | test.rs:153:39:153:48 | [boolean(true)] { ... } | +| test.rs:153:22:153:32 | [boolean(false)] { ... } | test.rs:153:22:153:32 | [boolean(false)] { ... } | +| test.rs:153:22:153:32 | [boolean(true)] { ... } | test.rs:153:22:153:32 | [boolean(true)] { ... } | +| test.rs:153:24:153:24 | a | test.rs:153:24:153:24 | a | +| test.rs:153:39:153:48 | [boolean(false)] { ... } | test.rs:153:39:153:48 | [boolean(false)] { ... } | +| test.rs:153:39:153:48 | [boolean(true)] { ... } | test.rs:153:39:153:48 | [boolean(true)] { ... } | +| test.rs:153:41:153:41 | a | test.rs:153:41:153:41 | a | +| test.rs:154:13:154:13 | 1 | test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | +| test.rs:154:13:154:13 | 1 | test.rs:153:22:153:32 | [boolean(true)] { ... } | +| test.rs:154:13:154:13 | 1 | test.rs:153:39:153:48 | [boolean(true)] { ... } | +| test.rs:154:13:154:13 | 1 | test.rs:154:13:154:13 | 1 | +| test.rs:156:13:156:13 | 0 | test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | +| test.rs:156:13:156:13 | 0 | test.rs:153:22:153:32 | [boolean(false)] { ... } | +| test.rs:156:13:156:13 | 0 | test.rs:153:39:153:48 | [boolean(false)] { ... } | +| test.rs:156:13:156:13 | 0 | test.rs:156:13:156:13 | 0 | +| test.rs:160:5:169:5 | enter fn test_nested_if_match | test.rs:160:5:169:5 | enter fn test_nested_if_match | +| test.rs:161:9:168:9 | if ... {...} else {...} | test.rs:160:5:169:5 | enter fn test_nested_if_match | +| test.rs:161:9:168:9 | if ... {...} else {...} | test.rs:161:9:168:9 | if ... {...} else {...} | +| test.rs:161:9:168:9 | if ... {...} else {...} | test.rs:161:13:164:9 | [boolean(false)] match a { ... } | +| test.rs:161:9:168:9 | if ... {...} else {...} | test.rs:161:13:164:9 | [boolean(true)] match a { ... } | +| test.rs:161:9:168:9 | if ... {...} else {...} | test.rs:162:18:162:21 | true | +| test.rs:161:9:168:9 | if ... {...} else {...} | test.rs:163:13:163:13 | _ | +| test.rs:161:9:168:9 | if ... {...} else {...} | test.rs:165:13:165:13 | 1 | +| test.rs:161:9:168:9 | if ... {...} else {...} | test.rs:167:13:167:13 | 0 | +| test.rs:161:13:164:9 | [boolean(false)] match a { ... } | test.rs:161:13:164:9 | [boolean(false)] match a { ... } | +| test.rs:161:13:164:9 | [boolean(false)] match a { ... } | test.rs:163:13:163:13 | _ | +| test.rs:161:13:164:9 | [boolean(true)] match a { ... } | test.rs:161:13:164:9 | [boolean(true)] match a { ... } | +| test.rs:161:13:164:9 | [boolean(true)] match a { ... } | test.rs:162:18:162:21 | true | +| test.rs:162:18:162:21 | true | test.rs:162:18:162:21 | true | +| test.rs:163:13:163:13 | _ | test.rs:163:13:163:13 | _ | +| test.rs:165:13:165:13 | 1 | test.rs:161:13:164:9 | [boolean(true)] match a { ... } | +| test.rs:165:13:165:13 | 1 | test.rs:162:18:162:21 | true | +| test.rs:165:13:165:13 | 1 | test.rs:165:13:165:13 | 1 | +| test.rs:167:13:167:13 | 0 | test.rs:161:13:164:9 | [boolean(false)] match a { ... } | +| test.rs:167:13:167:13 | 0 | test.rs:163:13:163:13 | _ | +| test.rs:167:13:167:13 | 0 | test.rs:167:13:167:13 | 0 | +| test.rs:171:5:180:5 | enter fn test_nested_if_block | test.rs:171:5:180:5 | enter fn test_nested_if_block | +| test.rs:172:9:179:9 | if ... {...} else {...} | test.rs:171:5:180:5 | enter fn test_nested_if_block | +| test.rs:172:9:179:9 | if ... {...} else {...} | test.rs:172:9:179:9 | if ... {...} else {...} | +| test.rs:172:9:179:9 | if ... {...} else {...} | test.rs:172:12:175:9 | [boolean(false)] { ... } | +| test.rs:172:9:179:9 | if ... {...} else {...} | test.rs:172:12:175:9 | [boolean(true)] { ... } | +| test.rs:172:9:179:9 | if ... {...} else {...} | test.rs:176:13:176:13 | 1 | +| test.rs:172:9:179:9 | if ... {...} else {...} | test.rs:178:13:178:13 | 0 | +| test.rs:172:12:175:9 | [boolean(false)] { ... } | test.rs:172:12:175:9 | [boolean(false)] { ... } | +| test.rs:172:12:175:9 | [boolean(true)] { ... } | test.rs:172:12:175:9 | [boolean(true)] { ... } | +| test.rs:176:13:176:13 | 1 | test.rs:172:12:175:9 | [boolean(true)] { ... } | +| test.rs:176:13:176:13 | 1 | test.rs:176:13:176:13 | 1 | +| test.rs:178:13:178:13 | 0 | test.rs:172:12:175:9 | [boolean(false)] { ... } | +| test.rs:178:13:178:13 | 0 | test.rs:178:13:178:13 | 0 | +| test.rs:182:5:192:5 | enter fn test_if_assignment | test.rs:182:5:192:5 | enter fn test_if_assignment | +| test.rs:184:9:191:9 | if ... {...} else {...} | test.rs:182:5:192:5 | enter fn test_if_assignment | +| test.rs:184:9:191:9 | if ... {...} else {...} | test.rs:184:9:191:9 | if ... {...} else {...} | +| test.rs:184:9:191:9 | if ... {...} else {...} | test.rs:184:12:187:9 | [boolean(false)] { ... } | +| test.rs:184:9:191:9 | if ... {...} else {...} | test.rs:184:12:187:9 | [boolean(true)] { ... } | +| test.rs:184:9:191:9 | if ... {...} else {...} | test.rs:188:13:188:13 | 1 | +| test.rs:184:9:191:9 | if ... {...} else {...} | test.rs:190:13:190:13 | 0 | +| test.rs:184:12:187:9 | [boolean(false)] { ... } | test.rs:184:12:187:9 | [boolean(false)] { ... } | +| test.rs:184:12:187:9 | [boolean(true)] { ... } | test.rs:184:12:187:9 | [boolean(true)] { ... } | +| test.rs:188:13:188:13 | 1 | test.rs:184:12:187:9 | [boolean(true)] { ... } | +| test.rs:188:13:188:13 | 1 | test.rs:188:13:188:13 | 1 | +| test.rs:190:13:190:13 | 0 | test.rs:184:12:187:9 | [boolean(false)] { ... } | +| test.rs:190:13:190:13 | 0 | test.rs:190:13:190:13 | 0 | +| test.rs:194:5:205:5 | enter fn test_if_loop1 | test.rs:194:5:205:5 | enter fn test_if_loop1 | +| test.rs:195:9:204:9 | if ... {...} else {...} | test.rs:194:5:205:5 | enter fn test_if_loop1 | +| test.rs:195:9:204:9 | if ... {...} else {...} | test.rs:195:9:204:9 | if ... {...} else {...} | +| test.rs:195:9:204:9 | if ... {...} else {...} | test.rs:196:13:198:13 | if ... {...} | +| test.rs:195:9:204:9 | if ... {...} else {...} | test.rs:196:13:198:14 | ExprStmt | +| test.rs:195:9:204:9 | if ... {...} else {...} | test.rs:197:17:197:28 | [boolean(false)] break ... | +| test.rs:195:9:204:9 | if ... {...} else {...} | test.rs:197:17:197:28 | [boolean(true)] break ... | +| test.rs:195:9:204:9 | if ... {...} else {...} | test.rs:197:17:197:29 | ExprStmt | +| test.rs:195:9:204:9 | if ... {...} else {...} | test.rs:201:13:201:13 | 1 | +| test.rs:195:9:204:9 | if ... {...} else {...} | test.rs:203:13:203:13 | 0 | +| test.rs:196:13:198:13 | if ... {...} | test.rs:196:13:198:13 | if ... {...} | +| test.rs:196:13:198:14 | ExprStmt | test.rs:194:5:205:5 | enter fn test_if_loop1 | +| test.rs:196:13:198:14 | ExprStmt | test.rs:196:13:198:13 | if ... {...} | +| test.rs:196:13:198:14 | ExprStmt | test.rs:196:13:198:14 | ExprStmt | +| test.rs:197:17:197:28 | [boolean(false)] break ... | test.rs:197:17:197:28 | [boolean(false)] break ... | +| test.rs:197:17:197:28 | [boolean(true)] break ... | test.rs:197:17:197:28 | [boolean(true)] break ... | +| test.rs:197:17:197:29 | ExprStmt | test.rs:194:5:205:5 | enter fn test_if_loop1 | +| test.rs:197:17:197:29 | ExprStmt | test.rs:196:13:198:13 | if ... {...} | +| test.rs:197:17:197:29 | ExprStmt | test.rs:196:13:198:14 | ExprStmt | +| test.rs:197:17:197:29 | ExprStmt | test.rs:197:17:197:29 | ExprStmt | +| test.rs:201:13:201:13 | 1 | test.rs:197:17:197:28 | [boolean(true)] break ... | +| test.rs:201:13:201:13 | 1 | test.rs:201:13:201:13 | 1 | +| test.rs:203:13:203:13 | 0 | test.rs:197:17:197:28 | [boolean(false)] break ... | +| test.rs:203:13:203:13 | 0 | test.rs:203:13:203:13 | 0 | +| test.rs:207:5:218:5 | enter fn test_if_loop2 | test.rs:207:5:218:5 | enter fn test_if_loop2 | +| test.rs:208:9:217:9 | if ... {...} else {...} | test.rs:207:5:218:5 | enter fn test_if_loop2 | +| test.rs:208:9:217:9 | if ... {...} else {...} | test.rs:208:9:217:9 | if ... {...} else {...} | +| test.rs:208:9:217:9 | if ... {...} else {...} | test.rs:209:13:211:13 | if ... {...} | +| test.rs:208:9:217:9 | if ... {...} else {...} | test.rs:209:13:211:14 | ExprStmt | +| test.rs:208:9:217:9 | if ... {...} else {...} | test.rs:210:17:210:35 | [boolean(false)] break ''label ... | +| test.rs:208:9:217:9 | if ... {...} else {...} | test.rs:210:17:210:35 | [boolean(true)] break ''label ... | +| test.rs:208:9:217:9 | if ... {...} else {...} | test.rs:210:17:210:36 | ExprStmt | +| test.rs:208:9:217:9 | if ... {...} else {...} | test.rs:214:13:214:13 | 1 | +| test.rs:208:9:217:9 | if ... {...} else {...} | test.rs:216:13:216:13 | 0 | +| test.rs:209:13:211:13 | if ... {...} | test.rs:209:13:211:13 | if ... {...} | +| test.rs:209:13:211:14 | ExprStmt | test.rs:207:5:218:5 | enter fn test_if_loop2 | +| test.rs:209:13:211:14 | ExprStmt | test.rs:209:13:211:13 | if ... {...} | +| test.rs:209:13:211:14 | ExprStmt | test.rs:209:13:211:14 | ExprStmt | +| test.rs:210:17:210:35 | [boolean(false)] break ''label ... | test.rs:210:17:210:35 | [boolean(false)] break ''label ... | +| test.rs:210:17:210:35 | [boolean(true)] break ''label ... | test.rs:210:17:210:35 | [boolean(true)] break ''label ... | +| test.rs:210:17:210:36 | ExprStmt | test.rs:207:5:218:5 | enter fn test_if_loop2 | +| test.rs:210:17:210:36 | ExprStmt | test.rs:209:13:211:13 | if ... {...} | +| test.rs:210:17:210:36 | ExprStmt | test.rs:209:13:211:14 | ExprStmt | +| test.rs:210:17:210:36 | ExprStmt | test.rs:210:17:210:36 | ExprStmt | +| test.rs:214:13:214:13 | 1 | test.rs:210:17:210:35 | [boolean(true)] break ''label ... | +| test.rs:214:13:214:13 | 1 | test.rs:214:13:214:13 | 1 | +| test.rs:216:13:216:13 | 0 | test.rs:210:17:210:35 | [boolean(false)] break ''label ... | +| test.rs:216:13:216:13 | 0 | test.rs:216:13:216:13 | 0 | +| test.rs:220:5:228:5 | enter fn test_labelled_block | test.rs:220:5:228:5 | enter fn test_labelled_block | +| test.rs:221:9:227:9 | if ... {...} else {...} | test.rs:220:5:228:5 | enter fn test_labelled_block | +| test.rs:221:9:227:9 | if ... {...} else {...} | test.rs:221:9:227:9 | if ... {...} else {...} | +| test.rs:221:9:227:9 | if ... {...} else {...} | test.rs:222:13:222:30 | [boolean(false)] break ''block ... | +| test.rs:221:9:227:9 | if ... {...} else {...} | test.rs:222:13:222:30 | [boolean(true)] break ''block ... | +| test.rs:221:9:227:9 | if ... {...} else {...} | test.rs:224:13:224:13 | 1 | +| test.rs:221:9:227:9 | if ... {...} else {...} | test.rs:226:13:226:13 | 0 | +| test.rs:222:13:222:30 | [boolean(false)] break ''block ... | test.rs:222:13:222:30 | [boolean(false)] break ''block ... | +| test.rs:222:13:222:30 | [boolean(true)] break ''block ... | test.rs:222:13:222:30 | [boolean(true)] break ''block ... | +| test.rs:224:13:224:13 | 1 | test.rs:222:13:222:30 | [boolean(true)] break ''block ... | +| test.rs:224:13:224:13 | 1 | test.rs:224:13:224:13 | 1 | +| test.rs:226:13:226:13 | 0 | test.rs:222:13:222:30 | [boolean(false)] break ''block ... | +| test.rs:226:13:226:13 | 0 | test.rs:226:13:226:13 | 0 | +| test.rs:233:5:236:5 | enter fn test_and_operator | test.rs:233:5:236:5 | enter fn test_and_operator | +| test.rs:234:17:234:22 | [boolean(false)] ... && ... | test.rs:234:17:234:22 | [boolean(false)] ... && ... | +| test.rs:234:17:234:22 | [boolean(true)] ... && ... | test.rs:234:17:234:22 | [boolean(true)] ... && ... | +| test.rs:234:17:234:27 | ... && ... | test.rs:233:5:236:5 | enter fn test_and_operator | +| test.rs:234:17:234:27 | ... && ... | test.rs:234:17:234:22 | [boolean(false)] ... && ... | +| test.rs:234:17:234:27 | ... && ... | test.rs:234:17:234:22 | [boolean(true)] ... && ... | +| test.rs:234:17:234:27 | ... && ... | test.rs:234:17:234:27 | ... && ... | +| test.rs:234:17:234:27 | ... && ... | test.rs:234:22:234:22 | b | +| test.rs:234:17:234:27 | ... && ... | test.rs:234:27:234:27 | c | +| test.rs:234:22:234:22 | b | test.rs:234:22:234:22 | b | +| test.rs:234:27:234:27 | c | test.rs:234:17:234:22 | [boolean(true)] ... && ... | +| test.rs:234:27:234:27 | c | test.rs:234:27:234:27 | c | +| test.rs:238:5:241:5 | enter fn test_or_operator | test.rs:238:5:241:5 | enter fn test_or_operator | +| test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | +| test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | +| test.rs:239:17:239:27 | ... \|\| ... | test.rs:238:5:241:5 | enter fn test_or_operator | +| test.rs:239:17:239:27 | ... \|\| ... | test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | +| test.rs:239:17:239:27 | ... \|\| ... | test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | +| test.rs:239:17:239:27 | ... \|\| ... | test.rs:239:17:239:27 | ... \|\| ... | +| test.rs:239:17:239:27 | ... \|\| ... | test.rs:239:22:239:22 | b | +| test.rs:239:17:239:27 | ... \|\| ... | test.rs:239:27:239:27 | c | +| test.rs:239:22:239:22 | b | test.rs:239:22:239:22 | b | +| test.rs:239:27:239:27 | c | test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | +| test.rs:239:27:239:27 | c | test.rs:239:27:239:27 | c | +| test.rs:243:5:246:5 | enter fn test_or_operator_2 | test.rs:243:5:246:5 | enter fn test_or_operator_2 | +| test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | +| test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | +| test.rs:244:17:244:35 | ... \|\| ... | test.rs:243:5:246:5 | enter fn test_or_operator_2 | +| test.rs:244:17:244:35 | ... \|\| ... | test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | +| test.rs:244:17:244:35 | ... \|\| ... | test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | +| test.rs:244:17:244:35 | ... \|\| ... | test.rs:244:17:244:35 | ... \|\| ... | +| test.rs:244:17:244:35 | ... \|\| ... | test.rs:244:23:244:23 | b | +| test.rs:244:17:244:35 | ... \|\| ... | test.rs:244:35:244:35 | c | +| test.rs:244:23:244:23 | b | test.rs:244:23:244:23 | b | +| test.rs:244:35:244:35 | c | test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | +| test.rs:244:35:244:35 | c | test.rs:244:35:244:35 | c | +| test.rs:248:5:251:5 | enter fn test_not_operator | test.rs:248:5:251:5 | enter fn test_not_operator | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:253:5:259:5 | enter fn test_if_and_operator | +| test.rs:254:9:258:9 | if ... {...} else {...} | test.rs:253:5:259:5 | enter fn test_if_and_operator | +| test.rs:254:9:258:9 | if ... {...} else {...} | test.rs:254:9:258:9 | if ... {...} else {...} | +| test.rs:254:9:258:9 | if ... {...} else {...} | test.rs:254:12:254:17 | [boolean(false)] ... && ... | +| test.rs:254:9:258:9 | if ... {...} else {...} | test.rs:254:12:254:17 | [boolean(true)] ... && ... | +| test.rs:254:9:258:9 | if ... {...} else {...} | test.rs:254:12:254:22 | [boolean(false)] ... && ... | +| test.rs:254:9:258:9 | if ... {...} else {...} | test.rs:254:12:254:22 | [boolean(true)] ... && ... | +| test.rs:254:9:258:9 | if ... {...} else {...} | test.rs:254:17:254:17 | b | +| test.rs:254:9:258:9 | if ... {...} else {...} | test.rs:254:22:254:22 | c | +| test.rs:254:9:258:9 | if ... {...} else {...} | test.rs:255:13:255:16 | true | +| test.rs:254:9:258:9 | if ... {...} else {...} | test.rs:257:13:257:17 | false | +| test.rs:254:12:254:17 | [boolean(false)] ... && ... | test.rs:254:12:254:17 | [boolean(false)] ... && ... | +| test.rs:254:12:254:17 | [boolean(true)] ... && ... | test.rs:254:12:254:17 | [boolean(true)] ... && ... | +| test.rs:254:12:254:22 | [boolean(false)] ... && ... | test.rs:254:12:254:17 | [boolean(false)] ... && ... | +| test.rs:254:12:254:22 | [boolean(false)] ... && ... | test.rs:254:12:254:22 | [boolean(false)] ... && ... | +| test.rs:254:12:254:22 | [boolean(true)] ... && ... | test.rs:254:12:254:22 | [boolean(true)] ... && ... | +| test.rs:254:17:254:17 | b | test.rs:254:17:254:17 | b | +| test.rs:254:22:254:22 | c | test.rs:254:12:254:17 | [boolean(true)] ... && ... | +| test.rs:254:22:254:22 | c | test.rs:254:22:254:22 | c | +| test.rs:255:13:255:16 | true | test.rs:254:12:254:22 | [boolean(true)] ... && ... | +| test.rs:255:13:255:16 | true | test.rs:255:13:255:16 | true | +| test.rs:257:13:257:17 | false | test.rs:254:12:254:17 | [boolean(false)] ... && ... | +| test.rs:257:13:257:17 | false | test.rs:254:12:254:22 | [boolean(false)] ... && ... | +| test.rs:257:13:257:17 | false | test.rs:257:13:257:17 | false | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:261:5:267:5 | enter fn test_if_or_operator | +| test.rs:262:9:266:9 | if ... {...} else {...} | test.rs:261:5:267:5 | enter fn test_if_or_operator | +| test.rs:262:9:266:9 | if ... {...} else {...} | test.rs:262:9:266:9 | if ... {...} else {...} | +| test.rs:262:9:266:9 | if ... {...} else {...} | test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | +| test.rs:262:9:266:9 | if ... {...} else {...} | test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | +| test.rs:262:9:266:9 | if ... {...} else {...} | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | +| test.rs:262:9:266:9 | if ... {...} else {...} | test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | +| test.rs:262:9:266:9 | if ... {...} else {...} | test.rs:262:17:262:17 | b | +| test.rs:262:9:266:9 | if ... {...} else {...} | test.rs:262:22:262:22 | c | +| test.rs:262:9:266:9 | if ... {...} else {...} | test.rs:263:13:263:16 | true | +| test.rs:262:9:266:9 | if ... {...} else {...} | test.rs:265:13:265:17 | false | +| test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | +| test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | +| test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | +| test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | +| test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | +| test.rs:262:17:262:17 | b | test.rs:262:17:262:17 | b | +| test.rs:262:22:262:22 | c | test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | +| test.rs:262:22:262:22 | c | test.rs:262:22:262:22 | c | +| test.rs:263:13:263:16 | true | test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | +| test.rs:263:13:263:16 | true | test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | +| test.rs:263:13:263:16 | true | test.rs:263:13:263:16 | true | +| test.rs:265:13:265:17 | false | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | +| test.rs:265:13:265:17 | false | test.rs:265:13:265:17 | false | +| test.rs:269:5:275:5 | enter fn test_if_not_operator | test.rs:269:5:275:5 | enter fn test_if_not_operator | +| test.rs:270:9:274:9 | if ... {...} else {...} | test.rs:269:5:275:5 | enter fn test_if_not_operator | +| test.rs:270:9:274:9 | if ... {...} else {...} | test.rs:270:9:274:9 | if ... {...} else {...} | +| test.rs:270:9:274:9 | if ... {...} else {...} | test.rs:270:12:270:13 | [boolean(false)] ! ... | +| test.rs:270:9:274:9 | if ... {...} else {...} | test.rs:270:12:270:13 | [boolean(true)] ! ... | +| test.rs:270:9:274:9 | if ... {...} else {...} | test.rs:271:13:271:16 | true | +| test.rs:270:9:274:9 | if ... {...} else {...} | test.rs:273:13:273:17 | false | +| test.rs:270:12:270:13 | [boolean(false)] ! ... | test.rs:270:12:270:13 | [boolean(false)] ! ... | +| test.rs:270:12:270:13 | [boolean(true)] ! ... | test.rs:270:12:270:13 | [boolean(true)] ! ... | +| test.rs:271:13:271:16 | true | test.rs:270:12:270:13 | [boolean(true)] ! ... | +| test.rs:271:13:271:16 | true | test.rs:271:13:271:16 | true | +| test.rs:273:13:273:17 | false | test.rs:270:12:270:13 | [boolean(false)] ! ... | +| test.rs:273:13:273:17 | false | test.rs:273:13:273:17 | false | +| test.rs:277:5:279:5 | enter fn test_and_return | test.rs:277:5:279:5 | enter fn test_and_return | +| test.rs:277:5:279:5 | exit fn test_and_return (normal) | test.rs:277:5:279:5 | enter fn test_and_return | +| test.rs:277:5:279:5 | exit fn test_and_return (normal) | test.rs:277:5:279:5 | exit fn test_and_return (normal) | +| test.rs:277:5:279:5 | exit fn test_and_return (normal) | test.rs:278:9:278:19 | ... && ... | +| test.rs:277:5:279:5 | exit fn test_and_return (normal) | test.rs:278:14:278:19 | return | +| test.rs:278:9:278:19 | ... && ... | test.rs:278:9:278:19 | ... && ... | +| test.rs:278:14:278:19 | return | test.rs:278:14:278:19 | return | +| test.rs:281:5:286:5 | enter fn test_and_true | test.rs:281:5:286:5 | enter fn test_and_true | +| test.rs:281:5:286:5 | exit fn test_and_true (normal) | test.rs:281:5:286:5 | enter fn test_and_true | +| test.rs:281:5:286:5 | exit fn test_and_true (normal) | test.rs:281:5:286:5 | exit fn test_and_true (normal) | +| test.rs:281:5:286:5 | exit fn test_and_true (normal) | test.rs:282:9:284:9 | if ... {...} | +| test.rs:281:5:286:5 | exit fn test_and_true (normal) | test.rs:282:13:282:21 | [boolean(false)] ... && ... | +| test.rs:281:5:286:5 | exit fn test_and_true (normal) | test.rs:282:13:282:21 | [boolean(true)] ... && ... | +| test.rs:281:5:286:5 | exit fn test_and_true (normal) | test.rs:282:18:282:21 | true | +| test.rs:281:5:286:5 | exit fn test_and_true (normal) | test.rs:283:13:283:21 | ExprStmt | +| test.rs:282:9:284:9 | if ... {...} | test.rs:282:9:284:9 | if ... {...} | +| test.rs:282:9:284:9 | if ... {...} | test.rs:282:13:282:21 | [boolean(false)] ... && ... | +| test.rs:282:13:282:21 | [boolean(false)] ... && ... | test.rs:282:13:282:21 | [boolean(false)] ... && ... | +| test.rs:282:13:282:21 | [boolean(true)] ... && ... | test.rs:282:13:282:21 | [boolean(true)] ... && ... | +| test.rs:282:13:282:21 | [boolean(true)] ... && ... | test.rs:282:18:282:21 | true | +| test.rs:282:18:282:21 | true | test.rs:282:18:282:21 | true | +| test.rs:283:13:283:21 | ExprStmt | test.rs:282:13:282:21 | [boolean(true)] ... && ... | +| test.rs:283:13:283:21 | ExprStmt | test.rs:282:18:282:21 | true | +| test.rs:283:13:283:21 | ExprStmt | test.rs:283:13:283:21 | ExprStmt | +| test.rs:292:5:294:5 | enter fn test_question_mark_operator_1 | test.rs:292:5:294:5 | enter fn test_question_mark_operator_1 | +| test.rs:292:5:294:5 | exit fn test_question_mark_operator_1 (normal) | test.rs:292:5:294:5 | enter fn test_question_mark_operator_1 | +| test.rs:292:5:294:5 | exit fn test_question_mark_operator_1 (normal) | test.rs:292:5:294:5 | exit fn test_question_mark_operator_1 (normal) | +| test.rs:292:5:294:5 | exit fn test_question_mark_operator_1 (normal) | test.rs:293:32:293:32 | 4 | +| test.rs:293:32:293:32 | 4 | test.rs:293:32:293:32 | 4 | +| test.rs:296:5:301:5 | enter fn test_question_mark_operator_2 | test.rs:296:5:301:5 | enter fn test_question_mark_operator_2 | +| test.rs:296:5:301:5 | exit fn test_question_mark_operator_2 (normal) | test.rs:296:5:301:5 | enter fn test_question_mark_operator_2 | +| test.rs:296:5:301:5 | exit fn test_question_mark_operator_2 (normal) | test.rs:296:5:301:5 | exit fn test_question_mark_operator_2 (normal) | +| test.rs:296:5:301:5 | exit fn test_question_mark_operator_2 (normal) | test.rs:297:9:300:9 | match ... { ... } | +| test.rs:296:5:301:5 | exit fn test_question_mark_operator_2 (normal) | test.rs:298:13:298:16 | true | +| test.rs:296:5:301:5 | exit fn test_question_mark_operator_2 (normal) | test.rs:298:21:298:24 | Some | +| test.rs:296:5:301:5 | exit fn test_question_mark_operator_2 (normal) | test.rs:299:13:299:17 | false | +| test.rs:297:9:300:9 | match ... { ... } | test.rs:297:9:300:9 | match ... { ... } | +| test.rs:297:9:300:9 | match ... { ... } | test.rs:298:13:298:16 | true | +| test.rs:297:9:300:9 | match ... { ... } | test.rs:298:21:298:24 | Some | +| test.rs:297:9:300:9 | match ... { ... } | test.rs:299:13:299:17 | false | +| test.rs:298:13:298:16 | true | test.rs:298:13:298:16 | true | +| test.rs:298:21:298:24 | Some | test.rs:298:21:298:24 | Some | +| test.rs:299:13:299:17 | false | test.rs:299:13:299:17 | false | +| test.rs:307:5:313:5 | enter fn test_match | test.rs:307:5:313:5 | enter fn test_match | +| test.rs:308:9:312:9 | match maybe_digit { ... } | test.rs:307:5:313:5 | enter fn test_match | +| test.rs:308:9:312:9 | match maybe_digit { ... } | test.rs:308:9:312:9 | match maybe_digit { ... } | +| test.rs:308:9:312:9 | match maybe_digit { ... } | test.rs:309:26:309:26 | x | +| test.rs:308:9:312:9 | match maybe_digit { ... } | test.rs:309:42:309:42 | x | +| test.rs:308:9:312:9 | match maybe_digit { ... } | test.rs:310:13:310:27 | ...::Some(...) | +| test.rs:308:9:312:9 | match maybe_digit { ... } | test.rs:310:26:310:26 | x | +| test.rs:308:9:312:9 | match maybe_digit { ... } | test.rs:311:13:311:24 | ...::None | +| test.rs:309:26:309:26 | x | test.rs:309:26:309:26 | x | +| test.rs:309:42:309:42 | x | test.rs:309:42:309:42 | x | +| test.rs:310:13:310:27 | ...::Some(...) | test.rs:310:13:310:27 | ...::Some(...) | +| test.rs:310:26:310:26 | x | test.rs:310:26:310:26 | x | +| test.rs:311:13:311:24 | ...::None | test.rs:311:13:311:24 | ...::None | +| test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | +| test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | +| test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | +| test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | test.rs:316:9:323:9 | match ... { ... } | +| test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | test.rs:317:13:317:21 | ExprStmt | +| test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | test.rs:319:13:319:23 | maybe_digit | +| test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | test.rs:321:26:321:26 | x | +| test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | test.rs:322:13:322:24 | ...::None | +| test.rs:316:9:323:9 | match ... { ... } | test.rs:316:9:323:9 | match ... { ... } | +| test.rs:316:9:323:9 | match ... { ... } | test.rs:319:13:319:23 | maybe_digit | +| test.rs:316:9:323:9 | match ... { ... } | test.rs:321:26:321:26 | x | +| test.rs:316:9:323:9 | match ... { ... } | test.rs:322:13:322:24 | ...::None | +| test.rs:317:13:317:21 | ExprStmt | test.rs:317:13:317:21 | ExprStmt | +| test.rs:319:13:319:23 | maybe_digit | test.rs:319:13:319:23 | maybe_digit | +| test.rs:321:26:321:26 | x | test.rs:321:26:321:26 | x | +| test.rs:322:13:322:24 | ...::None | test.rs:322:13:322:24 | ...::None | +| test.rs:326:5:331:5 | enter fn test_match_and | test.rs:326:5:331:5 | enter fn test_match_and | +| test.rs:327:9:330:18 | ... && ... | test.rs:326:5:331:5 | enter fn test_match_and | +| test.rs:327:9:330:18 | ... && ... | test.rs:327:9:330:18 | ... && ... | +| test.rs:327:9:330:18 | ... && ... | test.rs:327:10:330:9 | [boolean(false)] match r { ... } | +| test.rs:327:9:330:18 | ... && ... | test.rs:327:10:330:9 | [boolean(true)] match r { ... } | +| test.rs:327:9:330:18 | ... && ... | test.rs:328:18:328:18 | a | +| test.rs:327:9:330:18 | ... && ... | test.rs:329:13:329:13 | _ | +| test.rs:327:9:330:18 | ... && ... | test.rs:330:15:330:18 | cond | +| test.rs:327:10:330:9 | [boolean(false)] match r { ... } | test.rs:327:10:330:9 | [boolean(false)] match r { ... } | +| test.rs:327:10:330:9 | [boolean(false)] match r { ... } | test.rs:329:13:329:13 | _ | +| test.rs:327:10:330:9 | [boolean(true)] match r { ... } | test.rs:327:10:330:9 | [boolean(true)] match r { ... } | +| test.rs:328:18:328:18 | a | test.rs:328:18:328:18 | a | +| test.rs:329:13:329:13 | _ | test.rs:329:13:329:13 | _ | +| test.rs:330:15:330:18 | cond | test.rs:327:10:330:9 | [boolean(true)] match r { ... } | +| test.rs:330:15:330:18 | cond | test.rs:330:15:330:18 | cond | +| test.rs:333:5:338:5 | enter fn test_match_with_no_arms | test.rs:333:5:338:5 | enter fn test_match_with_no_arms | +| test.rs:334:9:337:9 | match r { ... } | test.rs:333:5:338:5 | enter fn test_match_with_no_arms | +| test.rs:334:9:337:9 | match r { ... } | test.rs:334:9:337:9 | match r { ... } | +| test.rs:334:9:337:9 | match r { ... } | test.rs:335:16:335:20 | value | +| test.rs:334:9:337:9 | match r { ... } | test.rs:336:13:336:22 | Err(...) | +| test.rs:335:16:335:20 | value | test.rs:335:16:335:20 | value | +| test.rs:336:13:336:22 | Err(...) | test.rs:336:13:336:22 | Err(...) | +| test.rs:343:5:346:5 | enter fn test_let_match | test.rs:343:5:346:5 | enter fn test_let_match | +| test.rs:344:18:344:18 | n | test.rs:343:5:346:5 | enter fn test_let_match | +| test.rs:344:18:344:18 | n | test.rs:344:18:344:18 | n | +| test.rs:344:39:344:53 | MacroStmts | test.rs:344:39:344:53 | MacroStmts | +| test.rs:348:5:354:5 | enter fn test_let_with_return | test.rs:348:5:354:5 | enter fn test_let_with_return | +| test.rs:348:5:354:5 | exit fn test_let_with_return (normal) | test.rs:348:5:354:5 | enter fn test_let_with_return | +| test.rs:348:5:354:5 | exit fn test_let_with_return (normal) | test.rs:348:5:354:5 | exit fn test_let_with_return (normal) | +| test.rs:348:5:354:5 | exit fn test_let_with_return (normal) | test.rs:350:18:350:20 | ret | +| test.rs:348:5:354:5 | exit fn test_let_with_return (normal) | test.rs:351:13:351:16 | None | +| test.rs:350:18:350:20 | ret | test.rs:350:18:350:20 | ret | +| test.rs:351:13:351:16 | None | test.rs:351:13:351:16 | None | +| test.rs:359:5:362:5 | enter fn empty_tuple_pattern | test.rs:359:5:362:5 | enter fn empty_tuple_pattern | +| test.rs:366:5:370:5 | enter fn empty_struct_pattern | test.rs:366:5:370:5 | enter fn empty_struct_pattern | +| test.rs:372:5:379:5 | enter fn range_pattern | test.rs:372:5:379:5 | enter fn range_pattern | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:372:5:379:5 | enter fn range_pattern | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:373:9:378:9 | match 42 { ... } | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:374:15:374:15 | 0 | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:374:20:374:20 | 1 | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:375:13:375:13 | 1 | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:375:13:375:16 | RangePat | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:375:16:375:16 | 2 | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:375:21:375:21 | 2 | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:376:13:376:13 | 5 | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:376:13:376:15 | RangePat | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:376:20:376:20 | 3 | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:377:13:377:13 | _ | +| test.rs:374:15:374:15 | 0 | test.rs:374:15:374:15 | 0 | +| test.rs:374:20:374:20 | 1 | test.rs:374:20:374:20 | 1 | +| test.rs:375:13:375:13 | 1 | test.rs:375:13:375:13 | 1 | +| test.rs:375:13:375:16 | RangePat | test.rs:375:13:375:16 | RangePat | +| test.rs:375:16:375:16 | 2 | test.rs:375:16:375:16 | 2 | +| test.rs:375:21:375:21 | 2 | test.rs:375:21:375:21 | 2 | +| test.rs:376:13:376:13 | 5 | test.rs:376:13:376:13 | 5 | +| test.rs:376:13:376:15 | RangePat | test.rs:376:13:376:15 | RangePat | +| test.rs:376:20:376:20 | 3 | test.rs:376:20:376:20 | 3 | +| test.rs:377:13:377:13 | _ | test.rs:377:13:377:13 | _ | +| test.rs:383:5:388:5 | enter fn test_infinite_loop | test.rs:383:5:388:5 | enter fn test_infinite_loop | +| test.rs:385:13:385:14 | TupleExpr | test.rs:385:13:385:14 | TupleExpr | +| test.rs:392:5:394:5 | enter fn say_hello | test.rs:392:5:394:5 | enter fn say_hello | +| test.rs:396:5:415:5 | enter fn async_block | test.rs:396:5:415:5 | enter fn async_block | +| test.rs:397:26:399:9 | enter { ... } | test.rs:397:26:399:9 | enter { ... } | +| test.rs:400:31:402:9 | enter { ... } | test.rs:400:31:402:9 | enter { ... } | +| test.rs:409:22:414:9 | enter \|...\| ... | test.rs:409:22:414:9 | enter \|...\| ... | +| test.rs:409:28:414:9 | enter { ... } | test.rs:409:28:414:9 | enter { ... } | +| test.rs:409:28:414:9 | exit { ... } (normal) | test.rs:409:28:414:9 | enter { ... } | +| test.rs:409:28:414:9 | exit { ... } (normal) | test.rs:409:28:414:9 | exit { ... } (normal) | +| test.rs:409:28:414:9 | exit { ... } (normal) | test.rs:410:13:412:13 | if b {...} | +| test.rs:409:28:414:9 | exit { ... } (normal) | test.rs:411:17:411:41 | ExprStmt | +| test.rs:410:13:412:13 | if b {...} | test.rs:410:13:412:13 | if b {...} | +| test.rs:411:17:411:41 | ExprStmt | test.rs:411:17:411:41 | ExprStmt | +| test.rs:421:5:423:5 | enter fn add_two | test.rs:421:5:423:5 | enter fn add_two | +| test.rs:427:5:435:5 | enter fn const_block_assert | test.rs:427:5:435:5 | enter fn const_block_assert | +| test.rs:431:13:431:49 | ExprStmt | test.rs:431:13:431:49 | ExprStmt | +| test.rs:431:13:431:49 | ExprStmt | test.rs:431:21:431:48 | [boolean(true)] ! ... | +| test.rs:431:13:431:49 | enter fn panic_cold_explicit | test.rs:431:13:431:49 | enter fn panic_cold_explicit | +| test.rs:431:21:431:48 | [boolean(false)] ! ... | test.rs:431:21:431:48 | [boolean(false)] ! ... | +| test.rs:431:21:431:48 | [boolean(true)] ! ... | test.rs:431:21:431:48 | [boolean(true)] ! ... | +| test.rs:431:21:431:48 | if ... {...} | test.rs:427:5:435:5 | enter fn const_block_assert | +| test.rs:431:21:431:48 | if ... {...} | test.rs:431:13:431:49 | ExprStmt | +| test.rs:431:21:431:48 | if ... {...} | test.rs:431:21:431:48 | [boolean(false)] ! ... | +| test.rs:431:21:431:48 | if ... {...} | test.rs:431:21:431:48 | [boolean(true)] ! ... | +| test.rs:431:21:431:48 | if ... {...} | test.rs:431:21:431:48 | if ... {...} | +| test.rs:437:5:446:5 | enter fn const_block_panic | test.rs:437:5:446:5 | enter fn const_block_panic | +| test.rs:439:9:444:9 | if false {...} | test.rs:437:5:446:5 | enter fn const_block_panic | +| test.rs:439:9:444:9 | if false {...} | test.rs:439:9:444:9 | if false {...} | +| test.rs:442:17:442:24 | enter fn panic_cold_explicit | test.rs:442:17:442:24 | enter fn panic_cold_explicit | +| test.rs:449:1:454:1 | enter fn dead_code | test.rs:449:1:454:1 | enter fn dead_code | +| test.rs:451:9:451:17 | ExprStmt | test.rs:449:1:454:1 | enter fn dead_code | +| test.rs:451:9:451:17 | ExprStmt | test.rs:451:9:451:17 | ExprStmt | +| test.rs:456:1:456:16 | enter fn do_thing | test.rs:456:1:456:16 | enter fn do_thing | +| test.rs:458:1:460:1 | enter fn condition_not_met | test.rs:458:1:460:1 | enter fn condition_not_met | +| test.rs:462:1:462:21 | enter fn do_next_thing | test.rs:462:1:462:21 | enter fn do_next_thing | +| test.rs:464:1:464:21 | enter fn do_last_thing | test.rs:464:1:464:21 | enter fn do_last_thing | +| test.rs:466:1:480:1 | enter fn labelled_block1 | test.rs:466:1:480:1 | enter fn labelled_block1 | +| test.rs:467:18:478:5 | 'block: { ... } | test.rs:466:1:480:1 | enter fn labelled_block1 | +| test.rs:467:18:478:5 | 'block: { ... } | test.rs:467:18:478:5 | 'block: { ... } | +| test.rs:467:18:478:5 | 'block: { ... } | test.rs:469:9:471:9 | if ... {...} | +| test.rs:467:18:478:5 | 'block: { ... } | test.rs:470:13:470:27 | ExprStmt | +| test.rs:467:18:478:5 | 'block: { ... } | test.rs:473:9:475:9 | if ... {...} | +| test.rs:467:18:478:5 | 'block: { ... } | test.rs:474:13:474:27 | ExprStmt | +| test.rs:469:9:471:9 | if ... {...} | test.rs:469:9:471:9 | if ... {...} | +| test.rs:470:13:470:27 | ExprStmt | test.rs:470:13:470:27 | ExprStmt | +| test.rs:473:9:475:9 | if ... {...} | test.rs:473:9:475:9 | if ... {...} | +| test.rs:474:13:474:27 | ExprStmt | test.rs:474:13:474:27 | ExprStmt | +| test.rs:482:1:490:1 | enter fn labelled_block2 | test.rs:482:1:490:1 | enter fn labelled_block2 | +| test.rs:483:18:489:5 | 'block: { ... } | test.rs:482:1:490:1 | enter fn labelled_block2 | +| test.rs:483:18:489:5 | 'block: { ... } | test.rs:483:18:489:5 | 'block: { ... } | +| test.rs:483:18:489:5 | 'block: { ... } | test.rs:485:18:485:18 | y | +| test.rs:483:18:489:5 | 'block: { ... } | test.rs:486:13:486:27 | ExprStmt | +| test.rs:485:18:485:18 | y | test.rs:485:18:485:18 | y | +| test.rs:486:13:486:27 | ExprStmt | test.rs:486:13:486:27 | ExprStmt | +| test.rs:492:1:498:1 | enter fn test_nested_function2 | test.rs:492:1:498:1 | enter fn test_nested_function2 | +| test.rs:494:5:496:5 | enter fn nested | test.rs:494:5:496:5 | enter fn nested | +| test.rs:509:5:511:5 | enter fn new | test.rs:509:5:511:5 | enter fn new | +| test.rs:513:5:515:5 | enter fn negated | test.rs:513:5:515:5 | enter fn negated | +| test.rs:517:5:519:5 | enter fn multifly_add | test.rs:517:5:519:5 | enter fn multifly_add | +immediateDominator +| test.rs:19:9:23:9 | if ... {...} else {...} | test.rs:18:5:24:5 | enter fn next | +| test.rs:20:13:20:13 | n | test.rs:18:5:24:5 | enter fn next | +| test.rs:22:13:22:13 | 3 | test.rs:18:5:24:5 | enter fn next | +| test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | test.rs:29:13:29:24 | ExprStmt | +| test.rs:29:13:29:24 | ExprStmt | test.rs:26:5:42:5 | enter fn test_break_and_continue | +| test.rs:30:13:32:13 | if ... {...} | test.rs:29:13:29:24 | ExprStmt | +| test.rs:31:17:31:29 | ExprStmt | test.rs:29:13:29:24 | ExprStmt | +| test.rs:33:13:35:13 | if ... {...} | test.rs:30:13:32:13 | if ... {...} | +| test.rs:34:17:34:22 | ExprStmt | test.rs:30:13:32:13 | if ... {...} | +| test.rs:36:13:38:13 | if ... {...} | test.rs:33:13:35:13 | if ... {...} | +| test.rs:37:17:37:25 | ExprStmt | test.rs:33:13:35:13 | if ... {...} | +| test.rs:46:13:53:13 | 'inner: loop { ... } | test.rs:47:17:51:17 | ExprStmt | +| test.rs:47:17:51:17 | ExprStmt | test.rs:44:5:56:5 | enter fn test_break_with_labels | +| test.rs:48:21:48:26 | ExprStmt | test.rs:47:17:51:17 | ExprStmt | +| test.rs:49:24:51:17 | if b {...} | test.rs:49:27:49:27 | b | +| test.rs:49:27:49:27 | b | test.rs:47:17:51:17 | ExprStmt | +| test.rs:50:21:50:33 | ExprStmt | test.rs:49:27:49:27 | b | +| test.rs:60:13:60:14 | ExprStmt | test.rs:58:5:70:5 | enter fn test_continue_with_labels | +| test.rs:62:17:66:17 | ExprStmt | test.rs:60:13:60:14 | ExprStmt | +| test.rs:63:21:63:29 | ExprStmt | test.rs:62:17:66:17 | ExprStmt | +| test.rs:64:24:66:17 | if b {...} | test.rs:64:27:64:27 | b | +| test.rs:64:27:64:27 | b | test.rs:62:17:66:17 | ExprStmt | +| test.rs:65:21:65:36 | ExprStmt | test.rs:64:27:64:27 | b | +| test.rs:76:17:80:17 | ExprStmt | test.rs:72:5:84:5 | enter fn test_loop_label_shadowing | +| test.rs:77:21:77:29 | ExprStmt | test.rs:76:17:80:17 | ExprStmt | +| test.rs:78:24:80:17 | if b {...} | test.rs:78:27:78:27 | b | +| test.rs:78:27:78:27 | b | test.rs:76:17:80:17 | ExprStmt | +| test.rs:79:21:79:36 | ExprStmt | test.rs:78:27:78:27 | b | +| test.rs:88:9:94:9 | while b { ... } | test.rs:88:15:88:15 | b | +| test.rs:88:15:88:15 | b | test.rs:86:5:95:5 | enter fn test_while | +| test.rs:89:13:89:14 | ExprStmt | test.rs:88:15:88:15 | b | +| test.rs:90:13:92:13 | if ... {...} | test.rs:89:13:89:14 | ExprStmt | +| test.rs:91:17:91:22 | ExprStmt | test.rs:89:13:89:14 | ExprStmt | +| test.rs:99:9:103:9 | while ... { ... } | test.rs:99:15:99:39 | let ... = ... | +| test.rs:99:15:99:39 | let ... = ... | test.rs:97:5:104:5 | enter fn test_while_let | +| test.rs:99:24:99:24 | x | test.rs:99:15:99:39 | let ... = ... | +| test.rs:100:13:102:13 | if ... {...} | test.rs:99:24:99:24 | x | +| test.rs:101:17:101:22 | ExprStmt | test.rs:99:24:99:24 | x | +| test.rs:107:9:112:9 | for ... in ... { ... } | test.rs:107:13:107:13 | i | +| test.rs:107:13:107:13 | i | test.rs:106:5:113:5 | enter fn test_for | +| test.rs:108:13:110:13 | ExprStmt | test.rs:107:13:107:13 | i | +| test.rs:108:13:110:13 | if ... {...} | test.rs:108:13:110:13 | ExprStmt | +| test.rs:109:17:109:22 | ExprStmt | test.rs:108:13:110:13 | ExprStmt | +| test.rs:130:9:134:9 | if ... {...} else {...} | test.rs:129:5:135:5 | enter fn test_if_else | +| test.rs:131:13:131:13 | 0 | test.rs:129:5:135:5 | enter fn test_if_else | +| test.rs:133:13:133:13 | n | test.rs:129:5:135:5 | enter fn test_if_else | +| test.rs:138:9:142:9 | if ... {...} else {...} | test.rs:137:5:143:5 | enter fn test_if_let_else | +| test.rs:138:21:138:21 | n | test.rs:137:5:143:5 | enter fn test_if_let_else | +| test.rs:141:13:141:13 | 0 | test.rs:137:5:143:5 | enter fn test_if_let_else | +| test.rs:145:5:150:5 | exit fn test_if_let (normal) | test.rs:145:5:150:5 | enter fn test_if_let | +| test.rs:146:9:148:9 | if ... {...} | test.rs:145:5:150:5 | enter fn test_if_let | +| test.rs:146:21:146:21 | n | test.rs:145:5:150:5 | enter fn test_if_let | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:152:5:158:5 | enter fn test_nested_if | +| test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | test.rs:152:5:158:5 | enter fn test_nested_if | +| test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | test.rs:152:5:158:5 | enter fn test_nested_if | +| test.rs:153:22:153:32 | [boolean(false)] { ... } | test.rs:153:24:153:24 | a | +| test.rs:153:22:153:32 | [boolean(true)] { ... } | test.rs:153:24:153:24 | a | +| test.rs:153:24:153:24 | a | test.rs:152:5:158:5 | enter fn test_nested_if | +| test.rs:153:39:153:48 | [boolean(false)] { ... } | test.rs:153:41:153:41 | a | +| test.rs:153:39:153:48 | [boolean(true)] { ... } | test.rs:153:41:153:41 | a | +| test.rs:153:41:153:41 | a | test.rs:152:5:158:5 | enter fn test_nested_if | +| test.rs:154:13:154:13 | 1 | test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | +| test.rs:156:13:156:13 | 0 | test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | +| test.rs:161:9:168:9 | if ... {...} else {...} | test.rs:160:5:169:5 | enter fn test_nested_if_match | +| test.rs:161:13:164:9 | [boolean(false)] match a { ... } | test.rs:163:13:163:13 | _ | +| test.rs:161:13:164:9 | [boolean(true)] match a { ... } | test.rs:162:18:162:21 | true | +| test.rs:162:18:162:21 | true | test.rs:160:5:169:5 | enter fn test_nested_if_match | +| test.rs:163:13:163:13 | _ | test.rs:160:5:169:5 | enter fn test_nested_if_match | +| test.rs:165:13:165:13 | 1 | test.rs:161:13:164:9 | [boolean(true)] match a { ... } | +| test.rs:167:13:167:13 | 0 | test.rs:161:13:164:9 | [boolean(false)] match a { ... } | +| test.rs:172:9:179:9 | if ... {...} else {...} | test.rs:171:5:180:5 | enter fn test_nested_if_block | +| test.rs:172:12:175:9 | [boolean(false)] { ... } | test.rs:171:5:180:5 | enter fn test_nested_if_block | +| test.rs:172:12:175:9 | [boolean(true)] { ... } | test.rs:171:5:180:5 | enter fn test_nested_if_block | +| test.rs:176:13:176:13 | 1 | test.rs:172:12:175:9 | [boolean(true)] { ... } | +| test.rs:178:13:178:13 | 0 | test.rs:172:12:175:9 | [boolean(false)] { ... } | +| test.rs:184:9:191:9 | if ... {...} else {...} | test.rs:182:5:192:5 | enter fn test_if_assignment | +| test.rs:184:12:187:9 | [boolean(false)] { ... } | test.rs:182:5:192:5 | enter fn test_if_assignment | +| test.rs:184:12:187:9 | [boolean(true)] { ... } | test.rs:182:5:192:5 | enter fn test_if_assignment | +| test.rs:188:13:188:13 | 1 | test.rs:184:12:187:9 | [boolean(true)] { ... } | +| test.rs:190:13:190:13 | 0 | test.rs:184:12:187:9 | [boolean(false)] { ... } | +| test.rs:195:9:204:9 | if ... {...} else {...} | test.rs:197:17:197:29 | ExprStmt | +| test.rs:196:13:198:13 | if ... {...} | test.rs:196:13:198:14 | ExprStmt | +| test.rs:196:13:198:14 | ExprStmt | test.rs:194:5:205:5 | enter fn test_if_loop1 | +| test.rs:197:17:197:28 | [boolean(false)] break ... | test.rs:197:17:197:29 | ExprStmt | +| test.rs:197:17:197:28 | [boolean(true)] break ... | test.rs:197:17:197:29 | ExprStmt | +| test.rs:197:17:197:29 | ExprStmt | test.rs:196:13:198:14 | ExprStmt | +| test.rs:201:13:201:13 | 1 | test.rs:197:17:197:28 | [boolean(true)] break ... | +| test.rs:203:13:203:13 | 0 | test.rs:197:17:197:28 | [boolean(false)] break ... | +| test.rs:208:9:217:9 | if ... {...} else {...} | test.rs:210:17:210:36 | ExprStmt | +| test.rs:209:13:211:13 | if ... {...} | test.rs:209:13:211:14 | ExprStmt | +| test.rs:209:13:211:14 | ExprStmt | test.rs:207:5:218:5 | enter fn test_if_loop2 | +| test.rs:210:17:210:35 | [boolean(false)] break ''label ... | test.rs:210:17:210:36 | ExprStmt | +| test.rs:210:17:210:35 | [boolean(true)] break ''label ... | test.rs:210:17:210:36 | ExprStmt | +| test.rs:210:17:210:36 | ExprStmt | test.rs:209:13:211:14 | ExprStmt | +| test.rs:214:13:214:13 | 1 | test.rs:210:17:210:35 | [boolean(true)] break ''label ... | +| test.rs:216:13:216:13 | 0 | test.rs:210:17:210:35 | [boolean(false)] break ''label ... | +| test.rs:221:9:227:9 | if ... {...} else {...} | test.rs:220:5:228:5 | enter fn test_labelled_block | +| test.rs:222:13:222:30 | [boolean(false)] break ''block ... | test.rs:220:5:228:5 | enter fn test_labelled_block | +| test.rs:222:13:222:30 | [boolean(true)] break ''block ... | test.rs:220:5:228:5 | enter fn test_labelled_block | +| test.rs:224:13:224:13 | 1 | test.rs:222:13:222:30 | [boolean(true)] break ''block ... | +| test.rs:226:13:226:13 | 0 | test.rs:222:13:222:30 | [boolean(false)] break ''block ... | +| test.rs:234:17:234:22 | [boolean(false)] ... && ... | test.rs:233:5:236:5 | enter fn test_and_operator | +| test.rs:234:17:234:22 | [boolean(true)] ... && ... | test.rs:234:22:234:22 | b | +| test.rs:234:17:234:27 | ... && ... | test.rs:233:5:236:5 | enter fn test_and_operator | +| test.rs:234:22:234:22 | b | test.rs:233:5:236:5 | enter fn test_and_operator | +| test.rs:234:27:234:27 | c | test.rs:234:17:234:22 | [boolean(true)] ... && ... | +| test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | test.rs:239:22:239:22 | b | +| test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | test.rs:238:5:241:5 | enter fn test_or_operator | +| test.rs:239:17:239:27 | ... \|\| ... | test.rs:238:5:241:5 | enter fn test_or_operator | +| test.rs:239:22:239:22 | b | test.rs:238:5:241:5 | enter fn test_or_operator | +| test.rs:239:27:239:27 | c | test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | +| test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | test.rs:244:23:244:23 | b | +| test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | test.rs:243:5:246:5 | enter fn test_or_operator_2 | +| test.rs:244:17:244:35 | ... \|\| ... | test.rs:243:5:246:5 | enter fn test_or_operator_2 | +| test.rs:244:23:244:23 | b | test.rs:243:5:246:5 | enter fn test_or_operator_2 | +| test.rs:244:35:244:35 | c | test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | +| test.rs:254:9:258:9 | if ... {...} else {...} | test.rs:253:5:259:5 | enter fn test_if_and_operator | +| test.rs:254:12:254:17 | [boolean(false)] ... && ... | test.rs:253:5:259:5 | enter fn test_if_and_operator | +| test.rs:254:12:254:17 | [boolean(true)] ... && ... | test.rs:254:17:254:17 | b | +| test.rs:254:12:254:22 | [boolean(false)] ... && ... | test.rs:253:5:259:5 | enter fn test_if_and_operator | +| test.rs:254:12:254:22 | [boolean(true)] ... && ... | test.rs:254:22:254:22 | c | +| test.rs:254:17:254:17 | b | test.rs:253:5:259:5 | enter fn test_if_and_operator | +| test.rs:254:22:254:22 | c | test.rs:254:12:254:17 | [boolean(true)] ... && ... | +| test.rs:255:13:255:16 | true | test.rs:254:12:254:22 | [boolean(true)] ... && ... | +| test.rs:257:13:257:17 | false | test.rs:254:12:254:22 | [boolean(false)] ... && ... | +| test.rs:262:9:266:9 | if ... {...} else {...} | test.rs:261:5:267:5 | enter fn test_if_or_operator | +| test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | test.rs:262:17:262:17 | b | +| test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | test.rs:261:5:267:5 | enter fn test_if_or_operator | +| test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | test.rs:262:22:262:22 | c | +| test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | test.rs:261:5:267:5 | enter fn test_if_or_operator | +| test.rs:262:17:262:17 | b | test.rs:261:5:267:5 | enter fn test_if_or_operator | +| test.rs:262:22:262:22 | c | test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | +| test.rs:263:13:263:16 | true | test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | +| test.rs:265:13:265:17 | false | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | +| test.rs:270:9:274:9 | if ... {...} else {...} | test.rs:269:5:275:5 | enter fn test_if_not_operator | +| test.rs:270:12:270:13 | [boolean(false)] ! ... | test.rs:269:5:275:5 | enter fn test_if_not_operator | +| test.rs:270:12:270:13 | [boolean(true)] ! ... | test.rs:269:5:275:5 | enter fn test_if_not_operator | +| test.rs:271:13:271:16 | true | test.rs:270:12:270:13 | [boolean(true)] ! ... | +| test.rs:273:13:273:17 | false | test.rs:270:12:270:13 | [boolean(false)] ! ... | +| test.rs:277:5:279:5 | exit fn test_and_return (normal) | test.rs:277:5:279:5 | enter fn test_and_return | +| test.rs:278:9:278:19 | ... && ... | test.rs:277:5:279:5 | enter fn test_and_return | +| test.rs:278:14:278:19 | return | test.rs:277:5:279:5 | enter fn test_and_return | +| test.rs:281:5:286:5 | exit fn test_and_true (normal) | test.rs:281:5:286:5 | enter fn test_and_true | +| test.rs:282:9:284:9 | if ... {...} | test.rs:282:13:282:21 | [boolean(false)] ... && ... | +| test.rs:282:13:282:21 | [boolean(false)] ... && ... | test.rs:281:5:286:5 | enter fn test_and_true | +| test.rs:282:13:282:21 | [boolean(true)] ... && ... | test.rs:282:18:282:21 | true | +| test.rs:282:18:282:21 | true | test.rs:281:5:286:5 | enter fn test_and_true | +| test.rs:283:13:283:21 | ExprStmt | test.rs:282:13:282:21 | [boolean(true)] ... && ... | +| test.rs:292:5:294:5 | exit fn test_question_mark_operator_1 (normal) | test.rs:292:5:294:5 | enter fn test_question_mark_operator_1 | +| test.rs:293:32:293:32 | 4 | test.rs:292:5:294:5 | enter fn test_question_mark_operator_1 | +| test.rs:296:5:301:5 | exit fn test_question_mark_operator_2 (normal) | test.rs:296:5:301:5 | enter fn test_question_mark_operator_2 | +| test.rs:297:9:300:9 | match ... { ... } | test.rs:298:13:298:16 | true | +| test.rs:298:13:298:16 | true | test.rs:296:5:301:5 | enter fn test_question_mark_operator_2 | +| test.rs:298:21:298:24 | Some | test.rs:298:13:298:16 | true | +| test.rs:299:13:299:17 | false | test.rs:298:13:298:16 | true | +| test.rs:308:9:312:9 | match maybe_digit { ... } | test.rs:307:5:313:5 | enter fn test_match | +| test.rs:309:26:309:26 | x | test.rs:307:5:313:5 | enter fn test_match | +| test.rs:309:42:309:42 | x | test.rs:309:26:309:26 | x | +| test.rs:310:13:310:27 | ...::Some(...) | test.rs:307:5:313:5 | enter fn test_match | +| test.rs:310:26:310:26 | x | test.rs:310:13:310:27 | ...::Some(...) | +| test.rs:311:13:311:24 | ...::None | test.rs:310:13:310:27 | ...::Some(...) | +| test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | +| test.rs:316:9:323:9 | match ... { ... } | test.rs:319:13:319:23 | maybe_digit | +| test.rs:317:13:317:21 | ExprStmt | test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | +| test.rs:319:13:319:23 | maybe_digit | test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | +| test.rs:321:26:321:26 | x | test.rs:319:13:319:23 | maybe_digit | +| test.rs:322:13:322:24 | ...::None | test.rs:319:13:319:23 | maybe_digit | +| test.rs:327:9:330:18 | ... && ... | test.rs:326:5:331:5 | enter fn test_match_and | +| test.rs:327:10:330:9 | [boolean(false)] match r { ... } | test.rs:326:5:331:5 | enter fn test_match_and | +| test.rs:327:10:330:9 | [boolean(true)] match r { ... } | test.rs:328:18:328:18 | a | +| test.rs:328:18:328:18 | a | test.rs:326:5:331:5 | enter fn test_match_and | +| test.rs:329:13:329:13 | _ | test.rs:326:5:331:5 | enter fn test_match_and | +| test.rs:330:15:330:18 | cond | test.rs:327:10:330:9 | [boolean(true)] match r { ... } | +| test.rs:334:9:337:9 | match r { ... } | test.rs:333:5:338:5 | enter fn test_match_with_no_arms | +| test.rs:335:16:335:20 | value | test.rs:333:5:338:5 | enter fn test_match_with_no_arms | +| test.rs:336:13:336:22 | Err(...) | test.rs:333:5:338:5 | enter fn test_match_with_no_arms | +| test.rs:344:18:344:18 | n | test.rs:343:5:346:5 | enter fn test_let_match | +| test.rs:344:39:344:53 | MacroStmts | test.rs:343:5:346:5 | enter fn test_let_match | +| test.rs:348:5:354:5 | exit fn test_let_with_return (normal) | test.rs:348:5:354:5 | enter fn test_let_with_return | +| test.rs:350:18:350:20 | ret | test.rs:348:5:354:5 | enter fn test_let_with_return | +| test.rs:351:13:351:16 | None | test.rs:348:5:354:5 | enter fn test_let_with_return | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:372:5:379:5 | enter fn range_pattern | +| test.rs:374:15:374:15 | 0 | test.rs:372:5:379:5 | enter fn range_pattern | +| test.rs:374:20:374:20 | 1 | test.rs:374:15:374:15 | 0 | +| test.rs:375:13:375:13 | 1 | test.rs:375:13:375:16 | RangePat | +| test.rs:375:13:375:16 | RangePat | test.rs:372:5:379:5 | enter fn range_pattern | +| test.rs:375:16:375:16 | 2 | test.rs:375:13:375:13 | 1 | +| test.rs:375:21:375:21 | 2 | test.rs:375:16:375:16 | 2 | +| test.rs:376:13:376:13 | 5 | test.rs:376:13:376:15 | RangePat | +| test.rs:376:13:376:15 | RangePat | test.rs:375:13:375:16 | RangePat | +| test.rs:376:20:376:20 | 3 | test.rs:376:13:376:13 | 5 | +| test.rs:377:13:377:13 | _ | test.rs:376:13:376:15 | RangePat | +| test.rs:385:13:385:14 | TupleExpr | test.rs:383:5:388:5 | enter fn test_infinite_loop | +| test.rs:409:28:414:9 | exit { ... } (normal) | test.rs:409:28:414:9 | enter { ... } | +| test.rs:410:13:412:13 | if b {...} | test.rs:409:28:414:9 | enter { ... } | +| test.rs:411:17:411:41 | ExprStmt | test.rs:409:28:414:9 | enter { ... } | +| test.rs:431:13:431:49 | ExprStmt | test.rs:431:21:431:48 | [boolean(true)] ! ... | +| test.rs:431:21:431:48 | [boolean(false)] ! ... | test.rs:427:5:435:5 | enter fn const_block_assert | +| test.rs:431:21:431:48 | [boolean(true)] ! ... | test.rs:427:5:435:5 | enter fn const_block_assert | +| test.rs:431:21:431:48 | if ... {...} | test.rs:427:5:435:5 | enter fn const_block_assert | +| test.rs:439:9:444:9 | if false {...} | test.rs:437:5:446:5 | enter fn const_block_panic | +| test.rs:451:9:451:17 | ExprStmt | test.rs:449:1:454:1 | enter fn dead_code | +| test.rs:467:18:478:5 | 'block: { ... } | test.rs:466:1:480:1 | enter fn labelled_block1 | +| test.rs:469:9:471:9 | if ... {...} | test.rs:466:1:480:1 | enter fn labelled_block1 | +| test.rs:470:13:470:27 | ExprStmt | test.rs:466:1:480:1 | enter fn labelled_block1 | +| test.rs:473:9:475:9 | if ... {...} | test.rs:469:9:471:9 | if ... {...} | +| test.rs:474:13:474:27 | ExprStmt | test.rs:469:9:471:9 | if ... {...} | +| test.rs:483:18:489:5 | 'block: { ... } | test.rs:482:1:490:1 | enter fn labelled_block2 | +| test.rs:485:18:485:18 | y | test.rs:482:1:490:1 | enter fn labelled_block2 | +| test.rs:486:13:486:27 | ExprStmt | test.rs:482:1:490:1 | enter fn labelled_block2 | +controls +| test.rs:18:5:24:5 | enter fn next | test.rs:20:13:20:13 | n | true | +| test.rs:18:5:24:5 | enter fn next | test.rs:22:13:22:13 | 3 | false | +| test.rs:29:13:29:24 | ExprStmt | test.rs:30:13:32:13 | if ... {...} | false | +| test.rs:29:13:29:24 | ExprStmt | test.rs:31:17:31:29 | ExprStmt | true | +| test.rs:29:13:29:24 | ExprStmt | test.rs:33:13:35:13 | if ... {...} | false | +| test.rs:29:13:29:24 | ExprStmt | test.rs:34:17:34:22 | ExprStmt | false | +| test.rs:29:13:29:24 | ExprStmt | test.rs:36:13:38:13 | if ... {...} | false | +| test.rs:29:13:29:24 | ExprStmt | test.rs:37:17:37:25 | ExprStmt | false | +| test.rs:30:13:32:13 | if ... {...} | test.rs:33:13:35:13 | if ... {...} | false | +| test.rs:30:13:32:13 | if ... {...} | test.rs:34:17:34:22 | ExprStmt | true | +| test.rs:30:13:32:13 | if ... {...} | test.rs:36:13:38:13 | if ... {...} | false | +| test.rs:30:13:32:13 | if ... {...} | test.rs:37:17:37:25 | ExprStmt | false | +| test.rs:33:13:35:13 | if ... {...} | test.rs:36:13:38:13 | if ... {...} | false | +| test.rs:33:13:35:13 | if ... {...} | test.rs:37:17:37:25 | ExprStmt | true | +| test.rs:47:17:51:17 | ExprStmt | test.rs:48:21:48:26 | ExprStmt | true | +| test.rs:47:17:51:17 | ExprStmt | test.rs:49:24:51:17 | if b {...} | false | +| test.rs:47:17:51:17 | ExprStmt | test.rs:49:27:49:27 | b | false | +| test.rs:47:17:51:17 | ExprStmt | test.rs:50:21:50:33 | ExprStmt | false | +| test.rs:49:27:49:27 | b | test.rs:49:24:51:17 | if b {...} | false | +| test.rs:49:27:49:27 | b | test.rs:50:21:50:33 | ExprStmt | true | +| test.rs:62:17:66:17 | ExprStmt | test.rs:63:21:63:29 | ExprStmt | true | +| test.rs:62:17:66:17 | ExprStmt | test.rs:64:24:66:17 | if b {...} | false | +| test.rs:62:17:66:17 | ExprStmt | test.rs:64:27:64:27 | b | false | +| test.rs:62:17:66:17 | ExprStmt | test.rs:65:21:65:36 | ExprStmt | false | +| test.rs:64:27:64:27 | b | test.rs:64:24:66:17 | if b {...} | false | +| test.rs:64:27:64:27 | b | test.rs:65:21:65:36 | ExprStmt | true | +| test.rs:76:17:80:17 | ExprStmt | test.rs:77:21:77:29 | ExprStmt | true | +| test.rs:76:17:80:17 | ExprStmt | test.rs:78:24:80:17 | if b {...} | false | +| test.rs:76:17:80:17 | ExprStmt | test.rs:78:27:78:27 | b | false | +| test.rs:76:17:80:17 | ExprStmt | test.rs:79:21:79:36 | ExprStmt | false | +| test.rs:78:27:78:27 | b | test.rs:78:24:80:17 | if b {...} | false | +| test.rs:78:27:78:27 | b | test.rs:79:21:79:36 | ExprStmt | true | +| test.rs:88:15:88:15 | b | test.rs:89:13:89:14 | ExprStmt | true | +| test.rs:88:15:88:15 | b | test.rs:90:13:92:13 | if ... {...} | true | +| test.rs:88:15:88:15 | b | test.rs:91:17:91:22 | ExprStmt | true | +| test.rs:89:13:89:14 | ExprStmt | test.rs:90:13:92:13 | if ... {...} | false | +| test.rs:89:13:89:14 | ExprStmt | test.rs:91:17:91:22 | ExprStmt | true | +| test.rs:99:24:99:24 | x | test.rs:100:13:102:13 | if ... {...} | false | +| test.rs:99:24:99:24 | x | test.rs:101:17:101:22 | ExprStmt | true | +| test.rs:108:13:110:13 | ExprStmt | test.rs:108:13:110:13 | if ... {...} | false | +| test.rs:108:13:110:13 | ExprStmt | test.rs:109:17:109:22 | ExprStmt | true | +| test.rs:129:5:135:5 | enter fn test_if_else | test.rs:131:13:131:13 | 0 | true | +| test.rs:129:5:135:5 | enter fn test_if_else | test.rs:133:13:133:13 | n | false | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:22:153:32 | [boolean(false)] { ... } | true | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:22:153:32 | [boolean(true)] { ... } | true | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:24:153:24 | a | true | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:39:153:48 | [boolean(false)] { ... } | false | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:39:153:48 | [boolean(true)] { ... } | false | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:41:153:41 | a | false | +| test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | test.rs:156:13:156:13 | 0 | false | +| test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | test.rs:154:13:154:13 | 1 | true | +| test.rs:153:24:153:24 | a | test.rs:153:22:153:32 | [boolean(false)] { ... } | false | +| test.rs:153:24:153:24 | a | test.rs:153:22:153:32 | [boolean(true)] { ... } | true | +| test.rs:153:41:153:41 | a | test.rs:153:39:153:48 | [boolean(false)] { ... } | false | +| test.rs:153:41:153:41 | a | test.rs:153:39:153:48 | [boolean(true)] { ... } | true | +| test.rs:161:13:164:9 | [boolean(false)] match a { ... } | test.rs:167:13:167:13 | 0 | false | +| test.rs:161:13:164:9 | [boolean(true)] match a { ... } | test.rs:165:13:165:13 | 1 | true | +| test.rs:162:18:162:21 | true | test.rs:161:13:164:9 | [boolean(true)] match a { ... } | true | +| test.rs:162:18:162:21 | true | test.rs:165:13:165:13 | 1 | true | +| test.rs:163:13:163:13 | _ | test.rs:161:13:164:9 | [boolean(false)] match a { ... } | false | +| test.rs:163:13:163:13 | _ | test.rs:167:13:167:13 | 0 | false | +| test.rs:171:5:180:5 | enter fn test_nested_if_block | test.rs:172:12:175:9 | [boolean(false)] { ... } | false | +| test.rs:171:5:180:5 | enter fn test_nested_if_block | test.rs:172:12:175:9 | [boolean(true)] { ... } | true | +| test.rs:171:5:180:5 | enter fn test_nested_if_block | test.rs:176:13:176:13 | 1 | true | +| test.rs:171:5:180:5 | enter fn test_nested_if_block | test.rs:178:13:178:13 | 0 | false | +| test.rs:172:12:175:9 | [boolean(false)] { ... } | test.rs:178:13:178:13 | 0 | false | +| test.rs:172:12:175:9 | [boolean(true)] { ... } | test.rs:176:13:176:13 | 1 | true | +| test.rs:182:5:192:5 | enter fn test_if_assignment | test.rs:184:12:187:9 | [boolean(false)] { ... } | false | +| test.rs:182:5:192:5 | enter fn test_if_assignment | test.rs:184:12:187:9 | [boolean(true)] { ... } | true | +| test.rs:182:5:192:5 | enter fn test_if_assignment | test.rs:188:13:188:13 | 1 | true | +| test.rs:182:5:192:5 | enter fn test_if_assignment | test.rs:190:13:190:13 | 0 | false | +| test.rs:184:12:187:9 | [boolean(false)] { ... } | test.rs:190:13:190:13 | 0 | false | +| test.rs:184:12:187:9 | [boolean(true)] { ... } | test.rs:188:13:188:13 | 1 | true | +| test.rs:196:13:198:14 | ExprStmt | test.rs:195:9:204:9 | if ... {...} else {...} | true | +| test.rs:196:13:198:14 | ExprStmt | test.rs:196:13:198:13 | if ... {...} | false | +| test.rs:196:13:198:14 | ExprStmt | test.rs:197:17:197:28 | [boolean(false)] break ... | true | +| test.rs:196:13:198:14 | ExprStmt | test.rs:197:17:197:28 | [boolean(true)] break ... | true | +| test.rs:196:13:198:14 | ExprStmt | test.rs:197:17:197:29 | ExprStmt | true | +| test.rs:196:13:198:14 | ExprStmt | test.rs:201:13:201:13 | 1 | true | +| test.rs:196:13:198:14 | ExprStmt | test.rs:203:13:203:13 | 0 | true | +| test.rs:197:17:197:28 | [boolean(false)] break ... | test.rs:203:13:203:13 | 0 | false | +| test.rs:197:17:197:28 | [boolean(true)] break ... | test.rs:201:13:201:13 | 1 | true | +| test.rs:197:17:197:29 | ExprStmt | test.rs:197:17:197:28 | [boolean(false)] break ... | false | +| test.rs:197:17:197:29 | ExprStmt | test.rs:197:17:197:28 | [boolean(true)] break ... | true | +| test.rs:197:17:197:29 | ExprStmt | test.rs:201:13:201:13 | 1 | true | +| test.rs:197:17:197:29 | ExprStmt | test.rs:203:13:203:13 | 0 | false | +| test.rs:209:13:211:14 | ExprStmt | test.rs:208:9:217:9 | if ... {...} else {...} | true | +| test.rs:209:13:211:14 | ExprStmt | test.rs:209:13:211:13 | if ... {...} | false | +| test.rs:209:13:211:14 | ExprStmt | test.rs:210:17:210:35 | [boolean(false)] break ''label ... | true | +| test.rs:209:13:211:14 | ExprStmt | test.rs:210:17:210:35 | [boolean(true)] break ''label ... | true | +| test.rs:209:13:211:14 | ExprStmt | test.rs:210:17:210:36 | ExprStmt | true | +| test.rs:209:13:211:14 | ExprStmt | test.rs:214:13:214:13 | 1 | true | +| test.rs:209:13:211:14 | ExprStmt | test.rs:216:13:216:13 | 0 | true | +| test.rs:210:17:210:35 | [boolean(false)] break ''label ... | test.rs:216:13:216:13 | 0 | false | +| test.rs:210:17:210:35 | [boolean(true)] break ''label ... | test.rs:214:13:214:13 | 1 | true | +| test.rs:210:17:210:36 | ExprStmt | test.rs:210:17:210:35 | [boolean(false)] break ''label ... | false | +| test.rs:210:17:210:36 | ExprStmt | test.rs:210:17:210:35 | [boolean(true)] break ''label ... | true | +| test.rs:210:17:210:36 | ExprStmt | test.rs:214:13:214:13 | 1 | true | +| test.rs:210:17:210:36 | ExprStmt | test.rs:216:13:216:13 | 0 | false | +| test.rs:220:5:228:5 | enter fn test_labelled_block | test.rs:222:13:222:30 | [boolean(false)] break ''block ... | false | +| test.rs:220:5:228:5 | enter fn test_labelled_block | test.rs:222:13:222:30 | [boolean(true)] break ''block ... | true | +| test.rs:220:5:228:5 | enter fn test_labelled_block | test.rs:224:13:224:13 | 1 | true | +| test.rs:220:5:228:5 | enter fn test_labelled_block | test.rs:226:13:226:13 | 0 | false | +| test.rs:222:13:222:30 | [boolean(false)] break ''block ... | test.rs:226:13:226:13 | 0 | false | +| test.rs:222:13:222:30 | [boolean(true)] break ''block ... | test.rs:224:13:224:13 | 1 | true | +| test.rs:233:5:236:5 | enter fn test_and_operator | test.rs:234:17:234:22 | [boolean(true)] ... && ... | true | +| test.rs:233:5:236:5 | enter fn test_and_operator | test.rs:234:22:234:22 | b | true | +| test.rs:233:5:236:5 | enter fn test_and_operator | test.rs:234:27:234:27 | c | true | +| test.rs:234:17:234:22 | [boolean(true)] ... && ... | test.rs:234:27:234:27 | c | true | +| test.rs:234:22:234:22 | b | test.rs:234:17:234:22 | [boolean(true)] ... && ... | true | +| test.rs:234:22:234:22 | b | test.rs:234:27:234:27 | c | true | +| test.rs:238:5:241:5 | enter fn test_or_operator | test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | false | +| test.rs:238:5:241:5 | enter fn test_or_operator | test.rs:239:22:239:22 | b | false | +| test.rs:238:5:241:5 | enter fn test_or_operator | test.rs:239:27:239:27 | c | false | +| test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | test.rs:239:27:239:27 | c | false | +| test.rs:239:22:239:22 | b | test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | false | +| test.rs:239:22:239:22 | b | test.rs:239:27:239:27 | c | false | +| test.rs:243:5:246:5 | enter fn test_or_operator_2 | test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | false | +| test.rs:243:5:246:5 | enter fn test_or_operator_2 | test.rs:244:23:244:23 | b | false | +| test.rs:243:5:246:5 | enter fn test_or_operator_2 | test.rs:244:35:244:35 | c | false | +| test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | test.rs:244:35:244:35 | c | false | +| test.rs:244:23:244:23 | b | test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | false | +| test.rs:244:23:244:23 | b | test.rs:244:35:244:35 | c | false | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:254:12:254:17 | [boolean(true)] ... && ... | true | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:254:12:254:22 | [boolean(true)] ... && ... | true | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:254:17:254:17 | b | true | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:254:22:254:22 | c | true | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:255:13:255:16 | true | true | +| test.rs:254:12:254:17 | [boolean(true)] ... && ... | test.rs:254:12:254:22 | [boolean(true)] ... && ... | true | +| test.rs:254:12:254:17 | [boolean(true)] ... && ... | test.rs:254:22:254:22 | c | true | +| test.rs:254:12:254:17 | [boolean(true)] ... && ... | test.rs:255:13:255:16 | true | true | +| test.rs:254:12:254:22 | [boolean(false)] ... && ... | test.rs:257:13:257:17 | false | false | +| test.rs:254:12:254:22 | [boolean(true)] ... && ... | test.rs:255:13:255:16 | true | true | +| test.rs:254:17:254:17 | b | test.rs:254:12:254:17 | [boolean(true)] ... && ... | true | +| test.rs:254:17:254:17 | b | test.rs:254:12:254:22 | [boolean(true)] ... && ... | true | +| test.rs:254:17:254:17 | b | test.rs:254:22:254:22 | c | true | +| test.rs:254:17:254:17 | b | test.rs:255:13:255:16 | true | true | +| test.rs:254:22:254:22 | c | test.rs:254:12:254:22 | [boolean(true)] ... && ... | true | +| test.rs:254:22:254:22 | c | test.rs:255:13:255:16 | true | true | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | false | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | false | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:262:17:262:17 | b | false | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:262:22:262:22 | c | false | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:265:13:265:17 | false | false | +| test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | false | +| test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | test.rs:262:22:262:22 | c | false | +| test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | test.rs:265:13:265:17 | false | false | +| test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | test.rs:265:13:265:17 | false | false | +| test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | test.rs:263:13:263:16 | true | true | +| test.rs:262:17:262:17 | b | test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | false | +| test.rs:262:17:262:17 | b | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | false | +| test.rs:262:17:262:17 | b | test.rs:262:22:262:22 | c | false | +| test.rs:262:17:262:17 | b | test.rs:265:13:265:17 | false | false | +| test.rs:262:22:262:22 | c | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | false | +| test.rs:262:22:262:22 | c | test.rs:265:13:265:17 | false | false | +| test.rs:269:5:275:5 | enter fn test_if_not_operator | test.rs:270:12:270:13 | [boolean(false)] ! ... | true | +| test.rs:269:5:275:5 | enter fn test_if_not_operator | test.rs:270:12:270:13 | [boolean(true)] ! ... | false | +| test.rs:269:5:275:5 | enter fn test_if_not_operator | test.rs:271:13:271:16 | true | false | +| test.rs:269:5:275:5 | enter fn test_if_not_operator | test.rs:273:13:273:17 | false | true | +| test.rs:270:12:270:13 | [boolean(false)] ! ... | test.rs:273:13:273:17 | false | false | +| test.rs:270:12:270:13 | [boolean(true)] ! ... | test.rs:271:13:271:16 | true | true | +| test.rs:277:5:279:5 | enter fn test_and_return | test.rs:278:9:278:19 | ... && ... | false | +| test.rs:277:5:279:5 | enter fn test_and_return | test.rs:278:14:278:19 | return | true | +| test.rs:281:5:286:5 | enter fn test_and_true | test.rs:282:9:284:9 | if ... {...} | false | +| test.rs:281:5:286:5 | enter fn test_and_true | test.rs:282:13:282:21 | [boolean(false)] ... && ... | false | +| test.rs:281:5:286:5 | enter fn test_and_true | test.rs:282:13:282:21 | [boolean(true)] ... && ... | true | +| test.rs:281:5:286:5 | enter fn test_and_true | test.rs:282:18:282:21 | true | true | +| test.rs:281:5:286:5 | enter fn test_and_true | test.rs:283:13:283:21 | ExprStmt | true | +| test.rs:282:13:282:21 | [boolean(false)] ... && ... | test.rs:282:9:284:9 | if ... {...} | false | +| test.rs:282:13:282:21 | [boolean(true)] ... && ... | test.rs:283:13:283:21 | ExprStmt | true | +| test.rs:282:18:282:21 | true | test.rs:282:13:282:21 | [boolean(true)] ... && ... | true | +| test.rs:282:18:282:21 | true | test.rs:283:13:283:21 | ExprStmt | true | +| test.rs:309:26:309:26 | x | test.rs:309:42:309:42 | x | true | +| test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | test.rs:316:9:323:9 | match ... { ... } | false | +| test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | test.rs:317:13:317:21 | ExprStmt | true | +| test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | test.rs:319:13:319:23 | maybe_digit | false | +| test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | test.rs:321:26:321:26 | x | false | +| test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | test.rs:322:13:322:24 | ...::None | false | +| test.rs:327:10:330:9 | [boolean(true)] match r { ... } | test.rs:330:15:330:18 | cond | true | +| test.rs:328:18:328:18 | a | test.rs:327:10:330:9 | [boolean(true)] match r { ... } | true | +| test.rs:328:18:328:18 | a | test.rs:330:15:330:18 | cond | true | +| test.rs:409:28:414:9 | enter { ... } | test.rs:410:13:412:13 | if b {...} | false | +| test.rs:409:28:414:9 | enter { ... } | test.rs:411:17:411:41 | ExprStmt | true | +| test.rs:427:5:435:5 | enter fn const_block_assert | test.rs:431:13:431:49 | ExprStmt | false | +| test.rs:427:5:435:5 | enter fn const_block_assert | test.rs:431:21:431:48 | [boolean(false)] ! ... | true | +| test.rs:427:5:435:5 | enter fn const_block_assert | test.rs:431:21:431:48 | [boolean(true)] ! ... | false | +| test.rs:431:21:431:48 | [boolean(true)] ! ... | test.rs:431:13:431:49 | ExprStmt | true | +| test.rs:437:5:446:5 | enter fn const_block_panic | test.rs:439:9:444:9 | if false {...} | false | +| test.rs:449:1:454:1 | enter fn dead_code | test.rs:451:9:451:17 | ExprStmt | true | +| test.rs:466:1:480:1 | enter fn labelled_block1 | test.rs:469:9:471:9 | if ... {...} | false | +| test.rs:466:1:480:1 | enter fn labelled_block1 | test.rs:470:13:470:27 | ExprStmt | true | +| test.rs:466:1:480:1 | enter fn labelled_block1 | test.rs:473:9:475:9 | if ... {...} | false | +| test.rs:466:1:480:1 | enter fn labelled_block1 | test.rs:474:13:474:27 | ExprStmt | false | +| test.rs:469:9:471:9 | if ... {...} | test.rs:473:9:475:9 | if ... {...} | false | +| test.rs:469:9:471:9 | if ... {...} | test.rs:474:13:474:27 | ExprStmt | true | +successor +| test.rs:18:5:24:5 | enter fn next | test.rs:20:13:20:13 | n | true | +| test.rs:18:5:24:5 | enter fn next | test.rs:22:13:22:13 | 3 | false | +| test.rs:29:13:29:24 | ExprStmt | test.rs:30:13:32:13 | if ... {...} | false | +| test.rs:29:13:29:24 | ExprStmt | test.rs:31:17:31:29 | ExprStmt | true | +| test.rs:30:13:32:13 | if ... {...} | test.rs:33:13:35:13 | if ... {...} | false | +| test.rs:30:13:32:13 | if ... {...} | test.rs:34:17:34:22 | ExprStmt | true | +| test.rs:33:13:35:13 | if ... {...} | test.rs:36:13:38:13 | if ... {...} | false | +| test.rs:33:13:35:13 | if ... {...} | test.rs:37:17:37:25 | ExprStmt | true | +| test.rs:47:17:51:17 | ExprStmt | test.rs:48:21:48:26 | ExprStmt | true | +| test.rs:47:17:51:17 | ExprStmt | test.rs:49:27:49:27 | b | false | +| test.rs:49:27:49:27 | b | test.rs:49:24:51:17 | if b {...} | false | +| test.rs:49:27:49:27 | b | test.rs:50:21:50:33 | ExprStmt | true | +| test.rs:62:17:66:17 | ExprStmt | test.rs:63:21:63:29 | ExprStmt | true | +| test.rs:62:17:66:17 | ExprStmt | test.rs:64:27:64:27 | b | false | +| test.rs:64:27:64:27 | b | test.rs:64:24:66:17 | if b {...} | false | +| test.rs:64:27:64:27 | b | test.rs:65:21:65:36 | ExprStmt | true | +| test.rs:76:17:80:17 | ExprStmt | test.rs:77:21:77:29 | ExprStmt | true | +| test.rs:76:17:80:17 | ExprStmt | test.rs:78:27:78:27 | b | false | +| test.rs:78:27:78:27 | b | test.rs:78:24:80:17 | if b {...} | false | +| test.rs:78:27:78:27 | b | test.rs:79:21:79:36 | ExprStmt | true | +| test.rs:88:15:88:15 | b | test.rs:88:9:94:9 | while b { ... } | false | +| test.rs:88:15:88:15 | b | test.rs:89:13:89:14 | ExprStmt | true | +| test.rs:89:13:89:14 | ExprStmt | test.rs:90:13:92:13 | if ... {...} | false | +| test.rs:89:13:89:14 | ExprStmt | test.rs:91:17:91:22 | ExprStmt | true | +| test.rs:99:24:99:24 | x | test.rs:100:13:102:13 | if ... {...} | false | +| test.rs:99:24:99:24 | x | test.rs:101:17:101:22 | ExprStmt | true | +| test.rs:108:13:110:13 | ExprStmt | test.rs:108:13:110:13 | if ... {...} | false | +| test.rs:108:13:110:13 | ExprStmt | test.rs:109:17:109:22 | ExprStmt | true | +| test.rs:129:5:135:5 | enter fn test_if_else | test.rs:131:13:131:13 | 0 | true | +| test.rs:129:5:135:5 | enter fn test_if_else | test.rs:133:13:133:13 | n | false | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:24:153:24 | a | true | +| test.rs:152:5:158:5 | enter fn test_nested_if | test.rs:153:41:153:41 | a | false | +| test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | test.rs:156:13:156:13 | 0 | false | +| test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | test.rs:154:13:154:13 | 1 | true | +| test.rs:153:22:153:32 | [boolean(false)] { ... } | test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | false | +| test.rs:153:22:153:32 | [boolean(true)] { ... } | test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | true | +| test.rs:153:24:153:24 | a | test.rs:153:22:153:32 | [boolean(false)] { ... } | false | +| test.rs:153:24:153:24 | a | test.rs:153:22:153:32 | [boolean(true)] { ... } | true | +| test.rs:153:39:153:48 | [boolean(false)] { ... } | test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | false | +| test.rs:153:39:153:48 | [boolean(true)] { ... } | test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | true | +| test.rs:153:41:153:41 | a | test.rs:153:39:153:48 | [boolean(false)] { ... } | false | +| test.rs:153:41:153:41 | a | test.rs:153:39:153:48 | [boolean(true)] { ... } | true | +| test.rs:161:13:164:9 | [boolean(false)] match a { ... } | test.rs:167:13:167:13 | 0 | false | +| test.rs:161:13:164:9 | [boolean(true)] match a { ... } | test.rs:165:13:165:13 | 1 | true | +| test.rs:162:18:162:21 | true | test.rs:161:13:164:9 | [boolean(true)] match a { ... } | true | +| test.rs:163:13:163:13 | _ | test.rs:161:13:164:9 | [boolean(false)] match a { ... } | false | +| test.rs:171:5:180:5 | enter fn test_nested_if_block | test.rs:172:12:175:9 | [boolean(false)] { ... } | false | +| test.rs:171:5:180:5 | enter fn test_nested_if_block | test.rs:172:12:175:9 | [boolean(true)] { ... } | true | +| test.rs:172:12:175:9 | [boolean(false)] { ... } | test.rs:178:13:178:13 | 0 | false | +| test.rs:172:12:175:9 | [boolean(true)] { ... } | test.rs:176:13:176:13 | 1 | true | +| test.rs:182:5:192:5 | enter fn test_if_assignment | test.rs:184:12:187:9 | [boolean(false)] { ... } | false | +| test.rs:182:5:192:5 | enter fn test_if_assignment | test.rs:184:12:187:9 | [boolean(true)] { ... } | true | +| test.rs:184:12:187:9 | [boolean(false)] { ... } | test.rs:190:13:190:13 | 0 | false | +| test.rs:184:12:187:9 | [boolean(true)] { ... } | test.rs:188:13:188:13 | 1 | true | +| test.rs:196:13:198:14 | ExprStmt | test.rs:196:13:198:13 | if ... {...} | false | +| test.rs:196:13:198:14 | ExprStmt | test.rs:197:17:197:29 | ExprStmt | true | +| test.rs:197:17:197:28 | [boolean(false)] break ... | test.rs:203:13:203:13 | 0 | false | +| test.rs:197:17:197:28 | [boolean(true)] break ... | test.rs:201:13:201:13 | 1 | true | +| test.rs:197:17:197:29 | ExprStmt | test.rs:197:17:197:28 | [boolean(false)] break ... | false | +| test.rs:197:17:197:29 | ExprStmt | test.rs:197:17:197:28 | [boolean(true)] break ... | true | +| test.rs:209:13:211:14 | ExprStmt | test.rs:209:13:211:13 | if ... {...} | false | +| test.rs:209:13:211:14 | ExprStmt | test.rs:210:17:210:36 | ExprStmt | true | +| test.rs:210:17:210:35 | [boolean(false)] break ''label ... | test.rs:216:13:216:13 | 0 | false | +| test.rs:210:17:210:35 | [boolean(true)] break ''label ... | test.rs:214:13:214:13 | 1 | true | +| test.rs:210:17:210:36 | ExprStmt | test.rs:210:17:210:35 | [boolean(false)] break ''label ... | false | +| test.rs:210:17:210:36 | ExprStmt | test.rs:210:17:210:35 | [boolean(true)] break ''label ... | true | +| test.rs:220:5:228:5 | enter fn test_labelled_block | test.rs:222:13:222:30 | [boolean(false)] break ''block ... | false | +| test.rs:220:5:228:5 | enter fn test_labelled_block | test.rs:222:13:222:30 | [boolean(true)] break ''block ... | true | +| test.rs:222:13:222:30 | [boolean(false)] break ''block ... | test.rs:226:13:226:13 | 0 | false | +| test.rs:222:13:222:30 | [boolean(true)] break ''block ... | test.rs:224:13:224:13 | 1 | true | +| test.rs:233:5:236:5 | enter fn test_and_operator | test.rs:234:17:234:22 | [boolean(false)] ... && ... | false | +| test.rs:233:5:236:5 | enter fn test_and_operator | test.rs:234:22:234:22 | b | true | +| test.rs:234:17:234:22 | [boolean(false)] ... && ... | test.rs:234:17:234:27 | ... && ... | false | +| test.rs:234:17:234:22 | [boolean(true)] ... && ... | test.rs:234:27:234:27 | c | true | +| test.rs:234:22:234:22 | b | test.rs:234:17:234:22 | [boolean(false)] ... && ... | false | +| test.rs:234:22:234:22 | b | test.rs:234:17:234:22 | [boolean(true)] ... && ... | true | +| test.rs:238:5:241:5 | enter fn test_or_operator | test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:238:5:241:5 | enter fn test_or_operator | test.rs:239:22:239:22 | b | false | +| test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | test.rs:239:27:239:27 | c | false | +| test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | test.rs:239:17:239:27 | ... \|\| ... | true | +| test.rs:239:22:239:22 | b | test.rs:239:17:239:22 | [boolean(false)] ... \|\| ... | false | +| test.rs:239:22:239:22 | b | test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:243:5:246:5 | enter fn test_or_operator_2 | test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | true | +| test.rs:243:5:246:5 | enter fn test_or_operator_2 | test.rs:244:23:244:23 | b | false | +| test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | test.rs:244:35:244:35 | c | false | +| test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | test.rs:244:17:244:35 | ... \|\| ... | true | +| test.rs:244:23:244:23 | b | test.rs:244:17:244:30 | [boolean(false)] ... \|\| ... | false | +| test.rs:244:23:244:23 | b | test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | true | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:254:12:254:17 | [boolean(false)] ... && ... | false | +| test.rs:253:5:259:5 | enter fn test_if_and_operator | test.rs:254:17:254:17 | b | true | +| test.rs:254:12:254:17 | [boolean(false)] ... && ... | test.rs:254:12:254:22 | [boolean(false)] ... && ... | false | +| test.rs:254:12:254:17 | [boolean(true)] ... && ... | test.rs:254:22:254:22 | c | true | +| test.rs:254:12:254:22 | [boolean(false)] ... && ... | test.rs:257:13:257:17 | false | false | +| test.rs:254:12:254:22 | [boolean(true)] ... && ... | test.rs:255:13:255:16 | true | true | +| test.rs:254:17:254:17 | b | test.rs:254:12:254:17 | [boolean(false)] ... && ... | false | +| test.rs:254:17:254:17 | b | test.rs:254:12:254:17 | [boolean(true)] ... && ... | true | +| test.rs:254:22:254:22 | c | test.rs:254:12:254:22 | [boolean(false)] ... && ... | false | +| test.rs:254:22:254:22 | c | test.rs:254:12:254:22 | [boolean(true)] ... && ... | true | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | true | +| test.rs:261:5:267:5 | enter fn test_if_or_operator | test.rs:262:17:262:17 | b | false | +| test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | test.rs:262:22:262:22 | c | false | +| test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | test.rs:265:13:265:17 | false | false | +| test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | test.rs:263:13:263:16 | true | true | +| test.rs:262:17:262:17 | b | test.rs:262:12:262:17 | [boolean(false)] ... \|\| ... | false | +| test.rs:262:17:262:17 | b | test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | true | +| test.rs:262:22:262:22 | c | test.rs:262:12:262:22 | [boolean(false)] ... \|\| ... | false | +| test.rs:262:22:262:22 | c | test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | true | +| test.rs:269:5:275:5 | enter fn test_if_not_operator | test.rs:270:12:270:13 | [boolean(false)] ! ... | true | +| test.rs:269:5:275:5 | enter fn test_if_not_operator | test.rs:270:12:270:13 | [boolean(true)] ! ... | false | +| test.rs:270:12:270:13 | [boolean(false)] ! ... | test.rs:273:13:273:17 | false | false | +| test.rs:270:12:270:13 | [boolean(true)] ! ... | test.rs:271:13:271:16 | true | true | +| test.rs:277:5:279:5 | enter fn test_and_return | test.rs:278:9:278:19 | ... && ... | false | +| test.rs:277:5:279:5 | enter fn test_and_return | test.rs:278:14:278:19 | return | true | +| test.rs:281:5:286:5 | enter fn test_and_true | test.rs:282:13:282:21 | [boolean(false)] ... && ... | false | +| test.rs:281:5:286:5 | enter fn test_and_true | test.rs:282:18:282:21 | true | true | +| test.rs:282:13:282:21 | [boolean(false)] ... && ... | test.rs:282:9:284:9 | if ... {...} | false | +| test.rs:282:13:282:21 | [boolean(true)] ... && ... | test.rs:283:13:283:21 | ExprStmt | true | +| test.rs:282:18:282:21 | true | test.rs:282:13:282:21 | [boolean(true)] ... && ... | true | +| test.rs:309:26:309:26 | x | test.rs:309:42:309:42 | x | true | +| test.rs:309:26:309:26 | x | test.rs:310:13:310:27 | ...::Some(...) | false | +| test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | test.rs:317:13:317:21 | ExprStmt | true | +| test.rs:315:5:324:5 | enter fn test_match_with_return_in_scrutinee | test.rs:319:13:319:23 | maybe_digit | false | +| test.rs:327:10:330:9 | [boolean(false)] match r { ... } | test.rs:327:9:330:18 | ... && ... | false | +| test.rs:327:10:330:9 | [boolean(true)] match r { ... } | test.rs:330:15:330:18 | cond | true | +| test.rs:328:18:328:18 | a | test.rs:327:10:330:9 | [boolean(false)] match r { ... } | false | +| test.rs:328:18:328:18 | a | test.rs:327:10:330:9 | [boolean(true)] match r { ... } | true | +| test.rs:329:13:329:13 | _ | test.rs:327:10:330:9 | [boolean(false)] match r { ... } | false | +| test.rs:409:28:414:9 | enter { ... } | test.rs:410:13:412:13 | if b {...} | false | +| test.rs:409:28:414:9 | enter { ... } | test.rs:411:17:411:41 | ExprStmt | true | +| test.rs:427:5:435:5 | enter fn const_block_assert | test.rs:431:21:431:48 | [boolean(false)] ! ... | true | +| test.rs:427:5:435:5 | enter fn const_block_assert | test.rs:431:21:431:48 | [boolean(true)] ! ... | false | +| test.rs:431:21:431:48 | [boolean(false)] ! ... | test.rs:431:21:431:48 | if ... {...} | false | +| test.rs:431:21:431:48 | [boolean(true)] ! ... | test.rs:431:13:431:49 | ExprStmt | true | +| test.rs:437:5:446:5 | enter fn const_block_panic | test.rs:439:9:444:9 | if false {...} | false | +| test.rs:449:1:454:1 | enter fn dead_code | test.rs:451:9:451:17 | ExprStmt | true | +| test.rs:466:1:480:1 | enter fn labelled_block1 | test.rs:469:9:471:9 | if ... {...} | false | +| test.rs:466:1:480:1 | enter fn labelled_block1 | test.rs:470:13:470:27 | ExprStmt | true | +| test.rs:469:9:471:9 | if ... {...} | test.rs:473:9:475:9 | if ... {...} | false | +| test.rs:469:9:471:9 | if ... {...} | test.rs:474:13:474:27 | ExprStmt | true | +joinBlockPredecessor +| test.rs:19:9:23:9 | if ... {...} else {...} | test.rs:20:13:20:13 | n | 1 | +| test.rs:19:9:23:9 | if ... {...} else {...} | test.rs:22:13:22:13 | 3 | 0 | +| test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | test.rs:31:17:31:29 | ExprStmt | 0 | +| test.rs:26:5:42:5 | exit fn test_break_and_continue (normal) | test.rs:34:17:34:22 | ExprStmt | 1 | +| test.rs:29:13:29:24 | ExprStmt | test.rs:26:5:42:5 | enter fn test_break_and_continue | 2 | +| test.rs:29:13:29:24 | ExprStmt | test.rs:36:13:38:13 | if ... {...} | 1 | +| test.rs:29:13:29:24 | ExprStmt | test.rs:37:17:37:25 | ExprStmt | 0 | +| test.rs:46:13:53:13 | 'inner: loop { ... } | test.rs:48:21:48:26 | ExprStmt | 1 | +| test.rs:46:13:53:13 | 'inner: loop { ... } | test.rs:49:24:51:17 | if b {...} | 0 | +| test.rs:47:17:51:17 | ExprStmt | test.rs:44:5:56:5 | enter fn test_break_with_labels | 1 | +| test.rs:47:17:51:17 | ExprStmt | test.rs:46:13:53:13 | 'inner: loop { ... } | 0 | +| test.rs:60:13:60:14 | ExprStmt | test.rs:58:5:70:5 | enter fn test_continue_with_labels | 1 | +| test.rs:60:13:60:14 | ExprStmt | test.rs:65:21:65:36 | ExprStmt | 0 | +| test.rs:62:17:66:17 | ExprStmt | test.rs:60:13:60:14 | ExprStmt | 0 | +| test.rs:62:17:66:17 | ExprStmt | test.rs:63:21:63:29 | ExprStmt | 2 | +| test.rs:62:17:66:17 | ExprStmt | test.rs:64:24:66:17 | if b {...} | 1 | +| test.rs:76:17:80:17 | ExprStmt | test.rs:72:5:84:5 | enter fn test_loop_label_shadowing | 3 | +| test.rs:76:17:80:17 | ExprStmt | test.rs:77:21:77:29 | ExprStmt | 2 | +| test.rs:76:17:80:17 | ExprStmt | test.rs:78:24:80:17 | if b {...} | 1 | +| test.rs:76:17:80:17 | ExprStmt | test.rs:79:21:79:36 | ExprStmt | 0 | +| test.rs:88:9:94:9 | while b { ... } | test.rs:88:15:88:15 | b | 0 | +| test.rs:88:9:94:9 | while b { ... } | test.rs:91:17:91:22 | ExprStmt | 1 | +| test.rs:88:15:88:15 | b | test.rs:86:5:95:5 | enter fn test_while | 1 | +| test.rs:88:15:88:15 | b | test.rs:90:13:92:13 | if ... {...} | 0 | +| test.rs:99:9:103:9 | while ... { ... } | test.rs:99:15:99:39 | let ... = ... | 0 | +| test.rs:99:9:103:9 | while ... { ... } | test.rs:101:17:101:22 | ExprStmt | 1 | +| test.rs:99:15:99:39 | let ... = ... | test.rs:97:5:104:5 | enter fn test_while_let | 1 | +| test.rs:99:15:99:39 | let ... = ... | test.rs:100:13:102:13 | if ... {...} | 0 | +| test.rs:107:9:112:9 | for ... in ... { ... } | test.rs:107:13:107:13 | i | 1 | +| test.rs:107:9:112:9 | for ... in ... { ... } | test.rs:109:17:109:22 | ExprStmt | 0 | +| test.rs:107:13:107:13 | i | test.rs:106:5:113:5 | enter fn test_for | 1 | +| test.rs:107:13:107:13 | i | test.rs:108:13:110:13 | if ... {...} | 0 | +| test.rs:130:9:134:9 | if ... {...} else {...} | test.rs:131:13:131:13 | 0 | 1 | +| test.rs:130:9:134:9 | if ... {...} else {...} | test.rs:133:13:133:13 | n | 0 | +| test.rs:138:9:142:9 | if ... {...} else {...} | test.rs:138:21:138:21 | n | 0 | +| test.rs:138:9:142:9 | if ... {...} else {...} | test.rs:141:13:141:13 | 0 | 1 | +| test.rs:145:5:150:5 | exit fn test_if_let (normal) | test.rs:146:9:148:9 | if ... {...} | 1 | +| test.rs:145:5:150:5 | exit fn test_if_let (normal) | test.rs:146:21:146:21 | n | 0 | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:154:13:154:13 | 1 | 1 | +| test.rs:153:9:157:9 | if ... {...} else {...} | test.rs:156:13:156:13 | 0 | 0 | +| test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | test.rs:153:22:153:32 | [boolean(false)] { ... } | 1 | +| test.rs:153:13:153:48 | [boolean(false)] if ... {...} else {...} | test.rs:153:39:153:48 | [boolean(false)] { ... } | 0 | +| test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | test.rs:153:22:153:32 | [boolean(true)] { ... } | 1 | +| test.rs:153:13:153:48 | [boolean(true)] if ... {...} else {...} | test.rs:153:39:153:48 | [boolean(true)] { ... } | 0 | +| test.rs:161:9:168:9 | if ... {...} else {...} | test.rs:165:13:165:13 | 1 | 1 | +| test.rs:161:9:168:9 | if ... {...} else {...} | test.rs:167:13:167:13 | 0 | 0 | +| test.rs:172:9:179:9 | if ... {...} else {...} | test.rs:176:13:176:13 | 1 | 1 | +| test.rs:172:9:179:9 | if ... {...} else {...} | test.rs:178:13:178:13 | 0 | 0 | +| test.rs:184:9:191:9 | if ... {...} else {...} | test.rs:188:13:188:13 | 1 | 1 | +| test.rs:184:9:191:9 | if ... {...} else {...} | test.rs:190:13:190:13 | 0 | 0 | +| test.rs:195:9:204:9 | if ... {...} else {...} | test.rs:201:13:201:13 | 1 | 1 | +| test.rs:195:9:204:9 | if ... {...} else {...} | test.rs:203:13:203:13 | 0 | 0 | +| test.rs:196:13:198:14 | ExprStmt | test.rs:194:5:205:5 | enter fn test_if_loop1 | 1 | +| test.rs:196:13:198:14 | ExprStmt | test.rs:196:13:198:13 | if ... {...} | 0 | +| test.rs:208:9:217:9 | if ... {...} else {...} | test.rs:214:13:214:13 | 1 | 1 | +| test.rs:208:9:217:9 | if ... {...} else {...} | test.rs:216:13:216:13 | 0 | 0 | +| test.rs:209:13:211:14 | ExprStmt | test.rs:207:5:218:5 | enter fn test_if_loop2 | 1 | +| test.rs:209:13:211:14 | ExprStmt | test.rs:209:13:211:13 | if ... {...} | 0 | +| test.rs:221:9:227:9 | if ... {...} else {...} | test.rs:224:13:224:13 | 1 | 1 | +| test.rs:221:9:227:9 | if ... {...} else {...} | test.rs:226:13:226:13 | 0 | 0 | +| test.rs:234:17:234:22 | [boolean(false)] ... && ... | test.rs:233:5:236:5 | enter fn test_and_operator | 1 | +| test.rs:234:17:234:22 | [boolean(false)] ... && ... | test.rs:234:22:234:22 | b | 0 | +| test.rs:234:17:234:27 | ... && ... | test.rs:234:17:234:22 | [boolean(false)] ... && ... | 0 | +| test.rs:234:17:234:27 | ... && ... | test.rs:234:27:234:27 | c | 1 | +| test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | test.rs:238:5:241:5 | enter fn test_or_operator | 1 | +| test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | test.rs:239:22:239:22 | b | 0 | +| test.rs:239:17:239:27 | ... \|\| ... | test.rs:239:17:239:22 | [boolean(true)] ... \|\| ... | 0 | +| test.rs:239:17:239:27 | ... \|\| ... | test.rs:239:27:239:27 | c | 1 | +| test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | test.rs:243:5:246:5 | enter fn test_or_operator_2 | 1 | +| test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | test.rs:244:23:244:23 | b | 0 | +| test.rs:244:17:244:35 | ... \|\| ... | test.rs:244:17:244:30 | [boolean(true)] ... \|\| ... | 0 | +| test.rs:244:17:244:35 | ... \|\| ... | test.rs:244:35:244:35 | c | 1 | +| test.rs:254:9:258:9 | if ... {...} else {...} | test.rs:255:13:255:16 | true | 1 | +| test.rs:254:9:258:9 | if ... {...} else {...} | test.rs:257:13:257:17 | false | 0 | +| test.rs:254:12:254:17 | [boolean(false)] ... && ... | test.rs:253:5:259:5 | enter fn test_if_and_operator | 1 | +| test.rs:254:12:254:17 | [boolean(false)] ... && ... | test.rs:254:17:254:17 | b | 0 | +| test.rs:254:12:254:22 | [boolean(false)] ... && ... | test.rs:254:12:254:17 | [boolean(false)] ... && ... | 0 | +| test.rs:254:12:254:22 | [boolean(false)] ... && ... | test.rs:254:22:254:22 | c | 1 | +| test.rs:262:9:266:9 | if ... {...} else {...} | test.rs:263:13:263:16 | true | 1 | +| test.rs:262:9:266:9 | if ... {...} else {...} | test.rs:265:13:265:17 | false | 0 | +| test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | test.rs:261:5:267:5 | enter fn test_if_or_operator | 1 | +| test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | test.rs:262:17:262:17 | b | 0 | +| test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | test.rs:262:12:262:17 | [boolean(true)] ... \|\| ... | 0 | +| test.rs:262:12:262:22 | [boolean(true)] ... \|\| ... | test.rs:262:22:262:22 | c | 1 | +| test.rs:270:9:274:9 | if ... {...} else {...} | test.rs:271:13:271:16 | true | 1 | +| test.rs:270:9:274:9 | if ... {...} else {...} | test.rs:273:13:273:17 | false | 0 | +| test.rs:277:5:279:5 | exit fn test_and_return (normal) | test.rs:278:9:278:19 | ... && ... | 1 | +| test.rs:277:5:279:5 | exit fn test_and_return (normal) | test.rs:278:14:278:19 | return | 0 | +| test.rs:281:5:286:5 | exit fn test_and_true (normal) | test.rs:282:9:284:9 | if ... {...} | 1 | +| test.rs:281:5:286:5 | exit fn test_and_true (normal) | test.rs:283:13:283:21 | ExprStmt | 0 | +| test.rs:292:5:294:5 | exit fn test_question_mark_operator_1 (normal) | test.rs:292:5:294:5 | enter fn test_question_mark_operator_1 | 1 | +| test.rs:292:5:294:5 | exit fn test_question_mark_operator_1 (normal) | test.rs:293:32:293:32 | 4 | 0 | +| test.rs:296:5:301:5 | exit fn test_question_mark_operator_2 (normal) | test.rs:296:5:301:5 | enter fn test_question_mark_operator_2 | 1 | +| test.rs:296:5:301:5 | exit fn test_question_mark_operator_2 (normal) | test.rs:297:9:300:9 | match ... { ... } | 0 | +| test.rs:297:9:300:9 | match ... { ... } | test.rs:298:21:298:24 | Some | 0 | +| test.rs:297:9:300:9 | match ... { ... } | test.rs:299:13:299:17 | false | 1 | +| test.rs:308:9:312:9 | match maybe_digit { ... } | test.rs:309:42:309:42 | x | 0 | +| test.rs:308:9:312:9 | match maybe_digit { ... } | test.rs:310:26:310:26 | x | 1 | +| test.rs:308:9:312:9 | match maybe_digit { ... } | test.rs:311:13:311:24 | ...::None | 2 | +| test.rs:310:13:310:27 | ...::Some(...) | test.rs:307:5:313:5 | enter fn test_match | 1 | +| test.rs:310:13:310:27 | ...::Some(...) | test.rs:309:26:309:26 | x | 0 | +| test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | test.rs:316:9:323:9 | match ... { ... } | 1 | +| test.rs:315:5:324:5 | exit fn test_match_with_return_in_scrutinee (normal) | test.rs:317:13:317:21 | ExprStmt | 0 | +| test.rs:316:9:323:9 | match ... { ... } | test.rs:321:26:321:26 | x | 0 | +| test.rs:316:9:323:9 | match ... { ... } | test.rs:322:13:322:24 | ...::None | 1 | +| test.rs:327:9:330:18 | ... && ... | test.rs:327:10:330:9 | [boolean(false)] match r { ... } | 0 | +| test.rs:327:9:330:18 | ... && ... | test.rs:330:15:330:18 | cond | 1 | +| test.rs:327:10:330:9 | [boolean(false)] match r { ... } | test.rs:328:18:328:18 | a | 0 | +| test.rs:327:10:330:9 | [boolean(false)] match r { ... } | test.rs:329:13:329:13 | _ | 1 | +| test.rs:334:9:337:9 | match r { ... } | test.rs:335:16:335:20 | value | 0 | +| test.rs:334:9:337:9 | match r { ... } | test.rs:336:13:336:22 | Err(...) | 1 | +| test.rs:348:5:354:5 | exit fn test_let_with_return (normal) | test.rs:350:18:350:20 | ret | 0 | +| test.rs:348:5:354:5 | exit fn test_let_with_return (normal) | test.rs:351:13:351:16 | None | 1 | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:374:20:374:20 | 1 | 0 | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:375:21:375:21 | 2 | 1 | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:376:20:376:20 | 3 | 2 | +| test.rs:373:9:378:9 | match 42 { ... } | test.rs:377:13:377:13 | _ | 3 | +| test.rs:375:13:375:16 | RangePat | test.rs:372:5:379:5 | enter fn range_pattern | 1 | +| test.rs:375:13:375:16 | RangePat | test.rs:374:15:374:15 | 0 | 0 | +| test.rs:376:13:376:15 | RangePat | test.rs:375:13:375:13 | 1 | 1 | +| test.rs:376:13:376:15 | RangePat | test.rs:375:13:375:16 | RangePat | 2 | +| test.rs:376:13:376:15 | RangePat | test.rs:375:16:375:16 | 2 | 0 | +| test.rs:377:13:377:13 | _ | test.rs:376:13:376:13 | 5 | 0 | +| test.rs:377:13:377:13 | _ | test.rs:376:13:376:15 | RangePat | 1 | +| test.rs:385:13:385:14 | TupleExpr | test.rs:383:5:388:5 | enter fn test_infinite_loop | 1 | +| test.rs:385:13:385:14 | TupleExpr | test.rs:385:13:385:14 | TupleExpr | 0 | +| test.rs:409:28:414:9 | exit { ... } (normal) | test.rs:410:13:412:13 | if b {...} | 1 | +| test.rs:409:28:414:9 | exit { ... } (normal) | test.rs:411:17:411:41 | ExprStmt | 0 | +| test.rs:431:21:431:48 | if ... {...} | test.rs:431:13:431:49 | ExprStmt | 1 | +| test.rs:431:21:431:48 | if ... {...} | test.rs:431:21:431:48 | [boolean(false)] ! ... | 0 | +| test.rs:467:18:478:5 | 'block: { ... } | test.rs:470:13:470:27 | ExprStmt | 0 | +| test.rs:467:18:478:5 | 'block: { ... } | test.rs:473:9:475:9 | if ... {...} | 2 | +| test.rs:467:18:478:5 | 'block: { ... } | test.rs:474:13:474:27 | ExprStmt | 1 | +| test.rs:483:18:489:5 | 'block: { ... } | test.rs:485:18:485:18 | y | 1 | +| test.rs:483:18:489:5 | 'block: { ... } | test.rs:486:13:486:27 | ExprStmt | 0 | diff --git a/rust/ql/test/library-tests/controlflow/BasicBlocks.ql b/rust/ql/test/library-tests/controlflow/BasicBlocks.ql new file mode 100644 index 000000000000..28083ef14785 --- /dev/null +++ b/rust/ql/test/library-tests/controlflow/BasicBlocks.ql @@ -0,0 +1,23 @@ +import rust +import codeql.rust.controlflow.ControlFlowGraph +import codeql.rust.controlflow.BasicBlocks + +query predicate dominates(BasicBlock bb1, BasicBlock bb2) { bb1.dominates(bb2) } + +query predicate postDominance(BasicBlock bb1, BasicBlock bb2) { bb1.postDominates(bb2) } + +query predicate immediateDominator(BasicBlock bb1, BasicBlock bb2) { + bb1.getImmediateDominator() = bb2 +} + +query predicate controls(ConditionBasicBlock bb1, BasicBlock bb2, SuccessorType t) { + bb1.controls(bb2, t) +} + +query predicate successor(ConditionBasicBlock bb1, BasicBlock bb2, SuccessorType t) { + bb1.getASuccessor(t) = bb2 +} + +query predicate joinBlockPredecessor(JoinBasicBlock bb1, BasicBlock bb2, int i) { + bb1.getJoinBlockPredecessor(i) = bb2 +} diff --git a/shared/controlflow/change-notes/2025-01-16-basic-block.md b/shared/controlflow/change-notes/2025-01-16-basic-block.md new file mode 100644 index 000000000000..2fd543dc551b --- /dev/null +++ b/shared/controlflow/change-notes/2025-01-16-basic-block.md @@ -0,0 +1,7 @@ +--- +category: breaking +--- +* Added a basic block construction as part of the library. This is currently + considered an internal unstable API. The input signature to the control flow + graph now requires two additional predicates: `idOfAstNode` and + `idOfCfgScope`. diff --git a/shared/controlflow/codeql/controlflow/BasicBlock.qll b/shared/controlflow/codeql/controlflow/BasicBlock.qll new file mode 100644 index 000000000000..f0f3ec428c54 --- /dev/null +++ b/shared/controlflow/codeql/controlflow/BasicBlock.qll @@ -0,0 +1,263 @@ +/** + * This modules provides an implementation of a basic block class based on a + * control flow graph implementation. + * + * INTERNAL use only. This is an experimental API subject to change without + * notice. + */ + +private import codeql.util.Location + +/** Provides the language-specific input specification. */ +signature module InputSig { + class SuccessorType; + + /** Hold if `t` represents a conditional successor type. */ + predicate successorTypeIsCondition(SuccessorType t); + + /** The class of control flow nodes. */ + class Node { + string toString(); + + /** Gets the location of this control flow node. */ + Location getLocation(); + } + + /** Gets an immediate successor of this node. */ + Node nodeGetASuccessor(Node node, SuccessorType t); + + /** + * Holds if `node` represents an entry node to be used when calculating + * dominance. + */ + predicate nodeIsDominanceEntry(Node node); + + /** + * Holds if `node` represents an exit node to be used when calculating + * post dominance. + */ + predicate nodeIsPostDominanceExit(Node node); +} + +/** + * Provides a basic block construction on top of a control flow graph. + */ +module Make Input> { + private import Input + + final class BasicBlock = BasicBlockImpl; + + private Node nodeGetAPredecessor(Node node, SuccessorType s) { + nodeGetASuccessor(result, s) = node + } + + /** Holds if this node has more than one predecessor. */ + private predicate nodeIsJoin(Node node) { strictcount(nodeGetAPredecessor(node, _)) > 1 } + + /** Holds if this node has more than one successor. */ + private predicate nodeIsBranch(Node node) { strictcount(nodeGetASuccessor(node, _)) > 1 } + + /** + * A basic block, that is, a maximal straight-line sequence of control flow nodes + * without branches or joins. + */ + private class BasicBlockImpl extends TBasicBlockStart { + /** Gets the location of this basic block. */ + Location getLocation() { result = this.getFirstNode().getLocation() } + + /** Gets an immediate successor of this basic block, if any. */ + BasicBlock getASuccessor() { result = this.getASuccessor(_) } + + /** Gets an immediate successor of this basic block of a given type, if any. */ + BasicBlock getASuccessor(SuccessorType t) { + result.getFirstNode() = nodeGetASuccessor(this.getLastNode(), t) + } + + /** Gets an immediate predecessor of this basic block, if any. */ + BasicBlock getAPredecessor() { result.getASuccessor(_) = this } + + /** Gets an immediate predecessor of this basic block of a given type, if any. */ + BasicBlock getAPredecessor(SuccessorType t) { result.getASuccessor(t) = this } + + /** Gets the control flow node at a specific (zero-indexed) position in this basic block. */ + cached + Node getNode(int pos) { bbIndex(this.getFirstNode(), result, pos) } + + /** Gets a control flow node in this basic block. */ + Node getANode() { result = this.getNode(_) } + + /** Gets the first control flow node in this basic block. */ + Node getFirstNode() { this = TBasicBlockStart(result) } + + /** Gets the last control flow node in this basic block. */ + Node getLastNode() { result = this.getNode(this.length() - 1) } + + /** Gets the length of this basic block. */ + int length() { result = strictcount(this.getANode()) } + + /** + * Holds if this basic block immediately dominates basic block `bb`. + * + * That is, `bb` is an immediate successor of this basic block and all + * paths reaching basic block `bb` from some entry point basic block must + * go through this basic block. + */ + predicate immediatelyDominates(BasicBlock bb) { bbIDominates(this, bb) } + + /** + * Holds if this basic block strictly dominates basic block `bb`. + * + * That is, all paths reaching `bb` from some entry point basic block must + * go through this basic block and this basic block is different from `bb`. + */ + predicate strictlyDominates(BasicBlock bb) { bbIDominates+(this, bb) } + + /** + * Holds if this basic block dominates basic block `bb`. + * + * That is, all paths reaching `bb` from some entry point basic block must + * go through this basic block. + */ + predicate dominates(BasicBlock bb) { + bb = this or + this.strictlyDominates(bb) + } + + /** + * Holds if `df` is in the dominance frontier of this basic block. That is, + * this basic block dominates a predecessor of `df`, but does not dominate + * `df` itself. I.e., it is equivaluent to: + * ``` + * this.dominates(df.getAPredecessor()) and not this.strictlyDominates(df) + * ``` + */ + predicate inDominanceFrontier(BasicBlock df) { + // Algorithm from Cooper et al., "A Simple, Fast Dominance Algorithm" (Figure 5), + // who in turn attribute it to Ferrante et al., "The program dependence graph and + // its use in optimization". + this = df.getAPredecessor() and not bbIDominates(this, df) + or + exists(BasicBlock prev | prev.inDominanceFrontier(df) | + bbIDominates(this, prev) and + not bbIDominates(this, df) + ) + } + + /** + * Gets the basic block that immediately dominates this basic block, if any. + * + * That is, all paths reaching this basic block from some entry point + * basic block must go through the result, which is an immediate basic block + * predecessor of this basic block. + */ + BasicBlock getImmediateDominator() { bbIDominates(result, this) } + + /** + * Holds if this basic block strictly post-dominates basic block `bb`. + * + * That is, all paths reaching a normal exit point basic block from basic + * block `bb` must go through this basic block and this basic block is + * different from `bb`. + */ + predicate strictlyPostDominates(BasicBlock bb) { bbIPostDominates+(this, bb) } + + /** + * Holds if this basic block post-dominates basic block `bb`. + * + * That is, all paths reaching a normal exit point basic block from basic + * block `bb` must go through this basic block. + */ + predicate postDominates(BasicBlock bb) { + this.strictlyPostDominates(bb) or + this = bb + } + + /** Holds if this basic block is in a loop in the control flow graph. */ + predicate inLoop() { this.getASuccessor+() = this } + + /** Gets a textual representation of this basic block. */ + string toString() { result = this.getFirstNode().toString() } + } + + cached + private module Cached { + /** + * Internal representation of basic blocks. A basic block is represented + * by its first CFG node. + */ + cached + newtype TBasicBlock = TBasicBlockStart(Node cfn) { startsBB(cfn) } + + /** + * Holds if the first node of basic block `succ` is a control flow + * successor of the last node of basic block `pred`. + */ + private predicate succBB(BasicBlock pred, BasicBlock succ) { pred.getASuccessor(_) = succ } + + /** Holds if `dom` is an immediate dominator of `bb`. */ + cached + predicate bbIDominates(BasicBlock dom, BasicBlock bb) = + idominance(entryBB/1, succBB/2)(_, dom, bb) + + /** Holds if `pred` is a basic block predecessor of `succ`. */ + private predicate predBB(BasicBlock succ, BasicBlock pred) { succBB(pred, succ) } + + /** Holds if `bb` is an exit basic block that represents normal exit. */ + private predicate exitBB(BasicBlock bb) { nodeIsPostDominanceExit(bb.getANode()) } + + /** Holds if `dom` is an immediate post-dominator of `bb`. */ + cached + predicate bbIPostDominates(BasicBlock dom, BasicBlock bb) = + idominance(exitBB/1, predBB/2)(_, dom, bb) + } + + private import Cached + + /** Holds if `cfn` starts a new basic block. */ + private predicate startsBB(Node cfn) { + not exists(nodeGetAPredecessor(cfn, _)) and exists(nodeGetASuccessor(cfn, _)) + or + nodeIsJoin(cfn) + or + nodeIsBranch(nodeGetAPredecessor(cfn, _)) + or + // In cases such as + // + // ```rb + // if x and y + // foo + // else + // bar + // ``` + // + // we have a CFG that looks like + // + // x --false--> [false] x or y --false--> bar + // \ | + // --true--> y --false-- + // \ + // --true--> [true] x or y --true--> foo + // + // and we want to ensure that both `foo` and `bar` start a new basic block. + exists(nodeGetAPredecessor(cfn, any(SuccessorType s | successorTypeIsCondition(s)))) + } + + /** + * Holds if `succ` is a control flow successor of `pred` within + * the same basic block. + */ + predicate intraBBSucc(Node pred, Node succ) { + succ = nodeGetASuccessor(pred, _) and + not startsBB(succ) + } + + /** + * Holds if `bbStart` is the first node in a basic block and `cfn` is the + * `i`th node in the same basic block. + */ + private predicate bbIndex(Node bbStart, Node cfn, int i) = + shortestDistances(startsBB/1, intraBBSucc/2)(bbStart, cfn, i) + + /** Holds if `bb` is an entry basic block. */ + private predicate entryBB(BasicBlock bb) { nodeIsDominanceEntry(bb.getFirstNode()) } +} diff --git a/shared/controlflow/codeql/controlflow/Cfg.qll b/shared/controlflow/codeql/controlflow/Cfg.qll index 4130920daf67..65fe28d49ef7 100644 --- a/shared/controlflow/codeql/controlflow/Cfg.qll +++ b/shared/controlflow/codeql/controlflow/Cfg.qll @@ -48,7 +48,7 @@ signature module InputSig { Location getLocation(); } - /** Gets the CFG scope of AST node `n`. */ + /** Gets the CFG scope of the AST node `n`. */ CfgScope getCfgScope(AstNode n); /** Holds if `first` is executed first when entering `scope`. */ @@ -77,6 +77,18 @@ signature module InputSig { /** Holds if `t` is an abnormal exit type out of a CFG scope. */ predicate isAbnormalExitType(SuccessorType t); + + /** + * Gets an `id` of `node`. This is used to order the predecessors of a join + * basic block. + */ + int idOfAstNode(AstNode node); + + /** + * Gets an `id` of `scope`. This is used to order the predecessors of a join + * basic block. + */ + int idOfCfgScope(CfgScope scope); } /** Provides input needed for CFG splitting. */ @@ -994,6 +1006,41 @@ module MakeWithSplitting< ) } + private module JoinBlockPredecessors { + predicate hasIdAndKind(BasicBlocks::JoinPredecessorBasicBlock jbp, int id, int kind) { + id = idOfCfgScope(jbp.(BasicBlocks::EntryBasicBlock).getScope()) and + kind = 0 + or + not jbp instanceof BasicBlocks::EntryBasicBlock and + id = idOfAstNode(jbp.getFirstNode().(AstCfgNode).getAstNode()) and + kind = 1 + } + + string getSplitString(BasicBlocks::JoinPredecessorBasicBlock jbp) { + result = jbp.getFirstNode().(AstCfgNode).getSplitsString() + or + not exists(jbp.getFirstNode().(AstCfgNode).getSplitsString()) and + result = "" + } + } + + /** + * Gets the `i`th predecessor of join block `jb`, with respect to some + * arbitrary order. + */ + cached + BasicBlocks::JoinPredecessorBasicBlock getJoinBlockPredecessor( + BasicBlocks::JoinBasicBlock jb, int i + ) { + result = + rank[i + 1](BasicBlocks::JoinPredecessorBasicBlock jbp, int id, int kind | + jbp = jb.getAPredecessor() and + JoinBlockPredecessors::hasIdAndKind(jbp, id, kind) + | + jbp order by id, kind, JoinBlockPredecessors::getSplitString(jbp) + ) + } + cached module Public { /** @@ -1514,6 +1561,226 @@ module MakeWithSplitting< /** Holds if CFG scope `scope` lacks an initial AST node. */ query predicate scopeNoFirst(CfgScope scope) { not scopeFirst(scope, _) } } + + /** + * Provides a basic block construction on top of the control flow graph. + */ + module BasicBlocks { + private import codeql.controlflow.BasicBlock as BB + + private class NodeAlias = Node; + + private module BasicBlockInputSig implements BB::InputSig { + class SuccessorType = Input::SuccessorType; + + predicate successorTypeIsCondition = Input::successorTypeIsCondition/1; + + class Node = NodeAlias; + + Node nodeGetASuccessor(Node node, SuccessorType t) { result = node.getASuccessor(t) } + + predicate nodeIsDominanceEntry(Node node) { node instanceof EntryNode } + + predicate nodeIsPostDominanceExit(Node node) { node.(AnnotatedExitNode).isNormal() } + } + + private module BasicBlockImpl = BB::Make; + + /** + * A basic block, that is, a maximal straight-line sequence of control flow nodes + * without branches or joins. + */ + final class BasicBlock extends BasicBlockImpl::BasicBlock { + // We extend `BasicBlockImpl::BasicBlock` to add the `getScope`. + /** Gets the scope of this basic block. */ + CfgScope getScope() { + if this instanceof EntryBasicBlock + then result = this.getFirstNode().getScope() + else result = this.getAPredecessor().getScope() + } + + /** Gets an immediate successor of this basic block, if any. */ + BasicBlock getASuccessor() { result = super.getASuccessor() } + + /** Gets an immediate successor of this basic block of a given type, if any. */ + BasicBlock getASuccessor(SuccessorType t) { result = super.getASuccessor(t) } + + /** Gets an immediate predecessor of this basic block, if any. */ + BasicBlock getAPredecessor() { result = super.getAPredecessor() } + + /** Gets an immediate predecessor of this basic block of a given type, if any. */ + BasicBlock getAPredecessor(SuccessorType t) { result = super.getAPredecessor(t) } + + /** + * Holds if this basic block immediately dominates basic block `bb`. + * + * That is, `bb` is an immediate successor of this basic block and all + * paths reaching basic block `bb` from some entry point basic block must + * go through this basic block. + */ + predicate immediatelyDominates(BasicBlock bb) { super.immediatelyDominates(bb) } + + /** + * Holds if this basic block strictly dominates basic block `bb`. + * + * That is, all paths reaching `bb` from some entry point basic block must + * go through this basic block and this basic block is different from `bb`. + */ + predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } + + /** + * Holds if this basic block dominates basic block `bb`. + * + * That is, all paths reaching `bb` from some entry point basic block must + * go through this basic block. + */ + predicate dominates(BasicBlock bb) { super.dominates(bb) } + + /** + * Holds if `df` is in the dominance frontier of this basic block. That is, + * this basic block dominates a predecessor of `df`, but does not dominate + * `df` itself. + */ + predicate inDominanceFrontier(BasicBlock df) { super.inDominanceFrontier(df) } + + /** + * Gets the basic block that immediately dominates this basic block, if any. + * + * That is, all paths reaching this basic block from some entry point + * basic block must go through the result, which is an immediate basic block + * predecessor of this basic block. + */ + BasicBlock getImmediateDominator() { result = super.getImmediateDominator() } + + /** + * Holds if this basic block strictly post-dominates basic block `bb`. + * + * That is, all paths reaching a normal exit point basic block from basic + * block `bb` must go through this basic block and this basic block is + * different from `bb`. + */ + predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) } + + /** + * Holds if this basic block post-dominates basic block `bb`. + * + * That is, all paths reaching a normal exit point basic block from basic + * block `bb` must go through this basic block. + */ + predicate postDominates(BasicBlock bb) { super.postDominates(bb) } + } + + /** + * An entry basic block, that is, a basic block whose first node is + * an entry node. + */ + final class EntryBasicBlock extends BasicBlock { + EntryBasicBlock() { this.getFirstNode() instanceof EntryNode } + } + + /** + * An annotated exit basic block, that is, a basic block that contains an + * annotated exit node. + */ + final class AnnotatedExitBasicBlock extends BasicBlock { + private boolean normal; + + AnnotatedExitBasicBlock() { + exists(AnnotatedExitNode n | + n = this.getANode() and + if n.isNormal() then normal = true else normal = false + ) + } + + /** Holds if this block represent a normal exit. */ + final predicate isNormal() { normal = true } + } + + /** + * An exit basic block, that is, a basic block whose last node is + * an exit node. + */ + final class ExitBasicBlock extends BasicBlock { + ExitBasicBlock() { this.getLastNode() instanceof ExitNode } + } + + /** A basic block with more than one predecessor. */ + final class JoinBasicBlock extends BasicBlock { + JoinBasicBlock() { this.getFirstNode().isJoin() } + + /** + * Gets the `i`th predecessor of this join block, with respect to some + * arbitrary order. + */ + JoinPredecessorBasicBlock getJoinBlockPredecessor(int i) { + result = getJoinBlockPredecessor(this, i) + } + } + + /** A basic block that is an immediate predecessor of a join block. */ + final class JoinPredecessorBasicBlock extends BasicBlock { + JoinPredecessorBasicBlock() { this.getASuccessor() instanceof JoinBasicBlock } + } + + /** A basic block that terminates in a condition, splitting the subsequent control flow. */ + final class ConditionBasicBlock extends BasicBlock { + ConditionBasicBlock() { this.getLastNode().isCondition() } + + /** + * Holds if basic block `succ` is immediately controlled by this basic + * block with conditional value `s`. That is, `succ` is an immediate + * successor of this block, and `succ` can only be reached from + * the callable entry point by going via the `s` edge out of this basic block. + */ + pragma[nomagic] + predicate immediatelyControls(BasicBlock succ, SuccessorType s) { + succ = this.getASuccessor(s) and + forall(BasicBlock pred | pred = succ.getAPredecessor() and pred != this | + succ.dominates(pred) + ) + } + + /** + * Holds if basic block `controlled` is controlled by this basic block with + * conditional value `s`. That is, `controlled` can only be reached from + * the callable entry point by going via the `s` edge out of this basic block. + */ + predicate controls(BasicBlock controlled, SuccessorType s) { + // For this block to control the block `controlled` with `testIsTrue` the following must be true: + // 1/ Execution must have passed through the test i.e. `this` must strictly dominate `controlled`. + // 2/ Execution must have passed through the `testIsTrue` edge leaving `this`. + // + // Although "passed through the true edge" implies that `this.getATrueSuccessor()` dominates `controlled`, + // the reverse is not true, as flow may have passed through another edge to get to `this.getATrueSuccessor()` + // so we need to assert that `this.getATrueSuccessor()` dominates `controlled` *and* that + // all predecessors of `this.getATrueSuccessor()` are either `this` or dominated by `this.getATrueSuccessor()`. + // + // For example, in the following C# snippet: + // ```csharp + // if (x) + // controlled; + // false_successor; + // uncontrolled; + // ``` + // `false_successor` dominates `uncontrolled`, but not all of its predecessors are `this` (`if (x)`) + // or dominated by itself. Whereas in the following code: + // ```csharp + // if (x) + // while (controlled) + // also_controlled; + // false_successor; + // uncontrolled; + // ``` + // the block `while controlled` is controlled because all of its predecessors are `this` (`if (x)`) + // or (in the case of `also_controlled`) dominated by itself. + // + // The additional constraint on the predecessors of the test successor implies + // that `this` strictly dominates `controlled` so that isn't necessary to check + // directly. + exists(BasicBlock succ | this.immediatelyControls(succ, s) | succ.dominates(controlled)) + } + } + } } /** Provides a disabled `SplittingInputSig` implementation. */ diff --git a/swift/ql/lib/codeql/swift/controlflow/BasicBlocks.qll b/swift/ql/lib/codeql/swift/controlflow/BasicBlocks.qll index dfe18e4ceded..b0094045113c 100644 --- a/swift/ql/lib/codeql/swift/controlflow/BasicBlocks.qll +++ b/swift/ql/lib/codeql/swift/controlflow/BasicBlocks.qll @@ -1,271 +1,96 @@ /** Provides classes representing basic blocks. */ -private import swift private import ControlFlowGraph -private import internal.ControlFlowGraphImpl as Impl -private import internal.ControlFlowElements -private import CfgNodes +private import internal.ControlFlowGraphImpl as CfgImpl private import SuccessorTypes -private import codeql.swift.generated.Raw -private import codeql.swift.generated.Synth +private import CfgImpl::BasicBlocks as BasicBlocksImpl /** * A basic block, that is, a maximal straight-line sequence of control flow nodes * without branches or joins. */ -class BasicBlock extends TBasicBlockStart { - /** Gets the scope of this basic block. */ - CfgScope getScope() { result = this.getAPredecessor().getScope() } - +final class BasicBlock extends BasicBlocksImpl::BasicBlock { /** Gets an immediate successor of this basic block, if any. */ - BasicBlock getASuccessor() { result = this.getASuccessor(_) } + BasicBlock getASuccessor() { result = super.getASuccessor() } /** Gets an immediate successor of this basic block of a given type, if any. */ - BasicBlock getASuccessor(SuccessorType t) { - result.getFirstNode() = this.getLastNode().getASuccessor(t) - } + BasicBlock getASuccessor(SuccessorType t) { result = super.getASuccessor(t) } /** Gets an immediate predecessor of this basic block, if any. */ - BasicBlock getAPredecessor() { result.getASuccessor() = this } + BasicBlock getAPredecessor() { result = super.getAPredecessor() } /** Gets an immediate predecessor of this basic block of a given type, if any. */ - BasicBlock getAPredecessor(SuccessorType t) { result.getASuccessor(t) = this } + BasicBlock getAPredecessor(SuccessorType t) { result = super.getAPredecessor(t) } /** Gets the control flow node at a specific (zero-indexed) position in this basic block. */ - ControlFlowNode getNode(int pos) { bbIndex(this.getFirstNode(), result, pos) } + ControlFlowNode getNode(int pos) { result = super.getNode(pos) } /** Gets a control flow node in this basic block. */ - ControlFlowNode getANode() { result = this.getNode(_) } + ControlFlowNode getANode() { result = super.getANode() } /** Gets the first control flow node in this basic block. */ - ControlFlowNode getFirstNode() { this = TBasicBlockStart(result) } + ControlFlowNode getFirstNode() { result = super.getFirstNode() } /** Gets the last control flow node in this basic block. */ - ControlFlowNode getLastNode() { result = this.getNode(this.length() - 1) } - - /** Gets the length of this basic block. */ - int length() { result = strictcount(this.getANode()) } - - predicate immediatelyDominates(BasicBlock bb) { bbIDominates(this, bb) } + ControlFlowNode getLastNode() { result = super.getLastNode() } - predicate strictlyDominates(BasicBlock bb) { bbIDominates+(this, bb) } - - predicate dominates(BasicBlock bb) { - bb = this or - this.strictlyDominates(bb) - } - - predicate inDominanceFrontier(BasicBlock df) { - this.dominatesPredecessor(df) and - not this.strictlyDominates(df) - } - - /** - * Holds if this basic block dominates a predecessor of `df`. - */ - private predicate dominatesPredecessor(BasicBlock df) { this.dominates(df.getAPredecessor()) } - - BasicBlock getImmediateDominator() { bbIDominates(result, this) } - - predicate strictlyPostDominates(BasicBlock bb) { bbIPostDominates+(this, bb) } - - predicate postDominates(BasicBlock bb) { - this.strictlyPostDominates(bb) or - this = bb - } - - /** Holds if this basic block is in a loop in the control flow graph. */ - predicate inLoop() { this.getASuccessor+() = this } - - /** Gets a textual representation of this basic block. */ - string toString() { result = this.getFirstNode().toString() } - - /** Gets the location of this basic block. */ - Location getLocation() { result = this.getFirstNode().getLocation() } -} - -cached -private module Cached { - /** Internal representation of basic blocks. */ - cached - newtype TBasicBlock = TBasicBlockStart(ControlFlowNode cfn) { startsBB(cfn) } - - /** Holds if `cfn` starts a new basic block. */ - private predicate startsBB(ControlFlowNode cfn) { - not exists(cfn.getAPredecessor()) and exists(cfn.getASuccessor()) - or - cfn.isJoin() - or - cfn.getAPredecessor().isBranch() - } - - /** - * Holds if `succ` is a control flow successor of `pred` within - * the same basic block. - */ - private predicate intraBBSucc(ControlFlowNode pred, ControlFlowNode succ) { - succ = pred.getASuccessor() and - not startsBB(succ) - } - - /** - * Holds if `cfn` is the `i`th node in basic block `bb`. - * - * In other words, `i` is the shortest distance from a node `bb` - * that starts a basic block to `cfn` along the `intraBBSucc` relation. - */ - cached - predicate bbIndex(ControlFlowNode bbStart, ControlFlowNode cfn, int i) = - shortestDistances(startsBB/1, intraBBSucc/2)(bbStart, cfn, i) + predicate immediatelyDominates(BasicBlock bb) { super.immediatelyDominates(bb) } - /** - * Holds if the first node of basic block `succ` is a control flow - * successor of the last node of basic block `pred`. - */ - private predicate succBB(BasicBlock pred, BasicBlock succ) { succ = pred.getASuccessor() } + predicate strictlyDominates(BasicBlock bb) { super.strictlyDominates(bb) } - /** Holds if `dom` is an immediate dominator of `bb`. */ - cached - predicate bbIDominates(BasicBlock dom, BasicBlock bb) = - idominance(entryBB/1, succBB/2)(_, dom, bb) + predicate dominates(BasicBlock bb) { super.dominates(bb) } - /** Holds if `pred` is a basic block predecessor of `succ`. */ - private predicate predBB(BasicBlock succ, BasicBlock pred) { succBB(pred, succ) } + predicate inDominanceFrontier(BasicBlock df) { super.inDominanceFrontier(df) } - /** Holds if `bb` is an exit basic block that represents normal exit. */ - private predicate normalExitBB(BasicBlock bb) { - bb.getANode().(Impl::AnnotatedExitNode).isNormal() - } + BasicBlock getImmediateDominator() { result = super.getImmediateDominator() } - /** Holds if `dom` is an immediate post-dominator of `bb`. */ - cached - predicate bbIPostDominates(BasicBlock dom, BasicBlock bb) = - idominance(normalExitBB/1, predBB/2)(_, dom, bb) + predicate strictlyPostDominates(BasicBlock bb) { super.strictlyPostDominates(bb) } - /** - * Gets the `i`th predecessor of join block `jb`, with respect to some - * arbitrary order. - */ - cached - JoinBlockPredecessor getJoinBlockPredecessor(JoinBlock jb, int i) { - result = - rank[i + 1](JoinBlockPredecessor jbp | - jbp = jb.getAPredecessor() - | - jbp order by JoinBlockPredecessors::getId(jbp), JoinBlockPredecessors::getSplitString(jbp) - ) - } + predicate postDominates(BasicBlock bb) { super.postDominates(bb) } } -private import Cached - -/** Holds if `bb` is an entry basic block. */ -private predicate entryBB(BasicBlock bb) { bb.getFirstNode() instanceof EntryNode } - /** * An entry basic block, that is, a basic block whose first node is * an entry node. */ -class EntryBasicBlock extends BasicBlock { - EntryBasicBlock() { entryBB(this) } - - override CfgScope getScope() { - this.getFirstNode() = any(EntryNode node | node.getScope() = result) - } -} +final class EntryBasicBlock extends BasicBlock, BasicBlocksImpl::EntryBasicBlock { } /** - * An annotated exit basic block, that is, a basic block whose last node is - * an annotated exit node. + * An annotated exit basic block, that is, a basic block that contains an + * annotated exit node. */ -class AnnotatedExitBasicBlock extends BasicBlock { - private boolean normal; - - AnnotatedExitBasicBlock() { - exists(Impl::AnnotatedExitNode n | - n = this.getANode() and - if n.isNormal() then normal = true else normal = false - ) - } - - /** Holds if this block represent a normal exit. */ - final predicate isNormal() { normal = true } -} +final class AnnotatedExitBasicBlock extends BasicBlock, BasicBlocksImpl::AnnotatedExitBasicBlock { } /** * An exit basic block, that is, a basic block whose last node is * an exit node. */ -class ExitBasicBlock extends BasicBlock { - ExitBasicBlock() { this.getLastNode() instanceof ExitNode } -} - -private module JoinBlockPredecessors { - private predicate id(Raw::AstNode x, Raw::AstNode y) { x = y } - - private predicate idOfDbAstNode(Raw::AstNode x, int y) = equivalenceRelation(id/2)(x, y) - - // TODO does not work if fresh ipa entities (`ipa: on:`) turn out to be first of the block - private predicate idOf(AstNode x, int y) { idOfDbAstNode(Synth::convertAstNodeToRaw(x), y) } - - private AstNode projectToAst(ControlFlowElement n) { - result = n.asAstNode() - or - isPropertyGetterElement(n, _, result) - or - isPropertySetterElement(n, _, result) - or - isPropertyObserverElement(n, _, result) - or - result = n.(KeyPathElement).getAst() - or - result = n.(FuncDeclElement).getAst() - } - - int getId(JoinBlockPredecessor jbp) { - idOf(projectToAst(jbp.getFirstNode().(CfgNode).getNode()), result) - or - idOf(jbp.(EntryBasicBlock).getScope(), result) - } - - string getSplitString(JoinBlockPredecessor jbp) { - result = jbp.getFirstNode().(CfgNode).getSplitsString() - or - not exists(jbp.getFirstNode().(CfgNode).getSplitsString()) and - result = "" - } -} +final class ExitBasicBlock extends BasicBlock, BasicBlocksImpl::ExitBasicBlock { } /** A basic block with more than one predecessor. */ -class JoinBlock extends BasicBlock { +final class JoinBlock extends BasicBlock, BasicBlocksImpl::JoinBasicBlock { JoinBlock() { this.getFirstNode().isJoin() } /** * Gets the `i`th predecessor of this join block, with respect to some * arbitrary order. */ - JoinBlockPredecessor getJoinBlockPredecessor(int i) { result = getJoinBlockPredecessor(this, i) } + JoinBlockPredecessor getJoinBlockPredecessor(int i) { result = super.getJoinBlockPredecessor(i) } } /** A basic block that is an immediate predecessor of a join block. */ -class JoinBlockPredecessor extends BasicBlock { - JoinBlockPredecessor() { this.getASuccessor() instanceof JoinBlock } -} +class JoinBlockPredecessor extends BasicBlock, BasicBlocksImpl::JoinPredecessorBasicBlock { } /** A basic block that terminates in a condition, splitting the subsequent control flow. */ -class ConditionBlock extends BasicBlock { - ConditionBlock() { this.getLastNode().isCondition() } - +final class ConditionBlock extends BasicBlock, BasicBlocksImpl::ConditionBasicBlock { /** * Holds if basic block `succ` is immediately controlled by this basic * block with conditional value `s`. That is, `succ` is an immediate * successor of this block, and `succ` can only be reached from * the callable entry point by going via the `s` edge out of this basic block. */ - pragma[nomagic] - predicate immediatelyControls(BasicBlock succ, SuccessorType s) { - succ = this.getASuccessor(s) and - forall(BasicBlock pred | pred = succ.getAPredecessor() and pred != this | succ.dominates(pred)) + predicate immediatelyControls(BasicBlock succ, ConditionalSuccessor s) { + super.immediatelyControls(succ, s) } /** @@ -273,7 +98,7 @@ class ConditionBlock extends BasicBlock { * conditional value `s`. That is, `controlled` can only be reached from * the callable entry point by going via the `s` edge out of this basic block. */ - predicate controls(BasicBlock controlled, BooleanSuccessor s) { - exists(BasicBlock succ | this.immediatelyControls(succ, s) | succ.dominates(controlled)) + predicate controls(BasicBlock controlled, ConditionalSuccessor s) { + super.controls(controlled, s) } } diff --git a/swift/ql/lib/codeql/swift/controlflow/ControlFlowGraph.qll b/swift/ql/lib/codeql/swift/controlflow/ControlFlowGraph.qll index 96a005c22b63..4d1be28b0012 100644 --- a/swift/ql/lib/codeql/swift/controlflow/ControlFlowGraph.qll +++ b/swift/ql/lib/codeql/swift/controlflow/ControlFlowGraph.qll @@ -3,18 +3,18 @@ private import swift private import BasicBlocks private import SuccessorTypes -private import internal.ControlFlowGraphImpl +private import internal.ControlFlowGraphImpl as CfgImpl private import internal.Completion private import internal.Scope private import internal.ControlFlowElements /** An AST node with an associated control-flow graph. */ -class CfgScope extends Scope instanceof CfgScope::Range_ { +class CfgScope extends Scope instanceof CfgImpl::CfgScope::Range_ { /** Gets the CFG scope that this scope is nested under, if any. */ final CfgScope getOuterCfgScope() { exists(ControlFlowElement parent | parent.asAstNode() = getParentOfAst(this) and - result = getCfgScope(parent) + result = CfgImpl::getCfgScope(parent) ) } } @@ -27,7 +27,7 @@ class CfgScope extends Scope instanceof CfgScope::Range_ { * * Only nodes that can be reached from an entry point are included in the CFG. */ -class ControlFlowNode extends Node { +class ControlFlowNode extends CfgImpl::Node { /** Gets the AST node that this node corresponds to, if any. */ ControlFlowElement getNode() { none() } @@ -63,7 +63,7 @@ class ControlFlowNode extends Node { } /** The type of a control flow successor. */ -class SuccessorType extends TSuccessorType { +class SuccessorType extends CfgImpl::TSuccessorType { /** Gets a textual representation of successor type. */ string toString() { none() } } @@ -71,7 +71,7 @@ class SuccessorType extends TSuccessorType { /** Provides different types of control flow successor types. */ module SuccessorTypes { /** A normal control flow successor. */ - class NormalSuccessor extends SuccessorType, TSuccessorSuccessor { + class NormalSuccessor extends SuccessorType, CfgImpl::TSuccessorSuccessor { final override string toString() { result = "successor" } } @@ -89,24 +89,24 @@ module SuccessorTypes { } /** A Boolean control flow successor. */ - class BooleanSuccessor extends ConditionalSuccessor, TBooleanSuccessor { - BooleanSuccessor() { this = TBooleanSuccessor(value) } + class BooleanSuccessor extends ConditionalSuccessor, CfgImpl::TBooleanSuccessor { + BooleanSuccessor() { this = CfgImpl::TBooleanSuccessor(value) } } - class BreakSuccessor extends SuccessorType, TBreakSuccessor { + class BreakSuccessor extends SuccessorType, CfgImpl::TBreakSuccessor { final override string toString() { result = "break" } } - class ContinueSuccessor extends SuccessorType, TContinueSuccessor { + class ContinueSuccessor extends SuccessorType, CfgImpl::TContinueSuccessor { final override string toString() { result = "continue" } } - class ReturnSuccessor extends SuccessorType, TReturnSuccessor { + class ReturnSuccessor extends SuccessorType, CfgImpl::TReturnSuccessor { final override string toString() { result = "return" } } - class MatchingSuccessor extends ConditionalSuccessor, TMatchingSuccessor { - MatchingSuccessor() { this = TMatchingSuccessor(value) } + class MatchingSuccessor extends ConditionalSuccessor, CfgImpl::TMatchingSuccessor { + MatchingSuccessor() { this = CfgImpl::TMatchingSuccessor(value) } /** Holds if this is a match successor. */ predicate isMatch() { value = true } @@ -114,19 +114,19 @@ module SuccessorTypes { override string toString() { if this.isMatch() then result = "match" else result = "no-match" } } - class FallthroughSuccessor extends SuccessorType, TFallthroughSuccessor { + class FallthroughSuccessor extends SuccessorType, CfgImpl::TFallthroughSuccessor { final override string toString() { result = "fallthrough" } } - class EmptinessSuccessor extends ConditionalSuccessor, TEmptinessSuccessor { - EmptinessSuccessor() { this = TEmptinessSuccessor(value) } + 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, TExceptionSuccessor { + class ExceptionSuccessor extends SuccessorType, CfgImpl::TExceptionSuccessor { override string toString() { result = "exception" } } } diff --git a/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImplSpecific.qll b/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImplSpecific.qll index 362537068a63..24548290ea07 100644 --- a/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImplSpecific.qll +++ b/swift/ql/lib/codeql/swift/controlflow/internal/ControlFlowGraphImplSpecific.qll @@ -15,6 +15,8 @@ import Completion private import codeql.swift.controlflow.ControlFlowGraph as Cfg private import Splitting as Splitting private import Scope +private import codeql.swift.generated.Raw +private import codeql.swift.generated.Synth import ControlFlowElements import AstControlFlowTrees @@ -82,6 +84,31 @@ module CfgInput implements InputSig { predicate scopeLast(CfgScope scope, AstNode last, Completion c) { scope.(Impl::CfgScope::Range_).exit(last, c) } + + private predicate id(Raw::AstNode x, Raw::AstNode y) { x = y } + + private predicate idOfDbAstNode(Raw::AstNode x, int y) = equivalenceRelation(id/2)(x, y) + + // TODO: does not work if fresh ipa entities (`ipa: on:`) turn out to be first of the block + private predicate idOf(S::AstNode x, int y) { idOfDbAstNode(Synth::convertAstNodeToRaw(x), y) } + + private S::AstNode projectToAst(ControlFlowElement n) { + result = n.asAstNode() + or + isPropertyGetterElement(n, _, result) + or + isPropertySetterElement(n, _, result) + or + isPropertyObserverElement(n, _, result) + or + result = n.(KeyPathElement).getAst() + or + result = n.(FuncDeclElement).getAst() + } + + int idOfAstNode(AstNode node) { idOf(projectToAst(node), result) } + + int idOfCfgScope(CfgScope node) { idOf(node, result) } } private module CfgSplittingInput implements SplittingInputSig { diff --git a/swift/ql/lib/codeql/swift/dataflow/Ssa.qll b/swift/ql/lib/codeql/swift/dataflow/Ssa.qll index 971cc8cc705c..e8ad8cbdcebf 100644 --- a/swift/ql/lib/codeql/swift/dataflow/Ssa.qll +++ b/swift/ql/lib/codeql/swift/dataflow/Ssa.qll @@ -21,7 +21,7 @@ module Ssa { BasicBlock getABasicBlockSuccessor(BasicBlock bb) { result = bb.getASuccessor() } - class ExitBasicBlock extends BasicBlock, BasicBlocks::ExitBasicBlock { } + class ExitBasicBlock = BasicBlocks::ExitBasicBlock; private newtype TSourceVariable = TNormalSourceVariable(VarDecl v) or