protected function pushTrail($expression)
    {
        if ($expression instanceof Expression) {
            array_push($this->trail, $expression);
        } else {
            // Add the collection in reverse order.
            $i = count($expression);
            while ($i >= 1) {
                $i--;
                array_push($this->trail, $expression[$i]);
            }
        }
    }