Chromium Code Reviews| Index: pkg/kernel/lib/transformations/closure/info.dart |
| diff --git a/pkg/kernel/lib/transformations/closure/info.dart b/pkg/kernel/lib/transformations/closure/info.dart |
| index 408d37c61a7563336ae19f8eae4656ab0d9460d7..8d6645b8edb64e5b91e3a169d3871022972c447d 100644 |
| --- a/pkg/kernel/lib/transformations/closure/info.dart |
| +++ b/pkg/kernel/lib/transformations/closure/info.dart |
| @@ -21,7 +21,8 @@ import '../../ast.dart' |
| TypeParameterType, |
| VariableDeclaration, |
| VariableGet, |
| - VariableSet; |
| + VariableSet, |
| + visitList; |
| import '../../visitor.dart' show RecursiveVisitor; |
| @@ -119,9 +120,19 @@ class ClosureInfo extends RecursiveVisitor { |
| /// the constructor (which is not `null`). It leads to `x` being treated as |
| /// captured, because it's seen as used outside of the function where it is |
| /// declared. In turn, it leads to unnecessary context creation and usage. |
| + /// |
| + /// We also need to visit the parameters to the function node before the |
| + /// initializer list. Since the default [visitChildren] method of |
| + /// [Constructor] will visit initializers first, we manually visit the |
| + /// parameters here. |
| + /// |
| + /// TODO(sjindel): Don't visit the parameters twice. |
|
Dmitry Stefantsov
2017/07/14 00:34:17
DBC: In my still-in-review CL I have a fix for th
|
| + /// |
| beginMember(node, node.function); |
| saveCurrentFunction(() { |
| currentFunction = currentMemberFunction; |
| + visitList(node.function.positionalParameters, this); |
| + visitList(node.function.namedParameters, this); |
| super.visitConstructor(node); |
| }); |
| endMember(); |