vidarh / writing-a-compiler-in-ruby

Code from my series on writing a Ruby compiler in Ruby

This URL has Read+Write access

commit  cbefdad73ef9d0d430b03c939ea921e24a4fee54
tree    c6c68bf7cfd57e8e0f1740e53ce6213644f9d3d4
parent  386f2801b1921bb6c71a743343d60674bb32d7c7
writing-a-compiler-in-ruby / utils.rb
100644 19 lines (16 sloc) 0.36 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