OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 part of dart2js_incremental; | 5 part of dart2js_incremental; |
6 | 6 |
7 /// Do not call this method directly. It will be made private. | 7 /// Do not call this method directly. It will be made private. |
8 // TODO(ahe): Make this method private. | 8 // TODO(ahe): Make this method private. |
9 Future<CompilerImpl> reuseCompiler( | 9 Future<CompilerImpl> reuseCompiler( |
10 {CompilerDiagnostics diagnosticHandler, | 10 {CompilerDiagnostics diagnosticHandler, |
(...skipping 17 matching lines...) Expand all Loading... |
28 if (diagnosticHandler == null) { | 28 if (diagnosticHandler == null) { |
29 throw 'Missing diagnosticHandler'; | 29 throw 'Missing diagnosticHandler'; |
30 } | 30 } |
31 if (outputProvider == null) { | 31 if (outputProvider == null) { |
32 outputProvider = const NullCompilerOutput(); | 32 outputProvider = const NullCompilerOutput(); |
33 } | 33 } |
34 if (environment == null) { | 34 if (environment == null) { |
35 environment = {}; | 35 environment = {}; |
36 } | 36 } |
37 CompilerImpl compiler = cachedCompiler; | 37 CompilerImpl compiler = cachedCompiler; |
| 38 JavaScriptBackend backend = compiler?.backend; |
38 if (compiler == null || | 39 if (compiler == null || |
39 compiler.libraryRoot != libraryRoot || | 40 compiler.libraryRoot != libraryRoot || |
40 !compiler.options.hasIncrementalSupport || | 41 !compiler.options.hasIncrementalSupport || |
41 compiler.hasCrashed || | 42 compiler.hasCrashed || |
42 compiler.enqueuer.resolution.hasEnqueuedReflectiveElements || | 43 backend.mirrorsAnalysis.resolutionHandler.hasEnqueuedReflectiveElements || |
43 compiler.deferredLoadTask.isProgramSplit) { | 44 compiler.deferredLoadTask.isProgramSplit) { |
44 if (compiler != null && compiler.options.hasIncrementalSupport) { | 45 if (compiler != null && compiler.options.hasIncrementalSupport) { |
45 print('***FLUSH***'); | 46 print('***FLUSH***'); |
46 if (compiler.hasCrashed) { | 47 if (compiler.hasCrashed) { |
47 print('Unable to reuse compiler due to crash.'); | 48 print('Unable to reuse compiler due to crash.'); |
48 } else if (compiler.enqueuer.resolution.hasEnqueuedReflectiveElements) { | 49 } else if (backend.mirrorsAnalysis.resolutionHandler |
| 50 .hasEnqueuedReflectiveElements) { |
49 print('Unable to reuse compiler due to dart:mirrors.'); | 51 print('Unable to reuse compiler due to dart:mirrors.'); |
50 } else if (compiler.deferredLoadTask.isProgramSplit) { | 52 } else if (compiler.deferredLoadTask.isProgramSplit) { |
51 print('Unable to reuse compiler due to deferred loading.'); | 53 print('Unable to reuse compiler due to deferred loading.'); |
52 } else { | 54 } else { |
53 print('Unable to reuse compiler.'); | 55 print('Unable to reuse compiler.'); |
54 } | 56 } |
55 } | 57 } |
56 oldTag.makeCurrent(); | 58 oldTag.makeCurrent(); |
57 compiler = new CompilerImpl( | 59 compiler = new CompilerImpl( |
58 inputProvider, | 60 inputProvider, |
59 outputProvider, | 61 outputProvider, |
60 diagnosticHandler, | 62 diagnosticHandler, |
61 new CompilerOptions.parse( | 63 new CompilerOptions.parse( |
62 libraryRoot: libraryRoot, | 64 libraryRoot: libraryRoot, |
63 packageRoot: packageRoot, | 65 packageRoot: packageRoot, |
64 packageConfig: packageConfig, | 66 packageConfig: packageConfig, |
65 options: options, | 67 options: options, |
66 environment: environment)); | 68 environment: environment)); |
67 JavaScriptBackend backend = compiler.backend; | 69 backend = compiler.backend; |
68 | 70 |
69 full.Emitter emitter = backend.emitter.emitter; | 71 full.Emitter emitter = backend.emitter.emitter; |
70 | 72 |
71 // Much like a scout, an incremental compiler is always prepared. For | 73 // Much like a scout, an incremental compiler is always prepared. For |
72 // mixins, classes, and lazy statics, at least. | 74 // mixins, classes, and lazy statics, at least. |
73 emitter | 75 emitter |
74 ..needsClassSupport = true | 76 ..needsClassSupport = true |
75 ..needsMixinSupport = true | 77 ..needsMixinSupport = true |
76 ..needsLazyInitializer = true | 78 ..needsLazyInitializer = true |
77 ..needsStructuredMemberInfo = true; | 79 ..needsStructuredMemberInfo = true; |
78 | 80 |
79 Uri core = Uri.parse("dart:core"); | 81 Uri core = Uri.parse("dart:core"); |
80 | 82 |
81 return compiler.setupSdk().then((_) { | 83 return compiler.setupSdk().then((_) { |
82 return compiler.libraryLoader.loadLibrary(core).then((_) { | 84 return compiler.libraryLoader.loadLibrary(core).then((_) { |
83 // Likewise, always be prepared for runtimeType support. | 85 // Likewise, always be prepared for runtimeType support. |
84 // TODO(johnniwinther): Add global switch to force RTI. | 86 // TODO(johnniwinther): Add global switch to force RTI. |
85 compiler.enabledRuntimeType = true; | 87 compiler.enabledRuntimeType = true; |
86 backend.registerRuntimeType( | 88 backend.registerRuntimeType(compiler.enqueuer.resolution); |
87 compiler.enqueuer.resolution, compiler.globalDependencies); | |
88 return compiler; | 89 return compiler; |
89 }); | 90 }); |
90 }); | 91 }); |
91 } else { | 92 } else { |
92 compiler.tasks.forEach((t) => t.clearMeasurements()); | 93 compiler.tasks.forEach((t) => t.clearMeasurements()); |
93 compiler | 94 compiler |
94 ..userOutputProvider = outputProvider | 95 ..userOutputProvider = outputProvider |
95 ..provider = inputProvider | 96 ..provider = inputProvider |
96 ..handler = diagnosticHandler | 97 ..handler = diagnosticHandler |
97 ..enqueuer.resolution.queueIsClosed = false | 98 ..enqueuer.resolution.queueIsClosed = false |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 final Map<String, String> output = new Map<String, String>(); | 190 final Map<String, String> output = new Map<String, String>(); |
190 | 191 |
191 EventSink<String> createEventSink(String name, String extension) { | 192 EventSink<String> createEventSink(String name, String extension) { |
192 return new StringEventSink((String data) { | 193 return new StringEventSink((String data) { |
193 output['$name.$extension'] = data; | 194 output['$name.$extension'] = data; |
194 }); | 195 }); |
195 } | 196 } |
196 | 197 |
197 String operator[] (String key) => output[key]; | 198 String operator[] (String key) => output[key]; |
198 } | 199 } |
OLD | NEW |