diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/MutableClosure.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/MutableClosure.java index c56a0a19860..ff362a6b019 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/MutableClosure.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/MutableClosure.java @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.codegen.binding; import com.intellij.openapi.util.Pair; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.codegen.StackValue; import org.jetbrains.kotlin.codegen.context.EnclosedValueDescriptor; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.types.KotlinType; @@ -137,7 +138,7 @@ public final class MutableClosure implements CalculatedClosure { isSuspendLambda = true; } - public void recordField(String name, Type type) { + private void recordField(String name, Type type) { if (recordedFields == null) { recordedFields = new LinkedList>(); } @@ -145,6 +146,8 @@ public final class MutableClosure implements CalculatedClosure { } public void captureVariable(EnclosedValueDescriptor value) { + recordField(value.getFieldName(), value.getType()); + if (captureVariables == null) { captureVariables = new LinkedHashMap(); } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/context/LocalLookup.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/context/LocalLookup.java index 2a404b23e93..f3ddd692d0b 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/context/LocalLookup.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/context/LocalLookup.java @@ -75,7 +75,6 @@ public interface LocalLookup { enclosedValueDescriptor = new EnclosedValueDescriptor(fieldName, d, innerValue, type); } - closure.recordField(fieldName, type); closure.captureVariable(enclosedValueDescriptor); return innerValue; @@ -115,7 +114,6 @@ public interface LocalLookup { StackValue.StackValueWithSimpleReceiver innerValue = StackValue.field(localType, classType, fieldName, false, StackValue.LOCAL_0, vd); - closure.recordField(fieldName, localType); closure.captureVariable(new EnclosedValueDescriptor(fieldName, d, innerValue, localType)); return innerValue;