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).
-
#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 the block. - #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.
-
#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.assignments.size # => 2
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 }
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)
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.