start to minimize

filter unused methods
Filter works, need to remove still
This commit is contained in:
Torsten Ruger 2015-05-30 14:49:47 +03:00
parent 079306dbf8
commit deaa062062
3 changed files with 46 additions and 0 deletions

View File

@ -7,6 +7,7 @@ require "virtual/compiled_method_info"
require "virtual/slots/slot"
require "virtual/type"
# the passes _are_ order dependant
require "virtual/passes/minimizer"
require "virtual/passes/send_implementation"
require "virtual/passes/get_implementation"
require "virtual/passes/enter_implementation"

View File

@ -42,6 +42,7 @@ module Virtual
attr_reader :message , :passes , :space , :class_mappings , :init
def run_passes
Minimizer.new.run
@passes.each do |pass_class|
blocks = [@init]
@space.classes.values.each do |c|

View File

@ -0,0 +1,44 @@
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