Removes the Closure.clone() in sync* by adding an additional closure around the rewritten sync* function body. This is a re-worked version of the now reverted: - https://dart-review.googlesource.com/c/sdk/+/136190 - https://dart-review.googlesource.com/c/sdk/+/144948 This CL includes changes from both the above CLs, in addition to: - A new 'ShadowRewriter' transformer to do deep rewriting of shadowed parameters. Previous versions only rewrote the immediate sync* function, missing references in nested rewritten functions. Note: This CL is re-landing largely unchanged since the roll-blocking issues suspected to be caused by this was later attributed to a different set of changes. I have independently re-run all failing external tests to verify them passing for this CL. Bug: https://github.com/dart-lang/sdk/issues/37753 Change-Id: Id1670a93961180e8558d7c7eca65fe7e9115f07b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/145402 Commit-Queue: Clement Skau <cskau@google.com> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Dart Kernel
Dart Kernel is a small high-level language derived from Dart. It is designed for use as an intermediate format for whole-program analysis and transformations, and to be consumed by codegen and execution backends.
The kernel language has an in-memory representation in Dart and can be serialized as binary or text.
Both the kernel language and its implementations are unstable and are under development.
This package contains the Dart part of the implementation and contains:
- A transformable IR for the kernel language
- Serialization of kernel code
Note: The APIs in this package are in an early state; developers should be careful about depending on this package. In particular, there is no semver contract for release versions of this package. Please depend directly on individual versions.
See ast.dart for the in-memory IR, or binary.md for a description of the binary format. For now, the textual format is very ad-hoc and cannot be parsed back in.