| Index: runtime/bin/builtin.dart
|
| ===================================================================
|
| --- runtime/bin/builtin.dart (revision 45703)
|
| +++ runtime/bin/builtin.dart (working copy)
|
| @@ -7,12 +7,6 @@
|
| import 'dart:isolate';
|
| import 'dart:typed_data';
|
|
|
| -// import 'root_library'; happens here from C Code
|
| -
|
| -// Build time flag to enable debug logging of loading code.
|
| -const _logLoading = false;
|
| -
|
| -
|
| // The root library (aka the script) is imported into this library. The
|
| // standalone embedder uses this to lookup the main entrypoint in the
|
| // root library's namespace.
|
| @@ -59,6 +53,10 @@
|
| const Dart_kSourceTag = 1;
|
| const Dart_kCanonicalizeUrl = 2;
|
|
|
| +// Embedder sets this to true if the --trace-loading flag was passed on the
|
| +// command line.
|
| +bool _traceLoading = false;
|
| +
|
| // A port for communicating with the service isolate for I/O.
|
| SendPort _loadPort;
|
| // Maintain a number of outstanding load requests. Current loading request is
|
| @@ -66,18 +64,19 @@
|
| int _numOutstandingLoadRequests = 0;
|
|
|
| // The current working directory when the embedder was launched.
|
| -var _workingDirectoryUri;
|
| -// The URI that the entry point script was loaded from. Remembered so that
|
| -// package imports can be resolved relative to it.
|
| -var _entryPointScript;
|
| +Uri _workingDirectory;
|
| +// The URI that the root script was loaded from. Remembered so that
|
| +// package imports can be resolved relative to it. The root script is the basis
|
| +// for the root library in the VM.
|
| +Uri _rootScript;
|
| // The directory to look in to resolve "package:" scheme URIs. By detault it is
|
| // the 'packages' directory right next to the script.
|
| -var _packageRoot = _entryPointScript.resolve('packages/');
|
| +Uri _packageRoot = _rootScript.resolve('packages/');
|
|
|
| // Special handling for Windows paths so that they are compatible with URI
|
| // handling.
|
| -// Embedder sets whether we are running on Windows.
|
| -var _isWindows;
|
| +// Embedder sets this to true if we are running on Windows.
|
| +bool _isWindows = false;
|
|
|
|
|
| // A class wrapping the load error message in an Error object.
|
| @@ -152,12 +151,12 @@
|
| // Embedder Entrypoint:
|
| // The embedder calls this method with the current working directory.
|
| void _setWorkingDirectory(cwd) {
|
| - if (_logLoading) {
|
| + if (_traceLoading) {
|
| _print('# Setting working directory: $cwd');
|
| }
|
| - _workingDirectoryUri = new Uri.directory(cwd);
|
| - if (_logLoading) {
|
| - _print('# Working directory URI: $_workingDirectoryUri');
|
| + _workingDirectory = new Uri.directory(cwd);
|
| + if (_traceLoading) {
|
| + _print('# Working directory URI: $_workingDirectory');
|
| }
|
| }
|
|
|
| @@ -165,18 +164,21 @@
|
| // Embedder Entrypoint:
|
| // The embedder calls this method with a custom package root.
|
| _setPackageRoot(String packageRoot) {
|
| + if (_traceLoading) {
|
| + _print('# Setting package root: $packageRoot');
|
| + }
|
| packageRoot = _enforceTrailingSlash(packageRoot);
|
| if (packageRoot.startsWith('file:') ||
|
| packageRoot.startsWith('http:') ||
|
| packageRoot.startsWith('https:')) {
|
| - _packageRoot = _workingDirectoryUri.resolve(packageRoot);
|
| + _packageRoot = _workingDirectory.resolve(packageRoot);
|
| } else {
|
| packageRoot = _sanitizeWindowsPath(packageRoot);
|
| packageRoot = _trimWindowsPath(packageRoot);
|
| - _packageRoot = _workingDirectoryUri.resolveUri(new Uri.file(packageRoot));
|
| + _packageRoot = _workingDirectory.resolveUri(new Uri.file(packageRoot));
|
| }
|
| - if (_logLoading) {
|
| - _print('# Package root: $packageRoot -> $_packageRoot');
|
| + if (_traceLoading) {
|
| + _print('# Package root URI: $_packageRoot');
|
| }
|
| }
|
|
|
| @@ -193,7 +195,7 @@
|
| "'$right', not '$wrong'.";
|
| }
|
|
|
| - if (_logLoading) {
|
| + if (_traceLoading) {
|
| _print('# Package root: $_packageRoot');
|
| _print('# uri path: ${uri.path}');
|
| }
|
| @@ -204,7 +206,7 @@
|
| // Resolves the script uri in the current working directory iff the given uri
|
| // did not specify a scheme (e.g. a path to a script file on the command line).
|
| Uri _resolveScriptUri(String scriptName) {
|
| - if (_workingDirectoryUri == null) {
|
| + if (_workingDirectory == null) {
|
| throw 'No current working directory set.';
|
| }
|
| scriptName = _sanitizeWindowsPath(scriptName);
|
| @@ -213,15 +215,15 @@
|
| if (scriptUri.scheme == '') {
|
| // Script does not have a scheme, assume that it is a path,
|
| // resolve it against the working directory.
|
| - scriptUri = _workingDirectoryUri.resolveUri(scriptUri);
|
| + scriptUri = _workingDirectory.resolveUri(scriptUri);
|
| }
|
|
|
| - // Remember the entry point script URI so that we can resolve packages
|
| - // based on this location.
|
| - _entryPointScript = scriptUri;
|
| + // Remember the root script URI so that we can resolve packages based on
|
| + // this location.
|
| + _rootScript = scriptUri;
|
|
|
| - if (_logLoading) {
|
| - _print('# Resolved entry point to: $_entryPointScript');
|
| + if (_traceLoading) {
|
| + _print('# Resolved entry point to: $_rootScript');
|
| }
|
| return scriptUri;
|
| }
|
| @@ -230,7 +232,7 @@
|
| void _finishLoadRequest(String uri) {
|
| assert(_numOutstandingLoadRequests > 0);
|
| _numOutstandingLoadRequests--;
|
| - if (_logLoading) {
|
| + if (_traceLoading) {
|
| _print("Loading of $uri finished, "
|
| "${_numOutstandingLoadRequests} requests remaining");
|
| }
|
| @@ -243,7 +245,7 @@
|
| void _startLoadRequest(String uri, Uri resourceUri) {
|
| assert(_numOutstandingLoadRequests >= 0);
|
| _numOutstandingLoadRequests++;
|
| - if (_logLoading) {
|
| + if (_traceLoading) {
|
| _print("Loading of $resourceUri for $uri started, "
|
| "${_numOutstandingLoadRequests} requests outstanding");
|
| }
|
| @@ -260,7 +262,7 @@
|
|
|
|
|
| void _asyncLoadError(int tag, String uri, String libraryUri, LoadError error) {
|
| - if (_logLoading) {
|
| + if (_traceLoading) {
|
| _print("_asyncLoadError($uri), error: $error");
|
| }
|
| if (tag == Dart_kImportTag) {
|
| @@ -300,7 +302,7 @@
|
| _loadPort.send(msg);
|
| _startLoadRequest(uri, resourceUri);
|
| } catch (e) {
|
| - if (_logLoading) {
|
| + if (_traceLoading) {
|
| _print("Exception when communicating with service isolate: $e");
|
| }
|
| // Wrap inside a LoadError unless we are already propagating a previously
|
| @@ -336,7 +338,7 @@
|
| // Function called by standalone embedder to resolve uris when the VM requests
|
| // Dart_kCanonicalizeUrl from the tag handler.
|
| String _resolveUri(String base, String userString) {
|
| - if (_logLoading) {
|
| + if (_traceLoading) {
|
| _print('# Resolving: $userString from $base');
|
| }
|
| var baseUri = Uri.parse(base);
|
| @@ -347,7 +349,7 @@
|
| } else {
|
| result = baseUri.resolve(userString).toString();
|
| }
|
| - if (_logLoading) {
|
| + if (_traceLoading) {
|
| _print('Resolved $userString in $base to $result');
|
| }
|
| return result;
|
| @@ -357,7 +359,7 @@
|
| // Embedder Entrypoint (gen_snapshot):
|
| // Resolve relative paths relative to working directory.
|
| String _resolveInWorkingDirectory(String fileName) {
|
| - if (_workingDirectoryUri == null) {
|
| + if (_workingDirectory == null) {
|
| throw 'No current working directory set.';
|
| }
|
| var name = _sanitizeWindowsPath(fileName);
|
| @@ -366,9 +368,9 @@
|
| if (uri.scheme != '') {
|
| throw 'Schemes are not supported when resolving filenames.';
|
| }
|
| - uri = _workingDirectoryUri.resolveUri(uri);
|
| + uri = _workingDirectory.resolveUri(uri);
|
|
|
| - if (_logLoading) {
|
| + if (_traceLoading) {
|
| _print('# Resolved in working directory: $fileName -> $uri');
|
| }
|
| return uri.toString();
|
| @@ -396,7 +398,7 @@
|
| // Returns either a file path or a URI starting with http[s]:, as a String.
|
| String _filePathFromUri(String userUri) {
|
| var uri = Uri.parse(userUri);
|
| - if (_logLoading) {
|
| + if (_traceLoading) {
|
| _print('# Getting file path from: $uri');
|
| }
|
|
|
| @@ -414,7 +416,7 @@
|
| default:
|
| // Only handling file, http, and package URIs
|
| // in standalone binary.
|
| - if (_logLoading) {
|
| + if (_traceLoading) {
|
| _print('# Unknown scheme (${uri.scheme}) in $uri.');
|
| }
|
| throw 'Not a known scheme: $uri';
|
|
|