Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(570)

Unified Diff: sdk/lib/_internal/compiler/implementation/apiimpl.dart

Issue 17759007: First pass at asynchronous input loading in dart2js. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 abb492c7d4fa80274a3e7047fad46981b241b8d8..32a892d24acc3b6bbec5514e3b55f929061f871d 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,32 +159,29 @@ 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(() {
+
+ return fileReadingTask.measureAsync(() {
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) {
+ return provider(resourceUri).then((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) {
if (node != null) {
- cancel("$exception", node: node);
+ cancel("$error", node: node);
} else {
- reportDiagnostic(null, "$exception", api.Diagnostic.ERROR);
- throw new leg.CompilerCancelledException("$exception");
+ reportDiagnostic(null, "$error", api.Diagnostic.ERROR);
+ throw new leg.CompilerCancelledException("$error");
}
- }
- 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);
+ });
});
}
@@ -257,18 +252,19 @@ class Compiler extends leg.Compiler {
translatePackageUri(Uri uri, tree.Node node) => 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((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,

Powered by Google App Engine
This is Rietveld 408576698