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
trueif the current var is referenced in in the block. -
#declared_before?(node)
Returns
trueif the variable is declared before the#node. - #end_location(*args, **options)
- #end_location(*args, **options, &)
-
#eql?(node)
Returns
trueif the#noderepresents exactly the same Crystal node as@node. -
#ignored?
Returns
trueif the name starts with '_',falseif 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
trueif variable has any reference. -
#references : Array(Ameba::AST::Reference)
List of the references of this variable.
-
#scope : Scope
Scope of this variable.
-
#special?
Returns
trueif it is a special variable, i.e$?. -
#target_of?(assign)
Returns
trueif the variable is a target (on the left) of the assignment,falseotherwise. - #to_s(*args, **options)
- #to_s(*args, **options, &)
-
#used_in_macro?(scope = @scope)
Returns
trueif current variable potentially referenced in a macro,falseif 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.