OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 dart2js.compiler_base; | 5 library dart2js.compiler_base; |
6 | 6 |
7 import 'dart:async' show | 7 import 'dart:async' show |
8 EventSink, | 8 EventSink, |
9 Future; | 9 Future; |
10 | 10 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 CoreTypes; | 43 CoreTypes; |
44 import 'dart_backend/dart_backend.dart' as dart_backend; | 44 import 'dart_backend/dart_backend.dart' as dart_backend; |
45 import 'dart_types.dart' show | 45 import 'dart_types.dart' show |
46 DartType, | 46 DartType, |
47 DynamicType, | 47 DynamicType, |
48 InterfaceType, | 48 InterfaceType, |
49 Types; | 49 Types; |
50 import 'deferred_load.dart' show DeferredLoadTask, OutputUnit; | 50 import 'deferred_load.dart' show DeferredLoadTask, OutputUnit; |
51 import 'diagnostics/code_location.dart'; | 51 import 'diagnostics/code_location.dart'; |
52 import 'diagnostics/diagnostic_listener.dart' show | 52 import 'diagnostics/diagnostic_listener.dart' show |
53 DiagnosticOptions; | 53 DiagnosticReporter; |
54 import 'diagnostics/invariant.dart' show | 54 import 'diagnostics/invariant.dart' show |
55 REPORT_EXCESS_RESOLUTION; | 55 REPORT_EXCESS_RESOLUTION; |
56 import 'diagnostics/messages.dart' show | 56 import 'diagnostics/messages.dart' show |
57 Message, | 57 Message, |
58 MessageTemplate; | 58 MessageTemplate; |
59 import 'dump_info.dart' show | 59 import 'dump_info.dart' show |
60 DumpInfoTask; | 60 DumpInfoTask; |
61 import 'elements/elements.dart'; | 61 import 'elements/elements.dart'; |
62 import 'elements/modelx.dart' show | 62 import 'elements/modelx.dart' show |
63 ErroneousElementX, | 63 ErroneousElementX, |
(...skipping 24 matching lines...) Expand all Loading... |
88 LibraryLoaderListener, | 88 LibraryLoaderListener, |
89 ResolvedUriTranslator, | 89 ResolvedUriTranslator, |
90 ScriptLoader; | 90 ScriptLoader; |
91 import 'mirrors_used.dart' show | 91 import 'mirrors_used.dart' show |
92 MirrorUsageAnalyzerTask; | 92 MirrorUsageAnalyzerTask; |
93 import 'common/names.dart' show | 93 import 'common/names.dart' show |
94 Selectors; | 94 Selectors; |
95 import 'null_compiler_output.dart' show | 95 import 'null_compiler_output.dart' show |
96 NullCompilerOutput, | 96 NullCompilerOutput, |
97 NullSink; | 97 NullSink; |
| 98 import 'options.dart' show |
| 99 CompilerOptions, |
| 100 DiagnosticOptions, |
| 101 ParserOptions; |
98 import 'parser/diet_parser_task.dart' show | 102 import 'parser/diet_parser_task.dart' show |
99 DietParserTask; | 103 DietParserTask; |
100 import 'parser/element_listener.dart' show | 104 import 'parser/element_listener.dart' show |
101 ScannerOptions; | 105 ScannerOptions; |
102 import 'parser/parser_task.dart' show | 106 import 'parser/parser_task.dart' show |
103 ParserTask; | 107 ParserTask; |
104 import 'patch_parser.dart' show | 108 import 'patch_parser.dart' show |
105 PatchParserTask; | 109 PatchParserTask; |
106 import 'resolution/registry.dart' show | 110 import 'resolution/registry.dart' show |
107 ResolutionRegistry; | 111 ResolutionRegistry; |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 * Dependencies that are only included due to mirrors. | 188 * Dependencies that are only included due to mirrors. |
185 * | 189 * |
186 * We should get rid of this and ensure that all dependencies are | 190 * We should get rid of this and ensure that all dependencies are |
187 * associated with a particular element. | 191 * associated with a particular element. |
188 */ | 192 */ |
189 // TODO(johnniwinther): This should not be a [ResolutionRegistry]. | 193 // TODO(johnniwinther): This should not be a [ResolutionRegistry]. |
190 final Registry mirrorDependencies = | 194 final Registry mirrorDependencies = |
191 new ResolutionRegistry(null, new TreeElementMapping(null)); | 195 new ResolutionRegistry(null, new TreeElementMapping(null)); |
192 | 196 |
193 /// Options provided from command-line arguments. | 197 /// Options provided from command-line arguments. |
194 final api.CompilerOptions options; | 198 final CompilerOptions options; |
195 | 199 |
196 /** | 200 /** |
197 * If true, stop compilation after type inference is complete. Used for | 201 * If true, stop compilation after type inference is complete. Used for |
198 * debugging and testing purposes only. | 202 * debugging and testing purposes only. |
199 */ | 203 */ |
200 bool stopAfterTypeInference = false; | 204 bool stopAfterTypeInference = false; |
201 | 205 |
202 /// Output provider from user of Compiler API. | 206 /// Output provider from user of Compiler API. |
203 api.CompilerOutput userOutputProvider; | 207 api.CompilerOutput userOutputProvider; |
204 | 208 |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
349 | 353 |
350 bool get compilationFailed => compilationFailedInternal; | 354 bool get compilationFailed => compilationFailedInternal; |
351 | 355 |
352 void set compilationFailed(bool value) { | 356 void set compilationFailed(bool value) { |
353 if (value) { | 357 if (value) { |
354 elementsWithCompileTimeErrors.add(currentElement); | 358 elementsWithCompileTimeErrors.add(currentElement); |
355 } | 359 } |
356 compilationFailedInternal = value; | 360 compilationFailedInternal = value; |
357 } | 361 } |
358 | 362 |
359 Compiler({api.CompilerOptions options, | 363 Compiler({CompilerOptions options, |
360 api.CompilerOutput outputProvider, | 364 api.CompilerOutput outputProvider, |
361 this.environment: const _EmptyEnvironment()}) | 365 this.environment: const _EmptyEnvironment()}) |
362 : this.options = options, | 366 : this.options = options, |
363 this.cacheStrategy = new CacheStrategy(options.hasIncrementalSupport), | 367 this.cacheStrategy = new CacheStrategy(options.hasIncrementalSupport), |
364 this.userOutputProvider = outputProvider == null | 368 this.userOutputProvider = outputProvider == null |
365 ? const NullCompilerOutput() : outputProvider { | 369 ? const NullCompilerOutput() : outputProvider { |
366 | |
367 world = new World(this); | 370 world = new World(this); |
368 // TODO(johnniwinther): Initialize core types in [initializeCoreClasses] and | 371 // TODO(johnniwinther): Initialize core types in [initializeCoreClasses] and |
369 // make its field final. | 372 // make its field final. |
370 _reporter = new _CompilerDiagnosticReporter( | 373 _reporter = new _CompilerDiagnosticReporter(this, options); |
371 this, options.diagnosticOptions); | |
372 _parsing = new _CompilerParsing(this); | 374 _parsing = new _CompilerParsing(this); |
373 _resolution = new _CompilerResolution(this); | 375 _resolution = new _CompilerResolution(this); |
374 _coreTypes = new _CompilerCoreTypes(_resolution); | 376 _coreTypes = new _CompilerCoreTypes(_resolution); |
375 types = new Types(_resolution); | 377 types = new Types(_resolution); |
376 tracer = new Tracer(this, this.outputProvider); | 378 tracer = new Tracer(this, this.outputProvider); |
377 | 379 |
378 if (options.verbose) { | 380 if (options.verbose) { |
379 progress = new Stopwatch()..start(); | 381 progress = new Stopwatch()..start(); |
380 } | 382 } |
381 | 383 |
(...skipping 10 matching lines...) Expand all Loading... |
392 backend = jsBackend; | 394 backend = jsBackend; |
393 } else { | 395 } else { |
394 backend = new dart_backend.DartBackend(this, options.strips, | 396 backend = new dart_backend.DartBackend(this, options.strips, |
395 multiFile: options.dart2dartMultiFile); | 397 multiFile: options.dart2dartMultiFile); |
396 if (options.dumpInfo) { | 398 if (options.dumpInfo) { |
397 throw new ArgumentError('--dump-info is not supported for dart2dart.'); | 399 throw new ArgumentError('--dump-info is not supported for dart2dart.'); |
398 } | 400 } |
399 } | 401 } |
400 | 402 |
401 tasks = [ | 403 tasks = [ |
402 dietParser = new DietParserTask( | 404 dietParser = new DietParserTask(this, parsing.parserOptions), |
403 this, enableConditionalDirectives: options.enableConditionalDirectives
), | |
404 scanner = createScannerTask(), | 405 scanner = createScannerTask(), |
405 serialization = new SerializationTask(this), | 406 serialization = new SerializationTask(this), |
406 libraryLoader = new LibraryLoaderTask(this, | 407 libraryLoader = new LibraryLoaderTask(this, |
407 new _ResolvedUriTranslator(this), | 408 new _ResolvedUriTranslator(this), |
408 new _ScriptLoader(this), | 409 new _ScriptLoader(this), |
409 new _ElementScanner(scanner), | 410 new _ElementScanner(scanner), |
410 this.serialization, | 411 this.serialization, |
411 this, | 412 this, |
412 environment), | 413 environment), |
413 parser = new ParserTask(this, | 414 parser = new ParserTask(this, parsing.parserOptions), |
414 enableConditionalDirectives: options.enableConditionalDirectives), | 415 patchParser = new PatchParserTask(this, parsing.parserOptions), |
415 patchParser = new PatchParserTask( | |
416 this, enableConditionalDirectives: options.enableConditionalDirectives
), | |
417 resolver = createResolverTask(), | 416 resolver = createResolverTask(), |
418 closureToClassMapper = new closureMapping.ClosureTask(this), | 417 closureToClassMapper = new closureMapping.ClosureTask(this), |
419 checker = new TypeCheckerTask(this), | 418 checker = new TypeCheckerTask(this), |
420 typesTask = new ti.TypesTask(this), | 419 typesTask = new ti.TypesTask(this), |
421 constants = backend.constantCompilerTask, | 420 constants = backend.constantCompilerTask, |
422 deferredLoadTask = new DeferredLoadTask(this), | 421 deferredLoadTask = new DeferredLoadTask(this), |
423 mirrorUsageAnalyzerTask = new MirrorUsageAnalyzerTask(this), | 422 mirrorUsageAnalyzerTask = new MirrorUsageAnalyzerTask(this), |
424 enqueuer = new EnqueueTask(this), | 423 enqueuer = new EnqueueTask(this), |
425 dumpInfoTask = new DumpInfoTask(this), | 424 dumpInfoTask = new DumpInfoTask(this), |
426 reuseLibraryTask = new GenericTask('Reuse library', this), | 425 reuseLibraryTask = new GenericTask('Reuse library', this), |
(...skipping 1669 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2096 | 2095 |
2097 @override | 2096 @override |
2098 void parsePatchClass(ClassElement cls) { | 2097 void parsePatchClass(ClassElement cls) { |
2099 compiler.patchParser.measure(() { | 2098 compiler.patchParser.measure(() { |
2100 if (cls.isPatch) { | 2099 if (cls.isPatch) { |
2101 compiler.patchParser.parsePatchClassNode(cls); | 2100 compiler.patchParser.parsePatchClassNode(cls); |
2102 } | 2101 } |
2103 }); | 2102 }); |
2104 } | 2103 } |
2105 | 2104 |
2106 ScannerOptions getScannerOptionsFor(Element element) { | 2105 ScannerOptions getScannerOptionsFor(Element element) => |
2107 return new ScannerOptions( | 2106 new ScannerOptions.from(compiler, element.library); |
2108 canUseNative: compiler.backend.canLibraryUseNative(element.library)); | 2107 |
2109 } | 2108 ParserOptions get parserOptions => compiler.options; |
2110 } | 2109 } |
2111 | 2110 |
2112 class GlobalDependencyRegistry extends EagerRegistry { | 2111 class GlobalDependencyRegistry extends EagerRegistry { |
2113 final Compiler compiler; | 2112 final Compiler compiler; |
2114 Setlet<Element> _otherDependencies; | 2113 Setlet<Element> _otherDependencies; |
2115 | 2114 |
2116 GlobalDependencyRegistry(this.compiler) : super('GlobalDependencies', null); | 2115 GlobalDependencyRegistry(this.compiler) : super('GlobalDependencies', null); |
2117 | 2116 |
2118 // TODO(johnniwinther): Rename world/universe/enqueuer through out the | 2117 // TODO(johnniwinther): Rename world/universe/enqueuer through out the |
2119 // compiler. | 2118 // compiler. |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2157 _ElementScanner(this.scanner); | 2156 _ElementScanner(this.scanner); |
2158 void scanLibrary(LibraryElement library) => scanner.scanLibrary(library); | 2157 void scanLibrary(LibraryElement library) => scanner.scanLibrary(library); |
2159 void scanUnit(CompilationUnitElement unit) => scanner.scan(unit); | 2158 void scanUnit(CompilationUnitElement unit) => scanner.scan(unit); |
2160 } | 2159 } |
2161 | 2160 |
2162 class _EmptyEnvironment implements Environment { | 2161 class _EmptyEnvironment implements Environment { |
2163 const _EmptyEnvironment(); | 2162 const _EmptyEnvironment(); |
2164 | 2163 |
2165 String valueOf(String key) => null; | 2164 String valueOf(String key) => null; |
2166 } | 2165 } |
OLD | NEW |