protected function doWalk(Expression $expression)
{
$expressionType = get_class($expression);
do {
if (isset($this->callableMap[$expressionType])) {
return $this->callableMap[$expressionType]($expression, $this);
}
} while (($expressionType = get_parent_class($expressionType)) !== false && $expressionType !== Expression::EXPRESSION_TYPE);
return $expression->traverse($this);
}