require_relative "compiler/total_processor" require_relative "compiler/type_collector" require_relative "compiler/method_collector" require_relative "compiler/ruby_method" module Melon class Compiler < AST::Processor def self.compile input ast = Parser::Ruby22.parse input compiler = self.new compiler.process ast end def get_name( statement ) return nil unless statement statement.children[1] end def on_class statement name , sup , body = *statement clazz = Parfait::Space.object_space.create_class(get_name(name) , get_name(sup) ) ivar_hash = TypeCollector.new.collect(body) clazz.set_instance_type( Parfait::Type.for_hash( clazz , ivar_hash ) ) MethodCollector.new.collect(body) end def handler_missing(node) node.children.each do |kid | process(kid) if kid.is_a?(AST::Node) end end end end