def grep_nodes(options)
sexp_type = options[:sexp_type]
receiver = options[:receiver]
message = options[:message]
to_s = options[:to_s]
self.recursive_children do |child|
if (!sexp_type || (sexp_type.is_a?(Array) ? sexp_type.include?(child.sexp_type) : sexp_type == child.sexp_type)) &&
(!receiver || (receiver.is_a?(Array) ? receiver.include?(child.receiver.to_s) : receiver == child.receiver.to_s)) &&
(!message || (message.is_a?(Array) ? message.include?(child.message.to_s) : message == child.message.to_s)) &&
(!to_s || (to_s.is_a?(Array) ? to_s.include?(child.to_s) : to_s == child.to_s))
yield child
end
end
end