Index: pkg/compiler/lib/src/kernel/element_map.dart |
diff --git a/pkg/compiler/lib/src/kernel/element_map.dart b/pkg/compiler/lib/src/kernel/element_map.dart |
index 9bad04ee9de5a80a1acafda382e328c4b7ed90de..8f7cc42b88f635f3b24a4a7aec23a01e22ddb343 100644 |
--- a/pkg/compiler/lib/src/kernel/element_map.dart |
+++ b/pkg/compiler/lib/src/kernel/element_map.dart |
@@ -244,6 +244,9 @@ abstract class MemberDefinition { |
enum ClassKind { |
regular, |
closure, |
+ // TODO(efortuna, johnniwinther): Container is not a class, but is |
+ // masquerading as one currently for consistency with the old element model. |
+ container, |
} |
/// A member directly defined by its [ir.Member] node. |
@@ -383,8 +386,12 @@ abstract class KernelToLocalsMap { |
/// Call to notify that [member] is no longer being inlined. |
void leaveInlinedMember(covariant MemberEntity member); |
- /// Returns the [Local] for [node]. |
- Local getLocalVariable(ir.VariableDeclaration node); |
+ /// Returns the [Local] for [node]. If [isClosureCallMethod] is true, this |
+ /// gives the locals map permission to also look one scope higher within the |
+ /// class for the corresponding local. This can happen in the case of free |
+ /// variables involved with a closure class. |
+ Local getLocalVariable(ir.VariableDeclaration node, |
+ {bool isClosureCallMethod = false}); |
/// Returns the [Local] corresponding to the [node]. The node must be either |
/// a [ir.FunctionDeclaration] or [ir.FunctionExpression]. |