commit | 4c0de8ed89d48a53c91e60a1c47f81b7fe131284 | [log] [tgz] |
---|---|---|
author | Stephen Adams <sra@google.com> | Tue Apr 18 22:24:24 2023 +0000 |
committer | Commit Queue <dart-scoped@luci-project-accounts.iam.gserviceaccount.com> | Tue Apr 18 22:24:24 2023 +0000 |
tree | fe8bd20691c7e792ec10dd3558719bcc5696e79d | |
parent | 7714e67efe61f326498143bb746690152f6ceff9 [diff] |
[dart2js] sync* fixes Change the calling convention of the sync* body to fix bugs and avoid allocations. - Body takes the controlling _SyncStarIterator as a parameter. - `yield` assigns directly to the `_current` field and returns. - `yield*` calls a method on the controlling iterator (rather than returning the iterable). This avoids an allocation to wrap the iterable, a type test to distinguish `yield` from `yield*`, and allows the `get:iterator` call to happen in the dynamic scope of try-catch surrounding the `yield*` to that it will catch any exceptions. - Avoid using IIFE to bind constants just to call the body. - Use a dummy body to avoid the need to testing termination of the body. Tests now passing: co19_2/Language/Statements/Yield_and_Yield_Each/Yield_Each/execution_sync_t05 language_2/sync_star/move_past_end_test language_2/sync_star/sync_star_exception_current_test language_2/sync_star/sync_star_exception_iterator_test language_2/sync_star/sync_star_exception_nested_test language_2/sync_star/sync_star_exception_test Bug: #51992 Change-Id: I397b470e121b8d71242ac28b3130637b78a1d0dc Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/294685 Reviewed-by: Mayank Patke <fishythefish@google.com> Commit-Queue: Stephen Adams <sra@google.com>
Dart is:
Optimized for UI: Develop with a programming language specialized around the needs of user interface creation.
Productive: Make changes iteratively: use hot reload to see the result instantly in your running app.
Fast on all platforms: Compile to ARM & x64 machine code for mobile, desktop, and backend. Or compile to JavaScript for the web.
Dart's flexible compiler technology lets you run Dart code in different ways, depending on your target platform and goals:
Dart Native: For programs targeting devices (mobile, desktop, server, and more), Dart Native includes both a Dart VM with JIT (just-in-time) compilation and an AOT (ahead-of-time) compiler for producing machine code.
Dart Web: For programs targeting the web, Dart Web includes both a development time compiler (dartdevc) and a production time compiler (dart2js).
Dart is free and open source.
See LICENSE and PATENT_GRANT.
Visit dart.dev to learn more about the language, tools, and to find codelabs.
Browse pub.dev for more packages and libraries contributed by the community and the Dart team.
Our API reference documentation is published at api.dart.dev, based on the stable release. (We also publish docs from our beta and dev channels, as well as from the primary development branch).
If you want to build Dart yourself, here is a guide to getting the source, preparing your machine to build the SDK, and building.
There are more documents on our wiki.
The easiest way to contribute to Dart is to file issues.
You can also contribute patches, as described in Contributing.