/**
* {@inheritdoc}
*
* @param mixed $value
* @param string $operator
* @param mixed $operand
* @return boolean
*/
protected function evaluateOperator($value, $operator, $operand)
{
if ($operator === 'instanceof' && $value instanceof NodeInterface) {
if ($this->operandIsSimpleType($operand)) {
return $this->handleSimpleTypeOperand($operand, $value);
} elseif ($operand === NodeInterface::class || $operand === Node::class) {
return true;
} else {
$isOfType = $value->getNodeType()->isOfType($operand[0] === '!' ? substr($operand, 1) : $operand);
return $operand[0] === '!' ? $isOfType === false : $isOfType;
}
} elseif ($operator === '!instanceof' && $value instanceof NodeInterface) {
return !$this->evaluateOperator($value, 'instanceof', $operand);
}
return parent::evaluateOperator($value, $operator, $operand);
}