class Ameba::AST::Variable
- Ameba::AST::Variable
- Reference
- Object
Overview
Represents the existence of the local variable. Holds the var node and variable assignments.
Direct Known Subclasses
Defined in:
ameba/ast/variabling/variable.crConstructors
-
.new(node : Crystal::Var, scope : Ameba::AST::Scope)
Creates a new variable(in the scope).
Instance Method Summary
-
#assign(node, scope)
Assigns the variable (creates a new assignment).
-
#assign_before_reference : Crystal::ASTNode | Nil
Node of the first assignment which can be available before any reference.
-
#assignments : Array(Ameba::AST::Assignment)
List of the assignments of this variable.
-
#captured_by_block?(scope = @scope)
Returns
true
if the current var is referenced in in the block. -
#declared_before?(node)
Returns
true
if the variable is declared before the#node
. - #end_location(*args, **options)
- #end_location(*args, **options, &)
-
#eql?(node)
Returns
true
if the#node
represents exactly the same Crystal node as@node
. -
#ignored?
Returns
true
if the name starts with '_',false
if not. - #location(*args, **options)
- #location(*args, **options, &)
- #name(*args, **options)
- #name(*args, **options, &)
-
#node : Crystal::Var
The actual var node.
-
#reference(node : Crystal::Var, scope : Scope)
Creates a reference to this variable in some scope.
-
#reference(scope : Scope)
Creates a reference to this variable in some scope.
-
#reference_assignments!
Reference variable's assignments.
-
#referenced?
Returns
true
if variable has any reference. -
#references : Array(Ameba::AST::Reference)
List of the references of this variable.
-
#scope : Scope
Scope of this variable.
-
#special?
Returns
true
if it is a special variable, i.e$?
. -
#target_of?(assign)
Returns
true
if the variable is a target (on the left) of the assignment,false
otherwise. - #to_s(*args, **options)
- #to_s(*args, **options, &)
-
#used_in_macro?(scope = @scope)
Returns
true
if current variable potentially referenced in a macro,false
if not.
Constructor Detail
Creates a new variable(in the scope).
Variable.new(node, scope)
Instance Method Detail
Assigns the variable (creates a new assignment). Variable may have multiple assignments.
variable = Variable.new(node, scope)
variable.assign(node1)
variable.assign(node2)
variable.assignment.size # => 2
Node of the first assignment which can be available before any reference.
Returns true
if the current var is referenced in
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 }
Creates a reference to this variable in some scope.
variable = Variable.new(node, scope)
variable.reference(var_node, some_scope)
Creates a reference to this variable in some scope.
variable = Variable.new(node, scope)
variable.reference(var_node, some_scope)
Reference variable's assignments.
variable = Variable.new(node, scope)
variable.assign(assign_node)
variable.reference_assignments!
Returns true
if variable has any reference.
variable = Variable.new(node, scope)
variable.reference(var_node, some_scope)
variable.referenced? # => true
Returns true
if the variable is a target (on the left) of the assignment,
false
otherwise.
Returns true
if current variable potentially referenced in a macro,
false
if not.