rubyx/lib/virtual/passes/set_optimisation.rb
Torsten Ruger f3ee11fca5 simple set optimisation
the price of having simple code (generation) is that
it is sometimes stupid code that gets generated
Filter some of the really daft stuff out
2015-06-21 17:25:27 +03:00

20 lines
662 B
Ruby

module Virtual
class SetOptimisation
def run block
block.codes.dup.each_with_index do |code , i|
next unless code.is_a? Virtual::Set
next_code = block.codes[i+1]
next unless next_code.is_a? Virtual::Set
next unless code.to == next_code.from
# TODO: a correct implementation would have to check that the code.to
# is not used in further blocks, before being assigned to
new_code = Virtual::Set.new(code.from , next_code.to )
block.replace(code , [new_code] )
block.replace(next_code , [] )
end
end
end
Virtual.machine.add_pass "Virtual::SetOptimisation"
end