class

Ameba::AST::Variable

Inherits Reference < Object

Represents the existence of the local variable. Holds the var node and variable assignments.

Constructors

new(node : Crystal::Var, scope : Ameba::AST::Scope)

Creates a new variable(in the scope).

Variable.new(node, scope)
Source

Instance methods

assign(node, scope)

Assigns the variable (creates a new assignment). Variable may have multiple assignments.

variable = Variable.new(node, scope)
variable.assign(node1)
variable.assign(node2)
variable.assignments.size # => 2
Source
assignments

List of the assignments of this variable.

Source
captured_by_block?(scope = @scope)

Returns true if the current var is referenced in the block. For example this variable is captured by block:

a = 1
3.times { |i| a = a + i }

And this variable is not captured by block.

i = 1
3.times { |i| i + 1 }
Source
end_location(*args, **options)
Source
end_location(*args, **options, &)
Source
eql?(node)

Returns true if the node represents exactly the same Crystal node as @node.

Source
ignored?

Returns true if the name starts with '_', false if not.

Source
location(*args, **options)
Source
location(*args, **options, &)
Source
name(*args, **options)
Source
name(*args, **options, &)
Source
node

The actual var node.

Source
reference(node : Crystal::Var, scope : Scope)

Creates a reference to this variable in some scope.

variable = Variable.new(node, scope)
variable.reference(var_node, some_scope)
Source
reference(scope : Scope)

Creates a reference to this variable in some scope.

variable = Variable.new(node, scope)
variable.reference(var_node, some_scope)
Source
referenced?

Returns true if variable has any reference.

variable = Variable.new(node, scope)
variable.reference(var_node, some_scope)
variable.referenced? # => true
Source
references

List of the references of this variable.

Source
scope

Scope of this variable.

Source
special?

Returns true if it is a special variable, i.e $?.

Source
target_of?(assign)

Returns true if the variable is a target (on the left) of the assignment, false otherwise.

Source
to_s(*args, **options)
Source
to_s(*args, **options, &)
Source
used_in_macro?(scope = @scope)

Returns true if current variable potentially referenced in a macro, false if not.

Source