private function readVariable(Operand $var)
{
if ($var instanceof Operand\BoundVariable) {
// bound variables are immune to SSA
return $var;
}
if ($var instanceof Operand\Variable) {
if ($var->name instanceof Literal) {
return $this->readVariableName($this->getVariableName($var), $this->block);
} else {
$this->readVariable($var->name);
// variable variable read - all we can do is register the nested read
return $var;
}
}
if ($var instanceof Operand\Temporary && $var->original instanceof Operand) {
return $this->readVariable($var->original);
}
return $var;
}