summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--state.rb18
1 files changed, 13 insertions, 5 deletions
diff --git a/state.rb b/state.rb
index 6912b49..9bc8e34 100644
--- a/state.rb
+++ b/state.rb
@@ -195,11 +195,19 @@ class State
active_states = @@states.select{ |x| x.active }
candidates = @depends.map{ |d| active_states.select{ |s| d.match s } }
return nil if candidates.include? []
- candidates[0].product(*candidates[1..-1]).map{ |x| x.to_set } \
- .select{ |x| x.inject(true){ |st, y| st and y.rooted_in x } } \
- .reject do |dset|
- active_states.select{ |x| x.is_a? self and x.deps == dset }.size > 0
- end.each{ |x| self.new x }
+
+ unless candidates == []
+ candidates = candidates[0].product(*candidates[1..-1]).map{ |x| x.to_set } \
+ .select{ |x| x.size == 0 or x.inject(true){ |st, y| st and y.rooted_in x } }
+ else
+ candidates = [Set.new]
+ end
+
+ candidates.reject! do |dset|
+ active_states.select{ |x| x.is_a? self and x.deps == dset }.size > 0
+ end
+
+ candidates.each{ |x| self.new x }
end
# Depsolve all state classes. This method is not defined in subclasses of