module Virtual # Remove all functions that are not called # Not called is approximated by the fact that the method name doesn't show up # in any function reachable from main class Minimizer def run @gonners = [] Parfait::Space.object_space.classes.values.each do |c| c.instance_methods.each do |f| @gonners << f end end init= Parfait::Space.object_space.get_class_by_name("Kernel").get_instance_method "__init__" remove init dump_remaining end def remove function index = @gonners.index function unless index puts "function was already removed #{ function.name}" return end @gonners.delete function function.info.blocks.each do |block| block.codes.each do |code| if code.is_a? Virtual::MessageSend str_name = code.name.to_s @gonners.each do |stay| remove stay if(stay.name == str_name) end end remove code.method if code.is_a? Virtual::MethodCall end end end def dump_remaining names = @gonners.collect {|f| f.name } puts "Dump #{names}" end end end