Class: Ikra::AST::LexicalVariablesEnumerator

Inherits:
Visitor show all
Defined in:
lib/ast/lexical_variables_enumerator.rb

Overview

Visitor for determining the names all lexical variables that are accessed by a block (or method??). Lexical variables that are in scope are determined when translating the Ruby code and passed to this visitor. TODO(matthias): Does a method have access to lexical variables?

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Visitor

#visit_array_node, #visit_begin_node, #visit_block_def_node, #visit_bool_node, #visit_break_node, #visit_class_def_node, #visit_const_node, #visit_float_node, #visit_for_node, #visit_hash_node, #visit_if_node, #visit_int_node, #visit_ivar_read_node, #visit_meth_def_node, #visit_nil_node, #visit_node, #visit_program_node, #visit_return_node, #visit_root_node, #visit_send_node, #visit_source_code_expr_node, #visit_string_node, #visit_symbol_node, #visit_ternary_node, #visit_until_node, #visit_until_post_node, #visit_var_def_node, #visit_while_node, #visit_while_post_node

Constructor Details

#initialize(lexical_var_names) ⇒ LexicalVariablesEnumerator

Returns a new instance of LexicalVariablesEnumerator.



13
14
15
16
# File 'lib/ast/lexical_variables_enumerator.rb', line 13

def initialize(lexical_var_names)
    @lexical_var_names = lexical_var_names
    @lexical_variables = Set.new
end

Instance Attribute Details

#lexical_variablesObject (readonly)

Returns the value of attribute lexical_variables.



11
12
13
# File 'lib/ast/lexical_variables_enumerator.rb', line 11

def lexical_variables
  @lexical_variables
end

Instance Method Details

#add_lvar_access(identifier) ⇒ Object

Register usage of lexical variable



19
20
21
22
23
# File 'lib/ast/lexical_variables_enumerator.rb', line 19

def add_lvar_access(identifier)
    if @lexical_var_names.include?(identifier)
        @lexical_variables.add(identifier)
    end
end

#visit_lvar_read_node(node) ⇒ Object



25
26
27
# File 'lib/ast/lexical_variables_enumerator.rb', line 25

def visit_lvar_read_node(node)
    add_lvar_access(node.identifier)
end

#visit_lvar_write_node(node) ⇒ Object



29
30
31
32
# File 'lib/ast/lexical_variables_enumerator.rb', line 29

def visit_lvar_write_node(node)
    add_lvar_access(node.identifier)
    super(node)
end