vidarh / writing-a-compiler-in-ruby

Code from my series on writing a Ruby compiler in Ruby

This URL has Read+Write access

writing-a-compiler-in-ruby / utils.rb
100644 19 lines (16 sloc) 0.361 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Visit all objects in an array recursively.
# yield any object that #is_a?(c)
def deep_collect(node, c = Array, &block)
  ret = []
  if node.is_a?(c)
    ret << yield(node)
  end
  if node.is_a?(Array)
    node.each do |n|
      if n.is_a?(Array) || n.is_a?(c)
        ret << deep_collect(n, c, &block)
      end
    end
  end
  ret.flatten.uniq.compact
end