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