Class: Ikra::AST::LexicalVariablesEnumerator
- 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
-
#lexical_variables ⇒ Object
readonly
Returns the value of attribute lexical_variables.
Instance Method Summary collapse
-
#add_lvar_access(identifier) ⇒ Object
Register usage of lexical variable.
-
#initialize(lexical_var_names) ⇒ LexicalVariablesEnumerator
constructor
A new instance of LexicalVariablesEnumerator.
- #visit_lvar_read_node(node) ⇒ Object
- #visit_lvar_write_node(node) ⇒ Object
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_variables ⇒ Object (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 |