175 def flatten_merge(set, seen = Set.new) # :nodoc:
176 set.each { |e|
177 if e.is_a?(Set)
178 if seen.include?(e_id = e.object_id)
179 raise ArgumentError, "tried to flatten recursive Set"
180 end
181
182 seen.add(e_id)
183 flatten_merge(e, seen)
184 seen.delete(e_id)
185 else
186 add(e)
187 end
188 }
189
190 self
191 end