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

Side by Side Diff: pkg/front_end/lib/src/base/processed_options.dart

Issue 2993113003: Revert "Switch FE to use the libraries.json format." (Closed)
Patch Set: Created 3 years, 4 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 6
7 import 'package:front_end/compilation_message.dart'; 7 import 'package:front_end/compilation_message.dart';
8 import 'package:front_end/compiler_options.dart'; 8 import 'package:front_end/compiler_options.dart';
9 import 'package:front_end/file_system.dart'; 9 import 'package:front_end/file_system.dart';
10 import 'package:front_end/src/base/performace_logger.dart'; 10 import 'package:front_end/src/base/performace_logger.dart';
(...skipping 10 matching lines...) Expand all
21 import 'package:kernel/target/targets.dart'; 21 import 'package:kernel/target/targets.dart';
22 import 'package:kernel/target/vm_fasta.dart'; 22 import 'package:kernel/target/vm_fasta.dart';
23 import 'package:package_config/packages.dart' show Packages; 23 import 'package:package_config/packages.dart' show Packages;
24 import 'package:package_config/src/packages_impl.dart' 24 import 'package:package_config/src/packages_impl.dart'
25 show NonFilePackagesDirectoryPackages, MapPackages; 25 show NonFilePackagesDirectoryPackages, MapPackages;
26 import 'package:package_config/packages_file.dart' as package_config; 26 import 'package:package_config/packages_file.dart' as package_config;
27 import 'package:source_span/source_span.dart' show SourceSpan, SourceLocation; 27 import 'package:source_span/source_span.dart' show SourceSpan, SourceLocation;
28 import 'package:front_end/src/fasta/command_line_reporting.dart' 28 import 'package:front_end/src/fasta/command_line_reporting.dart'
29 as command_line_reporting; 29 as command_line_reporting;
30 30
31 import 'libraries_specification.dart';
32
33 /// All options needed for the front end implementation. 31 /// All options needed for the front end implementation.
34 /// 32 ///
35 /// This includes: all of [CompilerOptions] in a form useful to the 33 /// This includes: all of [CompilerOptions] in a form useful to the
36 /// implementation, default values for options that were not provided, 34 /// implementation, default values for options that were not provided,
37 /// and information derived from how the compiler was invoked (like the 35 /// and information derived from how the compiler was invoked (like the
38 /// entry-points given to the compiler and whether a modular or whole-program 36 /// entry-points given to the compiler and whether a modular or whole-program
39 /// API was used). 37 /// API was used).
40 /// 38 ///
41 /// The intent is that the front end should immediately wrap any incoming 39 /// The intent is that the front end should immediately wrap any incoming
42 /// [CompilerOptions] object in this class before doing further processing, and 40 /// [CompilerOptions] object in this class before doing further processing, and
(...skipping 28 matching lines...) Expand all
71 /// includes inferred types. 69 /// includes inferred types.
72 List<Program> _inputSummariesPrograms; 70 List<Program> _inputSummariesPrograms;
73 71
74 /// Other programs that are meant to be linked and compiled with the input 72 /// Other programs that are meant to be linked and compiled with the input
75 /// sources. 73 /// sources.
76 List<Program> _linkedDependencies; 74 List<Program> _linkedDependencies;
77 75
78 /// The location of the SDK, or `null` if the location hasn't been determined 76 /// The location of the SDK, or `null` if the location hasn't been determined
79 /// yet. 77 /// yet.
80 Uri _sdkRoot; 78 Uri _sdkRoot;
81 Uri get sdkRoot { 79 Uri get sdkRoot => _sdkRoot ??= _normalizeSdkRoot();
82 _ensureSdkDefaults();
83 return _sdkRoot;
84 }
85 80
86 Uri _sdkSummary; 81 Uri _sdkSummary;
87 Uri get sdkSummary { 82 Uri get sdkSummary => _sdkSummary ??= _computeSdkSummaryUri();
88 _ensureSdkDefaults();
89 return _sdkSummary;
90 }
91
92 Uri _librariesSpecificationUri;
93 Uri get librariesSpecificationUri {
94 _ensureSdkDefaults();
95 return _librariesSpecificationUri;
96 }
97 83
98 Ticker ticker; 84 Ticker ticker;
99 85
100 bool get verbose => _raw.verbose; 86 bool get verbose => _raw.verbose;
101 87
102 bool get verify => _raw.verify; 88 bool get verify => _raw.verify;
103 89
104 bool get debugDump => _raw.debugDump; 90 bool get debugDump => _raw.debugDump;
105 91
106 bool get setExitCodeOnProblem => _raw.setExitCodeOnProblem; 92 bool get setExitCodeOnProblem => _raw.setExitCodeOnProblem;
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 Program loadProgram(List<int> bytes, CanonicalName nameRoot) { 267 Program loadProgram(List<int> bytes, CanonicalName nameRoot) {
282 return loadProgramFromBytes(bytes, new Program(nameRoot: nameRoot)); 268 return loadProgramFromBytes(bytes, new Program(nameRoot: nameRoot));
283 } 269 }
284 270
285 /// Get the [UriTranslator] which resolves "package:" and "dart:" URIs. 271 /// Get the [UriTranslator] which resolves "package:" and "dart:" URIs.
286 /// 272 ///
287 /// This is an asynchronous method since file system operations may be 273 /// This is an asynchronous method since file system operations may be
288 /// required to locate/read the packages file as well as SDK metadata. 274 /// required to locate/read the packages file as well as SDK metadata.
289 Future<UriTranslatorImpl> getUriTranslator() async { 275 Future<UriTranslatorImpl> getUriTranslator() async {
290 if (_uriTranslator == null) { 276 if (_uriTranslator == null) {
291 ticker.logMs("Started building UriTranslator"); 277 await _getPackages();
292 var libraries = await _computeLibrarySpecification(); 278 // TODO(scheglov) Load SDK libraries from whatever format we decide.
293 ticker.logMs("Read libraries file"); 279 // TODO(scheglov) Remove the field "_raw.dartLibraries".
294 var packages = await _getPackages(); 280 var libraries = _raw.dartLibraries ?? await _parseDartLibraries();
281 _uriTranslator = new UriTranslatorImpl(
282 libraries, const <String, List<Uri>>{}, _packages);
295 ticker.logMs("Read packages file"); 283 ticker.logMs("Read packages file");
296 _uriTranslator = new UriTranslatorImpl(libraries, packages);
297 } 284 }
298 return _uriTranslator; 285 return _uriTranslator;
299 } 286 }
300 287
301 Future<TargetLibrariesSpecification> _computeLibrarySpecification() async { 288 Future<Map<String, Uri>> _parseDartLibraries() async {
302 var name = target.name; 289 Uri librariesJson = _raw.sdkRoot?.resolve("lib/libraries.json");
303 // TODO(sigmund): Eek! We should get to the point where there is no 290 return await computeDartLibraries(fileSystem, librariesJson);
304 // fasta-specific targets and the target names are meaningful.
305 if (name.endsWith('_fasta')) name = name.substring(0, name.length - 6);
306
307 if (librariesSpecificationUri == null ||
308 !await fileSystem.entityForUri(librariesSpecificationUri).exists()) {
309 if (compileSdk) {
310 reportWithoutLocation(
311 templateSdkSpecificationNotFound
312 .withArguments(librariesSpecificationUri),
313 Severity.error);
314 }
315 return new TargetLibrariesSpecification(name);
316 }
317
318 var json =
319 await fileSystem.entityForUri(librariesSpecificationUri).readAsString();
320 try {
321 var spec =
322 await LibrariesSpecification.parse(librariesSpecificationUri, json);
323 return spec.specificationFor(name);
324 } on LibrariesSpecificationException catch (e) {
325 reportWithoutLocation(
326 templateCannotReadSdkSpecification.withArguments('${e.error}'),
327 Severity.error);
328 return new TargetLibrariesSpecification(name);
329 }
330 } 291 }
331 292
332 /// Get the package map which maps package names to URIs. 293 /// Get the package map which maps package names to URIs.
333 /// 294 ///
334 /// This is an asynchronous getter since file system operations may be 295 /// This is an asynchronous getter since file system operations may be
335 /// required to locate/read the packages file. 296 /// required to locate/read the packages file.
336 Future<Packages> _getPackages() async { 297 Future<Packages> _getPackages() async {
337 if (_packages != null) return _packages; 298 if (_packages != null) return _packages;
338 if (_raw.packagesFileUri != null) { 299 if (_raw.packagesFileUri != null) {
339 return _packages = await createPackagesFromFile(_raw.packagesFileUri); 300 return _packages = await createPackagesFromFile(_raw.packagesFileUri);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 candidate = await checkInDir(parentDir); 391 candidate = await checkInDir(parentDir);
431 if (candidate != null) break; 392 if (candidate != null) break;
432 dir = parentDir; 393 dir = parentDir;
433 parentDir = dir.resolve('..'); 394 parentDir = dir.resolve('..');
434 } 395 }
435 396
436 if (candidate != null) return createPackagesFromFile(candidate); 397 if (candidate != null) return createPackagesFromFile(candidate);
437 return Packages.noPackages; 398 return Packages.noPackages;
438 } 399 }
439 400
440 bool _computedSdkDefaults = false; 401 /// Get the location of the SDK.
441 402 Uri _normalizeSdkRoot() {
442 /// Ensure [_sdkRoot], [_sdkSummary] and [_librarySpecUri] are initialized. 403 // If an SDK summary location was provided, the SDK itself should not be
443 /// 404 // needed.
444 /// If they are not set explicitly, they are infered based on the default 405 assert(_raw.sdkSummary == null);
445 /// behavior described in [CompilerOptions]. 406 if (_raw.sdkRoot == null) {
446 void _ensureSdkDefaults() {
447 if (_computedSdkDefaults) return;
448 _computedSdkDefaults = true;
449 var root = _raw.sdkRoot;
450 if (root != null) {
451 // Normalize to always end in '/'
452 if (!root.path.endsWith('/')) {
453 root = root.replace(path: root.path + '/');
454 }
455 _sdkRoot = root;
456 } else if (compileSdk) {
457 // TODO(paulberry): implement the algorithm for finding the SDK 407 // TODO(paulberry): implement the algorithm for finding the SDK
458 // automagically. 408 // automagically.
459 unimplemented('infer the default sdk location', -1, null); 409 return unimplemented('infer the default sdk location', -1, null);
460 } 410 }
411 var root = _raw.sdkRoot;
412 if (!root.path.endsWith('/')) {
413 root = root.replace(path: root.path + '/');
414 }
415 return root;
416 }
461 417
462 if (_raw.sdkSummary != null) { 418 /// Get or infer the location of the SDK summary.
463 _sdkSummary = _raw.sdkSummary; 419 Uri _computeSdkSummaryUri() {
464 } else if (!compileSdk) { 420 if (_raw.sdkSummary != null) return _raw.sdkSummary;
465 // Infer based on the sdkRoot, but only when `compileSdk` is false,
466 // otherwise the default intent was to compile the sdk from sources and
467 // not to load an sdk summary file.
468 _sdkSummary = root?.resolve('outline.dill');
469 }
470 421
471 if (_raw.librariesSpecificationUri != null) { 422 // Infer based on the sdkRoot, but only when `compileSdk` is false,
472 _librariesSpecificationUri = _raw.librariesSpecificationUri; 423 // otherwise the default intent was to compile the sdk from sources and not
473 } else if (compileSdk) { 424 // to load an sdk summary file.
474 _librariesSpecificationUri = sdkRoot.resolve('lib/libraries.json'); 425 if (_raw.compileSdk) return null;
475 } 426 return sdkRoot.resolve('outline.dill');
476 } 427 }
477 428
478 /// Create a [FileSystem] specific to the current options. 429 /// Create a [FileSystem] specific to the current options.
479 /// 430 ///
480 /// If `_raw.multiRoots` is not empty, the file-system will implement the 431 /// If `_raw.multiRoots` is not empty, the file-system will implement the
481 /// semantics of multiple roots. If [chaseDependencies] is false, the 432 /// semantics of multiple roots. If [chaseDependencies] is false, the
482 /// resulting file system will be hermetic. 433 /// resulting file system will be hermetic.
483 FileSystem _createFileSystem() { 434 FileSystem _createFileSystem() {
484 var result = _raw.fileSystem; 435 var result = _raw.fileSystem;
485 // Note: hermetic checks are done before translating multi-root URIs, so 436 // Note: hermetic checks are done before translating multi-root URIs, so
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 writeList('Multiroots', _raw.multiRoots); 487 writeList('Multiroots', _raw.multiRoots);
537 488
538 sb.writeln('Modular: ${_modularApi}'); 489 sb.writeln('Modular: ${_modularApi}');
539 sb.writeln('Hermetic: ${!chaseDependencies}' 490 sb.writeln('Hermetic: ${!chaseDependencies}'
540 ' (provided: ${!_raw.chaseDependencies})'); 491 ' (provided: ${!_raw.chaseDependencies})');
541 sb.writeln('Packages uri: ${_raw.packagesFileUri}'); 492 sb.writeln('Packages uri: ${_raw.packagesFileUri}');
542 sb.writeln('Packages: ${_packages}'); 493 sb.writeln('Packages: ${_packages}');
543 494
544 sb.writeln('Compile SDK: ${compileSdk}'); 495 sb.writeln('Compile SDK: ${compileSdk}');
545 sb.writeln('SDK root: ${_sdkRoot} (provided: ${_raw.sdkRoot})'); 496 sb.writeln('SDK root: ${_sdkRoot} (provided: ${_raw.sdkRoot})');
546 sb.writeln('SDK specification: ${_librariesSpecificationUri} '
547 '(provided: ${_raw.librariesSpecificationUri})');
548 sb.writeln('SDK summary: ${_sdkSummary} (provided: ${_raw.sdkSummary})'); 497 sb.writeln('SDK summary: ${_sdkSummary} (provided: ${_raw.sdkSummary})');
549 498
550 sb.writeln('Strong: ${strongMode}'); 499 sb.writeln('Strong: ${strongMode}');
551 sb.writeln('Target: ${_target?.name} (provided: ${_raw.target?.name})'); 500 sb.writeln('Target: ${_target?.name} (provided: ${_raw.target?.name})');
552 501
553 sb.writeln('throwOnErrorsAreFatal: ${throwOnErrors}'); 502 sb.writeln('throwOnErrorsAreFatal: ${throwOnErrors}');
554 sb.writeln('throwOnWarningsAreFatal: ${throwOnWarnings}'); 503 sb.writeln('throwOnWarningsAreFatal: ${throwOnWarnings}');
555 sb.writeln('throwOnNits: ${throwOnNits}'); 504 sb.writeln('throwOnNits: ${throwOnNits}');
556 sb.writeln('exit on problem: ${setExitCodeOnProblem}'); 505 sb.writeln('exit on problem: ${setExitCodeOnProblem}');
557 sb.writeln('Embed sources: ${embedSourceText}'); 506 sb.writeln('Embed sources: ${embedSourceText}');
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 String get dart2jsCode => _original.code.dart2jsCode; 551 String get dart2jsCode => _original.code.dart2jsCode;
603 552
604 SourceSpan get span => 553 SourceSpan get span =>
605 new SourceLocation(_original.charOffset, sourceUrl: _original.uri) 554 new SourceLocation(_original.charOffset, sourceUrl: _original.uri)
606 .pointSpan(); 555 .pointSpan();
607 556
608 _CompilationMessage(this._original, this.severity); 557 _CompilationMessage(this._original, this.severity);
609 558
610 String toString() => message; 559 String toString() => message;
611 } 560 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/base/libraries_specification.dart ('k') | pkg/front_end/lib/src/fasta/fasta_codes_generated.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698