Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit f885e47

Browse files
authored
Merge pull request #293 from ruby-syntax-tree/opt-pop
Optimize pop nodes
2 parents b14e56e + 93ec53b commit f885e47

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

lib/syntax_tree/yarv/sea_of_nodes.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,30 @@ def cleanup_insn_nodes
391391
connect_over(node)
392392
remove(node)
393393
end
394+
when Pop
395+
from = node.inputs.find { |edge| edge.type == :data }.from
396+
next unless from.is_a?(InsnNode)
397+
398+
removed =
399+
if from.inputs.empty? && from.outputs.size == 1
400+
remove(from)
401+
true
402+
elsif from.insn.is_a?(Dup)
403+
connect_over(from)
404+
remove(from)
405+
406+
new_edge = node.inputs.last
407+
new_edge.from.outputs.delete(new_edge)
408+
node.inputs.delete(new_edge)
409+
true
410+
else
411+
false
412+
end
413+
414+
if removed
415+
connect_over(node)
416+
remove(node)
417+
end
394418
end
395419
end
396420
end

0 commit comments

Comments
 (0)