class Ikra::AST::Interpreter
Executes this AST
in the Ruby interpreter. Not possible for all nodes.
Public Class Methods
interpret(node)
click to toggle source
# File lib/ast/interpreter.rb, line 5 def self.interpret(node) return node.accept(self.new) end
Public Instance Methods
visit_array_node(node)
click to toggle source
# File lib/ast/interpreter.rb, line 33 def visit_array_node(node) return node.values.map do |value| value.accept(self) end end
visit_bool_node(node)
click to toggle source
# File lib/ast/interpreter.rb, line 17 def visit_bool_node(node) return node.value end
visit_const_node(node)
click to toggle source
# File lib/ast/interpreter.rb, line 39 def visit_const_node(node) return node.find_behavior_node.binding.eval(node.identifier) end
visit_float_node(node)
click to toggle source
# File lib/ast/interpreter.rb, line 13 def visit_float_node(node) return node.value end
visit_hash_node(node)
click to toggle source
# File lib/ast/interpreter.rb, line 43 def visit_hash_node(node) result = {} node.hash.each do |key, value| result[key.accept(self)] = value.accept(self) end return result end
visit_int_node(node)
click to toggle source
# File lib/ast/interpreter.rb, line 9 def visit_int_node(node) return node.value end
visit_nil_node(node)
click to toggle source
# File lib/ast/interpreter.rb, line 21 def visit_nil_node(node) return nil end
visit_send_node(node)
click to toggle source
# File lib/ast/interpreter.rb, line 53 def visit_send_node(node) receiver = node.receiver.accept(self) arguments = node.arguments.map do |arg| arg.accept(self) end if node.block_argument == nil return receiver.send(node.selector, *arguments) else # TODO: Implement block = receiver.block_argument.accept(self) return receiver.send(node.selector, *arguments, &block) end end
visit_string_node(node)
click to toggle source
# File lib/ast/interpreter.rb, line 29 def visit_string_node(node) return node.value end
visit_symbol_node(node)
click to toggle source
# File lib/ast/interpreter.rb, line 25 def visit_symbol_node(node) return node.value end