protected function compile($expr, Context $context)
{
$leftCompiledExpression = $context->getExpressionCompiler()->compile($expr->expr);
$rightCompiledExpression = $context->getExpressionCompiler()->compile($expr->class);
if ($leftCompiledExpression->isObject() && $rightCompiledExpression->isObject()) {
$leftVariable = $leftCompiledExpression->getVariable();
$rightVariable = $rightCompiledExpression->getVariable();
/**
* $a = new A();
* $b = $a;
*
* $a instanceof $b
*/
if ($leftVariable && $rightVariable) {
if ($leftVariable->isReferenced() && $leftVariable->getReferencedTo() instanceof $rightVariable) {
return new CompiledExpression(CompiledExpression::BOOLEAN, true);
}
}
}
/**
* Anyway this operator will return BOOLEAN
*/
return new CompiledExpression(CompiledExpression::BOOLEAN);
}