Chromium Code Reviews| Index: pkg/compiler/lib/src/js_backend/backend.dart |
| diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart |
| index edb9c57c8bbeb0f564827b137a4ab4a23dd48123..3dc61a43d9c8d4ca078e0aae8fc5932348d27c33 100644 |
| --- a/pkg/compiler/lib/src/js_backend/backend.dart |
| +++ b/pkg/compiler/lib/src/js_backend/backend.dart |
| @@ -63,6 +63,7 @@ class FunctionInlineCache { |
| class JavaScriptBackend extends Backend { |
| static final Uri DART_JS_HELPER = new Uri(scheme: 'dart', path: '_js_helper'); |
| + static final Uri DART_ASYNC = new Uri(scheme: 'dart', path: 'async'); |
|
Johnni Winther
2015/02/02 10:45:10
Not needed (exists on [Compiler]).
sigurdm
2015/02/03 16:59:27
Done
|
| static final Uri DART_INTERCEPTORS = |
| new Uri(scheme: 'dart', path: '_interceptors'); |
| static final Uri DART_INTERNAL = |
| @@ -122,6 +123,7 @@ class JavaScriptBackend extends Backend { |
| FunctionInlineCache inlineCache = new FunctionInlineCache(); |
| LibraryElement jsHelperLibrary; |
| + LibraryElement asyncLibrary; |
| LibraryElement interceptorsLibrary; |
| LibraryElement foreignLibrary; |
| LibraryElement isolateHelperLibrary; |
| @@ -941,6 +943,7 @@ class JavaScriptBackend extends Backend { |
| Element e = findHelper('boolConversionCheck'); |
| if (e != null) enqueue(world, e, registry); |
| } |
| + |
| if (TRACE_CALLS) { |
| traceHelper = findHelper('traceHelper'); |
| assert(traceHelper != null); |
| @@ -1597,6 +1600,66 @@ class JavaScriptBackend extends Backend { |
| return findHelper("throwCyclicInit"); |
| } |
| + Element getFuture() { |
|
Johnni Winther
2015/02/02 10:45:10
This is [Compiler.futureClass].
sigurdm
2015/02/03 16:59:27
And was not used anymore.
Thanks.
|
| + return asyncLibrary.find("Future"); |
| + } |
| + |
| + Element getThenHelper() { |
| + return findHelper("thenHelper"); |
| + } |
| + |
| + Element getSyncStarYieldStar() { |
| + ClassElement classElement = findHelper("IterationMarker"); |
| + classElement.ensureResolved(compiler); |
| + return classElement.lookupLocalMember("yieldStar"); |
| + } |
| + |
| + Element getYieldSingle() { |
| + ClassElement classElement = findHelper("IterationMarker"); |
| + classElement.ensureResolved(compiler); |
| + return classElement.lookupLocalMember("yieldSingle"); |
| + } |
| + |
| + Element getStreamHelper() { |
| + return findHelper("streamHelper"); |
| + } |
| + |
| + Element getEndOfIteration() { |
| + ClassElement classElement = findHelper("IterationMarker"); |
| + classElement.ensureResolved(compiler); |
| + return classElement.lookupLocalMember("endOfIteration"); |
| + } |
| + |
| + Element getSyncStarIterable() { |
| + ClassElement classElement = findHelper("SyncStarIterable"); |
| + classElement.ensureResolved(compiler); |
| + return classElement; |
| + } |
| + |
| + Element getSyncStarIterableConstructor() { |
| + ClassElement classElement = getSyncStarIterable(); |
| + classElement.ensureResolved(compiler); |
| + return classElement.lookupConstructor(""); |
| + } |
| + |
| + Element getCompleterConstructor() { |
| + ClassElement classElement = find(asyncLibrary, "Completer"); |
| + classElement.ensureResolved(compiler); |
| + return classElement |
| + .lookupConstructor(""); |
| + } |
| + |
| + Element getMakeController() { |
| + return findHelper("makeAsyncStarController"); |
| + } |
| + |
| + Element getStreamIteratorConstructor() { |
| + ClassElement classElement = find(asyncLibrary, "StreamIterator"); |
| + classElement.ensureResolved(compiler); |
| + return classElement |
| + .lookupConstructor(""); |
| + } |
| + |
| bool isNullImplementation(ClassElement cls) { |
| return cls == jsNullClass; |
| } |
| @@ -1696,6 +1759,8 @@ class JavaScriptBackend extends Backend { |
| Uri uri = library.canonicalUri; |
| if (uri == DART_JS_HELPER) { |
| jsHelperLibrary = library; |
| + } else if (uri == DART_ASYNC) { |
| + asyncLibrary = library; |
|
Johnni Winther
2015/02/02 10:45:10
Not needed.
sigurdm
2015/02/03 16:59:27
Done
|
| } else if (uri == DART_INTERNAL) { |
| internalLibrary = library; |
| } else if (uri == DART_INTERCEPTORS) { |
| @@ -2331,6 +2396,26 @@ class JavaScriptBackend extends Backend { |
| String extension = addExtension ? ".part.js" : ""; |
| return "${outName}_$name$extension"; |
| } |
| + |
| + void registerAsyncMarker(FunctionElement element, |
| + Enqueuer enqueuer, |
| + Registry registry) { |
| + if (element.asyncMarker == AsyncMarker.ASYNC) { |
| + enqueue(enqueuer, getThenHelper(), registry); |
| + enqueue(enqueuer, getCompleterConstructor(), registry); |
| + enqueue(enqueuer, getStreamIteratorConstructor(), registry); |
| + } else if (element.asyncMarker == AsyncMarker.SYNC_STAR) { |
| + enqueuer.registerInstantiatedClass(getSyncStarIterable(), registry); |
| + enqueue(enqueuer, getSyncStarIterableConstructor(), registry); |
| + enqueue(enqueuer, getEndOfIteration(), registry); |
| + enqueue(enqueuer, getSyncStarYieldStar(), registry); |
| + } else if (element.asyncMarker == AsyncMarker.ASYNC_STAR) { |
| + enqueue(enqueuer, getStreamHelper(), registry); |
| + enqueue(enqueuer, getYieldSingle(), registry); |
| + enqueue(enqueuer, getMakeController(), registry); |
| + enqueue(enqueuer, getStreamIteratorConstructor(), registry); |
| + } |
| + } |
| } |
| class JavaScriptResolutionCallbacks extends ResolutionCallbacks { |