comparison vendor/nikic/php-parser/test_old/run.php @ 13:5fb285c0d0e3

Update Drupal core to 8.4.7 via Composer. Security update; I *think* we've been lucky to get away with this so far, as we don't support self-registration which seems to be used by the so-called "drupalgeddon 2" attack that 8.4.5 was vulnerable to.
author Chris Cannam
date Mon, 23 Apr 2018 09:33:26 +0100
parents 4c8ae668cc8c
children 129ea1e6d783
comparison
equal deleted inserted replaced
12:7a779792577d 13:5fb285c0d0e3
108 break; 108 break;
109 default: 109 default:
110 showHelp('Test type must be one of: PHP5, PHP7 or Symfony'); 110 showHelp('Test type must be one of: PHP5, PHP7 or Symfony');
111 } 111 }
112 112
113 require_once dirname(__FILE__) . '/../lib/PhpParser/Autoloader.php'; 113 require_once __DIR__ . '/../vendor/autoload.php';
114 PhpParser\Autoloader::register(); 114
115 115 $lexer = new PhpParser\Lexer\Emulative(['usedAttributes' => [
116 $parserName = 'PhpParser\Parser\\' . $version; 116 'comments', 'startLine', 'endLine', 'startTokenPos', 'endTokenPos',
117 $parser = new $parserName(new PhpParser\Lexer\Emulative); 117 ]]);
118 $parserName = 'PhpParser\Parser\\' . $version;
119 /** @var PhpParser\Parser $parser */
120 $parser = new $parserName($lexer);
118 $prettyPrinter = new PhpParser\PrettyPrinter\Standard; 121 $prettyPrinter = new PhpParser\PrettyPrinter\Standard;
119 $nodeDumper = new PhpParser\NodeDumper; 122 $nodeDumper = new PhpParser\NodeDumper;
120 123
121 $parseFail = $ppFail = $compareFail = $count = 0; 124 $cloningTraverser = new PhpParser\NodeTraverser;
122 125 $cloningTraverser->addVisitor(new PhpParser\NodeVisitor\CloningVisitor);
123 $readTime = $parseTime = $ppTime = $reparseTime = $compareTime = 0; 126
127 $parseFail = $fpppFail = $ppFail = $compareFail = $count = 0;
128
129 $readTime = $parseTime = $cloneTime = 0;
130 $fpppTime = $ppTime = $reparseTime = $compareTime = 0;
124 $totalStartTime = microtime(true); 131 $totalStartTime = microtime(true);
125 132
126 foreach (new RecursiveIteratorIterator( 133 foreach (new RecursiveIteratorIterator(
127 new RecursiveDirectoryIterator($dir), 134 new RecursiveDirectoryIterator($dir),
128 RecursiveIteratorIterator::LEAVES_ONLY) 135 RecursiveIteratorIterator::LEAVES_ONLY)
130 if (!$fileFilter($file)) { 137 if (!$fileFilter($file)) {
131 continue; 138 continue;
132 } 139 }
133 140
134 $startTime = microtime(true); 141 $startTime = microtime(true);
135 $code = file_get_contents($file); 142 $origCode = file_get_contents($file);
136 $readTime += microtime(true) - $startTime; 143 $readTime += microtime(true) - $startTime;
137 144
138 if (null === $code = $codeExtractor($file, $code)) { 145 if (null === $origCode = $codeExtractor($file, $origCode)) {
139 continue; 146 continue;
140 } 147 }
141 148
142 set_time_limit(10); 149 set_time_limit(10);
143 150
147 echo substr(str_pad('Testing file ' . $count . ': ' . substr($file, strlen($dir)), 79), 0, 79), "\r"; 154 echo substr(str_pad('Testing file ' . $count . ': ' . substr($file, strlen($dir)), 79), 0, 79), "\r";
148 } 155 }
149 156
150 try { 157 try {
151 $startTime = microtime(true); 158 $startTime = microtime(true);
152 $stmts = $parser->parse($code); 159 $origStmts = $parser->parse($origCode);
153 $parseTime += microtime(true) - $startTime; 160 $parseTime += microtime(true) - $startTime;
154 161
155 $startTime = microtime(true); 162 $origTokens = $lexer->getTokens();
156 $code = '<?php' . "\n" . $prettyPrinter->prettyPrint($stmts); 163
164 $startTime = microtime(true);
165 $stmts = $cloningTraverser->traverse($origStmts);
166 $cloneTime += microtime(true) - $startTime;
167
168 $startTime = microtime(true);
169 $code = $prettyPrinter->printFormatPreserving($stmts, $origStmts, $origTokens);
170 $fpppTime += microtime(true) - $startTime;
171
172 if ($code !== $origCode) {
173 echo $file, ":\n Result of format-preserving pretty-print differs\n";
174 if ($verbose) {
175 echo "FPPP output:\n=====\n$code\n=====\n\n";
176 }
177
178 ++$fpppFail;
179 }
180
181 $startTime = microtime(true);
182 $code = "<?php\n" . $prettyPrinter->prettyPrint($stmts);
157 $ppTime += microtime(true) - $startTime; 183 $ppTime += microtime(true) - $startTime;
158 184
159 try { 185 try {
160 $startTime = microtime(true); 186 $startTime = microtime(true);
161 $ppStmts = $parser->parse($code); 187 $ppStmts = $parser->parse($code);
198 echo ' ', $parseFail, ' parse failures.', "\n"; 224 echo ' ', $parseFail, ' parse failures.', "\n";
199 } 225 }
200 if (0 !== $ppFail) { 226 if (0 !== $ppFail) {
201 echo ' ', $ppFail, ' pretty print failures.', "\n"; 227 echo ' ', $ppFail, ' pretty print failures.', "\n";
202 } 228 }
229 if (0 !== $fpppFail) {
230 echo ' ', $fpppFail, ' FPPP failures.', "\n";
231 }
203 if (0 !== $compareFail) { 232 if (0 !== $compareFail) {
204 echo ' ', $compareFail, ' compare failures.', "\n"; 233 echo ' ', $compareFail, ' compare failures.', "\n";
205 } 234 }
206 } 235 }
207 236
208 echo "\n", 237 echo "\n",
209 'Tested files: ', $count, "\n", 238 'Tested files: ', $count, "\n",
210 "\n", 239 "\n",
211 'Reading files took: ', $readTime, "\n", 240 'Reading files took: ', $readTime, "\n",
212 'Parsing took: ', $parseTime, "\n", 241 'Parsing took: ', $parseTime, "\n",
242 'Cloning took: ', $cloneTime, "\n",
243 'FPPP took: ', $fpppTime, "\n",
213 'Pretty printing took: ', $ppTime, "\n", 244 'Pretty printing took: ', $ppTime, "\n",
214 'Reparsing took: ', $reparseTime, "\n", 245 'Reparsing took: ', $reparseTime, "\n",
215 'Comparing took: ', $compareTime, "\n", 246 'Comparing took: ', $compareTime, "\n",
216 "\n", 247 "\n",
217 'Total time: ', microtime(true) - $totalStartTime, "\n", 248 'Total time: ', microtime(true) - $totalStartTime, "\n",