| 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..752bd5006e7ad999e0672ec896c435323c2a4985 100644
|
| --- a/pkg/compiler/lib/src/js_backend/backend.dart
|
| +++ b/pkg/compiler/lib/src/js_backend/backend.dart
|
| @@ -941,6 +941,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 +1598,60 @@ class JavaScriptBackend extends Backend {
|
| return findHelper("throwCyclicInit");
|
| }
|
|
|
| + Element getThenHelper() {
|
| + return findHelper("thenHelper");
|
| + }
|
| +
|
| + Element getYieldStar() {
|
| + 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(compiler.asyncLibrary, "Completer");
|
| + classElement.ensureResolved(compiler);
|
| + return classElement.lookupConstructor("");
|
| + }
|
| +
|
| + Element getMakeController() {
|
| + return findHelper("makeAsyncStarController");
|
| + }
|
| +
|
| + Element getStreamIteratorConstructor() {
|
| + ClassElement classElement = find(compiler.asyncLibrary, "StreamIterator");
|
| + classElement.ensureResolved(compiler);
|
| + return classElement.lookupConstructor("");
|
| + }
|
| +
|
| bool isNullImplementation(ClassElement cls) {
|
| return cls == jsNullClass;
|
| }
|
| @@ -2331,6 +2386,27 @@ 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, getYieldStar(), registry);
|
| + } else if (element.asyncMarker == AsyncMarker.ASYNC_STAR) {
|
| + enqueue(enqueuer, getStreamHelper(), registry);
|
| + enqueue(enqueuer, getYieldSingle(), registry);
|
| + enqueue(enqueuer, getYieldStar(), registry);
|
| + enqueue(enqueuer, getMakeController(), registry);
|
| + enqueue(enqueuer, getStreamIteratorConstructor(), registry);
|
| + }
|
| + }
|
| }
|
|
|
| class JavaScriptResolutionCallbacks extends ResolutionCallbacks {
|
|
|