/** * testParserHandlesMaxNestingLevel * * @return void */ public function testParserHandlesMaxNestingLevel() { if (version_compare(phpversion(), '5.2.10') < 0) { $this->markTestSkipped(); } ini_set('xdebug.max_nesting_level', '100'); $cache = new MemoryCacheDriver(); $builder = new PHPBuilder(); $tokenizer = new PHPTokenizerInternal(); $tokenizer->setSourceFile(self::createCodeResourceUriForTest()); $parser = new PHPParserGeneric($tokenizer, $builder, $cache); $parser->setMaxNestingLevel(512); $parser->parse(); }
/** * This method performs the parsing process of all source files. It expects * that the <b>$_builder</b> property was initialized with a concrete builder * implementation. * * @return void */ private function performParseProcess() { // Reset list of thrown exceptions $this->parseExceptions = array(); $tokenizer = new PHPTokenizerInternal(); $this->fireStartParseProcess($this->builder); foreach ($this->createFileIterator() as $file) { $tokenizer->setSourceFile($file); $parser = new PHPParserGeneric($tokenizer, $this->builder, $this->cacheFactory->create()); $parser->setMaxNestingLevel($this->configuration->parser->nesting); // Disable annotation parsing? if ($this->withoutAnnotations === true) { $parser->setIgnoreAnnotations(); } $this->fireStartFileParsing($tokenizer); try { $parser->parse(); } catch (\PDepend\Source\Parser\ParserException $e) { $this->parseExceptions[] = $e; } $this->fireEndFileParsing($tokenizer); } $this->fireEndParseProcess($this->builder); }