Class: Ikra::Translator::VariableClassifier

Inherits:
AST::Visitor show all
Defined in:
lib/translator/variable_classifier_visitor.rb

Instance Method Summary collapse

Methods inherited from AST::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_variable_names:) ⇒ VariableClassifier

Returns a new instance of VariableClassifier.



34
35
36
# File 'lib/translator/variable_classifier_visitor.rb', line 34

def initialize(lexical_variable_names:)
    @lexical_variable_names = lexical_variable_names
end

Instance Method Details

#var_type(identifier) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/translator/variable_classifier_visitor.rb', line 47

def var_type(identifier)
    if @lexical_variable_names.include?(identifier)
        return :lexical
    else
        return :local
    end
end

#visit_lvar_read_node(node) ⇒ Object



38
39
40
# File 'lib/translator/variable_classifier_visitor.rb', line 38

def visit_lvar_read_node(node)
    node.variable_kind = var_type(node.identifier)
end

#visit_lvar_write_node(node) ⇒ Object



42
43
44
45
# File 'lib/translator/variable_classifier_visitor.rb', line 42

def visit_lvar_write_node(node)
    node.variable_kind = var_type(node.identifier)
    super(node)
end