OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library trydart.poi; | 5 library trydart.poi; |
6 | 6 |
7 import 'dart:async' show | 7 import 'dart:async' show |
8 Completer, | 8 Completer, |
9 Future; | 9 Future; |
10 | 10 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 | 54 |
55 import 'package:compiler/implementation/scanner/scannerlib.dart' show | 55 import 'package:compiler/implementation/scanner/scannerlib.dart' show |
56 EOF_TOKEN, | 56 EOF_TOKEN, |
57 IDENTIFIER_TOKEN, | 57 IDENTIFIER_TOKEN, |
58 KEYWORD_TOKEN, | 58 KEYWORD_TOKEN, |
59 PartialClassElement, | 59 PartialClassElement, |
60 PartialElement, | 60 PartialElement, |
61 Token; | 61 Token; |
62 | 62 |
63 import 'package:compiler/implementation/js/js.dart' show | 63 import 'package:compiler/implementation/js/js.dart' show |
64 prettyPrint; | 64 js; |
65 | 65 |
66 /// Enabled by the option --enable-dart-mind. Controls if this program should | 66 /// Enabled by the option --enable-dart-mind. Controls if this program should |
67 /// be querying Dart Mind. | 67 /// be querying Dart Mind. |
68 bool isDartMindEnabled = false; | 68 bool isDartMindEnabled = false; |
69 | 69 |
70 /// Iterator over lines from standard input (or the argument array). | 70 /// Iterator over lines from standard input (or the argument array). |
71 Iterator<String> stdin; | 71 Iterator<String> stdin; |
72 | 72 |
73 /// Enabled by the option --simulate-mutation. When true, this program will | 73 /// Enabled by the option --simulate-mutation. When true, this program will |
74 /// only prompt for one file name, and subsequent runs will read | 74 /// only prompt for one file name, and subsequent runs will read |
(...skipping 14 matching lines...) Expand all Loading... |
89 int globalCounter = 0; | 89 int globalCounter = 0; |
90 | 90 |
91 /// Enabled by the option --verbose (or -v). Prints more information than you | 91 /// Enabled by the option --verbose (or -v). Prints more information than you |
92 /// really need. | 92 /// really need. |
93 bool isVerbose = false; | 93 bool isVerbose = false; |
94 | 94 |
95 /// Enabled by the option --compile. Also compiles the program after analyzing | 95 /// Enabled by the option --compile. Also compiles the program after analyzing |
96 /// the POI. | 96 /// the POI. |
97 bool isCompiler = false; | 97 bool isCompiler = false; |
98 | 98 |
| 99 /// Enabled by the option --minify. Passes the same option to the compiler to |
| 100 /// generate minified output. |
| 101 bool enableMinification = false; |
| 102 |
99 /// When true (the default value) print serialized scope information at the | 103 /// When true (the default value) print serialized scope information at the |
100 /// provided position. | 104 /// provided position. |
101 const bool PRINT_SCOPE_INFO = | 105 const bool PRINT_SCOPE_INFO = |
102 const bool.fromEnvironment('PRINT_SCOPE_INFO', defaultValue: true); | 106 const bool.fromEnvironment('PRINT_SCOPE_INFO', defaultValue: true); |
103 | 107 |
104 Stopwatch wallClock = new Stopwatch(); | 108 Stopwatch wallClock = new Stopwatch(); |
105 | 109 |
106 PoiTask poiTask; | 110 PoiTask poiTask; |
107 | 111 |
108 Compiler cachedCompiler; | 112 Compiler cachedCompiler; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 case '--enable-dart-mind': | 157 case '--enable-dart-mind': |
154 isDartMindEnabled = true; | 158 isDartMindEnabled = true; |
155 break; | 159 break; |
156 case '-v': | 160 case '-v': |
157 case '--verbose': | 161 case '--verbose': |
158 isVerbose = true; | 162 isVerbose = true; |
159 break; | 163 break; |
160 case '--compile': | 164 case '--compile': |
161 isCompiler = true; | 165 isCompiler = true; |
162 break; | 166 break; |
| 167 case '--minify': |
| 168 enableMinification = true; |
| 169 break; |
163 default: | 170 default: |
164 throw 'Unknown option: $argument.'; | 171 throw 'Unknown option: $argument.'; |
165 } | 172 } |
166 } else { | 173 } else { |
167 nonOptionArguments.add(argument); | 174 nonOptionArguments.add(argument); |
168 } | 175 } |
169 } | 176 } |
170 if (nonOptionArguments.isEmpty) { | 177 if (nonOptionArguments.isEmpty) { |
171 stdin = new StdinIterator(); | 178 stdin = new StdinIterator(); |
172 } else { | 179 } else { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 if (uri == script) { | 212 if (uri == script) { |
206 if (poiCount == count) { | 213 if (poiCount == count) { |
207 cachedFileName = uri.toFilePath(); | 214 cachedFileName = uri.toFilePath(); |
208 if (count != 0) { | 215 if (count != 0) { |
209 cachedFileName = '$cachedFileName.$count.dart'; | 216 cachedFileName = '$cachedFileName.$count.dart'; |
210 } | 217 } |
211 printVerbose('Not using cached version of $cachedFileName'); | 218 printVerbose('Not using cached version of $cachedFileName'); |
212 cache = new io.File(cachedFileName).readAsBytes().then((data) { | 219 cache = new io.File(cachedFileName).readAsBytes().then((data) { |
213 printVerbose( | 220 printVerbose( |
214 'Read file $cachedFileName: ' | 221 'Read file $cachedFileName: ' |
215 '${UTF8.decode(data.sublist(0, 100), allowMalformed: true)}...'); | 222 '${UTF8.decode(data.take(100).toList(), allowMalformed: true)}...'
); |
216 return data; | 223 return data; |
217 }); | 224 }); |
218 count++; | 225 count++; |
219 } else { | 226 } else { |
220 printVerbose('Using cached version of $cachedFileName'); | 227 printVerbose('Using cached version of $cachedFileName'); |
221 } | 228 } |
222 return cache; | 229 return cache; |
223 } else { | 230 } else { |
224 printVerbose('Using original provider for $uri'); | 231 printVerbose('Using original provider for $uri'); |
225 return inputProvider(uri); | 232 return inputProvider(uri); |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
379 '--verbose', | 386 '--verbose', |
380 '--categories=Client,Server', | 387 '--categories=Client,Server', |
381 '--incremental-support', | 388 '--incremental-support', |
382 '--disable-type-inference', | 389 '--disable-type-inference', |
383 ]; | 390 ]; |
384 | 391 |
385 if (!isCompiler) { | 392 if (!isCompiler) { |
386 options.add('--analyze-only'); | 393 options.add('--analyze-only'); |
387 } | 394 } |
388 | 395 |
| 396 if (enableMinification) { |
| 397 options.add('--minify'); |
| 398 } |
| 399 |
389 LibraryUpdater updater = | 400 LibraryUpdater updater = |
390 new LibraryUpdater( | 401 new LibraryUpdater( |
391 cachedCompiler, inputProvider, script, printWallClock, printVerbose); | 402 cachedCompiler, inputProvider, script, printWallClock, printVerbose); |
392 Future<bool> reuseLibrary(LibraryElement library) { | 403 Future<bool> reuseLibrary(LibraryElement library) { |
393 return poiTask.measure(() => updater.reuseLibrary(library)); | 404 return poiTask.measure(() => updater.reuseLibrary(library)); |
394 } | 405 } |
395 | 406 |
396 return reuseCompiler( | 407 return reuseCompiler( |
397 diagnosticHandler: handler, | 408 diagnosticHandler: handler, |
398 inputProvider: inputProvider, | 409 inputProvider: inputProvider, |
(...skipping 24 matching lines...) Expand all Loading... |
423 | 434 |
424 if (!isFullCompile) { | 435 if (!isFullCompile) { |
425 printFormattedTime( | 436 printFormattedTime( |
426 'Analyzing changes and updating elements took', sw.elapsedMicroseconds); | 437 'Analyzing changes and updating elements took', sw.elapsedMicroseconds); |
427 } | 438 } |
428 sw.reset(); | 439 sw.reset(); |
429 | 440 |
430 Future<bool> compilation; | 441 Future<bool> compilation; |
431 | 442 |
432 if (updater.hasPendingUpdates) { | 443 if (updater.hasPendingUpdates) { |
433 List<Element> updatedElements = updater.applyUpdates(); | |
434 compilation = new Future(() { | 444 compilation = new Future(() { |
435 cachedCompiler.progress.reset(); | 445 var node = js.statement( |
436 for (Element element in updatedElements) { | 446 r'var $dart_patch = #', js.escapedString(updater.computeUpdateJs())); |
437 cachedCompiler.enqueuer.resolution.addToWorkList(element); | 447 print(updater.prettyPrintJs(node)); |
438 } | |
439 cachedCompiler.processQueue(cachedCompiler.enqueuer.resolution, null); | |
440 | |
441 cachedCompiler.phase = Compiler.PHASE_DONE_RESOLVING; | |
442 | |
443 for (Element element in updatedElements) { | |
444 cachedCompiler.enqueuer.codegen.addToWorkList(element); | |
445 } | |
446 cachedCompiler.processQueue(cachedCompiler.enqueuer.codegen, null); | |
447 | |
448 for (Element element in updatedElements) { | |
449 var node = cachedCompiler.enqueuer.codegen.generatedCode[element]; | |
450 print(prettyPrint(node, cachedCompiler).getText()); | |
451 } | |
452 | 448 |
453 return !cachedCompiler.compilationFailed; | 449 return !cachedCompiler.compilationFailed; |
454 }); | 450 }); |
455 } else { | 451 } else { |
456 compilation = cachedCompiler.run(updater.uri); | 452 compilation = cachedCompiler.run(updater.uri); |
457 } | 453 } |
458 | 454 |
459 return compilation.then((success) { | 455 return compilation.then((success) { |
460 printVerbose('Compiler queue processed in ${sw.elapsedMicroseconds}us'); | 456 printVerbose('Compiler queue processed in ${sw.elapsedMicroseconds}us'); |
461 if (isVerbose) { | 457 if (isVerbose) { |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
787 | 783 |
788 modelx.ImportScope importScope(modelx.LibraryElementX element) { | 784 modelx.ImportScope importScope(modelx.LibraryElementX element) { |
789 return element.importScope; | 785 return element.importScope; |
790 } | 786 } |
791 | 787 |
792 class PoiTask extends CompilerTask { | 788 class PoiTask extends CompilerTask { |
793 PoiTask(Compiler compiler) : super(compiler); | 789 PoiTask(Compiler compiler) : super(compiler); |
794 | 790 |
795 String get name => 'POI'; | 791 String get name => 'POI'; |
796 } | 792 } |
OLD | NEW |