public function interpret(O\Expression $expression)
{
if ($expression instanceof O\MethodCallExpression && method_exists($this, $methodName = 'visit' . $this->getMethodName($expression))) {
$this->{$methodName}($expression);
} elseif ($expression instanceof O\IndexExpression) {
$this->{'visitOffsetGet'}($expression);
} elseif ($expression instanceof O\IssetExpression) {
$this->{'visitOffsetExists'}($expression);
} elseif ($expression instanceof O\FunctionCallExpression && $expression->getName() instanceof O\ValueExpression && strtolower($expression->getName()->getValue()) === 'count') {
$this->{'visitCount'}($expression);
} else {
$this->scopeInterpreter->interpretScope($expression);
}
}