FunctionCodegen extend GenerationStateAware

This commit is contained in:
Alex Tkachman
2012-08-30 12:18:23 +03:00
parent 02be7ec6f8
commit 7bd88f5031
@@ -31,6 +31,7 @@ import org.jetbrains.jet.codegen.signature.JvmMethodSignature;
import org.jetbrains.jet.codegen.signature.kotlin.JetMethodAnnotationWriter; import org.jetbrains.jet.codegen.signature.kotlin.JetMethodAnnotationWriter;
import org.jetbrains.jet.codegen.signature.kotlin.JetValueParameterAnnotationWriter; import org.jetbrains.jet.codegen.signature.kotlin.JetValueParameterAnnotationWriter;
import org.jetbrains.jet.codegen.state.GenerationState; import org.jetbrains.jet.codegen.state.GenerationState;
import org.jetbrains.jet.codegen.state.GenerationStateAware;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
@@ -56,19 +57,18 @@ import static org.jetbrains.jet.lang.resolve.BindingContextUtils.descriptorToDec
* @author yole * @author yole
* @author alex.tkachman * @author alex.tkachman
*/ */
public class FunctionCodegen { public class FunctionCodegen extends GenerationStateAware {
private final CodegenContext owner; private final CodegenContext owner;
private final ClassBuilder v; private final ClassBuilder v;
private final GenerationState state;
public FunctionCodegen(CodegenContext owner, ClassBuilder v, GenerationState state) { public FunctionCodegen(CodegenContext owner, ClassBuilder v, GenerationState state) {
super(state);
this.owner = owner; this.owner = owner;
this.v = v; this.v = v;
this.state = state;
} }
public void gen(JetNamedFunction f) { public void gen(JetNamedFunction f) {
final SimpleFunctionDescriptor functionDescriptor = state.getBindingContext().get(BindingContext.FUNCTION, f); final SimpleFunctionDescriptor functionDescriptor = bindingContext.get(BindingContext.FUNCTION, f);
assert functionDescriptor != null; assert functionDescriptor != null;
JvmMethodSignature method = JvmMethodSignature method =
state.getTypeMapper().mapToCallableMethod(functionDescriptor, false, owner.getContextKind()) state.getTypeMapper().mapToCallableMethod(functionDescriptor, false, owner.getContextKind())
@@ -306,7 +306,7 @@ public class FunctionCodegen {
mv.visitLocalVariable("this", type.getDescriptor(), null, methodBegin, methodEnd, k++); mv.visitLocalVariable("this", type.getDescriptor(), null, methodBegin, methodEnd, k++);
} }
else if (fun instanceof JetFunctionLiteralExpression || else if (fun instanceof JetFunctionLiteralExpression ||
isLocalFun(state.getBindingContext(), functionDescriptor)) { isLocalFun(bindingContext, functionDescriptor)) {
Type type = state.getTypeMapper().mapType( Type type = state.getTypeMapper().mapType(
context.getThisDescriptor().getDefaultType(), MapTypeMode.VALUE); context.getThisDescriptor().getDefaultType(), MapTypeMode.VALUE);
mv.visitLocalVariable("this", type.getDescriptor(), null, methodBegin, methodEnd, k++); mv.visitLocalVariable("this", type.getDescriptor(), null, methodBegin, methodEnd, k++);
@@ -730,7 +730,7 @@ public class FunctionCodegen {
iv.invokevirtual(internalName, method.getName(), method.getDescriptor()); iv.invokevirtual(internalName, method.getName(), method.getDescriptor());
} }
iv.areturn(method.getReturnType()); iv.areturn(method.getReturnType());
endVisit(mv, "delegate method", descriptorToDeclaration(state.getBindingContext(), functionDescriptor)); endVisit(mv, "delegate method", descriptorToDeclaration(bindingContext, functionDescriptor));
} }
} }
} }