class Ameba::AST::Variable

Overview

Represents the existence of the local variable. Holds the var node and variable assigments.

Direct Known Subclasses

Defined in:

Constructors

Instance Method Summary

Constructor Detail

def self.new(node, scope) #

Creates a new variable(in the scope).

Variable.new(node, scope)

Instance Method Detail

def assign(node, scope) #

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

def assign_before_reference : Crystal::ASTNode? #

Node of the first assignment which can be available before any reference.


def assignments : Array(Ameba::AST::Assignment) #

List of the assigments of this variable.


def captured_by_block?(scope = @scope) #

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 }

def declared_before?(node) #

Returns true if the variable is delcared before the #node.


def end_location(*args, **options) #

def end_location(*args, **options, &) #

def eql?(node) #

Returns true if the #node represents exactly the same Crystal node as @node.


def ignored? #

Returns true if the name starts with '_', false if not.


def location(*args, **options) #

def location(*args, **options, &) #

def name(*args, **options) #

def name(*args, **options, &) #

def node : Crystal::Var #

The actual var node.


def reference(node : Crystal::Var, scope : Scope) #

Creates a reference to this variable in some scope.

variable = Variable.new(node, scope)
variable.reference(var_node, some_scope)

def reference_assignments! #

Reference variable's assignments.

variable = Variable.new(node, scope)
variable.assign(assign_node)
variable.reference_assignments!

def referenced? #

Returns true if variable has any reference.

variable = Variable.new(node, scope)
variable.reference(var_node)
variable.referenced? # => true

def references : Array(Ameba::AST::Reference) #

List of the references of this variable.


def scope : Scope #

Scope of this variable.


def special? #

Returns true if it is a special variable, i.e $?.


def target_of?(assign) #

Returns true if the variable is a target (on the left) of the assignment, false otherwise.


def to_s(*args, **options) #

def to_s(*args, **options, &) #

def used_in_macro?(scope = @scope) #

Returns true if current variable potentially referenced in a macro literal, false if not.