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 # => 2Node 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? # => trueReturns 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.