Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(75)

Side by Side Diff: pkg/compiler/lib/src/compiler.dart

Issue 1892183002: Refactor Parsing to remove compiler dependency (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pkg/compiler/lib/src/common/resolution.dart ('k') | pkg/compiler/lib/src/elements/modelx.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 EventSink, Future; 7 import 'dart:async' show EventSink, Future;
8 8
9 import '../compiler_new.dart' as api; 9 import '../compiler_new.dart' as api;
10 import 'cache_strategy.dart' show CacheStrategy; 10 import 'cache_strategy.dart' show CacheStrategy;
11 import 'closure.dart' as closureMapping show ClosureTask; 11 import 'closure.dart' as closureMapping show ClosureTask;
12 import 'common/backend_api.dart' show Backend; 12 import 'common/backend_api.dart' show Backend;
13 import 'common/codegen.dart' show CodegenWorkItem; 13 import 'common/codegen.dart' show CodegenWorkItem;
14 import 'common/names.dart' show Selectors; 14 import 'common/names.dart' show Selectors;
15 import 'common/names.dart' show Identifiers, Uris; 15 import 'common/names.dart' show Identifiers, Uris;
16 import 'common/registry.dart' show EagerRegistry, Registry; 16 import 'common/registry.dart' show EagerRegistry, Registry;
17 import 'common/resolution.dart' 17 import 'common/resolution.dart'
18 show Parsing, Resolution, ResolutionWorkItem, ResolutionImpact; 18 show ParsingContext, Resolution, ResolutionWorkItem, ResolutionImpact;
19 import 'common/tasks.dart' show CompilerTask, GenericTask; 19 import 'common/tasks.dart' show CompilerTask, GenericTask;
20 import 'common/work.dart' show ItemCompilationContext, WorkItem; 20 import 'common/work.dart' show ItemCompilationContext, WorkItem;
21 import 'common.dart'; 21 import 'common.dart';
22 import 'compile_time_constants.dart'; 22 import 'compile_time_constants.dart';
23 import 'constants/values.dart'; 23 import 'constants/values.dart';
24 import 'core_types.dart' show CoreClasses, CoreTypes; 24 import 'core_types.dart' show CoreClasses, CoreTypes;
25 import 'dart_backend/dart_backend.dart' as dart_backend; 25 import 'dart_backend/dart_backend.dart' as dart_backend;
26 import 'dart_types.dart' show DartType, DynamicType, InterfaceType, Types; 26 import 'dart_types.dart' show DartType, DynamicType, InterfaceType, Types;
27 import 'deferred_load.dart' show DeferredLoadTask; 27 import 'deferred_load.dart' show DeferredLoadTask;
28 import 'diagnostics/code_location.dart'; 28 import 'diagnostics/code_location.dart';
(...skipping 18 matching lines...) Expand all
47 import 'library_loader.dart' 47 import 'library_loader.dart'
48 show 48 show
49 ElementScanner, 49 ElementScanner,
50 LibraryLoader, 50 LibraryLoader,
51 LibraryLoaderTask, 51 LibraryLoaderTask,
52 LoadedLibraries, 52 LoadedLibraries,
53 LibraryLoaderListener, 53 LibraryLoaderListener,
54 ScriptLoader; 54 ScriptLoader;
55 import 'mirrors_used.dart' show MirrorUsageAnalyzerTask; 55 import 'mirrors_used.dart' show MirrorUsageAnalyzerTask;
56 import 'null_compiler_output.dart' show NullCompilerOutput, NullSink; 56 import 'null_compiler_output.dart' show NullCompilerOutput, NullSink;
57 import 'options.dart' show CompilerOptions, DiagnosticOptions, ParserOptions; 57 import 'options.dart' show CompilerOptions, DiagnosticOptions;
58 import 'parser/diet_parser_task.dart' show DietParserTask; 58 import 'parser/diet_parser_task.dart' show DietParserTask;
59 import 'parser/element_listener.dart' show ScannerOptions;
60 import 'parser/parser_task.dart' show ParserTask; 59 import 'parser/parser_task.dart' show ParserTask;
61 import 'patch_parser.dart' show PatchParserTask; 60 import 'patch_parser.dart' show PatchParserTask;
62 import 'resolution/registry.dart' show ResolutionRegistry; 61 import 'resolution/registry.dart' show ResolutionRegistry;
63 import 'resolution/resolution.dart' show ResolverTask; 62 import 'resolution/resolution.dart' show ResolverTask;
64 import 'resolution/tree_elements.dart' show TreeElementMapping; 63 import 'resolution/tree_elements.dart' show TreeElementMapping;
65 import 'resolved_uri_translator.dart'; 64 import 'resolved_uri_translator.dart';
66 import 'scanner/scanner_task.dart' show ScannerTask; 65 import 'scanner/scanner_task.dart' show ScannerTask;
67 import 'script.dart' show Script; 66 import 'script.dart' show Script;
68 import 'serialization/task.dart' show SerializationTask; 67 import 'serialization/task.dart' show SerializationTask;
69 import 'ssa/nodes.dart' show HInstruction; 68 import 'ssa/nodes.dart' show HInstruction;
70 import 'tokens/token.dart' show StringToken, Token, TokenPair; 69 import 'tokens/token.dart' show StringToken, Token, TokenPair;
71 import 'tokens/token_map.dart' show TokenMap; 70 import 'tokens/token_map.dart' show TokenMap;
72 import 'tracer.dart' show Tracer; 71 import 'tracer.dart' show Tracer;
73 import 'tree/tree.dart' show Node, TypeAnnotation; 72 import 'tree/tree.dart' show Node, TypeAnnotation;
74 import 'typechecker.dart' show TypeCheckerTask; 73 import 'typechecker.dart' show TypeCheckerTask;
75 import 'types/types.dart' as ti; 74 import 'types/types.dart' as ti;
76 import 'universe/call_structure.dart' show CallStructure;
77 import 'universe/selector.dart' show Selector; 75 import 'universe/selector.dart' show Selector;
78 import 'universe/universe.dart' show Universe; 76 import 'universe/universe.dart' show Universe;
79 import 'universe/use.dart' show StaticUse; 77 import 'universe/use.dart' show StaticUse;
80 import 'universe/world_impact.dart' show ImpactStrategy, WorldImpact; 78 import 'universe/world_impact.dart' show ImpactStrategy, WorldImpact;
81 import 'util/util.dart' show Link, Setlet; 79 import 'util/util.dart' show Link, Setlet;
82 import 'world.dart' show World; 80 import 'world.dart' show World;
83 81
84 abstract class Compiler implements LibraryLoaderListener { 82 abstract class Compiler implements LibraryLoaderListener {
85 final Stopwatch totalCompileTime = new Stopwatch(); 83 final Stopwatch totalCompileTime = new Stopwatch();
86 final IdGenerator idGenerator = new IdGenerator(); 84 final IdGenerator idGenerator = new IdGenerator();
87 World world; 85 World world;
88 Types types; 86 Types types;
89 _CompilerCoreTypes _coreTypes; 87 _CompilerCoreTypes _coreTypes;
90 _CompilerDiagnosticReporter _reporter; 88 _CompilerDiagnosticReporter _reporter;
91 _CompilerResolution _resolution; 89 _CompilerResolution _resolution;
92 _CompilerParsing _parsing; 90 ParsingContext _parsingContext;
93 91
94 final CacheStrategy cacheStrategy; 92 final CacheStrategy cacheStrategy;
95 93
96 ImpactStrategy impactStrategy = const ImpactStrategy(); 94 ImpactStrategy impactStrategy = const ImpactStrategy();
97 95
98 /** 96 /**
99 * Map from token to the first preceding comment token. 97 * Map from token to the first preceding comment token.
100 */ 98 */
101 final TokenMap commentMap = new TokenMap(); 99 final TokenMap commentMap = new TokenMap();
102 100
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 /// Initialized when dart:mirrors is loaded. 145 /// Initialized when dart:mirrors is loaded.
148 LibraryElement mirrorsLibrary; 146 LibraryElement mirrorsLibrary;
149 147
150 /// Initialized when dart:typed_data is loaded. 148 /// Initialized when dart:typed_data is loaded.
151 LibraryElement typedDataLibrary; 149 LibraryElement typedDataLibrary;
152 150
153 DiagnosticReporter get reporter => _reporter; 151 DiagnosticReporter get reporter => _reporter;
154 CoreClasses get coreClasses => _coreTypes; 152 CoreClasses get coreClasses => _coreTypes;
155 CoreTypes get coreTypes => _coreTypes; 153 CoreTypes get coreTypes => _coreTypes;
156 Resolution get resolution => _resolution; 154 Resolution get resolution => _resolution;
157 Parsing get parsing => _parsing; 155 ParsingContext get parsingContext => _parsingContext;
158 156
159 ClassElement typedDataClass; 157 ClassElement typedDataClass;
160 158
161 /// The constant for the [proxy] variable defined in dart:core. 159 /// The constant for the [proxy] variable defined in dart:core.
162 ConstantValue proxyConstant; 160 ConstantValue proxyConstant;
163 161
164 // TODO(johnniwinther): Move this to the JavaScriptBackend. 162 // TODO(johnniwinther): Move this to the JavaScriptBackend.
165 /// The class for patch annotation defined in dart:_js_helper. 163 /// The class for patch annotation defined in dart:_js_helper.
166 ClassElement patchAnnotationClass; 164 ClassElement patchAnnotationClass;
167 165
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 this.environment: const _EmptyEnvironment()}) 284 this.environment: const _EmptyEnvironment()})
287 : this.options = options, 285 : this.options = options,
288 this.cacheStrategy = new CacheStrategy(options.hasIncrementalSupport), 286 this.cacheStrategy = new CacheStrategy(options.hasIncrementalSupport),
289 this.userOutputProvider = outputProvider == null 287 this.userOutputProvider = outputProvider == null
290 ? const NullCompilerOutput() 288 ? const NullCompilerOutput()
291 : outputProvider { 289 : outputProvider {
292 world = new World(this); 290 world = new World(this);
293 // TODO(johnniwinther): Initialize core types in [initializeCoreClasses] and 291 // TODO(johnniwinther): Initialize core types in [initializeCoreClasses] and
294 // make its field final. 292 // make its field final.
295 _reporter = new _CompilerDiagnosticReporter(this, options); 293 _reporter = new _CompilerDiagnosticReporter(this, options);
296 _parsing = new _CompilerParsing(this);
297 _resolution = new _CompilerResolution(this); 294 _resolution = new _CompilerResolution(this);
298 _coreTypes = new _CompilerCoreTypes(_resolution); 295 _coreTypes = new _CompilerCoreTypes(_resolution);
299 types = new Types(_resolution); 296 types = new Types(_resolution);
300 tracer = new Tracer(this, this.outputProvider); 297 tracer = new Tracer(this, this.outputProvider);
301 298
302 if (options.verbose) { 299 if (options.verbose) {
303 progress = new Stopwatch()..start(); 300 progress = new Stopwatch()..start();
304 } 301 }
305 302
306 // TODO(johnniwinther): Separate the dependency tracking from the enqueuing 303 // TODO(johnniwinther): Separate the dependency tracking from the enqueuing
(...skipping 14 matching lines...) Expand all
321 throw new ArgumentError('--dump-info is not supported for dart2dart.'); 318 throw new ArgumentError('--dump-info is not supported for dart2dart.');
322 } 319 }
323 } 320 }
324 321
325 if (options.dumpInfo && options.useStartupEmitter) { 322 if (options.dumpInfo && options.useStartupEmitter) {
326 throw new ArgumentError( 323 throw new ArgumentError(
327 '--dump-info is not supported with the fast startup emitter'); 324 '--dump-info is not supported with the fast startup emitter');
328 } 325 }
329 326
330 tasks = [ 327 tasks = [
331 dietParser = new DietParserTask( 328 dietParser =
332 this, parsing.parserOptions, idGenerator, backend, reporter), 329 new DietParserTask(this, options, idGenerator, backend, reporter),
333 scanner = createScannerTask(), 330 scanner = createScannerTask(),
334 serialization = new SerializationTask(this), 331 serialization = new SerializationTask(this),
335 libraryLoader = new LibraryLoaderTask( 332 libraryLoader = new LibraryLoaderTask(
336 this, 333 this,
337 this.resolvedUriTranslator, 334 this.resolvedUriTranslator,
338 new _ScriptLoader(this), 335 new _ScriptLoader(this),
339 new _ElementScanner(scanner), 336 new _ElementScanner(scanner),
340 this.serialization, 337 this.serialization,
341 this, 338 this,
342 environment), 339 environment),
343 parser = new ParserTask(this, parsing.parserOptions), 340 parser = new ParserTask(this, options),
344 patchParser = new PatchParserTask(this, parsing.parserOptions), 341 patchParser = new PatchParserTask(this, options),
345 resolver = createResolverTask(), 342 resolver = createResolverTask(),
346 closureToClassMapper = new closureMapping.ClosureTask(this), 343 closureToClassMapper = new closureMapping.ClosureTask(this),
347 checker = new TypeCheckerTask(this), 344 checker = new TypeCheckerTask(this),
348 typesTask = new ti.TypesTask(this), 345 typesTask = new ti.TypesTask(this),
349 constants = backend.constantCompilerTask, 346 constants = backend.constantCompilerTask,
350 deferredLoadTask = new DeferredLoadTask(this), 347 deferredLoadTask = new DeferredLoadTask(this),
351 mirrorUsageAnalyzerTask = new MirrorUsageAnalyzerTask(this), 348 mirrorUsageAnalyzerTask = new MirrorUsageAnalyzerTask(this),
352 enqueuer = new EnqueueTask(this), 349 enqueuer = new EnqueueTask(this),
353 dumpInfoTask = new DumpInfoTask(this), 350 dumpInfoTask = new DumpInfoTask(this),
354 reuseLibraryTask = new GenericTask('Reuse library', this), 351 reuseLibraryTask = new GenericTask('Reuse library', this),
355 ]; 352 ];
356 353
354 _parsingContext =
355 new ParsingContext(reporter, options, parser, patchParser, backend);
356
357 tasks.addAll(backend.tasks); 357 tasks.addAll(backend.tasks);
358 } 358 }
359 359
360 /// Creates the scanner task. 360 /// Creates the scanner task.
361 /// 361 ///
362 /// Override this to mock the scanner for testing. 362 /// Override this to mock the scanner for testing.
363 ScannerTask createScannerTask() => new ScannerTask(this, dietParser, 363 ScannerTask createScannerTask() => new ScannerTask(this, dietParser,
364 preserveComments: options.preserveComments, commentMap: commentMap); 364 preserveComments: options.preserveComments, commentMap: commentMap);
365 365
366 /// Creates the resolver task. 366 /// Creates the resolver task.
(...skipping 1437 matching lines...) Expand 10 before | Expand all | Expand 10 after
1804 <Element, ResolutionImpact>{}; 1804 <Element, ResolutionImpact>{};
1805 final Map<Element, WorldImpact> _worldImpactCache = <Element, WorldImpact>{}; 1805 final Map<Element, WorldImpact> _worldImpactCache = <Element, WorldImpact>{};
1806 bool retainCachesForTesting = false; 1806 bool retainCachesForTesting = false;
1807 1807
1808 _CompilerResolution(this.compiler); 1808 _CompilerResolution(this.compiler);
1809 1809
1810 @override 1810 @override
1811 DiagnosticReporter get reporter => compiler.reporter; 1811 DiagnosticReporter get reporter => compiler.reporter;
1812 1812
1813 @override 1813 @override
1814 Parsing get parsing => compiler.parsing; 1814 ParsingContext get parsingContext => compiler.parsingContext;
1815 1815
1816 @override 1816 @override
1817 CoreTypes get coreTypes => compiler.coreTypes; 1817 CoreTypes get coreTypes => compiler.coreTypes;
1818 1818
1819 @override 1819 @override
1820 void registerClass(ClassElement cls) { 1820 void registerClass(ClassElement cls) {
1821 compiler.world.registerClass(cls); 1821 compiler.world.registerClass(cls);
1822 } 1822 }
1823 1823
1824 @override 1824 @override
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
1956 Element element, ItemCompilationContext compilationContext) { 1956 Element element, ItemCompilationContext compilationContext) {
1957 if (compiler.serialization.isDeserialized(element)) { 1957 if (compiler.serialization.isDeserialized(element)) {
1958 return compiler.serialization 1958 return compiler.serialization
1959 .createResolutionWorkItem(element, compilationContext); 1959 .createResolutionWorkItem(element, compilationContext);
1960 } else { 1960 } else {
1961 return new ResolutionWorkItem(element, compilationContext); 1961 return new ResolutionWorkItem(element, compilationContext);
1962 } 1962 }
1963 } 1963 }
1964 } 1964 }
1965 1965
1966 // TODO(johnniwinther): Move [ParserTask], [PatchParserTask], [DietParserTask]
1967 // and [ScannerTask] here.
1968 class _CompilerParsing implements Parsing {
1969 final Compiler compiler;
1970
1971 _CompilerParsing(this.compiler);
1972
1973 @override
1974 DiagnosticReporter get reporter => compiler.reporter;
1975
1976 @override
1977 measure(f()) => compiler.parser.measure(f);
1978
1979 @override
1980 void parsePatchClass(ClassElement cls) {
1981 compiler.patchParser.measure(() {
1982 if (cls.isPatch) {
1983 compiler.patchParser.parsePatchClassNode(cls);
1984 }
1985 });
1986 }
1987
1988 ScannerOptions getScannerOptionsFor(Element element) => new ScannerOptions(
1989 canUseNative: compiler.backend.canLibraryUseNative(element.library));
1990
1991 ParserOptions get parserOptions => compiler.options;
1992 }
1993
1994 class GlobalDependencyRegistry extends EagerRegistry { 1966 class GlobalDependencyRegistry extends EagerRegistry {
1995 final Compiler compiler; 1967 final Compiler compiler;
1996 Setlet<Element> _otherDependencies; 1968 Setlet<Element> _otherDependencies;
1997 1969
1998 GlobalDependencyRegistry(this.compiler) : super('GlobalDependencies', null); 1970 GlobalDependencyRegistry(this.compiler) : super('GlobalDependencies', null);
1999 1971
2000 // TODO(johnniwinther): Rename world/universe/enqueuer through out the 1972 // TODO(johnniwinther): Rename world/universe/enqueuer through out the
2001 // compiler. 1973 // compiler.
2002 @override 1974 @override
2003 Enqueuer get world => compiler.enqueuer.codegen; 1975 Enqueuer get world => compiler.enqueuer.codegen;
(...skipping 24 matching lines...) Expand all
2028 _ElementScanner(this.scanner); 2000 _ElementScanner(this.scanner);
2029 void scanLibrary(LibraryElement library) => scanner.scanLibrary(library); 2001 void scanLibrary(LibraryElement library) => scanner.scanLibrary(library);
2030 void scanUnit(CompilationUnitElement unit) => scanner.scan(unit); 2002 void scanUnit(CompilationUnitElement unit) => scanner.scan(unit);
2031 } 2003 }
2032 2004
2033 class _EmptyEnvironment implements Environment { 2005 class _EmptyEnvironment implements Environment {
2034 const _EmptyEnvironment(); 2006 const _EmptyEnvironment();
2035 2007
2036 String valueOf(String key) => null; 2008 String valueOf(String key) => null;
2037 } 2009 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/common/resolution.dart ('k') | pkg/compiler/lib/src/elements/modelx.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698