class Ameba::AST::Variable
- Ameba::AST::Variable
- Reference
- Object
Overview
Represents the existence of the local variable. Holds the var node and variable assigments.
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 assigments 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_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)
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)
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.