private function replaceOpVariable(Operand $from, Operand $to, Op $op) { foreach ($op->getVariableNames() as $name) { if (is_null($op->{$name})) { continue; } if (is_array($op->{$name})) { // SIGH, PHP won't let me do this directly (parses as $op->($name[$key])) $result = $op->{$name}; $new = []; foreach ($result as $key => $value) { if ($value === $from) { $new[$key] = $to; if ($op->isWriteVariable($name)) { $to->addWriteOp($op); } else { $to->addUsage($op); } } else { $new[$key] = $value; } } $op->{$name} = $new; } elseif ($op->{$name} === $from) { $op->{$name} = $to; if ($op->isWriteVariable($name)) { $to->addWriteOp($op); } else { $to->addUsage($op); } } } }