From 6a6f214b829c7bdbc3582637579939eb33082875 Mon Sep 17 00:00:00 2001 From: Alex Tkachman Date: Thu, 30 Aug 2012 14:04:34 +0300 Subject: [PATCH] got rid of unneeded ReceiverContext --- .../jet/codegen/ExpressionCodegen.java | 2 +- .../jet/codegen/context/ClosureContext.java | 2 +- .../jet/codegen/context/CodegenContext.java | 15 +++++-- .../jet/codegen/context/MethodContext.java | 2 +- .../jet/codegen/context/ReceiverContext.java | 45 ------------------- 5 files changed, 14 insertions(+), 52 deletions(-) delete mode 100644 compiler/backend/src/org/jetbrains/jet/codegen/context/ReceiverContext.java diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index b914af48462..c06d7ab54f5 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1916,7 +1916,7 @@ public class ExpressionCodegen extends JetVisitor implem } private StackValue generateReceiver(DeclarationDescriptor provided) { - if (context.getReceiverDescriptor() == provided) { + if (context.getCallableDescriptorWithReceiver() == provided) { StackValue result = context.getReceiverExpression(typeMapper); return castToRequiredTypeOfInterfaceIfNeeded(result, provided, null); } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/context/ClosureContext.java b/compiler/backend/src/org/jetbrains/jet/codegen/context/ClosureContext.java index 6f875bec795..5682c76b348 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/context/ClosureContext.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/context/ClosureContext.java @@ -28,7 +28,7 @@ import static org.jetbrains.jet.codegen.binding.CodegenBinding.CLOSURE; /** * @author alex.tkachman */ -class ClosureContext extends ReceiverContext { +class ClosureContext extends CodegenContext { private final ClassDescriptor classDescriptor; public ClosureContext( diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/context/CodegenContext.java b/compiler/backend/src/org/jetbrains/jet/codegen/context/CodegenContext.java index 2d52f8598ef..2fdcc47d03e 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/context/CodegenContext.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/context/CodegenContext.java @@ -101,7 +101,14 @@ public abstract class CodegenContext { } } - public CallableDescriptor getReceiverDescriptor() { + /** + * This method returns not null only if context descriptor corresponds to method or function which has receiver + */ + @Nullable public final CallableDescriptor getCallableDescriptorWithReceiver() { + if(contextDescriptor instanceof CallableDescriptor) { + final CallableDescriptor callableDescriptor = (CallableDescriptor) getContextDescriptor(); + return callableDescriptor.getReceiverParameter().exists() ? callableDescriptor : null; + } return null; } @@ -183,7 +190,7 @@ public abstract class CodegenContext { frameMap.enterTemp(OBJECT_TYPE); // 0 slot for this } - CallableDescriptor receiverDescriptor = getReceiverDescriptor(); + CallableDescriptor receiverDescriptor = getCallableDescriptorWithReceiver(); if (receiverDescriptor != null) { Type type = mapper.mapType(receiverDescriptor.getReceiverParameter().getType(), JetTypeMapperMode.VALUE); frameMap.enterTemp(type); // Next slot for receiver @@ -230,8 +237,8 @@ public abstract class CodegenContext { } public StackValue getReceiverExpression(JetTypeMapper typeMapper) { - assert getReceiverDescriptor() != null; - Type asmType = typeMapper.mapType(getReceiverDescriptor().getReceiverParameter().getType(), JetTypeMapperMode.VALUE); + assert getCallableDescriptorWithReceiver() != null; + Type asmType = typeMapper.mapType(getCallableDescriptorWithReceiver().getReceiverParameter().getType(), JetTypeMapperMode.VALUE); return hasThisDescriptor() ? StackValue.local(1, asmType) : StackValue.local(0, asmType); } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/context/MethodContext.java b/compiler/backend/src/org/jetbrains/jet/codegen/context/MethodContext.java index 2161a8e40ea..1b51b1e9a56 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/context/MethodContext.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/context/MethodContext.java @@ -29,7 +29,7 @@ import org.jetbrains.jet.lang.descriptors.PropertyAccessorDescriptor; /** * @author alex.tkachman */ -public class MethodContext extends ReceiverContext { +public class MethodContext extends CodegenContext { public MethodContext( @NotNull FunctionDescriptor contextType, OwnerKind contextKind, diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/context/ReceiverContext.java b/compiler/backend/src/org/jetbrains/jet/codegen/context/ReceiverContext.java deleted file mode 100644 index 1bbbe779322..00000000000 --- a/compiler/backend/src/org/jetbrains/jet/codegen/context/ReceiverContext.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2010-2012 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.codegen.context; - -import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.codegen.OwnerKind; -import org.jetbrains.jet.codegen.binding.MutableClosure; -import org.jetbrains.jet.lang.descriptors.CallableDescriptor; -import org.jetbrains.jet.lang.descriptors.ClassDescriptor; - -/** - * @author alex.tkachman -*/ -abstract class ReceiverContext extends CodegenContext { - public ReceiverContext( - CallableDescriptor contextDescriptor, - OwnerKind contextKind, - CodegenContext parentContext, - @Nullable MutableClosure closure, - ClassDescriptor thisDescriptor, - @Nullable LocalLookup localLookup - ) { - super(contextDescriptor, contextKind, parentContext, closure, thisDescriptor, localLookup); - } - - @Override - public CallableDescriptor getReceiverDescriptor() { - final CallableDescriptor callableDescriptor = (CallableDescriptor) getContextDescriptor(); - return callableDescriptor.getReceiverParameter().exists() ? callableDescriptor : null; - } -}