OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 library builtin; | 5 library builtin; |
6 import 'dart:async'; | 6 import 'dart:async'; |
7 import 'dart:convert'; | 7 import 'dart:convert'; |
8 import 'dart:isolate'; | 8 import 'dart:isolate'; |
9 | 9 |
10 | 10 |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 native "Builtin_AsyncLoadError"; | 343 native "Builtin_AsyncLoadError"; |
344 | 344 |
345 void _loadScript(int tag, String uri, String libraryUri, List<int> data) { | 345 void _loadScript(int tag, String uri, String libraryUri, List<int> data) { |
346 // TODO: Currently a compilation error while loading the script is | 346 // TODO: Currently a compilation error while loading the script is |
347 // fatal for the isolate. _loadScriptCallback() does not return and | 347 // fatal for the isolate. _loadScriptCallback() does not return and |
348 // the _numOutstandingLoadRequests counter remains out of sync. | 348 // the _numOutstandingLoadRequests counter remains out of sync. |
349 _loadScriptCallback(tag, uri, libraryUri, data); | 349 _loadScriptCallback(tag, uri, libraryUri, data); |
350 _finishedOneLoadRequest(uri); | 350 _finishedOneLoadRequest(uri); |
351 } | 351 } |
352 | 352 |
353 void _asyncLoadError(int tag, String uri, String libraryUri, LoadError error) { | 353 void _asyncLoadError(tag, uri, libraryUri, error) { |
354 if (_logBuiltin) { | 354 if (_logBuiltin) { |
355 _print("_asyncLoadError($uri), error: $error"); | 355 _print("_asyncLoadError($uri), error: $error"); |
356 } | 356 } |
357 if (tag == Dart_kImportTag) { | 357 if (tag == Dart_kImportTag) { |
358 // When importing a library, the libraryUri is the imported | 358 // When importing a library, the libraryUri is the imported |
359 // uri. | 359 // uri. |
360 libraryUri = uri; | 360 libraryUri = uri; |
361 } | 361 } |
362 _asyncLoadErrorCallback(uri, libraryUri, error); | 362 _asyncLoadErrorCallback(uri, libraryUri, new LoadError(error.toString())); |
363 _finishedOneLoadRequest(uri); | 363 _finishedOneLoadRequest(uri); |
364 } | 364 } |
365 | 365 |
366 | 366 |
367 _loadDataAsyncLoadPort(int tag, | 367 _loadDataAsyncLoadPort(int tag, |
368 String uri, | 368 String uri, |
369 String libraryUri, | 369 String libraryUri, |
370 Uri resourceUri) { | 370 Uri resourceUri) { |
371 var receivePort = new ReceivePort(); | 371 var receivePort = new ReceivePort(); |
372 receivePort.first.then((dataOrError) { | 372 receivePort.first.then((dataOrError) { |
373 if (dataOrError is List<int>) { | 373 if (dataOrError is List<int>) { |
374 _loadScript(tag, uri, libraryUri, dataOrError); | 374 _loadScript(tag, uri, libraryUri, dataOrError); |
375 } else { | 375 } else { |
376 assert(dataOrError is String); | 376 _asyncLoadError(tag, uri, libraryUri, dataOrError); |
377 var error = new LoadError(dataOrError.toString()); | |
378 _asyncLoadError(tag, uri, libraryUri, error); | |
379 } | 377 } |
380 }).catchError((e) { | 378 }).catchError((e) { |
381 // Wrap inside a LoadError unless we are already propagating a previously | 379 _asyncLoadError(tag, uri, libraryUri, e.toString()); |
382 // seen LoadError. | |
383 var error = (e is LoadError) ? e : new LoadError(e.toString); | |
384 _asyncLoadError(tag, uri, libraryUri, error); | |
385 }); | 380 }); |
386 | 381 |
387 try { | 382 try { |
388 var msg = [receivePort.sendPort, resourceUri.toString()]; | 383 var msg = [receivePort.sendPort, resourceUri.toString()]; |
389 _loadPort.send(msg); | 384 _loadPort.send(msg); |
390 _startingOneLoadRequest(uri); | 385 _startingOneLoadRequest(uri); |
391 } catch (e) { | 386 } catch (e) { |
392 if (_logBuiltin) { | 387 if (_logBuiltin) { |
393 _print("Exception when communicating with service isolate: $e"); | 388 _print("Exception when communicating with service isolate: $e"); |
394 } | 389 } |
395 // Wrap inside a LoadError unless we are already propagating a previously | 390 _asyncLoadError(tag, uri, libraryUri, e.toString()); |
396 // seen LoadError. | |
397 var error = (e is LoadError) ? e : new LoadError(e.toString); | |
398 _asyncLoadError(tag, uri, libraryUri, error); | |
399 receivePort.close(); | 391 receivePort.close(); |
400 } | 392 } |
401 } | 393 } |
402 | 394 |
403 // Asynchronously loads script data through a http[s] or file uri. | 395 // Asynchronously loads script data through a http[s] or file uri. |
404 _loadDataAsync(int tag, String uri, String libraryUri) { | 396 _loadDataAsync(int tag, String uri, String libraryUri) { |
405 if (tag == Dart_kScriptTag) { | 397 if (tag == Dart_kScriptTag) { |
406 uri = _resolveScriptUri(uri); | 398 uri = _resolveScriptUri(uri); |
407 } | 399 } |
408 | 400 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
482 } else { | 474 } else { |
483 name = userUri.substring(index + 1); | 475 name = userUri.substring(index + 1); |
484 path = userUri.substring(0, index + 1); | 476 path = userUri.substring(0, index + 1); |
485 } | 477 } |
486 | 478 |
487 path = _filePathFromUri(path); | 479 path = _filePathFromUri(path); |
488 var filename = _platformExtensionFileName(name); | 480 var filename = _platformExtensionFileName(name); |
489 | 481 |
490 return [path, filename, name]; | 482 return [path, filename, name]; |
491 } | 483 } |
OLD | NEW |