diff --git a/ruby/ql/consistency-queries/CfgConsistency.ql b/ruby/ql/consistency-queries/CfgConsistency.ql
index c8d797b71f4c..5af4f22fc26a 100644
--- a/ruby/ql/consistency-queries/CfgConsistency.ql
+++ b/ruby/ql/consistency-queries/CfgConsistency.ql
@@ -11,9 +11,7 @@ import codeql.ruby.controlflow.internal.ControlFlowGraphImpl as CfgImpl
query predicate nonPostOrderExpr(Expr e, string cls) {
cls = e.getPrimaryQlClasses() and
not exists(e.getDesugared()) and
- not e instanceof BeginExpr and
- not e instanceof Namespace and
- not e instanceof Toplevel and
+ not e instanceof BodyStmt and
exists(AstNode last, Completion c |
CfgImpl::last(e, last, c) and
last != e and
@@ -27,7 +25,7 @@ query predicate scopeNoFirst(CfgScope scope) {
not scope =
any(Callable c |
not exists(c.getAParameter()) and
- not c.(BodyStmt).hasEnsure() and
- not exists(c.(BodyStmt).getARescue())
+ not c.getBody().hasEnsure() and
+ not exists(c.getBody().getARescue())
)
}
diff --git a/ruby/ql/lib/codeql/ruby/ast/Expr.qll b/ruby/ql/lib/codeql/ruby/ast/Expr.qll
index e932202e53fd..a49cafa82996 100644
--- a/ruby/ql/lib/codeql/ruby/ast/Expr.qll
+++ b/ruby/ql/lib/codeql/ruby/ast/Expr.qll
@@ -167,6 +167,8 @@ class StmtSequence extends Expr, TStmtSequence {
*/
class BodyStmt extends StmtSequence, TBodyStmt {
final override Stmt getStmt(int n) {
+ synthChild(this, n, result)
+ or
toGenerated(result) =
rank[n + 1](Ruby::AstNode node, int i |
node = getBodyStmtChild(this, i) and
diff --git a/ruby/ql/lib/codeql/ruby/ast/Method.qll b/ruby/ql/lib/codeql/ruby/ast/Method.qll
index 147782e3d08d..38892da721e5 100644
--- a/ruby/ql/lib/codeql/ruby/ast/Method.qll
+++ b/ruby/ql/lib/codeql/ruby/ast/Method.qll
@@ -8,7 +8,7 @@ private import internal.TreeSitter
private import internal.Method
/** A callable. */
-class Callable extends StmtSequence, Expr, Scope, TCallable {
+class Callable extends Expr, Scope, TCallable {
/** Gets the number of parameters of this callable. */
final int getNumberOfParameters() { result = count(this.getAParameter()) }
@@ -18,27 +18,26 @@ class Callable extends StmtSequence, Expr, Scope, TCallable {
/** Gets the `n`th parameter of this callable. */
Parameter getParameter(int n) { none() }
+ /** Gets the body of this callable. */
+ BodyStmt getBody() { none() }
+
override AstNode getAChild(string pred) {
result = super.getAChild(pred)
or
+ pred = "getBody" and result = this.getBody()
+ or
pred = "getParameter" and result = this.getParameter(_)
}
}
/** A method. */
-class MethodBase extends Callable, BodyStmt, Scope, TMethodBase {
+class MethodBase extends Callable, Scope, TMethodBase {
/** Gets the name of this method. */
string getName() { none() }
/** Holds if the name of this method is `name`. */
final predicate hasName(string name) { this.getName() = name }
- override AstNode getAChild(string pred) {
- result = Callable.super.getAChild(pred)
- or
- result = BodyStmt.super.getAChild(pred)
- }
-
/**
* Holds if this method is public.
* Methods are public by default.
@@ -218,6 +217,10 @@ class Method extends MethodBase, TMethod {
toGenerated(result) = g.getParameters().getChild(n)
}
+ final override BodyStmt getBody() {
+ toGenerated(result) = g.getBody() or synthChild(this, _, result)
+ }
+
final override string toString() { result = this.getName() }
overlay[global]
@@ -280,6 +283,10 @@ class SingletonMethod extends MethodBase, TSingletonMethod {
toGenerated(result) = g.getParameters().getChild(n)
}
+ final override BodyStmt getBody() {
+ toGenerated(result) = g.getBody() or synthChild(this, _, result)
+ }
+
final override string toString() { result = this.getName() }
final override AstNode getAChild(string pred) {
@@ -321,7 +328,7 @@ class SingletonMethod extends MethodBase, TSingletonMethod {
* -> (x) { x + 1 }
* ```
*/
-class Lambda extends Callable, BodyStmt, TLambda {
+class Lambda extends Callable, TLambda {
private Ruby::Lambda g;
Lambda() { this = TLambda(g) }
@@ -332,17 +339,16 @@ class Lambda extends Callable, BodyStmt, TLambda {
toGenerated(result) = g.getParameters().getChild(n)
}
- final override string toString() { result = "-> { ... }" }
-
- final override AstNode getAChild(string pred) {
- result = Callable.super.getAChild(pred)
- or
- result = BodyStmt.super.getAChild(pred)
+ final override BodyStmt getBody() {
+ toGenerated(result) = g.getBody().(Ruby::DoBlock).getBody() or
+ toGenerated(result) = g.getBody().(Ruby::Block).getBody()
}
+
+ final override string toString() { result = "-> { ... }" }
}
/** A block. */
-class Block extends Callable, StmtSequence, Scope, TBlock {
+class Block extends Callable, Scope, TBlock {
/**
* Gets a local variable declared by this block.
* For example `local` in `{ | param; local| puts param }`.
@@ -355,17 +361,15 @@ class Block extends Callable, StmtSequence, Scope, TBlock {
*/
LocalVariableWriteAccess getLocalVariable(int n) { none() }
- override AstNode getAChild(string pred) {
+ final override AstNode getAChild(string pred) {
result = Callable.super.getAChild(pred)
or
- result = StmtSequence.super.getAChild(pred)
- or
pred = "getLocalVariable" and result = this.getLocalVariable(_)
}
}
/** A block enclosed within `do` and `end`. */
-class DoBlock extends Block, BodyStmt, TDoBlock {
+class DoBlock extends Block, TDoBlock {
private Ruby::DoBlock g;
DoBlock() { this = TDoBlock(g) }
@@ -378,13 +382,9 @@ class DoBlock extends Block, BodyStmt, TDoBlock {
toGenerated(result) = g.getParameters().getChild(n)
}
- final override string toString() { result = "do ... end" }
+ final override BodyStmt getBody() { toGenerated(result) = g.getBody() }
- final override AstNode getAChild(string pred) {
- result = Block.super.getAChild(pred)
- or
- result = BodyStmt.super.getAChild(pred)
- }
+ final override string toString() { result = "do ... end" }
final override string getAPrimaryQlClass() { result = "DoBlock" }
}
diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/AST.qll b/ruby/ql/lib/codeql/ruby/ast/internal/AST.qll
index ee46fbe8b66a..bf187e226990 100644
--- a/ruby/ql/lib/codeql/ruby/ast/internal/AST.qll
+++ b/ruby/ql/lib/codeql/ruby/ast/internal/AST.qll
@@ -100,9 +100,16 @@ private module Cached {
} or
TBlockArgument(Ruby::BlockArgument g) or
TBlockParameter(Ruby::BlockParameter g) or
+ TBodyStatement(Ruby::BodyStatement g) {
+ any(Ruby::Method m).getBody() = g or
+ any(Ruby::SingletonMethod m).getBody() = g or
+ any(Ruby::DoBlock b).getBody() = g
+ } or
+ TBodyStmtSynth(Ast::AstNode parent, int i) { mkSynthChild(BodyStmtKind(), parent, i) } or
TBooleanLiteralSynth(Ast::AstNode parent, int i, boolean value) {
mkSynthChild(BooleanLiteralKind(value), parent, i)
} or
+ TBraceBlockBody(Ruby::BlockBody g) or
TBraceBlockSynth(Ast::AstNode parent, int i) { mkSynthChild(BraceBlockKind(), parent, i) } or
TBraceBlockReal(Ruby::Block g) { not g.getParent() instanceof Ruby::Lambda } or
TBreakStmt(Ruby::Break g) or
@@ -362,23 +369,24 @@ private module Cached {
TAssignMulExpr or TAssignRShiftExpr or TAssignSubExpr or TBareStringLiteral or
TBareSymbolLiteral or TBeginBlock or TBeginExpr or TBitwiseAndExprReal or
TBitwiseOrExprReal or TBitwiseXorExprReal or TBlockArgument or TBlockParameter or
- TBraceBlockReal or TBreakStmt or TCaseEqExpr or TCaseExpr or TCaseMatchReal or
- TCharacterLiteral or TClassDeclaration or TClassVariableAccessReal or TComplementExpr or
- TComplexLiteral or TDefinedExprReal or TDelimitedSymbolLiteral or
- TDestructuredLeftAssignment or TDestructuredParameter or TDivExprReal or TDo or TDoBlock or
- TElementReference or TElseReal or TElsif or TEmptyStmt or TEncoding or TEndBlock or
- TEnsure or TEqExpr or TExponentExprReal or TFalseLiteral or TFile or TFindPattern or
- TFloatLiteral or TForExpr or TForwardParameter or TForwardArgument or TGEExpr or TGTExpr or
- TGlobalVariableAccessReal or THashKeySymbolLiteral or THashLiteral or THashPattern or
- THashSplatExprReal or THashSplatNilParameter or THashSplatParameter or THereDoc or
- TIdentifierMethodCall or TIfReal or TIfModifierExpr or TInClauseReal or
- TInstanceVariableAccessReal or TIntegerLiteralReal or TKeywordParameter or TLEExpr or
- TLShiftExprReal or TLTExpr or TLambda or TLeftAssignmentList or TLine or
- TLocalVariableAccessReal or TLogicalAndExprReal or TLogicalOrExprReal or TMethod or
- TMatchPattern or TModuleDeclaration or TModuloExprReal or TMulExprReal or TNEExpr or
- TNextStmt or TNilLiteralReal or TNoRegExpMatchExpr or TNotExprReal or TOptionalParameter or
- TPairReal or TParenthesizedExpr or TParenthesizedPattern or TRShiftExprReal or
- TRangeLiteralReal or TRationalLiteral or TRedoStmt or TRegExpLiteral or TRegExpMatchExpr or
+ TBodyStatement or TBraceBlockBody or TBraceBlockReal or TBreakStmt or TCaseEqExpr or
+ TCaseExpr or TCaseMatchReal or TCharacterLiteral or TClassDeclaration or
+ TClassVariableAccessReal or TComplementExpr or TComplexLiteral or TDefinedExprReal or
+ TDelimitedSymbolLiteral or TDestructuredLeftAssignment or TDestructuredParameter or
+ TDivExprReal or TDo or TDoBlock or TElementReference or TElseReal or TElsif or TEmptyStmt or
+ TEncoding or TEndBlock or TEnsure or TEqExpr or TExponentExprReal or TFalseLiteral or
+ TFile or TFindPattern or TFloatLiteral or TForExpr or TForwardParameter or
+ TForwardArgument or TGEExpr or TGTExpr or TGlobalVariableAccessReal or
+ THashKeySymbolLiteral or THashLiteral or THashPattern or THashSplatExprReal or
+ THashSplatNilParameter or THashSplatParameter or THereDoc or TIdentifierMethodCall or
+ TIfReal or TIfModifierExpr or TInClauseReal or TInstanceVariableAccessReal or
+ TIntegerLiteralReal or TKeywordParameter or TLEExpr or TLShiftExprReal or TLTExpr or
+ TLambda or TLeftAssignmentList or TLine or TLocalVariableAccessReal or
+ TLogicalAndExprReal or TLogicalOrExprReal or TMethod or TMatchPattern or
+ TModuleDeclaration or TModuloExprReal or TMulExprReal or TNEExpr or TNextStmt or
+ TNilLiteralReal or TNoRegExpMatchExpr or TNotExprReal or TOptionalParameter or TPairReal or
+ TParenthesizedExpr or TParenthesizedPattern or TRShiftExprReal or TRangeLiteralReal or
+ TRationalLiteral or TRedoStmt or TRegExpLiteral or TRegExpMatchExpr or
TRegularArrayLiteral or TRegularMethodCall or TRegularStringLiteral or TRegularSuperCall or
TRescueClause or TRescueModifierExpr or TRetryStmt or TReturnStmt or
TScopeResolutionConstantAccess or TSelfReal or TSimpleParameterReal or
@@ -393,13 +401,13 @@ private module Cached {
class TAstNodeSynth =
TAddExprSynth or TAssignExprSynth or TBitwiseAndExprSynth or TBitwiseOrExprSynth or
- TBitwiseXorExprSynth or TBraceBlockSynth or TBooleanLiteralSynth or TCaseMatchSynth or
- TClassVariableAccessSynth or TConstantReadAccessSynth or TConstantWriteAccessSynth or
- TDivExprSynth or TElseSynth or TExponentExprSynth or TGlobalVariableAccessSynth or
- TIfSynth or TInClauseSynth or TInstanceVariableAccessSynth or TIntegerLiteralSynth or
- TLShiftExprSynth or TLocalVariableAccessSynth or TLogicalAndExprSynth or
- TLogicalOrExprSynth or TMethodCallSynth or TModuloExprSynth or TMulExprSynth or
- TNilLiteralSynth or TRShiftExprSynth or TRangeLiteralSynth or TSelfSynth or
+ TBitwiseXorExprSynth or TBraceBlockSynth or TBodyStmtSynth or TBooleanLiteralSynth or
+ TCaseMatchSynth or TClassVariableAccessSynth or TConstantReadAccessSynth or
+ TConstantWriteAccessSynth or TDivExprSynth or TElseSynth or TExponentExprSynth or
+ TGlobalVariableAccessSynth or TIfSynth or TInClauseSynth or TInstanceVariableAccessSynth or
+ TIntegerLiteralSynth or TLShiftExprSynth or TLocalVariableAccessSynth or
+ TLogicalAndExprSynth or TLogicalOrExprSynth or TMethodCallSynth or TModuloExprSynth or
+ TMulExprSynth or TNilLiteralSynth or TRShiftExprSynth or TRangeLiteralSynth or TSelfSynth or
TSimpleParameterSynth or TSplatExprSynth or THashSplatExprSynth or TStmtSequenceSynth or
TSubExprSynth or TPairSynth or TSimpleSymbolLiteralSynth;
@@ -439,6 +447,8 @@ private module Cached {
n = TBitwiseXorExprReal(result) or
n = TBlockArgument(result) or
n = TBlockParameter(result) or
+ n = TBodyStatement(result) or
+ n = TBraceBlockBody(result) or
n = TBraceBlockReal(result) or
n = TBreakStmt(result) or
n = TCaseEqExpr(result) or
@@ -584,6 +594,8 @@ private module Cached {
or
result = TBitwiseXorExprSynth(parent, i)
or
+ result = TBodyStmtSynth(parent, i)
+ or
result = TBooleanLiteralSynth(parent, i, _)
or
result = TBraceBlockSynth(parent, i)
@@ -757,9 +769,9 @@ class TElse = TElseReal or TElseSynth;
class TStmtSequence =
TBeginBlock or TEndBlock or TThen or TElse or TDo or TEnsure or TStringInterpolationComponent or
- TBlock or TBodyStmt or TParenthesizedExpr or TStmtSequenceSynth;
+ TBodyStmt or TParenthesizedExpr or TStmtSequenceSynth;
-class TBodyStmt = TBeginExpr or TModuleBase or TMethod or TLambda or TDoBlock or TSingletonMethod;
+class TBodyStmt = TBeginExpr or TModuleBase or TBraceBlockBody or TBodyStatement or TBodyStmtSynth;
class TNilLiteral = TNilLiteralReal or TNilLiteralSynth;
diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/Expr.qll b/ruby/ql/lib/codeql/ruby/ast/internal/Expr.qll
index fdeec446a937..656b53eec468 100644
--- a/ruby/ql/lib/codeql/ruby/ast/internal/Expr.qll
+++ b/ruby/ql/lib/codeql/ruby/ast/internal/Expr.qll
@@ -14,6 +14,18 @@ class StmtSequenceSynth extends StmtSequence, TStmtSequenceSynth {
final override string toString() { result = "..." }
}
+class BodyStatement extends BodyStmt, TBodyStatement {
+ final override string toString() { result = "..." }
+}
+
+class BraceBlockBody extends BodyStmt, TBraceBlockBody {
+ final override string toString() { result = "..." }
+}
+
+class BodyStmtSynth extends BodyStmt, TBodyStmtSynth {
+ final override string toString() { result = "..." }
+}
+
class Then extends StmtSequence, TThen {
private Ruby::Then g;
@@ -64,26 +76,9 @@ class Ensure extends StmtSequence, TEnsure {
// Not defined by dispatch, as it should not be exposed
Ruby::AstNode getBodyStmtChild(TBodyStmt b, int i) {
- exists(Ruby::Method g, Ruby::AstNode body | b = TMethod(g) and body = g.getBody() |
- result = body.(Ruby::BodyStatement).getChild(i)
- or
- i = 0 and result = body and not body instanceof Ruby::BodyStatement
- )
- or
- exists(Ruby::SingletonMethod g, Ruby::AstNode body |
- b = TSingletonMethod(g) and body = g.getBody()
- |
- result = body.(Ruby::BodyStatement).getChild(i)
- or
- i = 0 and result = body and not body instanceof Ruby::BodyStatement
- )
- or
- exists(Ruby::Lambda g | b = TLambda(g) |
- result = g.getBody().(Ruby::DoBlock).getBody().getChild(i) or
- result = g.getBody().(Ruby::Block).getBody().getChild(i)
- )
+ result = any(Ruby::BlockBody g | b = TBraceBlockBody(g)).getChild(i)
or
- result = any(Ruby::DoBlock g | b = TDoBlock(g)).getBody().getChild(i)
+ result = any(Ruby::BodyStatement g | b = TBodyStatement(g)).getChild(i)
or
result = any(Ruby::Program g | b = TToplevel(g)).getChild(i) and
not result instanceof Ruby::BeginBlock
diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/Method.qll b/ruby/ql/lib/codeql/ruby/ast/internal/Method.qll
index c4dd1abbee02..fc30ec0c44f3 100644
--- a/ruby/ql/lib/codeql/ruby/ast/internal/Method.qll
+++ b/ruby/ql/lib/codeql/ruby/ast/internal/Method.qll
@@ -18,7 +18,7 @@ class BraceBlockReal extends BraceBlock, TBraceBlockReal {
toGenerated(result) = g.getParameters().getChild(n)
}
- final override Stmt getStmt(int i) { toGenerated(result) = g.getBody().getChild(i) }
+ final override BodyStmt getBody() { toGenerated(result) = g.getBody() }
}
/**
@@ -28,8 +28,5 @@ class BraceBlockReal extends BraceBlock, TBraceBlockReal {
class BraceBlockSynth extends BraceBlock, TBraceBlockSynth {
final override Parameter getParameter(int n) { synthChild(this, n, result) }
- final override Stmt getStmt(int i) {
- i >= 0 and
- synthChild(this, i + this.getNumberOfParameters(), result)
- }
+ final override BodyStmt getBody() { synthChild(this, _, result) }
}
diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/Synthesis.qll b/ruby/ql/lib/codeql/ruby/ast/internal/Synthesis.qll
index f2be91a63e51..072f453826cc 100644
--- a/ruby/ql/lib/codeql/ruby/ast/internal/Synthesis.qll
+++ b/ruby/ql/lib/codeql/ruby/ast/internal/Synthesis.qll
@@ -19,6 +19,7 @@ newtype TSynthKind =
BitwiseAndExprKind() or
BitwiseOrExprKind() or
BitwiseXorExprKind() or
+ BodyStmtKind() or
BooleanLiteralKind(boolean value) { value = true or value = false } or
BraceBlockKind() or
CaseMatchKind() or
@@ -73,6 +74,8 @@ class SynthKind extends TSynthKind {
or
this = BitwiseXorExprKind() and result = "BitwiseXorExprKind"
or
+ this = BodyStmtKind() and result = "BodyStmtKind"
+ or
this = BooleanLiteralKind(_) and result = "BooleanLiteralKind"
or
this = BraceBlockKind() and result = "BraceBlockKind"
@@ -1475,17 +1478,24 @@ private module ForLoopDesugar {
i = 0 and
child = SynthChild(SimpleParameterKind())
or
- exists(SimpleParameter param | param = TSimpleParameterSynth(block, 0) |
+ // block body
+ parent = block and
+ i = 1 and
+ child = SynthChild(BodyStmtKind())
+ or
+ exists(SimpleParameter param, BodyStmt body |
+ param = TSimpleParameterSynth(block, 0) and body = TBodyStmtSynth(block, 1)
+ |
parent = param and
i = 0 and
child = SynthChild(LocalVariableAccessSynthKind(TLocalVariableSynth(param, 0)))
or
// assignment to pattern from for loop to synth parameter
- parent = block and
- i = 1 and
+ parent = body and
+ i = 0 and
child = SynthChild(AssignExprKind())
or
- parent = TAssignExprSynth(block, 1) and
+ parent = TAssignExprSynth(body, 0) and
(
i = 0 and
child = childRef(for.getPattern())
@@ -1493,11 +1503,11 @@ private module ForLoopDesugar {
i = 1 and
child = SynthChild(LocalVariableAccessSynthKind(TLocalVariableSynth(param, 0)))
)
+ or
+ // rest of block body
+ parent = body and
+ child = childRef(for.getBody().(Do).getStmt(i - 1))
)
- or
- // rest of block body
- parent = block and
- child = childRef(for.getBody().(Do).getStmt(i - 2))
)
)
)
@@ -1951,3 +1961,28 @@ private module ImplicitSuperArgsSynthesis {
}
}
}
+
+private module CallableBodySynthesis {
+ private predicate bodySynthesis(AstNode parent, int i, Child child) {
+ exists(TMethodBase m, Ruby::AstNode body |
+ body = any(Ruby::Method g | m = TMethod(g)).getBody()
+ or
+ body = any(Ruby::SingletonMethod g | m = TSingletonMethod(g)).getBody()
+ |
+ parent = m and
+ not body instanceof Ruby::BodyStatement and
+ i = 0 and
+ child = SynthChild(BodyStmtKind())
+ or
+ parent = TBodyStmtSynth(m, 0) and
+ i = 0 and
+ child = childRef(fromGenerated(body))
+ )
+ }
+
+ private class CallableBodySynthesis extends Synthesis {
+ final override predicate child(AstNode parent, int i, Child child) {
+ bodySynthesis(parent, i, child)
+ }
+ }
+}
diff --git a/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll b/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll
index f564633bb00f..9658c51d6739 100644
--- a/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll
+++ b/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll
@@ -100,24 +100,26 @@ private class EndBlockScope extends CfgScopeImpl, EndBlock {
}
}
-private class BodyStmtCallableScope extends CfgScopeImpl, AstInternal::TBodyStmt, Callable {
- final override predicate entry(AstNode first) { this.(Trees::BodyStmtTree).firstInner(first) }
-
- final override predicate exit(AstNode last, Completion c) {
- this.(Trees::BodyStmtTree).lastInner(last, c)
- }
-}
-
-private class BraceBlockScope extends CfgScopeImpl, BraceBlock {
+private class CallableScope extends CfgScopeImpl, Callable {
final override predicate entry(AstNode first) {
- first(this.(Trees::BraceBlockTree).getBodyChild(0, _), first)
+ first(this.(Trees::CallableTree).getBodyChild(0), first)
}
final override predicate exit(AstNode last, Completion c) {
- last(this.(Trees::BraceBlockTree).getLastBodyChild(), last, c)
+ this.getBody().(Trees::BodyStmtTree).last(last, c)
or
- last(this.(Trees::BraceBlockTree).getBodyChild(_, _), last, c) and
- not c instanceof NormalCompletion
+ exists(int i |
+ not exists(this.getBody()) and
+ last(this.(Trees::CallableTree).getBodyChild(i), last, c) and
+ not exists(this.(Trees::CallableTree).getBodyChild(i + 1))
+ )
+ or
+ exists(AstNode child |
+ child = this.(Trees::CallableTree).getBodyChild(_) and
+ not child = this.getBody() and
+ last(child, last, c) and
+ not c instanceof NormalCompletion
+ )
}
}
@@ -159,10 +161,6 @@ module Trees {
}
private class BeginTree extends BodyStmtTree instanceof BeginExpr {
- final override predicate first(AstNode first) { this.firstInner(first) }
-
- final override predicate last(AstNode last, Completion c) { this.lastInner(last, c) }
-
final override predicate propagatesAbnormal(AstNode child) { none() }
}
@@ -196,28 +194,21 @@ module Trees {
private class BlockParameterTree extends NonDefaultValueParameterTree instanceof BlockParameter {
}
- abstract class BodyStmtTree extends StmtSequenceTree instanceof BodyStmt {
+ class BodyStmtTree extends StmtSequenceTree instanceof BodyStmt {
/** Gets a rescue clause in this block. */
final RescueClause getARescue() { result = super.getRescue(_) }
/** Gets the `ensure` clause in this block, if any. */
final StmtSequence getEnsure() { result = super.getEnsure() }
- override predicate first(AstNode first) { first = this }
-
- predicate firstInner(AstNode first) {
+ override predicate first(AstNode first) {
first(this.getBodyChild(0, _), first)
or
not exists(this.getBodyChild(_, _)) and
- (
- first(super.getRescue(_), first)
- or
- not exists(super.getRescue(_)) and
- first(super.getEnsure(), first)
- )
+ first(super.getEnsure(), first)
}
- predicate lastInner(AstNode last, Completion c) {
+ override predicate last(AstNode last, Completion c) {
exists(boolean ensurable | last = this.getAnEnsurePredecessor(c, ensurable) |
not super.hasEnsure()
or
@@ -387,27 +378,28 @@ module Trees {
private class BooleanLiteralTree extends LeafTree instanceof BooleanLiteral { }
- class BraceBlockTree extends StmtSequenceTree instanceof BraceBlock {
- final override predicate propagatesAbnormal(AstNode child) { none() }
-
- final override AstNode getBodyChild(int i, boolean rescuable) {
- result = super.getParameter(i) and rescuable = false
+ class BraceBlockTree extends CallableTree instanceof BraceBlock {
+ final override AstNode getBodyChild(int i) {
+ result = super.getParameter(i)
or
- result = super.getLocalVariable(i - super.getNumberOfParameters()) and rescuable = false
+ result = super.getLocalVariable(i - super.getNumberOfParameters())
or
- result =
- StmtSequenceTree.super
- .getBodyChild(i - super.getNumberOfParameters() - count(super.getALocalVariable()),
- rescuable)
+ result = super.getBody() and
+ i = super.getNumberOfParameters() + count(super.getALocalVariable())
}
+ }
+
+ class CallableTree extends PostOrderTree instanceof Callable {
+ final override predicate propagatesAbnormal(AstNode child) { none() }
override predicate first(AstNode first) { first = this }
+ abstract AstNode getBodyChild(int i);
+
override predicate succ(AstNode pred, AstNode succ, Completion c) {
- // Normal left-to-right evaluation in the body
exists(int i |
- last(this.getBodyChild(i, _), pred, c) and
- first(this.getBodyChild(i + 1, _), succ) and
+ last(this.getBodyChild(i), pred, c) and
+ first(this.getBodyChild(i + 1), succ) and
c instanceof NormalCompletion
)
}
@@ -1016,20 +1008,16 @@ module Trees {
final override predicate succ(AstNode pred, AstNode succ, Completion c) { none() }
}
- private class DoBlockTree extends BodyStmtTree instanceof DoBlock {
+ private class DoBlockTree extends CallableTree instanceof DoBlock {
/** Gets the `i`th child in the body of this block. */
- final override AstNode getBodyChild(int i, boolean rescuable) {
- result = super.getParameter(i) and rescuable = false
+ final override AstNode getBodyChild(int i) {
+ result = super.getParameter(i)
or
- result = super.getLocalVariable(i - super.getNumberOfParameters()) and rescuable = false
+ result = super.getLocalVariable(i - super.getNumberOfParameters())
or
- result =
- BodyStmtTree.super
- .getBodyChild(i - super.getNumberOfParameters() - count(super.getALocalVariable()),
- rescuable)
+ result = super.getBody() and
+ i = super.getNumberOfParameters() + count(super.getALocalVariable())
}
-
- override predicate propagatesAbnormal(AstNode child) { none() }
}
private class EmptyStatementTree extends LeafTree instanceof EmptyStmt { }
@@ -1073,14 +1061,12 @@ module Trees {
final override AstNode getAccessNode() { result = super.getDefiningAccess() }
}
- private class LambdaTree extends BodyStmtTree instanceof Lambda {
- final override predicate propagatesAbnormal(AstNode child) { none() }
-
+ private class LambdaTree extends CallableTree instanceof Lambda {
/** Gets the `i`th child in the body of this block. */
- final override AstNode getBodyChild(int i, boolean rescuable) {
- result = super.getParameter(i) and rescuable = false
+ final override AstNode getBodyChild(int i) {
+ result = super.getParameter(i)
or
- result = BodyStmtTree.super.getBodyChild(i - super.getNumberOfParameters(), rescuable)
+ result = super.getBody() and i = super.getNumberOfParameters()
}
}
@@ -1151,14 +1137,12 @@ module Trees {
private class MethodNameTree extends LeafTree instanceof MethodName, AstInternal::TTokenMethodName
{ }
- private class MethodTree extends BodyStmtTree instanceof Method {
- final override predicate propagatesAbnormal(AstNode child) { none() }
-
+ private class MethodTree extends CallableTree instanceof Method {
/** Gets the `i`th child in the body of this block. */
- final override AstNode getBodyChild(int i, boolean rescuable) {
- result = super.getParameter(i) and rescuable = false
+ final override AstNode getBodyChild(int i) {
+ result = super.getParameter(i)
or
- result = BodyStmtTree.super.getBodyChild(i - super.getNumberOfParameters(), rescuable)
+ result = super.getBody() and i = super.getNumberOfParameters()
}
}
@@ -1183,12 +1167,12 @@ module Trees {
BodyStmtTree.super.succ(pred, succ, c)
or
pred = this and
- this.firstInner(succ) and
+ super.first(succ) and
c instanceof SimpleCompletion
}
final override predicate last(AstNode last, Completion c) {
- this.lastInner(last, c)
+ super.last(last, c)
or
not exists(this.getAChild(_)) and
last = this and
@@ -1328,7 +1312,7 @@ module Trees {
private class SingletonClassTree extends BodyStmtTree instanceof SingletonClass {
final override predicate first(AstNode first) {
- this.firstInner(first)
+ super.first(first)
or
not exists(this.getAChild(_)) and
first = this
@@ -1338,7 +1322,12 @@ module Trees {
BodyStmtTree.super.succ(pred, succ, c)
or
succ = this and
- this.lastInner(pred, c)
+ super.last(pred, c)
+ }
+
+ final override predicate last(AstNode last, Completion c) {
+ last = this and
+ c.isValidFor(this)
}
/** Gets the `i`th child in the body of this block. */
@@ -1351,20 +1340,18 @@ module Trees {
}
}
- private class SingletonMethodTree extends BodyStmtTree instanceof SingletonMethod {
- final override predicate propagatesAbnormal(AstNode child) { none() }
-
+ private class SingletonMethodTree extends CallableTree instanceof SingletonMethod {
/** Gets the `i`th child in the body of this block. */
- final override AstNode getBodyChild(int i, boolean rescuable) {
- result = super.getParameter(i) and rescuable = false
+ final override AstNode getBodyChild(int i) {
+ result = super.getParameter(i)
or
- result = BodyStmtTree.super.getBodyChild(i - super.getNumberOfParameters(), rescuable)
+ result = super.getBody() and i = super.getNumberOfParameters()
}
override predicate first(AstNode first) { first(super.getObject(), first) }
override predicate succ(AstNode pred, AstNode succ, Completion c) {
- BodyStmtTree.super.succ(pred, succ, c)
+ CallableTree.super.succ(pred, succ, c)
or
last(super.getObject(), pred, c) and
succ = this and
@@ -1443,10 +1430,6 @@ module Trees {
or
result = BodyStmtTree.super.getBodyChild(i - count(super.getABeginBlock()), rescuable)
}
-
- final override predicate first(AstNode first) { super.firstInner(first) }
-
- final override predicate last(AstNode last, Completion c) { super.lastInner(last, c) }
}
private class UndefStmtTree extends StandardPreOrderTree instanceof UndefStmt {
diff --git a/ruby/ql/lib/codeql/ruby/controlflow/internal/Splitting.qll b/ruby/ql/lib/codeql/ruby/controlflow/internal/Splitting.qll
index 782315dc14ca..737f450b4f23 100644
--- a/ruby/ql/lib/codeql/ruby/controlflow/internal/Splitting.qll
+++ b/ruby/ql/lib/codeql/ruby/controlflow/internal/Splitting.qll
@@ -246,7 +246,7 @@ module EnsureSplitting {
private predicate exit0(AstNode pred, Trees::BodyStmtTree block, int nestLevel, Completion c) {
this.appliesToPredecessor(pred) and
nestLevel = block.getNestLevel() and
- block.lastInner(pred, c)
+ block.last(pred, c)
}
/**
diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll
index e4bcf2537a7a..fb5ce7b01457 100644
--- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll
+++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll
@@ -1662,7 +1662,7 @@ private module ReturnNodes {
* last thing that is evaluated in the body of the callable.
*/
class ExprReturnNode extends SourceReturnNode, ExprNode {
- ExprReturnNode() { exists(Callable c | implicitReturn(c, this) = c.getAStmt()) }
+ ExprReturnNode() { exists(Callable c | implicitReturn(c, this) = c.getBody().getAStmt()) }
override ReturnKind getKindSource() {
exists(CfgScope scope | scope = this.(NodeImpl).getCfgScope() |
diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll
index 6f2bc8b4accb..d0823fba0a77 100644
--- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll
+++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPublic.qll
@@ -1392,7 +1392,7 @@ class StmtSequenceNode extends ExprNode {
/**
* A data flow node corresponding to a method, block, or lambda expression.
*/
-class CallableNode extends StmtSequenceNode {
+class CallableNode extends ExprNode {
private Callable callable;
CallableNode() { this.asExpr().getExpr() = callable }
diff --git a/ruby/ql/lib/codeql/ruby/experimental/Rbi.qll b/ruby/ql/lib/codeql/ruby/experimental/Rbi.qll
index 008089a62519..68efe353bb0a 100644
--- a/ruby/ql/lib/codeql/ruby/experimental/Rbi.qll
+++ b/ruby/ql/lib/codeql/ruby/experimental/Rbi.qll
@@ -83,11 +83,7 @@ module Rbi {
/**
* Gets the type aliased by this call.
*/
- RbiType getAliasedType() {
- exists(ExprNodes::MethodCallCfgNode n | n.getExpr() = this |
- result = n.getBlock().(ExprNodes::StmtSequenceCfgNode).getLastStmt().getExpr()
- )
- }
+ RbiType getAliasedType() { result = this.getBlock().getBody().getLastStmt() }
}
/**
@@ -304,7 +300,7 @@ module Rbi {
private MethodSignatureCall sigCall;
MethodSignatureDefiningCall() {
- exists(MethodCall c | c = sigCall.getBlock().getAChild() |
+ exists(MethodCall c | c = sigCall.getBlock().getBody().getAChild() |
// The typical pattern for the contents of a `sig` block is something
// like `params().returns()` - we want to
// pick up both of these calls.
diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Slim.qll b/ruby/ql/lib/codeql/ruby/frameworks/Slim.qll
index 3c3c3987383e..7f85737bc046 100644
--- a/ruby/ql/lib/codeql/ruby/frameworks/Slim.qll
+++ b/ruby/ql/lib/codeql/ruby/frameworks/Slim.qll
@@ -18,7 +18,7 @@ module Slim {
override DataFlow::Node getTemplate() {
result.asExpr().getExpr() =
- this.getBlock().(DataFlow::BlockNode).asCallableAstNode().getAStmt()
+ this.getBlock().(DataFlow::BlockNode).asCallableAstNode().getBody().getAStmt()
}
}
diff --git a/ruby/ql/lib/codeql/ruby/frameworks/XmlParsing.qll b/ruby/ql/lib/codeql/ruby/frameworks/XmlParsing.qll
index 91dc0ce5efad..b9b96fe1909f 100644
--- a/ruby/ql/lib/codeql/ruby/frameworks/XmlParsing.qll
+++ b/ruby/ql/lib/codeql/ruby/frameworks/XmlParsing.qll
@@ -38,6 +38,7 @@ private class NokogiriXmlParserCall extends XmlParserCall::Range, DataFlow::Call
.getExpr()
.(MethodCall)
.getBlock()
+ .getBody()
.getAStmt()
.getAChild*()
.(MethodCall)
diff --git a/ruby/ql/lib/codeql/ruby/frameworks/actiondispatch/internal/Routing.qll b/ruby/ql/lib/codeql/ruby/frameworks/actiondispatch/internal/Routing.qll
index e6e453d449f0..ac545481b9c7 100644
--- a/ruby/ql/lib/codeql/ruby/frameworks/actiondispatch/internal/Routing.qll
+++ b/ruby/ql/lib/codeql/ruby/frameworks/actiondispatch/internal/Routing.qll
@@ -98,7 +98,7 @@ module Routing {
Block getBlock() { result = block }
- override Stmt getAStmt() { result = block.getAStmt() }
+ override Stmt getAStmt() { result = block.getBody().getAStmt() }
override RouteBlock getParent() { none() }
@@ -128,7 +128,7 @@ module Routing {
override string getAPrimaryQlClass() { result = "ConstraintsRouteBlock" }
- override Stmt getAStmt() { result = block.getAStmt() }
+ override Stmt getAStmt() { result = block.getBody().getAStmt() }
override string getPathComponent() { result = "" }
@@ -156,7 +156,7 @@ module Routing {
override string getAPrimaryQlClass() { result = "ScopeRouteBlock" }
- override Stmt getAStmt() { result = block.getAStmt() }
+ override Stmt getAStmt() { result = block.getBody().getAStmt() }
override string toString() { result = methodCall.toString() }
@@ -216,7 +216,7 @@ module Routing {
override string getAPrimaryQlClass() { result = "ResourcesRouteBlock" }
- override Stmt getAStmt() { result = block.getAStmt() }
+ override Stmt getAStmt() { result = block.getBody().getAStmt() }
/**
* Gets the `resources` call that gives rise to this route block.
@@ -282,7 +282,7 @@ module Routing {
NamespaceRouteBlock() { this = TNamespaceRouteBlock(parent, methodCall, block) }
- override Stmt getAStmt() { result = block.getAStmt() }
+ override Stmt getAStmt() { result = block.getBody().getAStmt() }
override string getPathComponent() { result = this.getNamespace() }
diff --git a/ruby/ql/lib/codeql/ruby/security/ImproperMemoizationQuery.qll b/ruby/ql/lib/codeql/ruby/security/ImproperMemoizationQuery.qll
index dab75f00b9e5..f46540cc33a6 100644
--- a/ruby/ql/lib/codeql/ruby/security/ImproperMemoizationQuery.qll
+++ b/ruby/ql/lib/codeql/ruby/security/ImproperMemoizationQuery.qll
@@ -70,7 +70,7 @@ private predicate memoReturnedFromMethod(Method m, MemoStmt s) {
or
// If we don't have flow (e.g. due to the dataflow library not supporting instance variable flow yet),
// fall back to a syntactic heuristic: does the last statement in the method mention the memoization variable?
- m.getLastStmt().getAChild*().(InstanceVariableReadAccess).getVariable() =
+ m.getBody().getLastStmt().getAChild*().(InstanceVariableReadAccess).getVariable() =
s.getVariableAccess().getVariable()
}
diff --git a/ruby/ql/lib/codeql/ruby/security/InsecureDependencyQuery.qll b/ruby/ql/lib/codeql/ruby/security/InsecureDependencyQuery.qll
index b8298420f81d..dc18981a50b6 100644
--- a/ruby/ql/lib/codeql/ruby/security/InsecureDependencyQuery.qll
+++ b/ruby/ql/lib/codeql/ruby/security/InsecureDependencyQuery.qll
@@ -33,7 +33,7 @@ private class SourceCall extends RelevantGemCall {
private class GitSourceCall extends RelevantGemCall {
GitSourceCall() { this.getMethodName() = "git_source" }
- override Expr getAUrlPart() { result = this.getBlock().getLastStmt() }
+ override Expr getAUrlPart() { result = this.getBlock().getBody().getLastStmt() }
}
/**
diff --git a/ruby/ql/test/library-tests/ast/Ast.expected b/ruby/ql/test/library-tests/ast/Ast.expected
index 0bece506bfb4..c391b7f584d8 100644
--- a/ruby/ql/test/library-tests/ast/Ast.expected
+++ b/ruby/ql/test/library-tests/ast/Ast.expected
@@ -15,18 +15,19 @@ gems/Gemfile:
# 5| getArgument: [StringLiteral] "https://gems.example.com"
# 5| getComponent: [StringTextComponent] https://gems.example.com
# 5| getBlock: [DoBlock] do ... end
-# 6| getStmt: [MethodCall] call to gem
-# 6| getReceiver: [SelfVariableAccess] self
-# 6| getArgument: [StringLiteral] "my_gem"
-# 6| getComponent: [StringTextComponent] my_gem
-# 6| getArgument: [StringLiteral] "1.0"
-# 6| getComponent: [StringTextComponent] 1.0
-# 7| getStmt: [MethodCall] call to gem
-# 7| getReceiver: [SelfVariableAccess] self
-# 7| getArgument: [StringLiteral] "another_gem"
-# 7| getComponent: [StringTextComponent] another_gem
-# 7| getArgument: [StringLiteral] "3.1.4"
-# 7| getComponent: [StringTextComponent] 3.1.4
+# 6| getBody: [StmtSequence] ...
+# 6| getStmt: [MethodCall] call to gem
+# 6| getReceiver: [SelfVariableAccess] self
+# 6| getArgument: [StringLiteral] "my_gem"
+# 6| getComponent: [StringTextComponent] my_gem
+# 6| getArgument: [StringLiteral] "1.0"
+# 6| getComponent: [StringTextComponent] 1.0
+# 7| getStmt: [MethodCall] call to gem
+# 7| getReceiver: [SelfVariableAccess] self
+# 7| getArgument: [StringLiteral] "another_gem"
+# 7| getComponent: [StringTextComponent] another_gem
+# 7| getArgument: [StringLiteral] "3.1.4"
+# 7| getComponent: [StringTextComponent] 3.1.4
calls/calls.rb:
# 1| [Toplevel] calls.rb
# 2| getStmt: [MethodCall] call to foo
@@ -45,17 +46,19 @@ calls/calls.rb:
# 14| getBlock: [BraceBlock] { ... }
# 14| getParameter: [SimpleParameter] x
# 14| getDefiningAccess: [LocalVariableAccess] x
-# 14| getStmt: [AddExpr] ... + ...
-# 14| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
-# 14| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
+# 14| getBody: [StmtSequence] ...
+# 14| getStmt: [AddExpr] ... + ...
+# 14| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
+# 14| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
# 17| getStmt: [MethodCall] call to foo
# 17| getReceiver: [SelfVariableAccess] self
# 17| getBlock: [DoBlock] do ... end
# 17| getParameter: [SimpleParameter] x
# 17| getDefiningAccess: [LocalVariableAccess] x
-# 18| getStmt: [AddExpr] ... + ...
-# 18| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
-# 18| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
+# 18| getBody: [StmtSequence] ...
+# 18| getStmt: [AddExpr] ... + ...
+# 18| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
+# 18| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
# 22| getStmt: [MethodCall] call to bar
# 22| getReceiver: [IntegerLiteral] 123
# 22| getArgument: [StringLiteral] "foo"
@@ -63,15 +66,18 @@ calls/calls.rb:
# 22| getBlock: [DoBlock] do ... end
# 22| getParameter: [SimpleParameter] x
# 22| getDefiningAccess: [LocalVariableAccess] x
-# 23| getStmt: [AddExpr] ... + ...
-# 23| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
-# 23| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
+# 23| getBody: [StmtSequence] ...
+# 23| getStmt: [AddExpr] ... + ...
+# 23| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
+# 23| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
# 27| getStmt: [Method] method_that_yields
-# 28| getStmt: [YieldCall] yield ...
+# 28| getBody: [StmtSequence] ...
+# 28| getStmt: [YieldCall] yield ...
# 32| getStmt: [Method] another_method_that_yields
-# 33| getStmt: [YieldCall] yield ...
-# 33| getArgument: [IntegerLiteral] 100
-# 33| getArgument: [IntegerLiteral] 200
+# 33| getBody: [StmtSequence] ...
+# 33| getStmt: [YieldCall] yield ...
+# 33| getArgument: [IntegerLiteral] 100
+# 33| getArgument: [IntegerLiteral] 200
# 43| getStmt: [MethodCall] call to foo
# 43| getReceiver: [SelfVariableAccess] self
# 44| getStmt: [MethodCall] call to foo
@@ -148,17 +154,19 @@ calls/calls.rb:
# 89| getStmt: [MethodCall] call to foo
# 89| getReceiver: [SelfVariableAccess] self
# 89| getBlock: [BraceBlock] { ... }
-# 89| getStmt: [MethodCall] call to bar
-# 89| getReceiver: [SelfVariableAccess] self
-# 89| getStmt: [MethodCall] call to baz
-# 89| getReceiver: [ConstantReadAccess] X
+# 89| getBody: [StmtSequence] ...
+# 89| getStmt: [MethodCall] call to bar
+# 89| getReceiver: [SelfVariableAccess] self
+# 89| getStmt: [MethodCall] call to baz
+# 89| getReceiver: [ConstantReadAccess] X
# 92| getStmt: [MethodCall] call to foo
# 92| getReceiver: [SelfVariableAccess] self
# 92| getBlock: [DoBlock] do ... end
-# 93| getStmt: [MethodCall] call to bar
-# 93| getReceiver: [SelfVariableAccess] self
-# 94| getStmt: [MethodCall] call to baz
-# 94| getReceiver: [ConstantReadAccess] X
+# 93| getBody: [StmtSequence] ...
+# 93| getStmt: [MethodCall] call to bar
+# 93| getReceiver: [SelfVariableAccess] self
+# 94| getStmt: [MethodCall] call to baz
+# 94| getReceiver: [ConstantReadAccess] X
# 98| getStmt: [MethodCall] call to bar
# 98| getReceiver: [MethodCall] call to foo
# 98| getReceiver: [SelfVariableAccess] self
@@ -205,17 +213,19 @@ calls/calls.rb:
# 129| getStmt: [MethodCall] call to bar
# 129| getReceiver: [ConstantReadAccess] X
# 133| getStmt: [Method] some_method
-# 134| getStmt: [MethodCall] call to foo
-# 134| getReceiver: [SelfVariableAccess] self
-# 135| getStmt: [MethodCall] call to bar
-# 135| getReceiver: [ConstantReadAccess] X
+# 134| getBody: [StmtSequence] ...
+# 134| getStmt: [MethodCall] call to foo
+# 134| getReceiver: [SelfVariableAccess] self
+# 135| getStmt: [MethodCall] call to bar
+# 135| getReceiver: [ConstantReadAccess] X
# 139| getStmt: [SingletonMethod] some_method
# 139| getObject: [MethodCall] call to foo
# 139| getReceiver: [SelfVariableAccess] self
-# 140| getStmt: [MethodCall] call to bar
-# 140| getReceiver: [SelfVariableAccess] self
-# 141| getStmt: [MethodCall] call to baz
-# 141| getReceiver: [ConstantReadAccess] X
+# 140| getBody: [StmtSequence] ...
+# 140| getStmt: [MethodCall] call to bar
+# 140| getReceiver: [SelfVariableAccess] self
+# 141| getStmt: [MethodCall] call to baz
+# 141| getReceiver: [ConstantReadAccess] X
# 145| getStmt: [Method] method_with_keyword_param
# 145| getParameter: [KeywordParameter] keyword
# 145| getDefiningAccess: [LocalVariableAccess] keyword
@@ -500,56 +510,62 @@ calls/calls.rb:
# 278| getReceiver: [ConstantReadAccess] X
# 283| getStmt: [ClassDeclaration] MyClass
# 284| getStmt: [Method] my_method
-# 285| getStmt: [SuperCall] super call to my_method
-# 286| getStmt: [SuperCall] super call to my_method
-# 287| getStmt: [SuperCall] super call to my_method
-# 287| getArgument: [StringLiteral] "blah"
-# 287| getComponent: [StringTextComponent] blah
-# 288| getStmt: [SuperCall] super call to my_method
-# 288| getArgument: [IntegerLiteral] 1
-# 288| getArgument: [IntegerLiteral] 2
-# 288| getArgument: [IntegerLiteral] 3
-# 289| getStmt: [SuperCall] super call to my_method
-# 289| getBlock: [BraceBlock] { ... }
-# 289| getParameter: [SimpleParameter] x
-# 289| getDefiningAccess: [LocalVariableAccess] x
-# 289| getStmt: [AddExpr] ... + ...
-# 289| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
-# 289| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
-# 290| getStmt: [SuperCall] super call to my_method
-# 290| getBlock: [DoBlock] do ... end
-# 290| getParameter: [SimpleParameter] x
-# 290| getDefiningAccess: [LocalVariableAccess] x
-# 290| getStmt: [MulExpr] ... * ...
-# 290| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
-# 290| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 2
-# 291| getStmt: [SuperCall] super call to my_method
-# 291| getArgument: [IntegerLiteral] 4
-# 291| getArgument: [IntegerLiteral] 5
-# 291| getBlock: [BraceBlock] { ... }
-# 291| getParameter: [SimpleParameter] x
-# 291| getDefiningAccess: [LocalVariableAccess] x
-# 291| getStmt: [AddExpr] ... + ...
-# 291| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
-# 291| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 100
-# 292| getStmt: [SuperCall] super call to my_method
-# 292| getArgument: [IntegerLiteral] 6
-# 292| getArgument: [IntegerLiteral] 7
-# 292| getBlock: [DoBlock] do ... end
-# 292| getParameter: [SimpleParameter] x
-# 292| getDefiningAccess: [LocalVariableAccess] x
-# 292| getStmt: [AddExpr] ... + ...
-# 292| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
-# 292| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 200
+# 285| getBody: [StmtSequence] ...
+# 285| getStmt: [SuperCall] super call to my_method
+# 286| getStmt: [SuperCall] super call to my_method
+# 287| getStmt: [SuperCall] super call to my_method
+# 287| getArgument: [StringLiteral] "blah"
+# 287| getComponent: [StringTextComponent] blah
+# 288| getStmt: [SuperCall] super call to my_method
+# 288| getArgument: [IntegerLiteral] 1
+# 288| getArgument: [IntegerLiteral] 2
+# 288| getArgument: [IntegerLiteral] 3
+# 289| getStmt: [SuperCall] super call to my_method
+# 289| getBlock: [BraceBlock] { ... }
+# 289| getParameter: [SimpleParameter] x
+# 289| getDefiningAccess: [LocalVariableAccess] x
+# 289| getBody: [StmtSequence] ...
+# 289| getStmt: [AddExpr] ... + ...
+# 289| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
+# 289| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
+# 290| getStmt: [SuperCall] super call to my_method
+# 290| getBlock: [DoBlock] do ... end
+# 290| getParameter: [SimpleParameter] x
+# 290| getDefiningAccess: [LocalVariableAccess] x
+# 290| getBody: [StmtSequence] ...
+# 290| getStmt: [MulExpr] ... * ...
+# 290| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
+# 290| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 2
+# 291| getStmt: [SuperCall] super call to my_method
+# 291| getArgument: [IntegerLiteral] 4
+# 291| getArgument: [IntegerLiteral] 5
+# 291| getBlock: [BraceBlock] { ... }
+# 291| getParameter: [SimpleParameter] x
+# 291| getDefiningAccess: [LocalVariableAccess] x
+# 291| getBody: [StmtSequence] ...
+# 291| getStmt: [AddExpr] ... + ...
+# 291| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
+# 291| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 100
+# 292| getStmt: [SuperCall] super call to my_method
+# 292| getArgument: [IntegerLiteral] 6
+# 292| getArgument: [IntegerLiteral] 7
+# 292| getBlock: [DoBlock] do ... end
+# 292| getParameter: [SimpleParameter] x
+# 292| getDefiningAccess: [LocalVariableAccess] x
+# 292| getBody: [StmtSequence] ...
+# 292| getStmt: [AddExpr] ... + ...
+# 292| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
+# 292| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 200
# 300| getStmt: [ClassDeclaration] AnotherClass
# 301| getStmt: [Method] another_method
-# 302| getStmt: [MethodCall] call to super
-# 302| getReceiver: [MethodCall] call to foo
-# 302| getReceiver: [SelfVariableAccess] self
-# 303| getStmt: [MethodCall] call to super
-# 303| getReceiver: [SelfVariableAccess] self
-# 304| getStmt: [MethodCall] call to super
-# 304| getReceiver: [SuperCall] super call to another_method
+# 302| getBody: [StmtSequence] ...
+# 302| getStmt: [MethodCall] call to super
+# 302| getReceiver: [MethodCall] call to foo
+# 302| getReceiver: [SelfVariableAccess] self
+# 303| getStmt: [MethodCall] call to super
+# 303| getReceiver: [SelfVariableAccess] self
+# 304| getStmt: [MethodCall] call to super
+# 304| getReceiver: [SuperCall] super call to another_method
# 309| getStmt: [MethodCall] call to call
# 309| getReceiver: [MethodCall] call to foo
# 309| getReceiver: [SelfVariableAccess] self
@@ -619,49 +635,57 @@ calls/calls.rb:
# 319| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
# 319| getAnOperand/getRightOperand: [IntegerLiteral] 2
# 322| getStmt: [Method] foo
-# 322| getStmt: [MethodCall] call to bar
-# 322| getReceiver: [SelfVariableAccess] self
+# 322| getBody: [StmtSequence] ...
+# 322| getStmt: [MethodCall] call to bar
+# 322| getReceiver: [SelfVariableAccess] self
# 323| getStmt: [Method] foo
-# 323| getStmt: [MethodCall] call to bar
-# 323| getReceiver: [SelfVariableAccess] self
+# 323| getBody: [StmtSequence] ...
+# 323| getStmt: [MethodCall] call to bar
+# 323| getReceiver: [SelfVariableAccess] self
# 324| getStmt: [Method] foo
+# 324| getBody: [StmtSequence] ...
+# 324| getStmt: [MethodCall] call to bar
+# 324| getReceiver: [SelfVariableAccess] self
# 324| getParameter: [SimpleParameter] x
# 324| getDefiningAccess: [LocalVariableAccess] x
-# 324| getStmt: [MethodCall] call to bar
-# 324| getReceiver: [SelfVariableAccess] self
# 325| getStmt: [SingletonMethod] foo
+# 325| getBody: [StmtSequence] ...
+# 325| getStmt: [MethodCall] call to bar
+# 325| getReceiver: [SelfVariableAccess] self
# 325| getObject: [ConstantReadAccess] Object
-# 325| getStmt: [MethodCall] call to bar
-# 325| getReceiver: [SelfVariableAccess] self
# 326| getStmt: [SingletonMethod] foo
+# 326| getBody: [StmtSequence] ...
+# 326| getStmt: [MethodCall] call to bar
+# 326| getReceiver: [SelfVariableAccess] self
# 326| getObject: [ConstantReadAccess] Object
# 326| getParameter: [SimpleParameter] x
# 326| getDefiningAccess: [LocalVariableAccess] x
-# 326| getStmt: [MethodCall] call to bar
-# 326| getReceiver: [SelfVariableAccess] self
# 327| getStmt: [Method] foo
-# 327| getStmt: [RescueModifierExpr] ... rescue ...
-# 327| getBody: [MethodCall] call to bar
-# 327| getReceiver: [SelfVariableAccess] self
-# 327| getHandler: [ParenthesizedExpr] ( ... )
-# 327| getStmt: [MethodCall] call to print
+# 327| getBody: [StmtSequence] ...
+# 327| getStmt: [RescueModifierExpr] ... rescue ...
+# 327| getBody: [MethodCall] call to bar
# 327| getReceiver: [SelfVariableAccess] self
-# 327| getArgument: [StringLiteral] "error"
-# 327| getComponent: [StringTextComponent] error
+# 327| getHandler: [ParenthesizedExpr] ( ... )
+# 327| getStmt: [MethodCall] call to print
+# 327| getReceiver: [SelfVariableAccess] self
+# 327| getArgument: [StringLiteral] "error"
+# 327| getComponent: [StringTextComponent] error
# 330| getStmt: [Method] foo
# 330| getParameter: [ForwardParameter] ...
-# 331| getStmt: [SuperCall] super call to foo
-# 331| getArgument: [ForwardedArguments] ...
+# 331| getBody: [StmtSequence] ...
+# 331| getStmt: [SuperCall] super call to foo
+# 331| getArgument: [ForwardedArguments] ...
# 334| getStmt: [Method] foo
# 334| getParameter: [SimpleParameter] a
# 334| getDefiningAccess: [LocalVariableAccess] a
# 334| getParameter: [SimpleParameter] b
# 334| getDefiningAccess: [LocalVariableAccess] b
# 334| getParameter: [ForwardParameter] ...
-# 335| getStmt: [MethodCall] call to bar
-# 335| getReceiver: [SelfVariableAccess] self
-# 335| getArgument: [LocalVariableAccess] b
-# 335| getArgument: [ForwardedArguments] ...
+# 335| getBody: [StmtSequence] ...
+# 335| getStmt: [MethodCall] call to bar
+# 335| getReceiver: [SelfVariableAccess] self
+# 335| getArgument: [LocalVariableAccess] b
+# 335| getArgument: [ForwardedArguments] ...
# 339| getStmt: [ForExpr] for ... in ...
# 339| getPattern: [DestructuredLhsExpr] (..., ...)
# 339| getElement: [LocalVariableAccess] x
@@ -718,31 +742,35 @@ calls/calls.rb:
# 350| getAnOperand/getRightOperand: [Lambda] -> { ... }
# 350| getParameter: [SimpleParameter] x
# 350| getDefiningAccess: [LocalVariableAccess] x
-# 350| getStmt: [LocalVariableAccess] y
+# 350| getBody: [StmtSequence] ...
+# 350| getStmt: [LocalVariableAccess] y
# 351| getStmt: [AssignExpr] ... = ...
# 351| getAnOperand/getLeftOperand: [LocalVariableAccess] f
# 351| getAnOperand/getRightOperand: [Lambda] -> { ... }
# 351| getParameter: [SimpleParameter] x
# 351| getDefiningAccess: [LocalVariableAccess] x
-# 351| getStmt: [MethodCall] call to foo
-# 351| getReceiver: [SelfVariableAccess] self
-# 351| getArgument: [LocalVariableAccess] x
+# 351| getBody: [StmtSequence] ...
+# 351| getStmt: [MethodCall] call to foo
+# 351| getReceiver: [SelfVariableAccess] self
+# 351| getArgument: [LocalVariableAccess] x
# 352| getStmt: [AssignExpr] ... = ...
# 352| getAnOperand/getLeftOperand: [LocalVariableAccess] g
# 352| getAnOperand/getRightOperand: [Lambda] -> { ... }
# 352| getParameter: [SimpleParameter] x
# 352| getDefiningAccess: [LocalVariableAccess] x
-# 352| getStmt: [MethodCall] call to unknown_call
-# 352| getReceiver: [SelfVariableAccess] self
+# 352| getBody: [StmtSequence] ...
+# 352| getStmt: [MethodCall] call to unknown_call
+# 352| getReceiver: [SelfVariableAccess] self
# 353| getStmt: [AssignExpr] ... = ...
# 353| getAnOperand/getLeftOperand: [LocalVariableAccess] h
# 353| getAnOperand/getRightOperand: [Lambda] -> { ... }
# 353| getParameter: [SimpleParameter] x
# 353| getDefiningAccess: [LocalVariableAccess] x
-# 354| getStmt: [LocalVariableAccess] x
-# 355| getStmt: [LocalVariableAccess] y
-# 356| getStmt: [MethodCall] call to unknown_call
-# 356| getReceiver: [SelfVariableAccess] self
+# 354| getBody: [StmtSequence] ...
+# 354| getStmt: [LocalVariableAccess] x
+# 355| getStmt: [LocalVariableAccess] y
+# 356| getStmt: [MethodCall] call to unknown_call
+# 356| getReceiver: [SelfVariableAccess] self
# 360| getStmt: [MethodCall] call to empty?
# 360| getReceiver: [MethodCall] call to list
# 360| getReceiver: [SelfVariableAccess] self
@@ -760,7 +788,8 @@ calls/calls.rb:
# 363| getBlock: [BraceBlock] { ... }
# 363| getParameter: [SimpleParameter] x
# 363| getDefiningAccess: [LocalVariableAccess] x
-# 363| getStmt: [LocalVariableAccess] x
+# 363| getBody: [StmtSequence] ...
+# 363| getStmt: [LocalVariableAccess] x
control/cases.rb:
# 1| [Toplevel] cases.rb
# 2| getStmt: [AssignExpr] ... = ...
@@ -1094,9 +1123,10 @@ control/cases.rb:
# 101| getPattern: [Lambda] -> { ... }
# 101| getParameter: [SimpleParameter] x
# 101| getDefiningAccess: [LocalVariableAccess] x
-# 101| getStmt: [EqExpr] ... == ...
-# 101| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
-# 101| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 10
+# 101| getBody: [StmtSequence] ...
+# 101| getStmt: [EqExpr] ... == ...
+# 101| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
+# 101| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 10
# 102| getBranch: [InClause] in ... then ...
# 102| getPattern: [SymbolLiteral] :foo
# 102| getComponent: [StringTextComponent] foo
@@ -1301,15 +1331,17 @@ modules/classes.rb:
# 16| getScopeExpr: [ConstantReadAccess] MyModule
# 20| getStmt: [ClassDeclaration] Wibble
# 21| getStmt: [Method] method_a
-# 22| getStmt: [MethodCall] call to puts
-# 22| getReceiver: [SelfVariableAccess] self
-# 22| getArgument: [StringLiteral] "a"
-# 22| getComponent: [StringTextComponent] a
+# 22| getBody: [StmtSequence] ...
+# 22| getStmt: [MethodCall] call to puts
+# 22| getReceiver: [SelfVariableAccess] self
+# 22| getArgument: [StringLiteral] "a"
+# 22| getComponent: [StringTextComponent] a
# 25| getStmt: [Method] method_b
-# 26| getStmt: [MethodCall] call to puts
-# 26| getReceiver: [SelfVariableAccess] self
-# 26| getArgument: [StringLiteral] "b"
-# 26| getComponent: [StringTextComponent] b
+# 26| getBody: [StmtSequence] ...
+# 26| getStmt: [MethodCall] call to puts
+# 26| getReceiver: [SelfVariableAccess] self
+# 26| getArgument: [StringLiteral] "b"
+# 26| getComponent: [StringTextComponent] b
# 29| getStmt: [MethodCall] call to some_method_call
# 29| getReceiver: [SelfVariableAccess] self
# 30| getStmt: [AssignExpr] ... = ...
@@ -1324,14 +1356,16 @@ modules/classes.rb:
# 41| getStmt: [SingletonClass] class << ...
# 41| getValue: [LocalVariableAccess] x
# 42| getStmt: [Method] length
-# 43| getStmt: [MulExpr] ... * ...
-# 43| getAnOperand/getLeftOperand/getReceiver: [IntegerLiteral] 100
-# 43| getAnOperand/getArgument/getRightOperand: [SuperCall] super call to length
+# 43| getBody: [StmtSequence] ...
+# 43| getStmt: [MulExpr] ... * ...
+# 43| getAnOperand/getLeftOperand/getReceiver: [IntegerLiteral] 100
+# 43| getAnOperand/getArgument/getRightOperand: [SuperCall] super call to length
# 46| getStmt: [Method] wibble
-# 47| getStmt: [MethodCall] call to puts
-# 47| getReceiver: [SelfVariableAccess] self
-# 47| getArgument: [StringLiteral] "wibble"
-# 47| getComponent: [StringTextComponent] wibble
+# 47| getBody: [StmtSequence] ...
+# 47| getStmt: [MethodCall] call to puts
+# 47| getReceiver: [SelfVariableAccess] self
+# 47| getArgument: [StringLiteral] "wibble"
+# 47| getComponent: [StringTextComponent] wibble
# 50| getStmt: [MethodCall] call to another_method_call
# 50| getReceiver: [SelfVariableAccess] self
# 51| getStmt: [AssignExpr] ... = ...
@@ -1533,32 +1567,34 @@ constants/constants.rb:
# 17| getAnOperand/getArgument/getRightOperand: [ConstantReadAccess] CONST_B
# 17| getScopeExpr: [ConstantReadAccess] ModuleA
# 19| getStmt: [Method] foo
-# 20| getStmt: [AssignExpr] ... = ...
-# 20| getAnOperand/getLeftOperand: [ConstantAssignment] Names
-# 20| getAnOperand/getRightOperand: [ArrayLiteral] [...]
-# 20| getElement: [StringLiteral] "Vera"
-# 20| getComponent: [StringTextComponent] Vera
-# 20| getElement: [StringLiteral] "Chuck"
-# 20| getComponent: [StringTextComponent] Chuck
-# 20| getElement: [StringLiteral] "Dave"
-# 20| getComponent: [StringTextComponent] Dave
-# 22| getStmt: [MethodCall] call to each
-# 22| getReceiver: [ConstantReadAccess] Names
-# 22| getBlock: [DoBlock] do ... end
-# 22| getParameter: [SimpleParameter] name
-# 22| getDefiningAccess: [LocalVariableAccess] name
-# 23| getStmt: [MethodCall] call to puts
-# 23| getReceiver: [SelfVariableAccess] self
-# 23| getArgument: [StringLiteral] "#{...} #{...}"
-# 23| getComponent: [StringInterpolationComponent] #{...}
-# 23| getStmt: [ConstantReadAccess] GREETING
-# 23| getComponent: [StringTextComponent]
-# 23| getComponent: [StringInterpolationComponent] #{...}
-# 23| getStmt: [LocalVariableAccess] name
-# 28| getStmt: [MethodCall] call to Array
-# 28| getReceiver: [SelfVariableAccess] self
-# 28| getArgument: [StringLiteral] "foo"
-# 28| getComponent: [StringTextComponent] foo
+# 20| getBody: [StmtSequence] ...
+# 20| getStmt: [AssignExpr] ... = ...
+# 20| getAnOperand/getLeftOperand: [ConstantAssignment] Names
+# 20| getAnOperand/getRightOperand: [ArrayLiteral] [...]
+# 20| getElement: [StringLiteral] "Vera"
+# 20| getComponent: [StringTextComponent] Vera
+# 20| getElement: [StringLiteral] "Chuck"
+# 20| getComponent: [StringTextComponent] Chuck
+# 20| getElement: [StringLiteral] "Dave"
+# 20| getComponent: [StringTextComponent] Dave
+# 22| getStmt: [MethodCall] call to each
+# 22| getReceiver: [ConstantReadAccess] Names
+# 22| getBlock: [DoBlock] do ... end
+# 22| getParameter: [SimpleParameter] name
+# 22| getDefiningAccess: [LocalVariableAccess] name
+# 23| getBody: [StmtSequence] ...
+# 23| getStmt: [MethodCall] call to puts
+# 23| getReceiver: [SelfVariableAccess] self
+# 23| getArgument: [StringLiteral] "#{...} #{...}"
+# 23| getComponent: [StringInterpolationComponent] #{...}
+# 23| getStmt: [ConstantReadAccess] GREETING
+# 23| getComponent: [StringTextComponent]
+# 23| getComponent: [StringInterpolationComponent] #{...}
+# 23| getStmt: [LocalVariableAccess] name
+# 28| getStmt: [MethodCall] call to Array
+# 28| getReceiver: [SelfVariableAccess] self
+# 28| getArgument: [StringLiteral] "foo"
+# 28| getComponent: [StringTextComponent] foo
# 31| getStmt: [ClassDeclaration] ClassD
# 31| getScopeExpr: [ConstantReadAccess] ModuleA
# 31| getSuperclassExpr: [ConstantReadAccess] ClassA
@@ -2309,14 +2345,15 @@ literals/literals.rb:
# 171| getComponent: [StringTextComponent]
# 171|
# 174| getStmt: [Method] m
-# 175| getStmt: [AssignExpr] ... = ...
-# 175| getAnOperand/getLeftOperand: [LocalVariableAccess] query
-# 175| getAnOperand/getRightOperand: [HereDoc] <<-BLA
-# 175| getComponent: [StringTextComponent]
-# 175| some text
-# 176| getComponent: [StringEscapeSequenceComponent] \n
-# 176| getComponent: [StringTextComponent] and some more
-# 176|
+# 175| getBody: [StmtSequence] ...
+# 175| getStmt: [AssignExpr] ... = ...
+# 175| getAnOperand/getLeftOperand: [LocalVariableAccess] query
+# 175| getAnOperand/getRightOperand: [HereDoc] <<-BLA
+# 175| getComponent: [StringTextComponent]
+# 175| some text
+# 176| getComponent: [StringEscapeSequenceComponent] \n
+# 176| getComponent: [StringTextComponent] and some more
+# 176|
# 180| getStmt: [AssignExpr] ... = ...
# 180| getAnOperand/getLeftOperand: [LocalVariableAccess] query
# 180| getAnOperand/getRightOperand: [HereDoc] <<~SQUIGGLY
@@ -2648,9 +2685,10 @@ modules/modules.rb:
# 90| getStmt: [MethodCall] call to module_eval
# 90| getReceiver: [ConstantReadAccess] Object
# 90| getBlock: [BraceBlock] { ... }
-# 90| getStmt: [MethodCall] call to prepend
-# 90| getReceiver: [SelfVariableAccess] self
-# 90| getArgument: [ConstantReadAccess] Other
+# 90| getBody: [StmtSequence] ...
+# 90| getStmt: [MethodCall] call to prepend
+# 90| getReceiver: [SelfVariableAccess] self
+# 90| getArgument: [ConstantReadAccess] Other
# 91| getStmt: [ModuleDeclaration] Y
# 91| getScopeExpr: [ConstantReadAccess] Foo1
# 95| getStmt: [ModuleDeclaration] IncludeTest2
@@ -2745,26 +2783,27 @@ operations/operations.rb:
# 28| getStmt: [DefinedExpr] defined? ...
# 28| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] foo
# 29| getStmt: [Method] foo
-# 29| getStmt: [ReturnStmt] return
-# 29| getValue: [ArgumentList] ..., ...
-# 29| getElement: [IntegerLiteral] 1
-# 29| getElement: [SplatExpr] * ...
-# 29| getAnOperand/getOperand/getReceiver: [ArrayLiteral] [...]
-# 29| getElement: [IntegerLiteral] 2
-# 29| getElement: [Pair] Pair
-# 29| getKey: [SymbolLiteral] :a
-# 29| getComponent: [StringTextComponent] a
-# 29| getValue: [IntegerLiteral] 3
-# 29| getElement: [HashSplatExpr] ** ...
-# 29| getAnOperand/getOperand/getReceiver: [HashLiteral] {...}
-# 29| getElement: [Pair] Pair
-# 29| getKey: [SymbolLiteral] :b
-# 29| getComponent: [StringTextComponent] b
-# 29| getValue: [IntegerLiteral] 4
-# 29| getElement: [Pair] Pair
-# 29| getKey: [SymbolLiteral] :c
-# 29| getComponent: [StringTextComponent] c
-# 29| getValue: [IntegerLiteral] 5
+# 29| getBody: [StmtSequence] ...
+# 29| getStmt: [ReturnStmt] return
+# 29| getValue: [ArgumentList] ..., ...
+# 29| getElement: [IntegerLiteral] 1
+# 29| getElement: [SplatExpr] * ...
+# 29| getAnOperand/getOperand/getReceiver: [ArrayLiteral] [...]
+# 29| getElement: [IntegerLiteral] 2
+# 29| getElement: [Pair] Pair
+# 29| getKey: [SymbolLiteral] :a
+# 29| getComponent: [StringTextComponent] a
+# 29| getValue: [IntegerLiteral] 3
+# 29| getElement: [HashSplatExpr] ** ...
+# 29| getAnOperand/getOperand/getReceiver: [HashLiteral] {...}
+# 29| getElement: [Pair] Pair
+# 29| getKey: [SymbolLiteral] :b
+# 29| getComponent: [StringTextComponent] b
+# 29| getValue: [IntegerLiteral] 4
+# 29| getElement: [Pair] Pair
+# 29| getKey: [SymbolLiteral] :c
+# 29| getComponent: [StringTextComponent] c
+# 29| getValue: [IntegerLiteral] 5
# 32| getStmt: [AddExpr] ... + ...
# 32| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] w
# 32| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 234
@@ -2899,10 +2938,11 @@ operations/operations.rb:
# 95| getDefiningAccess: [LocalVariableAccess] a
# 95| getParameter: [SimpleParameter] b
# 95| getDefiningAccess: [LocalVariableAccess] b
-# 96| getStmt: [ReturnStmt] return
-# 96| getValue: [LogicalAndExpr] ... && ...
-# 96| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] a
-# 97| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] b
+# 96| getBody: [StmtSequence] ...
+# 96| getStmt: [ReturnStmt] return
+# 96| getValue: [LogicalAndExpr] ... && ...
+# 96| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] a
+# 97| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] b
# 107| getStmt: [ClassDeclaration] X
# 108| getStmt: [AssignExpr] ... = ...
# 108| getAnOperand/getLeftOperand: [InstanceVariableAccess] @x
@@ -2979,14 +3019,15 @@ params/params.rb:
# 9| getDefiningAccess: [LocalVariableAccess] key
# 9| getParameter: [SimpleParameter] value
# 9| getDefiningAccess: [LocalVariableAccess] value
-# 10| getStmt: [MethodCall] call to puts
-# 10| getReceiver: [SelfVariableAccess] self
-# 10| getArgument: [StringLiteral] "#{...} -> #{...}"
-# 10| getComponent: [StringInterpolationComponent] #{...}
-# 10| getStmt: [LocalVariableAccess] key
-# 10| getComponent: [StringTextComponent] ->
-# 10| getComponent: [StringInterpolationComponent] #{...}
-# 10| getStmt: [LocalVariableAccess] value
+# 10| getBody: [StmtSequence] ...
+# 10| getStmt: [MethodCall] call to puts
+# 10| getReceiver: [SelfVariableAccess] self
+# 10| getArgument: [StringLiteral] "#{...} -> #{...}"
+# 10| getComponent: [StringInterpolationComponent] #{...}
+# 10| getStmt: [LocalVariableAccess] key
+# 10| getComponent: [StringTextComponent] ->
+# 10| getComponent: [StringInterpolationComponent] #{...}
+# 10| getStmt: [LocalVariableAccess] value
# 14| getStmt: [AssignExpr] ... = ...
# 14| getAnOperand/getLeftOperand: [LocalVariableAccess] sum
# 14| getAnOperand/getRightOperand: [Lambda] -> { ... }
@@ -2994,9 +3035,10 @@ params/params.rb:
# 14| getDefiningAccess: [LocalVariableAccess] foo
# 14| getParameter: [SimpleParameter] bar
# 14| getDefiningAccess: [LocalVariableAccess] bar
-# 14| getStmt: [AddExpr] ... + ...
-# 14| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] foo
-# 14| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] bar
+# 14| getBody: [StmtSequence] ...
+# 14| getStmt: [AddExpr] ... + ...
+# 14| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] foo
+# 14| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] bar
# 17| getStmt: [Method] destructured_method_param
# 17| getParameter: [DestructuredParameter] (..., ...)
# 17| getElement: [LocalVariableAccess] a
@@ -3011,11 +3053,12 @@ params/params.rb:
# 22| getParameter: [DestructuredParameter] (..., ...)
# 22| getElement: [LocalVariableAccess] a
# 22| getElement: [LocalVariableAccess] b
-# 22| getStmt: [MethodCall] call to puts
-# 22| getReceiver: [SelfVariableAccess] self
-# 22| getArgument: [AddExpr] ... + ...
-# 22| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] a
-# 22| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] b
+# 22| getBody: [StmtSequence] ...
+# 22| getStmt: [MethodCall] call to puts
+# 22| getReceiver: [SelfVariableAccess] self
+# 22| getArgument: [AddExpr] ... + ...
+# 22| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] a
+# 22| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] b
# 25| getStmt: [AssignExpr] ... = ...
# 25| getAnOperand/getLeftOperand: [LocalVariableAccess] sum_four_values
# 25| getAnOperand/getRightOperand: [Lambda] -> { ... }
@@ -3025,13 +3068,14 @@ params/params.rb:
# 25| getParameter: [DestructuredParameter] (..., ...)
# 25| getElement: [LocalVariableAccess] third
# 25| getElement: [LocalVariableAccess] fourth
-# 26| getStmt: [AddExpr] ... + ...
-# 26| getAnOperand/getLeftOperand/getReceiver: [AddExpr] ... + ...
+# 26| getBody: [StmtSequence] ...
+# 26| getStmt: [AddExpr] ... + ...
# 26| getAnOperand/getLeftOperand/getReceiver: [AddExpr] ... + ...
-# 26| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] first
-# 26| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] second
-# 26| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] third
-# 26| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] fourth
+# 26| getAnOperand/getLeftOperand/getReceiver: [AddExpr] ... + ...
+# 26| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] first
+# 26| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] second
+# 26| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] third
+# 26| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] fourth
# 30| getStmt: [Method] method_with_splat
# 30| getParameter: [SimpleParameter] wibble
# 30| getDefiningAccess: [LocalVariableAccess] wibble
@@ -3065,26 +3109,28 @@ params/params.rb:
# 41| getParameter: [KeywordParameter] bar
# 41| getDefiningAccess: [LocalVariableAccess] bar
# 41| getDefaultValue: [IntegerLiteral] 7
-# 42| getStmt: [AddExpr] ... + ...
-# 42| getAnOperand/getLeftOperand/getReceiver: [AddExpr] ... + ...
-# 42| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
-# 42| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] foo
-# 42| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] bar
+# 42| getBody: [StmtSequence] ...
+# 42| getStmt: [AddExpr] ... + ...
+# 42| getAnOperand/getLeftOperand/getReceiver: [AddExpr] ... + ...
+# 42| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
+# 42| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] foo
+# 42| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] bar
# 46| getStmt: [Method] use_block_with_keyword
# 46| getParameter: [BlockParameter] &block
# 46| getDefiningAccess: [LocalVariableAccess] block
-# 47| getStmt: [MethodCall] call to puts
-# 47| getReceiver: [SelfVariableAccess] self
-# 47| getArgument: [MethodCall] call to call
-# 47| getReceiver: [LocalVariableAccess] block
-# 47| getArgument: [Pair] Pair
-# 47| getKey: [SymbolLiteral] :bar
-# 47| getComponent: [StringTextComponent] bar
-# 47| getValue: [IntegerLiteral] 2
-# 47| getArgument: [Pair] Pair
-# 47| getKey: [SymbolLiteral] :foo
-# 47| getComponent: [StringTextComponent] foo
-# 47| getValue: [IntegerLiteral] 3
+# 47| getBody: [StmtSequence] ...
+# 47| getStmt: [MethodCall] call to puts
+# 47| getReceiver: [SelfVariableAccess] self
+# 47| getArgument: [MethodCall] call to call
+# 47| getReceiver: [LocalVariableAccess] block
+# 47| getArgument: [Pair] Pair
+# 47| getKey: [SymbolLiteral] :bar
+# 47| getComponent: [StringTextComponent] bar
+# 47| getValue: [IntegerLiteral] 2
+# 47| getArgument: [Pair] Pair
+# 47| getKey: [SymbolLiteral] :foo
+# 47| getComponent: [StringTextComponent] foo
+# 47| getValue: [IntegerLiteral] 3
# 49| getStmt: [MethodCall] call to use_block_with_keyword
# 49| getReceiver: [SelfVariableAccess] self
# 49| getBlock: [DoBlock] do ... end
@@ -3093,9 +3139,10 @@ params/params.rb:
# 49| getParameter: [KeywordParameter] yy
# 49| getDefiningAccess: [LocalVariableAccess] yy
# 49| getDefaultValue: [IntegerLiteral] 100
-# 50| getStmt: [AddExpr] ... + ...
-# 50| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] xx
-# 50| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] yy
+# 50| getBody: [StmtSequence] ...
+# 50| getStmt: [AddExpr] ... + ...
+# 50| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] xx
+# 50| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] yy
# 53| getStmt: [AssignExpr] ... = ...
# 53| getAnOperand/getLeftOperand: [LocalVariableAccess] lambda_with_keyword_params
# 53| getAnOperand/getRightOperand: [Lambda] -> { ... }
@@ -3106,11 +3153,12 @@ params/params.rb:
# 53| getParameter: [KeywordParameter] z
# 53| getDefiningAccess: [LocalVariableAccess] z
# 53| getDefaultValue: [IntegerLiteral] 3
-# 54| getStmt: [AddExpr] ... + ...
-# 54| getAnOperand/getLeftOperand/getReceiver: [AddExpr] ... + ...
-# 54| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
-# 54| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] y
-# 54| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] z
+# 54| getBody: [StmtSequence] ...
+# 54| getStmt: [AddExpr] ... + ...
+# 54| getAnOperand/getLeftOperand/getReceiver: [AddExpr] ... + ...
+# 54| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
+# 54| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] y
+# 54| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] z
# 58| getStmt: [Method] method_with_optional_params
# 58| getParameter: [SimpleParameter] val1
# 58| getDefiningAccess: [LocalVariableAccess] val1
@@ -3123,10 +3171,11 @@ params/params.rb:
# 62| getStmt: [Method] use_block_with_optional
# 62| getParameter: [BlockParameter] &block
# 62| getDefiningAccess: [LocalVariableAccess] block
-# 63| getStmt: [MethodCall] call to call
-# 63| getReceiver: [LocalVariableAccess] block
-# 63| getArgument: [StringLiteral] "Zeus"
-# 63| getComponent: [StringTextComponent] Zeus
+# 63| getBody: [StmtSequence] ...
+# 63| getStmt: [MethodCall] call to call
+# 63| getReceiver: [LocalVariableAccess] block
+# 63| getArgument: [StringLiteral] "Zeus"
+# 63| getComponent: [StringTextComponent] Zeus
# 65| getStmt: [MethodCall] call to use_block_with_optional
# 65| getReceiver: [SelfVariableAccess] self
# 65| getBlock: [DoBlock] do ... end
@@ -3135,15 +3184,16 @@ params/params.rb:
# 65| getParameter: [OptionalParameter] age
# 65| getDefiningAccess: [LocalVariableAccess] age
# 65| getDefaultValue: [IntegerLiteral] 99
-# 66| getStmt: [MethodCall] call to puts
-# 66| getReceiver: [SelfVariableAccess] self
-# 66| getArgument: [StringLiteral] "#{...} is #{...} years old"
-# 66| getComponent: [StringInterpolationComponent] #{...}
-# 66| getStmt: [LocalVariableAccess] name
-# 66| getComponent: [StringTextComponent] is
-# 66| getComponent: [StringInterpolationComponent] #{...}
-# 66| getStmt: [LocalVariableAccess] age
-# 66| getComponent: [StringTextComponent] years old
+# 66| getBody: [StmtSequence] ...
+# 66| getStmt: [MethodCall] call to puts
+# 66| getReceiver: [SelfVariableAccess] self
+# 66| getArgument: [StringLiteral] "#{...} is #{...} years old"
+# 66| getComponent: [StringInterpolationComponent] #{...}
+# 66| getStmt: [LocalVariableAccess] name
+# 66| getComponent: [StringTextComponent] is
+# 66| getComponent: [StringInterpolationComponent] #{...}
+# 66| getStmt: [LocalVariableAccess] age
+# 66| getComponent: [StringTextComponent] years old
# 70| getStmt: [AssignExpr] ... = ...
# 70| getAnOperand/getLeftOperand: [LocalVariableAccess] lambda_with_optional_params
# 70| getAnOperand/getRightOperand: [Lambda] -> { ... }
@@ -3155,11 +3205,12 @@ params/params.rb:
# 70| getParameter: [OptionalParameter] c
# 70| getDefiningAccess: [LocalVariableAccess] c
# 70| getDefaultValue: [IntegerLiteral] 20
-# 70| getStmt: [AddExpr] ... + ...
-# 70| getAnOperand/getLeftOperand/getReceiver: [AddExpr] ... + ...
-# 70| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] a
-# 70| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] b
-# 70| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] c
+# 70| getBody: [StmtSequence] ...
+# 70| getStmt: [AddExpr] ... + ...
+# 70| getAnOperand/getLeftOperand/getReceiver: [AddExpr] ... + ...
+# 70| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] a
+# 70| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] b
+# 70| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] c
# 73| getStmt: [Method] method_with_nil_splat
# 73| getParameter: [SimpleParameter] wibble
# 73| getDefiningAccess: [LocalVariableAccess] wibble
@@ -3175,14 +3226,15 @@ params/params.rb:
# 81| getDefiningAccess: [LocalVariableAccess] array
# 81| getParameter: [BlockParameter] &
# 81| getDefiningAccess: [LocalVariableAccess] __synth__0
-# 82| getStmt: [MethodCall] call to proc
-# 82| getReceiver: [SelfVariableAccess] self
-# 82| getArgument: [BlockArgument] &...
-# 82| getValue: [LocalVariableAccess] __synth__0
-# 83| getStmt: [MethodCall] call to each
-# 83| getReceiver: [LocalVariableAccess] array
-# 83| getArgument: [BlockArgument] &...
-# 83| getValue: [LocalVariableAccess] __synth__0
+# 82| getBody: [StmtSequence] ...
+# 82| getStmt: [MethodCall] call to proc
+# 82| getReceiver: [SelfVariableAccess] self
+# 82| getArgument: [BlockArgument] &...
+# 82| getValue: [LocalVariableAccess] __synth__0
+# 83| getStmt: [MethodCall] call to each
+# 83| getReceiver: [LocalVariableAccess] array
+# 83| getArgument: [BlockArgument] &...
+# 83| getValue: [LocalVariableAccess] __synth__0
# 86| getStmt: [MethodCall] call to run_block
# 86| getReceiver: [SelfVariableAccess] self
# 86| getBlock: [BraceBlock] { ... }
@@ -3190,27 +3242,30 @@ params/params.rb:
# 86| getDefiningAccess: [LocalVariableAccess] x
# 86| getLocalVariable: [LocalVariableAccess] y
# 86| getLocalVariable: [LocalVariableAccess] z
-# 86| getStmt: [MethodCall] call to puts
-# 86| getReceiver: [SelfVariableAccess] self
-# 86| getArgument: [LocalVariableAccess] x
+# 86| getBody: [StmtSequence] ...
+# 86| getStmt: [MethodCall] call to puts
+# 86| getReceiver: [SelfVariableAccess] self
+# 86| getArgument: [LocalVariableAccess] x
# 89| getStmt: [Method] anonymous_splat_parameter
# 89| getParameter: [SimpleParameter] array
# 89| getDefiningAccess: [LocalVariableAccess] array
# 89| getParameter: [SplatParameter] *
# 89| getDefiningAccess: [LocalVariableAccess] __synth__0
-# 90| getStmt: [MethodCall] call to concat
-# 90| getReceiver: [LocalVariableAccess] array
-# 90| getArgument: [SplatExpr] * ...
-# 90| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] __synth__0
+# 90| getBody: [StmtSequence] ...
+# 90| getStmt: [MethodCall] call to concat
+# 90| getReceiver: [LocalVariableAccess] array
+# 90| getArgument: [SplatExpr] * ...
+# 90| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] __synth__0
# 94| getStmt: [Method] anonymous_hash_splat_parameter
# 94| getParameter: [SimpleParameter] hash
# 94| getDefiningAccess: [LocalVariableAccess] hash
# 94| getParameter: [HashSplatParameter] **
# 94| getDefiningAccess: [LocalVariableAccess] __synth__0
-# 95| getStmt: [MethodCall] call to merge
-# 95| getReceiver: [LocalVariableAccess] hash
-# 95| getArgument: [HashSplatExpr] ** ...
-# 95| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] __synth__0
+# 95| getBody: [StmtSequence] ...
+# 95| getStmt: [MethodCall] call to merge
+# 95| getReceiver: [LocalVariableAccess] hash
+# 95| getArgument: [HashSplatExpr] ** ...
+# 95| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] __synth__0
# 98| getStmt: [ClassDeclaration] Sup
# 99| getStmt: [Method] m
# 99| getParameter: [SimpleParameter] x
@@ -3221,16 +3276,17 @@ params/params.rb:
# 99| getDefiningAccess: [LocalVariableAccess] k
# 99| getParameter: [HashSplatParameter] **kwargs
# 99| getDefiningAccess: [LocalVariableAccess] kwargs
-# 100| getStmt: [MethodCall] call to print
-# 100| getReceiver: [SelfVariableAccess] self
-# 100| getArgument: [AddExpr] ... + ...
-# 100| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
-# 100| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
-# 101| getStmt: [MethodCall] call to print
-# 101| getReceiver: [SelfVariableAccess] self
-# 101| getArgument: [AddExpr] ... + ...
-# 101| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] k
-# 101| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
+# 100| getBody: [StmtSequence] ...
+# 100| getStmt: [MethodCall] call to print
+# 100| getReceiver: [SelfVariableAccess] self
+# 100| getArgument: [AddExpr] ... + ...
+# 100| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] x
+# 100| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
+# 101| getStmt: [MethodCall] call to print
+# 101| getReceiver: [SelfVariableAccess] self
+# 101| getArgument: [AddExpr] ... + ...
+# 101| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] k
+# 101| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1
# 105| getStmt: [ClassDeclaration] Sub
# 105| getSuperclassExpr: [ConstantReadAccess] Sup
# 106| getStmt: [Method] m
@@ -3242,15 +3298,16 @@ params/params.rb:
# 106| getDefiningAccess: [LocalVariableAccess] k
# 106| getParameter: [HashSplatParameter] **kwargs
# 106| getDefiningAccess: [LocalVariableAccess] kwargs
-# 107| getStmt: [SuperCall] super call to m
-# 107| getArgument: [LocalVariableAccess] y
-# 107| getArgument: [SplatExpr] * ...
-# 107| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] rest
-# 107| getArgument: [Pair] Pair
-# 107| getKey: [SymbolLiteral] k
-# 107| getValue: [LocalVariableAccess] k
-# 107| getArgument: [HashSplatExpr] ** ...
-# 107| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] kwargs
+# 107| getBody: [StmtSequence] ...
+# 107| getStmt: [SuperCall] super call to m
+# 107| getArgument: [LocalVariableAccess] y
+# 107| getArgument: [SplatExpr] * ...
+# 107| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] rest
+# 107| getArgument: [Pair] Pair
+# 107| getKey: [SymbolLiteral] k
+# 107| getValue: [LocalVariableAccess] k
+# 107| getArgument: [HashSplatExpr] ** ...
+# 107| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] kwargs
# 111| getStmt: [MethodCall] call to m
# 111| getReceiver: [MethodCall] call to new
# 111| getReceiver: [ConstantReadAccess] Sub
@@ -3288,57 +3345,59 @@ gems/test.gemspec:
# 1| getBlock: [DoBlock] do ... end
# 1| getParameter: [SimpleParameter] s
# 1| getDefiningAccess: [LocalVariableAccess] s
-# 2| getStmt: [AssignExpr] ... = ...
-# 2| getAnOperand/getLeftOperand: [MethodCall] call to name
-# 2| getReceiver: [LocalVariableAccess] s
-# 2| getAnOperand/getRightOperand: [StringLiteral] "test"
-# 2| getComponent: [StringTextComponent] test
-# 3| getStmt: [AssignExpr] ... = ...
-# 3| getAnOperand/getLeftOperand: [MethodCall] call to version
-# 3| getReceiver: [LocalVariableAccess] s
-# 3| getAnOperand/getRightOperand: [StringLiteral] "0.0.0"
-# 3| getComponent: [StringTextComponent] 0.0.0
-# 4| getStmt: [AssignExpr] ... = ...
-# 4| getAnOperand/getLeftOperand: [MethodCall] call to summary
-# 4| getReceiver: [LocalVariableAccess] s
-# 4| getAnOperand/getRightOperand: [StringLiteral] "foo!"
-# 4| getComponent: [StringTextComponent] foo!
-# 5| getStmt: [AssignExpr] ... = ...
-# 5| getAnOperand/getLeftOperand: [MethodCall] call to description
-# 5| getReceiver: [LocalVariableAccess] s
-# 5| getAnOperand/getRightOperand: [StringLiteral] "A test"
-# 5| getComponent: [StringTextComponent] A test
-# 6| getStmt: [AssignExpr] ... = ...
-# 6| getAnOperand/getLeftOperand: [MethodCall] call to authors
-# 6| getReceiver: [LocalVariableAccess] s
-# 6| getAnOperand/getRightOperand: [ArrayLiteral] [...]
-# 6| getElement: [StringLiteral] "Mona Lisa"
-# 6| getComponent: [StringTextComponent] Mona Lisa
-# 7| getStmt: [AssignExpr] ... = ...
-# 7| getAnOperand/getLeftOperand: [MethodCall] call to email
-# 7| getReceiver: [LocalVariableAccess] s
-# 7| getAnOperand/getRightOperand: [StringLiteral] "mona@example.com"
-# 7| getComponent: [StringTextComponent] mona@example.com
-# 8| getStmt: [AssignExpr] ... = ...
-# 8| getAnOperand/getLeftOperand: [MethodCall] call to files
-# 8| getReceiver: [LocalVariableAccess] s
-# 8| getAnOperand/getRightOperand: [ArrayLiteral] [...]
-# 8| getElement: [StringLiteral] "lib/test.rb"
-# 8| getComponent: [StringTextComponent] lib/test.rb
-# 9| getStmt: [AssignExpr] ... = ...
-# 9| getAnOperand/getLeftOperand: [MethodCall] call to homepage
-# 9| getReceiver: [LocalVariableAccess] s
-# 9| getAnOperand/getRightOperand: [StringLiteral] "https://github.com/github/cod..."
-# 9| getComponent: [StringTextComponent] https://github.com/github/codeql-ruby
+# 2| getBody: [StmtSequence] ...
+# 2| getStmt: [AssignExpr] ... = ...
+# 2| getAnOperand/getLeftOperand: [MethodCall] call to name
+# 2| getReceiver: [LocalVariableAccess] s
+# 2| getAnOperand/getRightOperand: [StringLiteral] "test"
+# 2| getComponent: [StringTextComponent] test
+# 3| getStmt: [AssignExpr] ... = ...
+# 3| getAnOperand/getLeftOperand: [MethodCall] call to version
+# 3| getReceiver: [LocalVariableAccess] s
+# 3| getAnOperand/getRightOperand: [StringLiteral] "0.0.0"
+# 3| getComponent: [StringTextComponent] 0.0.0
+# 4| getStmt: [AssignExpr] ... = ...
+# 4| getAnOperand/getLeftOperand: [MethodCall] call to summary
+# 4| getReceiver: [LocalVariableAccess] s
+# 4| getAnOperand/getRightOperand: [StringLiteral] "foo!"
+# 4| getComponent: [StringTextComponent] foo!
+# 5| getStmt: [AssignExpr] ... = ...
+# 5| getAnOperand/getLeftOperand: [MethodCall] call to description
+# 5| getReceiver: [LocalVariableAccess] s
+# 5| getAnOperand/getRightOperand: [StringLiteral] "A test"
+# 5| getComponent: [StringTextComponent] A test
+# 6| getStmt: [AssignExpr] ... = ...
+# 6| getAnOperand/getLeftOperand: [MethodCall] call to authors
+# 6| getReceiver: [LocalVariableAccess] s
+# 6| getAnOperand/getRightOperand: [ArrayLiteral] [...]
+# 6| getElement: [StringLiteral] "Mona Lisa"
+# 6| getComponent: [StringTextComponent] Mona Lisa
+# 7| getStmt: [AssignExpr] ... = ...
+# 7| getAnOperand/getLeftOperand: [MethodCall] call to email
+# 7| getReceiver: [LocalVariableAccess] s
+# 7| getAnOperand/getRightOperand: [StringLiteral] "mona@example.com"
+# 7| getComponent: [StringTextComponent] mona@example.com
+# 8| getStmt: [AssignExpr] ... = ...
+# 8| getAnOperand/getLeftOperand: [MethodCall] call to files
+# 8| getReceiver: [LocalVariableAccess] s
+# 8| getAnOperand/getRightOperand: [ArrayLiteral] [...]
+# 8| getElement: [StringLiteral] "lib/test.rb"
+# 8| getComponent: [StringTextComponent] lib/test.rb
+# 9| getStmt: [AssignExpr] ... = ...
+# 9| getAnOperand/getLeftOperand: [MethodCall] call to homepage
+# 9| getReceiver: [LocalVariableAccess] s
+# 9| getAnOperand/getRightOperand: [StringLiteral] "https://github.com/github/cod..."
+# 9| getComponent: [StringTextComponent] https://github.com/github/codeql-ruby
gems/lib/test.rb:
# 1| [Toplevel] test.rb
# 1| getStmt: [ClassDeclaration] Foo
# 2| getStmt: [SingletonMethod] greet
# 2| getObject: [SelfVariableAccess] self
-# 3| getStmt: [MethodCall] call to puts
-# 3| getReceiver: [SelfVariableAccess] self
-# 3| getArgument: [StringLiteral] "Hello"
-# 3| getComponent: [StringTextComponent] Hello
+# 3| getBody: [StmtSequence] ...
+# 3| getStmt: [MethodCall] call to puts
+# 3| getReceiver: [SelfVariableAccess] self
+# 3| getArgument: [StringLiteral] "Hello"
+# 3| getComponent: [StringTextComponent] Hello
modules/toplevel.rb:
# 1| [Toplevel] toplevel.rb
# 1| getStmt: [MethodCall] call to puts
diff --git a/ruby/ql/test/library-tests/ast/AstDesugar.expected b/ruby/ql/test/library-tests/ast/AstDesugar.expected
index 294438607496..40594888db15 100644
--- a/ruby/ql/test/library-tests/ast/AstDesugar.expected
+++ b/ruby/ql/test/library-tests/ast/AstDesugar.expected
@@ -38,11 +38,12 @@ calls/calls.rb:
# 223| getBlock: [BraceBlock] { ... }
# 223| getParameter: [SimpleParameter] __synth__0__1
# 223| getDefiningAccess: [LocalVariableAccess] __synth__0__1
-# 223| getStmt: [AssignExpr] ... = ...
-# 223| getAnOperand/getLeftOperand: [LocalVariableAccess] x
-# 223| getAnOperand/getRightOperand: [LocalVariableAccess] __synth__0__1
-# 224| getStmt: [MethodCall] call to baz
-# 224| getReceiver: [SelfVariableAccess] self
+# 223| getBody: [StmtSequence] ...
+# 223| getStmt: [AssignExpr] ... = ...
+# 223| getAnOperand/getLeftOperand: [LocalVariableAccess] x
+# 223| getAnOperand/getRightOperand: [LocalVariableAccess] __synth__0__1
+# 224| getStmt: [MethodCall] call to baz
+# 224| getReceiver: [SelfVariableAccess] self
# 226| [ForExpr] for ... in ...
# 226| getDesugared: [StmtSequence] ...
# 226| getStmt: [IfExpr] if ...
@@ -58,11 +59,12 @@ calls/calls.rb:
# 226| getBlock: [BraceBlock] { ... }
# 226| getParameter: [SimpleParameter] __synth__0__1
# 226| getDefiningAccess: [LocalVariableAccess] __synth__0__1
-# 226| getStmt: [AssignExpr] ... = ...
-# 226| getAnOperand/getLeftOperand: [LocalVariableAccess] x
-# 226| getAnOperand/getRightOperand: [LocalVariableAccess] __synth__0__1
-# 227| getStmt: [MethodCall] call to baz
-# 227| getReceiver: [ConstantReadAccess] X
+# 226| getBody: [StmtSequence] ...
+# 226| getStmt: [AssignExpr] ... = ...
+# 226| getAnOperand/getLeftOperand: [LocalVariableAccess] x
+# 226| getAnOperand/getRightOperand: [LocalVariableAccess] __synth__0__1
+# 227| getStmt: [MethodCall] call to baz
+# 227| getReceiver: [ConstantReadAccess] X
# 246| [HashLiteral] {...}
# 246| getDesugared: [MethodCall] call to []
# 246| getReceiver: [ConstantReadAccess] Hash
@@ -302,33 +304,34 @@ calls/calls.rb:
# 339| getBlock: [BraceBlock] { ... }
# 339| getParameter: [SimpleParameter] __synth__0__1
# 339| getDefiningAccess: [LocalVariableAccess] __synth__0__1
-# 339| getStmt: [AssignExpr] ... = ...
-# 339| getDesugared: [StmtSequence] ...
-# 339| getStmt: [AssignExpr] ... = ...
-# 339| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__3__1
-# 339| getAnOperand/getRightOperand: [SplatExpr] * ...
-# 339| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] __synth__0__1
-# 339| getStmt: [AssignExpr] ... = ...
-# 339| getAnOperand/getLeftOperand: [LocalVariableAccess] x
-# 339| getAnOperand/getRightOperand: [MethodCall] call to []
-# 339| getReceiver: [LocalVariableAccess] __synth__3__1
-# 339| getArgument: [IntegerLiteral] 0
-# 339| getStmt: [AssignExpr] ... = ...
-# 339| getAnOperand/getLeftOperand: [LocalVariableAccess] y
-# 339| getAnOperand/getRightOperand: [MethodCall] call to []
-# 339| getReceiver: [LocalVariableAccess] __synth__3__1
-# 339| getArgument: [IntegerLiteral] 1
-# 339| getStmt: [AssignExpr] ... = ...
-# 339| getAnOperand/getLeftOperand: [LocalVariableAccess] z
-# 339| getAnOperand/getRightOperand: [MethodCall] call to []
-# 339| getReceiver: [LocalVariableAccess] __synth__3__1
-# 339| getArgument: [IntegerLiteral] 2
-# 339| getAnOperand/getLeftOperand: [DestructuredLhsExpr] (..., ...)
-# 340| getStmt: [MethodCall] call to foo
-# 340| getReceiver: [SelfVariableAccess] self
-# 340| getArgument: [LocalVariableAccess] x
-# 340| getArgument: [LocalVariableAccess] y
-# 340| getArgument: [LocalVariableAccess] z
+# 339| getBody: [StmtSequence] ...
+# 339| getStmt: [AssignExpr] ... = ...
+# 339| getDesugared: [StmtSequence] ...
+# 339| getStmt: [AssignExpr] ... = ...
+# 339| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__3__1
+# 339| getAnOperand/getRightOperand: [SplatExpr] * ...
+# 339| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] __synth__0__1
+# 339| getStmt: [AssignExpr] ... = ...
+# 339| getAnOperand/getLeftOperand: [LocalVariableAccess] x
+# 339| getAnOperand/getRightOperand: [MethodCall] call to []
+# 339| getReceiver: [LocalVariableAccess] __synth__3__1
+# 339| getArgument: [IntegerLiteral] 0
+# 339| getStmt: [AssignExpr] ... = ...
+# 339| getAnOperand/getLeftOperand: [LocalVariableAccess] y
+# 339| getAnOperand/getRightOperand: [MethodCall] call to []
+# 339| getReceiver: [LocalVariableAccess] __synth__3__1
+# 339| getArgument: [IntegerLiteral] 1
+# 339| getStmt: [AssignExpr] ... = ...
+# 339| getAnOperand/getLeftOperand: [LocalVariableAccess] z
+# 339| getAnOperand/getRightOperand: [MethodCall] call to []
+# 339| getReceiver: [LocalVariableAccess] __synth__3__1
+# 339| getArgument: [IntegerLiteral] 2
+# 339| getAnOperand/getLeftOperand: [DestructuredLhsExpr] (..., ...)
+# 340| getStmt: [MethodCall] call to foo
+# 340| getReceiver: [SelfVariableAccess] self
+# 340| getArgument: [LocalVariableAccess] x
+# 340| getArgument: [LocalVariableAccess] y
+# 340| getArgument: [LocalVariableAccess] z
# 361| [MethodCall] call to empty?
# 361| getDesugared: [StmtSequence] ...
# 361| getStmt: [AssignExpr] ... = ...
@@ -360,7 +363,8 @@ calls/calls.rb:
# 363| getBlock: [BraceBlock] { ... }
# 363| getParameter: [SimpleParameter] x
# 363| getDefiningAccess: [LocalVariableAccess] x
-# 363| getStmt: [LocalVariableAccess] x
+# 363| getBody: [StmtSequence] ...
+# 363| getStmt: [LocalVariableAccess] x
control/cases.rb:
# 90| [ArrayLiteral] %w(...)
# 90| getDesugared: [MethodCall] call to []
@@ -647,18 +651,19 @@ control/loops.rb:
# 9| getBlock: [BraceBlock] { ... }
# 9| getParameter: [SimpleParameter] __synth__0__1
# 9| getDefiningAccess: [LocalVariableAccess] __synth__0__1
-# 9| getStmt: [AssignExpr] ... = ...
-# 9| getAnOperand/getLeftOperand: [LocalVariableAccess] n
-# 9| getAnOperand/getRightOperand: [LocalVariableAccess] __synth__0__1
-# 10| getStmt: [AssignAddExpr] ... += ...
-# 10| getDesugared: [AssignExpr] ... = ...
-# 10| getAnOperand/getLeftOperand: [LocalVariableAccess] sum
-# 10| getAnOperand/getRightOperand: [AddExpr] ... + ...
-# 10| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] sum
-# 10| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] n
-# 11| getStmt: [AssignExpr] ... = ...
-# 11| getAnOperand/getLeftOperand: [LocalVariableAccess] foo
-# 11| getAnOperand/getRightOperand: [LocalVariableAccess] n
+# 9| getBody: [StmtSequence] ...
+# 9| getStmt: [AssignExpr] ... = ...
+# 9| getAnOperand/getLeftOperand: [LocalVariableAccess] n
+# 9| getAnOperand/getRightOperand: [LocalVariableAccess] __synth__0__1
+# 10| getStmt: [AssignAddExpr] ... += ...
+# 10| getDesugared: [AssignExpr] ... = ...
+# 10| getAnOperand/getLeftOperand: [LocalVariableAccess] sum
+# 10| getAnOperand/getRightOperand: [AddExpr] ... + ...
+# 10| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] sum
+# 10| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] n
+# 11| getStmt: [AssignExpr] ... = ...
+# 11| getAnOperand/getLeftOperand: [LocalVariableAccess] foo
+# 11| getAnOperand/getRightOperand: [LocalVariableAccess] n
# 16| [ForExpr] for ... in ...
# 16| getDesugared: [StmtSequence] ...
# 16| getStmt: [IfExpr] if ...
@@ -675,21 +680,22 @@ control/loops.rb:
# 16| getBlock: [BraceBlock] { ... }
# 16| getParameter: [SimpleParameter] __synth__0__1
# 16| getDefiningAccess: [LocalVariableAccess] __synth__0__1
-# 16| getStmt: [AssignExpr] ... = ...
-# 16| getAnOperand/getLeftOperand: [LocalVariableAccess] n
-# 16| getAnOperand/getRightOperand: [LocalVariableAccess] __synth__0__1
-# 17| getStmt: [AssignAddExpr] ... += ...
-# 17| getDesugared: [AssignExpr] ... = ...
-# 17| getAnOperand/getLeftOperand: [LocalVariableAccess] sum
-# 17| getAnOperand/getRightOperand: [AddExpr] ... + ...
-# 17| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] sum
-# 17| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] n
-# 18| getStmt: [AssignSubExpr] ... -= ...
-# 18| getDesugared: [AssignExpr] ... = ...
-# 18| getAnOperand/getLeftOperand: [LocalVariableAccess] foo
-# 18| getAnOperand/getRightOperand: [SubExpr] ... - ...
-# 18| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] foo
-# 18| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] n
+# 16| getBody: [StmtSequence] ...
+# 16| getStmt: [AssignExpr] ... = ...
+# 16| getAnOperand/getLeftOperand: [LocalVariableAccess] n
+# 16| getAnOperand/getRightOperand: [LocalVariableAccess] __synth__0__1
+# 17| getStmt: [AssignAddExpr] ... += ...
+# 17| getDesugared: [AssignExpr] ... = ...
+# 17| getAnOperand/getLeftOperand: [LocalVariableAccess] sum
+# 17| getAnOperand/getRightOperand: [AddExpr] ... + ...
+# 17| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] sum
+# 17| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] n
+# 18| getStmt: [AssignSubExpr] ... -= ...
+# 18| getDesugared: [AssignExpr] ... = ...
+# 18| getAnOperand/getLeftOperand: [LocalVariableAccess] foo
+# 18| getAnOperand/getRightOperand: [SubExpr] ... - ...
+# 18| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] foo
+# 18| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] n
# 22| [ForExpr] for ... in ...
# 22| getDesugared: [StmtSequence] ...
# 22| getStmt: [IfExpr] if ...
@@ -721,35 +727,36 @@ control/loops.rb:
# 22| getBlock: [BraceBlock] { ... }
# 22| getParameter: [SimpleParameter] __synth__0__1
# 22| getDefiningAccess: [LocalVariableAccess] __synth__0__1
-# 22| getStmt: [AssignExpr] ... = ...
-# 22| getDesugared: [StmtSequence] ...
-# 22| getStmt: [AssignExpr] ... = ...
-# 22| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__2__1
-# 22| getAnOperand/getRightOperand: [SplatExpr] * ...
-# 22| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] __synth__0__1
-# 22| getStmt: [AssignExpr] ... = ...
-# 22| getAnOperand/getLeftOperand: [LocalVariableAccess] key
-# 22| getAnOperand/getRightOperand: [MethodCall] call to []
-# 22| getReceiver: [LocalVariableAccess] __synth__2__1
-# 22| getArgument: [IntegerLiteral] 0
-# 22| getStmt: [AssignExpr] ... = ...
-# 22| getAnOperand/getLeftOperand: [LocalVariableAccess] value
-# 22| getAnOperand/getRightOperand: [MethodCall] call to []
-# 22| getReceiver: [LocalVariableAccess] __synth__2__1
-# 22| getArgument: [IntegerLiteral] 1
-# 22| getAnOperand/getLeftOperand: [DestructuredLhsExpr] (..., ...)
-# 23| getStmt: [AssignAddExpr] ... += ...
-# 23| getDesugared: [AssignExpr] ... = ...
-# 23| getAnOperand/getLeftOperand: [LocalVariableAccess] sum
-# 23| getAnOperand/getRightOperand: [AddExpr] ... + ...
-# 23| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] sum
-# 23| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] value
-# 24| getStmt: [AssignMulExpr] ... *= ...
-# 24| getDesugared: [AssignExpr] ... = ...
-# 24| getAnOperand/getLeftOperand: [LocalVariableAccess] foo
-# 24| getAnOperand/getRightOperand: [MulExpr] ... * ...
-# 24| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] foo
-# 24| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] value
+# 22| getBody: [StmtSequence] ...
+# 22| getStmt: [AssignExpr] ... = ...
+# 22| getDesugared: [StmtSequence] ...
+# 22| getStmt: [AssignExpr] ... = ...
+# 22| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__2__1
+# 22| getAnOperand/getRightOperand: [SplatExpr] * ...
+# 22| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] __synth__0__1
+# 22| getStmt: [AssignExpr] ... = ...
+# 22| getAnOperand/getLeftOperand: [LocalVariableAccess] key
+# 22| getAnOperand/getRightOperand: [MethodCall] call to []
+# 22| getReceiver: [LocalVariableAccess] __synth__2__1
+# 22| getArgument: [IntegerLiteral] 0
+# 22| getStmt: [AssignExpr] ... = ...
+# 22| getAnOperand/getLeftOperand: [LocalVariableAccess] value
+# 22| getAnOperand/getRightOperand: [MethodCall] call to []
+# 22| getReceiver: [LocalVariableAccess] __synth__2__1
+# 22| getArgument: [IntegerLiteral] 1
+# 22| getAnOperand/getLeftOperand: [DestructuredLhsExpr] (..., ...)
+# 23| getStmt: [AssignAddExpr] ... += ...
+# 23| getDesugared: [AssignExpr] ... = ...
+# 23| getAnOperand/getLeftOperand: [LocalVariableAccess] sum
+# 23| getAnOperand/getRightOperand: [AddExpr] ... + ...
+# 23| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] sum
+# 23| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] value
+# 24| getStmt: [AssignMulExpr] ... *= ...
+# 24| getDesugared: [AssignExpr] ... = ...
+# 24| getAnOperand/getLeftOperand: [LocalVariableAccess] foo
+# 24| getAnOperand/getRightOperand: [MulExpr] ... * ...
+# 24| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] foo
+# 24| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] value
# 28| [ForExpr] for ... in ...
# 28| getDesugared: [StmtSequence] ...
# 28| getStmt: [IfExpr] if ...
@@ -781,36 +788,37 @@ control/loops.rb:
# 28| getBlock: [BraceBlock] { ... }
# 28| getParameter: [SimpleParameter] __synth__0__1
# 28| getDefiningAccess: [LocalVariableAccess] __synth__0__1
-# 28| getStmt: [AssignExpr] ... = ...
-# 28| getDesugared: [StmtSequence] ...
-# 28| getStmt: [AssignExpr] ... = ...
-# 28| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__2__1
-# 28| getAnOperand/getRightOperand: [SplatExpr] * ...
-# 28| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] __synth__0__1
-# 28| getStmt: [AssignExpr] ... = ...
-# 28| getAnOperand/getLeftOperand: [LocalVariableAccess] key
-# 28| getAnOperand/getRightOperand: [MethodCall] call to []
-# 28| getReceiver: [LocalVariableAccess] __synth__2__1
-# 28| getArgument: [IntegerLiteral] 0
-# 28| getStmt: [AssignExpr] ... = ...
-# 28| getAnOperand/getLeftOperand: [LocalVariableAccess] value
-# 28| getAnOperand/getRightOperand: [MethodCall] call to []
-# 28| getReceiver: [LocalVariableAccess] __synth__2__1
-# 28| getArgument: [IntegerLiteral] 1
-# 28| getAnOperand/getLeftOperand: [DestructuredLhsExpr] (..., ...)
-# 29| getStmt: [AssignAddExpr] ... += ...
-# 29| getDesugared: [AssignExpr] ... = ...
-# 29| getAnOperand/getLeftOperand: [LocalVariableAccess] sum
-# 29| getAnOperand/getRightOperand: [AddExpr] ... + ...
-# 29| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] sum
-# 29| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] value
-# 30| getStmt: [AssignDivExpr] ... /= ...
-# 30| getDesugared: [AssignExpr] ... = ...
-# 30| getAnOperand/getLeftOperand: [LocalVariableAccess] foo
-# 30| getAnOperand/getRightOperand: [DivExpr] ... / ...
-# 30| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] foo
-# 30| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] value
-# 31| getStmt: [BreakStmt] break
+# 28| getBody: [StmtSequence] ...
+# 28| getStmt: [AssignExpr] ... = ...
+# 28| getDesugared: [StmtSequence] ...
+# 28| getStmt: [AssignExpr] ... = ...
+# 28| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__2__1
+# 28| getAnOperand/getRightOperand: [SplatExpr] * ...
+# 28| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] __synth__0__1
+# 28| getStmt: [AssignExpr] ... = ...
+# 28| getAnOperand/getLeftOperand: [LocalVariableAccess] key
+# 28| getAnOperand/getRightOperand: [MethodCall] call to []
+# 28| getReceiver: [LocalVariableAccess] __synth__2__1
+# 28| getArgument: [IntegerLiteral] 0
+# 28| getStmt: [AssignExpr] ... = ...
+# 28| getAnOperand/getLeftOperand: [LocalVariableAccess] value
+# 28| getAnOperand/getRightOperand: [MethodCall] call to []
+# 28| getReceiver: [LocalVariableAccess] __synth__2__1
+# 28| getArgument: [IntegerLiteral] 1
+# 28| getAnOperand/getLeftOperand: [DestructuredLhsExpr] (..., ...)
+# 29| getStmt: [AssignAddExpr] ... += ...
+# 29| getDesugared: [AssignExpr] ... = ...
+# 29| getAnOperand/getLeftOperand: [LocalVariableAccess] sum
+# 29| getAnOperand/getRightOperand: [AddExpr] ... + ...
+# 29| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] sum
+# 29| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] value
+# 30| getStmt: [AssignDivExpr] ... /= ...
+# 30| getDesugared: [AssignExpr] ... = ...
+# 30| getAnOperand/getLeftOperand: [LocalVariableAccess] foo
+# 30| getAnOperand/getRightOperand: [DivExpr] ... / ...
+# 30| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] foo
+# 30| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] value
+# 31| getStmt: [BreakStmt] break
# 36| [AssignAddExpr] ... += ...
# 36| getDesugared: [AssignExpr] ... = ...
# 36| getAnOperand/getLeftOperand: [LocalVariableAccess] x
@@ -1090,16 +1098,17 @@ erb/template.html.erb:
# 27| getBlock: [BraceBlock] { ... }
# 27| getParameter: [SimpleParameter] __synth__0__1
# 27| getDefiningAccess: [LocalVariableAccess] __synth__0__1
-# 27| getStmt: [AssignExpr] ... = ...
-# 27| getAnOperand/getLeftOperand: [LocalVariableAccess] x
-# 27| getAnOperand/getRightOperand: [LocalVariableAccess] __synth__0__1
-# 28| getStmt: [AssignAddExpr] ... += ...
-# 28| getDesugared: [AssignExpr] ... = ...
-# 28| getAnOperand/getLeftOperand: [LocalVariableAccess] xs
-# 28| getAnOperand/getRightOperand: [AddExpr] ... + ...
-# 28| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] xs
-# 28| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] x
-# 29| getStmt: [LocalVariableAccess] xs
+# 27| getBody: [StmtSequence] ...
+# 27| getStmt: [AssignExpr] ... = ...
+# 27| getAnOperand/getLeftOperand: [LocalVariableAccess] x
+# 27| getAnOperand/getRightOperand: [LocalVariableAccess] __synth__0__1
+# 28| getStmt: [AssignAddExpr] ... += ...
+# 28| getDesugared: [AssignExpr] ... = ...
+# 28| getAnOperand/getLeftOperand: [LocalVariableAccess] xs
+# 28| getAnOperand/getRightOperand: [AddExpr] ... + ...
+# 28| getAnOperand/getLeftOperand/getReceiver: [LocalVariableAccess] xs
+# 28| getAnOperand/getArgument/getRightOperand: [LocalVariableAccess] x
+# 29| getStmt: [LocalVariableAccess] xs
gems/test.gemspec:
# 2| [AssignExpr] ... = ...
# 2| getDesugared: [StmtSequence] ...
diff --git a/ruby/ql/test/library-tests/modules/methods.expected b/ruby/ql/test/library-tests/modules/methods.expected
index 95ca9e9c260a..272081218c56 100644
--- a/ruby/ql/test/library-tests/modules/methods.expected
+++ b/ruby/ql/test/library-tests/modules/methods.expected
@@ -709,32 +709,40 @@ lookupMethod
| unresolved_subclass.rb:21:1:22:3 | UnresolvedNamespace::X1::X2::X3::A | puts | calls.rb:102:5:102:30 | puts |
| unresolved_subclass.rb:21:1:22:3 | UnresolvedNamespace::X1::X2::X3::A | to_s | calls.rb:172:5:173:7 | to_s |
enclosingMethod
+| calls.rb:2:5:2:14 | ... | calls.rb:1:1:3:3 | foo |
| calls.rb:2:5:2:14 | call to puts | calls.rb:1:1:3:3 | foo |
| calls.rb:2:5:2:14 | self | calls.rb:1:1:3:3 | foo |
| calls.rb:2:10:2:14 | "foo" | calls.rb:1:1:3:3 | foo |
| calls.rb:2:11:2:13 | foo | calls.rb:1:1:3:3 | foo |
+| calls.rb:8:5:8:15 | ... | calls.rb:7:1:9:3 | bar |
| calls.rb:8:5:8:15 | call to puts | calls.rb:7:1:9:3 | bar |
| calls.rb:8:5:8:15 | self | calls.rb:7:1:9:3 | bar |
| calls.rb:8:10:8:15 | "bar1" | calls.rb:7:1:9:3 | bar |
| calls.rb:8:11:8:14 | bar1 | calls.rb:7:1:9:3 | bar |
+| calls.rb:14:5:14:15 | ... | calls.rb:13:1:15:3 | bar |
| calls.rb:14:5:14:15 | call to puts | calls.rb:13:1:15:3 | bar |
| calls.rb:14:5:14:15 | self | calls.rb:13:1:15:3 | bar |
| calls.rb:14:10:14:15 | "bar2" | calls.rb:13:1:15:3 | bar |
| calls.rb:14:11:14:14 | bar2 | calls.rb:13:1:15:3 | bar |
| calls.rb:23:9:23:19 | call to singleton_m | calls.rb:22:5:24:7 | instance_m |
| calls.rb:23:9:23:19 | self | calls.rb:22:5:24:7 | instance_m |
+| calls.rb:23:9:23:35 | ... | calls.rb:22:5:24:7 | instance_m |
| calls.rb:26:9:26:18 | call to instance_m | calls.rb:25:5:27:7 | singleton_m |
| calls.rb:26:9:26:18 | self | calls.rb:25:5:27:7 | singleton_m |
+| calls.rb:26:9:26:34 | ... | calls.rb:25:5:27:7 | singleton_m |
| calls.rb:40:5:40:14 | call to instance_m | calls.rb:39:1:41:3 | call_instance_m |
| calls.rb:40:5:40:14 | self | calls.rb:39:1:41:3 | call_instance_m |
+| calls.rb:40:5:40:30 | ... | calls.rb:39:1:41:3 | call_instance_m |
| calls.rb:52:9:52:18 | call to instance_m | calls.rb:51:5:57:7 | baz |
| calls.rb:52:9:52:18 | self | calls.rb:51:5:57:7 | baz |
+| calls.rb:52:9:56:40 | ... | calls.rb:51:5:57:7 | baz |
| calls.rb:53:9:53:12 | self | calls.rb:51:5:57:7 | baz |
| calls.rb:53:9:53:23 | call to instance_m | calls.rb:51:5:57:7 | baz |
| calls.rb:55:9:55:19 | call to singleton_m | calls.rb:51:5:57:7 | baz |
| calls.rb:55:9:55:19 | self | calls.rb:51:5:57:7 | baz |
| calls.rb:56:9:56:12 | self | calls.rb:51:5:57:7 | baz |
| calls.rb:56:9:56:24 | call to singleton_m | calls.rb:51:5:57:7 | baz |
+| calls.rb:67:9:67:13 | ... | calls.rb:66:5:68:7 | baz |
| calls.rb:67:9:67:13 | super call to baz | calls.rb:66:5:68:7 | baz |
| calls.rb:76:18:76:18 | a | calls.rb:76:1:79:3 | optional_arg |
| calls.rb:76:18:76:18 | a | calls.rb:76:1:79:3 | optional_arg |
@@ -744,12 +752,15 @@ enclosingMethod
| calls.rb:76:28:76:28 | 5 | calls.rb:76:1:79:3 | optional_arg |
| calls.rb:77:5:77:5 | a | calls.rb:76:1:79:3 | optional_arg |
| calls.rb:77:5:77:16 | call to bit_length | calls.rb:76:1:79:3 | optional_arg |
+| calls.rb:77:5:78:16 | ... | calls.rb:76:1:79:3 | optional_arg |
| calls.rb:78:5:78:5 | b | calls.rb:76:1:79:3 | optional_arg |
| calls.rb:78:5:78:16 | call to bit_length | calls.rb:76:1:79:3 | optional_arg |
+| calls.rb:82:5:82:11 | ... | calls.rb:81:1:83:3 | call_block |
| calls.rb:82:5:82:11 | yield ... | calls.rb:81:1:83:3 | call_block |
| calls.rb:82:11:82:11 | 1 | calls.rb:81:1:83:3 | call_block |
| calls.rb:86:5:86:7 | var | calls.rb:85:1:89:3 | foo |
| calls.rb:86:5:86:18 | ... = ... | calls.rb:85:1:89:3 | foo |
+| calls.rb:86:5:88:29 | ... | calls.rb:85:1:89:3 | foo |
| calls.rb:86:11:86:14 | Hash | calls.rb:85:1:89:3 | foo |
| calls.rb:86:11:86:18 | call to new | calls.rb:85:1:89:3 | foo |
| calls.rb:87:5:87:7 | var | calls.rb:85:1:89:3 | foo |
@@ -761,25 +772,30 @@ enclosingMethod
| calls.rb:88:19:88:19 | x | calls.rb:85:1:89:3 | foo |
| calls.rb:88:19:88:19 | x | calls.rb:85:1:89:3 | foo |
| calls.rb:88:22:88:24 | var | calls.rb:85:1:89:3 | foo |
+| calls.rb:88:22:88:27 | ... | calls.rb:85:1:89:3 | foo |
| calls.rb:88:22:88:27 | ...[...] | calls.rb:85:1:89:3 | foo |
| calls.rb:88:26:88:26 | x | calls.rb:85:1:89:3 | foo |
| calls.rb:102:14:102:14 | x | calls.rb:102:5:102:30 | puts |
| calls.rb:102:14:102:14 | x | calls.rb:102:5:102:30 | puts |
+| calls.rb:102:17:102:26 | ... | calls.rb:102:5:102:30 | puts |
| calls.rb:102:17:102:26 | call to old_puts | calls.rb:102:5:102:30 | puts |
| calls.rb:102:17:102:26 | self | calls.rb:102:5:102:30 | puts |
| calls.rb:102:26:102:26 | x | calls.rb:102:5:102:30 | puts |
| calls.rb:108:17:108:17 | x | calls.rb:108:5:110:7 | include |
| calls.rb:108:17:108:17 | x | calls.rb:108:5:110:7 | include |
+| calls.rb:109:9:109:21 | ... | calls.rb:108:5:110:7 | include |
| calls.rb:109:9:109:21 | call to old_include | calls.rb:108:5:110:7 | include |
| calls.rb:109:9:109:21 | self | calls.rb:108:5:110:7 | include |
| calls.rb:109:21:109:21 | x | calls.rb:108:5:110:7 | include |
| calls.rb:122:12:122:12 | x | calls.rb:122:5:122:31 | [] |
| calls.rb:122:12:122:12 | x | calls.rb:122:5:122:31 | [] |
+| calls.rb:122:15:122:27 | ... | calls.rb:122:5:122:31 | [] |
| calls.rb:122:15:122:27 | call to old_lookup | calls.rb:122:5:122:31 | [] |
| calls.rb:122:15:122:27 | self | calls.rb:122:5:122:31 | [] |
| calls.rb:122:26:122:26 | x | calls.rb:122:5:122:31 | [] |
| calls.rb:127:10:127:10 | x | calls.rb:127:3:127:29 | [] |
| calls.rb:127:10:127:10 | x | calls.rb:127:3:127:29 | [] |
+| calls.rb:127:13:127:25 | ... | calls.rb:127:3:127:29 | [] |
| calls.rb:127:13:127:25 | call to old_lookup | calls.rb:127:3:127:29 | [] |
| calls.rb:127:13:127:25 | self | calls.rb:127:3:127:29 | [] |
| calls.rb:127:24:127:24 | x | calls.rb:127:3:127:29 | [] |
@@ -787,6 +803,7 @@ enclosingMethod
| calls.rb:131:16:131:19 | body | calls.rb:131:3:137:5 | foreach |
| calls.rb:132:5:132:5 | x | calls.rb:131:3:137:5 | foreach |
| calls.rb:132:5:132:9 | ... = ... | calls.rb:131:3:137:5 | foreach |
+| calls.rb:132:5:136:7 | ... | calls.rb:131:3:137:5 | foreach |
| calls.rb:132:9:132:9 | 0 | calls.rb:131:3:137:5 | foreach |
| calls.rb:133:5:136:7 | while ... | calls.rb:131:3:137:5 | foreach |
| calls.rb:133:11:133:11 | x | calls.rb:131:3:137:5 | foreach |
@@ -805,65 +822,80 @@ enclosingMethod
| calls.rb:135:9:135:14 | ... = ... | calls.rb:131:3:137:5 | foreach |
| calls.rb:135:11:135:12 | ... + ... | calls.rb:131:3:137:5 | foreach |
| calls.rb:135:14:135:14 | 1 | calls.rb:131:3:137:5 | foreach |
+| calls.rb:141:5:141:20 | ... | calls.rb:140:1:142:3 | funny |
| calls.rb:141:5:141:20 | yield ... | calls.rb:140:1:142:3 | funny |
| calls.rb:141:11:141:20 | "prefix: " | calls.rb:140:1:142:3 | funny |
| calls.rb:141:12:141:19 | prefix: | calls.rb:140:1:142:3 | funny |
| calls.rb:158:14:158:15 | &b | calls.rb:158:1:160:3 | indirect |
| calls.rb:158:15:158:15 | b | calls.rb:158:1:160:3 | indirect |
+| calls.rb:159:5:159:17 | ... | calls.rb:158:1:160:3 | indirect |
| calls.rb:159:5:159:17 | call to call_block | calls.rb:158:1:160:3 | indirect |
| calls.rb:159:5:159:17 | self | calls.rb:158:1:160:3 | indirect |
| calls.rb:159:16:159:17 | &... | calls.rb:158:1:160:3 | indirect |
| calls.rb:159:17:159:17 | b | calls.rb:158:1:160:3 | indirect |
| calls.rb:167:9:167:12 | self | calls.rb:166:5:168:7 | s_method |
+| calls.rb:167:9:167:17 | ... | calls.rb:166:5:168:7 | s_method |
| calls.rb:167:9:167:17 | call to to_s | calls.rb:166:5:168:7 | s_method |
| calls.rb:192:9:192:26 | call to puts | calls.rb:191:5:194:7 | singleton_a |
| calls.rb:192:9:192:26 | self | calls.rb:191:5:194:7 | singleton_a |
+| calls.rb:192:9:193:24 | ... | calls.rb:191:5:194:7 | singleton_a |
| calls.rb:192:14:192:26 | "singleton_a" | calls.rb:191:5:194:7 | singleton_a |
| calls.rb:192:15:192:25 | singleton_a | calls.rb:191:5:194:7 | singleton_a |
| calls.rb:193:9:193:12 | self | calls.rb:191:5:194:7 | singleton_a |
| calls.rb:193:9:193:24 | call to singleton_b | calls.rb:191:5:194:7 | singleton_a |
| calls.rb:197:9:197:26 | call to puts | calls.rb:196:5:199:7 | singleton_b |
| calls.rb:197:9:197:26 | self | calls.rb:196:5:199:7 | singleton_b |
+| calls.rb:197:9:198:24 | ... | calls.rb:196:5:199:7 | singleton_b |
| calls.rb:197:14:197:26 | "singleton_b" | calls.rb:196:5:199:7 | singleton_b |
| calls.rb:197:15:197:25 | singleton_b | calls.rb:196:5:199:7 | singleton_b |
| calls.rb:198:9:198:12 | self | calls.rb:196:5:199:7 | singleton_b |
| calls.rb:198:9:198:24 | call to singleton_c | calls.rb:196:5:199:7 | singleton_b |
+| calls.rb:202:9:202:26 | ... | calls.rb:201:5:203:7 | singleton_c |
| calls.rb:202:9:202:26 | call to puts | calls.rb:201:5:203:7 | singleton_c |
| calls.rb:202:9:202:26 | self | calls.rb:201:5:203:7 | singleton_c |
| calls.rb:202:14:202:26 | "singleton_c" | calls.rb:201:5:203:7 | singleton_c |
| calls.rb:202:15:202:25 | singleton_c | calls.rb:201:5:203:7 | singleton_c |
| calls.rb:206:9:206:26 | call to puts | calls.rb:205:5:208:7 | singleton_d |
| calls.rb:206:9:206:26 | self | calls.rb:205:5:208:7 | singleton_d |
+| calls.rb:206:9:207:24 | ... | calls.rb:205:5:208:7 | singleton_d |
| calls.rb:206:14:206:26 | "singleton_d" | calls.rb:205:5:208:7 | singleton_d |
| calls.rb:206:15:206:25 | singleton_d | calls.rb:205:5:208:7 | singleton_d |
| calls.rb:207:9:207:12 | self | calls.rb:205:5:208:7 | singleton_d |
| calls.rb:207:9:207:24 | call to singleton_a | calls.rb:205:5:208:7 | singleton_d |
| calls.rb:211:9:213:11 | singleton_e | calls.rb:210:5:215:7 | instance |
+| calls.rb:211:9:214:19 | ... | calls.rb:210:5:215:7 | instance |
| calls.rb:211:13:211:16 | self | calls.rb:210:5:215:7 | instance |
+| calls.rb:212:13:212:30 | ... | calls.rb:211:9:213:11 | singleton_e |
| calls.rb:212:13:212:30 | call to puts | calls.rb:211:9:213:11 | singleton_e |
| calls.rb:212:13:212:30 | self | calls.rb:211:9:213:11 | singleton_e |
| calls.rb:212:18:212:30 | "singleton_e" | calls.rb:211:9:213:11 | singleton_e |
| calls.rb:212:19:212:29 | singleton_e | calls.rb:211:9:213:11 | singleton_e |
| calls.rb:214:9:214:19 | call to singleton_e | calls.rb:210:5:215:7 | instance |
| calls.rb:214:9:214:19 | self | calls.rb:210:5:215:7 | instance |
+| calls.rb:219:13:219:30 | ... | calls.rb:218:9:220:11 | singleton_f |
| calls.rb:219:13:219:30 | call to puts | calls.rb:218:9:220:11 | singleton_f |
| calls.rb:219:13:219:30 | self | calls.rb:218:9:220:11 | singleton_f |
| calls.rb:219:18:219:30 | "singleton_f" | calls.rb:218:9:220:11 | singleton_f |
| calls.rb:219:19:219:29 | singleton_f | calls.rb:218:9:220:11 | singleton_f |
| calls.rb:224:9:224:12 | self | calls.rb:223:5:225:7 | call_singleton_g |
+| calls.rb:224:9:224:24 | ... | calls.rb:223:5:225:7 | call_singleton_g |
| calls.rb:224:9:224:24 | call to singleton_g | calls.rb:223:5:225:7 | call_singleton_g |
+| calls.rb:237:5:237:24 | ... | calls.rb:236:1:238:3 | singleton_g |
| calls.rb:237:5:237:24 | call to puts | calls.rb:236:1:238:3 | singleton_g |
| calls.rb:237:5:237:24 | self | calls.rb:236:1:238:3 | singleton_g |
| calls.rb:237:10:237:24 | "singleton_g_1" | calls.rb:236:1:238:3 | singleton_g |
| calls.rb:237:11:237:23 | singleton_g_1 | calls.rb:236:1:238:3 | singleton_g |
+| calls.rb:244:5:244:24 | ... | calls.rb:243:1:245:3 | singleton_g |
| calls.rb:244:5:244:24 | call to puts | calls.rb:243:1:245:3 | singleton_g |
| calls.rb:244:5:244:24 | self | calls.rb:243:1:245:3 | singleton_g |
| calls.rb:244:10:244:24 | "singleton_g_2" | calls.rb:243:1:245:3 | singleton_g |
| calls.rb:244:11:244:23 | singleton_g_2 | calls.rb:243:1:245:3 | singleton_g |
+| calls.rb:252:9:252:28 | ... | calls.rb:251:5:253:7 | singleton_g |
| calls.rb:252:9:252:28 | call to puts | calls.rb:251:5:253:7 | singleton_g |
| calls.rb:252:9:252:28 | self | calls.rb:251:5:253:7 | singleton_g |
| calls.rb:252:14:252:28 | "singleton_g_3" | calls.rb:251:5:253:7 | singleton_g |
| calls.rb:252:15:252:27 | singleton_g_3 | calls.rb:251:5:253:7 | singleton_g |
+| calls.rb:268:5:268:22 | ... | calls.rb:267:1:269:3 | singleton_g |
| calls.rb:268:5:268:22 | call to puts | calls.rb:267:1:269:3 | singleton_g |
| calls.rb:268:5:268:22 | self | calls.rb:267:1:269:3 | singleton_g |
| calls.rb:268:10:268:22 | "singleton_g" | calls.rb:267:1:269:3 | singleton_g |
@@ -873,24 +905,29 @@ enclosingMethod
| calls.rb:279:5:279:8 | type | calls.rb:278:1:286:3 | create |
| calls.rb:279:5:279:12 | call to new | calls.rb:278:1:286:3 | create |
| calls.rb:279:5:279:21 | call to instance | calls.rb:278:1:286:3 | create |
+| calls.rb:279:5:285:20 | ... | calls.rb:278:1:286:3 | create |
| calls.rb:281:5:283:7 | singleton_h | calls.rb:278:1:286:3 | create |
| calls.rb:281:9:281:12 | type | calls.rb:278:1:286:3 | create |
+| calls.rb:282:9:282:26 | ... | calls.rb:281:5:283:7 | singleton_h |
| calls.rb:282:9:282:26 | call to puts | calls.rb:281:5:283:7 | singleton_h |
| calls.rb:282:9:282:26 | self | calls.rb:281:5:283:7 | singleton_h |
| calls.rb:282:14:282:26 | "singleton_h" | calls.rb:281:5:283:7 | singleton_h |
| calls.rb:282:15:282:25 | singleton_h | calls.rb:281:5:283:7 | singleton_h |
| calls.rb:285:5:285:8 | type | calls.rb:278:1:286:3 | create |
| calls.rb:285:5:285:20 | call to singleton_h | calls.rb:278:1:286:3 | create |
+| calls.rb:295:9:295:26 | ... | calls.rb:294:5:296:7 | singleton_i |
| calls.rb:295:9:295:26 | call to puts | calls.rb:294:5:296:7 | singleton_i |
| calls.rb:295:9:295:26 | self | calls.rb:294:5:296:7 | singleton_i |
| calls.rb:295:14:295:26 | "singleton_i" | calls.rb:294:5:296:7 | singleton_i |
| calls.rb:295:15:295:25 | singleton_i | calls.rb:294:5:296:7 | singleton_i |
+| calls.rb:304:9:304:26 | ... | calls.rb:303:5:305:7 | singleton_j |
| calls.rb:304:9:304:26 | call to puts | calls.rb:303:5:305:7 | singleton_j |
| calls.rb:304:9:304:26 | self | calls.rb:303:5:305:7 | singleton_j |
| calls.rb:304:14:304:26 | "singleton_j" | calls.rb:303:5:305:7 | singleton_j |
| calls.rb:304:15:304:25 | singleton_j | calls.rb:303:5:305:7 | singleton_j |
| calls.rb:312:9:312:31 | call to puts | calls.rb:311:5:314:7 | instance |
| calls.rb:312:9:312:31 | self | calls.rb:311:5:314:7 | instance |
+| calls.rb:312:9:313:36 | ... | calls.rb:311:5:314:7 | instance |
| calls.rb:312:14:312:31 | "SelfNew#instance" | calls.rb:311:5:314:7 | instance |
| calls.rb:312:15:312:30 | SelfNew#instance | calls.rb:311:5:314:7 | instance |
| calls.rb:313:9:313:11 | call to new | calls.rb:311:5:314:7 | instance |
@@ -898,16 +935,21 @@ enclosingMethod
| calls.rb:313:9:313:20 | call to instance | calls.rb:311:5:314:7 | instance |
| calls.rb:317:9:317:11 | call to new | calls.rb:316:5:318:7 | singleton |
| calls.rb:317:9:317:11 | self | calls.rb:316:5:318:7 | singleton |
+| calls.rb:317:9:317:20 | ... | calls.rb:316:5:318:7 | singleton |
| calls.rb:317:9:317:20 | call to instance | calls.rb:316:5:318:7 | singleton |
+| calls.rb:327:9:327:26 | ... | calls.rb:326:5:328:7 | instance |
| calls.rb:327:9:327:26 | call to puts | calls.rb:326:5:328:7 | instance |
| calls.rb:327:9:327:26 | self | calls.rb:326:5:328:7 | instance |
| calls.rb:327:14:327:26 | "C1#instance" | calls.rb:326:5:328:7 | instance |
| calls.rb:327:15:327:25 | C1#instance | calls.rb:326:5:328:7 | instance |
+| calls.rb:331:9:331:12 | ... | calls.rb:330:5:332:7 | return_self |
| calls.rb:331:9:331:12 | self | calls.rb:330:5:332:7 | return_self |
+| calls.rb:337:9:337:26 | ... | calls.rb:336:5:338:7 | instance |
| calls.rb:337:9:337:26 | call to puts | calls.rb:336:5:338:7 | instance |
| calls.rb:337:9:337:26 | self | calls.rb:336:5:338:7 | instance |
| calls.rb:337:14:337:26 | "C2#instance" | calls.rb:336:5:338:7 | instance |
| calls.rb:337:15:337:25 | C2#instance | calls.rb:336:5:338:7 | instance |
+| calls.rb:343:9:343:26 | ... | calls.rb:342:5:344:7 | instance |
| calls.rb:343:9:343:26 | call to puts | calls.rb:342:5:344:7 | instance |
| calls.rb:343:9:343:26 | self | calls.rb:342:5:344:7 | instance |
| calls.rb:343:14:343:26 | "C3#instance" | calls.rb:342:5:344:7 | instance |
@@ -915,6 +957,7 @@ enclosingMethod
| calls.rb:347:22:347:22 | x | calls.rb:347:1:363:3 | pattern_dispatch |
| calls.rb:347:22:347:22 | x | calls.rb:347:1:363:3 | pattern_dispatch |
| calls.rb:348:5:356:7 | case ... | calls.rb:347:1:363:3 | pattern_dispatch |
+| calls.rb:348:5:362:7 | ... | calls.rb:347:1:363:3 | pattern_dispatch |
| calls.rb:348:10:348:10 | x | calls.rb:347:1:363:3 | pattern_dispatch |
| calls.rb:349:5:350:18 | when ... | calls.rb:347:1:363:3 | pattern_dispatch |
| calls.rb:349:10:349:11 | C3 | calls.rb:347:1:363:3 | pattern_dispatch |
@@ -955,89 +998,111 @@ enclosingMethod
| calls.rb:361:26:361:36 | call to instance | calls.rb:347:1:363:3 | pattern_dispatch |
| calls.rb:374:19:374:19 | x | calls.rb:374:1:378:3 | add_singleton |
| calls.rb:374:19:374:19 | x | calls.rb:374:1:378:3 | add_singleton |
+| calls.rb:375:5:377:7 | ... | calls.rb:374:1:378:3 | add_singleton |
| calls.rb:375:5:377:7 | instance | calls.rb:374:1:378:3 | add_singleton |
| calls.rb:375:9:375:9 | x | calls.rb:374:1:378:3 | add_singleton |
+| calls.rb:376:9:376:28 | ... | calls.rb:375:5:377:7 | instance |
| calls.rb:376:9:376:28 | call to puts | calls.rb:375:5:377:7 | instance |
| calls.rb:376:9:376:28 | self | calls.rb:375:5:377:7 | instance |
| calls.rb:376:14:376:28 | "instance_on x" | calls.rb:375:5:377:7 | instance |
| calls.rb:376:15:376:27 | instance_on x | calls.rb:375:5:377:7 | instance |
+| calls.rb:388:13:388:48 | ... | calls.rb:387:9:389:11 | singleton1 |
| calls.rb:388:13:388:48 | call to puts | calls.rb:387:9:389:11 | singleton1 |
| calls.rb:388:13:388:48 | self | calls.rb:387:9:389:11 | singleton1 |
| calls.rb:388:18:388:48 | "SingletonOverride1#singleton1" | calls.rb:387:9:389:11 | singleton1 |
| calls.rb:388:19:388:47 | SingletonOverride1#singleton1 | calls.rb:387:9:389:11 | singleton1 |
+| calls.rb:392:13:392:22 | ... | calls.rb:391:9:393:11 | call_singleton1 |
| calls.rb:392:13:392:22 | call to singleton1 | calls.rb:391:9:393:11 | call_singleton1 |
| calls.rb:392:13:392:22 | self | calls.rb:391:9:393:11 | call_singleton1 |
| calls.rb:396:13:396:16 | self | calls.rb:395:9:397:11 | factory |
| calls.rb:396:13:396:20 | call to new | calls.rb:395:9:397:11 | factory |
+| calls.rb:396:13:396:30 | ... | calls.rb:395:9:397:11 | factory |
| calls.rb:396:13:396:30 | call to instance1 | calls.rb:395:9:397:11 | factory |
+| calls.rb:401:9:401:44 | ... | calls.rb:400:5:402:7 | singleton2 |
| calls.rb:401:9:401:44 | call to puts | calls.rb:400:5:402:7 | singleton2 |
| calls.rb:401:9:401:44 | self | calls.rb:400:5:402:7 | singleton2 |
| calls.rb:401:14:401:44 | "SingletonOverride1#singleton2" | calls.rb:400:5:402:7 | singleton2 |
| calls.rb:401:15:401:43 | SingletonOverride1#singleton2 | calls.rb:400:5:402:7 | singleton2 |
+| calls.rb:405:9:405:18 | ... | calls.rb:404:5:406:7 | call_singleton2 |
| calls.rb:405:9:405:18 | call to singleton2 | calls.rb:404:5:406:7 | call_singleton2 |
| calls.rb:405:9:405:18 | self | calls.rb:404:5:406:7 | call_singleton2 |
+| calls.rb:411:9:411:43 | ... | calls.rb:410:5:412:7 | instance1 |
| calls.rb:411:9:411:43 | call to puts | calls.rb:410:5:412:7 | instance1 |
| calls.rb:411:9:411:43 | self | calls.rb:410:5:412:7 | instance1 |
| calls.rb:411:14:411:43 | "SingletonOverride1#instance1" | calls.rb:410:5:412:7 | instance1 |
| calls.rb:411:15:411:42 | SingletonOverride1#instance1 | calls.rb:410:5:412:7 | instance1 |
+| calls.rb:423:13:423:48 | ... | calls.rb:422:9:424:11 | singleton1 |
| calls.rb:423:13:423:48 | call to puts | calls.rb:422:9:424:11 | singleton1 |
| calls.rb:423:13:423:48 | self | calls.rb:422:9:424:11 | singleton1 |
| calls.rb:423:18:423:48 | "SingletonOverride2#singleton1" | calls.rb:422:9:424:11 | singleton1 |
| calls.rb:423:19:423:47 | SingletonOverride2#singleton1 | calls.rb:422:9:424:11 | singleton1 |
+| calls.rb:428:9:428:44 | ... | calls.rb:427:5:429:7 | singleton2 |
| calls.rb:428:9:428:44 | call to puts | calls.rb:427:5:429:7 | singleton2 |
| calls.rb:428:9:428:44 | self | calls.rb:427:5:429:7 | singleton2 |
| calls.rb:428:14:428:44 | "SingletonOverride2#singleton2" | calls.rb:427:5:429:7 | singleton2 |
| calls.rb:428:15:428:43 | SingletonOverride2#singleton2 | calls.rb:427:5:429:7 | singleton2 |
+| calls.rb:432:9:432:43 | ... | calls.rb:431:5:433:7 | instance1 |
| calls.rb:432:9:432:43 | call to puts | calls.rb:431:5:433:7 | instance1 |
| calls.rb:432:9:432:43 | self | calls.rb:431:5:433:7 | instance1 |
| calls.rb:432:14:432:43 | "SingletonOverride2#instance1" | calls.rb:431:5:433:7 | instance1 |
| calls.rb:432:15:432:42 | SingletonOverride2#instance1 | calls.rb:431:5:433:7 | instance1 |
+| calls.rb:444:13:444:48 | ... | calls.rb:443:9:445:11 | m1 |
| calls.rb:444:13:444:48 | call to puts | calls.rb:443:9:445:11 | m1 |
| calls.rb:444:13:444:48 | self | calls.rb:443:9:445:11 | m1 |
| calls.rb:444:18:444:48 | "ConditionalInstanceMethods#m1" | calls.rb:443:9:445:11 | m1 |
| calls.rb:444:19:444:47 | ConditionalInstanceMethods#m1 | calls.rb:443:9:445:11 | m1 |
| calls.rb:449:9:449:44 | call to puts | calls.rb:448:5:460:7 | m2 |
| calls.rb:449:9:449:44 | self | calls.rb:448:5:460:7 | m2 |
+| calls.rb:449:9:459:10 | ... | calls.rb:448:5:460:7 | m2 |
| calls.rb:449:14:449:44 | "ConditionalInstanceMethods#m2" | calls.rb:448:5:460:7 | m2 |
| calls.rb:449:15:449:43 | ConditionalInstanceMethods#m2 | calls.rb:448:5:460:7 | m2 |
| calls.rb:451:9:457:11 | m3 | calls.rb:448:5:460:7 | m2 |
| calls.rb:452:13:452:48 | call to puts | calls.rb:451:9:457:11 | m3 |
| calls.rb:452:13:452:48 | self | calls.rb:451:9:457:11 | m3 |
+| calls.rb:452:13:456:15 | ... | calls.rb:451:9:457:11 | m3 |
| calls.rb:452:18:452:48 | "ConditionalInstanceMethods#m3" | calls.rb:451:9:457:11 | m3 |
| calls.rb:452:19:452:47 | ConditionalInstanceMethods#m3 | calls.rb:451:9:457:11 | m3 |
| calls.rb:454:13:456:15 | m4 | calls.rb:451:9:457:11 | m3 |
+| calls.rb:455:17:455:52 | ... | calls.rb:454:13:456:15 | m4 |
| calls.rb:455:17:455:52 | call to puts | calls.rb:454:13:456:15 | m4 |
| calls.rb:455:17:455:52 | self | calls.rb:454:13:456:15 | m4 |
| calls.rb:455:22:455:52 | "ConditionalInstanceMethods#m4" | calls.rb:454:13:456:15 | m4 |
| calls.rb:455:23:455:51 | ConditionalInstanceMethods#m4 | calls.rb:454:13:456:15 | m4 |
| calls.rb:459:9:459:10 | call to m3 | calls.rb:448:5:460:7 | m2 |
| calls.rb:459:9:459:10 | self | calls.rb:448:5:460:7 | m2 |
+| calls.rb:465:17:465:40 | ... | calls.rb:464:13:466:15 | m5 |
| calls.rb:465:17:465:40 | call to puts | calls.rb:464:13:466:15 | m5 |
| calls.rb:465:17:465:40 | self | calls.rb:464:13:466:15 | m5 |
| calls.rb:465:22:465:40 | "AnonymousClass#m5" | calls.rb:464:13:466:15 | m5 |
| calls.rb:465:23:465:39 | AnonymousClass#m5 | calls.rb:464:13:466:15 | m5 |
+| calls.rb:481:13:481:22 | ... | calls.rb:480:9:482:11 | foo |
| calls.rb:481:13:481:22 | call to puts | calls.rb:480:9:482:11 | foo |
| calls.rb:481:13:481:22 | self | calls.rb:480:9:482:11 | foo |
| calls.rb:481:18:481:22 | "foo" | calls.rb:480:9:482:11 | foo |
| calls.rb:481:19:481:21 | foo | calls.rb:480:9:482:11 | foo |
+| calls.rb:487:13:487:22 | ... | calls.rb:486:9:488:11 | bar |
| calls.rb:487:13:487:22 | call to puts | calls.rb:486:9:488:11 | bar |
| calls.rb:487:13:487:22 | self | calls.rb:486:9:488:11 | bar |
| calls.rb:487:18:487:22 | "bar" | calls.rb:486:9:488:11 | bar |
| calls.rb:487:19:487:21 | bar | calls.rb:486:9:488:11 | bar |
+| calls.rb:506:9:506:46 | ... | calls.rb:505:5:507:7 | singleton |
| calls.rb:506:9:506:46 | call to puts | calls.rb:505:5:507:7 | singleton |
| calls.rb:506:9:506:46 | self | calls.rb:505:5:507:7 | singleton |
| calls.rb:506:14:506:46 | "ExtendSingletonMethod#singleton" | calls.rb:505:5:507:7 | singleton |
| calls.rb:506:15:506:45 | ExtendSingletonMethod#singleton | calls.rb:505:5:507:7 | singleton |
+| calls.rb:535:9:535:42 | ... | calls.rb:534:15:536:7 | foo |
| calls.rb:535:9:535:42 | call to puts | calls.rb:534:15:536:7 | foo |
| calls.rb:535:9:535:42 | self | calls.rb:534:15:536:7 | foo |
| calls.rb:535:14:535:42 | "ProtectedMethodInModule#foo" | calls.rb:534:15:536:7 | foo |
| calls.rb:535:15:535:41 | ProtectedMethodInModule#foo | calls.rb:534:15:536:7 | foo |
+| calls.rb:543:9:543:35 | ... | calls.rb:542:15:544:7 | bar |
| calls.rb:543:9:543:35 | call to puts | calls.rb:542:15:544:7 | bar |
| calls.rb:543:9:543:35 | self | calls.rb:542:15:544:7 | bar |
| calls.rb:543:14:543:35 | "ProtectedMethods#bar" | calls.rb:542:15:544:7 | bar |
| calls.rb:543:15:543:34 | ProtectedMethods#bar | calls.rb:542:15:544:7 | bar |
| calls.rb:547:9:547:11 | call to foo | calls.rb:546:5:551:7 | baz |
| calls.rb:547:9:547:11 | self | calls.rb:546:5:551:7 | baz |
+| calls.rb:547:9:550:32 | ... | calls.rb:546:5:551:7 | baz |
| calls.rb:548:9:548:11 | call to bar | calls.rb:546:5:551:7 | baz |
| calls.rb:548:9:548:11 | self | calls.rb:546:5:551:7 | baz |
| calls.rb:549:9:549:24 | ProtectedMethods | calls.rb:546:5:551:7 | baz |
@@ -1048,28 +1113,39 @@ enclosingMethod
| calls.rb:550:9:550:32 | call to bar | calls.rb:546:5:551:7 | baz |
| calls.rb:560:9:560:11 | call to foo | calls.rb:559:5:562:7 | baz |
| calls.rb:560:9:560:11 | self | calls.rb:559:5:562:7 | baz |
+| calls.rb:560:9:561:35 | ... | calls.rb:559:5:562:7 | baz |
| calls.rb:561:9:561:27 | ProtectedMethodsSub | calls.rb:559:5:562:7 | baz |
| calls.rb:561:9:561:31 | call to new | calls.rb:559:5:562:7 | baz |
| calls.rb:561:9:561:35 | call to foo | calls.rb:559:5:562:7 | baz |
| calls.rb:580:9:580:17 | call to singleton | calls.rb:579:5:582:7 | mid_method |
| calls.rb:580:9:580:17 | self | calls.rb:579:5:582:7 | mid_method |
+| calls.rb:580:9:581:35 | ... | calls.rb:579:5:582:7 | mid_method |
| calls.rb:581:9:581:18 | call to singleton2 | calls.rb:579:5:582:7 | mid_method |
| calls.rb:581:9:581:18 | self | calls.rb:579:5:582:7 | mid_method |
+| calls.rb:596:9:596:18 | ... | calls.rb:595:5:597:7 | call_singleton1 |
| calls.rb:596:9:596:18 | call to singleton1 | calls.rb:595:5:597:7 | call_singleton1 |
| calls.rb:596:9:596:18 | self | calls.rb:595:5:597:7 | call_singleton1 |
+| calls.rb:600:9:600:23 | ... | calls.rb:599:5:601:7 | call_call_singleton1 |
| calls.rb:600:9:600:23 | call to call_singleton1 | calls.rb:599:5:601:7 | call_call_singleton1 |
| calls.rb:600:9:600:23 | self | calls.rb:599:5:601:7 | call_call_singleton1 |
| calls.rb:609:9:609:18 | call to singleton1 | calls.rb:608:5:610:7 | call_singleton1 |
| calls.rb:609:9:609:18 | self | calls.rb:608:5:610:7 | call_singleton1 |
+| calls.rb:609:9:609:105 | ... | calls.rb:608:5:610:7 | call_singleton1 |
| calls.rb:618:9:618:18 | call to singleton1 | calls.rb:617:5:619:7 | call_singleton1 |
| calls.rb:618:9:618:18 | self | calls.rb:617:5:619:7 | call_singleton1 |
+| calls.rb:618:9:618:105 | ... | calls.rb:617:5:619:7 | call_singleton1 |
| calls.rb:628:9:628:12 | self | calls.rb:627:5:629:7 | foo |
+| calls.rb:628:9:628:16 | ... | calls.rb:627:5:629:7 | foo |
| calls.rb:628:9:628:16 | call to bar | calls.rb:627:5:629:7 | foo |
+| calls.rb:637:9:637:13 | ... | calls.rb:636:5:638:7 | bar |
| calls.rb:637:9:637:13 | super call to bar | calls.rb:636:5:638:7 | bar |
| calls.rb:643:9:643:10 | C1 | calls.rb:642:5:644:7 | new |
+| calls.rb:643:9:643:14 | ... | calls.rb:642:5:644:7 | new |
| calls.rb:643:9:643:14 | call to new | calls.rb:642:5:644:7 | new |
| calls.rb:651:9:651:12 | self | calls.rb:650:5:652:7 | new |
+| calls.rb:651:9:651:21 | ... | calls.rb:650:5:652:7 | new |
| calls.rb:651:9:651:21 | call to allocate | calls.rb:650:5:652:7 | new |
+| calls.rb:655:9:655:34 | ... | calls.rb:654:5:656:7 | instance |
| calls.rb:655:9:655:34 | call to puts | calls.rb:654:5:656:7 | instance |
| calls.rb:655:9:655:34 | self | calls.rb:654:5:656:7 | instance |
| calls.rb:655:14:655:34 | "CustomNew2#instance" | calls.rb:654:5:656:7 | instance |
@@ -1079,27 +1155,34 @@ enclosingMethod
| calls.rb:662:5:662:11 | Array | calls.rb:661:1:665:3 | capture_parameter |
| calls.rb:662:5:662:11 | [...] | calls.rb:661:1:665:3 | capture_parameter |
| calls.rb:662:5:662:11 | call to [] | calls.rb:661:1:665:3 | capture_parameter |
+| calls.rb:662:5:664:7 | ... | calls.rb:661:1:665:3 | capture_parameter |
| calls.rb:662:5:664:7 | call to each | calls.rb:661:1:665:3 | capture_parameter |
| calls.rb:662:6:662:6 | 0 | calls.rb:661:1:665:3 | capture_parameter |
| calls.rb:662:8:662:8 | 1 | calls.rb:661:1:665:3 | capture_parameter |
| calls.rb:662:10:662:10 | 2 | calls.rb:661:1:665:3 | capture_parameter |
| calls.rb:662:18:664:7 | do ... end | calls.rb:661:1:665:3 | capture_parameter |
+| calls.rb:663:9:663:9 | ... | calls.rb:661:1:665:3 | capture_parameter |
| calls.rb:663:9:663:9 | x | calls.rb:661:1:665:3 | capture_parameter |
| element_reference.rb:2:12:2:12 | x | element_reference.rb:2:5:4:7 | [] |
| element_reference.rb:2:12:2:12 | x | element_reference.rb:2:5:4:7 | [] |
+| element_reference.rb:3:9:3:19 | ... | element_reference.rb:2:5:4:7 | [] |
| element_reference.rb:3:9:3:19 | yield ... | element_reference.rb:2:5:4:7 | [] |
| element_reference.rb:3:15:3:15 | x | element_reference.rb:2:5:4:7 | [] |
| element_reference.rb:3:15:3:19 | ... + ... | element_reference.rb:2:5:4:7 | [] |
| element_reference.rb:3:19:3:19 | 1 | element_reference.rb:2:5:4:7 | [] |
+| hello.rb:3:9:3:22 | ... | hello.rb:2:5:4:7 | hello |
| hello.rb:3:9:3:22 | return | hello.rb:2:5:4:7 | hello |
| hello.rb:3:16:3:22 | "hello" | hello.rb:2:5:4:7 | hello |
| hello.rb:3:17:3:21 | hello | hello.rb:2:5:4:7 | hello |
+| hello.rb:6:9:6:22 | ... | hello.rb:5:5:7:7 | world |
| hello.rb:6:9:6:22 | return | hello.rb:5:5:7:7 | world |
| hello.rb:6:16:6:22 | "world" | hello.rb:5:5:7:7 | world |
| hello.rb:6:17:6:21 | world | hello.rb:5:5:7:7 | world |
+| hello.rb:14:9:14:20 | ... | hello.rb:13:5:15:7 | message |
| hello.rb:14:9:14:20 | return | hello.rb:13:5:15:7 | message |
| hello.rb:14:16:14:20 | call to hello | hello.rb:13:5:15:7 | message |
| hello.rb:14:16:14:20 | self | hello.rb:13:5:15:7 | message |
+| hello.rb:20:9:20:40 | ... | hello.rb:19:5:21:7 | message |
| hello.rb:20:9:20:40 | return | hello.rb:19:5:21:7 | message |
| hello.rb:20:16:20:20 | super call to message | hello.rb:19:5:21:7 | message |
| hello.rb:20:16:20:26 | ... + ... | hello.rb:19:5:21:7 | message |
@@ -1113,32 +1196,40 @@ enclosingMethod
| hello.rb:20:39:20:39 | ! | hello.rb:19:5:21:7 | message |
| instance_fields.rb:4:13:4:18 | @field | instance_fields.rb:3:9:5:11 | create |
| instance_fields.rb:4:13:4:18 | self | instance_fields.rb:3:9:5:11 | create |
+| instance_fields.rb:4:13:4:35 | ... | instance_fields.rb:3:9:5:11 | create |
| instance_fields.rb:4:13:4:35 | ... = ... | instance_fields.rb:3:9:5:11 | create |
| instance_fields.rb:4:22:4:31 | A_target | instance_fields.rb:3:9:5:11 | create |
| instance_fields.rb:4:22:4:35 | call to new | instance_fields.rb:3:9:5:11 | create |
| instance_fields.rb:7:13:7:18 | @field | instance_fields.rb:6:9:8:11 | use |
| instance_fields.rb:7:13:7:18 | self | instance_fields.rb:6:9:8:11 | use |
+| instance_fields.rb:7:13:7:25 | ... | instance_fields.rb:6:9:8:11 | use |
| instance_fields.rb:7:13:7:25 | call to target | instance_fields.rb:6:9:8:11 | use |
| instance_fields.rb:19:13:19:18 | @field | instance_fields.rb:18:9:20:11 | create |
| instance_fields.rb:19:13:19:18 | self | instance_fields.rb:18:9:20:11 | create |
+| instance_fields.rb:19:13:19:35 | ... | instance_fields.rb:18:9:20:11 | create |
| instance_fields.rb:19:13:19:35 | ... = ... | instance_fields.rb:18:9:20:11 | create |
| instance_fields.rb:19:22:19:31 | B_target | instance_fields.rb:18:9:20:11 | create |
| instance_fields.rb:19:22:19:35 | call to new | instance_fields.rb:18:9:20:11 | create |
| instance_fields.rb:22:13:22:18 | @field | instance_fields.rb:21:9:23:11 | use |
| instance_fields.rb:22:13:22:18 | self | instance_fields.rb:21:9:23:11 | use |
+| instance_fields.rb:22:13:22:25 | ... | instance_fields.rb:21:9:23:11 | use |
| instance_fields.rb:22:13:22:25 | call to target | instance_fields.rb:21:9:23:11 | use |
+| private.rb:84:7:84:32 | ... | private.rb:83:11:85:5 | m1 |
| private.rb:84:7:84:32 | call to puts | private.rb:83:11:85:5 | m1 |
| private.rb:84:7:84:32 | self | private.rb:83:11:85:5 | m1 |
| private.rb:84:12:84:32 | "PrivateOverride1#m1" | private.rb:83:11:85:5 | m1 |
| private.rb:84:13:84:31 | PrivateOverride1#m1 | private.rb:83:11:85:5 | m1 |
+| private.rb:88:7:88:32 | ... | private.rb:87:11:89:5 | m2 |
| private.rb:88:7:88:32 | call to puts | private.rb:87:11:89:5 | m2 |
| private.rb:88:7:88:32 | self | private.rb:87:11:89:5 | m2 |
| private.rb:88:12:88:32 | "PrivateOverride1#m2" | private.rb:87:11:89:5 | m2 |
| private.rb:88:13:88:31 | PrivateOverride1#m2 | private.rb:87:11:89:5 | m2 |
+| private.rb:92:7:92:8 | ... | private.rb:91:3:93:5 | call_m1 |
| private.rb:92:7:92:8 | call to m1 | private.rb:91:3:93:5 | call_m1 |
| private.rb:92:7:92:8 | self | private.rb:91:3:93:5 | call_m1 |
| private.rb:98:7:98:32 | call to puts | private.rb:97:11:101:5 | m1 |
| private.rb:98:7:98:32 | self | private.rb:97:11:101:5 | m1 |
+| private.rb:98:7:100:45 | ... | private.rb:97:11:101:5 | m1 |
| private.rb:98:12:98:32 | "PrivateOverride2#m1" | private.rb:97:11:101:5 | m1 |
| private.rb:98:13:98:31 | PrivateOverride2#m1 | private.rb:97:11:101:5 | m1 |
| private.rb:99:7:99:8 | call to m2 | private.rb:97:11:101:5 | m1 |
@@ -1148,11 +1239,15 @@ enclosingMethod
| private.rb:100:7:100:29 | call to m1 | private.rb:97:11:101:5 | m1 |
| toplevel_self_singleton.rb:10:9:10:27 | call to ab_singleton_method | toplevel_self_singleton.rb:9:5:11:7 | method_in_block |
| toplevel_self_singleton.rb:10:9:10:27 | self | toplevel_self_singleton.rb:9:5:11:7 | method_in_block |
+| toplevel_self_singleton.rb:10:9:10:60 | ... | toplevel_self_singleton.rb:9:5:11:7 | method_in_block |
| toplevel_self_singleton.rb:14:9:14:27 | call to ab_singleton_method | toplevel_self_singleton.rb:13:5:15:7 | method_in_block |
| toplevel_self_singleton.rb:14:9:14:27 | self | toplevel_self_singleton.rb:13:5:15:7 | method_in_block |
+| toplevel_self_singleton.rb:14:9:14:60 | ... | toplevel_self_singleton.rb:13:5:15:7 | method_in_block |
| toplevel_self_singleton.rb:20:9:20:27 | call to ab_singleton_method | toplevel_self_singleton.rb:19:5:21:7 | method_in_struct |
| toplevel_self_singleton.rb:20:9:20:27 | self | toplevel_self_singleton.rb:19:5:21:7 | method_in_struct |
+| toplevel_self_singleton.rb:20:9:20:60 | ... | toplevel_self_singleton.rb:19:5:21:7 | method_in_struct |
| toplevel_self_singleton.rb:30:13:30:19 | call to call_me | toplevel_self_singleton.rb:29:9:32:11 | call_you |
| toplevel_self_singleton.rb:30:13:30:19 | self | toplevel_self_singleton.rb:29:9:32:11 | call_you |
+| toplevel_self_singleton.rb:30:13:31:20 | ... | toplevel_self_singleton.rb:29:9:32:11 | call_you |
| toplevel_self_singleton.rb:31:13:31:20 | call to call_you | toplevel_self_singleton.rb:29:9:32:11 | call_you |
| toplevel_self_singleton.rb:31:13:31:20 | self | toplevel_self_singleton.rb:29:9:32:11 | call_you |
diff --git a/ruby/ql/test/library-tests/modules/modules.expected b/ruby/ql/test/library-tests/modules/modules.expected
index 967e90decaa6..09a2236772a3 100644
--- a/ruby/ql/test/library-tests/modules/modules.expected
+++ b/ruby/ql/test/library-tests/modules/modules.expected
@@ -571,6 +571,7 @@ resolveConstantWriteAccess
| unresolved_subclass.rb:21:1:22:3 | A | UnresolvedNamespace::X1::X2::X3::A |
enclosingModule
| calls.rb:1:1:3:3 | foo | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:2:5:2:14 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:2:5:2:14 | call to puts | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:2:5:2:14 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:2:10:2:14 | "foo" | calls.rb:1:1:667:52 | calls.rb |
@@ -579,6 +580,7 @@ enclosingModule
| calls.rb:5:1:5:3 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:7:1:9:3 | bar | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:7:5:7:8 | self | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:8:5:8:15 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:8:5:8:15 | call to puts | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:8:5:8:15 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:8:10:8:15 | "bar1" | calls.rb:1:1:667:52 | calls.rb |
@@ -587,6 +589,7 @@ enclosingModule
| calls.rb:11:1:11:8 | call to bar | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:13:1:15:3 | bar | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:13:5:13:8 | self | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:14:5:14:15 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:14:5:14:15 | call to puts | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:14:5:14:15 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:14:10:14:15 | "bar2" | calls.rb:1:1:667:52 | calls.rb |
@@ -599,10 +602,12 @@ enclosingModule
| calls.rb:22:5:24:7 | instance_m | calls.rb:21:1:34:3 | M |
| calls.rb:23:9:23:19 | call to singleton_m | calls.rb:21:1:34:3 | M |
| calls.rb:23:9:23:19 | self | calls.rb:21:1:34:3 | M |
+| calls.rb:23:9:23:35 | ... | calls.rb:21:1:34:3 | M |
| calls.rb:25:5:27:7 | singleton_m | calls.rb:21:1:34:3 | M |
| calls.rb:25:9:25:12 | self | calls.rb:21:1:34:3 | M |
| calls.rb:26:9:26:18 | call to instance_m | calls.rb:21:1:34:3 | M |
| calls.rb:26:9:26:18 | self | calls.rb:21:1:34:3 | M |
+| calls.rb:26:9:26:34 | ... | calls.rb:21:1:34:3 | M |
| calls.rb:29:5:29:14 | call to instance_m | calls.rb:21:1:34:3 | M |
| calls.rb:29:5:29:14 | self | calls.rb:21:1:34:3 | M |
| calls.rb:30:5:30:8 | self | calls.rb:21:1:34:3 | M |
@@ -618,6 +623,7 @@ enclosingModule
| calls.rb:39:1:41:3 | call_instance_m | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:40:5:40:14 | call to instance_m | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:40:5:40:14 | self | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:40:5:40:30 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:43:1:58:3 | C | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:44:5:44:13 | call to include | calls.rb:43:1:58:3 | C |
| calls.rb:44:5:44:13 | self | calls.rb:43:1:58:3 | C |
@@ -633,6 +639,7 @@ enclosingModule
| calls.rb:51:5:57:7 | baz | calls.rb:43:1:58:3 | C |
| calls.rb:52:9:52:18 | call to instance_m | calls.rb:43:1:58:3 | C |
| calls.rb:52:9:52:18 | self | calls.rb:43:1:58:3 | C |
+| calls.rb:52:9:56:40 | ... | calls.rb:43:1:58:3 | C |
| calls.rb:53:9:53:12 | self | calls.rb:43:1:58:3 | C |
| calls.rb:53:9:53:23 | call to instance_m | calls.rb:43:1:58:3 | C |
| calls.rb:55:9:55:19 | call to singleton_m | calls.rb:43:1:58:3 | C |
@@ -652,6 +659,7 @@ enclosingModule
| calls.rb:65:1:69:3 | D | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:65:11:65:11 | C | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:66:5:68:7 | baz | calls.rb:65:1:69:3 | D |
+| calls.rb:67:9:67:13 | ... | calls.rb:65:1:69:3 | D |
| calls.rb:67:9:67:13 | super call to baz | calls.rb:65:1:69:3 | D |
| calls.rb:71:1:71:1 | d | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:71:1:71:9 | ... = ... | calls.rb:1:1:667:52 | calls.rb |
@@ -672,14 +680,17 @@ enclosingModule
| calls.rb:76:28:76:28 | 5 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:77:5:77:5 | a | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:77:5:77:16 | call to bit_length | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:77:5:78:16 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:78:5:78:5 | b | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:78:5:78:16 | call to bit_length | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:81:1:83:3 | call_block | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:82:5:82:11 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:82:5:82:11 | yield ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:82:11:82:11 | 1 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:85:1:89:3 | foo | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:86:5:86:7 | var | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:86:5:86:18 | ... = ... | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:86:5:88:29 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:86:11:86:14 | Hash | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:86:11:86:18 | call to new | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:87:5:87:7 | var | calls.rb:1:1:667:52 | calls.rb |
@@ -691,6 +702,7 @@ enclosingModule
| calls.rb:88:19:88:19 | x | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:88:19:88:19 | x | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:88:22:88:24 | var | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:88:22:88:27 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:88:22:88:27 | ...[...] | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:88:26:88:26 | x | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:91:1:94:3 | Integer | calls.rb:1:1:667:52 | calls.rb |
@@ -707,6 +719,7 @@ enclosingModule
| calls.rb:102:5:102:30 | puts | calls.rb:100:1:103:3 | Kernel |
| calls.rb:102:14:102:14 | x | calls.rb:100:1:103:3 | Kernel |
| calls.rb:102:14:102:14 | x | calls.rb:100:1:103:3 | Kernel |
+| calls.rb:102:17:102:26 | ... | calls.rb:100:1:103:3 | Kernel |
| calls.rb:102:17:102:26 | call to old_puts | calls.rb:100:1:103:3 | Kernel |
| calls.rb:102:17:102:26 | self | calls.rb:100:1:103:3 | Kernel |
| calls.rb:102:26:102:26 | x | calls.rb:100:1:103:3 | Kernel |
@@ -720,6 +733,7 @@ enclosingModule
| calls.rb:108:5:110:7 | include | calls.rb:105:1:113:3 | Module |
| calls.rb:108:17:108:17 | x | calls.rb:105:1:113:3 | Module |
| calls.rb:108:17:108:17 | x | calls.rb:105:1:113:3 | Module |
+| calls.rb:109:9:109:21 | ... | calls.rb:105:1:113:3 | Module |
| calls.rb:109:9:109:21 | call to old_include | calls.rb:105:1:113:3 | Module |
| calls.rb:109:9:109:21 | self | calls.rb:105:1:113:3 | Module |
| calls.rb:109:21:109:21 | x | calls.rb:105:1:113:3 | Module |
@@ -740,6 +754,7 @@ enclosingModule
| calls.rb:122:5:122:31 | [] | calls.rb:120:1:123:3 | Hash |
| calls.rb:122:12:122:12 | x | calls.rb:120:1:123:3 | Hash |
| calls.rb:122:12:122:12 | x | calls.rb:120:1:123:3 | Hash |
+| calls.rb:122:15:122:27 | ... | calls.rb:120:1:123:3 | Hash |
| calls.rb:122:15:122:27 | call to old_lookup | calls.rb:120:1:123:3 | Hash |
| calls.rb:122:15:122:27 | self | calls.rb:120:1:123:3 | Hash |
| calls.rb:122:26:122:26 | x | calls.rb:120:1:123:3 | Hash |
@@ -752,6 +767,7 @@ enclosingModule
| calls.rb:127:3:127:29 | [] | calls.rb:125:1:138:3 | Array |
| calls.rb:127:10:127:10 | x | calls.rb:125:1:138:3 | Array |
| calls.rb:127:10:127:10 | x | calls.rb:125:1:138:3 | Array |
+| calls.rb:127:13:127:25 | ... | calls.rb:125:1:138:3 | Array |
| calls.rb:127:13:127:25 | call to old_lookup | calls.rb:125:1:138:3 | Array |
| calls.rb:127:13:127:25 | self | calls.rb:125:1:138:3 | Array |
| calls.rb:127:24:127:24 | x | calls.rb:125:1:138:3 | Array |
@@ -761,6 +777,7 @@ enclosingModule
| calls.rb:131:16:131:19 | body | calls.rb:125:1:138:3 | Array |
| calls.rb:132:5:132:5 | x | calls.rb:125:1:138:3 | Array |
| calls.rb:132:5:132:9 | ... = ... | calls.rb:125:1:138:3 | Array |
+| calls.rb:132:5:136:7 | ... | calls.rb:125:1:138:3 | Array |
| calls.rb:132:9:132:9 | 0 | calls.rb:125:1:138:3 | Array |
| calls.rb:133:5:136:7 | while ... | calls.rb:125:1:138:3 | Array |
| calls.rb:133:11:133:11 | x | calls.rb:125:1:138:3 | Array |
@@ -780,6 +797,7 @@ enclosingModule
| calls.rb:135:11:135:12 | ... + ... | calls.rb:125:1:138:3 | Array |
| calls.rb:135:14:135:14 | 1 | calls.rb:125:1:138:3 | Array |
| calls.rb:140:1:142:3 | funny | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:141:5:141:20 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:141:5:141:20 | yield ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:141:11:141:20 | "prefix: " | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:141:12:141:19 | prefix: | calls.rb:1:1:667:52 | calls.rb |
@@ -788,6 +806,7 @@ enclosingModule
| calls.rb:144:7:144:30 | { ... } | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:144:10:144:10 | i | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:144:10:144:10 | i | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:144:13:144:29 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:144:13:144:29 | call to puts | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:144:13:144:29 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:144:18:144:18 | i | calls.rb:1:1:667:52 | calls.rb |
@@ -814,6 +833,7 @@ enclosingModule
| calls.rb:150:26:150:26 | i | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:150:29:150:29 | v | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:150:29:150:29 | v | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:150:32:150:61 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:150:32:150:61 | call to puts | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:150:32:150:61 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:150:37:150:61 | "#{...} -> #{...}" | calls.rb:1:1:667:52 | calls.rb |
@@ -834,6 +854,7 @@ enclosingModule
| calls.rb:152:20:152:20 | i | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:152:20:152:20 | i | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:152:23:152:23 | i | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:152:23:152:34 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:152:23:152:34 | call to bit_length | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:154:1:154:7 | Array | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:154:1:154:7 | [...] | calls.rb:1:1:667:52 | calls.rb |
@@ -845,6 +866,7 @@ enclosingModule
| calls.rb:154:17:154:40 | { ... } | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:154:20:154:20 | i | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:154:20:154:20 | i | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:154:23:154:39 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:154:23:154:39 | call to puts | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:154:23:154:39 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:154:28:154:28 | i | calls.rb:1:1:667:52 | calls.rb |
@@ -862,6 +884,7 @@ enclosingModule
| calls.rb:156:21:156:21 | _ | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:156:24:156:24 | v | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:156:24:156:24 | v | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:156:27:156:36 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:156:27:156:36 | call to puts | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:156:27:156:36 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:156:32:156:32 | v | calls.rb:1:1:667:52 | calls.rb |
@@ -869,6 +892,7 @@ enclosingModule
| calls.rb:158:1:160:3 | indirect | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:158:14:158:15 | &b | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:158:15:158:15 | b | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:159:5:159:17 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:159:5:159:17 | call to call_block | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:159:5:159:17 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:159:16:159:17 | &... | calls.rb:1:1:667:52 | calls.rb |
@@ -879,10 +903,12 @@ enclosingModule
| calls.rb:162:13:162:13 | i | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:162:13:162:13 | i | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:162:16:162:16 | i | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:162:16:162:27 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:162:16:162:27 | call to bit_length | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:165:1:169:3 | S | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:166:5:168:7 | s_method | calls.rb:165:1:169:3 | S |
| calls.rb:167:9:167:12 | self | calls.rb:165:1:169:3 | S |
+| calls.rb:167:9:167:17 | ... | calls.rb:165:1:169:3 | S |
| calls.rb:167:9:167:17 | call to to_s | calls.rb:165:1:169:3 | S |
| calls.rb:171:1:174:3 | A | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:171:11:171:11 | S | calls.rb:1:1:667:52 | calls.rb |
@@ -907,6 +933,7 @@ enclosingModule
| calls.rb:191:9:191:12 | self | calls.rb:190:1:226:3 | Singletons |
| calls.rb:192:9:192:26 | call to puts | calls.rb:190:1:226:3 | Singletons |
| calls.rb:192:9:192:26 | self | calls.rb:190:1:226:3 | Singletons |
+| calls.rb:192:9:193:24 | ... | calls.rb:190:1:226:3 | Singletons |
| calls.rb:192:14:192:26 | "singleton_a" | calls.rb:190:1:226:3 | Singletons |
| calls.rb:192:15:192:25 | singleton_a | calls.rb:190:1:226:3 | Singletons |
| calls.rb:193:9:193:12 | self | calls.rb:190:1:226:3 | Singletons |
@@ -915,12 +942,14 @@ enclosingModule
| calls.rb:196:9:196:12 | self | calls.rb:190:1:226:3 | Singletons |
| calls.rb:197:9:197:26 | call to puts | calls.rb:190:1:226:3 | Singletons |
| calls.rb:197:9:197:26 | self | calls.rb:190:1:226:3 | Singletons |
+| calls.rb:197:9:198:24 | ... | calls.rb:190:1:226:3 | Singletons |
| calls.rb:197:14:197:26 | "singleton_b" | calls.rb:190:1:226:3 | Singletons |
| calls.rb:197:15:197:25 | singleton_b | calls.rb:190:1:226:3 | Singletons |
| calls.rb:198:9:198:12 | self | calls.rb:190:1:226:3 | Singletons |
| calls.rb:198:9:198:24 | call to singleton_c | calls.rb:190:1:226:3 | Singletons |
| calls.rb:201:5:203:7 | singleton_c | calls.rb:190:1:226:3 | Singletons |
| calls.rb:201:9:201:12 | self | calls.rb:190:1:226:3 | Singletons |
+| calls.rb:202:9:202:26 | ... | calls.rb:190:1:226:3 | Singletons |
| calls.rb:202:9:202:26 | call to puts | calls.rb:190:1:226:3 | Singletons |
| calls.rb:202:9:202:26 | self | calls.rb:190:1:226:3 | Singletons |
| calls.rb:202:14:202:26 | "singleton_c" | calls.rb:190:1:226:3 | Singletons |
@@ -929,13 +958,16 @@ enclosingModule
| calls.rb:205:9:205:12 | self | calls.rb:190:1:226:3 | Singletons |
| calls.rb:206:9:206:26 | call to puts | calls.rb:190:1:226:3 | Singletons |
| calls.rb:206:9:206:26 | self | calls.rb:190:1:226:3 | Singletons |
+| calls.rb:206:9:207:24 | ... | calls.rb:190:1:226:3 | Singletons |
| calls.rb:206:14:206:26 | "singleton_d" | calls.rb:190:1:226:3 | Singletons |
| calls.rb:206:15:206:25 | singleton_d | calls.rb:190:1:226:3 | Singletons |
| calls.rb:207:9:207:12 | self | calls.rb:190:1:226:3 | Singletons |
| calls.rb:207:9:207:24 | call to singleton_a | calls.rb:190:1:226:3 | Singletons |
| calls.rb:210:5:215:7 | instance | calls.rb:190:1:226:3 | Singletons |
| calls.rb:211:9:213:11 | singleton_e | calls.rb:190:1:226:3 | Singletons |
+| calls.rb:211:9:214:19 | ... | calls.rb:190:1:226:3 | Singletons |
| calls.rb:211:13:211:16 | self | calls.rb:190:1:226:3 | Singletons |
+| calls.rb:212:13:212:30 | ... | calls.rb:190:1:226:3 | Singletons |
| calls.rb:212:13:212:30 | call to puts | calls.rb:190:1:226:3 | Singletons |
| calls.rb:212:13:212:30 | self | calls.rb:190:1:226:3 | Singletons |
| calls.rb:212:18:212:30 | "singleton_e" | calls.rb:190:1:226:3 | Singletons |
@@ -945,12 +977,14 @@ enclosingModule
| calls.rb:217:5:221:7 | class << ... | calls.rb:190:1:226:3 | Singletons |
| calls.rb:217:14:217:17 | self | calls.rb:190:1:226:3 | Singletons |
| calls.rb:218:9:220:11 | singleton_f | calls.rb:217:5:221:7 | class << ... |
+| calls.rb:219:13:219:30 | ... | calls.rb:217:5:221:7 | class << ... |
| calls.rb:219:13:219:30 | call to puts | calls.rb:217:5:221:7 | class << ... |
| calls.rb:219:13:219:30 | self | calls.rb:217:5:221:7 | class << ... |
| calls.rb:219:18:219:30 | "singleton_f" | calls.rb:217:5:221:7 | class << ... |
| calls.rb:219:19:219:29 | singleton_f | calls.rb:217:5:221:7 | class << ... |
| calls.rb:223:5:225:7 | call_singleton_g | calls.rb:190:1:226:3 | Singletons |
| calls.rb:224:9:224:12 | self | calls.rb:190:1:226:3 | Singletons |
+| calls.rb:224:9:224:24 | ... | calls.rb:190:1:226:3 | Singletons |
| calls.rb:224:9:224:24 | call to singleton_g | calls.rb:190:1:226:3 | Singletons |
| calls.rb:228:1:228:10 | Singletons | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:228:1:228:22 | call to singleton_a | calls.rb:1:1:667:52 | calls.rb |
@@ -966,6 +1000,7 @@ enclosingModule
| calls.rb:234:1:234:14 | call to singleton_e | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:236:1:238:3 | singleton_g | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:236:5:236:6 | c1 | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:237:5:237:24 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:237:5:237:24 | call to puts | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:237:5:237:24 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:237:10:237:24 | "singleton_g_1" | calls.rb:1:1:667:52 | calls.rb |
@@ -976,6 +1011,7 @@ enclosingModule
| calls.rb:241:1:241:19 | call to call_singleton_g | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:243:1:245:3 | singleton_g | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:243:5:243:6 | c1 | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:244:5:244:24 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:244:5:244:24 | call to puts | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:244:5:244:24 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:244:10:244:24 | "singleton_g_2" | calls.rb:1:1:667:52 | calls.rb |
@@ -987,6 +1023,7 @@ enclosingModule
| calls.rb:250:1:254:3 | class << ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:250:10:250:11 | c1 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:251:5:253:7 | singleton_g | calls.rb:250:1:254:3 | class << ... |
+| calls.rb:252:9:252:28 | ... | calls.rb:250:1:254:3 | class << ... |
| calls.rb:252:9:252:28 | call to puts | calls.rb:250:1:254:3 | class << ... |
| calls.rb:252:9:252:28 | self | calls.rb:250:1:254:3 | class << ... |
| calls.rb:252:14:252:28 | "singleton_g_3" | calls.rb:250:1:254:3 | class << ... |
@@ -1011,6 +1048,7 @@ enclosingModule
| calls.rb:265:7:265:15 | top-level | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:267:1:269:3 | singleton_g | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:267:5:267:14 | Singletons | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:268:5:268:22 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:268:5:268:22 | call to puts | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:268:5:268:22 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:268:10:268:22 | "singleton_g" | calls.rb:1:1:667:52 | calls.rb |
@@ -1035,8 +1073,10 @@ enclosingModule
| calls.rb:279:5:279:8 | type | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:279:5:279:12 | call to new | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:279:5:279:21 | call to instance | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:279:5:285:20 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:281:5:283:7 | singleton_h | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:281:9:281:12 | type | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:282:9:282:26 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:282:9:282:26 | call to puts | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:282:9:282:26 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:282:14:282:26 | "singleton_h" | calls.rb:1:1:667:52 | calls.rb |
@@ -1054,6 +1094,7 @@ enclosingModule
| calls.rb:293:1:297:3 | class << ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:293:10:293:10 | x | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:294:5:296:7 | singleton_i | calls.rb:293:1:297:3 | class << ... |
+| calls.rb:295:9:295:26 | ... | calls.rb:293:1:297:3 | class << ... |
| calls.rb:295:9:295:26 | call to puts | calls.rb:293:1:297:3 | class << ... |
| calls.rb:295:9:295:26 | self | calls.rb:293:1:297:3 | class << ... |
| calls.rb:295:14:295:26 | "singleton_i" | calls.rb:293:1:297:3 | class << ... |
@@ -1065,6 +1106,7 @@ enclosingModule
| calls.rb:302:1:306:3 | class << ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:302:10:302:19 | Singletons | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:303:5:305:7 | singleton_j | calls.rb:302:1:306:3 | class << ... |
+| calls.rb:304:9:304:26 | ... | calls.rb:302:1:306:3 | class << ... |
| calls.rb:304:9:304:26 | call to puts | calls.rb:302:1:306:3 | class << ... |
| calls.rb:304:9:304:26 | self | calls.rb:302:1:306:3 | class << ... |
| calls.rb:304:14:304:26 | "singleton_j" | calls.rb:302:1:306:3 | class << ... |
@@ -1075,6 +1117,7 @@ enclosingModule
| calls.rb:311:5:314:7 | instance | calls.rb:310:1:321:3 | SelfNew |
| calls.rb:312:9:312:31 | call to puts | calls.rb:310:1:321:3 | SelfNew |
| calls.rb:312:9:312:31 | self | calls.rb:310:1:321:3 | SelfNew |
+| calls.rb:312:9:313:36 | ... | calls.rb:310:1:321:3 | SelfNew |
| calls.rb:312:14:312:31 | "SelfNew#instance" | calls.rb:310:1:321:3 | SelfNew |
| calls.rb:312:15:312:30 | SelfNew#instance | calls.rb:310:1:321:3 | SelfNew |
| calls.rb:313:9:313:11 | call to new | calls.rb:310:1:321:3 | SelfNew |
@@ -1084,6 +1127,7 @@ enclosingModule
| calls.rb:316:9:316:12 | self | calls.rb:310:1:321:3 | SelfNew |
| calls.rb:317:9:317:11 | call to new | calls.rb:310:1:321:3 | SelfNew |
| calls.rb:317:9:317:11 | self | calls.rb:310:1:321:3 | SelfNew |
+| calls.rb:317:9:317:20 | ... | calls.rb:310:1:321:3 | SelfNew |
| calls.rb:317:9:317:20 | call to instance | calls.rb:310:1:321:3 | SelfNew |
| calls.rb:320:5:320:7 | call to new | calls.rb:310:1:321:3 | SelfNew |
| calls.rb:320:5:320:7 | self | calls.rb:310:1:321:3 | SelfNew |
@@ -1092,15 +1136,18 @@ enclosingModule
| calls.rb:323:1:323:17 | call to singleton | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:325:1:333:3 | C1 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:326:5:328:7 | instance | calls.rb:325:1:333:3 | C1 |
+| calls.rb:327:9:327:26 | ... | calls.rb:325:1:333:3 | C1 |
| calls.rb:327:9:327:26 | call to puts | calls.rb:325:1:333:3 | C1 |
| calls.rb:327:9:327:26 | self | calls.rb:325:1:333:3 | C1 |
| calls.rb:327:14:327:26 | "C1#instance" | calls.rb:325:1:333:3 | C1 |
| calls.rb:327:15:327:25 | C1#instance | calls.rb:325:1:333:3 | C1 |
| calls.rb:330:5:332:7 | return_self | calls.rb:325:1:333:3 | C1 |
+| calls.rb:331:9:331:12 | ... | calls.rb:325:1:333:3 | C1 |
| calls.rb:331:9:331:12 | self | calls.rb:325:1:333:3 | C1 |
| calls.rb:335:1:339:3 | C2 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:335:12:335:13 | C1 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:336:5:338:7 | instance | calls.rb:335:1:339:3 | C2 |
+| calls.rb:337:9:337:26 | ... | calls.rb:335:1:339:3 | C2 |
| calls.rb:337:9:337:26 | call to puts | calls.rb:335:1:339:3 | C2 |
| calls.rb:337:9:337:26 | self | calls.rb:335:1:339:3 | C2 |
| calls.rb:337:14:337:26 | "C2#instance" | calls.rb:335:1:339:3 | C2 |
@@ -1108,6 +1155,7 @@ enclosingModule
| calls.rb:341:1:345:3 | C3 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:341:12:341:13 | C2 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:342:5:344:7 | instance | calls.rb:341:1:345:3 | C3 |
+| calls.rb:343:9:343:26 | ... | calls.rb:341:1:345:3 | C3 |
| calls.rb:343:9:343:26 | call to puts | calls.rb:341:1:345:3 | C3 |
| calls.rb:343:9:343:26 | self | calls.rb:341:1:345:3 | C3 |
| calls.rb:343:14:343:26 | "C3#instance" | calls.rb:341:1:345:3 | C3 |
@@ -1116,6 +1164,7 @@ enclosingModule
| calls.rb:347:22:347:22 | x | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:347:22:347:22 | x | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:348:5:356:7 | case ... | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:348:5:362:7 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:348:10:348:10 | x | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:349:5:350:18 | when ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:349:10:349:11 | C3 | calls.rb:1:1:667:52 | calls.rb |
@@ -1182,8 +1231,10 @@ enclosingModule
| calls.rb:374:1:378:3 | add_singleton | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:374:19:374:19 | x | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:374:19:374:19 | x | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:375:5:377:7 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:375:5:377:7 | instance | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:375:9:375:9 | x | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:376:9:376:28 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:376:9:376:28 | call to puts | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:376:9:376:28 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:376:14:376:28 | "instance_on x" | calls.rb:1:1:667:52 | calls.rb |
@@ -1204,30 +1255,36 @@ enclosingModule
| calls.rb:386:5:398:7 | class << ... | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:386:14:386:17 | self | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:387:9:389:11 | singleton1 | calls.rb:386:5:398:7 | class << ... |
+| calls.rb:388:13:388:48 | ... | calls.rb:386:5:398:7 | class << ... |
| calls.rb:388:13:388:48 | call to puts | calls.rb:386:5:398:7 | class << ... |
| calls.rb:388:13:388:48 | self | calls.rb:386:5:398:7 | class << ... |
| calls.rb:388:18:388:48 | "SingletonOverride1#singleton1" | calls.rb:386:5:398:7 | class << ... |
| calls.rb:388:19:388:47 | SingletonOverride1#singleton1 | calls.rb:386:5:398:7 | class << ... |
| calls.rb:391:9:393:11 | call_singleton1 | calls.rb:386:5:398:7 | class << ... |
+| calls.rb:392:13:392:22 | ... | calls.rb:386:5:398:7 | class << ... |
| calls.rb:392:13:392:22 | call to singleton1 | calls.rb:386:5:398:7 | class << ... |
| calls.rb:392:13:392:22 | self | calls.rb:386:5:398:7 | class << ... |
| calls.rb:395:9:397:11 | factory | calls.rb:386:5:398:7 | class << ... |
| calls.rb:396:13:396:16 | self | calls.rb:386:5:398:7 | class << ... |
| calls.rb:396:13:396:20 | call to new | calls.rb:386:5:398:7 | class << ... |
+| calls.rb:396:13:396:30 | ... | calls.rb:386:5:398:7 | class << ... |
| calls.rb:396:13:396:30 | call to instance1 | calls.rb:386:5:398:7 | class << ... |
| calls.rb:400:5:402:7 | singleton2 | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:400:9:400:12 | self | calls.rb:385:1:413:3 | SingletonOverride1 |
+| calls.rb:401:9:401:44 | ... | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:401:9:401:44 | call to puts | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:401:9:401:44 | self | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:401:14:401:44 | "SingletonOverride1#singleton2" | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:401:15:401:43 | SingletonOverride1#singleton2 | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:404:5:406:7 | call_singleton2 | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:404:9:404:12 | self | calls.rb:385:1:413:3 | SingletonOverride1 |
+| calls.rb:405:9:405:18 | ... | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:405:9:405:18 | call to singleton2 | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:405:9:405:18 | self | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:408:5:408:14 | call to singleton2 | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:408:5:408:14 | self | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:410:5:412:7 | instance1 | calls.rb:385:1:413:3 | SingletonOverride1 |
+| calls.rb:411:9:411:43 | ... | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:411:9:411:43 | call to puts | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:411:9:411:43 | self | calls.rb:385:1:413:3 | SingletonOverride1 |
| calls.rb:411:14:411:43 | "SingletonOverride1#instance1" | calls.rb:385:1:413:3 | SingletonOverride1 |
@@ -1245,17 +1302,20 @@ enclosingModule
| calls.rb:421:5:425:7 | class << ... | calls.rb:420:1:434:3 | SingletonOverride2 |
| calls.rb:421:14:421:17 | self | calls.rb:420:1:434:3 | SingletonOverride2 |
| calls.rb:422:9:424:11 | singleton1 | calls.rb:421:5:425:7 | class << ... |
+| calls.rb:423:13:423:48 | ... | calls.rb:421:5:425:7 | class << ... |
| calls.rb:423:13:423:48 | call to puts | calls.rb:421:5:425:7 | class << ... |
| calls.rb:423:13:423:48 | self | calls.rb:421:5:425:7 | class << ... |
| calls.rb:423:18:423:48 | "SingletonOverride2#singleton1" | calls.rb:421:5:425:7 | class << ... |
| calls.rb:423:19:423:47 | SingletonOverride2#singleton1 | calls.rb:421:5:425:7 | class << ... |
| calls.rb:427:5:429:7 | singleton2 | calls.rb:420:1:434:3 | SingletonOverride2 |
| calls.rb:427:9:427:12 | self | calls.rb:420:1:434:3 | SingletonOverride2 |
+| calls.rb:428:9:428:44 | ... | calls.rb:420:1:434:3 | SingletonOverride2 |
| calls.rb:428:9:428:44 | call to puts | calls.rb:420:1:434:3 | SingletonOverride2 |
| calls.rb:428:9:428:44 | self | calls.rb:420:1:434:3 | SingletonOverride2 |
| calls.rb:428:14:428:44 | "SingletonOverride2#singleton2" | calls.rb:420:1:434:3 | SingletonOverride2 |
| calls.rb:428:15:428:43 | SingletonOverride2#singleton2 | calls.rb:420:1:434:3 | SingletonOverride2 |
| calls.rb:431:5:433:7 | instance1 | calls.rb:420:1:434:3 | SingletonOverride2 |
+| calls.rb:432:9:432:43 | ... | calls.rb:420:1:434:3 | SingletonOverride2 |
| calls.rb:432:9:432:43 | call to puts | calls.rb:420:1:434:3 | SingletonOverride2 |
| calls.rb:432:9:432:43 | self | calls.rb:420:1:434:3 | SingletonOverride2 |
| calls.rb:432:14:432:43 | "SingletonOverride2#instance1" | calls.rb:420:1:434:3 | SingletonOverride2 |
@@ -1276,6 +1336,7 @@ enclosingModule
| calls.rb:442:17:442:17 | 0 | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:442:19:445:11 | then ... | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:443:9:445:11 | m1 | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
+| calls.rb:444:13:444:48 | ... | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:444:13:444:48 | call to puts | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:444:13:444:48 | self | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:444:18:444:48 | "ConditionalInstanceMethods#m1" | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
@@ -1283,14 +1344,17 @@ enclosingModule
| calls.rb:448:5:460:7 | m2 | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:449:9:449:44 | call to puts | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:449:9:449:44 | self | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
+| calls.rb:449:9:459:10 | ... | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:449:14:449:44 | "ConditionalInstanceMethods#m2" | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:449:15:449:43 | ConditionalInstanceMethods#m2 | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:451:9:457:11 | m3 | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:452:13:452:48 | call to puts | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:452:13:452:48 | self | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
+| calls.rb:452:13:456:15 | ... | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:452:18:452:48 | "ConditionalInstanceMethods#m3" | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:452:19:452:47 | ConditionalInstanceMethods#m3 | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:454:13:456:15 | m4 | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
+| calls.rb:455:17:455:52 | ... | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:455:17:455:52 | call to puts | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:455:17:455:52 | self | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:455:22:455:52 | "ConditionalInstanceMethods#m4" | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
@@ -1308,7 +1372,9 @@ enclosingModule
| calls.rb:463:9:467:15 | call to new | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:463:9:467:18 | call to m5 | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:463:19:467:11 | do ... end | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
+| calls.rb:464:13:466:15 | ... | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:464:13:466:15 | m5 | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
+| calls.rb:465:17:465:40 | ... | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:465:17:465:40 | call to puts | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:465:17:465:40 | self | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
| calls.rb:465:22:465:40 | "AnonymousClass#m5" | calls.rb:441:1:469:3 | ConditionalInstanceMethods |
@@ -1340,11 +1406,14 @@ enclosingModule
| calls.rb:479:5:479:11 | [...] | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:479:5:479:11 | call to [] | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:479:5:483:7 | call to each | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:479:5:495:7 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:479:6:479:6 | 0 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:479:8:479:8 | 1 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:479:10:479:10 | 2 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:479:18:483:7 | do ... end | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:480:9:482:11 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:480:9:482:11 | foo | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:481:13:481:22 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:481:13:481:22 | call to puts | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:481:13:481:22 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:481:18:481:22 | "foo" | calls.rb:1:1:667:52 | calls.rb |
@@ -1354,7 +1423,9 @@ enclosingModule
| calls.rb:485:5:489:11 | call to new | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:485:5:489:15 | call to bar | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:485:15:489:7 | do ... end | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:486:9:488:11 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:486:9:488:11 | bar | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:487:13:487:22 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:487:13:487:22 | call to puts | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:487:13:487:22 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:487:18:487:22 | "bar" | calls.rb:1:1:667:52 | calls.rb |
@@ -1369,6 +1440,7 @@ enclosingModule
| calls.rb:491:18:495:7 | do ... end | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:491:22:491:22 | i | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:491:22:491:22 | i | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:492:9:494:11 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:492:9:494:11 | call to define_method | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:492:9:494:11 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:492:23:492:32 | "baz_#{...}" | calls.rb:1:1:667:52 | calls.rb |
@@ -1376,6 +1448,7 @@ enclosingModule
| calls.rb:492:28:492:31 | #{...} | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:492:30:492:30 | i | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:492:35:494:11 | do ... end | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:493:13:493:27 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:493:13:493:27 | call to puts | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:493:13:493:27 | self | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:493:18:493:27 | "baz_#{...}" | calls.rb:1:1:667:52 | calls.rb |
@@ -1399,6 +1472,7 @@ enclosingModule
| calls.rb:502:1:502:33 | call to baz_2 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:504:1:510:3 | ExtendSingletonMethod | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:505:5:507:7 | singleton | calls.rb:504:1:510:3 | ExtendSingletonMethod |
+| calls.rb:506:9:506:46 | ... | calls.rb:504:1:510:3 | ExtendSingletonMethod |
| calls.rb:506:9:506:46 | call to puts | calls.rb:504:1:510:3 | ExtendSingletonMethod |
| calls.rb:506:9:506:46 | self | calls.rb:504:1:510:3 | ExtendSingletonMethod |
| calls.rb:506:14:506:46 | "ExtendSingletonMethod#singleton" | calls.rb:504:1:510:3 | ExtendSingletonMethod |
@@ -1435,6 +1509,7 @@ enclosingModule
| calls.rb:534:5:536:7 | call to protected | calls.rb:533:1:537:3 | ProtectedMethodInModule |
| calls.rb:534:5:536:7 | self | calls.rb:533:1:537:3 | ProtectedMethodInModule |
| calls.rb:534:15:536:7 | foo | calls.rb:533:1:537:3 | ProtectedMethodInModule |
+| calls.rb:535:9:535:42 | ... | calls.rb:533:1:537:3 | ProtectedMethodInModule |
| calls.rb:535:9:535:42 | call to puts | calls.rb:533:1:537:3 | ProtectedMethodInModule |
| calls.rb:535:9:535:42 | self | calls.rb:533:1:537:3 | ProtectedMethodInModule |
| calls.rb:535:14:535:42 | "ProtectedMethodInModule#foo" | calls.rb:533:1:537:3 | ProtectedMethodInModule |
@@ -1446,6 +1521,7 @@ enclosingModule
| calls.rb:542:5:544:7 | call to protected | calls.rb:539:1:552:3 | ProtectedMethods |
| calls.rb:542:5:544:7 | self | calls.rb:539:1:552:3 | ProtectedMethods |
| calls.rb:542:15:544:7 | bar | calls.rb:539:1:552:3 | ProtectedMethods |
+| calls.rb:543:9:543:35 | ... | calls.rb:539:1:552:3 | ProtectedMethods |
| calls.rb:543:9:543:35 | call to puts | calls.rb:539:1:552:3 | ProtectedMethods |
| calls.rb:543:9:543:35 | self | calls.rb:539:1:552:3 | ProtectedMethods |
| calls.rb:543:14:543:35 | "ProtectedMethods#bar" | calls.rb:539:1:552:3 | ProtectedMethods |
@@ -1453,6 +1529,7 @@ enclosingModule
| calls.rb:546:5:551:7 | baz | calls.rb:539:1:552:3 | ProtectedMethods |
| calls.rb:547:9:547:11 | call to foo | calls.rb:539:1:552:3 | ProtectedMethods |
| calls.rb:547:9:547:11 | self | calls.rb:539:1:552:3 | ProtectedMethods |
+| calls.rb:547:9:550:32 | ... | calls.rb:539:1:552:3 | ProtectedMethods |
| calls.rb:548:9:548:11 | call to bar | calls.rb:539:1:552:3 | ProtectedMethods |
| calls.rb:548:9:548:11 | self | calls.rb:539:1:552:3 | ProtectedMethods |
| calls.rb:549:9:549:24 | ProtectedMethods | calls.rb:539:1:552:3 | ProtectedMethods |
@@ -1475,6 +1552,7 @@ enclosingModule
| calls.rb:559:5:562:7 | baz | calls.rb:558:1:563:3 | ProtectedMethodsSub |
| calls.rb:560:9:560:11 | call to foo | calls.rb:558:1:563:3 | ProtectedMethodsSub |
| calls.rb:560:9:560:11 | self | calls.rb:558:1:563:3 | ProtectedMethodsSub |
+| calls.rb:560:9:561:35 | ... | calls.rb:558:1:563:3 | ProtectedMethodsSub |
| calls.rb:561:9:561:27 | ProtectedMethodsSub | calls.rb:558:1:563:3 | ProtectedMethodsSub |
| calls.rb:561:9:561:31 | call to new | calls.rb:558:1:563:3 | ProtectedMethodsSub |
| calls.rb:561:9:561:35 | call to foo | calls.rb:558:1:563:3 | ProtectedMethodsSub |
@@ -1497,6 +1575,7 @@ enclosingModule
| calls.rb:569:17:569:17 | c | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:569:17:569:17 | c | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:569:20:569:20 | c | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:569:20:569:24 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:569:20:569:24 | call to baz | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:570:1:570:13 | Array | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:570:1:570:13 | [...] | calls.rb:1:1:667:52 | calls.rb |
@@ -1512,6 +1591,7 @@ enclosingModule
| calls.rb:570:23:570:23 | s | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:570:23:570:23 | s | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:570:26:570:26 | s | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:570:26:570:37 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:570:26:570:37 | call to capitalize | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:572:1:575:3 | SingletonUpCall_Base | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:573:5:574:7 | singleton | calls.rb:572:1:575:3 | SingletonUpCall_Base |
@@ -1526,6 +1606,7 @@ enclosingModule
| calls.rb:579:9:579:12 | self | calls.rb:576:1:583:3 | SingletonUpCall_Sub |
| calls.rb:580:9:580:17 | call to singleton | calls.rb:576:1:583:3 | SingletonUpCall_Sub |
| calls.rb:580:9:580:17 | self | calls.rb:576:1:583:3 | SingletonUpCall_Sub |
+| calls.rb:580:9:581:35 | ... | calls.rb:576:1:583:3 | SingletonUpCall_Sub |
| calls.rb:581:9:581:18 | call to singleton2 | calls.rb:576:1:583:3 | SingletonUpCall_Sub |
| calls.rb:581:9:581:18 | self | calls.rb:576:1:583:3 | SingletonUpCall_Sub |
| calls.rb:584:1:589:3 | SingletonUpCall_SubSub | calls.rb:1:1:667:52 | calls.rb |
@@ -1539,10 +1620,12 @@ enclosingModule
| calls.rb:592:9:592:12 | self | calls.rb:591:1:602:3 | SingletonA |
| calls.rb:595:5:597:7 | call_singleton1 | calls.rb:591:1:602:3 | SingletonA |
| calls.rb:595:9:595:12 | self | calls.rb:591:1:602:3 | SingletonA |
+| calls.rb:596:9:596:18 | ... | calls.rb:591:1:602:3 | SingletonA |
| calls.rb:596:9:596:18 | call to singleton1 | calls.rb:591:1:602:3 | SingletonA |
| calls.rb:596:9:596:18 | self | calls.rb:591:1:602:3 | SingletonA |
| calls.rb:599:5:601:7 | call_call_singleton1 | calls.rb:591:1:602:3 | SingletonA |
| calls.rb:599:9:599:12 | self | calls.rb:591:1:602:3 | SingletonA |
+| calls.rb:600:9:600:23 | ... | calls.rb:591:1:602:3 | SingletonA |
| calls.rb:600:9:600:23 | call to call_singleton1 | calls.rb:591:1:602:3 | SingletonA |
| calls.rb:600:9:600:23 | self | calls.rb:591:1:602:3 | SingletonA |
| calls.rb:604:1:611:3 | SingletonB | calls.rb:1:1:667:52 | calls.rb |
@@ -1553,6 +1636,7 @@ enclosingModule
| calls.rb:608:9:608:12 | self | calls.rb:604:1:611:3 | SingletonB |
| calls.rb:609:9:609:18 | call to singleton1 | calls.rb:604:1:611:3 | SingletonB |
| calls.rb:609:9:609:18 | self | calls.rb:604:1:611:3 | SingletonB |
+| calls.rb:609:9:609:105 | ... | calls.rb:604:1:611:3 | SingletonB |
| calls.rb:613:1:620:3 | SingletonC | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:613:20:613:29 | SingletonA | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:614:5:615:7 | singleton1 | calls.rb:613:1:620:3 | SingletonC |
@@ -1561,6 +1645,7 @@ enclosingModule
| calls.rb:617:9:617:12 | self | calls.rb:613:1:620:3 | SingletonC |
| calls.rb:618:9:618:18 | call to singleton1 | calls.rb:613:1:620:3 | SingletonC |
| calls.rb:618:9:618:18 | self | calls.rb:613:1:620:3 | SingletonC |
+| calls.rb:618:9:618:105 | ... | calls.rb:613:1:620:3 | SingletonC |
| calls.rb:622:1:622:10 | SingletonA | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:622:1:622:31 | call to call_call_singleton1 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:623:1:623:10 | SingletonB | calls.rb:1:1:667:52 | calls.rb |
@@ -1570,6 +1655,7 @@ enclosingModule
| calls.rb:626:1:632:3 | Included | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:627:5:629:7 | foo | calls.rb:626:1:632:3 | Included |
| calls.rb:628:9:628:12 | self | calls.rb:626:1:632:3 | Included |
+| calls.rb:628:9:628:16 | ... | calls.rb:626:1:632:3 | Included |
| calls.rb:628:9:628:16 | call to bar | calls.rb:626:1:632:3 | Included |
| calls.rb:630:5:631:7 | bar | calls.rb:626:1:632:3 | Included |
| calls.rb:634:1:639:3 | IncludesIncluded | calls.rb:1:1:667:52 | calls.rb |
@@ -1577,11 +1663,13 @@ enclosingModule
| calls.rb:635:5:635:20 | self | calls.rb:634:1:639:3 | IncludesIncluded |
| calls.rb:635:13:635:20 | Included | calls.rb:634:1:639:3 | IncludesIncluded |
| calls.rb:636:5:638:7 | bar | calls.rb:634:1:639:3 | IncludesIncluded |
+| calls.rb:637:9:637:13 | ... | calls.rb:634:1:639:3 | IncludesIncluded |
| calls.rb:637:9:637:13 | super call to bar | calls.rb:634:1:639:3 | IncludesIncluded |
| calls.rb:641:1:645:3 | CustomNew1 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:642:5:644:7 | new | calls.rb:641:1:645:3 | CustomNew1 |
| calls.rb:642:9:642:12 | self | calls.rb:641:1:645:3 | CustomNew1 |
| calls.rb:643:9:643:10 | C1 | calls.rb:641:1:645:3 | CustomNew1 |
+| calls.rb:643:9:643:14 | ... | calls.rb:641:1:645:3 | CustomNew1 |
| calls.rb:643:9:643:14 | call to new | calls.rb:641:1:645:3 | CustomNew1 |
| calls.rb:647:1:647:10 | CustomNew1 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:647:1:647:14 | call to new | calls.rb:1:1:667:52 | calls.rb |
@@ -1590,8 +1678,10 @@ enclosingModule
| calls.rb:650:5:652:7 | new | calls.rb:649:1:657:3 | CustomNew2 |
| calls.rb:650:9:650:12 | self | calls.rb:649:1:657:3 | CustomNew2 |
| calls.rb:651:9:651:12 | self | calls.rb:649:1:657:3 | CustomNew2 |
+| calls.rb:651:9:651:21 | ... | calls.rb:649:1:657:3 | CustomNew2 |
| calls.rb:651:9:651:21 | call to allocate | calls.rb:649:1:657:3 | CustomNew2 |
| calls.rb:654:5:656:7 | instance | calls.rb:649:1:657:3 | CustomNew2 |
+| calls.rb:655:9:655:34 | ... | calls.rb:649:1:657:3 | CustomNew2 |
| calls.rb:655:9:655:34 | call to puts | calls.rb:649:1:657:3 | CustomNew2 |
| calls.rb:655:9:655:34 | self | calls.rb:649:1:657:3 | CustomNew2 |
| calls.rb:655:14:655:34 | "CustomNew2#instance" | calls.rb:649:1:657:3 | CustomNew2 |
@@ -1605,11 +1695,13 @@ enclosingModule
| calls.rb:662:5:662:11 | Array | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:662:5:662:11 | [...] | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:662:5:662:11 | call to [] | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:662:5:664:7 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:662:5:664:7 | call to each | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:662:6:662:6 | 0 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:662:8:662:8 | 1 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:662:10:662:10 | 2 | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:662:18:664:7 | do ... end | calls.rb:1:1:667:52 | calls.rb |
+| calls.rb:663:9:663:9 | ... | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:663:9:663:9 | x | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:667:1:667:26 | ( ... ) | calls.rb:1:1:667:52 | calls.rb |
| calls.rb:667:1:667:35 | call to instance | calls.rb:1:1:667:52 | calls.rb |
@@ -1621,6 +1713,7 @@ enclosingModule
| element_reference.rb:2:5:4:7 | [] | element_reference.rb:1:1:5:3 | ClassWithElementRef |
| element_reference.rb:2:12:2:12 | x | element_reference.rb:1:1:5:3 | ClassWithElementRef |
| element_reference.rb:2:12:2:12 | x | element_reference.rb:1:1:5:3 | ClassWithElementRef |
+| element_reference.rb:3:9:3:19 | ... | element_reference.rb:1:1:5:3 | ClassWithElementRef |
| element_reference.rb:3:9:3:19 | yield ... | element_reference.rb:1:1:5:3 | ClassWithElementRef |
| element_reference.rb:3:15:3:15 | x | element_reference.rb:1:1:5:3 | ClassWithElementRef |
| element_reference.rb:3:15:3:19 | ... + ... | element_reference.rb:1:1:5:3 | ClassWithElementRef |
@@ -1635,6 +1728,7 @@ enclosingModule
| element_reference.rb:9:6:9:19 | { ... } | element_reference.rb:1:1:13:4 | element_reference.rb |
| element_reference.rb:9:9:9:9 | x | element_reference.rb:1:1:13:4 | element_reference.rb |
| element_reference.rb:9:9:9:9 | x | element_reference.rb:1:1:13:4 | element_reference.rb |
+| element_reference.rb:9:12:9:17 | ... | element_reference.rb:1:1:13:4 | element_reference.rb |
| element_reference.rb:9:12:9:17 | call to puts | element_reference.rb:1:1:13:4 | element_reference.rb |
| element_reference.rb:9:12:9:17 | self | element_reference.rb:1:1:13:4 | element_reference.rb |
| element_reference.rb:9:17:9:17 | x | element_reference.rb:1:1:13:4 | element_reference.rb |
@@ -1644,15 +1738,18 @@ enclosingModule
| element_reference.rb:11:6:13:3 | do ... end | element_reference.rb:1:1:13:4 | element_reference.rb |
| element_reference.rb:11:10:11:10 | x | element_reference.rb:1:1:13:4 | element_reference.rb |
| element_reference.rb:11:10:11:10 | x | element_reference.rb:1:1:13:4 | element_reference.rb |
+| element_reference.rb:12:5:12:10 | ... | element_reference.rb:1:1:13:4 | element_reference.rb |
| element_reference.rb:12:5:12:10 | call to puts | element_reference.rb:1:1:13:4 | element_reference.rb |
| element_reference.rb:12:5:12:10 | self | element_reference.rb:1:1:13:4 | element_reference.rb |
| element_reference.rb:12:10:12:10 | x | element_reference.rb:1:1:13:4 | element_reference.rb |
| hello.rb:1:1:8:3 | EnglishWords | hello.rb:1:1:22:3 | hello.rb |
| hello.rb:2:5:4:7 | hello | hello.rb:1:1:8:3 | EnglishWords |
+| hello.rb:3:9:3:22 | ... | hello.rb:1:1:8:3 | EnglishWords |
| hello.rb:3:9:3:22 | return | hello.rb:1:1:8:3 | EnglishWords |
| hello.rb:3:16:3:22 | "hello" | hello.rb:1:1:8:3 | EnglishWords |
| hello.rb:3:17:3:21 | hello | hello.rb:1:1:8:3 | EnglishWords |
| hello.rb:5:5:7:7 | world | hello.rb:1:1:8:3 | EnglishWords |
+| hello.rb:6:9:6:22 | ... | hello.rb:1:1:8:3 | EnglishWords |
| hello.rb:6:9:6:22 | return | hello.rb:1:1:8:3 | EnglishWords |
| hello.rb:6:16:6:22 | "world" | hello.rb:1:1:8:3 | EnglishWords |
| hello.rb:6:17:6:21 | world | hello.rb:1:1:8:3 | EnglishWords |
@@ -1661,12 +1758,14 @@ enclosingModule
| hello.rb:12:5:12:24 | self | hello.rb:11:1:16:3 | Greeting |
| hello.rb:12:13:12:24 | EnglishWords | hello.rb:11:1:16:3 | Greeting |
| hello.rb:13:5:15:7 | message | hello.rb:11:1:16:3 | Greeting |
+| hello.rb:14:9:14:20 | ... | hello.rb:11:1:16:3 | Greeting |
| hello.rb:14:9:14:20 | return | hello.rb:11:1:16:3 | Greeting |
| hello.rb:14:16:14:20 | call to hello | hello.rb:11:1:16:3 | Greeting |
| hello.rb:14:16:14:20 | self | hello.rb:11:1:16:3 | Greeting |
| hello.rb:18:1:22:3 | HelloWorld | hello.rb:1:1:22:3 | hello.rb |
| hello.rb:18:20:18:27 | Greeting | hello.rb:1:1:22:3 | hello.rb |
| hello.rb:19:5:21:7 | message | hello.rb:18:1:22:3 | HelloWorld |
+| hello.rb:20:9:20:40 | ... | hello.rb:18:1:22:3 | HelloWorld |
| hello.rb:20:9:20:40 | return | hello.rb:18:1:22:3 | HelloWorld |
| hello.rb:20:16:20:20 | super call to message | hello.rb:18:1:22:3 | HelloWorld |
| hello.rb:20:16:20:26 | ... + ... | hello.rb:18:1:22:3 | HelloWorld |
@@ -1684,12 +1783,14 @@ enclosingModule
| instance_fields.rb:3:9:5:11 | create | instance_fields.rb:2:5:9:7 | class << ... |
| instance_fields.rb:4:13:4:18 | @field | instance_fields.rb:2:5:9:7 | class << ... |
| instance_fields.rb:4:13:4:18 | self | instance_fields.rb:2:5:9:7 | class << ... |
+| instance_fields.rb:4:13:4:35 | ... | instance_fields.rb:2:5:9:7 | class << ... |
| instance_fields.rb:4:13:4:35 | ... = ... | instance_fields.rb:2:5:9:7 | class << ... |
| instance_fields.rb:4:22:4:31 | A_target | instance_fields.rb:2:5:9:7 | class << ... |
| instance_fields.rb:4:22:4:35 | call to new | instance_fields.rb:2:5:9:7 | class << ... |
| instance_fields.rb:6:9:8:11 | use | instance_fields.rb:2:5:9:7 | class << ... |
| instance_fields.rb:7:13:7:18 | @field | instance_fields.rb:2:5:9:7 | class << ... |
| instance_fields.rb:7:13:7:18 | self | instance_fields.rb:2:5:9:7 | class << ... |
+| instance_fields.rb:7:13:7:25 | ... | instance_fields.rb:2:5:9:7 | class << ... |
| instance_fields.rb:7:13:7:25 | call to target | instance_fields.rb:2:5:9:7 | class << ... |
| instance_fields.rb:11:1:14:3 | A_target | instance_fields.rb:1:1:29:4 | instance_fields.rb |
| instance_fields.rb:12:5:13:7 | target | instance_fields.rb:11:1:14:3 | A_target |
@@ -1699,12 +1800,14 @@ enclosingModule
| instance_fields.rb:18:9:20:11 | create | instance_fields.rb:17:5:24:7 | class << ... |
| instance_fields.rb:19:13:19:18 | @field | instance_fields.rb:17:5:24:7 | class << ... |
| instance_fields.rb:19:13:19:18 | self | instance_fields.rb:17:5:24:7 | class << ... |
+| instance_fields.rb:19:13:19:35 | ... | instance_fields.rb:17:5:24:7 | class << ... |
| instance_fields.rb:19:13:19:35 | ... = ... | instance_fields.rb:17:5:24:7 | class << ... |
| instance_fields.rb:19:22:19:31 | B_target | instance_fields.rb:17:5:24:7 | class << ... |
| instance_fields.rb:19:22:19:35 | call to new | instance_fields.rb:17:5:24:7 | class << ... |
| instance_fields.rb:21:9:23:11 | use | instance_fields.rb:17:5:24:7 | class << ... |
| instance_fields.rb:22:13:22:18 | @field | instance_fields.rb:17:5:24:7 | class << ... |
| instance_fields.rb:22:13:22:18 | self | instance_fields.rb:17:5:24:7 | class << ... |
+| instance_fields.rb:22:13:22:25 | ... | instance_fields.rb:17:5:24:7 | class << ... |
| instance_fields.rb:22:13:22:25 | call to target | instance_fields.rb:17:5:24:7 | class << ... |
| instance_fields.rb:26:1:29:3 | B_target | instance_fields.rb:1:1:29:4 | instance_fields.rb |
| instance_fields.rb:27:5:28:7 | target | instance_fields.rb:26:1:29:3 | B_target |
@@ -1784,6 +1887,7 @@ enclosingModule
| modules.rb:90:3:90:8 | Object | modules.rb:88:1:93:3 | IncludeTest |
| modules.rb:90:3:90:38 | call to module_eval | modules.rb:88:1:93:3 | IncludeTest |
| modules.rb:90:22:90:38 | { ... } | modules.rb:88:1:93:3 | IncludeTest |
+| modules.rb:90:24:90:36 | ... | modules.rb:88:1:93:3 | IncludeTest |
| modules.rb:90:24:90:36 | call to prepend | modules.rb:88:1:93:3 | IncludeTest |
| modules.rb:90:24:90:36 | self | modules.rb:88:1:93:3 | IncludeTest |
| modules.rb:90:32:90:36 | Other | modules.rb:88:1:93:3 | IncludeTest |
@@ -1908,6 +2012,7 @@ enclosingModule
| private.rb:83:3:85:5 | call to private | private.rb:82:1:94:3 | PrivateOverride1 |
| private.rb:83:3:85:5 | self | private.rb:82:1:94:3 | PrivateOverride1 |
| private.rb:83:11:85:5 | m1 | private.rb:82:1:94:3 | PrivateOverride1 |
+| private.rb:84:7:84:32 | ... | private.rb:82:1:94:3 | PrivateOverride1 |
| private.rb:84:7:84:32 | call to puts | private.rb:82:1:94:3 | PrivateOverride1 |
| private.rb:84:7:84:32 | self | private.rb:82:1:94:3 | PrivateOverride1 |
| private.rb:84:12:84:32 | "PrivateOverride1#m1" | private.rb:82:1:94:3 | PrivateOverride1 |
@@ -1915,11 +2020,13 @@ enclosingModule
| private.rb:87:3:89:5 | call to private | private.rb:82:1:94:3 | PrivateOverride1 |
| private.rb:87:3:89:5 | self | private.rb:82:1:94:3 | PrivateOverride1 |
| private.rb:87:11:89:5 | m2 | private.rb:82:1:94:3 | PrivateOverride1 |
+| private.rb:88:7:88:32 | ... | private.rb:82:1:94:3 | PrivateOverride1 |
| private.rb:88:7:88:32 | call to puts | private.rb:82:1:94:3 | PrivateOverride1 |
| private.rb:88:7:88:32 | self | private.rb:82:1:94:3 | PrivateOverride1 |
| private.rb:88:12:88:32 | "PrivateOverride1#m2" | private.rb:82:1:94:3 | PrivateOverride1 |
| private.rb:88:13:88:31 | PrivateOverride1#m2 | private.rb:82:1:94:3 | PrivateOverride1 |
| private.rb:91:3:93:5 | call_m1 | private.rb:82:1:94:3 | PrivateOverride1 |
+| private.rb:92:7:92:8 | ... | private.rb:82:1:94:3 | PrivateOverride1 |
| private.rb:92:7:92:8 | call to m1 | private.rb:82:1:94:3 | PrivateOverride1 |
| private.rb:92:7:92:8 | self | private.rb:82:1:94:3 | PrivateOverride1 |
| private.rb:96:1:102:3 | PrivateOverride2 | private.rb:1:1:105:40 | private.rb |
@@ -1929,6 +2036,7 @@ enclosingModule
| private.rb:97:11:101:5 | m1 | private.rb:96:1:102:3 | PrivateOverride2 |
| private.rb:98:7:98:32 | call to puts | private.rb:96:1:102:3 | PrivateOverride2 |
| private.rb:98:7:98:32 | self | private.rb:96:1:102:3 | PrivateOverride2 |
+| private.rb:98:7:100:45 | ... | private.rb:96:1:102:3 | PrivateOverride2 |
| private.rb:98:12:98:32 | "PrivateOverride2#m1" | private.rb:96:1:102:3 | PrivateOverride2 |
| private.rb:98:13:98:31 | PrivateOverride2#m1 | private.rb:96:1:102:3 | PrivateOverride2 |
| private.rb:99:7:99:8 | call to m2 | private.rb:96:1:102:3 | PrivateOverride2 |
@@ -1950,8 +2058,10 @@ enclosingModule
| toplevel_self_singleton.rb:8:1:16:3 | self | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:8:14:16:3 | do ... end | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:9:5:11:7 | method_in_block | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
+| toplevel_self_singleton.rb:9:5:15:7 | ... | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:10:9:10:27 | call to ab_singleton_method | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:10:9:10:27 | self | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
+| toplevel_self_singleton.rb:10:9:10:60 | ... | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:12:5:12:7 | obj | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:12:5:12:12 | ... = ... | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:12:9:12:12 | self | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
@@ -1959,6 +2069,7 @@ enclosingModule
| toplevel_self_singleton.rb:13:9:13:11 | obj | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:14:9:14:27 | call to ab_singleton_method | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:14:9:14:27 | self | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
+| toplevel_self_singleton.rb:14:9:14:60 | ... | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:18:1:18:8 | MyStruct | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:18:1:22:1 | ... = ... | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:18:12:18:17 | Struct | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
@@ -1968,10 +2079,12 @@ enclosingModule
| toplevel_self_singleton.rb:18:29:18:32 | :bar | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:18:29:18:32 | bar | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:18:35:22:1 | { ... } | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
+| toplevel_self_singleton.rb:19:5:21:7 | ... | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:19:5:21:7 | method_in_struct | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:19:9:19:12 | self | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:20:9:20:27 | call to ab_singleton_method | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:20:9:20:27 | self | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
+| toplevel_self_singleton.rb:20:9:20:60 | ... | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:24:1:34:3 | Good | toplevel_self_singleton.rb:1:1:34:4 | toplevel_self_singleton.rb |
| toplevel_self_singleton.rb:25:5:33:7 | class << ... | toplevel_self_singleton.rb:24:1:34:3 | Good |
| toplevel_self_singleton.rb:25:14:25:17 | self | toplevel_self_singleton.rb:24:1:34:3 | Good |
@@ -1979,6 +2092,7 @@ enclosingModule
| toplevel_self_singleton.rb:29:9:32:11 | call_you | toplevel_self_singleton.rb:25:5:33:7 | class << ... |
| toplevel_self_singleton.rb:30:13:30:19 | call to call_me | toplevel_self_singleton.rb:25:5:33:7 | class << ... |
| toplevel_self_singleton.rb:30:13:30:19 | self | toplevel_self_singleton.rb:25:5:33:7 | class << ... |
+| toplevel_self_singleton.rb:30:13:31:20 | ... | toplevel_self_singleton.rb:25:5:33:7 | class << ... |
| toplevel_self_singleton.rb:31:13:31:20 | call to call_you | toplevel_self_singleton.rb:25:5:33:7 | class << ... |
| toplevel_self_singleton.rb:31:13:31:20 | self | toplevel_self_singleton.rb:25:5:33:7 | class << ... |
| unresolved_subclass.rb:1:1:2:3 | ResolvableBaseClass | unresolved_subclass.rb:1:1:22:4 | unresolved_subclass.rb |