Handle failure of 'on T catch' clauses properly.

'on T catch' clauses are translated into if/else with explicit type
tests.  If all the tests fail the exception was thrown again, losing
the stack trace from the original exception.

Instead, use an explicit application of the error continuation (which
we already know there's an await).  This will either be a direct call
to Completer.completeError with two arguments, or a call to a local
catch handler function with two arguments.
1 file changed
tree: 06e5a2153a798faecd3f243a59a61d7999108010
  1. bin/
  2. lib/
  3. runtime/
  4. test/
  5. .gitignore
  6. AUTHORS
  7. LICENSE
  8. pubspec.yaml
  9. README.md
README.md

async-await transformer

A prototype (and in progress) implementation of async/await in Dart, via CPS translation.

This transformer is useful for trying async/await with dart2js. The Dart VM natively supports async and await. If you are writing Dart code that runs only in the VM, you do not need this transformer.

How to use

Add this to your pubspec.yaml file:

dependencies:
  async_await:
    git: https://github.com/dart-lang/async_await.git
transformers:
- async_await

Import dart:async in your Dart file:

import 'dart:async';

What works

  • async
  • await
  • await for

What doesn't yet work

See also the open issues.

  • Stack traces are not according to the spec