Chromium Code Reviews| 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..2fda52d22a028bee2278fbbd7118b2ea070f3fb5 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,35 +159,39 @@ 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, |
| + [elements.Element element, 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"); |
| - } |
| - } |
| - 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); |
| - }); |
| + |
| + void reportError(String error) { |
| + withCurrentElement(element, () { |
| + reportFatalError( |
| + node, |
| + leg.MessageKind.GENERIC, {'text': 'Error: $error'}); |
| + }); |
| + } |
| + |
| + Uri resourceUri = translateUri(readableUri, node); |
| + // TODO(johnniwinther): Wrap the result from [provider] in a specialized |
| + // [Future] to ensure that we exexute an asynchronous action without setting |
|
ahe
2013/08/06 16:29:17
"we exexute" -> "we never execute"
Johnni Winther
2013/08/27 11:05:00
Done.
|
| + // up the current element of the compiler. |
| + try { |
| + 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) { |
| + reportError(error); |
| + }); |
| + } catch (error) { |
| + reportError(error); |
| + } |
| } |
| /** |
| @@ -273,18 +275,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, |