Ejemplo n.º 1
0
 /**
  * Parses the given token reader
  *
  * @param \vc\Data\Type\Cls $class The class to fill with data
  * @param \vc\Tokens\Access $access The token access
  * @return NULL
  */
 public function parseMembers(\vc\Data\Type\Cls $class, \vc\Tokens\Access $access)
 {
     $last = NULL;
     // Limit the token stream to just the current block scope
     $access = $access->untilBlockEnds();
     // Keep looking until we have consumed all the members of this class
     while (TRUE) {
         try {
             $token = $access->peekToRequired(array(Token::T_CONST, Token::T_STATIC, Token::T_ABSTRACT, Token::T_FINAL, Token::T_PUBLIC, Token::T_PROTECTED, Token::T_PRIVATE, Token::T_VAR, Token::T_FUNCTION));
         } catch (\vc\Tokens\Exception\UnexpectedEnd $err) {
             return NULL;
         }
         // This loop doesn't itself pop any tokens off, so this check just
         // ensures that the parsers below this one don't do anything
         // stupid.
         if ($token === $last) {
             throw new \RuntimeException('Possible Infinite Loop Detected. ' . 'Current token has already been parsed');
         }
         $last = $token;
         // Otherwise, we delegate to the appropraite parser
         if ($token->is(Token::T_CONST)) {
             $class->addConstant($this->constant->parseConstant($access));
         } else {
             $this->signature->parseSignature($class, $access);
         }
     }
 }