| Index: pkg/front_end/lib/src/fasta/translate_uri.dart
|
| diff --git a/pkg/front_end/lib/src/fasta/translate_uri.dart b/pkg/front_end/lib/src/fasta/translate_uri.dart
|
| index f17d9af91bbfffe2991f88ba0ad450f6714a9cab..6c249a77239f69aa4782097213ae1e4208243038 100644
|
| --- a/pkg/front_end/lib/src/fasta/translate_uri.dart
|
| +++ b/pkg/front_end/lib/src/fasta/translate_uri.dart
|
| @@ -6,7 +6,11 @@ library fasta.translate_uri;
|
|
|
| import 'dart:async' show Future;
|
|
|
| -import 'package:front_end/file_system.dart';
|
| +import 'dart:convert' show JSON;
|
| +
|
| +import 'package:front_end/file_system.dart'
|
| + show FileSystem, FileSystemException;
|
| +
|
| import 'package:package_config/packages_file.dart' as packages_file show parse;
|
|
|
| import 'errors.dart' show inputError;
|
| @@ -15,7 +19,11 @@ class TranslateUri {
|
| final Map<String, Uri> packages;
|
| final Map<String, Uri> dartLibraries;
|
|
|
| - TranslateUri(this.packages, this.dartLibraries);
|
| + // TODO(ahe): We probably want this to be `Map<String, Uri>`, that is, just
|
| + // one patch library (with parts).
|
| + final Map<String, List<Uri>> patches;
|
| +
|
| + TranslateUri(this.packages, this.dartLibraries, this.patches);
|
|
|
| Uri translate(Uri uri) {
|
| if (uri.scheme == "dart") return translateDartUri(uri);
|
| @@ -46,83 +54,57 @@ class TranslateUri {
|
| return root.resolve(path);
|
| }
|
|
|
| + /// Returns true if [uri] is private to the platform libraries (and thus not
|
| + /// accessible from user code).
|
| + bool isPlatformImplementation(Uri uri) {
|
| + if (uri.scheme != "dart") return false;
|
| + String path = uri.path;
|
| + return dartLibraries[path] == null || path.startsWith("_");
|
| + }
|
| +
|
| static Future<TranslateUri> parse(FileSystem fileSystem, Uri sdk,
|
| - [Uri uri]) async {
|
| - // This list below is generated with [bin/generate_dart_libraries.dart] and
|
| - // additional entries for _builtin, _vmservice, profiler, and vmservice_io.
|
| - //
|
| - // TODO(ahe): This is only used with the option --compile-sdk, and
|
| - // currently doesn't work outside the SDK source tree.
|
| - Map<String, Uri> dartLibraries = <String, Uri>{};
|
| - if (sdk != null) {
|
| - dartLibraries = <String, Uri>{
|
| - "_async_await_error_codes": sdk.resolve(
|
| - "lib/_internal/js_runtime/lib/shared/async_await_error_codes.dart"),
|
| - "_blink": sdk.resolve("lib/_blink/dartium/_blink_dartium.dart"),
|
| - "_builtin": sdk.resolve("lib/_builtin/_builtin.dart"),
|
| - "_chrome": sdk.resolve("lib/_chrome/dart2js/chrome_dart2js.dart"),
|
| - "_foreign_helper":
|
| - sdk.resolve("lib/_internal/js_runtime/lib/foreign_helper.dart"),
|
| - "_interceptors":
|
| - sdk.resolve("lib/_internal/js_runtime/lib/interceptors.dart"),
|
| - "_internal": sdk.resolve("lib/internal/internal.dart"),
|
| - "_isolate_helper":
|
| - sdk.resolve("lib/_internal/js_runtime/lib/isolate_helper.dart"),
|
| - "_js_embedded_names": sdk
|
| - .resolve("lib/_internal/js_runtime/lib/shared/embedded_names.dart"),
|
| - "_js_helper":
|
| - sdk.resolve("lib/_internal/js_runtime/lib/js_helper.dart"),
|
| - "_js_mirrors":
|
| - sdk.resolve("lib/_internal/js_runtime/lib/js_mirrors.dart"),
|
| - "_js_names": sdk.resolve("lib/_internal/js_runtime/lib/js_names.dart"),
|
| - "_js_primitives":
|
| - sdk.resolve("lib/_internal/js_runtime/lib/js_primitives.dart"),
|
| - "_metadata": sdk.resolve("lib/html/html_common/metadata.dart"),
|
| - "_native_typed_data":
|
| - sdk.resolve("lib/_internal/js_runtime/lib/native_typed_data.dart"),
|
| - "_vmservice": sdk.resolve("lib/vmservice/vmservice.dart"),
|
| - "async": sdk.resolve("lib/async/async.dart"),
|
| - "collection": sdk.resolve("lib/collection/collection.dart"),
|
| - "convert": sdk.resolve("lib/convert/convert.dart"),
|
| - "core": sdk.resolve("lib/core/core.dart"),
|
| - "developer": sdk.resolve("lib/developer/developer.dart"),
|
| - "html": sdk.resolve("lib/html/dart2js/html_dart2js.dart"),
|
| - "html_common":
|
| - sdk.resolve("lib/html/html_common/html_common_dart2js.dart"),
|
| - "indexed_db":
|
| - sdk.resolve("lib/indexed_db/dart2js/indexed_db_dart2js.dart"),
|
| - "io": sdk.resolve("lib/io/io.dart"),
|
| - "isolate": sdk.resolve("lib/isolate/isolate.dart"),
|
| - "js": sdk.resolve("lib/js/dart2js/js_dart2js.dart"),
|
| - "js_util": sdk.resolve("lib/js_util/dart2js/js_util_dart2js.dart"),
|
| - "math": sdk.resolve("lib/math/math.dart"),
|
| - "mirrors": sdk.resolve("lib/mirrors/mirrors.dart"),
|
| - "nativewrappers": sdk.resolve("lib/html/dartium/nativewrappers.dart"),
|
| - "profiler": sdk.resolve("lib/profiler/profiler.dart"),
|
| - "svg": sdk.resolve("lib/svg/dart2js/svg_dart2js.dart"),
|
| - "typed_data": sdk.resolve("lib/typed_data/typed_data.dart"),
|
| - "vmservice_io": sdk.resolve("lib/vmservice_io/vmservice_io.dart"),
|
| - "web_audio":
|
| - sdk.resolve("lib/web_audio/dart2js/web_audio_dart2js.dart"),
|
| - "web_gl": sdk.resolve("lib/web_gl/dart2js/web_gl_dart2js.dart"),
|
| - "web_sql": sdk.resolve("lib/web_sql/dart2js/web_sql_dart2js.dart"),
|
| - };
|
| - }
|
| - uri ??= Uri.base.resolve(".packages");
|
| + {Uri packages}) async {
|
| + Uri librariesJson = sdk?.resolve("lib/libraries.json");
|
| +
|
| + // TODO(ahe): Provide a value for this file.
|
| + Uri patches = null;
|
| +
|
| + packages ??= Uri.base.resolve(".packages");
|
|
|
| List<int> bytes;
|
| try {
|
| - bytes = await fileSystem.entityForUri(uri).readAsBytes();
|
| + bytes = await fileSystem.entityForUri(packages).readAsBytes();
|
| } on FileSystemException catch (e) {
|
| - inputError(uri, -1, e.message);
|
| + inputError(packages, -1, e.message);
|
| }
|
|
|
| - Map<String, Uri> packages = const <String, Uri>{};
|
| + Map<String, Uri> parsedPackages;
|
| try {
|
| - packages = packages_file.parse(bytes, uri);
|
| + parsedPackages = packages_file.parse(bytes, packages);
|
| } on FormatException catch (e) {
|
| - return inputError(uri, e.offset, e.message);
|
| + return inputError(packages, e.offset, e.message);
|
| }
|
| - return new TranslateUri(packages, dartLibraries);
|
| + return new TranslateUri(
|
| + parsedPackages,
|
| + await computeLibraries(fileSystem, librariesJson),
|
| + await computePatches(fileSystem, patches));
|
| }
|
| }
|
| +
|
| +Future<Map<String, Uri>> computeLibraries(
|
| + FileSystem fileSystem, Uri uri) async {
|
| + if (uri == null) return const <String, Uri>{};
|
| + Map<String, String> libraries = JSON
|
| + .decode(await fileSystem.entityForUri(uri).readAsString())["libraries"];
|
| + Map<String, Uri> result = <String, Uri>{};
|
| + libraries.forEach((String name, String path) {
|
| + result[name] = uri.resolve(path);
|
| + });
|
| + return result;
|
| +}
|
| +
|
| +Future<Map<String, List<Uri>>> computePatches(
|
| + FileSystem fileSystem, Uri uri) async {
|
| + // TODO(ahe): Read patch information.
|
| + return const <String, List<Uri>>{};
|
| +}
|
|
|