public static function replaceVar(Operand $from, Operand $to)
{
foreach ($from->usages as $usage) {
foreach ($usage->getVariableNames() as $varName) {
$vars = $usage->{$varName};
$newVars = [];
if (!is_array($vars)) {
$vars = [$vars];
}
foreach ($vars as $key => $value) {
if ($value === $from) {
$newVars[$key] = $to;
$to->addUsage($usage);
} else {
$newVars[$key] = $value;
}
}
if (!is_array($usage->{$varName})) {
$usage->{$varName} = array_shift($newVars);
} else {
$usage->{$varName} = $newVars;
}
}
}
}