2359f4dc68
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>