Exakat\Tasks\Load::processDoubleColon PHP Method

processDoubleColon() private method

private processDoubleColon ( )
    private function processDoubleColon()
    {
        $current = $this->id;
        $leftId = $this->popExpression();
        $finals = $this->precedence->get($this->tokens[$this->id][0]);
        $finals[] = T_DOUBLE_COLON;
        $this->nestContext();
        if ($this->tokens[$this->id + 1][0] === T_OPEN_CURLY) {
            $blockId = $this->processCurlyExpression();
            $right = $this->processFCOA($blockId);
            $this->popExpression();
        } elseif ($this->tokens[$this->id + 1][0] === T_DOLLAR) {
            ++$this->id;
            // Skip ::
            $blockId = $this->processDollar();
            $right = $this->processFCOA($blockId);
            $this->popExpression();
        } else {
            if ($this->tokens[$this->id + 1][0] === T_VARIABLE) {
                ++$this->id;
                $this->processSingle('Variable');
                $right = $this->popExpression();
            } else {
                $right = $this->processNextAsIdentifier();
            }
            if ($this->tokens[$this->id + 1][0] === T_OPEN_PARENTHESIS) {
                $this->pushExpression($right);
                $right = $this->processFunctioncall();
                $this->popExpression();
            }
        }
        $this->exitContext();
        if ($this->atoms[$right]['token'] === 'T_CLASS') {
            $staticId = $this->addAtom('Staticclass');
            $links = 'CLASS';
        } elseif ($this->atoms[$right]['atom'] === 'Identifier') {
            $staticId = $this->addAtom('Staticconstant');
            $links = 'CONSTANT';
        } elseif (in_array($this->atoms[$right]['atom'], array('Variable', 'Array', 'Arrayappend', 'MagicConstant', 'Concatenation', 'Block', 'Boolean', 'Null'))) {
            $staticId = $this->addAtom('Staticproperty');
            $links = 'PROPERTY';
        } elseif (in_array($this->atoms[$right]['atom'], array('Functioncall'))) {
            $staticId = $this->addAtom('Staticmethodcall');
            $links = 'METHOD';
        } else {
            die("Unprocessed atom in static call (right) : " . $this->atoms[$right]['atom'] . "\n");
        }
        $this->addLink($staticId, $leftId, 'CLASS');
        $fullnspath = $this->getFullnspath($leftId);
        $this->setAtom($leftId, array('fullnspath' => $this->getFullnspath($leftId, 'class')));
        $this->addCall('class', $fullnspath, $leftId);
        $this->addLink($staticId, $right, $links);
        $x = array('code' => $this->tokens[$current][1], 'fullcode' => $this->atoms[$leftId]['fullcode'] . '::' . $this->atoms[$right]['fullcode'], 'line' => $this->tokens[$current][2], 'variadic' => false, 'token' => $this->getToken($this->tokens[$current][0]));
        $this->setAtom($staticId, $x);
        $this->pushExpression($staticId);
        if (!$this->isContext(self::CONTEXT_NOSEQUENCE) && $this->tokens[$this->id + 1][0] === T_CLOSE_TAG) {
            $this->processSemicolon();
        } else {
            $staticId = $this->processFCOA($staticId);
        }
        return $staticId;
    }
Load