Properly lower ImplicitClassReceiver

This commit is contained in:
Michael Bogdanov
2016-10-13 10:21:14 +03:00
committed by Dmitry Petrov
parent a93f929615
commit 20c4f47253
8 changed files with 133 additions and 2 deletions
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.psi.psiUtil.endOffset
import org.jetbrains.kotlin.psi.psiUtil.startOffset
import org.jetbrains.kotlin.psi2ir.intermediate.*
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.calls.callResolverUtil.getSuperCallExpression
import org.jetbrains.kotlin.resolve.calls.callUtil.isSafeCall
import org.jetbrains.kotlin.resolve.calls.model.*
@@ -42,8 +43,17 @@ fun StatementGenerator.generateReceiver(ktDefaultElement: KtElement, receiver: R
}
val receiverExpression = when (receiver) {
is ImplicitClassReceiver ->
IrGetValueImpl(ktDefaultElement.startOffset, ktDefaultElement.startOffset, receiver.classDescriptor.thisAsReceiverParameter)
is ImplicitClassReceiver -> {
if (receiver.classDescriptor.kind.isSingleton &&
this.scopeOwner != receiver.classDescriptor && //For anonymous initializers
this.scopeOwner.containingDeclaration != receiver.classDescriptor) {
IrGetObjectValueImpl(ktDefaultElement.startOffset, ktDefaultElement.endOffset, receiver.type,
receiver.classDescriptor)
}
else {
IrGetValueImpl(ktDefaultElement.startOffset, ktDefaultElement.endOffset, receiver.classDescriptor.thisAsReceiverParameter)
}
}
is ThisClassReceiver ->
generateThisOrSuperReceiver(receiver, receiver.classDescriptor)
is SuperCallReceiverValue ->