start to minimize
filter unused methods Filter works, need to remove still
This commit is contained in:
parent
079306dbf8
commit
deaa062062
@ -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"
|
||||
|
@ -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|
|
||||
|
44
lib/virtual/passes/minimizer.rb
Normal file
44
lib/virtual/passes/minimizer.rb
Normal 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
|
Loading…
Reference in New Issue
Block a user