From c3854e9bd447a22387803f3cb560544e3960f655 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 29 Oct 2012 19:12:26 +0400 Subject: [PATCH] Minor refactoring in delegate codegen --- .../jetbrains/jet/codegen/FunctionCodegen.java | 16 +++++++--------- .../jet/codegen/ImplementationBodyCodegen.java | 5 +++-- .../jetbrains/jet/codegen/PropertyCodegen.java | 6 ++++-- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java index ea691936476..73886cb7f5e 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java @@ -794,16 +794,16 @@ public class FunctionCodegen extends GenerationStateAware { } } - public void genDelegate(FunctionDescriptor functionDescriptor, CallableMemberDescriptor overriddenDescriptor, StackValue field) { - genDelegate(functionDescriptor, overriddenDescriptor, field, + public void genDelegate(FunctionDescriptor functionDescriptor, FunctionDescriptor overriddenDescriptor, StackValue field) { + genDelegate(functionDescriptor, (ClassDescriptor) overriddenDescriptor.getContainingDeclaration(), field, typeMapper.mapSignature(functionDescriptor.getName(), functionDescriptor), - typeMapper.mapSignature(overriddenDescriptor.getName(), (FunctionDescriptor) overriddenDescriptor.getOriginal()) + typeMapper.mapSignature(overriddenDescriptor.getName(), overriddenDescriptor.getOriginal()) ); } public void genDelegate( - CallableMemberDescriptor functionDescriptor, - CallableMemberDescriptor overriddenDescriptor, + FunctionDescriptor functionDescriptor, + ClassDescriptor toClass, StackValue field, JvmMethodSignature jvmDelegateMethodSignature, JvmMethodSignature jvmOverriddenMethodSignature @@ -832,10 +832,8 @@ public class FunctionCodegen extends GenerationStateAware { reg += argTypes[i].getSize(); } - ClassDescriptor classDescriptor = (ClassDescriptor) overriddenDescriptor.getContainingDeclaration(); - String internalName = - state.getTypeMapper().mapType(classDescriptor).getInternalName(); - if (classDescriptor.getKind() == ClassKind.TRAIT) { + String internalName = typeMapper.mapType(toClass).getInternalName(); + if (toClass.getKind() == ClassKind.TRAIT) { iv.invokeinterface(internalName, overriddenMethod.getName(), overriddenMethod.getDescriptor()); } else { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index a1adc329f1d..b90c3d44c8a 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -1542,8 +1542,9 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { propertyCodegen .genDelegate((PropertyDescriptor) declaration, (PropertyDescriptor) overriddenDescriptor, field); } - else if (declaration instanceof SimpleFunctionDescriptor) { - functionCodegen.genDelegate((SimpleFunctionDescriptor) declaration, overriddenDescriptor, field); + else if (declaration instanceof FunctionDescriptor) { + functionCodegen + .genDelegate((FunctionDescriptor) declaration, (FunctionDescriptor) overriddenDescriptor, field); } } } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java index 99750d462ad..3871e4c084e 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java @@ -342,14 +342,16 @@ public class PropertyCodegen extends GenerationStateAware { } public void genDelegate(PropertyDescriptor declaration, PropertyDescriptor overriddenDescriptor, StackValue field) { + ClassDescriptor toClass = (ClassDescriptor) overriddenDescriptor.getContainingDeclaration(); + JvmMethodSignature getterSignature = typeMapper.mapGetterSignature(declaration.getOriginal(), OwnerKind.IMPLEMENTATION).getJvmMethodSignature(); - functionCodegen.genDelegate(declaration, overriddenDescriptor, field, getterSignature, getterSignature); + functionCodegen.genDelegate(declaration.getGetter(), toClass, field, getterSignature, getterSignature); if (declaration.isVar()) { JvmMethodSignature setterSignature = typeMapper.mapSetterSignature(declaration.getOriginal(), OwnerKind.IMPLEMENTATION).getJvmMethodSignature(); - functionCodegen.genDelegate(declaration, overriddenDescriptor, field, setterSignature, setterSignature); + functionCodegen.genDelegate(declaration.getSetter(), toClass, field, setterSignature, setterSignature); } } }