/** * Parse a function out of the given token reader * * @param \vc\Data\Routine $routine The object to fill with data * @param \vc\Tokens\Access $access The token access * @return NULL */ public function parseRoutine(\vc\Data\Routine $routine, \vc\Tokens\Access $access) { $access->findRequired(array(Token::T_FUNCTION)); $token = $access->peekToRequired(array(Token::T_STRING, Token::T_AMPERSAND, Token::T_PARENS_OPEN)); // Handle routines that return a reference if ($token->is(Token::T_AMPERSAND)) { $routine->setReturnRef(TRUE); $access->popToken(); $token = $access->peekToRequired(array(Token::T_STRING, Token::T_PARENS_OPEN)); } // Names are optional because of anonymous methods if ($token->is(Token::T_STRING)) { $access->popToken(); $routine->setName($token->getContent()); } $routine->setArgs($this->args->parseArgs($access)); $access->findRequired(array(Token::T_CURLY_OPEN, Token::T_SEMICOLON)); $this->brackets->parseCurlies($access); }