Chromium Code Reviews| Index: pkg/kernel/lib/transformations/closure/converter.dart |
| diff --git a/pkg/kernel/lib/transformations/closure/converter.dart b/pkg/kernel/lib/transformations/closure/converter.dart |
| index 42562b2992eedb5092a7e89d5a3f018ca2704a0b..64f6324a75b862c08b562c06802d054fe6f47255 100644 |
| --- a/pkg/kernel/lib/transformations/closure/converter.dart |
| +++ b/pkg/kernel/lib/transformations/closure/converter.dart |
| @@ -50,6 +50,7 @@ import '../../ast.dart' |
| VariableDeclaration, |
| VariableGet, |
| VariableSet, |
| + VectorCreation, |
| VectorType, |
| transformList; |
| @@ -445,6 +446,11 @@ class ClosureConverter extends Transformer { |
| typeParameters: closureTypeParams, |
| requiredParameterCount: function.requiredParameterCount - 1); |
| + // If we capture type parameters but not regular variables, we still need to |
| + // make a context. |
| + if (capturedTypeVariables[function] != null && accessContext is NullLiteral) |
|
jensj
2017/08/11 06:24:54
https://www.dartlang.org/guides/language/effective
sjindel
2017/08/11 09:21:06
Done.
|
| + accessContext = new VectorCreation(1); |
| + |
| return new ClosureCreation( |
| closedTopLevelFunction, accessContext, closureType, fnTypeArgs); |
| } |
| @@ -740,9 +746,7 @@ class ClosureConverter extends Transformer { |
| /// Creates copies of the type variables in [original] and returns a |
| /// substitution that can be passed to [substitute] to substitute all uses of |
| - /// [original] with their copies. Additionally returns a list of new type |
| - /// parameters to prefix to the enclosing function's type parameters and the |
| - /// arguments to be passed for those parameters. |
| + /// [original] with their copies. |
| /// |
| Map<TypeParameter, DartType> copyTypeVariables( |
| Iterable<TypeParameter> original) { |