| 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 b3ec3fdcffc5efa5829eec55ee70dacb248bd47b..92c86b203a916d2017d615d9cbe3728311efe5d6 100644
|
| --- a/pkg/compiler/lib/src/js_backend/backend.dart
|
| +++ b/pkg/compiler/lib/src/js_backend/backend.dart
|
| @@ -943,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);
|
| @@ -1599,6 +1600,67 @@ 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 getASyncStarController() {
|
| + ClassElement classElement = findHelper("AsyncStarStreamController");
|
| + classElement.ensureResolved(compiler);
|
| + return classElement;
|
| + }
|
| +
|
| + Element getASyncStarControllerConstructor() {
|
| + ClassElement classElement = getASyncStarController();
|
| + return classElement.lookupConstructor("");
|
| + }
|
| +
|
| + Element getStreamIteratorConstructor() {
|
| + ClassElement classElement = find(compiler.asyncLibrary, "StreamIterator");
|
| + classElement.ensureResolved(compiler);
|
| + return classElement.lookupConstructor("");
|
| + }
|
| +
|
| bool isNullImplementation(ClassElement cls) {
|
| return cls == jsNullClass;
|
| }
|
| @@ -2334,6 +2396,28 @@ 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) {
|
| + enqueuer.registerInstantiatedClass(getASyncStarController(), registry);
|
| + enqueue(enqueuer, getStreamHelper(), registry);
|
| + enqueue(enqueuer, getYieldSingle(), registry);
|
| + enqueue(enqueuer, getYieldStar(), registry);
|
| + enqueue(enqueuer, getASyncStarControllerConstructor(), registry);
|
| + enqueue(enqueuer, getStreamIteratorConstructor(), registry);
|
| + }
|
| + }
|
| }
|
|
|
| /// Handling of special annotations for tests.
|
|
|