diff --git a/src/Composer/DependencyResolver/Decisions.php b/src/Composer/DependencyResolver/Decisions.php index cf4419e55..77289169b 100644 --- a/src/Composer/DependencyResolver/Decisions.php +++ b/src/Composer/DependencyResolver/Decisions.php @@ -25,7 +25,6 @@ class Decisions implements \Iterator, \Countable protected $pool; protected $decisionMap; protected $decisionQueue = array(); - protected $decisionQueueFree = array(); public function __construct($pool) { @@ -38,37 +37,13 @@ class Decisions implements \Iterator, \Countable } } - protected function addDecision($literal, $level) - { - $packageId = abs($literal); - - $previousDecision = $this->decisionMap[$packageId]; - if ($previousDecision != 0) { - $literalString = $this->pool->literalToString($literal); - $package = $this->pool->literalToPackage($literal); - throw new SolverBugException( - "Trying to decide $literalString on level $level, even though $package was previously decided as ".(int) $previousDecision."." - ); - } - - if ($literal > 0) { - $this->decisionMap[$packageId] = $level; - } else { - $this->decisionMap[$packageId] = -$level; - } - } - - public function decide($literal, $level, $why, $addToFreeQueue = false) + public function decide($literal, $level, $why) { $this->addDecision($literal, $level); $this->decisionQueue[] = array( self::DECISION_LITERAL => $literal, self::DECISION_REASON => $why, ); - - if ($addToFreeQueue) { - $this->decisionQueueFree[count($this->decisionQueue) - 1] = true; - } } public function contain($literal) @@ -159,15 +134,12 @@ class Decisions implements \Iterator, \Countable while ($decision = array_pop($this->decisionQueue)) { $this->decisionMap[abs($decision[self::DECISION_LITERAL])] = 0; } - - $this->decisionQueueFree = array(); } public function resetToOffset($offset) { while (count($this->decisionQueue) > $offset + 1) { $decision = array_pop($this->decisionQueue); - unset($this->decisionQueueFree[count($this->decisionQueue)]); $this->decisionMap[abs($decision[self::DECISION_LITERAL])] = 0; } } @@ -212,4 +184,24 @@ class Decisions implements \Iterator, \Countable { return count($this->decisionQueue) === 0; } + + protected function addDecision($literal, $level) + { + $packageId = abs($literal); + + $previousDecision = $this->decisionMap[$packageId]; + if ($previousDecision != 0) { + $literalString = $this->pool->literalToString($literal); + $package = $this->pool->literalToPackage($literal); + throw new SolverBugException( + "Trying to decide $literalString on level $level, even though $package was previously decided as ".(int) $previousDecision."." + ); + } + + if ($literal > 0) { + $this->decisionMap[$packageId] = $level; + } else { + $this->decisionMap[$packageId] = -$level; + } + } } diff --git a/src/Composer/DependencyResolver/Solver.php b/src/Composer/DependencyResolver/Solver.php index e726e0961..30afdb3fd 100644 --- a/src/Composer/DependencyResolver/Solver.php +++ b/src/Composer/DependencyResolver/Solver.php @@ -275,7 +275,7 @@ class Solver { $level++; - $this->decisions->decide($literal, $level, $rule, true); + $this->decisions->decide($literal, $level, $rule); while (true) { $rule = $this->propagate($level);