diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/context/EnclosedValueDescriptor.java b/compiler/backend/src/org/jetbrains/jet/codegen/context/EnclosedValueDescriptor.java index 510411820ab..7949c50887f 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/context/EnclosedValueDescriptor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/context/EnclosedValueDescriptor.java @@ -16,11 +16,12 @@ package org.jetbrains.jet.codegen.context; -import org.jetbrains.org.objectweb.asm.Type; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.codegen.ExpressionCodegen; import org.jetbrains.jet.codegen.StackValue; -import org.jetbrains.jet.codegen.state.GenerationState; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.org.objectweb.asm.Type; public final class EnclosedValueDescriptor { private final String fieldName; @@ -28,37 +29,51 @@ public final class EnclosedValueDescriptor { private final StackValue innerValue; private final Type type; - public EnclosedValueDescriptor(String fieldName, DeclarationDescriptor descriptor, StackValue innerValue, Type type) { + public EnclosedValueDescriptor( + @NotNull String fieldName, + @Nullable DeclarationDescriptor descriptor, + @Nullable StackValue innerValue, + @NotNull Type type + ) { this.fieldName = fieldName; this.descriptor = descriptor; this.innerValue = innerValue; this.type = type; } + @NotNull + public String getFieldName() { + return fieldName; + } + + @Nullable public DeclarationDescriptor getDescriptor() { return descriptor; } + @Nullable public StackValue getInnerValue() { return innerValue; } + @NotNull public Type getType() { return type; } - public StackValue getOuterValue(ExpressionCodegen expressionCodegen) { - GenerationState state = expressionCodegen.getState(); + @NotNull + public StackValue getOuterValue(@NotNull ExpressionCodegen codegen) { for (LocalLookup.LocalLookupCase aCase : LocalLookup.LocalLookupCase.values()) { if (aCase.isCase(descriptor)) { - return aCase.outerValue(this, expressionCodegen); + return aCase.outerValue(this, codegen); } } - throw new IllegalStateException(); + throw new IllegalStateException("Can't get outer value in " + codegen + " for " + this); } - public String getFieldName() { - return fieldName; + @Override + public String toString() { + return fieldName + " " + type + " -> " + descriptor; } } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/context/LocalLookup.java b/compiler/backend/src/org/jetbrains/jet/codegen/context/LocalLookup.java index 6170689e924..ff50ad8f182 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/context/LocalLookup.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/context/LocalLookup.java @@ -16,9 +16,9 @@ package org.jetbrains.jet.codegen.context; -import org.jetbrains.jet.codegen.JvmCodegenUtil; -import org.jetbrains.org.objectweb.asm.Type; +import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.codegen.ExpressionCodegen; +import org.jetbrains.jet.codegen.JvmCodegenUtil; import org.jetbrains.jet.codegen.StackValue; import org.jetbrains.jet.codegen.binding.MutableClosure; import org.jetbrains.jet.codegen.state.GenerationState; @@ -26,6 +26,7 @@ import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.types.JetType; +import org.jetbrains.org.objectweb.asm.Type; import static org.jetbrains.jet.codegen.AsmUtil.CAPTURED_RECEIVER_FIELD; import static org.jetbrains.jet.codegen.binding.CodegenBinding.*; @@ -132,8 +133,9 @@ public interface LocalLookup { return innerValue; } + @NotNull @Override - public StackValue outerValue(EnclosedValueDescriptor d, ExpressionCodegen expressionCodegen) { + public StackValue outerValue(@NotNull EnclosedValueDescriptor d, @NotNull ExpressionCodegen codegen) { CallableDescriptor descriptor = (CallableDescriptor) d.getDescriptor(); return StackValue.local(descriptor.getExpectedThisObject() != null ? 1 : 0, d.getType()); } @@ -149,8 +151,9 @@ public interface LocalLookup { Type classType ); - public StackValue outerValue(EnclosedValueDescriptor d, ExpressionCodegen expressionCodegen) { - int idx = expressionCodegen.lookupLocalIndex(d.getDescriptor()); + @NotNull + public StackValue outerValue(@NotNull EnclosedValueDescriptor d, @NotNull ExpressionCodegen codegen) { + int idx = codegen.lookupLocalIndex(d.getDescriptor()); assert idx != -1; return StackValue.local(idx, d.getType()); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/inline/CapturedParamDesc.java b/compiler/backend/src/org/jetbrains/jet/codegen/inline/CapturedParamDesc.java index e05d1bc8490..e8b90a8172e 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/inline/CapturedParamDesc.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/inline/CapturedParamDesc.java @@ -18,47 +18,35 @@ package org.jetbrains.jet.codegen.inline; import org.jetbrains.annotations.NotNull; import org.jetbrains.org.objectweb.asm.Type; -import org.jetbrains.jet.codegen.context.EnclosedValueDescriptor; public class CapturedParamDesc { - private final CapturedParamOwner containingLambda; - private final String fieldName; - private final Type type; - public CapturedParamDesc(@NotNull CapturedParamOwner containingLambda, @NotNull EnclosedValueDescriptor descriptor) { - this.containingLambda = containingLambda; - this.type = descriptor.getType(); - this.fieldName = descriptor.getFieldName(); - } - public CapturedParamDesc(@NotNull CapturedParamOwner containingLambda, @NotNull String fieldName, @NotNull Type type) { this.containingLambda = containingLambda; this.fieldName = fieldName; this.type = type; } - public CapturedParamOwner getContainingLambda() { - return containingLambda; - } - - public String getFieldName() { - return fieldName; - } - - public Type getType() { - return type; - } - - - public static CapturedParamDesc createDesc(@NotNull CapturedParamOwner containingLambdaInfo, @NotNull String fieldName, @NotNull Type type) { - return new CapturedParamDesc(containingLambdaInfo, fieldName, type); - } - @NotNull public String getContainingLambdaName() { return containingLambda.getType().getInternalName(); } + + @NotNull + public String getFieldName() { + return fieldName; + } + + @NotNull + public Type getType() { + return type; + } + + @NotNull + public static CapturedParamDesc createDesc(@NotNull CapturedParamOwner containingLambdaInfo, @NotNull String fieldName, @NotNull Type type) { + return new CapturedParamDesc(containingLambdaInfo, fieldName, type); + } } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/inline/CapturedParamInfo.java b/compiler/backend/src/org/jetbrains/jet/codegen/inline/CapturedParamInfo.java index 8b62ae1686e..0bd8f923b5b 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/inline/CapturedParamInfo.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/inline/CapturedParamInfo.java @@ -73,6 +73,6 @@ public class CapturedParamInfo extends ParameterInfo { @NotNull public String getContainingLambdaName() { - return desc.getContainingLambda().getType().getInternalName(); + return desc.getContainingLambdaName(); } }