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

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: Updated cf. comments Created 7 years, 3 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
« no previous file with comments | « sdk/lib/_internal/compiler/compiler.dart ('k') | sdk/lib/_internal/compiler/implementation/compiler.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 b15631a731f36759687f7d903c369a7699cb3e02..d211e9415c0895c2bf0ab1d6037ae8ef0fa19dbe 100644
--- a/sdk/lib/_internal/compiler/implementation/apiimpl.dart
+++ b/sdk/lib/_internal/compiler/implementation/apiimpl.dart
@@ -133,12 +133,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) {
@@ -157,30 +155,37 @@ 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) {
+
+ // TODO(johnniwinther): Add [:report(..., {Element element}):] to
+ // report methods in Compiler.
+ void reportReadError(String exception) {
+ withCurrentElement(element, () {
reportError(node,
leg.MessageKind.READ_SCRIPT_ERROR,
{'uri': readableUri, 'exception': exception});
- return null;
- }
+ });
+ }
+
+ Uri resourceUri = translateUri(readableUri, node);
+ // TODO(johnniwinther): Wrap the result from [provider] in a specialized
+ // [Future] to ensure that we never execute an asynchronous action without setting
+ // up the current element of the compiler.
+ return new Future.sync(() => 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) {
+ reportReadError(error);
+ return null;
});
}
@@ -254,18 +259,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,
« no previous file with comments | « sdk/lib/_internal/compiler/compiler.dart ('k') | sdk/lib/_internal/compiler/implementation/compiler.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698