private function objectDereference(Node $object) {
    while ($this->currentType === T_OBJECT_OPERATOR) {
      $operator_node = new PartialNode();
      $this->mustMatch(T_OBJECT_OPERATOR, $operator_node, 'operator');

      $object_property = $this->objectProperty();
      if ($this->currentType === '(') {
        $node = new ObjectMethodCallNode();
        $node->addChild($object, 'object');
        $node->mergeNode($operator_node);
        $node->addChild($object_property, 'methodName');
        $this->functionCallParameterList($node);
        $node = $this->arrayDeference($node);
      }
      else {
        $node = new ObjectPropertyNode();
        $node->addChild($object, 'object');
        $node->mergeNode($operator_node);
        $node->addChild($object_property, 'property');
        $node = $this->offsetVariable($node);
        if ($this->currentType === '(') {
          $call = new CallbackCallNode();
          $call->addChild($node, 'callback');
          $this->functionCallParameterList($call);
          $node = $this->arrayDeference($call);
        }
      }
      $object = $node;
    }

    return $object;
  }
private function objectDereference(Node $object) {
    while ($this->currentType === T_OBJECT_OPERATOR) {
      $operator_node = new PartialNode();
      $this->mustMatch(T_OBJECT_OPERATOR, $operator_node, 'operator');

      $object_property = $this->objectProperty();
      if ($this->currentType === '(') {
        $node = new ObjectMethodCallNode();
        $node->addChild($object, 'object');
        $node->mergeNode($operator_node);
        $node->addChild($object_property, 'methodName');
        $this->functionCallParameterList($node);
        $node = $this->arrayDeference($node);
      }
      else {
        $node = new ObjectPropertyNode();
        $node->addChild($object, 'object');
        $node->mergeNode($operator_node);
        $node->addChild($object_property, 'property');
        $node = $this->offsetVariable($node);
        if ($this->currentType === '(') {
          $call = new CallbackCallNode();
          $call->addChild($node, 'callback');
          $this->functionCallParameterList($call);
          $node = $this->arrayDeference($call);
        }
      }
      $object = $node;
    }

    return $object;
  }
private function objectDereference ( Node $ object ) { while ( $ this -> currentType === T_OBJECT_OPERATOR ) { $ operator_node = new PartialNode ( ) ; $ this -> mustMatch ( T_OBJECT_OPERATOR , $ operator_node , 'operator' ) ; $ object_property = $ this -> objectProperty ( ) ; if ( $ this -> currentType === '(' ) { $ node = new ObjectMethodCallNode ( ) ; $ node -> addChild ( $ object , 'object' ) ; $ node -> mergeNode ( $ operator_node ) ; $ node -> addChild ( $ object_property , 'methodName' ) ; $ this -> functionCallParameterList ( $ node ) ; $ node = $ this -> arrayDeference ( $ node ) ; } else { $ node = new ObjectPropertyNode ( ) ; $ node -> addChild ( $ object , 'object' ) ; $ node -> mergeNode ( $ operator_node ) ; $ node -> addChild ( $ object_property , 'property' ) ; $ node = $ this -> offsetVariable ( $ node ) ; if ( $ this -> currentType === '(' ) { $ call = new CallbackCallNode ( ) ; $ call -> addChild ( $ node , 'callback' ) ; $ this -> functionCallParameterList ( $ call ) ; $ node = $ this -> arrayDeference ( $ call ) ; } } $ object = $ node ; } return $ object ; }
Apply any object dereference to object operand.
@param Node $object
@return Node
Apply any object dereference to object operand .