Index: runtime/bin/vmservice/loader.dart |
diff --git a/runtime/bin/vmservice/loader.dart b/runtime/bin/vmservice/loader.dart |
index d62eb32e1a8a6aed27f3f88699d92c88c247e709..0d9246a40c52d9886adaaa99508e091945206877 100644 |
--- a/runtime/bin/vmservice/loader.dart |
+++ b/runtime/bin/vmservice/loader.dart |
@@ -70,10 +70,8 @@ class IsolateLoaderState extends IsolateEmbedderData { |
SendPort sp; |
- void init(String packageRootFlag, |
- String packagesConfigFlag, |
- String workingDirectory, |
- String rootScript) { |
+ void init(String packageRootFlag, String packagesConfigFlag, |
+ String workingDirectory, String rootScript) { |
// _workingDirectory must be set first. |
_workingDirectory = new Uri.directory(workingDirectory); |
if (rootScript != null) { |
@@ -107,9 +105,10 @@ class IsolateLoaderState extends IsolateEmbedderData { |
// Packages are either resolved looking up in a map or resolved from within a |
// package root. |
- bool get _packagesReady => (_packageRoot != null) || |
- (_packageMap != null) || |
- (_packageError != null); |
+ bool get _packagesReady => |
+ (_packageRoot != null) || |
+ (_packageMap != null) || |
+ (_packageError != null); |
// Error string set if there was an error resolving package configuration. |
// For example not finding a .packages file or packages/ directory, malformed |
@@ -135,6 +134,7 @@ class IsolateLoaderState extends IsolateEmbedderData { |
void enqueueFileRequest(FileRequest fr) { |
_fileRequestQueue.add(fr); |
} |
+ |
FileRequest dequeueFileRequest() { |
if (_fileRequestQueue.length == 0) { |
return null; |
@@ -203,14 +203,14 @@ class IsolateLoaderState extends IsolateEmbedderData { |
var wrong = 'package://$path'; |
throw "URIs using the 'package:' scheme should look like " |
- "'$right', not '$wrong'."; |
+ "'$right', not '$wrong'."; |
} |
var packageNameEnd = uri.path.indexOf('/'); |
if (packageNameEnd == 0) { |
// Package URIs must have a non-empty package name (not start with "/"). |
throw "URIS using the 'package:' scheme should look like " |
- "'package:packageName${uri.path}', not 'package:${uri.path}'"; |
+ "'package:packageName${uri.path}', not 'package:${uri.path}'"; |
} |
if (_traceLoading) { |
_log('Resolving package with uri path: ${uri.path}'); |
@@ -228,7 +228,7 @@ class IsolateLoaderState extends IsolateEmbedderData { |
// Package URIs must have a path after the package name, even if it's |
// just "/". |
throw "URIS using the 'package:' scheme should look like " |
- "'package:${uri.path}/', not 'package:${uri.path}'"; |
+ "'package:${uri.path}/', not 'package:${uri.path}'"; |
} |
var packageName = uri.path.substring(0, packageNameEnd); |
var mapping = _packageMap[packageName]; |
@@ -263,16 +263,10 @@ class IsolateLoaderState extends IsolateEmbedderData { |
if (packageConfig != null) { |
// Explicitly specified .packages path. |
- _handlePackagesRequest(sp, |
- _traceLoading, |
- -2, |
- packageConfig); |
+ _handlePackagesRequest(sp, _traceLoading, -2, packageConfig); |
} else { |
// Search for .packages or packages/ starting at the root script. |
- _handlePackagesRequest(sp, |
- _traceLoading, |
- -1, |
- _rootScript); |
+ _handlePackagesRequest(sp, _traceLoading, -1, _rootScript); |
} |
if (_traceLoading) { |
@@ -308,9 +302,9 @@ class IsolateLoaderState extends IsolateEmbedderData { |
assert(msg[1] == null); |
_packageConfig = Uri.parse(msg[0]); |
_packageMap = new Map<String, Uri>(); |
- for (var i = 2; i < msg.length; i+=2) { |
+ for (var i = 2; i < msg.length; i += 2) { |
// TODO(iposva): Complain about duplicate entries. |
- _packageMap[msg[i]] = Uri.parse(msg[i+1]); |
+ _packageMap[msg[i]] = Uri.parse(msg[i + 1]); |
} |
if (_traceLoading) { |
_log("Setup package map: $_packageMap"); |
@@ -334,7 +328,6 @@ class IsolateLoaderState extends IsolateEmbedderData { |
// finish loading. |
_pendingPackageLoads = []; |
} |
- |
} |
_log(msg) { |
@@ -344,12 +337,8 @@ _log(msg) { |
var _httpClient; |
// Send a response to the requesting isolate. |
-void _sendResourceResponse(SendPort sp, |
- int tag, |
- Uri uri, |
- Uri resolvedUri, |
- String libraryUrl, |
- dynamic data) { |
+void _sendResourceResponse(SendPort sp, int tag, Uri uri, Uri resolvedUri, |
+ String libraryUrl, dynamic data) { |
assert((data is List<int>) || (data is String)); |
var msg = new List(5); |
if (data is String) { |
@@ -370,10 +359,8 @@ void _sendResourceResponse(SendPort sp, |
} |
// Send a response to the requesting isolate. |
-void _sendExtensionImportResponse(SendPort sp, |
- Uri uri, |
- String libraryUrl, |
- String resolvedUri) { |
+void _sendExtensionImportResponse( |
+ SendPort sp, Uri uri, String libraryUrl, String resolvedUri) { |
var msg = new List(5); |
int tag = _Dart_kImportExtension; |
if (resolvedUri == null) { |
@@ -389,56 +376,44 @@ void _sendExtensionImportResponse(SendPort sp, |
sp.send(msg); |
} |
-void _loadHttp(SendPort sp, |
- int tag, |
- Uri uri, |
- Uri resolvedUri, |
- String libraryUrl) { |
+void _loadHttp( |
+ SendPort sp, int tag, Uri uri, Uri resolvedUri, String libraryUrl) { |
if (_httpClient == null) { |
_httpClient = new HttpClient()..maxConnectionsPerHost = 6; |
} |
- _httpClient.getUrl(resolvedUri) |
- .then((HttpClientRequest request) => request.close()) |
- .then((HttpClientResponse response) { |
- var builder = new BytesBuilder(copy: false); |
- response.listen( |
- builder.add, |
- onDone: () { |
- if (response.statusCode != 200) { |
- var msg = "Failure getting $resolvedUri:\n" |
- " ${response.statusCode} ${response.reasonPhrase}"; |
- _sendResourceResponse(sp, tag, uri, resolvedUri, libraryUrl, msg); |
- } else { |
- _sendResourceResponse(sp, tag, uri, resolvedUri, libraryUrl, |
- builder.takeBytes()); |
- } |
- }, |
- onError: (e) { |
- _sendResourceResponse( |
- sp, tag, uri, resolvedUri, libraryUrl, e.toString()); |
- }); |
- }) |
- .catchError((e) { |
+ _httpClient |
+ .getUrl(resolvedUri) |
+ .then((HttpClientRequest request) => request.close()) |
+ .then((HttpClientResponse response) { |
+ var builder = new BytesBuilder(copy: false); |
+ response.listen(builder.add, onDone: () { |
+ if (response.statusCode != 200) { |
+ var msg = "Failure getting $resolvedUri:\n" |
+ " ${response.statusCode} ${response.reasonPhrase}"; |
+ _sendResourceResponse(sp, tag, uri, resolvedUri, libraryUrl, msg); |
+ } else { |
+ _sendResourceResponse( |
+ sp, tag, uri, resolvedUri, libraryUrl, builder.takeBytes()); |
+ } |
+ }, onError: (e) { |
_sendResourceResponse( |
- sp, tag, uri, resolvedUri, libraryUrl, e.toString()); |
+ sp, tag, uri, resolvedUri, libraryUrl, e.toString()); |
}); |
+ }).catchError((e) { |
+ _sendResourceResponse(sp, tag, uri, resolvedUri, libraryUrl, e.toString()); |
+ }); |
// It's just here to push an event on the event loop so that we invoke the |
// scheduled microtasks. |
Timer.run(() {}); |
} |
-void _loadFile(IsolateLoaderState loaderState, |
- SendPort sp, |
- int tag, |
- Uri uri, |
- Uri resolvedUri, |
- String libraryUrl) { |
+void _loadFile(IsolateLoaderState loaderState, SendPort sp, int tag, Uri uri, |
+ Uri resolvedUri, String libraryUrl) { |
var path = resolvedUri.toFilePath(); |
var sourceFile = new File(path); |
sourceFile.readAsBytes().then((data) { |
_sendResourceResponse(sp, tag, uri, resolvedUri, libraryUrl, data); |
- }, |
- onError: (e) { |
+ }, onError: (e) { |
_sendResourceResponse(sp, tag, uri, resolvedUri, libraryUrl, e.toString()); |
}).whenComplete(() { |
loaderState.currentFileRequests--; |
@@ -454,20 +429,15 @@ void _loadFile(IsolateLoaderState loaderState, |
}); |
} |
-void _loadDataUri(SendPort sp, |
- int tag, |
- Uri uri, |
- Uri resolvedUri, |
- String libraryUrl) { |
+void _loadDataUri( |
+ SendPort sp, int tag, Uri uri, Uri resolvedUri, String libraryUrl) { |
try { |
var mime = uri.data.mimeType; |
- if ((mime != "application/dart") && |
- (mime != "text/plain")) { |
+ if ((mime != "application/dart") && (mime != "text/plain")) { |
throw "MIME-type must be application/dart or text/plain: $mime given."; |
} |
var charset = uri.data.charset; |
- if ((charset != "utf-8") && |
- (charset != "US-ASCII")) { |
+ if ((charset != "utf-8") && (charset != "US-ASCII")) { |
// The C++ portion of the embedder assumes UTF-8. |
throw "Only utf-8 or US-ASCII encodings are supported: $charset given."; |
} |
@@ -475,19 +445,14 @@ void _loadDataUri(SendPort sp, |
sp, tag, uri, resolvedUri, libraryUrl, uri.data.contentAsBytes()); |
} catch (e) { |
_sendResourceResponse(sp, tag, uri, resolvedUri, libraryUrl, |
- "Invalid data uri ($uri):\n $e"); |
+ "Invalid data uri ($uri):\n $e"); |
} |
} |
// Loading a package URI needs to first map the package name to a loadable |
// URI. |
-_loadPackage(IsolateLoaderState loaderState, |
- SendPort sp, |
- bool traceLoading, |
- int tag, |
- Uri uri, |
- Uri resolvedUri, |
- String libraryUrl) { |
+_loadPackage(IsolateLoaderState loaderState, SendPort sp, bool traceLoading, |
+ int tag, Uri uri, Uri resolvedUri, String libraryUrl) { |
if (loaderState._packagesReady) { |
var resolvedUri; |
try { |
@@ -497,22 +462,13 @@ _loadPackage(IsolateLoaderState loaderState, |
_log("Exception ($e) when resolving package URI: $uri"); |
} |
// Report error. |
- _sendResourceResponse(sp, |
- tag, |
- uri, |
- resolvedUri, |
- libraryUrl, |
- e.toString()); |
+ _sendResourceResponse( |
+ sp, tag, uri, resolvedUri, libraryUrl, e.toString()); |
return; |
} |
// Recursively call with the new resolved uri. |
- _handleResourceRequest(loaderState, |
- sp, |
- traceLoading, |
- tag, |
- uri, |
- resolvedUri, |
- libraryUrl); |
+ _handleResourceRequest( |
+ loaderState, sp, traceLoading, tag, uri, resolvedUri, libraryUrl); |
} else { |
if (loaderState._pendingPackageLoads.isEmpty) { |
// Package resolution has not been setup yet, and this is the first |
@@ -522,30 +478,20 @@ _loadPackage(IsolateLoaderState loaderState, |
// Register the action of loading this package once the package resolution |
// is ready. |
loaderState._pendingPackageLoads.add(() { |
- _handleResourceRequest(loaderState, |
- sp, |
- traceLoading, |
- tag, |
- uri, |
- uri, |
- libraryUrl); |
+ _handleResourceRequest( |
+ loaderState, sp, traceLoading, tag, uri, uri, libraryUrl); |
}); |
if (traceLoading) { |
_log("Pending package load of '$uri': " |
- "${loaderState._pendingPackageLoads.length} pending"); |
+ "${loaderState._pendingPackageLoads.length} pending"); |
} |
} |
} |
// TODO(johnmccutchan): This and most other top level functions in this file |
// should be turned into methods on the IsolateLoaderState class. |
-_handleResourceRequest(IsolateLoaderState loaderState, |
- SendPort sp, |
- bool traceLoading, |
- int tag, |
- Uri uri, |
- Uri resolvedUri, |
- String libraryUrl) { |
+_handleResourceRequest(IsolateLoaderState loaderState, SendPort sp, |
+ bool traceLoading, int tag, Uri uri, Uri resolvedUri, String libraryUrl) { |
if (resolvedUri.scheme == '' || resolvedUri.scheme == 'file') { |
if (loaderState.shouldIssueFileRequest) { |
_loadFile(loaderState, sp, tag, uri, resolvedUri, libraryUrl); |
@@ -555,69 +501,136 @@ _handleResourceRequest(IsolateLoaderState loaderState, |
loaderState.enqueueFileRequest(fr); |
} |
} else if ((resolvedUri.scheme == 'http') || |
- (resolvedUri.scheme == 'https')) { |
+ (resolvedUri.scheme == 'https')) { |
_loadHttp(sp, tag, uri, resolvedUri, libraryUrl); |
} else if ((resolvedUri.scheme == 'data')) { |
_loadDataUri(sp, tag, uri, resolvedUri, libraryUrl); |
} else if ((resolvedUri.scheme == 'package')) { |
- _loadPackage(loaderState, |
- sp, |
- traceLoading, |
- tag, |
- uri, |
- resolvedUri, |
- libraryUrl); |
+ _loadPackage( |
+ loaderState, sp, traceLoading, tag, uri, resolvedUri, libraryUrl); |
} else { |
- _sendResourceResponse(sp, tag, |
- uri, |
- resolvedUri, |
- libraryUrl, |
- 'Unknown scheme (${resolvedUri.scheme}) for ' |
- '$resolvedUri'); |
+ _sendResourceResponse( |
+ sp, |
+ tag, |
+ uri, |
+ resolvedUri, |
+ libraryUrl, |
+ 'Unknown scheme (${resolvedUri.scheme}) for ' |
+ '$resolvedUri'); |
} |
} |
// Handling of packages requests. Finding and parsing of .packages file or |
// packages/ directories. |
-const _LF = 0x0A; |
-const _CR = 0x0D; |
+const _LF = 0x0A; |
+const _CR = 0x0D; |
const _SPACE = 0x20; |
-const _HASH = 0x23; |
-const _DOT = 0x2E; |
+const _HASH = 0x23; |
+const _DOT = 0x2E; |
const _COLON = 0x3A; |
-const _DEL = 0x7F; |
+const _DEL = 0x7F; |
const _invalidPackageNameChars = const [ |
- // space ! " # $ % & ' |
- true , false, true , true , false, true , false, false, |
- // ( ) * + , - . / |
- false, false, false, false, false, false, false, true , |
- // 0 1 2 3 4 5 6 7 |
- false, false, false, false, false, false, false, false, |
- // 8 9 : ; < = > ? |
- false, false, true , false, true , false, true , true , |
- // @ A B C D E F G |
- false, false, false, false, false, false, false, false, |
- // H I J K L M N O |
- false, false, false, false, false, false, false, false, |
- // P Q R S T U V W |
- false, false, false, false, false, false, false, false, |
- // X Y Z [ \ ] ^ _ |
- false, false, false, true , true , true , true , false, |
- // ` a b c d e f g |
- true , false, false, false, false, false, false, false, |
- // h i j k l m n o |
- false, false, false, false, false, false, false, false, |
- // p q r s t u v w |
- false, false, false, false, false, false, false, false, |
- // x y z { | } ~ DEL |
- false, false, false, true , true , true , false, true |
+ true, // space |
+ false, // ! |
+ true, // " |
+ true, // # |
+ false, // $ |
+ true, // % |
+ false, // & |
+ false, // ' |
+ false, // ( |
+ false, // ) |
+ false, // * |
+ false, // + |
+ false, // , |
+ false, // - |
+ false, // . |
+ true, // / |
+ false, // 0 |
+ false, // 1 |
+ false, // 2 |
+ false, // 3 |
+ false, // 4 |
+ false, // 5 |
+ false, // 6 |
+ false, // 7 |
+ false, // 8 |
+ false, // 9 |
+ true, // : |
+ false, // ; |
+ true, // < |
+ false, // = |
+ true, // > |
+ true, // ? |
+ false, // @ |
+ false, // A |
+ false, // B |
+ false, // C |
+ false, // D |
+ false, // E |
+ false, // F |
+ false, // G |
+ false, // H |
+ false, // I |
+ false, // J |
+ false, // K |
+ false, // L |
+ false, // M |
+ false, // N |
+ false, // O |
+ false, // P |
+ false, // Q |
+ false, // R |
+ false, // S |
+ false, // T |
+ false, // U |
+ false, // V |
+ false, // W |
+ false, // X |
+ false, // Y |
+ false, // Z |
+ true, // [ |
+ true, // \ |
+ true, // ] |
+ true, // ^ |
+ false, // _ |
+ true, // ` |
+ false, // a |
+ false, // b |
+ false, // c |
+ false, // d |
+ false, // e |
+ false, // f |
+ false, // g |
+ false, // h |
+ false, // i |
+ false, // j |
+ false, // k |
+ false, // l |
+ false, // m |
+ false, // n |
+ false, // o |
+ false, // p |
+ false, // q |
+ false, // r |
+ false, // s |
+ false, // t |
+ false, // u |
+ false, // v |
+ false, // w |
+ false, // x |
+ false, // y |
+ false, // z |
+ true, // { |
+ true, // | |
+ true, // } |
+ false, // ~ |
+ true, // DEL |
]; |
-_parsePackagesFile(SendPort sp, |
- bool traceLoading, |
- Uri packagesFile, |
- List<int> data) { |
+_parsePackagesFile( |
+ SendPort sp, bool traceLoading, Uri packagesFile, List<int> data) { |
// The first entry contains the location of the identified .packages file |
// instead of a mapping. |
var result = [packagesFile.toString(), null]; |
@@ -654,8 +667,9 @@ _parsePackagesFile(SendPort sp, |
// the characters. |
nonDot = nonDot || (char != _DOT); |
invalidPackageName = invalidPackageName || |
- (char < _SPACE) || (char > _DEL) || |
- _invalidPackageNameChars[char - _SPACE]; |
+ (char < _SPACE) || |
+ (char > _DEL) || |
+ _invalidPackageNameChars[char - _SPACE]; |
} |
} |
// Identify end of line. |
@@ -669,7 +683,7 @@ _parsePackagesFile(SendPort sp, |
if (data[start] == _HASH) { |
if (traceLoading) { |
_log("Skipping comment in $packagesFile:\n" |
- "${new String.fromCharCodes(data, start, end)}"); |
+ "${new String.fromCharCodes(data, start, end)}"); |
} |
continue; |
} |
@@ -679,10 +693,10 @@ _parsePackagesFile(SendPort sp, |
var line = new String.fromCharCodes(data, start, end); |
if (traceLoading) { |
_log("Line starts with ':' in $packagesFile:\n" |
- "$line"); |
+ "$line"); |
} |
sp.send("Missing package name in $packagesFile:\n" |
- "$line"); |
+ "$line"); |
return; |
} |
@@ -691,10 +705,10 @@ _parsePackagesFile(SendPort sp, |
var line = new String.fromCharCodes(data, start, end); |
if (traceLoading) { |
_log("Line has no ':' in $packagesFile:\n" |
- "$line"); |
+ "$line"); |
} |
sp.send("Missing ':' separator in $packagesFile:\n" |
- "$line"); |
+ "$line"); |
return; |
} |
@@ -707,7 +721,7 @@ _parsePackagesFile(SendPort sp, |
_log("Invalid package name $packageName in $packagesFile"); |
} |
sp.send("Invalid package name '$packageName' in $packagesFile:\n" |
- "$line"); |
+ "$line"); |
return; |
} |
@@ -741,7 +755,7 @@ _loadPackagesFile(SendPort sp, bool traceLoading, Uri packagesFile) async { |
var data = await new File.fromUri(packagesFile).readAsBytes(); |
if (traceLoading) { |
_log("Loaded packages file from $packagesFile:\n" |
- "${new String.fromCharCodes(data)}"); |
+ "${new String.fromCharCodes(data)}"); |
} |
_parsePackagesFile(sp, traceLoading, packagesFile, data); |
} catch (e, s) { |
@@ -812,9 +826,8 @@ _findPackagesFile(SendPort sp, bool traceLoading, Uri base) async { |
} |
} |
-Future<bool> _loadHttpPackagesFile(SendPort sp, |
- bool traceLoading, |
- Uri resource) async { |
+Future<bool> _loadHttpPackagesFile( |
+ SendPort sp, bool traceLoading, Uri resource) async { |
try { |
if (_httpClient == null) { |
_httpClient = new HttpClient()..maxConnectionsPerHost = 6; |
@@ -837,7 +850,7 @@ Future<bool> _loadHttpPackagesFile(SendPort sp, |
var data = builder.takeBytes(); |
if (traceLoading) { |
_log("Loaded packages file from '$resource':\n" |
- "${new String.fromCharCodes(data)}"); |
+ "${new String.fromCharCodes(data)}"); |
} |
_parsePackagesFile(sp, traceLoading, resource, data); |
} catch (e, s) { |
@@ -849,7 +862,7 @@ Future<bool> _loadHttpPackagesFile(SendPort sp, |
return false; |
} |
-_loadPackagesData(sp, traceLoading, resource){ |
+_loadPackagesData(sp, traceLoading, resource) { |
try { |
var data = resource.data; |
var mime = data.mimeType; |
@@ -857,8 +870,7 @@ _loadPackagesData(sp, traceLoading, resource){ |
throw "MIME-type must be text/plain: $mime given."; |
} |
var charset = data.charset; |
- if ((charset != "utf-8") && |
- (charset != "US-ASCII")) { |
+ if ((charset != "utf-8") && (charset != "US-ASCII")) { |
// The C++ portion of the embedder assumes UTF-8. |
throw "Only utf-8 or US-ASCII encodings are supported: $charset given."; |
} |
@@ -872,10 +884,8 @@ _loadPackagesData(sp, traceLoading, resource){ |
// report it's return value. This could be refactored so that it returns it's |
// value and the caller could wait on the future rather than a message on |
// SendPort. |
-_handlePackagesRequest(SendPort sp, |
- bool traceLoading, |
- int tag, |
- Uri resource) async { |
+_handlePackagesRequest( |
+ SendPort sp, bool traceLoading, int tag, Uri resource) async { |
try { |
if (tag == -1) { |
if (resource.scheme == '' || resource.scheme == 'file') { |
@@ -892,7 +902,7 @@ _handlePackagesRequest(SendPort sp, |
} |
} else { |
sp.send("Unsupported scheme used to locate .packages file: " |
- "'$resource'."); |
+ "'$resource'."); |
} |
} else if (tag == -2) { |
if (traceLoading) { |
@@ -914,7 +924,7 @@ _handlePackagesRequest(SendPort sp, |
_loadPackagesData(sp, traceLoading, resource); |
} else { |
sp.send("Unknown scheme (${resource.scheme}) for package file at " |
- "'$resource'."); |
+ "'$resource'."); |
} |
} else { |
sp.send("Unknown packages request tag: $tag for '$resource'."); |
@@ -942,21 +952,21 @@ void shutdownLoaders() { |
} |
// See Dart_LibraryTag in dart_api.h |
-const _Dart_kCanonicalizeUrl = 0; // Canonicalize the URL. |
-const _Dart_kScriptTag = 1; // Load the root script. |
-const _Dart_kSourceTag = 2; // Load a part source. |
-const _Dart_kImportTag = 3; // Import a library. |
+const _Dart_kCanonicalizeUrl = 0; // Canonicalize the URL. |
+const _Dart_kScriptTag = 1; // Load the root script. |
+const _Dart_kSourceTag = 2; // Load a part source. |
+const _Dart_kImportTag = 3; // Import a library. |
// Extra requests. Keep these in sync between loader.dart and builtin.dart. |
-const _Dart_kInitLoader = 4; // Initialize the loader. |
-const _Dart_kResourceLoad = 5; // Resource class support. |
-const _Dart_kGetPackageRootUri = 6; // Uri of the packages/ directory. |
-const _Dart_kGetPackageConfigUri = 7; // Uri of the .packages file. |
-const _Dart_kResolvePackageUri = 8; // Resolve a package: uri. |
+const _Dart_kInitLoader = 4; // Initialize the loader. |
+const _Dart_kResourceLoad = 5; // Resource class support. |
+const _Dart_kGetPackageRootUri = 6; // Uri of the packages/ directory. |
+const _Dart_kGetPackageConfigUri = 7; // Uri of the .packages file. |
+const _Dart_kResolvePackageUri = 8; // Resolve a package: uri. |
// Extra requests. Keep these in sync between loader.dart and loader.cc. |
-const _Dart_kImportExtension = 9; // Import a dart-ext: file. |
-const _Dart_kResolveAsFilePath = 10; // Resolve uri to file path. |
+const _Dart_kImportExtension = 9; // Import a dart-ext: file. |
+const _Dart_kResolveAsFilePath = 10; // Resolve uri to file path. |
// External entry point for loader requests. |
_processLoadRequest(request) { |
@@ -983,74 +993,61 @@ _processLoadRequest(request) { |
// Handle the request specified in the tag. |
switch (tag) { |
- case _Dart_kScriptTag: { |
- Uri uri = Uri.parse(request[4]); |
- // Remember the root script. |
- loaderState._rootScript = uri; |
- _handleResourceRequest(loaderState, |
- sp, |
- traceLoading, |
- tag, |
- uri, |
- uri, |
- null); |
- } |
- break; |
+ case _Dart_kScriptTag: |
+ { |
+ Uri uri = Uri.parse(request[4]); |
+ // Remember the root script. |
+ loaderState._rootScript = uri; |
+ _handleResourceRequest( |
+ loaderState, sp, traceLoading, tag, uri, uri, null); |
+ } |
+ break; |
case _Dart_kSourceTag: |
- case _Dart_kImportTag: { |
- // The url of the file being loaded. |
- var uri = Uri.parse(request[4]); |
- // The library that is importing/parting the file. |
- String libraryUrl = request[5]; |
- _handleResourceRequest(loaderState, |
- sp, |
- traceLoading, |
- tag, |
- uri, |
- uri, |
- libraryUrl); |
- } |
- break; |
- case _Dart_kInitLoader: { |
- String packageRoot = request[4]; |
- String packagesFile = request[5]; |
- String workingDirectory = request[6]; |
- String rootScript = request[7]; |
- if (loaderState == null) { |
- loaderState = new IsolateLoaderState(isolateId); |
- isolateEmbedderData[isolateId] = loaderState; |
- loaderState.init(packageRoot, |
- packagesFile, |
- workingDirectory, |
- rootScript); |
+ case _Dart_kImportTag: |
+ { |
+ // The url of the file being loaded. |
+ var uri = Uri.parse(request[4]); |
+ // The library that is importing/parting the file. |
+ String libraryUrl = request[5]; |
+ _handleResourceRequest( |
+ loaderState, sp, traceLoading, tag, uri, uri, libraryUrl); |
} |
- loaderState.sp = sp; |
- assert(isolateEmbedderData[isolateId] == loaderState); |
- } |
- break; |
- case _Dart_kResourceLoad: { |
- Uri uri = Uri.parse(request[4]); |
- _handleResourceRequest(loaderState, |
- sp, |
- traceLoading, |
- tag, |
- uri, |
- uri, |
- null); |
- } |
- break; |
+ break; |
+ case _Dart_kInitLoader: |
+ { |
+ String packageRoot = request[4]; |
+ String packagesFile = request[5]; |
+ String workingDirectory = request[6]; |
+ String rootScript = request[7]; |
+ if (loaderState == null) { |
+ loaderState = new IsolateLoaderState(isolateId); |
+ isolateEmbedderData[isolateId] = loaderState; |
+ loaderState.init( |
+ packageRoot, packagesFile, workingDirectory, rootScript); |
+ } |
+ loaderState.sp = sp; |
+ assert(isolateEmbedderData[isolateId] == loaderState); |
+ } |
+ break; |
+ case _Dart_kResourceLoad: |
+ { |
+ Uri uri = Uri.parse(request[4]); |
+ _handleResourceRequest( |
+ loaderState, sp, traceLoading, tag, uri, uri, null); |
+ } |
+ break; |
case _Dart_kGetPackageRootUri: |
loaderState._triggerPackageResolution(() { |
// Respond with the package root (if any) after package resolution. |
sp.send(loaderState._packageRoot); |
}); |
- break; |
+ break; |
case _Dart_kGetPackageConfigUri: |
loaderState._triggerPackageResolution(() { |
// Respond with the packages config (if any) after package resolution. |
sp.send(loaderState._packageConfig); |
}); |
- break; |
+ break; |
case _Dart_kResolvePackageUri: |
Uri uri = Uri.parse(request[4]); |
loaderState._triggerPackageResolution(() { |
@@ -1066,7 +1063,7 @@ _processLoadRequest(request) { |
} |
sp.send(resolvedUri); |
}); |
- break; |
+ break; |
case _Dart_kImportExtension: |
Uri uri = Uri.parse(request[4]); |
String libraryUri = request[5]; |
@@ -1082,15 +1079,14 @@ _processLoadRequest(request) { |
switch (pathUri.scheme) { |
case '': |
case 'file': |
- _sendExtensionImportResponse(sp, uri, libraryUri, |
- pathUri.toFilePath()); |
- break; |
+ _sendExtensionImportResponse( |
+ sp, uri, libraryUri, pathUri.toFilePath()); |
+ break; |
case 'data': |
case 'http': |
case 'https': |
- _sendExtensionImportResponse(sp, uri, libraryUri, |
- pathUri.toString()); |
- break; |
+ _sendExtensionImportResponse(sp, uri, libraryUri, pathUri.toString()); |
+ break; |
case 'package': |
// Start package resolution. |
loaderState._triggerPackageResolution(() { |
@@ -1104,20 +1100,18 @@ _processLoadRequest(request) { |
} |
resolvedUri = null; |
} |
- _sendExtensionImportResponse(sp, |
- uri, |
- libraryUri, |
- resolvedUri.toString()); |
+ _sendExtensionImportResponse( |
+ sp, uri, libraryUri, resolvedUri.toString()); |
}); |
- break; |
+ break; |
default: |
if (traceLoading) { |
_log('Unknown scheme (${pathUri.scheme}) in $pathUri.'); |
} |
_sendExtensionImportResponse(sp, uri, libraryUri, null); |
- break; |
+ break; |
} |
- break; |
+ break; |
case _Dart_kResolveAsFilePath: |
String uri = request[4]; |
Uri resolvedUri = Uri.parse(_sanitizeWindowsPath(uri)); |
@@ -1136,7 +1130,7 @@ _processLoadRequest(request) { |
sp.send(msg); |
} else { |
throw "Cannot resolve scheme (${resolvedUri.scheme}) to file path" |
- " for $resolvedUri"; |
+ " for $resolvedUri"; |
} |
} catch (e) { |
var msg = new List(5); |
@@ -1147,7 +1141,7 @@ _processLoadRequest(request) { |
msg[4] = e.toString(); |
sp.send(msg); |
} |
- break; |
+ break; |
default: |
_log('Unknown loader request tag=$tag from $isolateId'); |
} |