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

Side by Side Diff: pkg/front_end/lib/src/incremental_kernel_generator_impl.dart

Issue 2919003003: Reapply "Use backend targets to run Kernel transformations in Fasta" (Closed)
Patch Set: Follow dartanalyzer suggestions Created 3 years, 6 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
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 import 'dart:async'; 5 import 'dart:async';
6 import 'dart:io'; 6 import 'dart:io';
7 7
8 import 'package:front_end/file_system.dart'; 8 import 'package:front_end/file_system.dart';
9 import 'package:front_end/incremental_kernel_generator.dart'; 9 import 'package:front_end/incremental_kernel_generator.dart';
10 import 'package:front_end/src/base/api_signature.dart'; 10 import 'package:front_end/src/base/api_signature.dart';
11 import 'package:front_end/src/base/performace_logger.dart'; 11 import 'package:front_end/src/base/performace_logger.dart';
12 import 'package:front_end/src/base/processed_options.dart'; 12 import 'package:front_end/src/base/processed_options.dart';
13 import 'package:front_end/src/fasta/dill/dill_library_builder.dart'; 13 import 'package:front_end/src/fasta/dill/dill_library_builder.dart';
14 import 'package:front_end/src/fasta/dill/dill_target.dart'; 14 import 'package:front_end/src/fasta/dill/dill_target.dart';
15 import 'package:front_end/src/fasta/kernel/kernel_target.dart'; 15 import 'package:front_end/src/fasta/kernel/kernel_target.dart';
16 import 'package:front_end/src/fasta/ticker.dart'; 16 import 'package:front_end/src/fasta/ticker.dart';
17 import 'package:front_end/src/fasta/translate_uri.dart'; 17 import 'package:front_end/src/fasta/translate_uri.dart';
18 import 'package:front_end/src/incremental/byte_store.dart'; 18 import 'package:front_end/src/incremental/byte_store.dart';
19 import 'package:front_end/src/incremental/file_state.dart'; 19 import 'package:front_end/src/incremental/file_state.dart';
20 import 'package:kernel/binary/ast_from_binary.dart'; 20 import 'package:kernel/binary/ast_from_binary.dart';
21 import 'package:kernel/binary/limited_ast_to_binary.dart'; 21 import 'package:kernel/binary/limited_ast_to_binary.dart';
22 import 'package:kernel/kernel.dart' hide Source; 22 import 'package:kernel/kernel.dart' hide Source;
23 import 'package:kernel/target/targets.dart' show TargetFlags;
23 24
24 dynamic unimplemented() { 25 dynamic unimplemented() {
25 // TODO(paulberry): get rid of this. 26 // TODO(paulberry): get rid of this.
26 throw new UnimplementedError(); 27 throw new UnimplementedError();
27 } 28 }
28 29
29 class ByteSink implements Sink<List<int>> { 30 class ByteSink implements Sink<List<int>> {
30 final BytesBuilder builder = new BytesBuilder(); 31 final BytesBuilder builder = new BytesBuilder();
31 32
32 void add(List<int> data) { 33 void add(List<int> data) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 // Ensure that the graph starting at the entry point is ready. 94 // Ensure that the graph starting at the entry point is ready.
94 FileState entryLibrary = await _fsState.getFile(_entryPoint); 95 FileState entryLibrary = await _fsState.getFile(_entryPoint);
95 96
96 List<LibraryCycle> cycles = _logger.run('Compute library cycles', () { 97 List<LibraryCycle> cycles = _logger.run('Compute library cycles', () {
97 List<LibraryCycle> cycles = entryLibrary.topologicalOrder; 98 List<LibraryCycle> cycles = entryLibrary.topologicalOrder;
98 _logger.writeln('Computed ${cycles.length} cycles.'); 99 _logger.writeln('Computed ${cycles.length} cycles.');
99 return cycles; 100 return cycles;
100 }); 101 });
101 102
102 CanonicalName nameRoot = new CanonicalName.root(); 103 CanonicalName nameRoot = new CanonicalName.root();
103 DillTarget dillTarget = 104 DillTarget dillTarget = new DillTarget(
104 new DillTarget(new Ticker(isVerbose: false), _uriTranslator, "vm"); 105 new Ticker(isVerbose: false), _uriTranslator, "vm_fasta",
106 flags: new TargetFlags(strongMode: _options.strongMode));
105 107
106 List<_LibraryCycleResult> results = []; 108 List<_LibraryCycleResult> results = [];
107 await _logger.runAsync('Compute results for cycles', () async { 109 await _logger.runAsync('Compute results for cycles', () async {
108 for (LibraryCycle cycle in cycles) { 110 for (LibraryCycle cycle in cycles) {
109 _LibraryCycleResult result = 111 _LibraryCycleResult result =
110 await _compileCycle(nameRoot, dillTarget, cycle); 112 await _compileCycle(nameRoot, dillTarget, cycle);
111 results.add(result); 113 results.add(result);
112 } 114 }
113 }); 115 });
114 116
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 var reader = new BinaryBuilder(bytes); 199 var reader = new BinaryBuilder(bytes);
198 reader.readProgram(program); 200 reader.readProgram(program);
199 201
200 await appendNewDillLibraries(program); 202 await appendNewDillLibraries(program);
201 203
202 return new _LibraryCycleResult(cycle, signature, program.libraries); 204 return new _LibraryCycleResult(cycle, signature, program.libraries);
203 }); 205 });
204 } 206 }
205 207
206 // Create KernelTarget and configure it for compiling the cycle URIs. 208 // Create KernelTarget and configure it for compiling the cycle URIs.
207 KernelTarget kernelTarget = new KernelTarget(_fsState.fileSystemView, 209 KernelTarget kernelTarget =
208 dillTarget, _uriTranslator, _options.strongMode); 210 new KernelTarget(_fsState.fileSystemView, dillTarget, _uriTranslator);
209 for (FileState library in cycle.libraries) { 211 for (FileState library in cycle.libraries) {
210 kernelTarget.read(library.uri); 212 kernelTarget.read(library.uri);
211 } 213 }
212 214
213 // Compile the cycle libraries into a new full program. 215 // Compile the cycle libraries into a new full program.
214 Program program = await _logger 216 Program program = await _logger
215 .runAsync('Compile ${cycle.libraries.length} libraries', () async { 217 .runAsync('Compile ${cycle.libraries.length} libraries', () async {
216 await kernelTarget.buildOutlines(nameRoot: nameRoot); 218 await kernelTarget.buildOutlines(nameRoot: nameRoot);
217 return await kernelTarget.buildProgram(); 219 return await kernelTarget.buildProgram();
218 }); 220 });
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 /// TODO(scheglov) Use API signatures. 308 /// TODO(scheglov) Use API signatures.
307 /// TODO(scheglov) Or use tree shaking and compute signatures of outlines. 309 /// TODO(scheglov) Or use tree shaking and compute signatures of outlines.
308 final String signature; 310 final String signature;
309 311
310 /// Kernel libraries for libraries in the [cycle]. Bodies of dependencies 312 /// Kernel libraries for libraries in the [cycle]. Bodies of dependencies
311 /// are not included, but but references to those dependencies are included. 313 /// are not included, but but references to those dependencies are included.
312 final List<Library> kernelLibraries; 314 final List<Library> kernelLibraries;
313 315
314 _LibraryCycleResult(this.cycle, this.signature, this.kernelLibraries); 316 _LibraryCycleResult(this.cycle, this.signature, this.kernelLibraries);
315 } 317 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698