mirror of
https://github.com/github/codeql.git
synced 2026-04-30 19:26:02 +02:00
Merge pull request #12540 from aibaars/destructured-assign
Ruby: change evaluation order of destructured assignments
This commit is contained in:
5
ruby/ql/lib/change-notes/2023-03-21-evaluation-order.md
Normal file
5
ruby/ql/lib/change-notes/2023-03-21-evaluation-order.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
* Control flow graph: the evaluation order of scope expressions and receivers in multiple assignments has been adjusted to match the changes made in Ruby
|
||||
3.1 and 3.2.
|
||||
@@ -235,55 +235,6 @@ class ConstantAccess extends Expr, TConstantAccess {
|
||||
}
|
||||
}
|
||||
|
||||
private class TokenConstantAccess extends ConstantAccess, TTokenConstantAccess {
|
||||
private Ruby::Constant g;
|
||||
|
||||
TokenConstantAccess() { this = TTokenConstantAccess(g) }
|
||||
|
||||
final override string getName() { result = g.getValue() }
|
||||
}
|
||||
|
||||
private class ScopeResolutionConstantAccess extends ConstantAccess, TScopeResolutionConstantAccess {
|
||||
private Ruby::ScopeResolution g;
|
||||
private Ruby::Constant constant;
|
||||
|
||||
ScopeResolutionConstantAccess() { this = TScopeResolutionConstantAccess(g, constant) }
|
||||
|
||||
final override string getName() { result = constant.getValue() }
|
||||
|
||||
final override Expr getScopeExpr() { toGenerated(result) = g.getScope() }
|
||||
|
||||
final override predicate hasGlobalScope() { not exists(g.getScope()) }
|
||||
}
|
||||
|
||||
private class ConstantReadAccessSynth extends ConstantAccess, TConstantReadAccessSynth {
|
||||
private string value;
|
||||
|
||||
ConstantReadAccessSynth() { this = TConstantReadAccessSynth(_, _, value) }
|
||||
|
||||
final override string getName() {
|
||||
if this.hasGlobalScope() then result = value.suffix(2) else result = value
|
||||
}
|
||||
|
||||
final override Expr getScopeExpr() { synthChild(this, 0, result) }
|
||||
|
||||
final override predicate hasGlobalScope() { value.matches("::%") }
|
||||
}
|
||||
|
||||
private class ConstantWriteAccessSynth extends ConstantAccess, TConstantWriteAccessSynth {
|
||||
private string value;
|
||||
|
||||
ConstantWriteAccessSynth() { this = TConstantWriteAccessSynth(_, _, value) }
|
||||
|
||||
final override string getName() {
|
||||
if this.hasGlobalScope() then result = value.suffix(2) else result = value
|
||||
}
|
||||
|
||||
final override Expr getScopeExpr() { synthChild(this, 0, result) }
|
||||
|
||||
final override predicate hasGlobalScope() { value.matches("::%") }
|
||||
}
|
||||
|
||||
/**
|
||||
* A use (read) of a constant.
|
||||
*
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
private import codeql.ruby.AST
|
||||
private import codeql.ruby.ast.internal.AST
|
||||
private import codeql.ruby.ast.internal.Literal
|
||||
private import codeql.ruby.ast.internal.Module
|
||||
private import codeql.ruby.ast.internal.TreeSitter
|
||||
private import codeql.ruby.controlflow.CfgNodes
|
||||
private import codeql.ruby.dataflow.SSA
|
||||
private import ExprNodes
|
||||
@@ -559,3 +561,60 @@ private predicate isArrayExpr(Expr e, ArrayLiteralCfgNode arr) {
|
||||
// results if the source is a phi node.
|
||||
forex(ExprCfgNode n | n = e.getAControlFlowNode() | isArrayConstant(n, arr))
|
||||
}
|
||||
|
||||
private class TokenConstantAccess extends ConstantAccess, TTokenConstantAccess {
|
||||
private Ruby::Constant g;
|
||||
|
||||
TokenConstantAccess() { this = TTokenConstantAccess(g) }
|
||||
|
||||
final override string getName() { result = g.getValue() }
|
||||
}
|
||||
|
||||
/**
|
||||
* A constant access that has a scope resolution qualifier.
|
||||
*/
|
||||
class ScopeResolutionConstantAccess extends ConstantAccess, TScopeResolutionConstantAccess {
|
||||
private Ruby::ScopeResolution g;
|
||||
private Ruby::Constant constant;
|
||||
|
||||
ScopeResolutionConstantAccess() { this = TScopeResolutionConstantAccess(g, constant) }
|
||||
|
||||
/**
|
||||
* Gets the name of the constant.
|
||||
*/
|
||||
final override string getName() { result = constant.getValue() }
|
||||
|
||||
/** Gets the scope resolution expression. */
|
||||
final override Expr getScopeExpr() { toGenerated(result) = g.getScope() }
|
||||
|
||||
/** Holds if this constant access has a global scope. */
|
||||
final override predicate hasGlobalScope() { not exists(g.getScope()) }
|
||||
}
|
||||
|
||||
private class ConstantReadAccessSynth extends ConstantAccess, TConstantReadAccessSynth {
|
||||
private string value;
|
||||
|
||||
ConstantReadAccessSynth() { this = TConstantReadAccessSynth(_, _, value) }
|
||||
|
||||
final override string getName() {
|
||||
if this.hasGlobalScope() then result = value.suffix(2) else result = value
|
||||
}
|
||||
|
||||
final override Expr getScopeExpr() { synthChild(this, 0, result) }
|
||||
|
||||
final override predicate hasGlobalScope() { value.matches("::%") }
|
||||
}
|
||||
|
||||
private class ConstantWriteAccessSynth extends ConstantAccess, TConstantWriteAccessSynth {
|
||||
private string value;
|
||||
|
||||
ConstantWriteAccessSynth() { this = TConstantWriteAccessSynth(_, _, value) }
|
||||
|
||||
final override string getName() {
|
||||
if this.hasGlobalScope() then result = value.suffix(2) else result = value
|
||||
}
|
||||
|
||||
final override Expr getScopeExpr() { synthChild(this, 0, result) }
|
||||
|
||||
final override predicate hasGlobalScope() { value.matches("::%") }
|
||||
}
|
||||
|
||||
@@ -4,7 +4,9 @@ private import AST
|
||||
private import TreeSitter
|
||||
|
||||
class StmtSequenceSynth extends StmtSequence, TStmtSequenceSynth {
|
||||
final override Stmt getStmt(int n) { synthChild(this, n, result) }
|
||||
final override Stmt getStmt(int n) {
|
||||
result = rank[n + 1](int i, Stmt s | synthChild(this, i, s) | s order by i)
|
||||
}
|
||||
|
||||
final override string toString() { result = "..." }
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
private import AST
|
||||
private import TreeSitter
|
||||
private import codeql.ruby.ast.internal.Call
|
||||
private import codeql.ruby.ast.internal.Constant
|
||||
private import codeql.ruby.ast.internal.Expr
|
||||
private import codeql.ruby.ast.internal.Variable
|
||||
private import codeql.ruby.ast.internal.Pattern
|
||||
@@ -950,6 +951,28 @@ private module DestructuredAssignDesugar {
|
||||
}
|
||||
}
|
||||
|
||||
abstract private class LhsWithReceiver extends Expr {
|
||||
abstract Expr getReceiver();
|
||||
|
||||
abstract SynthKind getSynthKind();
|
||||
}
|
||||
|
||||
private class LhsCall extends LhsWithReceiver instanceof MethodCall {
|
||||
final override Expr getReceiver() { result = MethodCall.super.getReceiver() }
|
||||
|
||||
final override SynthKind getSynthKind() {
|
||||
result = MethodCallKind(super.getMethodName(), false, super.getNumberOfArguments())
|
||||
}
|
||||
}
|
||||
|
||||
private class LhsScopedConstant extends LhsWithReceiver, ScopeResolutionConstantAccess {
|
||||
LhsScopedConstant() { exists(this.getScopeExpr()) }
|
||||
|
||||
final override Expr getReceiver() { result = this.getScopeExpr() }
|
||||
|
||||
final override SynthKind getSynthKind() { result = ConstantWriteAccessKind(this.getName()) }
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate destructuredAssignSynthesis(AstNode parent, int i, Child child) {
|
||||
exists(DestructuredAssignExpr tae |
|
||||
@@ -958,14 +981,32 @@ private module DestructuredAssignDesugar {
|
||||
child = SynthChild(StmtSequenceKind())
|
||||
or
|
||||
exists(AstNode seq | seq = TStmtSequenceSynth(tae, -1) |
|
||||
exists(LhsWithReceiver mc, int j | mc = tae.getElement(j) |
|
||||
parent = seq and
|
||||
i = j and
|
||||
child = SynthChild(AssignExprKind())
|
||||
or
|
||||
exists(AstNode assign | assign = TAssignExprSynth(seq, j) |
|
||||
parent = assign and
|
||||
i = 0 and
|
||||
child = SynthChild(LocalVariableAccessSynthKind(TLocalVariableSynth(tae, j)))
|
||||
or
|
||||
parent = assign and
|
||||
i = 1 and
|
||||
child = childRef(mc.getReceiver())
|
||||
)
|
||||
)
|
||||
or
|
||||
parent = seq and
|
||||
i = 0 and
|
||||
i = tae.getNumberOfElements() and
|
||||
child = SynthChild(AssignExprKind())
|
||||
or
|
||||
exists(AstNode assign | assign = TAssignExprSynth(seq, 0) |
|
||||
exists(AstNode assign | assign = TAssignExprSynth(seq, tae.getNumberOfElements()) |
|
||||
parent = assign and
|
||||
i = 0 and
|
||||
child = SynthChild(LocalVariableAccessSynthKind(TLocalVariableSynth(tae, 0)))
|
||||
child =
|
||||
SynthChild(LocalVariableAccessSynthKind(TLocalVariableSynth(tae,
|
||||
tae.getNumberOfElements())))
|
||||
or
|
||||
parent = assign and
|
||||
i = 1 and
|
||||
@@ -981,10 +1022,37 @@ private module DestructuredAssignDesugar {
|
||||
restIndex = tae.getRestIndexOrNumberOfElements()
|
||||
|
|
||||
parent = seq and
|
||||
i = j + 1 and
|
||||
i = j + 1 + tae.getNumberOfElements() and
|
||||
child = SynthChild(AssignExprKind())
|
||||
or
|
||||
exists(AstNode assign | assign = TAssignExprSynth(seq, j + 1) |
|
||||
exists(AstNode assign |
|
||||
assign = TAssignExprSynth(seq, j + 1 + tae.getNumberOfElements())
|
||||
|
|
||||
exists(LhsWithReceiver mc | mc = elem |
|
||||
parent = assign and
|
||||
i = 0 and
|
||||
child = SynthChild(mc.getSynthKind())
|
||||
or
|
||||
exists(AstNode call | synthChild(assign, 0, call) |
|
||||
parent = call and
|
||||
i = 0 and
|
||||
child = SynthChild(LocalVariableAccessSynthKind(TLocalVariableSynth(tae, j)))
|
||||
or
|
||||
parent = call and
|
||||
child = childRef(mc.(MethodCall).getArgument(i - 1))
|
||||
)
|
||||
)
|
||||
or
|
||||
(
|
||||
elem instanceof VariableAccess
|
||||
or
|
||||
elem instanceof ConstantAccess and
|
||||
not exists(Ruby::ScopeResolution g |
|
||||
elem = TScopeResolutionConstantAccess(g, _) and exists(g.getScope())
|
||||
)
|
||||
or
|
||||
elem instanceof DestructuredLhsExpr
|
||||
) and
|
||||
parent = assign and
|
||||
i = 0 and
|
||||
child = childRef(elem)
|
||||
@@ -995,7 +1063,9 @@ private module DestructuredAssignDesugar {
|
||||
or
|
||||
parent = TMethodCallSynth(assign, 1, _, _, _) and
|
||||
i = 0 and
|
||||
child = SynthChild(LocalVariableAccessSynthKind(TLocalVariableSynth(tae, 0)))
|
||||
child =
|
||||
SynthChild(LocalVariableAccessSynthKind(TLocalVariableSynth(tae,
|
||||
tae.getNumberOfElements())))
|
||||
or
|
||||
j < restIndex and
|
||||
parent = TMethodCallSynth(assign, 1, _, _, _) and
|
||||
@@ -1050,26 +1120,48 @@ private module DestructuredAssignDesugar {
|
||||
|
||||
final override predicate location(AstNode n, Location l) {
|
||||
exists(DestructuredAssignExpr tae, StmtSequence seq | seq = tae.getDesugared() |
|
||||
n = seq.getStmt(0) and
|
||||
synthChild(seq, tae.getNumberOfElements(), n) and
|
||||
hasLocation(tae.getRightOperand(), l)
|
||||
or
|
||||
exists(AstNode elem, int j |
|
||||
exists(LhsWithReceiver elem, int j |
|
||||
elem = tae.getElement(j) and
|
||||
n = seq.getStmt(j + 1) and
|
||||
synthChild(seq, j, n) and
|
||||
hasLocation(elem.getReceiver(), l)
|
||||
)
|
||||
or
|
||||
exists(AstNode elem, int j | elem = tae.getElement(j) |
|
||||
synthChild(seq, j + 1 + tae.getNumberOfElements(), n) and
|
||||
hasLocation(elem, l)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
final override predicate localVariable(AstNode n, int i) {
|
||||
n instanceof DestructuredAssignExpr and
|
||||
i = 0
|
||||
i = [0 .. n.(DestructuredAssignExpr).getNumberOfElements()]
|
||||
}
|
||||
|
||||
final override predicate constantWriteAccess(string name) {
|
||||
exists(DestructuredAssignExpr tae, LhsScopedConstant ca |
|
||||
ca = tae.getElement(_) and
|
||||
name = ca.getName()
|
||||
)
|
||||
}
|
||||
|
||||
final override predicate methodCall(string name, boolean setter, int arity) {
|
||||
name = "[]" and
|
||||
setter = false and
|
||||
arity = 1
|
||||
or
|
||||
exists(DestructuredAssignExpr tae, MethodCall mc |
|
||||
mc = tae.getElement(_) and
|
||||
name = mc.getMethodName() and
|
||||
setter = false and
|
||||
arity = mc.getNumberOfArguments()
|
||||
)
|
||||
}
|
||||
|
||||
final override predicate excludeFromControlFlowTree(AstNode n) {
|
||||
n = any(DestructuredAssignExpr tae).getElement(_).(LhsWithReceiver)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2878,6 +2878,16 @@ operations/operations.rb:
|
||||
# 103| getStmt: [AssignLogicalOrExpr] ... ||= ...
|
||||
# 103| getAnOperand/getLeftOperand: [ConstantAssignment, ConstantReadAccess] CONSTANT4
|
||||
# 103| getAnOperand/getRightOperand: [IntegerLiteral] 7
|
||||
# 104| getStmt: [AssignExpr] ... = ...
|
||||
# 104| getAnOperand/getLeftOperand: [DestructuredLhsExpr] (..., ...)
|
||||
# 104| getElement: [ConstantAssignment] FOO
|
||||
# 104| getElement: [ConstantAssignment] BAR
|
||||
# 104| getElement: [ConstantAssignment] FOO
|
||||
# 104| getScopeExpr: [LocalVariableAccess] foo
|
||||
# 104| getAnOperand/getRightOperand: [ArrayLiteral] [...]
|
||||
# 104| getElement: [IntegerLiteral] 1
|
||||
# 104| getElement: [IntegerLiteral] 2
|
||||
# 104| getElement: [IntegerLiteral] 3
|
||||
params/params.rb:
|
||||
# 1| [Toplevel] params.rb
|
||||
# 4| getStmt: [Method] identifier_method_params
|
||||
|
||||
@@ -81,44 +81,53 @@ calls/calls.rb:
|
||||
# 318| [AssignExpr] ... = ...
|
||||
# 318| getDesugared: [StmtSequence] ...
|
||||
# 318| getStmt: [AssignExpr] ... = ...
|
||||
# 318| getAnOperand/getLeftOperand: [MethodCall] call to foo
|
||||
# 318| getAnOperand/getRightOperand: [SelfVariableAccess] self
|
||||
# 318| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__0
|
||||
# 318| getStmt: [AssignExpr] ... = ...
|
||||
# 318| getDesugared: [StmtSequence] ...
|
||||
# 318| getStmt: [SetterMethodCall] call to foo=
|
||||
# 318| getReceiver: [SelfVariableAccess] self
|
||||
# 318| getReceiver: [LocalVariableAccess] __synth__0
|
||||
# 318| getArgument: [AssignExpr] ... = ...
|
||||
# 318| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__0__1
|
||||
# 318| getAnOperand/getRightOperand: [MethodCall] call to []
|
||||
# 318| getReceiver: [LocalVariableAccess] __synth__0
|
||||
# 318| getReceiver: [LocalVariableAccess] __synth__3
|
||||
# 318| getArgument: [IntegerLiteral] 0
|
||||
# 318| getStmt: [LocalVariableAccess] __synth__0__1
|
||||
# 318| getAnOperand/getLeftOperand: [MethodCall] call to foo
|
||||
# 318| getStmt: [AssignExpr] ... = ...
|
||||
# 318| getAnOperand/getRightOperand: [SelfVariableAccess] self
|
||||
# 318| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__1
|
||||
# 318| getStmt: [AssignExpr] ... = ...
|
||||
# 318| getAnOperand/getLeftOperand: [MethodCall] call to bar
|
||||
# 318| getDesugared: [StmtSequence] ...
|
||||
# 318| getStmt: [SetterMethodCall] call to bar=
|
||||
# 318| getReceiver: [SelfVariableAccess] self
|
||||
# 318| getReceiver: [LocalVariableAccess] __synth__1
|
||||
# 318| getArgument: [AssignExpr] ... = ...
|
||||
# 318| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__0__1
|
||||
# 318| getAnOperand/getRightOperand: [MethodCall] call to []
|
||||
# 318| getReceiver: [LocalVariableAccess] __synth__0
|
||||
# 318| getReceiver: [LocalVariableAccess] __synth__3
|
||||
# 318| getArgument: [RangeLiteral] _ .. _
|
||||
# 318| getBegin: [IntegerLiteral] 1
|
||||
# 318| getEnd: [IntegerLiteral] -2
|
||||
# 318| getStmt: [LocalVariableAccess] __synth__0__1
|
||||
# 318| getAnOperand/getLeftOperand: [MethodCall] call to bar
|
||||
# 318| getStmt: [AssignExpr] ... = ...
|
||||
# 318| getAnOperand/getRightOperand: [MethodCall] call to foo
|
||||
# 318| getReceiver: [SelfVariableAccess] self
|
||||
# 318| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__2
|
||||
# 318| getStmt: [AssignExpr] ... = ...
|
||||
# 318| getAnOperand/getLeftOperand: [ElementReference] ...[...]
|
||||
# 318| getDesugared: [StmtSequence] ...
|
||||
# 318| getStmt: [SetterMethodCall] call to []=
|
||||
# 318| getReceiver: [MethodCall] call to foo
|
||||
# 318| getReceiver: [SelfVariableAccess] self
|
||||
# 318| getReceiver: [LocalVariableAccess] __synth__2
|
||||
# 318| getArgument: [AssignExpr] ... = ...
|
||||
# 318| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__0__1
|
||||
# 318| getAnOperand/getRightOperand: [MethodCall] call to []
|
||||
# 318| getReceiver: [LocalVariableAccess] __synth__0
|
||||
# 318| getReceiver: [LocalVariableAccess] __synth__3
|
||||
# 318| getArgument: [IntegerLiteral] -1
|
||||
# 318| getArgument: [IntegerLiteral] 4
|
||||
# 318| getStmt: [LocalVariableAccess] __synth__0__1
|
||||
# 318| getAnOperand/getLeftOperand: [MethodCall] call to []
|
||||
# 318| getStmt: [AssignExpr] ... = ...
|
||||
# 318| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__0
|
||||
# 318| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__3
|
||||
# 318| getAnOperand/getRightOperand: [SplatExpr] * ...
|
||||
# 318| getAnOperand/getOperand/getReceiver: [ArrayLiteral] [...]
|
||||
# 318| getDesugared: [MethodCall] call to []
|
||||
@@ -132,25 +141,28 @@ calls/calls.rb:
|
||||
# 319| getStmt: [AssignExpr] ... = ...
|
||||
# 319| getAnOperand/getLeftOperand: [LocalVariableAccess] a
|
||||
# 319| getAnOperand/getRightOperand: [MethodCall] call to []
|
||||
# 319| getReceiver: [LocalVariableAccess] __synth__0
|
||||
# 319| getReceiver: [LocalVariableAccess] __synth__2
|
||||
# 319| getArgument: [IntegerLiteral] 0
|
||||
# 319| getStmt: [AssignExpr] ... = ...
|
||||
# 319| getAnOperand/getLeftOperand: [ElementReference] ...[...]
|
||||
# 319| getAnOperand/getRightOperand: [MethodCall] call to foo
|
||||
# 319| getReceiver: [SelfVariableAccess] self
|
||||
# 319| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__1
|
||||
# 319| getStmt: [AssignExpr] ... = ...
|
||||
# 319| getDesugared: [StmtSequence] ...
|
||||
# 319| getStmt: [SetterMethodCall] call to []=
|
||||
# 319| getReceiver: [MethodCall] call to foo
|
||||
# 319| getReceiver: [SelfVariableAccess] self
|
||||
# 319| getReceiver: [LocalVariableAccess] __synth__1
|
||||
# 319| getArgument: [AssignExpr] ... = ...
|
||||
# 319| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__0__1
|
||||
# 319| getAnOperand/getRightOperand: [MethodCall] call to []
|
||||
# 319| getReceiver: [LocalVariableAccess] __synth__0
|
||||
# 319| getReceiver: [LocalVariableAccess] __synth__2
|
||||
# 319| getArgument: [RangeLiteral] _ .. _
|
||||
# 319| getBegin: [IntegerLiteral] 1
|
||||
# 319| getEnd: [IntegerLiteral] -1
|
||||
# 319| getArgument: [IntegerLiteral] 5
|
||||
# 319| getStmt: [LocalVariableAccess] __synth__0__1
|
||||
# 319| getAnOperand/getLeftOperand: [MethodCall] call to []
|
||||
# 319| getStmt: [AssignExpr] ... = ...
|
||||
# 319| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__0
|
||||
# 319| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__2
|
||||
# 319| getAnOperand/getRightOperand: [SplatExpr] * ...
|
||||
# 319| getAnOperand/getOperand/getReceiver: [ArrayLiteral] [...]
|
||||
# 319| getDesugared: [MethodCall] call to []
|
||||
@@ -240,23 +252,23 @@ calls/calls.rb:
|
||||
# 342| getStmt: [AssignExpr] ... = ...
|
||||
# 342| getDesugared: [StmtSequence] ...
|
||||
# 342| getStmt: [AssignExpr] ... = ...
|
||||
# 342| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__0__1
|
||||
# 342| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__3__1
|
||||
# 342| getAnOperand/getRightOperand: [SplatExpr] * ...
|
||||
# 342| getAnOperand/getOperand/getReceiver: [LocalVariableAccess] __synth__0__1
|
||||
# 342| getStmt: [AssignExpr] ... = ...
|
||||
# 342| getAnOperand/getLeftOperand: [LocalVariableAccess] x
|
||||
# 342| getAnOperand/getRightOperand: [MethodCall] call to []
|
||||
# 342| getReceiver: [LocalVariableAccess] __synth__0__1
|
||||
# 342| getReceiver: [LocalVariableAccess] __synth__3__1
|
||||
# 342| getArgument: [IntegerLiteral] 0
|
||||
# 342| getStmt: [AssignExpr] ... = ...
|
||||
# 342| getAnOperand/getLeftOperand: [LocalVariableAccess] y
|
||||
# 342| getAnOperand/getRightOperand: [MethodCall] call to []
|
||||
# 342| getReceiver: [LocalVariableAccess] __synth__0__1
|
||||
# 342| getReceiver: [LocalVariableAccess] __synth__3__1
|
||||
# 342| getArgument: [IntegerLiteral] 1
|
||||
# 342| getStmt: [AssignExpr] ... = ...
|
||||
# 342| getAnOperand/getLeftOperand: [LocalVariableAccess] z
|
||||
# 342| getAnOperand/getRightOperand: [MethodCall] call to []
|
||||
# 342| getReceiver: [LocalVariableAccess] __synth__0__1
|
||||
# 342| getReceiver: [LocalVariableAccess] __synth__3__1
|
||||
# 342| getArgument: [IntegerLiteral] 2
|
||||
# 342| getAnOperand/getLeftOperand: [DestructuredLhsExpr] (..., ...)
|
||||
# 343| getStmt: [MethodCall] call to foo
|
||||
@@ -632,18 +644,18 @@ control/loops.rb:
|
||||
# 22| getStmt: [AssignExpr] ... = ...
|
||||
# 22| getDesugared: [StmtSequence] ...
|
||||
# 22| getStmt: [AssignExpr] ... = ...
|
||||
# 22| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__0__1
|
||||
# 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__0__1
|
||||
# 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__0__1
|
||||
# 22| getReceiver: [LocalVariableAccess] __synth__2__1
|
||||
# 22| getArgument: [IntegerLiteral] 1
|
||||
# 22| getAnOperand/getLeftOperand: [DestructuredLhsExpr] (..., ...)
|
||||
# 23| getStmt: [AssignAddExpr] ... += ...
|
||||
@@ -677,18 +689,18 @@ control/loops.rb:
|
||||
# 28| getStmt: [AssignExpr] ... = ...
|
||||
# 28| getDesugared: [StmtSequence] ...
|
||||
# 28| getStmt: [AssignExpr] ... = ...
|
||||
# 28| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__0__1
|
||||
# 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__0__1
|
||||
# 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__0__1
|
||||
# 28| getReceiver: [LocalVariableAccess] __synth__2__1
|
||||
# 28| getArgument: [IntegerLiteral] 1
|
||||
# 28| getAnOperand/getLeftOperand: [DestructuredLhsExpr] (..., ...)
|
||||
# 29| getStmt: [AssignAddExpr] ... += ...
|
||||
@@ -934,6 +946,36 @@ operations/operations.rb:
|
||||
# 103| getAnOperand/getRightOperand: [LogicalOrExpr] ... || ...
|
||||
# 103| getAnOperand/getLeftOperand/getReceiver: [ConstantReadAccess] CONSTANT4
|
||||
# 103| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 7
|
||||
# 104| [AssignExpr] ... = ...
|
||||
# 104| getDesugared: [StmtSequence] ...
|
||||
# 104| getStmt: [AssignExpr] ... = ...
|
||||
# 104| getAnOperand/getLeftOperand: [ConstantAssignment] FOO
|
||||
# 104| getAnOperand/getRightOperand: [MethodCall] call to []
|
||||
# 104| getReceiver: [LocalVariableAccess] __synth__3
|
||||
# 104| getArgument: [IntegerLiteral] 0
|
||||
# 104| getStmt: [AssignExpr] ... = ...
|
||||
# 104| getAnOperand/getLeftOperand: [ConstantAssignment] BAR
|
||||
# 104| getAnOperand/getRightOperand: [MethodCall] call to []
|
||||
# 104| getReceiver: [LocalVariableAccess] __synth__3
|
||||
# 104| getArgument: [IntegerLiteral] 1
|
||||
# 104| getStmt: [AssignExpr] ... = ...
|
||||
# 104| getAnOperand/getRightOperand: [LocalVariableAccess] foo
|
||||
# 104| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__2
|
||||
# 104| getStmt: [AssignExpr] ... = ...
|
||||
# 104| getAnOperand/getLeftOperand: [ConstantAssignment] FOO
|
||||
# 104| getScopeExpr: [LocalVariableAccess] __synth__2
|
||||
# 104| getAnOperand/getRightOperand: [MethodCall] call to []
|
||||
# 104| getReceiver: [LocalVariableAccess] __synth__3
|
||||
# 104| getArgument: [IntegerLiteral] 2
|
||||
# 104| getStmt: [AssignExpr] ... = ...
|
||||
# 104| getAnOperand/getLeftOperand: [LocalVariableAccess] __synth__3
|
||||
# 104| getAnOperand/getRightOperand: [SplatExpr] * ...
|
||||
# 104| getAnOperand/getOperand/getReceiver: [ArrayLiteral] [...]
|
||||
# 104| getDesugared: [MethodCall] call to []
|
||||
# 104| getReceiver: [ConstantReadAccess] Array
|
||||
# 104| getArgument: [IntegerLiteral] 1
|
||||
# 104| getArgument: [IntegerLiteral] 2
|
||||
# 104| getArgument: [IntegerLiteral] 3
|
||||
params/params.rb:
|
||||
# 8| [HashLiteral] {...}
|
||||
# 8| getDesugared: [MethodCall] call to []
|
||||
|
||||
@@ -5615,6 +5615,27 @@ operations/operations.rb:
|
||||
# 103| 1: [Constant] CONSTANT4
|
||||
# 103| 1: [ReservedWord] ||=
|
||||
# 103| 2: [Integer] 7
|
||||
# 104| 72: [Assignment] Assignment
|
||||
# 104| 0: [LeftAssignmentList] LeftAssignmentList
|
||||
# 104| 0: [Constant] FOO
|
||||
# 104| 1: [ReservedWord] ,
|
||||
# 104| 2: [ScopeResolution] ScopeResolution
|
||||
# 104| 0: [ReservedWord] ::
|
||||
# 104| 1: [Constant] BAR
|
||||
# 104| 3: [ReservedWord] ,
|
||||
# 104| 4: [ScopeResolution] ScopeResolution
|
||||
# 104| 0: [Identifier] foo
|
||||
# 104| 1: [ReservedWord] ::
|
||||
# 104| 2: [Constant] FOO
|
||||
# 104| 1: [ReservedWord] =
|
||||
# 104| 2: [Array] Array
|
||||
# 104| 0: [ReservedWord] [
|
||||
# 104| 1: [Integer] 1
|
||||
# 104| 2: [ReservedWord] ,
|
||||
# 104| 3: [Integer] 2
|
||||
# 104| 4: [ReservedWord] ,
|
||||
# 104| 5: [Integer] 3
|
||||
# 104| 6: [ReservedWord] ]
|
||||
# 1| [Comment] # Start with assignments to all the identifiers used below, so that they are
|
||||
# 2| [Comment] # interpreted as variables.
|
||||
# 22| [Comment] # Unary operations
|
||||
|
||||
@@ -903,6 +903,12 @@ exprValue
|
||||
| operations/operations.rb:102:5:102:5 | 1 | 1 | int |
|
||||
| operations/operations.rb:102:31:102:31 | 7 | 7 | int |
|
||||
| operations/operations.rb:103:17:103:17 | 7 | 7 | int |
|
||||
| operations/operations.rb:104:1:104:3 | 0 | 0 | int |
|
||||
| operations/operations.rb:104:6:104:10 | 1 | 1 | int |
|
||||
| operations/operations.rb:104:13:104:20 | 2 | 2 | int |
|
||||
| operations/operations.rb:104:25:104:25 | 1 | 1 | int |
|
||||
| operations/operations.rb:104:28:104:28 | 2 | 2 | int |
|
||||
| operations/operations.rb:104:31:104:31 | 3 | 3 | int |
|
||||
| params/params.rb:41:46:41:46 | 7 | 7 | int |
|
||||
| params/params.rb:47:19:47:21 | :bar | :bar | symbol |
|
||||
| params/params.rb:47:24:47:24 | 2 | 2 | int |
|
||||
@@ -1792,6 +1798,12 @@ exprCfgNodeValue
|
||||
| operations/operations.rb:102:5:102:5 | 1 | 1 | int |
|
||||
| operations/operations.rb:102:31:102:31 | 7 | 7 | int |
|
||||
| operations/operations.rb:103:17:103:17 | 7 | 7 | int |
|
||||
| operations/operations.rb:104:1:104:3 | 0 | 0 | int |
|
||||
| operations/operations.rb:104:6:104:10 | 1 | 1 | int |
|
||||
| operations/operations.rb:104:13:104:20 | 2 | 2 | int |
|
||||
| operations/operations.rb:104:25:104:25 | 1 | 1 | int |
|
||||
| operations/operations.rb:104:28:104:28 | 2 | 2 | int |
|
||||
| operations/operations.rb:104:31:104:31 | 3 | 3 | int |
|
||||
| params/params.rb:41:46:41:46 | 7 | 7 | int |
|
||||
| params/params.rb:47:19:47:21 | :bar | :bar | symbol |
|
||||
| params/params.rb:47:24:47:24 | 2 | 2 | int |
|
||||
|
||||
@@ -61,6 +61,7 @@ callsWithArguments
|
||||
| calls.rb:318:12:318:19 | call to bar= | bar= | 0 | calls.rb:318:12:318:19 | ... = ... |
|
||||
| calls.rb:318:22:318:27 | ...[...] | [] | 0 | calls.rb:318:26:318:26 | 4 |
|
||||
| calls.rb:318:22:318:27 | call to [] | [] | 0 | calls.rb:318:22:318:27 | -1 |
|
||||
| calls.rb:318:22:318:27 | call to [] | [] | 0 | calls.rb:318:26:318:26 | 4 |
|
||||
| calls.rb:318:22:318:27 | call to []= | []= | 0 | calls.rb:318:26:318:26 | 4 |
|
||||
| calls.rb:318:22:318:27 | call to []= | []= | 1 | calls.rb:318:22:318:27 | ... = ... |
|
||||
| calls.rb:318:31:318:42 | call to [] | [] | 0 | calls.rb:318:32:318:32 | 1 |
|
||||
@@ -70,6 +71,7 @@ callsWithArguments
|
||||
| calls.rb:319:1:319:1 | call to [] | [] | 0 | calls.rb:319:1:319:1 | 0 |
|
||||
| calls.rb:319:5:319:10 | ...[...] | [] | 0 | calls.rb:319:9:319:9 | 5 |
|
||||
| calls.rb:319:5:319:10 | call to [] | [] | 0 | calls.rb:319:5:319:10 | _ .. _ |
|
||||
| calls.rb:319:5:319:10 | call to [] | [] | 0 | calls.rb:319:9:319:9 | 5 |
|
||||
| calls.rb:319:5:319:10 | call to []= | []= | 0 | calls.rb:319:9:319:9 | 5 |
|
||||
| calls.rb:319:5:319:10 | call to []= | []= | 1 | calls.rb:319:5:319:10 | ... = ... |
|
||||
| calls.rb:319:14:319:22 | call to [] | [] | 0 | calls.rb:319:15:319:15 | 1 |
|
||||
@@ -321,23 +323,27 @@ callsWithReceiver
|
||||
| calls.rb:317:1:317:3 | call to foo | calls.rb:317:1:317:3 | self |
|
||||
| calls.rb:317:1:317:6 | ...[...] | calls.rb:317:1:317:3 | call to foo |
|
||||
| calls.rb:317:1:317:6 | call to []= | calls.rb:317:1:317:3 | call to foo |
|
||||
| calls.rb:318:1:318:8 | call to [] | calls.rb:318:1:318:8 | __synth__0 |
|
||||
| calls.rb:318:1:318:8 | call to [] | calls.rb:318:1:318:8 | __synth__3 |
|
||||
| calls.rb:318:1:318:8 | call to foo | calls.rb:318:1:318:4 | self |
|
||||
| calls.rb:318:1:318:8 | call to foo= | calls.rb:318:1:318:4 | self |
|
||||
| calls.rb:318:12:318:19 | call to [] | calls.rb:318:12:318:19 | __synth__0 |
|
||||
| calls.rb:318:1:318:8 | call to foo | calls.rb:318:1:318:8 | __synth__0 |
|
||||
| calls.rb:318:1:318:8 | call to foo= | calls.rb:318:1:318:8 | __synth__0 |
|
||||
| calls.rb:318:12:318:19 | call to [] | calls.rb:318:12:318:19 | __synth__3 |
|
||||
| calls.rb:318:12:318:19 | call to bar | calls.rb:318:12:318:15 | self |
|
||||
| calls.rb:318:12:318:19 | call to bar= | calls.rb:318:12:318:15 | self |
|
||||
| calls.rb:318:12:318:19 | call to bar | calls.rb:318:12:318:19 | __synth__1 |
|
||||
| calls.rb:318:12:318:19 | call to bar= | calls.rb:318:12:318:19 | __synth__1 |
|
||||
| calls.rb:318:22:318:24 | call to foo | calls.rb:318:22:318:24 | self |
|
||||
| calls.rb:318:22:318:27 | ...[...] | calls.rb:318:22:318:24 | call to foo |
|
||||
| calls.rb:318:22:318:27 | call to [] | calls.rb:318:22:318:27 | __synth__0 |
|
||||
| calls.rb:318:22:318:27 | call to []= | calls.rb:318:22:318:24 | call to foo |
|
||||
| calls.rb:318:22:318:27 | call to [] | calls.rb:318:22:318:27 | __synth__2 |
|
||||
| calls.rb:318:22:318:27 | call to [] | calls.rb:318:22:318:27 | __synth__3 |
|
||||
| calls.rb:318:22:318:27 | call to []= | calls.rb:318:22:318:27 | __synth__2 |
|
||||
| calls.rb:318:31:318:42 | * ... | calls.rb:318:31:318:42 | [...] |
|
||||
| calls.rb:318:31:318:42 | call to [] | calls.rb:318:31:318:42 | Array |
|
||||
| calls.rb:319:1:319:1 | call to [] | calls.rb:319:1:319:1 | __synth__0 |
|
||||
| calls.rb:319:1:319:1 | call to [] | calls.rb:319:1:319:1 | __synth__2 |
|
||||
| calls.rb:319:5:319:7 | call to foo | calls.rb:319:5:319:7 | self |
|
||||
| calls.rb:319:5:319:10 | ...[...] | calls.rb:319:5:319:7 | call to foo |
|
||||
| calls.rb:319:5:319:10 | call to [] | calls.rb:319:5:319:10 | __synth__0 |
|
||||
| calls.rb:319:5:319:10 | call to []= | calls.rb:319:5:319:7 | call to foo |
|
||||
| calls.rb:319:5:319:10 | call to [] | calls.rb:319:5:319:10 | __synth__1 |
|
||||
| calls.rb:319:5:319:10 | call to [] | calls.rb:319:5:319:10 | __synth__2 |
|
||||
| calls.rb:319:5:319:10 | call to []= | calls.rb:319:5:319:10 | __synth__1 |
|
||||
| calls.rb:319:14:319:22 | * ... | calls.rb:319:14:319:22 | [...] |
|
||||
| calls.rb:319:14:319:22 | call to [] | calls.rb:319:14:319:22 | Array |
|
||||
| calls.rb:320:1:320:10 | call to count | calls.rb:320:1:320:4 | __synth__0 |
|
||||
@@ -370,9 +376,9 @@ callsWithReceiver
|
||||
| calls.rb:338:3:338:13 | call to bar | calls.rb:338:3:338:13 | self |
|
||||
| calls.rb:342:1:344:3 | * ... | calls.rb:342:1:344:3 | __synth__0__1 |
|
||||
| calls.rb:342:1:344:3 | call to each | calls.rb:342:16:342:33 | [...] |
|
||||
| calls.rb:342:5:342:5 | call to [] | calls.rb:342:5:342:5 | __synth__0__1 |
|
||||
| calls.rb:342:8:342:8 | call to [] | calls.rb:342:8:342:8 | __synth__0__1 |
|
||||
| calls.rb:342:11:342:11 | call to [] | calls.rb:342:11:342:11 | __synth__0__1 |
|
||||
| calls.rb:342:5:342:5 | call to [] | calls.rb:342:5:342:5 | __synth__3__1 |
|
||||
| calls.rb:342:8:342:8 | call to [] | calls.rb:342:8:342:8 | __synth__3__1 |
|
||||
| calls.rb:342:11:342:11 | call to [] | calls.rb:342:11:342:11 | __synth__3__1 |
|
||||
| calls.rb:342:16:342:33 | call to [] | calls.rb:342:16:342:33 | Array |
|
||||
| calls.rb:342:17:342:23 | call to [] | calls.rb:342:17:342:23 | Array |
|
||||
| calls.rb:342:26:342:32 | call to [] | calls.rb:342:26:342:32 | Array |
|
||||
|
||||
@@ -65,6 +65,12 @@ assignments
|
||||
| operations.rb:102:1:102:31 | ... \|\|= ... | \|\|= | operations.rb:102:1:102:25 | OtherConstant | operations.rb:102:31:102:31 | 7 | AssignLogicalOrExpr |
|
||||
| operations.rb:103:1:103:17 | ... = ... | = | operations.rb:103:1:103:11 | CONSTANT4 | operations.rb:103:13:103:15 | ... \|\| ... | AssignExpr |
|
||||
| operations.rb:103:1:103:17 | ... \|\|= ... | \|\|= | operations.rb:103:1:103:11 | CONSTANT4 | operations.rb:103:17:103:17 | 7 | AssignLogicalOrExpr |
|
||||
| operations.rb:104:1:104:3 | ... = ... | = | operations.rb:104:1:104:3 | FOO | operations.rb:104:1:104:3 | call to [] | AssignExpr |
|
||||
| operations.rb:104:1:104:32 | ... = ... | = | operations.rb:104:1:104:20 | (..., ...) | operations.rb:104:24:104:32 | [...] | AssignExpr |
|
||||
| operations.rb:104:6:104:10 | ... = ... | = | operations.rb:104:6:104:10 | BAR | operations.rb:104:6:104:10 | call to [] | AssignExpr |
|
||||
| operations.rb:104:13:104:15 | ... = ... | = | operations.rb:104:13:104:15 | __synth__2 | operations.rb:104:13:104:15 | foo | AssignExpr |
|
||||
| operations.rb:104:13:104:20 | ... = ... | = | operations.rb:104:13:104:20 | FOO | operations.rb:104:13:104:20 | call to [] | AssignExpr |
|
||||
| operations.rb:104:24:104:32 | ... = ... | = | operations.rb:104:24:104:32 | __synth__3 | operations.rb:104:24:104:32 | * ... | AssignExpr |
|
||||
assignOperations
|
||||
| operations.rb:69:1:69:8 | ... += ... | += | operations.rb:69:1:69:1 | x | operations.rb:69:6:69:8 | 128 | AssignAddExpr |
|
||||
| operations.rb:70:1:70:7 | ... -= ... | -= | operations.rb:70:1:70:1 | y | operations.rb:70:6:70:7 | 32 | AssignSubExpr |
|
||||
|
||||
@@ -230,3 +230,16 @@
|
||||
| operations.rb:103:1:103:17 | ... \|\|= ... | \|\|= | operations.rb:103:17:103:17 | 7 | AssignLogicalOrExpr |
|
||||
| operations.rb:103:13:103:15 | ... \|\| ... | \|\| | operations.rb:103:1:103:11 | CONSTANT4 | LogicalOrExpr |
|
||||
| operations.rb:103:13:103:15 | ... \|\| ... | \|\| | operations.rb:103:17:103:17 | 7 | LogicalOrExpr |
|
||||
| operations.rb:104:1:104:3 | ... = ... | = | operations.rb:104:1:104:3 | FOO | AssignExpr |
|
||||
| operations.rb:104:1:104:3 | ... = ... | = | operations.rb:104:1:104:3 | call to [] | AssignExpr |
|
||||
| operations.rb:104:1:104:32 | ... = ... | = | operations.rb:104:1:104:20 | (..., ...) | AssignExpr |
|
||||
| operations.rb:104:1:104:32 | ... = ... | = | operations.rb:104:24:104:32 | [...] | AssignExpr |
|
||||
| operations.rb:104:6:104:10 | ... = ... | = | operations.rb:104:6:104:10 | BAR | AssignExpr |
|
||||
| operations.rb:104:6:104:10 | ... = ... | = | operations.rb:104:6:104:10 | call to [] | AssignExpr |
|
||||
| operations.rb:104:13:104:15 | ... = ... | = | operations.rb:104:13:104:15 | __synth__2 | AssignExpr |
|
||||
| operations.rb:104:13:104:15 | ... = ... | = | operations.rb:104:13:104:15 | foo | AssignExpr |
|
||||
| operations.rb:104:13:104:20 | ... = ... | = | operations.rb:104:13:104:20 | FOO | AssignExpr |
|
||||
| operations.rb:104:13:104:20 | ... = ... | = | operations.rb:104:13:104:20 | call to [] | AssignExpr |
|
||||
| operations.rb:104:24:104:32 | * ... | * | operations.rb:104:24:104:32 | [...] | SplatExpr |
|
||||
| operations.rb:104:24:104:32 | ... = ... | = | operations.rb:104:24:104:32 | * ... | AssignExpr |
|
||||
| operations.rb:104:24:104:32 | ... = ... | = | operations.rb:104:24:104:32 | __synth__3 | AssignExpr |
|
||||
|
||||
@@ -101,3 +101,4 @@ CONSTANT3 ||= 7
|
||||
Foo::MemberConstant ||= 8
|
||||
foo(1).bar::OtherConstant ||= 7
|
||||
::CONSTANT4 ||= 7
|
||||
FOO, ::BAR, foo::FOO = [1, 2, 3]
|
||||
|
||||
@@ -7,6 +7,7 @@ unaryOperations
|
||||
| operations.rb:28:1:28:12 | defined? ... | defined? | operations.rb:28:10:28:12 | foo | DefinedExpr |
|
||||
| operations.rb:29:20:29:23 | * ... | * | operations.rb:29:21:29:23 | [...] | SplatExpr |
|
||||
| operations.rb:29:31:29:42 | ** ... | ** | operations.rb:29:33:29:42 | {...} | HashSplatExpr |
|
||||
| operations.rb:104:24:104:32 | * ... | * | operations.rb:104:24:104:32 | [...] | SplatExpr |
|
||||
unaryLogicalOperations
|
||||
| operations.rb:23:1:23:2 | ! ... | ! | operations.rb:23:2:23:2 | a | NotExpr |
|
||||
| operations.rb:24:1:24:5 | not ... | not | operations.rb:24:5:24:5 | b | NotExpr |
|
||||
|
||||
@@ -2083,7 +2083,7 @@ cfg.rb:
|
||||
#-----| -> constant
|
||||
|
||||
# 61| ... = ...
|
||||
#-----| -> __synth__0
|
||||
#-----| -> __synth__2
|
||||
|
||||
# 61| "constant"
|
||||
#-----| -> ... = ...
|
||||
@@ -2095,19 +2095,19 @@ cfg.rb:
|
||||
#-----| -> pattern
|
||||
|
||||
# 62| ... = ...
|
||||
#-----| -> __synth__0__1
|
||||
#-----| -> __synth__2__1
|
||||
|
||||
# 62| 0
|
||||
#-----| -> call to []
|
||||
|
||||
# 62| __synth__0
|
||||
# 62| __synth__2
|
||||
#-----| -> 0
|
||||
|
||||
# 62| call to []
|
||||
#-----| -> ... = ...
|
||||
|
||||
# 62| x
|
||||
#-----| -> __synth__0
|
||||
#-----| -> __synth__2
|
||||
|
||||
# 62| * ...
|
||||
#-----| -> ... = ...
|
||||
@@ -2121,11 +2121,11 @@ cfg.rb:
|
||||
# 62| 1
|
||||
#-----| -> call to []
|
||||
|
||||
# 62| __synth__0
|
||||
# 62| __synth__2
|
||||
#-----| -> 1
|
||||
|
||||
# 62| __synth__0__1
|
||||
#-----| -> __synth__0
|
||||
# 62| __synth__2__1
|
||||
#-----| -> __synth__2
|
||||
|
||||
# 62| call to []
|
||||
#-----| -> * ...
|
||||
@@ -2136,14 +2136,14 @@ cfg.rb:
|
||||
# 62| 0
|
||||
#-----| -> call to []
|
||||
|
||||
# 62| __synth__0__1
|
||||
# 62| __synth__2__1
|
||||
#-----| -> 0
|
||||
|
||||
# 62| call to []
|
||||
#-----| -> ... = ...
|
||||
|
||||
# 62| y
|
||||
#-----| -> __synth__0__1
|
||||
#-----| -> __synth__2__1
|
||||
|
||||
# 62| ... = ...
|
||||
#-----| -> ...
|
||||
@@ -2151,14 +2151,14 @@ cfg.rb:
|
||||
# 62| 1
|
||||
#-----| -> call to []
|
||||
|
||||
# 62| __synth__0__1
|
||||
# 62| __synth__2__1
|
||||
#-----| -> 1
|
||||
|
||||
# 62| call to []
|
||||
#-----| -> ... = ...
|
||||
|
||||
# 62| z
|
||||
#-----| -> __synth__0__1
|
||||
#-----| -> __synth__2__1
|
||||
|
||||
# 62| * ...
|
||||
#-----| -> ... = ...
|
||||
@@ -2169,7 +2169,7 @@ cfg.rb:
|
||||
# 62| Array
|
||||
#-----| -> 1
|
||||
|
||||
# 62| __synth__0
|
||||
# 62| __synth__2
|
||||
#-----| -> Array
|
||||
|
||||
# 62| call to []
|
||||
@@ -2918,7 +2918,7 @@ cfg.rb:
|
||||
#-----| raise -> self
|
||||
|
||||
# 136| ... rescue ...
|
||||
#-----| -> __synth__0
|
||||
#-----| -> __synth__2
|
||||
|
||||
# 136| 0
|
||||
#-----| -> ... / ...
|
||||
@@ -2950,14 +2950,14 @@ cfg.rb:
|
||||
# 138| _ .. _
|
||||
#-----| -> call to []
|
||||
|
||||
# 138| __synth__0
|
||||
# 138| __synth__2
|
||||
#-----| -> 0
|
||||
|
||||
# 138| call to []
|
||||
#-----| -> ... = ...
|
||||
|
||||
# 138| init
|
||||
#-----| -> __synth__0
|
||||
#-----| -> __synth__2
|
||||
|
||||
# 138| -1
|
||||
#-----| -> call to []
|
||||
@@ -2965,14 +2965,14 @@ cfg.rb:
|
||||
# 138| ... = ...
|
||||
#-----| -> ...
|
||||
|
||||
# 138| __synth__0
|
||||
# 138| __synth__2
|
||||
#-----| -> -1
|
||||
|
||||
# 138| call to []
|
||||
#-----| -> ... = ...
|
||||
|
||||
# 138| last
|
||||
#-----| -> __synth__0
|
||||
#-----| -> __synth__2
|
||||
|
||||
# 138| 1
|
||||
#-----| -> 2
|
||||
@@ -2986,7 +2986,7 @@ cfg.rb:
|
||||
# 138| ..., ...
|
||||
#-----| -> * ...
|
||||
|
||||
# 138| __synth__0
|
||||
# 138| __synth__2
|
||||
#-----| -> 1
|
||||
|
||||
# 138| 2
|
||||
@@ -4151,7 +4151,7 @@ desugar.rb:
|
||||
#-----| -> ... + ...
|
||||
|
||||
# 21| enter m6
|
||||
#-----| -> __synth__0
|
||||
#-----| -> __synth__2
|
||||
|
||||
# 21| exit m6
|
||||
|
||||
@@ -4167,14 +4167,14 @@ desugar.rb:
|
||||
# 22| 0
|
||||
#-----| -> call to []
|
||||
|
||||
# 22| __synth__0
|
||||
# 22| __synth__3
|
||||
#-----| -> 0
|
||||
|
||||
# 22| call to []
|
||||
#-----| -> ... = ...
|
||||
|
||||
# 22| x
|
||||
#-----| -> __synth__0
|
||||
#-----| -> __synth__3
|
||||
|
||||
# 22| ...
|
||||
#-----| -> exit m6 (normal)
|
||||
@@ -4183,7 +4183,7 @@ desugar.rb:
|
||||
#-----| -> _ .. _
|
||||
|
||||
# 22| ... = ...
|
||||
#-----| -> self
|
||||
#-----| -> __synth__2
|
||||
|
||||
# 22| 1
|
||||
#-----| -> -2
|
||||
@@ -4191,17 +4191,23 @@ desugar.rb:
|
||||
# 22| _ .. _
|
||||
#-----| -> call to []
|
||||
|
||||
# 22| __synth__0
|
||||
# 22| __synth__3
|
||||
#-----| -> 1
|
||||
|
||||
# 22| call to []
|
||||
#-----| -> ... = ...
|
||||
|
||||
# 22| y
|
||||
#-----| -> __synth__0
|
||||
#-----| -> __synth__3
|
||||
|
||||
# 22| ... = ...
|
||||
#-----| -> __synth__3
|
||||
|
||||
# 22| __synth__2
|
||||
#-----| -> self
|
||||
|
||||
# 22| call to z
|
||||
#-----| -> __synth__0__1
|
||||
#-----| -> ... = ...
|
||||
|
||||
# 22| self
|
||||
#-----| -> call to z
|
||||
@@ -4215,14 +4221,17 @@ desugar.rb:
|
||||
# 22| ... = ...
|
||||
#-----| -> call to bar=
|
||||
|
||||
# 22| __synth__0
|
||||
#-----| -> -1
|
||||
|
||||
# 22| __synth__0__1
|
||||
#-----| -> ...
|
||||
|
||||
# 22| __synth__0__1
|
||||
#-----| -> __synth__0
|
||||
#-----| -> __synth__3
|
||||
|
||||
# 22| __synth__2
|
||||
#-----| -> __synth__0__1
|
||||
|
||||
# 22| __synth__3
|
||||
#-----| -> -1
|
||||
|
||||
# 22| call to []
|
||||
#-----| -> ... = ...
|
||||
@@ -4239,7 +4248,7 @@ desugar.rb:
|
||||
# 22| Array
|
||||
#-----| -> 1
|
||||
|
||||
# 22| __synth__0
|
||||
# 22| __synth__3
|
||||
#-----| -> Array
|
||||
|
||||
# 22| call to []
|
||||
@@ -4258,7 +4267,7 @@ desugar.rb:
|
||||
#-----| -> call to []
|
||||
|
||||
# 25| enter m7
|
||||
#-----| -> __synth__0
|
||||
#-----| -> __synth__2
|
||||
|
||||
# 25| exit m7
|
||||
|
||||
@@ -4269,19 +4278,19 @@ desugar.rb:
|
||||
#-----| -> X
|
||||
|
||||
# 26| ... = ...
|
||||
#-----| -> __synth__0__1
|
||||
#-----| -> __synth__2__1
|
||||
|
||||
# 26| 0
|
||||
#-----| -> call to []
|
||||
|
||||
# 26| __synth__0
|
||||
# 26| __synth__2
|
||||
#-----| -> 0
|
||||
|
||||
# 26| call to []
|
||||
#-----| -> ... = ...
|
||||
|
||||
# 26| x
|
||||
#-----| -> __synth__0
|
||||
#-----| -> __synth__2
|
||||
|
||||
# 26| ...
|
||||
#-----| -> exit m7 (normal)
|
||||
@@ -4298,11 +4307,11 @@ desugar.rb:
|
||||
# 26| 1
|
||||
#-----| -> call to []
|
||||
|
||||
# 26| __synth__0
|
||||
# 26| __synth__2
|
||||
#-----| -> 1
|
||||
|
||||
# 26| __synth__0__1
|
||||
#-----| -> __synth__0
|
||||
# 26| __synth__2__1
|
||||
#-----| -> __synth__2
|
||||
|
||||
# 26| call to []
|
||||
#-----| -> * ...
|
||||
@@ -4313,14 +4322,14 @@ desugar.rb:
|
||||
# 26| 0
|
||||
#-----| -> call to []
|
||||
|
||||
# 26| __synth__0__1
|
||||
# 26| __synth__2__1
|
||||
#-----| -> 0
|
||||
|
||||
# 26| call to []
|
||||
#-----| -> ... = ...
|
||||
|
||||
# 26| y
|
||||
#-----| -> __synth__0__1
|
||||
#-----| -> __synth__2__1
|
||||
|
||||
# 26| ... = ...
|
||||
#-----| -> ...
|
||||
@@ -4328,14 +4337,14 @@ desugar.rb:
|
||||
# 26| 1
|
||||
#-----| -> call to []
|
||||
|
||||
# 26| __synth__0__1
|
||||
# 26| __synth__2__1
|
||||
#-----| -> 1
|
||||
|
||||
# 26| call to []
|
||||
#-----| -> ... = ...
|
||||
|
||||
# 26| z
|
||||
#-----| -> __synth__0__1
|
||||
#-----| -> __synth__2__1
|
||||
|
||||
# 26| * ...
|
||||
#-----| -> ... = ...
|
||||
@@ -4346,7 +4355,7 @@ desugar.rb:
|
||||
# 26| Array
|
||||
#-----| -> 1
|
||||
|
||||
# 26| __synth__0
|
||||
# 26| __synth__2
|
||||
#-----| -> Array
|
||||
|
||||
# 26| call to []
|
||||
|
||||
@@ -203,10 +203,10 @@ edges
|
||||
| array_flow.rb:80:13:80:21 | call to source : | array_flow.rb:80:5:80:5 | a [element 1] : |
|
||||
| array_flow.rb:81:8:81:8 | c : | array_flow.rb:83:10:83:10 | c |
|
||||
| array_flow.rb:81:8:81:8 | c : | array_flow.rb:83:10:83:10 | c |
|
||||
| array_flow.rb:81:15:81:15 | __synth__0 [element 1] : | array_flow.rb:81:8:81:8 | c : |
|
||||
| array_flow.rb:81:15:81:15 | __synth__0 [element 1] : | array_flow.rb:81:8:81:8 | c : |
|
||||
| array_flow.rb:81:15:81:15 | a [element 1] : | array_flow.rb:81:15:81:15 | __synth__0 [element 1] : |
|
||||
| array_flow.rb:81:15:81:15 | a [element 1] : | array_flow.rb:81:15:81:15 | __synth__0 [element 1] : |
|
||||
| array_flow.rb:81:15:81:15 | __synth__3 [element 1] : | array_flow.rb:81:8:81:8 | c : |
|
||||
| array_flow.rb:81:15:81:15 | __synth__3 [element 1] : | array_flow.rb:81:8:81:8 | c : |
|
||||
| array_flow.rb:81:15:81:15 | a [element 1] : | array_flow.rb:81:15:81:15 | __synth__3 [element 1] : |
|
||||
| array_flow.rb:81:15:81:15 | a [element 1] : | array_flow.rb:81:15:81:15 | __synth__3 [element 1] : |
|
||||
| array_flow.rb:88:5:88:5 | a [element 1] : | array_flow.rb:89:9:89:9 | a [element 1] : |
|
||||
| array_flow.rb:88:5:88:5 | a [element 1] : | array_flow.rb:89:9:89:9 | a [element 1] : |
|
||||
| array_flow.rb:88:13:88:22 | call to source : | array_flow.rb:88:5:88:5 | a [element 1] : |
|
||||
@@ -4460,8 +4460,8 @@ nodes
|
||||
| array_flow.rb:80:13:80:21 | call to source : | semmle.label | call to source : |
|
||||
| array_flow.rb:81:8:81:8 | c : | semmle.label | c : |
|
||||
| array_flow.rb:81:8:81:8 | c : | semmle.label | c : |
|
||||
| array_flow.rb:81:15:81:15 | __synth__0 [element 1] : | semmle.label | __synth__0 [element 1] : |
|
||||
| array_flow.rb:81:15:81:15 | __synth__0 [element 1] : | semmle.label | __synth__0 [element 1] : |
|
||||
| array_flow.rb:81:15:81:15 | __synth__3 [element 1] : | semmle.label | __synth__3 [element 1] : |
|
||||
| array_flow.rb:81:15:81:15 | __synth__3 [element 1] : | semmle.label | __synth__3 [element 1] : |
|
||||
| array_flow.rb:81:15:81:15 | a [element 1] : | semmle.label | a [element 1] : |
|
||||
| array_flow.rb:81:15:81:15 | a [element 1] : | semmle.label | a [element 1] : |
|
||||
| array_flow.rb:83:10:83:10 | c | semmle.label | c |
|
||||
|
||||
@@ -96,10 +96,10 @@ definition
|
||||
| scopes.rb:11:4:11:4 | a | scopes.rb:7:1:7:1 | a |
|
||||
| scopes.rb:13:4:13:4 | a | scopes.rb:7:1:7:1 | a |
|
||||
| scopes.rb:13:7:13:7 | b | scopes.rb:13:7:13:7 | b |
|
||||
| scopes.rb:13:10:13:15 | __synth__0__1 | scopes.rb:13:10:13:15 | __synth__0__1 |
|
||||
| scopes.rb:13:10:13:15 | __synth__2__1 | scopes.rb:13:10:13:15 | __synth__2__1 |
|
||||
| scopes.rb:13:11:13:11 | c | scopes.rb:13:11:13:11 | c |
|
||||
| scopes.rb:13:14:13:14 | d | scopes.rb:13:14:13:14 | d |
|
||||
| scopes.rb:13:19:13:32 | __synth__0 | scopes.rb:13:4:13:32 | __synth__0 |
|
||||
| scopes.rb:13:19:13:32 | __synth__3 | scopes.rb:13:4:13:32 | __synth__3 |
|
||||
| scopes.rb:26:1:26:12 | self (A) | scopes.rb:26:1:26:12 | self |
|
||||
| scopes.rb:27:1:27:1 | x | scopes.rb:27:1:27:1 | x |
|
||||
| scopes.rb:28:1:30:3 | self (B) | scopes.rb:28:1:30:3 | self |
|
||||
@@ -282,13 +282,13 @@ read
|
||||
| scopes.rb:11:4:11:4 | a | scopes.rb:7:1:7:1 | a | scopes.rb:12:9:12:9 | a |
|
||||
| scopes.rb:13:4:13:4 | a | scopes.rb:7:1:7:1 | a | scopes.rb:14:9:14:9 | a |
|
||||
| scopes.rb:13:7:13:7 | b | scopes.rb:13:7:13:7 | b | scopes.rb:15:9:15:9 | b |
|
||||
| scopes.rb:13:10:13:15 | __synth__0__1 | scopes.rb:13:10:13:15 | __synth__0__1 | scopes.rb:13:11:13:11 | __synth__0__1 |
|
||||
| scopes.rb:13:10:13:15 | __synth__0__1 | scopes.rb:13:10:13:15 | __synth__0__1 | scopes.rb:13:14:13:14 | __synth__0__1 |
|
||||
| scopes.rb:13:10:13:15 | __synth__2__1 | scopes.rb:13:10:13:15 | __synth__2__1 | scopes.rb:13:11:13:11 | __synth__2__1 |
|
||||
| scopes.rb:13:10:13:15 | __synth__2__1 | scopes.rb:13:10:13:15 | __synth__2__1 | scopes.rb:13:14:13:14 | __synth__2__1 |
|
||||
| scopes.rb:13:11:13:11 | c | scopes.rb:13:11:13:11 | c | scopes.rb:16:9:16:9 | c |
|
||||
| scopes.rb:13:14:13:14 | d | scopes.rb:13:14:13:14 | d | scopes.rb:17:9:17:9 | d |
|
||||
| scopes.rb:13:19:13:32 | __synth__0 | scopes.rb:13:4:13:32 | __synth__0 | scopes.rb:13:4:13:4 | __synth__0 |
|
||||
| scopes.rb:13:19:13:32 | __synth__0 | scopes.rb:13:4:13:32 | __synth__0 | scopes.rb:13:7:13:7 | __synth__0 |
|
||||
| scopes.rb:13:19:13:32 | __synth__0 | scopes.rb:13:4:13:32 | __synth__0 | scopes.rb:13:10:13:15 | __synth__0 |
|
||||
| scopes.rb:13:19:13:32 | __synth__3 | scopes.rb:13:4:13:32 | __synth__3 | scopes.rb:13:4:13:4 | __synth__3 |
|
||||
| scopes.rb:13:19:13:32 | __synth__3 | scopes.rb:13:4:13:32 | __synth__3 | scopes.rb:13:7:13:7 | __synth__3 |
|
||||
| scopes.rb:13:19:13:32 | __synth__3 | scopes.rb:13:4:13:32 | __synth__3 | scopes.rb:13:10:13:15 | __synth__3 |
|
||||
| scopes.rb:27:1:27:1 | x | scopes.rb:27:1:27:1 | x | scopes.rb:28:8:28:8 | x |
|
||||
| scopes.rb:27:1:27:1 | x | scopes.rb:27:1:27:1 | x | scopes.rb:31:10:31:10 | x |
|
||||
| scopes.rb:27:1:27:1 | x | scopes.rb:27:1:27:1 | x | scopes.rb:34:7:34:7 | x |
|
||||
@@ -454,10 +454,10 @@ firstRead
|
||||
| scopes.rb:11:4:11:4 | a | scopes.rb:7:1:7:1 | a | scopes.rb:12:9:12:9 | a |
|
||||
| scopes.rb:13:4:13:4 | a | scopes.rb:7:1:7:1 | a | scopes.rb:14:9:14:9 | a |
|
||||
| scopes.rb:13:7:13:7 | b | scopes.rb:13:7:13:7 | b | scopes.rb:15:9:15:9 | b |
|
||||
| scopes.rb:13:10:13:15 | __synth__0__1 | scopes.rb:13:10:13:15 | __synth__0__1 | scopes.rb:13:11:13:11 | __synth__0__1 |
|
||||
| scopes.rb:13:10:13:15 | __synth__2__1 | scopes.rb:13:10:13:15 | __synth__2__1 | scopes.rb:13:11:13:11 | __synth__2__1 |
|
||||
| scopes.rb:13:11:13:11 | c | scopes.rb:13:11:13:11 | c | scopes.rb:16:9:16:9 | c |
|
||||
| scopes.rb:13:14:13:14 | d | scopes.rb:13:14:13:14 | d | scopes.rb:17:9:17:9 | d |
|
||||
| scopes.rb:13:19:13:32 | __synth__0 | scopes.rb:13:4:13:32 | __synth__0 | scopes.rb:13:4:13:4 | __synth__0 |
|
||||
| scopes.rb:13:19:13:32 | __synth__3 | scopes.rb:13:4:13:32 | __synth__3 | scopes.rb:13:4:13:4 | __synth__3 |
|
||||
| scopes.rb:27:1:27:1 | x | scopes.rb:27:1:27:1 | x | scopes.rb:28:8:28:8 | x |
|
||||
| scopes.rb:41:1:49:3 | self (M) | scopes.rb:41:1:49:3 | self | scopes.rb:45:5:45:7 | self |
|
||||
| scopes.rb:42:2:42:4 | var | scopes.rb:42:2:42:4 | var | scopes.rb:44:5:44:7 | var |
|
||||
@@ -604,10 +604,10 @@ lastRead
|
||||
| scopes.rb:11:4:11:4 | a | scopes.rb:7:1:7:1 | a | scopes.rb:12:9:12:9 | a |
|
||||
| scopes.rb:13:4:13:4 | a | scopes.rb:7:1:7:1 | a | scopes.rb:14:9:14:9 | a |
|
||||
| scopes.rb:13:7:13:7 | b | scopes.rb:13:7:13:7 | b | scopes.rb:15:9:15:9 | b |
|
||||
| scopes.rb:13:10:13:15 | __synth__0__1 | scopes.rb:13:10:13:15 | __synth__0__1 | scopes.rb:13:14:13:14 | __synth__0__1 |
|
||||
| scopes.rb:13:10:13:15 | __synth__2__1 | scopes.rb:13:10:13:15 | __synth__2__1 | scopes.rb:13:14:13:14 | __synth__2__1 |
|
||||
| scopes.rb:13:11:13:11 | c | scopes.rb:13:11:13:11 | c | scopes.rb:16:9:16:9 | c |
|
||||
| scopes.rb:13:14:13:14 | d | scopes.rb:13:14:13:14 | d | scopes.rb:17:9:17:9 | d |
|
||||
| scopes.rb:13:19:13:32 | __synth__0 | scopes.rb:13:4:13:32 | __synth__0 | scopes.rb:13:10:13:15 | __synth__0 |
|
||||
| scopes.rb:13:19:13:32 | __synth__3 | scopes.rb:13:4:13:32 | __synth__3 | scopes.rb:13:10:13:15 | __synth__3 |
|
||||
| scopes.rb:27:1:27:1 | x | scopes.rb:27:1:27:1 | x | scopes.rb:37:5:37:5 | x |
|
||||
| scopes.rb:41:1:49:3 | self (M) | scopes.rb:41:1:49:3 | self | scopes.rb:45:5:45:7 | self |
|
||||
| scopes.rb:42:2:42:4 | var | scopes.rb:42:2:42:4 | var | scopes.rb:44:5:44:7 | var |
|
||||
@@ -693,9 +693,9 @@ adjacentReads
|
||||
| scopes.rb:9:9:18:3 | <captured entry> self | scopes.rb:1:1:49:4 | self | scopes.rb:14:4:14:9 | self | scopes.rb:15:4:15:9 | self |
|
||||
| scopes.rb:9:9:18:3 | <captured entry> self | scopes.rb:1:1:49:4 | self | scopes.rb:15:4:15:9 | self | scopes.rb:16:4:16:9 | self |
|
||||
| scopes.rb:9:9:18:3 | <captured entry> self | scopes.rb:1:1:49:4 | self | scopes.rb:16:4:16:9 | self | scopes.rb:17:4:17:9 | self |
|
||||
| scopes.rb:13:10:13:15 | __synth__0__1 | scopes.rb:13:10:13:15 | __synth__0__1 | scopes.rb:13:11:13:11 | __synth__0__1 | scopes.rb:13:14:13:14 | __synth__0__1 |
|
||||
| scopes.rb:13:19:13:32 | __synth__0 | scopes.rb:13:4:13:32 | __synth__0 | scopes.rb:13:4:13:4 | __synth__0 | scopes.rb:13:7:13:7 | __synth__0 |
|
||||
| scopes.rb:13:19:13:32 | __synth__0 | scopes.rb:13:4:13:32 | __synth__0 | scopes.rb:13:7:13:7 | __synth__0 | scopes.rb:13:10:13:15 | __synth__0 |
|
||||
| scopes.rb:13:10:13:15 | __synth__2__1 | scopes.rb:13:10:13:15 | __synth__2__1 | scopes.rb:13:11:13:11 | __synth__2__1 | scopes.rb:13:14:13:14 | __synth__2__1 |
|
||||
| scopes.rb:13:19:13:32 | __synth__3 | scopes.rb:13:4:13:32 | __synth__3 | scopes.rb:13:4:13:4 | __synth__3 | scopes.rb:13:7:13:7 | __synth__3 |
|
||||
| scopes.rb:13:19:13:32 | __synth__3 | scopes.rb:13:4:13:32 | __synth__3 | scopes.rb:13:7:13:7 | __synth__3 | scopes.rb:13:10:13:15 | __synth__3 |
|
||||
| scopes.rb:27:1:27:1 | x | scopes.rb:27:1:27:1 | x | scopes.rb:28:8:28:8 | x | scopes.rb:31:10:31:10 | x |
|
||||
| scopes.rb:27:1:27:1 | x | scopes.rb:27:1:27:1 | x | scopes.rb:31:10:31:10 | x | scopes.rb:34:7:34:7 | x |
|
||||
| scopes.rb:27:1:27:1 | x | scopes.rb:27:1:27:1 | x | scopes.rb:34:7:34:7 | x | scopes.rb:34:14:34:14 | x |
|
||||
|
||||
@@ -332,12 +332,12 @@ explicitWrite
|
||||
| scopes.rb:13:4:13:4 | a | scopes.rb:13:4:13:32 | ... = ... |
|
||||
| scopes.rb:13:7:13:7 | b | scopes.rb:13:4:13:32 | ... = ... |
|
||||
| scopes.rb:13:7:13:7 | b | scopes.rb:13:7:13:7 | ... = ... |
|
||||
| scopes.rb:13:10:13:15 | __synth__0__1 | scopes.rb:13:10:13:15 | ... = ... |
|
||||
| scopes.rb:13:10:13:15 | __synth__2__1 | scopes.rb:13:10:13:15 | ... = ... |
|
||||
| scopes.rb:13:11:13:11 | c | scopes.rb:13:4:13:32 | ... = ... |
|
||||
| scopes.rb:13:11:13:11 | c | scopes.rb:13:11:13:11 | ... = ... |
|
||||
| scopes.rb:13:14:13:14 | d | scopes.rb:13:4:13:32 | ... = ... |
|
||||
| scopes.rb:13:14:13:14 | d | scopes.rb:13:14:13:14 | ... = ... |
|
||||
| scopes.rb:13:19:13:32 | __synth__0 | scopes.rb:13:19:13:32 | ... = ... |
|
||||
| scopes.rb:13:19:13:32 | __synth__3 | scopes.rb:13:19:13:32 | ... = ... |
|
||||
| scopes.rb:21:1:21:7 | $global | scopes.rb:21:1:21:12 | ... = ... |
|
||||
| scopes.rb:24:1:24:6 | script | scopes.rb:24:1:24:11 | ... = ... |
|
||||
| scopes.rb:27:1:27:1 | x | scopes.rb:27:1:27:5 | ... = ... |
|
||||
@@ -525,11 +525,11 @@ readAccess
|
||||
| scopes.rb:11:4:11:4 | a |
|
||||
| scopes.rb:12:4:12:9 | self |
|
||||
| scopes.rb:12:9:12:9 | a |
|
||||
| scopes.rb:13:4:13:4 | __synth__0 |
|
||||
| scopes.rb:13:7:13:7 | __synth__0 |
|
||||
| scopes.rb:13:10:13:15 | __synth__0 |
|
||||
| scopes.rb:13:11:13:11 | __synth__0__1 |
|
||||
| scopes.rb:13:14:13:14 | __synth__0__1 |
|
||||
| scopes.rb:13:4:13:4 | __synth__3 |
|
||||
| scopes.rb:13:7:13:7 | __synth__3 |
|
||||
| scopes.rb:13:10:13:15 | __synth__3 |
|
||||
| scopes.rb:13:11:13:11 | __synth__2__1 |
|
||||
| scopes.rb:13:14:13:14 | __synth__2__1 |
|
||||
| scopes.rb:14:4:14:9 | self |
|
||||
| scopes.rb:14:9:14:9 | a |
|
||||
| scopes.rb:15:4:15:9 | self |
|
||||
|
||||
@@ -100,8 +100,13 @@
|
||||
| scopes.rb:7:1:7:1 | a |
|
||||
| scopes.rb:9:14:9:14 | x |
|
||||
| scopes.rb:13:4:13:32 | __synth__0 |
|
||||
| scopes.rb:13:4:13:32 | __synth__1 |
|
||||
| scopes.rb:13:4:13:32 | __synth__2 |
|
||||
| scopes.rb:13:4:13:32 | __synth__3 |
|
||||
| scopes.rb:13:7:13:7 | b |
|
||||
| scopes.rb:13:10:13:15 | __synth__0__1 |
|
||||
| scopes.rb:13:10:13:15 | __synth__1__1 |
|
||||
| scopes.rb:13:10:13:15 | __synth__2__1 |
|
||||
| scopes.rb:13:11:13:11 | c |
|
||||
| scopes.rb:13:14:13:14 | d |
|
||||
| scopes.rb:24:1:24:6 | script |
|
||||
|
||||
Reference in New Issue
Block a user