Store methodStartLabel in MethodContext

This commit is contained in:
Sergey Mashkov
2013-11-26 17:30:08 +04:00
committed by Andrey Breslav
parent e4382ff95b
commit cfbcbb80f5
2 changed files with 17 additions and 0 deletions
@@ -284,6 +284,9 @@ public class FunctionCodegen extends ParentCodegenAwareImpl {
frameMap.enter(parameter, typeMapper.mapType(parameter)); frameMap.enter(parameter, typeMapper.mapType(parameter));
} }
Label methodEntry = new Label();
mv.visitLabel(methodEntry);
context.setMethodStartLabel(methodEntry);
labelsForSharedVars.putAll(createSharedVarsForParameters(mv, functionDescriptor, frameMap)); labelsForSharedVars.putAll(createSharedVarsForParameters(mv, functionDescriptor, frameMap));
if (!JetTypeMapper.isAccessor(functionDescriptor)) { if (!JetTypeMapper.isAccessor(functionDescriptor)) {
@@ -18,17 +18,21 @@ package org.jetbrains.jet.codegen.context;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.asm4.Label;
import org.jetbrains.jet.codegen.binding.MutableClosure; import org.jetbrains.jet.codegen.binding.MutableClosure;
import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants; import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants;
import org.jetbrains.jet.codegen.OwnerKind; import org.jetbrains.jet.codegen.OwnerKind;
import org.jetbrains.jet.codegen.StackValue; import org.jetbrains.jet.codegen.StackValue;
import org.jetbrains.jet.codegen.state.GenerationState; import org.jetbrains.jet.codegen.state.GenerationState;
import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.PropertyAccessorDescriptor; import org.jetbrains.jet.lang.descriptors.PropertyAccessorDescriptor;
public class MethodContext extends CodegenContext { public class MethodContext extends CodegenContext {
private Label methodStartLabel;
public MethodContext( public MethodContext(
@NotNull FunctionDescriptor contextType, @NotNull FunctionDescriptor contextType,
@NotNull OwnerKind contextKind, @NotNull OwnerKind contextKind,
@@ -71,8 +75,18 @@ public class MethodContext extends CodegenContext {
return getParentContext().getOuterExpression(prefix, false); return getParentContext().getOuterExpression(prefix, false);
} }
@Nullable
public Label getMethodStartLabel() {
return methodStartLabel;
}
public void setMethodStartLabel(@NotNull Label methodStartLabel) {
this.methodStartLabel = methodStartLabel;
}
@Override @Override
public String toString() { public String toString() {
return "Method: " + getContextDescriptor(); return "Method: " + getContextDescriptor();
} }
} }