Index: sdk/lib/_internal/compiler/implementation/apiimpl.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/apiimpl.dart b/sdk/lib/_internal/compiler/implementation/apiimpl.dart |
index 9f24fc63d2d6ff54a701a543e3dd905a5e346d73..45517137b627953425fcbc06edf582bb6fa58b37 100644 |
--- a/sdk/lib/_internal/compiler/implementation/apiimpl.dart |
+++ b/sdk/lib/_internal/compiler/implementation/apiimpl.dart |
@@ -137,12 +137,10 @@ class Compiler extends leg.Compiler { |
return "lib/$path"; |
} |
- elements.LibraryElement scanBuiltinLibrary(String path) { |
+ Future<elements.LibraryElement> scanBuiltinLibrary(String path) { |
Uri uri = libraryRoot.resolve(lookupLibraryPath(path)); |
Uri canonicalUri = new Uri(scheme: "dart", path: path); |
- elements.LibraryElement library = |
- libraryLoader.loadLibrary(uri, null, canonicalUri); |
- return library; |
+ return libraryLoader.loadLibrary(uri, null, canonicalUri); |
} |
void log(message) { |
@@ -161,34 +159,24 @@ class Compiler extends leg.Compiler { |
/** |
* Reads the script designated by [readableUri]. |
*/ |
- leg.Script readScript(Uri readableUri, [tree.Node node]) { |
+ Future<leg.Script> readScript(Uri readableUri, [tree.Node node]) { |
if (!readableUri.isAbsolute) { |
internalError('Relative uri $readableUri provided to readScript(Uri)', |
node: node); |
} |
- return fileReadingTask.measure(() { |
- Uri resourceUri = translateUri(readableUri, node); |
- String text = ""; |
- try { |
- // TODO(ahe): We expect the future to be complete and call value |
- // directly. In effect, we don't support truly asynchronous API. |
- text = deprecatedFutureValue(provider(resourceUri)); |
- } catch (exception) { |
- if (node != null) { |
- cancel("$exception", node: node); |
- } else { |
- reportError( |
- null, |
- leg.MessageKind.GENERIC, {'text': 'Error: $exception'}); |
- throw new leg.CompilerCancelledException("$exception"); |
- } |
- } |
+ |
+ Uri resourceUri = translateUri(readableUri, node); |
+ return provider(resourceUri).then((String text) { |
SourceFile sourceFile = new SourceFile(resourceUri.toString(), text); |
// We use [readableUri] as the URI for the script since need to preserve |
// the scheme in the script because [Script.uri] is used for resolving |
// relative URIs mentioned in the script. See the comment on |
// [LibraryLoader] for more details. |
return new leg.Script(readableUri, sourceFile); |
+ }).catchError((error) { |
+ reportFatalError( |
+ node, |
+ leg.MessageKind.GENERIC, {'text': 'Error: $error'}); |
}); |
} |
@@ -273,18 +261,19 @@ class Compiler extends leg.Compiler { |
return packageRoot.resolve(uri.path); |
} |
- bool run(Uri uri) { |
+ Future<bool> run(Uri uri) { |
log('Allowed library categories: $allowedLibraryCategories'); |
- bool success = super.run(uri); |
- int cumulated = 0; |
- for (final task in tasks) { |
- cumulated += task.timing; |
- log('${task.name} took ${task.timing}msec'); |
- } |
- int total = totalCompileTime.elapsedMilliseconds; |
- log('Total compile-time ${total}msec;' |
- ' unaccounted ${total - cumulated}msec'); |
- return success; |
+ return super.run(uri).then((bool success) { |
+ int cumulated = 0; |
+ for (final task in tasks) { |
+ cumulated += task.timing; |
+ log('${task.name} took ${task.timing}msec'); |
+ } |
+ int total = totalCompileTime.elapsedMilliseconds; |
+ log('Total compile-time ${total}msec;' |
+ ' unaccounted ${total - cumulated}msec'); |
+ return success; |
+ }); |
} |
void reportDiagnostic(leg.SourceSpan span, String message, |