| Index: pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| index 990970ed9756a34b1e3c4cc267466de172bd6e2e..0663f0b757e46ba26b15c5b98d046a37bbc65c69 100644
|
| --- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| +++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| @@ -2299,7 +2299,25 @@ class JsKernelToElementMap extends KernelToElementMapBase
|
| member,
|
| cls,
|
| memberMap,
|
| + localsMap.getLocalVariable(variable),
|
| variable,
|
| + variable.isConst,
|
| + !(variable.isFinal || variable.isConst),
|
| + boxedCapturedVariables,
|
| + fieldNumber,
|
| + info.capturedVariablesAccessor,
|
| + localsMap);
|
| + fieldNumber++;
|
| + }
|
| + if (info.thisUsedAsFreeVariable) {
|
| + _constructClosureField(
|
| + member,
|
| + cls,
|
| + memberMap,
|
| + cls.thisLocal,
|
| + getMemberDefinition(member).node,
|
| + true,
|
| + false,
|
| boxedCapturedVariables,
|
| fieldNumber,
|
| info.capturedVariablesAccessor,
|
| @@ -2327,28 +2345,30 @@ class JsKernelToElementMap extends KernelToElementMapBase
|
| MemberEntity member,
|
| KernelClosureClass cls,
|
| Map<String, MemberEntity> memberMap,
|
| - ir.VariableDeclaration variable,
|
| + Local capturedLocal,
|
| + ir.TreeNode sourceNode,
|
| + bool isConst,
|
| + bool isAssignable,
|
| Map<Local, JRecordField> boxedCapturedVariables,
|
| int fieldNumber,
|
| NodeBox box,
|
| KernelToLocalsMap localsMap) {
|
| - // NOTE: This construction order may be slightly different than the
|
| + // NOTE: This construction *order* may be slightly different than the
|
| // old Element version. The old version did all the boxed items and then
|
| // all the others.
|
| - Local capturedLocal = localsMap.getLocalVariable(variable);
|
| JRecordField field = boxedCapturedVariables[capturedLocal];
|
| FieldEntity closureField = new JClosureField(
|
| _getClosureVariableName(capturedLocal.name, fieldNumber),
|
| _memberData.length,
|
| cls,
|
| - variable.isConst,
|
| - variable.isFinal || variable.isConst);
|
| + isConst,
|
| + isAssignable);
|
| _memberList.add(closureField);
|
| _memberData.add(new ClosureFieldData(new ClosureMemberDefinition(
|
| cls.localToFieldMap[capturedLocal],
|
| - computeSourceSpanFromTreeNode(variable),
|
| + computeSourceSpanFromTreeNode(sourceNode),
|
| MemberKind.closureField,
|
| - variable)));
|
| + sourceNode)));
|
| memberMap[closureField.name] = closureField;
|
| if (boxedCapturedVariables.containsKey(capturedLocal)) {
|
| cls.localToFieldMap[field.box] = closureField;
|
|
|