Skip to content

Commit ed0fb24

Browse files
fishythefishCommit Queue
authored and
Commit Queue
committed
[dart2js] Sequence async_lowering and await_lowering correctly.
In phase 1, we apply a kernel transformation to the AST we get from the CFE. Although there is only one actual Transformer, it applies multiple logically separate lowerings. In most cases, these lowerings are independent and operate on distinct parts of the AST, so they "commute" and no special care must be taken to ensure they're applied in the right order. In this case, we have two lowerings which slightly overlap. The async_lowering implements the `simpleAsyncToFuture` canary feature, and await_lowering implements some additional semantics which were recently added to the specification of `await` expressions - see #50601. These lowerings overlap on AwaitExpression nodes. The await_lowering can change the `await`ed expression, while async_lowering simply registers the `await`ed expression for later use. Therefore, the correct sequence seems to be await_lowering, then async_lowering. Change-Id: I5e26ab56271053d69727263d0927266515c12dd6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/322585 Reviewed-by: Nate Biggs <[email protected]> Commit-Queue: Mayank Patke <[email protected]>
1 parent 77d21b8 commit ed0fb24

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

pkg/compiler/lib/src/kernel/transformations/await_lowering.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class AwaitLowering {
1616

1717
AwaitLowering(this._coreTypes);
1818

19-
TreeNode transformAwaitExpression(AwaitExpression node) {
19+
AwaitExpression transformAwaitExpression(AwaitExpression node) {
2020
final runtimeCheckType = node.runtimeCheckType;
2121
if (runtimeCheckType == null) return node;
2222
// [runtimeCheckType] is guaranteed to be `Future<flatten(S)>`.

pkg/compiler/lib/src/kernel/transformations/lowering.dart

+3-2
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,10 @@ class _Lowering extends Transformer {
9797

9898
@override
9999
TreeNode visitAwaitExpression(AwaitExpression expression) {
100-
_asyncLowering?.visitAwaitExpression(expression);
101100
expression.transformChildren(this);
102-
return _awaitLowering.transformAwaitExpression(expression);
101+
final transformed = _awaitLowering.transformAwaitExpression(expression);
102+
_asyncLowering?.visitAwaitExpression(transformed);
103+
return transformed;
103104
}
104105

105106
@override

0 commit comments

Comments
 (0)