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;
}