AST: improve AST for special parameters

This commit is contained in:
Arthur Baars
2021-02-24 11:12:23 +01:00
parent 8913810bf0
commit 336b310668
10 changed files with 205 additions and 173 deletions

View File

@@ -122,7 +122,7 @@ class VariableAccess extends Expr {
*
* both `a` and `b` are write accesses belonging to the same assignment.
*/
predicate isExplicitWrite(AstNode assignment) { explicitWriteAccess(this, assignment) }
predicate isExplicitWrite(AstNode assignment) { range.isExplicitWrite(assignment) }
/**
* Holds if this access is a write access belonging to an implicit assignment.
@@ -139,7 +139,7 @@ class VariableAccess extends Expr {
* the access to `elements` in the parameter list is an implicit assignment,
* as is the first access to `e`.
*/
predicate isImplicitWrite() { implicitWriteAccess(this) }
predicate isImplicitWrite() { range.isImplicitWrite() }
}
/** An access to a variable where the value is updated. */
@@ -161,13 +161,13 @@ class VariableReadAccess extends VariableAccess {
}
/** An access to a local variable. */
class LocalVariableAccess extends VariableAccess, @token_identifier {
class LocalVariableAccess extends VariableAccess, LocalVariableAccess::LocalVariableRange {
final override LocalVariableAccess::Range range;
final override LocalVariable getVariable() { result = range.getVariable() }
final override string getAPrimaryQlClass() {
not this instanceof SimpleParameter and result = "LocalVariableAccess"
not this instanceof NamedParameter and result = "LocalVariableAccess"
}
/**

View File

@@ -111,6 +111,14 @@ module KeywordParameter {
final override string toString() { result = this.getName() }
final override string getName() { result = generated.getName().getValue() }
final override Location getLocation() { result = generated.getName().getLocation() }
final override predicate child(string label, AstNode::Range child) {
NamedParameter::Range.super.child(label, child)
or
label = "getDefaultValue" and child = getDefaultValue()
}
}
}
@@ -127,6 +135,14 @@ module OptionalParameter {
final override string toString() { result = this.getName() }
final override string getName() { result = generated.getName().getValue() }
final override Location getLocation() { result = generated.getName().getLocation() }
final override predicate child(string label, AstNode::Range child) {
NamedParameter::Range.super.child(label, child)
or
label = "getDefaultValue" and child = getDefaultValue()
}
}
}

View File

@@ -116,6 +116,23 @@ private predicate strictlyBefore(Location one, Location two) {
one.getStartLine() = two.getStartLine() and one.getStartColumn() < two.getStartColumn()
}
private Generated::AstNode getNodeForIdentifier(Generated::Identifier id) {
exists(Generated::AstNode parent | parent = id.getParent() |
if
parent instanceof Generated::BlockParameter
or
parent instanceof Generated::SplatParameter
or
parent instanceof Generated::HashSplatParameter
or
parent instanceof Generated::KeywordParameter
or
parent instanceof Generated::OptionalParameter
then result = parent
else result = id
)
}
cached
private module Cached {
/** Gets the enclosing scope for `node`. */
@@ -518,7 +535,7 @@ module LocalVariable {
final override VariableScope getDeclaringScope() { result = scope }
final VariableAccess getDefiningAccess() { result = i }
final VariableAccess getDefiningAccess() { result = getNodeForIdentifier(i) }
}
}
@@ -577,28 +594,46 @@ module VariableAccess {
abstract class Range extends Expr::Range {
abstract Variable getVariable();
final override string toString() { result = this.getVariable().getName() }
final predicate isExplicitWrite(AstNode assignment) {
exists(Generated::Identifier i | this = getNodeForIdentifier(i) |
explicitWriteAccess(i, assignment)
)
or
not this = getNodeForIdentifier(_) and explicitWriteAccess(this, assignment)
}
override predicate child(string label, AstNode::Range child) { none() }
final predicate isImplicitWrite() {
exists(Generated::Identifier i | this = getNodeForIdentifier(i) | implicitWriteAccess(i))
or
not this = getNodeForIdentifier(_) and implicitWriteAccess(this)
}
}
}
module LocalVariableAccess {
class Range extends VariableAccess::Range, @token_identifier {
override Generated::Identifier generated;
class LocalVariableRange =
@token_identifier or @splat_parameter or @keyword_parameter or @optional_parameter or
@hash_splat_parameter or @block_parameter;
class Range extends VariableAccess::Range, LocalVariableRange {
LocalVariable variable;
Range() {
access(this, variable) and
(
explicitWriteAccess(this, _)
or
implicitWriteAccess(this)
or
vcall(this)
exists(Generated::Identifier id |
this = getNodeForIdentifier(id) and
access(id, variable) and
(
explicitWriteAccess(id, _)
or
implicitWriteAccess(id)
or
vcall(id)
)
)
}
override string toString() { result = generated.(Generated::Identifier).getValue() }
final override LocalVariable getVariable() { result = variable }
}
}
@@ -610,6 +645,8 @@ module GlobalVariableAccess {
Range() { this.(Generated::GlobalVariable).getValue() = variable.getName() }
final override GlobalVariable getVariable() { result = variable }
override string toString() { result = generated.(Generated::GlobalVariable).getValue() }
}
}
@@ -620,6 +657,8 @@ module InstanceVariableAccess {
Range() { instanceVariableAccess(this, variable) }
final override InstanceVariable getVariable() { result = variable }
override string toString() { result = generated.(Generated::InstanceVariable).getValue() }
}
}
@@ -630,5 +669,7 @@ module ClassVariableAccess {
Range() { classVariableAccess(this, variable) }
final override ClassVariable getVariable() { result = variable }
override string toString() { result = generated.(Generated::ClassVariable).getValue() }
}
}

View File

@@ -218,7 +218,7 @@ private predicate inMatchingContext(AstNode n) {
w.getPattern(_).getChild() = n
)
or
n = any(Trees::DefaultValueParameterTree t | t.hasDefaultValue()).getIdentifier()
n = any(Trees::DefaultValueParameterTree t | t.hasDefaultValue())
}
/**

View File

@@ -431,9 +431,7 @@ module Trees {
}
}
private class BlockParameterTree extends ComplexParameterTree, BlockParameter {
final override Identifier getIdentifier() { result = this.getName() }
}
private class BlockParameterTree extends LeafTree, BlockParameter { }
private class CaseTree extends PreOrderTree, Case {
final override predicate propagatesAbnormal(AstNode child) {
@@ -494,47 +492,32 @@ module Trees {
private class ComplexTree extends LeafTree, Complex { }
abstract private class ComplexParameterTree extends ControlFlowTree {
abstract Identifier getIdentifier();
final override predicate propagatesAbnormal(AstNode child) { none() }
final override predicate first(AstNode first) { first(this.getIdentifier(), first) }
final override predicate last(AstNode last, Completion c) {
last(this.getIdentifier(), last, c)
}
final override predicate succ(AstNode pred, AstNode succ, Completion c) { none() }
}
private class ConstantTree extends LeafTree, Constant { }
/** A parameter that may have a default value. */
abstract class DefaultValueParameterTree extends ControlFlowTree {
abstract class DefaultValueParameterTree extends PreOrderTree {
abstract AstNode getDefaultValue();
abstract Identifier getIdentifier();
predicate hasDefaultValue() { exists(this.getDefaultValue()) }
final override predicate propagatesAbnormal(AstNode child) { child = this.getDefaultValue() }
final override predicate first(AstNode first) { first(this.getIdentifier(), first) }
final override predicate last(AstNode last, Completion c) {
last(this.getIdentifier(), last, c) and
c.(MatchingCompletion).getValue() = true
or
last(this.getDefaultValue(), last, c)
or
last(this.getIdentifier(), last, c) and
not this.hasDefaultValue() and
last(this.getDefaultValue(), last, c) and
c instanceof NormalCompletion
or
last = this and
(
not this.hasDefaultValue() and
c instanceof SimpleCompletion
or
this.hasDefaultValue() and
c.(MatchingCompletion).getValue() = true
)
}
final override predicate succ(AstNode pred, AstNode succ, Completion c) {
last(this.getIdentifier(), pred, c) and
pred = this and
first(this.getDefaultValue(), succ) and
c.(MatchingCompletion).getValue() = false
}
@@ -675,9 +658,7 @@ module Trees {
private class GlobalVariableTree extends LeafTree, GlobalVariable { }
private class HashSplatParameterTree extends ComplexParameterTree, HashSplatParameter {
final override Identifier getIdentifier() { result = this.getName() }
}
private class HashSplatParameterTree extends LeafTree, HashSplatParameter { }
private HeredocBody heredoc(HeredocBeginning start) {
exists(int i, File f |
@@ -734,8 +715,6 @@ module Trees {
private class KeywordParameterTree extends DefaultValueParameterTree, KeywordParameter {
final override AstNode getDefaultValue() { result = this.getValue() }
final override Identifier getIdentifier() { result = this.getName() }
}
class LambdaTree extends LeafTree, Lambda {
@@ -834,8 +813,6 @@ module Trees {
private class OptionalParameterTree extends DefaultValueParameterTree, OptionalParameter {
final override AstNode getDefaultValue() { result = this.getValue() }
final override Identifier getIdentifier() { result = this.getName() }
}
private class RationalTree extends LeafTree, Rational { }
@@ -1196,9 +1173,7 @@ module Trees {
}
}
private class SplatParameterTree extends ComplexParameterTree, SplatParameter {
final override Identifier getIdentifier() { result = this.getName() }
}
private class SplatParameterTree extends LeafTree, SplatParameter { }
private class SuperTree extends LeafTree, Super { }

View File

@@ -16,23 +16,23 @@ idParams
| params.rb:38:29:38:33 | *blah | blah |
| params.rb:38:36:38:43 | **wibble | wibble |
| params.rb:41:32:41:32 | x | x |
| params.rb:41:35:41:38 | foo | foo |
| params.rb:41:41:41:46 | bar | bar |
| params.rb:41:35:41:37 | foo | foo |
| params.rb:41:41:41:43 | bar | bar |
| params.rb:46:28:46:33 | &block | block |
| params.rb:49:28:49:30 | xx | xx |
| params.rb:49:33:49:39 | yy | yy |
| params.rb:49:28:49:29 | xx | xx |
| params.rb:49:33:49:34 | yy | yy |
| params.rb:53:34:53:34 | x | x |
| params.rb:53:37:53:38 | y | y |
| params.rb:53:41:53:44 | z | z |
| params.rb:53:37:53:37 | y | y |
| params.rb:53:41:53:41 | z | z |
| params.rb:58:33:58:36 | val1 | val1 |
| params.rb:58:39:58:46 | val2 | val2 |
| params.rb:58:49:58:58 | val3 | val3 |
| params.rb:58:39:58:42 | val2 | val2 |
| params.rb:58:49:58:52 | val3 | val3 |
| params.rb:62:29:62:34 | &block | block |
| params.rb:65:29:65:32 | name | name |
| params.rb:65:35:65:42 | age | age |
| params.rb:65:35:65:37 | age | age |
| params.rb:70:35:70:35 | a | a |
| params.rb:70:38:70:45 | b | b |
| params.rb:70:48:70:53 | c | c |
| params.rb:70:38:70:38 | b | b |
| params.rb:70:48:70:48 | c | c |
blockParams
| params.rb:46:28:46:33 | &block | block |
| params.rb:62:29:62:34 | &block | block |
@@ -55,18 +55,18 @@ hashSplatParams
| params.rb:34:29:34:42 | **double_splat | double_splat |
| params.rb:38:36:38:43 | **wibble | wibble |
keywordParams
| params.rb:41:35:41:38 | foo | foo | (none) |
| params.rb:41:41:41:46 | bar | bar | 7 |
| params.rb:49:28:49:30 | xx | xx | (none) |
| params.rb:49:33:49:39 | yy | yy | 100 |
| params.rb:53:37:53:38 | y | y | (none) |
| params.rb:53:41:53:44 | z | z | 3 |
| params.rb:41:35:41:37 | foo | foo | (none) |
| params.rb:41:41:41:43 | bar | bar | 7 |
| params.rb:49:28:49:29 | xx | xx | (none) |
| params.rb:49:33:49:34 | yy | yy | 100 |
| params.rb:53:37:53:37 | y | y | (none) |
| params.rb:53:41:53:41 | z | z | 3 |
optionalParams
| params.rb:58:39:58:46 | val2 | val2 | params.rb:58:46:58:46 | 0 |
| params.rb:58:49:58:58 | val3 | val3 | params.rb:58:56:58:58 | 100 |
| params.rb:65:35:65:42 | age | age | params.rb:65:41:65:42 | 99 |
| params.rb:70:38:70:45 | b | b | params.rb:70:42:70:45 | 1000 |
| params.rb:70:48:70:53 | c | c | params.rb:70:52:70:53 | 20 |
| params.rb:58:39:58:42 | val2 | val2 | params.rb:58:46:58:46 | 0 |
| params.rb:58:49:58:52 | val3 | val3 | params.rb:58:56:58:58 | 100 |
| params.rb:65:35:65:37 | age | age | params.rb:65:41:65:42 | 99 |
| params.rb:70:38:70:38 | b | b | params.rb:70:42:70:45 | 1000 |
| params.rb:70:48:70:48 | c | c | params.rb:70:52:70:53 | 20 |
paramsInMethods
| params.rb:4:1:5:3 | identifier_method_params | 0 | params.rb:4:30:4:32 | foo | SimpleParameter |
| params.rb:4:1:5:3 | identifier_method_params | 1 | params.rb:4:35:4:37 | bar | SimpleParameter |
@@ -76,12 +76,12 @@ paramsInMethods
| params.rb:30:1:31:3 | method_with_splat | 1 | params.rb:30:31:30:36 | *splat | SplatParameter |
| params.rb:30:1:31:3 | method_with_splat | 2 | params.rb:30:39:30:52 | **double_splat | HashSplatParameter |
| params.rb:41:1:43:3 | method_with_keyword_params | 0 | params.rb:41:32:41:32 | x | SimpleParameter |
| params.rb:41:1:43:3 | method_with_keyword_params | 1 | params.rb:41:35:41:38 | foo | KeywordParameter |
| params.rb:41:1:43:3 | method_with_keyword_params | 2 | params.rb:41:41:41:46 | bar | KeywordParameter |
| params.rb:41:1:43:3 | method_with_keyword_params | 1 | params.rb:41:35:41:37 | foo | KeywordParameter |
| params.rb:41:1:43:3 | method_with_keyword_params | 2 | params.rb:41:41:41:43 | bar | KeywordParameter |
| params.rb:46:1:48:3 | use_block_with_keyword | 0 | params.rb:46:28:46:33 | &block | BlockParameter |
| params.rb:58:1:59:3 | method_with_optional_params | 0 | params.rb:58:33:58:36 | val1 | SimpleParameter |
| params.rb:58:1:59:3 | method_with_optional_params | 1 | params.rb:58:39:58:46 | val2 | OptionalParameter |
| params.rb:58:1:59:3 | method_with_optional_params | 2 | params.rb:58:49:58:58 | val3 | OptionalParameter |
| params.rb:58:1:59:3 | method_with_optional_params | 1 | params.rb:58:39:58:42 | val2 | OptionalParameter |
| params.rb:58:1:59:3 | method_with_optional_params | 2 | params.rb:58:49:58:52 | val3 | OptionalParameter |
| params.rb:62:1:64:3 | use_block_with_optional | 0 | params.rb:62:29:62:34 | &block | BlockParameter |
paramsInBlocks
| params.rb:9:11:11:3 | do ... end | 0 | params.rb:9:15:9:17 | key | SimpleParameter |
@@ -90,10 +90,10 @@ paramsInBlocks
| params.rb:34:12:35:3 | do ... end | 0 | params.rb:34:16:34:18 | val | SimpleParameter |
| params.rb:34:12:35:3 | do ... end | 1 | params.rb:34:21:34:26 | *splat | SplatParameter |
| params.rb:34:12:35:3 | do ... end | 2 | params.rb:34:29:34:42 | **double_splat | HashSplatParameter |
| params.rb:49:24:51:3 | do ... end | 0 | params.rb:49:28:49:30 | xx | KeywordParameter |
| params.rb:49:24:51:3 | do ... end | 1 | params.rb:49:33:49:39 | yy | KeywordParameter |
| params.rb:49:24:51:3 | do ... end | 0 | params.rb:49:28:49:29 | xx | KeywordParameter |
| params.rb:49:24:51:3 | do ... end | 1 | params.rb:49:33:49:34 | yy | KeywordParameter |
| params.rb:65:25:67:3 | do ... end | 0 | params.rb:65:29:65:32 | name | SimpleParameter |
| params.rb:65:25:67:3 | do ... end | 1 | params.rb:65:35:65:42 | age | OptionalParameter |
| params.rb:65:25:67:3 | do ... end | 1 | params.rb:65:35:65:37 | age | OptionalParameter |
paramsInLambdas
| params.rb:14:7:14:33 | -> { ... } | 0 | params.rb:14:11:14:13 | foo | SimpleParameter |
| params.rb:14:7:14:33 | -> { ... } | 1 | params.rb:14:16:14:18 | bar | SimpleParameter |
@@ -103,11 +103,11 @@ paramsInLambdas
| params.rb:38:22:38:47 | -> { ... } | 1 | params.rb:38:29:38:33 | *blah | SplatParameter |
| params.rb:38:22:38:47 | -> { ... } | 2 | params.rb:38:36:38:43 | **wibble | HashSplatParameter |
| params.rb:53:30:55:1 | -> { ... } | 0 | params.rb:53:34:53:34 | x | SimpleParameter |
| params.rb:53:30:55:1 | -> { ... } | 1 | params.rb:53:37:53:38 | y | KeywordParameter |
| params.rb:53:30:55:1 | -> { ... } | 2 | params.rb:53:41:53:44 | z | KeywordParameter |
| params.rb:53:30:55:1 | -> { ... } | 1 | params.rb:53:37:53:37 | y | KeywordParameter |
| params.rb:53:30:55:1 | -> { ... } | 2 | params.rb:53:41:53:41 | z | KeywordParameter |
| params.rb:70:31:70:64 | -> { ... } | 0 | params.rb:70:35:70:35 | a | SimpleParameter |
| params.rb:70:31:70:64 | -> { ... } | 1 | params.rb:70:38:70:45 | b | OptionalParameter |
| params.rb:70:31:70:64 | -> { ... } | 2 | params.rb:70:48:70:53 | c | OptionalParameter |
| params.rb:70:31:70:64 | -> { ... } | 1 | params.rb:70:38:70:38 | b | OptionalParameter |
| params.rb:70:31:70:64 | -> { ... } | 2 | params.rb:70:48:70:48 | c | OptionalParameter |
params
| params.rb:4:30:4:32 | foo | 0 | SimpleParameter |
| params.rb:4:35:4:37 | bar | 1 | SimpleParameter |
@@ -130,20 +130,20 @@ params
| params.rb:38:29:38:33 | *blah | 1 | SplatParameter |
| params.rb:38:36:38:43 | **wibble | 2 | HashSplatParameter |
| params.rb:41:32:41:32 | x | 0 | SimpleParameter |
| params.rb:41:35:41:38 | foo | 1 | KeywordParameter |
| params.rb:41:41:41:46 | bar | 2 | KeywordParameter |
| params.rb:41:35:41:37 | foo | 1 | KeywordParameter |
| params.rb:41:41:41:43 | bar | 2 | KeywordParameter |
| params.rb:46:28:46:33 | &block | 0 | BlockParameter |
| params.rb:49:28:49:30 | xx | 0 | KeywordParameter |
| params.rb:49:33:49:39 | yy | 1 | KeywordParameter |
| params.rb:49:28:49:29 | xx | 0 | KeywordParameter |
| params.rb:49:33:49:34 | yy | 1 | KeywordParameter |
| params.rb:53:34:53:34 | x | 0 | SimpleParameter |
| params.rb:53:37:53:38 | y | 1 | KeywordParameter |
| params.rb:53:41:53:44 | z | 2 | KeywordParameter |
| params.rb:53:37:53:37 | y | 1 | KeywordParameter |
| params.rb:53:41:53:41 | z | 2 | KeywordParameter |
| params.rb:58:33:58:36 | val1 | 0 | SimpleParameter |
| params.rb:58:39:58:46 | val2 | 1 | OptionalParameter |
| params.rb:58:49:58:58 | val3 | 2 | OptionalParameter |
| params.rb:58:39:58:42 | val2 | 1 | OptionalParameter |
| params.rb:58:49:58:52 | val3 | 2 | OptionalParameter |
| params.rb:62:29:62:34 | &block | 0 | BlockParameter |
| params.rb:65:29:65:32 | name | 0 | SimpleParameter |
| params.rb:65:35:65:42 | age | 1 | OptionalParameter |
| params.rb:65:35:65:37 | age | 1 | OptionalParameter |
| params.rb:70:35:70:35 | a | 0 | SimpleParameter |
| params.rb:70:38:70:45 | b | 1 | OptionalParameter |
| params.rb:70:48:70:53 | c | 2 | OptionalParameter |
| params.rb:70:38:70:38 | b | 1 | OptionalParameter |
| params.rb:70:48:70:48 | c | 2 | OptionalParameter |

View File

@@ -35,7 +35,7 @@ cfg.rb:
#-----| -> x
# 29| enter { ... }
#-----| -> x
#-----| -> &x
# 63| enter pattern
#-----| -> a
@@ -53,7 +53,7 @@ cfg.rb:
#-----| -> "singleton"
# 149| enter method
#-----| -> x
#-----| -> *x
# 153| enter two_parameters
#-----| -> a
@@ -637,7 +637,7 @@ cfg.rb:
# 29| { ... }
#-----| -> call to new
# 29| x
# 29| &x
#-----| -> x
# 29| call to call
@@ -1155,9 +1155,9 @@ cfg.rb:
#-----| -> key
# 101| key
#-----| -> kwargs
#-----| -> **kwargs
# 101| kwargs
# 101| **kwargs
#-----| -> value
# 102| call to puts
@@ -1513,7 +1513,7 @@ cfg.rb:
# 149| silly
#-----| -> method
# 149| x
# 149| *x
#-----| -> x
# 150| call to puts

View File

@@ -12,17 +12,17 @@ parameterVariable
| parameters.rb:16:16:16:18 | key | parameters.rb:16:16:16:18 | key |
| parameters.rb:16:21:16:25 | value | parameters.rb:16:21:16:25 | value |
| parameters.rb:21:16:21:21 | &block | parameters.rb:21:17:21:21 | block |
| parameters.rb:25:15:25:30 | name | parameters.rb:25:15:25:18 | name |
| parameters.rb:25:33:25:50 | size | parameters.rb:25:33:25:36 | size |
| parameters.rb:30:15:30:20 | first | parameters.rb:30:15:30:19 | first |
| parameters.rb:30:24:30:33 | middle | parameters.rb:30:24:30:29 | middle |
| parameters.rb:30:36:30:40 | last | parameters.rb:30:36:30:39 | last |
| parameters.rb:35:11:35:21 | a | parameters.rb:35:11:35:11 | a |
| parameters.rb:40:12:40:19 | d | parameters.rb:40:12:40:12 | d |
| parameters.rb:25:15:25:18 | name | parameters.rb:25:15:25:18 | name |
| parameters.rb:25:33:25:36 | size | parameters.rb:25:33:25:36 | size |
| parameters.rb:30:15:30:19 | first | parameters.rb:30:15:30:19 | first |
| parameters.rb:30:24:30:29 | middle | parameters.rb:30:24:30:29 | middle |
| parameters.rb:30:36:30:39 | last | parameters.rb:30:36:30:39 | last |
| parameters.rb:35:11:35:11 | a | parameters.rb:35:11:35:11 | a |
| parameters.rb:40:12:40:12 | d | parameters.rb:40:12:40:12 | d |
| parameters.rb:45:20:45:20 | _ | parameters.rb:45:20:45:20 | _ |
| parameters.rb:49:12:49:16 | (..., ...) | parameters.rb:49:13:49:13 | a |
| parameters.rb:49:12:49:16 | (..., ...) | parameters.rb:49:15:49:15 | b |
| parameters.rb:54:14:54:24 | y | parameters.rb:54:14:54:14 | y |
| parameters.rb:54:14:54:14 | y | parameters.rb:54:14:54:14 | y |
| scopes.rb:2:14:2:14 | x | scopes.rb:2:14:2:14 | x |
| scopes.rb:9:14:9:14 | x | scopes.rb:9:14:9:14 | x |
| ssa.rb:1:7:1:7 | b | ssa.rb:1:7:1:7 | b |
@@ -30,7 +30,7 @@ parameterVariable
| ssa.rb:25:8:25:15 | elements | ssa.rb:25:8:25:15 | elements |
| ssa.rb:33:20:33:20 | x | ssa.rb:33:20:33:20 | x |
| ssa.rb:44:8:44:8 | b | ssa.rb:44:8:44:8 | b |
| ssa.rb:49:9:49:20 | x | ssa.rb:49:9:49:9 | x |
| ssa.rb:49:9:49:9 | x | ssa.rb:49:9:49:9 | x |
| ssa.rb:53:8:53:10 | foo | ssa.rb:53:8:53:10 | foo |
| ssa.rb:64:8:64:8 | a | ssa.rb:64:8:64:8 | a |
| ssa.rb:66:15:66:15 | a | ssa.rb:66:15:66:15 | a |
@@ -41,4 +41,4 @@ parameterVariableNoAccess
| nested_scopes.rb:18:26:18:26 | x | nested_scopes.rb:18:26:18:26 | x |
| scopes.rb:2:14:2:14 | x | scopes.rb:2:14:2:14 | x |
| scopes.rb:9:14:9:14 | x | scopes.rb:9:14:9:14 | x |
| ssa.rb:49:9:49:20 | x | ssa.rb:49:9:49:9 | x |
| ssa.rb:49:9:49:9 | x | ssa.rb:49:9:49:9 | x |

View File

@@ -13,22 +13,22 @@ definition
| parameters.rb:1:14:1:14 | x | parameters.rb:1:14:1:14 | x |
| parameters.rb:2:4:2:8 | ... = ... | parameters.rb:1:18:1:18 | y |
| parameters.rb:7:17:7:22 | client | parameters.rb:7:17:7:22 | client |
| parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:26:7:31 | pizzas |
| parameters.rb:15:17:15:19 | map | parameters.rb:15:17:15:19 | map |
| parameters.rb:7:25:7:31 | *pizzas | parameters.rb:7:26:7:31 | pizzas |
| parameters.rb:15:15:15:19 | **map | parameters.rb:15:17:15:19 | map |
| parameters.rb:16:16:16:18 | key | parameters.rb:16:16:16:18 | key |
| parameters.rb:16:21:16:25 | value | parameters.rb:16:21:16:25 | value |
| parameters.rb:21:17:21:21 | block | parameters.rb:21:17:21:21 | block |
| parameters.rb:25:15:25:18 | name | parameters.rb:25:15:25:18 | name |
| parameters.rb:25:33:25:36 | size | parameters.rb:25:33:25:36 | size |
| parameters.rb:30:15:30:19 | first | parameters.rb:30:15:30:19 | first |
| parameters.rb:30:24:30:29 | middle | parameters.rb:30:24:30:29 | middle |
| parameters.rb:30:36:30:39 | last | parameters.rb:30:36:30:39 | last |
| parameters.rb:21:16:21:21 | &block | parameters.rb:21:17:21:21 | block |
| parameters.rb:25:15:25:30 | name | parameters.rb:25:15:25:18 | name |
| parameters.rb:25:33:25:50 | size | parameters.rb:25:33:25:36 | size |
| parameters.rb:30:15:30:20 | first | parameters.rb:30:15:30:19 | first |
| parameters.rb:30:24:30:33 | middle | parameters.rb:30:24:30:29 | middle |
| parameters.rb:30:36:30:40 | last | parameters.rb:30:36:30:39 | last |
| parameters.rb:35:1:38:3 | <uninitialized> | parameters.rb:35:16:35:16 | b |
| parameters.rb:35:11:35:11 | a | parameters.rb:35:11:35:11 | a |
| parameters.rb:35:11:35:21 | a | parameters.rb:35:11:35:11 | a |
| parameters.rb:35:16:35:20 | ... = ... | parameters.rb:35:16:35:16 | b |
| parameters.rb:37:11:37:11 | phi | parameters.rb:35:16:35:16 | b |
| parameters.rb:40:1:43:3 | <uninitialized> | parameters.rb:40:15:40:15 | e |
| parameters.rb:40:12:40:12 | d | parameters.rb:40:12:40:12 | d |
| parameters.rb:40:12:40:19 | d | parameters.rb:40:12:40:12 | d |
| parameters.rb:40:15:40:19 | ... = ... | parameters.rb:40:15:40:15 | e |
| parameters.rb:42:11:42:11 | phi | parameters.rb:40:15:40:15 | e |
| parameters.rb:45:20:45:20 | _ | parameters.rb:45:20:45:20 | _ |
@@ -36,7 +36,7 @@ definition
| parameters.rb:49:15:49:15 | b | parameters.rb:49:15:49:15 | b |
| parameters.rb:53:1:53:6 | ... = ... | parameters.rb:53:1:53:1 | x |
| parameters.rb:54:9:57:3 | <captured> | parameters.rb:53:1:53:1 | x |
| parameters.rb:54:14:54:14 | y | parameters.rb:54:14:54:14 | y |
| parameters.rb:54:14:54:24 | y | parameters.rb:54:14:54:14 | y |
| parameters.rb:54:19:54:23 | ... = ... | parameters.rb:53:1:53:1 | x |
| parameters.rb:55:9:55:9 | phi | parameters.rb:53:1:53:1 | x |
| scopes.rb:4:4:4:8 | ... = ... | scopes.rb:4:4:4:4 | a |
@@ -100,26 +100,26 @@ read
| parameters.rb:2:4:2:8 | ... = ... | parameters.rb:1:18:1:18 | y | parameters.rb:4:9:4:9 | y |
| parameters.rb:7:17:7:22 | client | parameters.rb:7:17:7:22 | client | parameters.rb:9:25:9:30 | client |
| parameters.rb:7:17:7:22 | client | parameters.rb:7:17:7:22 | client | parameters.rb:11:41:11:46 | client |
| parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:8:6:8:11 | pizzas |
| parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:11:14:11:19 | pizzas |
| parameters.rb:15:17:15:19 | map | parameters.rb:15:17:15:19 | map | parameters.rb:16:3:16:5 | map |
| parameters.rb:7:25:7:31 | *pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:8:6:8:11 | pizzas |
| parameters.rb:7:25:7:31 | *pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:11:14:11:19 | pizzas |
| parameters.rb:15:15:15:19 | **map | parameters.rb:15:17:15:19 | map | parameters.rb:16:3:16:5 | map |
| parameters.rb:16:16:16:18 | key | parameters.rb:16:16:16:18 | key | parameters.rb:17:13:17:15 | key |
| parameters.rb:16:21:16:25 | value | parameters.rb:16:21:16:25 | value | parameters.rb:17:22:17:26 | value |
| parameters.rb:21:17:21:21 | block | parameters.rb:21:17:21:21 | block | parameters.rb:22:3:22:7 | block |
| parameters.rb:25:15:25:18 | name | parameters.rb:25:15:25:18 | name | parameters.rb:25:40:25:43 | name |
| parameters.rb:25:15:25:18 | name | parameters.rb:25:15:25:18 | name | parameters.rb:26:8:26:11 | name |
| parameters.rb:25:33:25:36 | size | parameters.rb:25:33:25:36 | size | parameters.rb:27:8:27:11 | size |
| parameters.rb:30:15:30:19 | first | parameters.rb:30:15:30:19 | first | parameters.rb:31:11:31:15 | first |
| parameters.rb:30:24:30:29 | middle | parameters.rb:30:24:30:29 | middle | parameters.rb:31:20:31:25 | middle |
| parameters.rb:30:36:30:39 | last | parameters.rb:30:36:30:39 | last | parameters.rb:31:30:31:33 | last |
| parameters.rb:35:11:35:11 | a | parameters.rb:35:11:35:11 | a | parameters.rb:37:11:37:11 | a |
| parameters.rb:21:16:21:21 | &block | parameters.rb:21:17:21:21 | block | parameters.rb:22:3:22:7 | block |
| parameters.rb:25:15:25:30 | name | parameters.rb:25:15:25:18 | name | parameters.rb:25:40:25:43 | name |
| parameters.rb:25:15:25:30 | name | parameters.rb:25:15:25:18 | name | parameters.rb:26:8:26:11 | name |
| parameters.rb:25:33:25:50 | size | parameters.rb:25:33:25:36 | size | parameters.rb:27:8:27:11 | size |
| parameters.rb:30:15:30:20 | first | parameters.rb:30:15:30:19 | first | parameters.rb:31:11:31:15 | first |
| parameters.rb:30:24:30:33 | middle | parameters.rb:30:24:30:29 | middle | parameters.rb:31:20:31:25 | middle |
| parameters.rb:30:36:30:40 | last | parameters.rb:30:36:30:39 | last | parameters.rb:31:30:31:33 | last |
| parameters.rb:35:11:35:21 | a | parameters.rb:35:11:35:11 | a | parameters.rb:37:11:37:11 | a |
| parameters.rb:37:11:37:11 | phi | parameters.rb:35:16:35:16 | b | parameters.rb:37:16:37:16 | b |
| parameters.rb:40:12:40:12 | d | parameters.rb:40:12:40:12 | d | parameters.rb:42:11:42:11 | d |
| parameters.rb:40:12:40:19 | d | parameters.rb:40:12:40:12 | d | parameters.rb:42:11:42:11 | d |
| parameters.rb:42:11:42:11 | phi | parameters.rb:40:15:40:15 | e | parameters.rb:42:16:42:16 | e |
| parameters.rb:45:20:45:20 | _ | parameters.rb:45:20:45:20 | _ | parameters.rb:46:8:46:8 | _ |
| parameters.rb:49:13:49:13 | a | parameters.rb:49:13:49:13 | a | parameters.rb:50:11:50:11 | a |
| parameters.rb:49:15:49:15 | b | parameters.rb:49:15:49:15 | b | parameters.rb:50:16:50:16 | b |
| parameters.rb:54:14:54:14 | y | parameters.rb:54:14:54:14 | y | parameters.rb:56:9:56:9 | y |
| parameters.rb:54:14:54:24 | y | parameters.rb:54:14:54:14 | y | parameters.rb:56:9:56:9 | y |
| parameters.rb:55:9:55:9 | phi | parameters.rb:53:1:53:1 | x | parameters.rb:55:9:55:9 | x |
| scopes.rb:4:4:4:8 | ... = ... | scopes.rb:4:4:4:4 | a | scopes.rb:5:9:5:9 | a |
| scopes.rb:7:1:7:5 | ... = ... | scopes.rb:7:1:7:1 | a | scopes.rb:8:6:8:6 | a |
@@ -181,25 +181,25 @@ firstRead
| parameters.rb:2:4:2:8 | ... = ... | parameters.rb:1:18:1:18 | y | parameters.rb:4:9:4:9 | y |
| parameters.rb:7:17:7:22 | client | parameters.rb:7:17:7:22 | client | parameters.rb:9:25:9:30 | client |
| parameters.rb:7:17:7:22 | client | parameters.rb:7:17:7:22 | client | parameters.rb:11:41:11:46 | client |
| parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:8:6:8:11 | pizzas |
| parameters.rb:15:17:15:19 | map | parameters.rb:15:17:15:19 | map | parameters.rb:16:3:16:5 | map |
| parameters.rb:7:25:7:31 | *pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:8:6:8:11 | pizzas |
| parameters.rb:15:15:15:19 | **map | parameters.rb:15:17:15:19 | map | parameters.rb:16:3:16:5 | map |
| parameters.rb:16:16:16:18 | key | parameters.rb:16:16:16:18 | key | parameters.rb:17:13:17:15 | key |
| parameters.rb:16:21:16:25 | value | parameters.rb:16:21:16:25 | value | parameters.rb:17:22:17:26 | value |
| parameters.rb:21:17:21:21 | block | parameters.rb:21:17:21:21 | block | parameters.rb:22:3:22:7 | block |
| parameters.rb:25:15:25:18 | name | parameters.rb:25:15:25:18 | name | parameters.rb:25:40:25:43 | name |
| parameters.rb:25:15:25:18 | name | parameters.rb:25:15:25:18 | name | parameters.rb:26:8:26:11 | name |
| parameters.rb:25:33:25:36 | size | parameters.rb:25:33:25:36 | size | parameters.rb:27:8:27:11 | size |
| parameters.rb:30:15:30:19 | first | parameters.rb:30:15:30:19 | first | parameters.rb:31:11:31:15 | first |
| parameters.rb:30:24:30:29 | middle | parameters.rb:30:24:30:29 | middle | parameters.rb:31:20:31:25 | middle |
| parameters.rb:30:36:30:39 | last | parameters.rb:30:36:30:39 | last | parameters.rb:31:30:31:33 | last |
| parameters.rb:35:11:35:11 | a | parameters.rb:35:11:35:11 | a | parameters.rb:37:11:37:11 | a |
| parameters.rb:21:16:21:21 | &block | parameters.rb:21:17:21:21 | block | parameters.rb:22:3:22:7 | block |
| parameters.rb:25:15:25:30 | name | parameters.rb:25:15:25:18 | name | parameters.rb:25:40:25:43 | name |
| parameters.rb:25:15:25:30 | name | parameters.rb:25:15:25:18 | name | parameters.rb:26:8:26:11 | name |
| parameters.rb:25:33:25:50 | size | parameters.rb:25:33:25:36 | size | parameters.rb:27:8:27:11 | size |
| parameters.rb:30:15:30:20 | first | parameters.rb:30:15:30:19 | first | parameters.rb:31:11:31:15 | first |
| parameters.rb:30:24:30:33 | middle | parameters.rb:30:24:30:29 | middle | parameters.rb:31:20:31:25 | middle |
| parameters.rb:30:36:30:40 | last | parameters.rb:30:36:30:39 | last | parameters.rb:31:30:31:33 | last |
| parameters.rb:35:11:35:21 | a | parameters.rb:35:11:35:11 | a | parameters.rb:37:11:37:11 | a |
| parameters.rb:37:11:37:11 | phi | parameters.rb:35:16:35:16 | b | parameters.rb:37:16:37:16 | b |
| parameters.rb:40:12:40:12 | d | parameters.rb:40:12:40:12 | d | parameters.rb:42:11:42:11 | d |
| parameters.rb:40:12:40:19 | d | parameters.rb:40:12:40:12 | d | parameters.rb:42:11:42:11 | d |
| parameters.rb:42:11:42:11 | phi | parameters.rb:40:15:40:15 | e | parameters.rb:42:16:42:16 | e |
| parameters.rb:45:20:45:20 | _ | parameters.rb:45:20:45:20 | _ | parameters.rb:46:8:46:8 | _ |
| parameters.rb:49:13:49:13 | a | parameters.rb:49:13:49:13 | a | parameters.rb:50:11:50:11 | a |
| parameters.rb:49:15:49:15 | b | parameters.rb:49:15:49:15 | b | parameters.rb:50:16:50:16 | b |
| parameters.rb:54:14:54:14 | y | parameters.rb:54:14:54:14 | y | parameters.rb:56:9:56:9 | y |
| parameters.rb:54:14:54:24 | y | parameters.rb:54:14:54:14 | y | parameters.rb:56:9:56:9 | y |
| parameters.rb:55:9:55:9 | phi | parameters.rb:53:1:53:1 | x | parameters.rb:55:9:55:9 | x |
| scopes.rb:4:4:4:8 | ... = ... | scopes.rb:4:4:4:4 | a | scopes.rb:5:9:5:9 | a |
| scopes.rb:7:1:7:5 | ... = ... | scopes.rb:7:1:7:1 | a | scopes.rb:8:6:8:6 | a |
@@ -250,25 +250,25 @@ lastRead
| parameters.rb:2:4:2:8 | ... = ... | parameters.rb:1:18:1:18 | y | parameters.rb:4:9:4:9 | y |
| parameters.rb:7:17:7:22 | client | parameters.rb:7:17:7:22 | client | parameters.rb:9:25:9:30 | client |
| parameters.rb:7:17:7:22 | client | parameters.rb:7:17:7:22 | client | parameters.rb:11:41:11:46 | client |
| parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:8:6:8:11 | pizzas |
| parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:11:14:11:19 | pizzas |
| parameters.rb:15:17:15:19 | map | parameters.rb:15:17:15:19 | map | parameters.rb:16:3:16:5 | map |
| parameters.rb:7:25:7:31 | *pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:8:6:8:11 | pizzas |
| parameters.rb:7:25:7:31 | *pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:11:14:11:19 | pizzas |
| parameters.rb:15:15:15:19 | **map | parameters.rb:15:17:15:19 | map | parameters.rb:16:3:16:5 | map |
| parameters.rb:16:16:16:18 | key | parameters.rb:16:16:16:18 | key | parameters.rb:17:13:17:15 | key |
| parameters.rb:16:21:16:25 | value | parameters.rb:16:21:16:25 | value | parameters.rb:17:22:17:26 | value |
| parameters.rb:21:17:21:21 | block | parameters.rb:21:17:21:21 | block | parameters.rb:22:3:22:7 | block |
| parameters.rb:25:15:25:18 | name | parameters.rb:25:15:25:18 | name | parameters.rb:26:8:26:11 | name |
| parameters.rb:25:33:25:36 | size | parameters.rb:25:33:25:36 | size | parameters.rb:27:8:27:11 | size |
| parameters.rb:30:15:30:19 | first | parameters.rb:30:15:30:19 | first | parameters.rb:31:11:31:15 | first |
| parameters.rb:30:24:30:29 | middle | parameters.rb:30:24:30:29 | middle | parameters.rb:31:20:31:25 | middle |
| parameters.rb:30:36:30:39 | last | parameters.rb:30:36:30:39 | last | parameters.rb:31:30:31:33 | last |
| parameters.rb:35:11:35:11 | a | parameters.rb:35:11:35:11 | a | parameters.rb:37:11:37:11 | a |
| parameters.rb:21:16:21:21 | &block | parameters.rb:21:17:21:21 | block | parameters.rb:22:3:22:7 | block |
| parameters.rb:25:15:25:30 | name | parameters.rb:25:15:25:18 | name | parameters.rb:26:8:26:11 | name |
| parameters.rb:25:33:25:50 | size | parameters.rb:25:33:25:36 | size | parameters.rb:27:8:27:11 | size |
| parameters.rb:30:15:30:20 | first | parameters.rb:30:15:30:19 | first | parameters.rb:31:11:31:15 | first |
| parameters.rb:30:24:30:33 | middle | parameters.rb:30:24:30:29 | middle | parameters.rb:31:20:31:25 | middle |
| parameters.rb:30:36:30:40 | last | parameters.rb:30:36:30:39 | last | parameters.rb:31:30:31:33 | last |
| parameters.rb:35:11:35:21 | a | parameters.rb:35:11:35:11 | a | parameters.rb:37:11:37:11 | a |
| parameters.rb:37:11:37:11 | phi | parameters.rb:35:16:35:16 | b | parameters.rb:37:16:37:16 | b |
| parameters.rb:40:12:40:12 | d | parameters.rb:40:12:40:12 | d | parameters.rb:42:11:42:11 | d |
| parameters.rb:40:12:40:19 | d | parameters.rb:40:12:40:12 | d | parameters.rb:42:11:42:11 | d |
| parameters.rb:42:11:42:11 | phi | parameters.rb:40:15:40:15 | e | parameters.rb:42:16:42:16 | e |
| parameters.rb:45:20:45:20 | _ | parameters.rb:45:20:45:20 | _ | parameters.rb:46:8:46:8 | _ |
| parameters.rb:49:13:49:13 | a | parameters.rb:49:13:49:13 | a | parameters.rb:50:11:50:11 | a |
| parameters.rb:49:15:49:15 | b | parameters.rb:49:15:49:15 | b | parameters.rb:50:16:50:16 | b |
| parameters.rb:54:14:54:14 | y | parameters.rb:54:14:54:14 | y | parameters.rb:56:9:56:9 | y |
| parameters.rb:54:14:54:24 | y | parameters.rb:54:14:54:14 | y | parameters.rb:56:9:56:9 | y |
| parameters.rb:55:9:55:9 | phi | parameters.rb:53:1:53:1 | x | parameters.rb:55:9:55:9 | x |
| scopes.rb:4:4:4:8 | ... = ... | scopes.rb:4:4:4:4 | a | scopes.rb:5:9:5:9 | a |
| scopes.rb:7:1:7:5 | ... = ... | scopes.rb:7:1:7:1 | a | scopes.rb:8:6:8:6 | a |
@@ -306,8 +306,8 @@ lastRead
| ssa.rb:84:10:86:8 | <captured> | ssa.rb:82:3:82:10 | captured | ssa.rb:85:15:85:22 | captured |
adjacentReads
| nested_scopes.rb:13:11:13:15 | ... = ... | nested_scopes.rb:13:11:13:11 | a | nested_scopes.rb:14:16:14:16 | a | nested_scopes.rb:15:11:15:11 | a |
| parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:8:6:8:11 | pizzas | parameters.rb:11:14:11:19 | pizzas |
| parameters.rb:25:15:25:18 | name | parameters.rb:25:15:25:18 | name | parameters.rb:25:40:25:43 | name | parameters.rb:26:8:26:11 | name |
| parameters.rb:7:25:7:31 | *pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:8:6:8:11 | pizzas | parameters.rb:11:14:11:19 | pizzas |
| parameters.rb:25:15:25:30 | name | parameters.rb:25:15:25:18 | name | parameters.rb:25:40:25:43 | name | parameters.rb:26:8:26:11 | name |
| scopes.rb:9:9:18:3 | <captured> | scopes.rb:7:1:7:1 | a | scopes.rb:10:9:10:9 | a | scopes.rb:11:4:11:4 | a |
| scopes.rb:27:1:27:5 | ... = ... | 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:5 | ... = ... | scopes.rb:27:1:27:1 | x | scopes.rb:31:10:31:10 | x | scopes.rb:34:7:34:7 | x |

View File

@@ -51,18 +51,18 @@ variableAccess
| parameters.rb:3:9:3:9 | x | parameters.rb:1:14:1:14 | x | parameters.rb:1:9:5:3 | block scope |
| parameters.rb:4:9:4:9 | y | parameters.rb:1:18:1:18 | y | parameters.rb:1:9:5:3 | block scope |
| parameters.rb:7:17:7:22 | client | parameters.rb:7:17:7:22 | client | parameters.rb:7:1:13:3 | method scope for order_pizza |
| parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope for order_pizza |
| parameters.rb:7:25:7:31 | *pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope for order_pizza |
| parameters.rb:8:6:8:11 | pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope for order_pizza |
| parameters.rb:9:25:9:30 | client | parameters.rb:7:17:7:22 | client | parameters.rb:7:1:13:3 | method scope for order_pizza |
| parameters.rb:11:14:11:19 | pizzas | parameters.rb:7:26:7:31 | pizzas | parameters.rb:7:1:13:3 | method scope for order_pizza |
| parameters.rb:11:41:11:46 | client | parameters.rb:7:17:7:22 | client | parameters.rb:7:1:13:3 | method scope for order_pizza |
| parameters.rb:15:17:15:19 | map | parameters.rb:15:17:15:19 | map | parameters.rb:15:1:19:3 | method scope for print_map |
| parameters.rb:15:15:15:19 | **map | parameters.rb:15:17:15:19 | map | parameters.rb:15:1:19:3 | method scope for print_map |
| parameters.rb:16:3:16:5 | map | parameters.rb:15:17:15:19 | map | parameters.rb:15:1:19:3 | method scope for print_map |
| parameters.rb:16:16:16:18 | key | parameters.rb:16:16:16:18 | key | parameters.rb:16:12:18:5 | block scope |
| parameters.rb:16:21:16:25 | value | parameters.rb:16:21:16:25 | value | parameters.rb:16:12:18:5 | block scope |
| parameters.rb:17:13:17:15 | key | parameters.rb:16:16:16:18 | key | parameters.rb:16:12:18:5 | block scope |
| parameters.rb:17:22:17:26 | value | parameters.rb:16:21:16:25 | value | parameters.rb:16:12:18:5 | block scope |
| parameters.rb:21:17:21:21 | block | parameters.rb:21:17:21:21 | block | parameters.rb:21:1:23:3 | method scope for call_block |
| parameters.rb:21:16:21:21 | &block | parameters.rb:21:17:21:21 | block | parameters.rb:21:1:23:3 | method scope for call_block |
| parameters.rb:22:3:22:7 | block | parameters.rb:21:17:21:21 | block | parameters.rb:21:1:23:3 | method scope for call_block |
| parameters.rb:25:15:25:18 | name | parameters.rb:25:15:25:18 | name | parameters.rb:25:1:28:3 | method scope for opt_param |
| parameters.rb:25:33:25:36 | size | parameters.rb:25:33:25:36 | size | parameters.rb:25:1:28:3 | method scope for opt_param |
@@ -228,11 +228,11 @@ implicitWrite
| parameters.rb:1:14:1:14 | x |
| parameters.rb:1:18:1:18 | y |
| parameters.rb:7:17:7:22 | client |
| parameters.rb:7:26:7:31 | pizzas |
| parameters.rb:15:17:15:19 | map |
| parameters.rb:7:25:7:31 | *pizzas |
| parameters.rb:15:15:15:19 | **map |
| parameters.rb:16:16:16:18 | key |
| parameters.rb:16:21:16:25 | value |
| parameters.rb:21:17:21:21 | block |
| parameters.rb:21:16:21:21 | &block |
| parameters.rb:25:15:25:18 | name |
| parameters.rb:25:33:25:36 | size |
| parameters.rb:30:15:30:19 | first |