Psi2Ir: make most declarations internal, remove unused
The main motivation is to avoid pollution in autocompletion in IDE, and avoid clashes for some common names. A lot of stuff was declared public seemingly by accident. It is only used, and can only be meaningfully used, from within the psi2ir module.
This commit is contained in:
committed by
Space Team
parent
bd3eb81aee
commit
f91e1fa7fd
@@ -33,13 +33,13 @@ import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
|||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.TypeUtils
|
import org.jetbrains.kotlin.types.TypeUtils
|
||||||
|
|
||||||
fun KotlinType.containsNull() =
|
internal fun KotlinType.containsNull(): Boolean =
|
||||||
TypeUtils.isNullableType(this)
|
TypeUtils.isNullableType(this)
|
||||||
|
|
||||||
fun KtElement.deparenthesize(): KtElement =
|
fun KtElement.deparenthesize(): KtElement =
|
||||||
if (this is KtExpression) KtPsiUtil.safeDeparenthesize(this) else this
|
if (this is KtExpression) KtPsiUtil.safeDeparenthesize(this) else this
|
||||||
|
|
||||||
fun ResolvedCall<*>.isValueArgumentReorderingRequired(): Boolean {
|
internal fun ResolvedCall<*>.isValueArgumentReorderingRequired(): Boolean {
|
||||||
var lastValueParameterIndex = -1
|
var lastValueParameterIndex = -1
|
||||||
for (valueArgument in call.valueArguments) {
|
for (valueArgument in call.valueArguments) {
|
||||||
val argumentMapping =
|
val argumentMapping =
|
||||||
@@ -53,7 +53,7 @@ fun ResolvedCall<*>.isValueArgumentReorderingRequired(): Boolean {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
fun KtSecondaryConstructor.isConstructorDelegatingToSuper(bindingContext: BindingContext): Boolean {
|
internal fun KtSecondaryConstructor.isConstructorDelegatingToSuper(bindingContext: BindingContext): Boolean {
|
||||||
val constructorDescriptor = bindingContext.get(BindingContext.CONSTRUCTOR, this) ?: return false
|
val constructorDescriptor = bindingContext.get(BindingContext.CONSTRUCTOR, this) ?: return false
|
||||||
val delegatingResolvedCall = getDelegationCall().getResolvedCall(bindingContext)
|
val delegatingResolvedCall = getDelegationCall().getResolvedCall(bindingContext)
|
||||||
return if (delegatingResolvedCall != null) {
|
return if (delegatingResolvedCall != null) {
|
||||||
@@ -68,13 +68,13 @@ fun KtSecondaryConstructor.isConstructorDelegatingToSuper(bindingContext: Bindin
|
|||||||
fun MemberScope.findSingleFunction(name: Name): FunctionDescriptor =
|
fun MemberScope.findSingleFunction(name: Name): FunctionDescriptor =
|
||||||
getContributedFunctions(name, NoLookupLocation.FROM_BACKEND).single()
|
getContributedFunctions(name, NoLookupLocation.FROM_BACKEND).single()
|
||||||
|
|
||||||
val PsiElement?.startOffsetOrUndefined get() = this?.startOffsetSkippingComments ?: UNDEFINED_OFFSET
|
internal val PsiElement?.startOffsetOrUndefined get() = this?.startOffsetSkippingComments ?: UNDEFINED_OFFSET
|
||||||
val PsiElement?.endOffsetOrUndefined get() = this?.endOffset ?: UNDEFINED_OFFSET
|
internal val PsiElement?.endOffsetOrUndefined get() = this?.endOffset ?: UNDEFINED_OFFSET
|
||||||
|
|
||||||
val PropertyDescriptor.unwrappedGetMethod: FunctionDescriptor?
|
internal val PropertyDescriptor.unwrappedGetMethod: FunctionDescriptor?
|
||||||
get() = if (this is SyntheticPropertyDescriptor) this.getMethod else getter
|
get() = if (this is SyntheticPropertyDescriptor) this.getMethod else getter
|
||||||
|
|
||||||
val PropertyDescriptor.unwrappedSetMethod: FunctionDescriptor?
|
internal val PropertyDescriptor.unwrappedSetMethod: FunctionDescriptor?
|
||||||
get() = if (this is SyntheticPropertyDescriptor) this.setMethod else setter
|
get() = if (this is SyntheticPropertyDescriptor) this.setMethod else setter
|
||||||
|
|
||||||
// Only works for descriptors of Java fields.
|
// Only works for descriptors of Java fields.
|
||||||
@@ -90,7 +90,7 @@ internal fun PropertyDescriptor.resolveFakeOverride(): PropertyDescriptor {
|
|||||||
return current
|
return current
|
||||||
}
|
}
|
||||||
|
|
||||||
val KtPureElement?.pureStartOffsetOrUndefined get() = this?.psiOrParent?.startOffsetSkippingComments ?: UNDEFINED_OFFSET
|
internal val KtPureElement?.pureStartOffsetOrUndefined get() = this?.psiOrParent?.startOffsetSkippingComments ?: UNDEFINED_OFFSET
|
||||||
val KtPureElement?.pureEndOffsetOrUndefined get() = this?.psiOrParent?.endOffset ?: UNDEFINED_OFFSET
|
internal val KtPureElement?.pureEndOffsetOrUndefined get() = this?.psiOrParent?.endOffset ?: UNDEFINED_OFFSET
|
||||||
|
|
||||||
fun KtElement.getChildTokenStartOffsetOrNull(tokenSet: TokenSet) = node.findChildByType(tokenSet)?.startOffset
|
internal fun KtElement.getChildTokenStartOffsetOrNull(tokenSet: TokenSet) = node.findChildByType(tokenSet)?.startOffset
|
||||||
|
|||||||
+1
-1
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.ir.expressions.IrCall
|
|||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||||
|
|
||||||
class AnnotationGenerator(context: GeneratorContext) : IrElementVisitorVoid {
|
internal class AnnotationGenerator(context: GeneratorContext) : IrElementVisitorVoid {
|
||||||
private val typeTranslator = context.typeTranslator
|
private val typeTranslator = context.typeTranslator
|
||||||
private val constantValueGenerator = context.constantValueGenerator
|
private val constantValueGenerator = context.constantValueGenerator
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.psi.KtBlockExpression
|
|||||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||||
|
|
||||||
class AnonymousInitializerGenerator(
|
internal class AnonymousInitializerGenerator(
|
||||||
declarationGenerator: DeclarationGenerator
|
declarationGenerator: DeclarationGenerator
|
||||||
) : DeclarationGeneratorExtension(declarationGenerator) {
|
) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||||
|
|
||||||
|
|||||||
+21
-21
@@ -54,10 +54,10 @@ import org.jetbrains.kotlin.util.OperatorNameConventions
|
|||||||
import kotlin.math.max
|
import kotlin.math.max
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
|
|
||||||
fun StatementGenerator.generateReceiverOrNull(ktDefaultElement: KtElement, receiver: ReceiverValue?): IntermediateValue? =
|
internal fun StatementGenerator.generateReceiverOrNull(ktDefaultElement: KtElement, receiver: ReceiverValue?): IntermediateValue? =
|
||||||
receiver?.let { generateReceiver(ktDefaultElement, receiver) }
|
receiver?.let { generateReceiver(ktDefaultElement, receiver) }
|
||||||
|
|
||||||
fun StatementGenerator.generateContextReceiverForDelegatingConstructorCall(
|
private fun StatementGenerator.generateContextReceiverForDelegatingConstructorCall(
|
||||||
ktDefaultElement: KtElement,
|
ktDefaultElement: KtElement,
|
||||||
receiver: ContextClassReceiver?
|
receiver: ContextClassReceiver?
|
||||||
): IntermediateValue? =
|
): IntermediateValue? =
|
||||||
@@ -69,7 +69,7 @@ fun StatementGenerator.generateContextReceiverForDelegatingConstructorCall(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun StatementGenerator.generateContextReceiverForDelegatingConstructorCall(
|
private fun StatementGenerator.generateContextReceiverForDelegatingConstructorCall(
|
||||||
defaultStartOffset: Int,
|
defaultStartOffset: Int,
|
||||||
defaultEndOffset: Int,
|
defaultEndOffset: Int,
|
||||||
receiver: ContextClassReceiver
|
receiver: ContextClassReceiver
|
||||||
@@ -85,10 +85,10 @@ fun StatementGenerator.generateContextReceiverForDelegatingConstructorCall(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun StatementGenerator.generateReceiver(ktDefaultElement: KtElement, receiver: ReceiverValue): IntermediateValue =
|
private fun StatementGenerator.generateReceiver(ktDefaultElement: KtElement, receiver: ReceiverValue): IntermediateValue =
|
||||||
generateReceiver(ktDefaultElement.startOffsetSkippingComments, ktDefaultElement.endOffset, receiver)
|
generateReceiver(ktDefaultElement.startOffsetSkippingComments, ktDefaultElement.endOffset, receiver)
|
||||||
|
|
||||||
fun StatementGenerator.generateReceiver(defaultStartOffset: Int, defaultEndOffset: Int, receiver: ReceiverValue): IntermediateValue {
|
private fun StatementGenerator.generateReceiver(defaultStartOffset: Int, defaultEndOffset: Int, receiver: ReceiverValue): IntermediateValue {
|
||||||
val irReceiverType =
|
val irReceiverType =
|
||||||
when (receiver) {
|
when (receiver) {
|
||||||
is ExtensionReceiver ->
|
is ExtensionReceiver ->
|
||||||
@@ -145,7 +145,7 @@ fun StatementGenerator.generateReceiver(defaultStartOffset: Int, defaultEndOffse
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun StatementGenerator.loadContextReceiver(
|
internal fun StatementGenerator.loadContextReceiver(
|
||||||
receiver: ContextClassReceiver,
|
receiver: ContextClassReceiver,
|
||||||
defaultStartOffset: Int, defaultEndOffset: Int,
|
defaultStartOffset: Int, defaultEndOffset: Int,
|
||||||
): IrGetFieldImpl {
|
): IrGetFieldImpl {
|
||||||
@@ -165,7 +165,7 @@ fun StatementGenerator.loadContextReceiver(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun StatementGenerator.generateSingletonReference(
|
internal fun StatementGenerator.generateSingletonReference(
|
||||||
descriptor: ClassDescriptor,
|
descriptor: ClassDescriptor,
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
@@ -216,7 +216,7 @@ fun IrExpression.implicitCastTo(expectedType: IrType?): IrExpression {
|
|||||||
return IrTypeOperatorCallImpl(startOffset, endOffset, expectedType, IrTypeOperator.IMPLICIT_CAST, expectedType, this)
|
return IrTypeOperatorCallImpl(startOffset, endOffset, expectedType, IrTypeOperator.IMPLICIT_CAST, expectedType, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun StatementGenerator.generateBackingFieldReceiver(
|
internal fun StatementGenerator.generateBackingFieldReceiver(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
resolvedCall: ResolvedCall<*>?,
|
resolvedCall: ResolvedCall<*>?,
|
||||||
@@ -226,7 +226,7 @@ fun StatementGenerator.generateBackingFieldReceiver(
|
|||||||
return this.generateReceiver(startOffset, endOffset, receiver)
|
return this.generateReceiver(startOffset, endOffset, receiver)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun StatementGenerator.generateCallReceiver(
|
internal fun StatementGenerator.generateCallReceiver(
|
||||||
ktDefaultElement: KtElement,
|
ktDefaultElement: KtElement,
|
||||||
calleeDescriptor: CallableDescriptor,
|
calleeDescriptor: CallableDescriptor,
|
||||||
dispatchReceiver: ReceiverValue?,
|
dispatchReceiver: ReceiverValue?,
|
||||||
@@ -355,11 +355,11 @@ private fun StatementGenerator.generateVarargExpressionUsing(
|
|||||||
return irVararg
|
return irVararg
|
||||||
}
|
}
|
||||||
|
|
||||||
fun StatementGenerator.generateValueArgument(
|
private fun StatementGenerator.generateValueArgument(
|
||||||
valueArgument: ResolvedValueArgument,
|
valueArgument: ResolvedValueArgument,
|
||||||
valueParameter: ValueParameterDescriptor,
|
valueParameter: ValueParameterDescriptor,
|
||||||
resolvedCall: ResolvedCall<*>
|
resolvedCall: ResolvedCall<*>
|
||||||
) = generateValueArgumentUsing(valueArgument, valueParameter, resolvedCall) { generateExpression(it) }
|
): IrExpression? = generateValueArgumentUsing(valueArgument, valueParameter, resolvedCall) { generateExpression(it) }
|
||||||
|
|
||||||
private fun StatementGenerator.generateValueArgumentUsing(
|
private fun StatementGenerator.generateValueArgumentUsing(
|
||||||
valueArgument: ResolvedValueArgument,
|
valueArgument: ResolvedValueArgument,
|
||||||
@@ -500,21 +500,21 @@ private fun StatementGenerator.createFunctionForSuspendConversion(
|
|||||||
return irAdapterFun
|
return irAdapterFun
|
||||||
}
|
}
|
||||||
|
|
||||||
fun StatementGenerator.castArgumentToFunctionalInterfaceForSamType(irExpression: IrExpression, samType: KotlinType): IrExpression {
|
internal fun StatementGenerator.castArgumentToFunctionalInterfaceForSamType(irExpression: IrExpression, samType: KotlinType): IrExpression {
|
||||||
val kotlinFunctionType = samType.getSubstitutedFunctionTypeForSamType()
|
val kotlinFunctionType = samType.getSubstitutedFunctionTypeForSamType()
|
||||||
val irFunctionType = context.typeTranslator.translateType(kotlinFunctionType)
|
val irFunctionType = context.typeTranslator.translateType(kotlinFunctionType)
|
||||||
return irExpression.implicitCastTo(irFunctionType)
|
return irExpression.implicitCastTo(irFunctionType)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Generator.getSuperQualifier(resolvedCall: ResolvedCall<*>): ClassDescriptor? {
|
internal fun Generator.getSuperQualifier(resolvedCall: ResolvedCall<*>): ClassDescriptor? {
|
||||||
val superCallExpression = getSuperCallExpression(resolvedCall.call) ?: return null
|
val superCallExpression = getSuperCallExpression(resolvedCall.call) ?: return null
|
||||||
return getOrFail(BindingContext.REFERENCE_TARGET, superCallExpression.instanceReference) as ClassDescriptor
|
return getOrFail(BindingContext.REFERENCE_TARGET, superCallExpression.instanceReference) as ClassDescriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
fun StatementGenerator.pregenerateCall(resolvedCall: ResolvedCall<*>): CallBuilder =
|
internal fun StatementGenerator.pregenerateCall(resolvedCall: ResolvedCall<*>): CallBuilder =
|
||||||
pregenerateCallUsing(resolvedCall) { generateExpression(it) }
|
pregenerateCallUsing(resolvedCall) { generateExpression(it) }
|
||||||
|
|
||||||
fun StatementGenerator.pregenerateCallUsing(
|
internal fun StatementGenerator.pregenerateCallUsing(
|
||||||
resolvedCall: ResolvedCall<*>,
|
resolvedCall: ResolvedCall<*>,
|
||||||
generateArgumentExpression: (KtExpression) -> IrExpression?
|
generateArgumentExpression: (KtExpression) -> IrExpression?
|
||||||
): CallBuilder {
|
): CallBuilder {
|
||||||
@@ -527,7 +527,7 @@ fun StatementGenerator.pregenerateCallUsing(
|
|||||||
return call
|
return call
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTypeArguments(resolvedCall: ResolvedCall<*>?): Map<TypeParameterDescriptor, KotlinType>? {
|
internal fun getTypeArguments(resolvedCall: ResolvedCall<*>?): Map<TypeParameterDescriptor, KotlinType>? {
|
||||||
if (resolvedCall == null) return null
|
if (resolvedCall == null) return null
|
||||||
|
|
||||||
val descriptor = resolvedCall.resultingDescriptor
|
val descriptor = resolvedCall.resultingDescriptor
|
||||||
@@ -537,7 +537,7 @@ fun getTypeArguments(resolvedCall: ResolvedCall<*>?): Map<TypeParameterDescripto
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun StatementGenerator.pregenerateExtensionInvokeCall(resolvedCall: ResolvedCall<*>): CallBuilder {
|
private fun StatementGenerator.pregenerateExtensionInvokeCall(resolvedCall: ResolvedCall<*>): CallBuilder {
|
||||||
val extensionInvoke = resolvedCall.resultingDescriptor
|
val extensionInvoke = resolvedCall.resultingDescriptor
|
||||||
val functionNClass = extensionInvoke.containingDeclaration as? ClassDescriptor
|
val functionNClass = extensionInvoke.containingDeclaration as? ClassDescriptor
|
||||||
?: throw AssertionError("'invoke' should be a class member: $extensionInvoke")
|
?: throw AssertionError("'invoke' should be a class member: $extensionInvoke")
|
||||||
@@ -606,7 +606,7 @@ private fun ResolvedCall<*>.isExtensionInvokeCall(): Boolean {
|
|||||||
return extensionReceiver != null
|
return extensionReceiver != null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun StatementGenerator.generateSamConversionForValueArgumentsIfRequired(call: CallBuilder, resolvedCall: ResolvedCall<*>) {
|
internal fun StatementGenerator.generateSamConversionForValueArgumentsIfRequired(call: CallBuilder, resolvedCall: ResolvedCall<*>) {
|
||||||
val samConversion = context.extensions.samConversion
|
val samConversion = context.extensions.samConversion
|
||||||
|
|
||||||
val originalDescriptor = resolvedCall.resultingDescriptor
|
val originalDescriptor = resolvedCall.resultingDescriptor
|
||||||
@@ -751,7 +751,7 @@ private fun StatementGenerator.getSamTypeForValueParameter(valueParameter: Value
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun StatementGenerator.pregenerateValueArgumentsUsing(
|
internal fun StatementGenerator.pregenerateValueArgumentsUsing(
|
||||||
call: CallBuilder,
|
call: CallBuilder,
|
||||||
resolvedCall: ResolvedCall<*>,
|
resolvedCall: ResolvedCall<*>,
|
||||||
generateArgumentExpression: (KtExpression) -> IrExpression?
|
generateArgumentExpression: (KtExpression) -> IrExpression?
|
||||||
@@ -763,7 +763,7 @@ fun StatementGenerator.pregenerateValueArgumentsUsing(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun StatementGenerator.pregenerateCallReceivers(resolvedCall: ResolvedCall<*>): CallBuilder {
|
internal fun StatementGenerator.pregenerateCallReceivers(resolvedCall: ResolvedCall<*>): CallBuilder {
|
||||||
val call = unwrapCallableDescriptorAndTypeArguments(resolvedCall)
|
val call = unwrapCallableDescriptorAndTypeArguments(resolvedCall)
|
||||||
|
|
||||||
call.callReceiver = generateCallReceiver(
|
call.callReceiver = generateCallReceiver(
|
||||||
@@ -790,7 +790,7 @@ private fun unwrapSpecialDescriptor(descriptor: CallableDescriptor): CallableDes
|
|||||||
descriptor.getOriginalForFunctionInterfaceAdapter()?.let { unwrapSpecialDescriptor(it) } ?: descriptor
|
descriptor.getOriginalForFunctionInterfaceAdapter()?.let { unwrapSpecialDescriptor(it) } ?: descriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
fun unwrapCallableDescriptorAndTypeArguments(resolvedCall: ResolvedCall<*>): CallBuilder {
|
internal fun unwrapCallableDescriptorAndTypeArguments(resolvedCall: ResolvedCall<*>): CallBuilder {
|
||||||
val originalDescriptor = resolvedCall.resultingDescriptor
|
val originalDescriptor = resolvedCall.resultingDescriptor
|
||||||
val candidateDescriptor = resolvedCall.candidateDescriptor
|
val candidateDescriptor = resolvedCall.candidateDescriptor
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -41,7 +41,7 @@ import org.jetbrains.kotlin.resolve.calls.tasks.isDynamic
|
|||||||
import org.jetbrains.kotlin.resolve.calls.util.FakeCallableDescriptorForObject
|
import org.jetbrains.kotlin.resolve.calls.util.FakeCallableDescriptorForObject
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|
||||||
class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
internal class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||||
|
|
||||||
fun generateAssignment(ktExpression: KtBinaryExpression, origin: IrStatementOrigin): IrExpression {
|
fun generateAssignment(ktExpression: KtBinaryExpression, origin: IrStatementOrigin): IrExpression {
|
||||||
return if (getResolvedCall(ktExpression) != null) {
|
return if (getResolvedCall(ktExpression) != null) {
|
||||||
|
|||||||
@@ -39,11 +39,11 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassOrAny
|
|||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
||||||
|
|
||||||
interface LoopResolver {
|
internal interface LoopResolver {
|
||||||
fun getLoop(expression: KtExpression): IrLoop?
|
fun getLoop(expression: KtExpression): IrLoop?
|
||||||
}
|
}
|
||||||
|
|
||||||
class BodyGenerator(
|
internal class BodyGenerator(
|
||||||
val scopeOwnerSymbol: IrSymbol,
|
val scopeOwnerSymbol: IrSymbol,
|
||||||
override val context: GeneratorContext,
|
override val context: GeneratorContext,
|
||||||
private val parentLoopResolver: LoopResolver?
|
private val parentLoopResolver: LoopResolver?
|
||||||
|
|||||||
+1
-1
@@ -35,7 +35,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
|||||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression
|
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression
|
||||||
import org.jetbrains.kotlin.utils.SmartList
|
import org.jetbrains.kotlin.utils.SmartList
|
||||||
|
|
||||||
class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
internal class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||||
|
|
||||||
fun generateIfExpression(expression: KtIfExpression): IrExpression {
|
fun generateIfExpression(expression: KtIfExpression): IrExpression {
|
||||||
var ktLastIf: KtIfExpression = expression
|
var ktLastIf: KtIfExpression = expression
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ import org.jetbrains.kotlin.resolve.calls.util.FakeCallableDescriptorForObject
|
|||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.classValueType
|
import org.jetbrains.kotlin.resolve.descriptorUtil.classValueType
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|
||||||
class CallGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
internal class CallGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||||
fun generateCall(startOffset: Int, endOffset: Int, call: CallBuilder, origin: IrStatementOrigin? = null): IrExpression {
|
fun generateCall(startOffset: Int, endOffset: Int, call: CallBuilder, origin: IrStatementOrigin? = null): IrExpression {
|
||||||
val descriptor = call.descriptor
|
val descriptor = call.descriptor
|
||||||
|
|
||||||
@@ -454,23 +454,24 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun IrExpression.isUnchanging() =
|
fun IrExpression.isUnchanging(): Boolean =
|
||||||
this is IrFunctionExpression ||
|
this is IrFunctionExpression ||
|
||||||
(this is IrCallableReference<*> && dispatchReceiver == null && extensionReceiver == null) ||
|
(this is IrCallableReference<*> && dispatchReceiver == null && extensionReceiver == null) ||
|
||||||
this is IrClassReference ||
|
this is IrClassReference ||
|
||||||
this is IrConst<*> ||
|
this is IrConst<*> ||
|
||||||
(this is IrGetValue && !symbol.owner.let { it is IrVariable && it.isVar })
|
(this is IrGetValue && !symbol.owner.let { it is IrVariable && it.isVar })
|
||||||
|
|
||||||
fun IrExpression.hasNoSideEffects() = isUnchanging() || this is IrGetValue
|
fun IrExpression.hasNoSideEffects(): Boolean =
|
||||||
|
isUnchanging() || this is IrGetValue
|
||||||
|
|
||||||
fun CallGenerator.generateCall(
|
internal fun CallGenerator.generateCall(
|
||||||
ktElement: KtElement,
|
ktElement: KtElement,
|
||||||
call: CallBuilder,
|
call: CallBuilder,
|
||||||
origin: IrStatementOrigin? = null,
|
origin: IrStatementOrigin? = null,
|
||||||
startOffset: Int = ktElement.startOffsetSkippingComments,
|
startOffset: Int = ktElement.startOffsetSkippingComments,
|
||||||
endOffset: Int = ktElement.endOffset,
|
endOffset: Int = ktElement.endOffset,
|
||||||
) =
|
): IrExpression =
|
||||||
generateCall(startOffset, endOffset, call, origin)
|
generateCall(startOffset, endOffset, call, origin)
|
||||||
|
|
||||||
fun CallGenerator.generateCall(irExpression: IrExpression, call: CallBuilder, origin: IrStatementOrigin? = null) =
|
internal fun CallGenerator.generateCall(irExpression: IrExpression, call: CallBuilder, origin: IrStatementOrigin? = null): IrExpression =
|
||||||
generateCall(irExpression.startOffset, irExpression.endOffset, call, origin)
|
generateCall(irExpression.startOffset, irExpression.endOffset, call, origin)
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ import org.jetbrains.kotlin.types.TypeSubstitutor
|
|||||||
import org.jetbrains.kotlin.utils.newHashMapWithExpectedSize
|
import org.jetbrains.kotlin.utils.newHashMapWithExpectedSize
|
||||||
|
|
||||||
@ObsoleteDescriptorBasedAPI
|
@ObsoleteDescriptorBasedAPI
|
||||||
class ClassGenerator(
|
internal class ClassGenerator(
|
||||||
declarationGenerator: DeclarationGenerator
|
declarationGenerator: DeclarationGenerator
|
||||||
) : DeclarationGeneratorExtension(declarationGenerator) {
|
) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||||
fun generateClass(ktClassOrObject: KtPureClassOrObject, visibility_: DescriptorVisibility? = null): IrClass {
|
fun generateClass(ktClassOrObject: KtPureClassOrObject, visibility_: DescriptorVisibility? = null): IrClass {
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.getSourceForArgument
|
import org.jetbrains.kotlin.resolve.lazy.descriptors.getSourceForArgument
|
||||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
import org.jetbrains.kotlin.resolve.source.getPsi
|
||||||
|
|
||||||
class ConstantValueGeneratorImpl(
|
internal class ConstantValueGeneratorImpl(
|
||||||
moduleDescriptor: ModuleDescriptor,
|
moduleDescriptor: ModuleDescriptor,
|
||||||
symbolTable: ReferenceSymbolTable,
|
symbolTable: ReferenceSymbolTable,
|
||||||
typeTranslator: TypeTranslator,
|
typeTranslator: TypeTranslator,
|
||||||
|
|||||||
+1
-1
@@ -41,7 +41,7 @@ import org.jetbrains.kotlin.types.typeUtil.representativeUpperBound
|
|||||||
* This one uses [DataClassMethodGenerator] to determine which members are needed to generate; uses [DataClassMembersGenerator] to generate
|
* This one uses [DataClassMethodGenerator] to determine which members are needed to generate; uses [DataClassMembersGenerator] to generate
|
||||||
* function bodies; and provides ways to declare functions or parameters based on descriptors and binding context.
|
* function bodies; and provides ways to declare functions or parameters based on descriptors and binding context.
|
||||||
*/
|
*/
|
||||||
class DataClassMembersGenerator(
|
internal class DataClassMembersGenerator(
|
||||||
declarationGenerator: DeclarationGenerator,
|
declarationGenerator: DeclarationGenerator,
|
||||||
private val generateBodies: Boolean
|
private val generateBodies: Boolean
|
||||||
) : DeclarationGeneratorExtension(declarationGenerator) {
|
) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||||
|
|||||||
+1
-1
@@ -207,5 +207,5 @@ abstract class DeclarationGeneratorExtension(val declarationGenerator: Declarati
|
|||||||
fun KotlinType.toIrType() = with(declarationGenerator) { toIrType() }
|
fun KotlinType.toIrType() = with(declarationGenerator) { toIrType() }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Generator.createBodyGenerator(scopeOwnerSymbol: IrSymbol, parentLoopResolver: LoopResolver? = null) =
|
internal fun Generator.createBodyGenerator(scopeOwnerSymbol: IrSymbol, parentLoopResolver: LoopResolver? = null) =
|
||||||
BodyGenerator(scopeOwnerSymbol, context, parentLoopResolver)
|
BodyGenerator(scopeOwnerSymbol, context, parentLoopResolver)
|
||||||
|
|||||||
+3
-1
@@ -45,7 +45,9 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
|||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.typeUtil.replaceArgumentsWithStarProjections
|
import org.jetbrains.kotlin.types.typeUtil.replaceArgumentsWithStarProjections
|
||||||
|
|
||||||
class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
internal class DelegatedPropertyGenerator(
|
||||||
|
declarationGenerator: DeclarationGenerator
|
||||||
|
) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||||
constructor(context: GeneratorContext) : this(DeclarationGenerator(context))
|
constructor(context: GeneratorContext) : this(DeclarationGenerator(context))
|
||||||
|
|
||||||
fun generateDelegatedProperty(
|
fun generateDelegatedProperty(
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.psi2ir.generators
|
|||||||
import org.jetbrains.kotlin.ir.declarations.IrField
|
import org.jetbrains.kotlin.ir.declarations.IrField
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
|
||||||
|
|
||||||
class DescriptorStorageForContextReceivers {
|
internal class DescriptorStorageForContextReceivers {
|
||||||
private val syntheticFieldStorage: MutableMap<ReceiverValue, IrField> = mutableMapOf()
|
private val syntheticFieldStorage: MutableMap<ReceiverValue, IrField> = mutableMapOf()
|
||||||
|
|
||||||
fun put(receiverValue: ReceiverValue, irField: IrField) {
|
fun put(receiverValue: ReceiverValue, irField: IrField) {
|
||||||
|
|||||||
+1
-1
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
|||||||
import org.jetbrains.kotlin.types.error.ErrorTypeKind
|
import org.jetbrains.kotlin.types.error.ErrorTypeKind
|
||||||
import org.jetbrains.kotlin.types.error.ErrorUtils
|
import org.jetbrains.kotlin.types.error.ErrorUtils
|
||||||
|
|
||||||
class ErrorExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
internal class ErrorExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||||
private val ignoreErrors: Boolean get() = context.configuration.ignoreErrors
|
private val ignoreErrors: Boolean get() = context.configuration.ignoreErrors
|
||||||
|
|
||||||
private inline fun generateErrorExpression(ktElement: KtElement, e: Throwable? = null, body: () -> IrExpression): IrExpression =
|
private inline fun generateErrorExpression(ktElement: KtElement, e: Throwable? = null, body: () -> IrExpression): IrExpression =
|
||||||
|
|||||||
+1
-1
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
|||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.propertyIfAccessor
|
import org.jetbrains.kotlin.resolve.descriptorUtil.propertyIfAccessor
|
||||||
|
|
||||||
@ObsoleteDescriptorBasedAPI
|
@ObsoleteDescriptorBasedAPI
|
||||||
class FunctionGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
internal class FunctionGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||||
|
|
||||||
constructor(context: GeneratorContext) : this(DeclarationGenerator(context))
|
constructor(context: GeneratorContext) : this(DeclarationGenerator(context))
|
||||||
|
|
||||||
|
|||||||
@@ -23,43 +23,40 @@ import org.jetbrains.kotlin.psi.KtElement
|
|||||||
import org.jetbrains.kotlin.psi.KtExpression
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
import org.jetbrains.kotlin.psi2ir.descriptors.IrBuiltInsOverDescriptors
|
import org.jetbrains.kotlin.psi2ir.descriptors.IrBuiltInsOverDescriptors
|
||||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression
|
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression
|
||||||
import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||||
|
import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.util.slicedMap.ReadOnlySlice
|
import org.jetbrains.kotlin.util.slicedMap.ReadOnlySlice
|
||||||
|
|
||||||
|
internal interface Generator : IrGenerator {
|
||||||
interface Generator : IrGenerator {
|
|
||||||
override val context: GeneratorContext
|
override val context: GeneratorContext
|
||||||
}
|
}
|
||||||
|
|
||||||
interface GeneratorWithScope : Generator, IrGeneratorWithScope
|
internal interface GeneratorWithScope : Generator, IrGeneratorWithScope
|
||||||
|
|
||||||
|
internal fun <K, V : Any> Generator.get(slice: ReadOnlySlice<K, V>, key: K): V? =
|
||||||
fun <K, V : Any> Generator.get(slice: ReadOnlySlice<K, V>, key: K): V? =
|
|
||||||
context.bindingContext[slice, key]
|
context.bindingContext[slice, key]
|
||||||
|
|
||||||
fun <K, V : Any> Generator.getOrFail(slice: ReadOnlySlice<K, V>, key: K): V =
|
internal fun <K, V : Any> Generator.getOrFail(slice: ReadOnlySlice<K, V>, key: K): V =
|
||||||
context.bindingContext[slice, key] ?: throw RuntimeException("No $slice for $key")
|
context.bindingContext[slice, key] ?: throw RuntimeException("No $slice for $key")
|
||||||
|
|
||||||
inline fun <K, V : Any> Generator.getOrFail(slice: ReadOnlySlice<K, V>, key: K, message: (K) -> String): V =
|
internal inline fun <K, V : Any> Generator.getOrFail(slice: ReadOnlySlice<K, V>, key: K, message: (K) -> String): V =
|
||||||
context.bindingContext[slice, key] ?: throw RuntimeException(message(key))
|
context.bindingContext[slice, key] ?: throw RuntimeException(message(key))
|
||||||
|
|
||||||
fun Generator.getTypeInferredByFrontend(key: KtExpression): KotlinType? =
|
internal fun Generator.getTypeInferredByFrontend(key: KtExpression): KotlinType? =
|
||||||
context.bindingContext.getType(key)
|
context.bindingContext.getType(key)
|
||||||
|
|
||||||
fun Generator.getTypeInferredByFrontendOrFail(key: KtExpression): KotlinType =
|
internal fun Generator.getTypeInferredByFrontendOrFail(key: KtExpression): KotlinType =
|
||||||
getTypeInferredByFrontend(key) ?: throw RuntimeException("No type for expression: ${key.text}")
|
getTypeInferredByFrontend(key) ?: throw RuntimeException("No type for expression: ${key.text}")
|
||||||
|
|
||||||
fun Generator.getExpressionTypeWithCoercionToUnit(key: KtExpression): KotlinType? =
|
internal fun Generator.getExpressionTypeWithCoercionToUnit(key: KtExpression): KotlinType? =
|
||||||
if (key.isUsedAsExpression(context.bindingContext))
|
if (key.isUsedAsExpression(context.bindingContext))
|
||||||
getTypeInferredByFrontend(key)
|
getTypeInferredByFrontend(key)
|
||||||
else
|
else
|
||||||
(context.irBuiltIns as IrBuiltInsOverDescriptors).unit
|
(context.irBuiltIns as IrBuiltInsOverDescriptors).unit
|
||||||
|
|
||||||
fun Generator.getExpressionTypeWithCoercionToUnitOrFail(key: KtExpression): KotlinType =
|
internal fun Generator.getExpressionTypeWithCoercionToUnitOrFail(key: KtExpression): KotlinType =
|
||||||
getExpressionTypeWithCoercionToUnit(key) ?: throw RuntimeException("No type for expression: ${key.text}")
|
getExpressionTypeWithCoercionToUnit(key) ?: throw RuntimeException("No type for expression: ${key.text}")
|
||||||
|
|
||||||
fun Generator.getResolvedCall(key: KtElement): ResolvedCall<out CallableDescriptor>? =
|
internal fun Generator.getResolvedCall(key: KtElement): ResolvedCall<out CallableDescriptor>? =
|
||||||
key.getResolvedCall(context.bindingContext)
|
key.getResolvedCall(context.bindingContext)
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -67,7 +67,7 @@ class GeneratorContext private constructor(
|
|||||||
// TODO: inject a correct StorageManager instance, or store NotFoundClasses inside ModuleDescriptor
|
// TODO: inject a correct StorageManager instance, or store NotFoundClasses inside ModuleDescriptor
|
||||||
val reflectionTypes = ReflectionTypes(moduleDescriptor, NotFoundClasses(LockBasedStorageManager.NO_LOCKS, moduleDescriptor))
|
val reflectionTypes = ReflectionTypes(moduleDescriptor, NotFoundClasses(LockBasedStorageManager.NO_LOCKS, moduleDescriptor))
|
||||||
|
|
||||||
val additionalDescriptorStorage: DescriptorStorageForContextReceivers = DescriptorStorageForContextReceivers()
|
internal val additionalDescriptorStorage: DescriptorStorageForContextReceivers = DescriptorStorageForContextReceivers()
|
||||||
|
|
||||||
val samTypeApproximator = SamTypeApproximator(moduleDescriptor.builtIns, languageVersionSettings)
|
val samTypeApproximator = SamTypeApproximator(moduleDescriptor.builtIns, languageVersionSettings)
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
|||||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
|
|
||||||
class IrSyntheticDeclarationGenerator(context: GeneratorContext) : IrElementVisitorVoid {
|
internal class IrSyntheticDeclarationGenerator(context: GeneratorContext) : IrElementVisitorVoid {
|
||||||
fun generateSyntheticDeclarations(file: IrFile) {
|
fun generateSyntheticDeclarations(file: IrFile) {
|
||||||
try {
|
try {
|
||||||
file.acceptChildrenVoid(this)
|
file.acceptChildrenVoid(this)
|
||||||
|
|||||||
+1
-1
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.psi.KtObjectLiteralExpression
|
|||||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||||
|
|
||||||
class LocalClassGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
internal class LocalClassGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||||
fun generateObjectLiteral(ktObjectLiteral: KtObjectLiteralExpression): IrStatement {
|
fun generateObjectLiteral(ktObjectLiteral: KtObjectLiteralExpression): IrStatement {
|
||||||
val startOffset = ktObjectLiteral.startOffsetSkippingComments
|
val startOffset = ktObjectLiteral.startOffsetSkippingComments
|
||||||
val endOffset = ktObjectLiteral.endOffset
|
val endOffset = ktObjectLiteral.endOffset
|
||||||
|
|||||||
+2
-2
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
|||||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.isInlineableFunctionLiteral
|
import org.jetbrains.kotlin.resolve.bindingContextUtil.isInlineableFunctionLiteral
|
||||||
|
|
||||||
class LocalFunctionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
internal class LocalFunctionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||||
|
|
||||||
fun generateLambda(ktLambda: KtLambdaExpression): IrStatement {
|
fun generateLambda(ktLambda: KtLambdaExpression): IrStatement {
|
||||||
val ktFun = ktLambda.functionLiteral
|
val ktFun = ktLambda.functionLiteral
|
||||||
@@ -69,4 +69,4 @@ class LocalFunctionGenerator(statementGenerator: StatementGenerator) : Statement
|
|||||||
else null,
|
else null,
|
||||||
IrDeclarationOrigin.LOCAL_FUNCTION
|
IrDeclarationOrigin.LOCAL_FUNCTION
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.psi2ir.intermediate.VariableLValue
|
|||||||
import org.jetbrains.kotlin.psi2ir.intermediate.setExplicitReceiverValue
|
import org.jetbrains.kotlin.psi2ir.intermediate.setExplicitReceiverValue
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
|
|
||||||
class LoopExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
internal class LoopExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||||
fun generateWhileLoop(ktWhile: KtWhileExpression): IrExpression {
|
fun generateWhileLoop(ktWhile: KtWhileExpression): IrExpression {
|
||||||
val irLoop = IrWhileLoopImpl(
|
val irLoop = IrWhileLoopImpl(
|
||||||
ktWhile.startOffsetSkippingComments, ktWhile.endOffset,
|
ktWhile.startOffsetSkippingComments, ktWhile.endOffset,
|
||||||
@@ -222,4 +222,4 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen
|
|||||||
|
|
||||||
return irForBlock
|
return irForBlock
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-16
@@ -21,8 +21,7 @@ import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
|||||||
import org.jetbrains.kotlin.ir.expressions.IrTypeOperator
|
import org.jetbrains.kotlin.ir.expressions.IrTypeOperator
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
|
|
||||||
|
internal fun getInfixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
||||||
fun getInfixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
|
||||||
when (ktOperator) {
|
when (ktOperator) {
|
||||||
KtTokens.EQ -> IrStatementOrigin.EQ
|
KtTokens.EQ -> IrStatementOrigin.EQ
|
||||||
KtTokens.PLUSEQ -> IrStatementOrigin.PLUSEQ
|
KtTokens.PLUSEQ -> IrStatementOrigin.PLUSEQ
|
||||||
@@ -53,7 +52,7 @@ fun getInfixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
|||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getPrefixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
internal fun getPrefixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
||||||
when (ktOperator) {
|
when (ktOperator) {
|
||||||
KtTokens.PLUSPLUS -> IrStatementOrigin.PREFIX_INCR
|
KtTokens.PLUSPLUS -> IrStatementOrigin.PREFIX_INCR
|
||||||
KtTokens.MINUSMINUS -> IrStatementOrigin.PREFIX_DECR
|
KtTokens.MINUSMINUS -> IrStatementOrigin.PREFIX_DECR
|
||||||
@@ -63,7 +62,7 @@ fun getPrefixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
|||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getPostfixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
internal fun getPostfixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
||||||
when (ktOperator) {
|
when (ktOperator) {
|
||||||
KtTokens.PLUSPLUS -> IrStatementOrigin.POSTFIX_INCR
|
KtTokens.PLUSPLUS -> IrStatementOrigin.POSTFIX_INCR
|
||||||
KtTokens.MINUSMINUS -> IrStatementOrigin.POSTFIX_DECR
|
KtTokens.MINUSMINUS -> IrStatementOrigin.POSTFIX_DECR
|
||||||
@@ -71,7 +70,7 @@ fun getPostfixOperator(ktOperator: IElementType): IrStatementOrigin? =
|
|||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getIrTypeOperator(ktOperator: IElementType): IrTypeOperator? =
|
internal fun getIrTypeOperator(ktOperator: IElementType): IrTypeOperator? =
|
||||||
when (ktOperator) {
|
when (ktOperator) {
|
||||||
KtTokens.IS_KEYWORD -> IrTypeOperator.INSTANCEOF
|
KtTokens.IS_KEYWORD -> IrTypeOperator.INSTANCEOF
|
||||||
KtTokens.NOT_IS -> IrTypeOperator.NOT_INSTANCEOF
|
KtTokens.NOT_IS -> IrTypeOperator.NOT_INSTANCEOF
|
||||||
@@ -80,10 +79,10 @@ fun getIrTypeOperator(ktOperator: IElementType): IrTypeOperator? =
|
|||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
val AUGMENTED_ASSIGNMENTS =
|
internal val AUGMENTED_ASSIGNMENTS =
|
||||||
setOf(IrStatementOrigin.PLUSEQ, IrStatementOrigin.MINUSEQ, IrStatementOrigin.MULTEQ, IrStatementOrigin.DIVEQ, IrStatementOrigin.PERCEQ)
|
setOf(IrStatementOrigin.PLUSEQ, IrStatementOrigin.MINUSEQ, IrStatementOrigin.MULTEQ, IrStatementOrigin.DIVEQ, IrStatementOrigin.PERCEQ)
|
||||||
|
|
||||||
val OPERATORS_DESUGARED_TO_CALLS =
|
internal val OPERATORS_DESUGARED_TO_CALLS =
|
||||||
setOf(
|
setOf(
|
||||||
IrStatementOrigin.PLUS,
|
IrStatementOrigin.PLUS,
|
||||||
IrStatementOrigin.MINUS,
|
IrStatementOrigin.MINUS,
|
||||||
@@ -97,23 +96,20 @@ val OPERATORS_DESUGARED_TO_CALLS =
|
|||||||
IrStatementOrigin.UPLUS
|
IrStatementOrigin.UPLUS
|
||||||
)
|
)
|
||||||
|
|
||||||
val COMPARISON_OPERATORS =
|
internal val COMPARISON_OPERATORS =
|
||||||
setOf(IrStatementOrigin.LT, IrStatementOrigin.LTEQ, IrStatementOrigin.GT, IrStatementOrigin.GTEQ)
|
setOf(IrStatementOrigin.LT, IrStatementOrigin.LTEQ, IrStatementOrigin.GT, IrStatementOrigin.GTEQ)
|
||||||
|
|
||||||
val EQUALITY_OPERATORS =
|
internal val EQUALITY_OPERATORS =
|
||||||
setOf(IrStatementOrigin.EQEQ, IrStatementOrigin.EXCLEQ)
|
setOf(IrStatementOrigin.EQEQ, IrStatementOrigin.EXCLEQ)
|
||||||
|
|
||||||
val IDENTITY_OPERATORS =
|
internal val IDENTITY_OPERATORS =
|
||||||
setOf(IrStatementOrigin.EQEQEQ, IrStatementOrigin.EXCLEQEQ)
|
setOf(IrStatementOrigin.EQEQEQ, IrStatementOrigin.EXCLEQEQ)
|
||||||
|
|
||||||
val IN_OPERATORS =
|
internal val IN_OPERATORS =
|
||||||
setOf(IrStatementOrigin.IN, IrStatementOrigin.NOT_IN)
|
setOf(IrStatementOrigin.IN, IrStatementOrigin.NOT_IN)
|
||||||
|
|
||||||
val BINARY_BOOLEAN_OPERATORS =
|
internal val BINARY_BOOLEAN_OPERATORS =
|
||||||
setOf(IrStatementOrigin.ANDAND, IrStatementOrigin.OROR)
|
setOf(IrStatementOrigin.ANDAND, IrStatementOrigin.OROR)
|
||||||
|
|
||||||
val INCREMENT_DECREMENT_OPERATORS =
|
internal val INCREMENT_DECREMENT_OPERATORS =
|
||||||
setOf(IrStatementOrigin.PREFIX_INCR, IrStatementOrigin.PREFIX_DECR, IrStatementOrigin.POSTFIX_INCR, IrStatementOrigin.POSTFIX_DECR)
|
setOf(IrStatementOrigin.PREFIX_INCR, IrStatementOrigin.PREFIX_DECR, IrStatementOrigin.POSTFIX_INCR, IrStatementOrigin.POSTFIX_DECR)
|
||||||
|
|
||||||
val POSTFIX_INCREMENT_DECREMENT_OPERATORS =
|
|
||||||
setOf(IrStatementOrigin.POSTFIX_INCR, IrStatementOrigin.POSTFIX_DECR)
|
|
||||||
+1
-2
@@ -51,8 +51,7 @@ import org.jetbrains.kotlin.types.typeUtil.makeNullable
|
|||||||
import kotlin.collections.contains
|
import kotlin.collections.contains
|
||||||
import kotlin.collections.set
|
import kotlin.collections.set
|
||||||
|
|
||||||
|
internal class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||||
class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
|
||||||
|
|
||||||
private fun createErrorExpression(ktExpression: KtExpression, text: String) =
|
private fun createErrorExpression(ktExpression: KtExpression, text: String) =
|
||||||
IrErrorExpressionImpl(
|
IrErrorExpressionImpl(
|
||||||
|
|||||||
+1
-3
@@ -36,7 +36,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
|||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.resolve.hasBackingField
|
import org.jetbrains.kotlin.resolve.hasBackingField
|
||||||
|
|
||||||
class PropertyGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
internal class PropertyGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||||
fun generatePropertyDeclaration(ktProperty: KtProperty): IrProperty {
|
fun generatePropertyDeclaration(ktProperty: KtProperty): IrProperty {
|
||||||
val propertyDescriptor = getPropertyDescriptor(ktProperty)
|
val propertyDescriptor = getPropertyDescriptor(ktProperty)
|
||||||
val ktDelegate = ktProperty.delegate
|
val ktDelegate = ktProperty.delegate
|
||||||
@@ -277,5 +277,3 @@ internal fun IrProperty.linkCorrespondingPropertySymbol() {
|
|||||||
getter?.correspondingPropertySymbol = symbol
|
getter?.correspondingPropertySymbol = symbol
|
||||||
setter?.correspondingPropertySymbol = symbol
|
setter?.correspondingPropertySymbol = symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -48,7 +48,7 @@ import org.jetbrains.kotlin.types.TypeProjectionImpl
|
|||||||
import org.jetbrains.kotlin.types.TypeSubstitutor
|
import org.jetbrains.kotlin.types.TypeSubstitutor
|
||||||
import org.jetbrains.kotlin.types.expressions.DoubleColonLHS
|
import org.jetbrains.kotlin.types.expressions.DoubleColonLHS
|
||||||
|
|
||||||
class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
internal class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||||
|
|
||||||
fun generateClassLiteral(ktClassLiteral: KtClassLiteralExpression): IrExpression {
|
fun generateClassLiteral(ktClassLiteral: KtClassLiteralExpression): IrExpression {
|
||||||
val ktArgument = ktClassLiteral.receiverExpression!!
|
val ktArgument = ktClassLiteral.receiverExpression!!
|
||||||
@@ -669,4 +669,4 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
|
|||||||
arguments.last().type,
|
arguments.last().type,
|
||||||
suspendFunction
|
suspendFunction
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
|||||||
import org.jetbrains.kotlin.resolve.calls.util.isSingleUnderscore
|
import org.jetbrains.kotlin.resolve.calls.util.isSingleUnderscore
|
||||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
|
|
||||||
class ScriptGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
internal class ScriptGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGeneratorExtension(declarationGenerator) {
|
||||||
@OptIn(ExperimentalStdlibApi::class)
|
@OptIn(ExperimentalStdlibApi::class)
|
||||||
fun generateScriptDeclaration(ktScript: KtScript): IrDeclaration? {
|
fun generateScriptDeclaration(ktScript: KtScript): IrDeclaration? {
|
||||||
val descriptor = getOrFail(BindingContext.DECLARATION_TO_DESCRIPTOR, ktScript) as ScriptDescriptor
|
val descriptor = getOrFail(BindingContext.DECLARATION_TO_DESCRIPTOR, ktScript) as ScriptDescriptor
|
||||||
|
|||||||
+1
-1
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
|||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.propertyIfAccessor
|
import org.jetbrains.kotlin.resolve.descriptorUtil.propertyIfAccessor
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|
||||||
class StandaloneDeclarationGenerator(private val context: GeneratorContext) {
|
internal class StandaloneDeclarationGenerator(private val context: GeneratorContext) {
|
||||||
private val typeTranslator = context.typeTranslator
|
private val typeTranslator = context.typeTranslator
|
||||||
private val symbolTable = context.symbolTable
|
private val symbolTable = context.symbolTable
|
||||||
private val irFactory = context.irFactory
|
private val irFactory = context.irFactory
|
||||||
|
|||||||
+2
-2
@@ -51,7 +51,7 @@ import org.jetbrains.kotlin.types.KotlinType
|
|||||||
import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils
|
import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||||
|
|
||||||
class StatementGenerator(
|
internal class StatementGenerator(
|
||||||
val bodyGenerator: BodyGenerator,
|
val bodyGenerator: BodyGenerator,
|
||||||
override val scope: Scope
|
override val scope: Scope
|
||||||
) : KtVisitor<IrStatement, Nothing?>(),
|
) : KtVisitor<IrStatement, Nothing?>(),
|
||||||
@@ -553,7 +553,7 @@ class StatementGenerator(
|
|||||||
ReflectionReferencesGenerator(this).generateCallableReference(expression)
|
ReflectionReferencesGenerator(this).generateCallableReference(expression)
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class StatementGeneratorExtension(val statementGenerator: StatementGenerator) : GeneratorWithScope {
|
internal abstract class StatementGeneratorExtension(val statementGenerator: StatementGenerator) : GeneratorWithScope {
|
||||||
override val scope: Scope get() = statementGenerator.scope
|
override val scope: Scope get() = statementGenerator.scope
|
||||||
override val context: GeneratorContext get() = statementGenerator.context
|
override val context: GeneratorContext get() = statementGenerator.context
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.ir.symbols.*
|
|||||||
import org.jetbrains.kotlin.ir.util.SYNTHETIC_OFFSET
|
import org.jetbrains.kotlin.ir.util.SYNTHETIC_OFFSET
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
|
|
||||||
class SyntheticDeclarationsGenerator(context: GeneratorContext) : DeclarationDescriptorVisitor<Unit, IrDeclarationContainer?> {
|
internal class SyntheticDeclarationsGenerator(context: GeneratorContext) : DeclarationDescriptorVisitor<Unit, IrDeclarationContainer?> {
|
||||||
|
|
||||||
private val generator = StandaloneDeclarationGenerator(context)
|
private val generator = StandaloneDeclarationGenerator(context)
|
||||||
private val symbolTable = context.symbolTable
|
private val symbolTable = context.symbolTable
|
||||||
|
|||||||
+1
-1
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
|||||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
|
|
||||||
class TryCatchExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
internal class TryCatchExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||||
fun generateTryCatch(ktTry: KtTryExpression): IrExpression {
|
fun generateTryCatch(ktTry: KtTryExpression): IrExpression {
|
||||||
val resultType = getExpressionTypeWithCoercionToUnitOrFail(ktTry).toIrType()
|
val resultType = getExpressionTypeWithCoercionToUnitOrFail(ktTry).toIrType()
|
||||||
val irTryCatch = IrTryImpl(ktTry.startOffsetSkippingComments, ktTry.endOffset, resultType)
|
val irTryCatch = IrTryImpl(ktTry.startOffsetSkippingComments, ktTry.endOffset, resultType)
|
||||||
|
|||||||
@@ -15,15 +15,15 @@ import org.jetbrains.kotlin.resolve.sam.getFunctionTypeForAbstractMethod
|
|||||||
import org.jetbrains.kotlin.resolve.sam.getSingleAbstractMethodOrNull
|
import org.jetbrains.kotlin.resolve.sam.getSingleAbstractMethodOrNull
|
||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
|
|
||||||
fun GeneratorExtensions.SamConversion.isSamType(kotlinType: KotlinType): Boolean {
|
internal fun GeneratorExtensions.SamConversion.isSamType(kotlinType: KotlinType): Boolean {
|
||||||
val descriptor = kotlinType.constructor.declarationDescriptor
|
val descriptor = kotlinType.constructor.declarationDescriptor
|
||||||
return descriptor is ClassDescriptor && descriptor.isFun ||
|
return descriptor is ClassDescriptor && descriptor.isFun ||
|
||||||
isPlatformSamType(kotlinType)
|
isPlatformSamType(kotlinType)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun DeclarationDescriptor.isSamConstructor() = this is FunctionInterfaceConstructorDescriptor
|
internal fun DeclarationDescriptor.isSamConstructor() = this is FunctionInterfaceConstructorDescriptor
|
||||||
|
|
||||||
fun CallableDescriptor.getOriginalForFunctionInterfaceAdapter() =
|
internal fun CallableDescriptor.getOriginalForFunctionInterfaceAdapter() =
|
||||||
when (this) {
|
when (this) {
|
||||||
is FunctionInterfaceAdapterDescriptor<*> ->
|
is FunctionInterfaceAdapterDescriptor<*> ->
|
||||||
baseDescriptorForSynthetic
|
baseDescriptorForSynthetic
|
||||||
@@ -33,7 +33,7 @@ fun CallableDescriptor.getOriginalForFunctionInterfaceAdapter() =
|
|||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
|
||||||
fun KotlinType.getSubstitutedFunctionTypeForSamType(): KotlinType =
|
internal fun KotlinType.getSubstitutedFunctionTypeForSamType(): KotlinType =
|
||||||
when (val unwrapped = this.unwrap()) {
|
when (val unwrapped = this.unwrap()) {
|
||||||
is SimpleType -> unwrapped.getSubstitutedFunctionTypeForSamType()
|
is SimpleType -> unwrapped.getSubstitutedFunctionTypeForSamType()
|
||||||
is FlexibleType -> KotlinTypeFactory.flexibleType(
|
is FlexibleType -> KotlinTypeFactory.flexibleType(
|
||||||
|
|||||||
+1
-1
@@ -39,7 +39,7 @@ import org.jetbrains.kotlin.resolve.calls.tasks.isDynamic
|
|||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
||||||
|
|
||||||
class ArrayAccessAssignmentReceiver(
|
internal class ArrayAccessAssignmentReceiver(
|
||||||
private val irArray: IrExpression,
|
private val irArray: IrExpression,
|
||||||
private val ktIndexExpressions: List<KtExpression>,
|
private val ktIndexExpressions: List<KtExpression>,
|
||||||
private val irIndexExpressions: List<IrExpression>,
|
private val irIndexExpressions: List<IrExpression>,
|
||||||
|
|||||||
+1
-2
@@ -23,9 +23,8 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl
|
|||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
|
||||||
|
|
||||||
class BackingFieldLValue(
|
internal class BackingFieldLValue(
|
||||||
private val context: IrGeneratorContext,
|
private val context: IrGeneratorContext,
|
||||||
private val startOffset: Int,
|
private val startOffset: Int,
|
||||||
private val endOffset: Int,
|
private val endOffset: Int,
|
||||||
|
|||||||
@@ -16,14 +16,17 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.psi2ir.intermediate
|
package org.jetbrains.kotlin.psi2ir.intermediate
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.psi2ir.generators.hasNoSideEffects
|
import org.jetbrains.kotlin.psi2ir.generators.hasNoSideEffects
|
||||||
import org.jetbrains.kotlin.psi2ir.isValueArgumentReorderingRequired
|
import org.jetbrains.kotlin.psi2ir.isValueArgumentReorderingRequired
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|
||||||
class CallBuilder(
|
internal class CallBuilder(
|
||||||
val original: ResolvedCall<*>, // TODO get rid of "original", sometimes we want to generate a call without ResolvedCall
|
val original: ResolvedCall<*>, // TODO get rid of "original", sometimes we want to generate a call without ResolvedCall
|
||||||
val descriptor: CallableDescriptor,
|
val descriptor: CallableDescriptor,
|
||||||
val typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
val typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
||||||
@@ -41,47 +44,31 @@ class CallBuilder(
|
|||||||
irValueArgumentsByIndex[valueParameterDescriptor.index + parametersOffset]
|
irValueArgumentsByIndex[valueParameterDescriptor.index + parametersOffset]
|
||||||
}
|
}
|
||||||
|
|
||||||
val CallBuilder.argumentsCount: Int
|
internal val CallBuilder.argumentsCount: Int
|
||||||
get() =
|
get() =
|
||||||
irValueArgumentsByIndex.size
|
irValueArgumentsByIndex.size
|
||||||
|
|
||||||
var CallBuilder.lastArgument: IrExpression?
|
internal var CallBuilder.lastArgument: IrExpression?
|
||||||
get() = irValueArgumentsByIndex.last()
|
get() = irValueArgumentsByIndex.last()
|
||||||
set(value) {
|
set(value) {
|
||||||
irValueArgumentsByIndex[argumentsCount - 1] = value
|
irValueArgumentsByIndex[argumentsCount - 1] = value
|
||||||
}
|
}
|
||||||
|
|
||||||
fun CallBuilder.getValueArgumentsInParameterOrder(): List<IrExpression?> =
|
internal fun CallBuilder.getValueArgumentsInParameterOrder(): List<IrExpression?> =
|
||||||
descriptor.valueParameters.map { irValueArgumentsByIndex[it.index] }
|
descriptor.valueParameters.map { irValueArgumentsByIndex[it.index] }
|
||||||
|
|
||||||
fun CallBuilder.isValueArgumentReorderingRequired() =
|
internal fun CallBuilder.isValueArgumentReorderingRequired() =
|
||||||
original.isValueArgumentReorderingRequired() && irValueArgumentsByIndex.any { it != null && !it.hasNoSideEffects() }
|
original.isValueArgumentReorderingRequired() && irValueArgumentsByIndex.any { it != null && !it.hasNoSideEffects() }
|
||||||
|
|
||||||
val CallBuilder.hasExtensionReceiver: Boolean
|
internal val CallBuilder.hasExtensionReceiver: Boolean
|
||||||
get() =
|
get() =
|
||||||
descriptor.extensionReceiverParameter != null
|
descriptor.extensionReceiverParameter != null
|
||||||
|
|
||||||
val CallBuilder.hasDispatchReceiver: Boolean
|
internal val CallBuilder.dispatchReceiverType: KotlinType?
|
||||||
get() =
|
|
||||||
descriptor.dispatchReceiverParameter != null
|
|
||||||
|
|
||||||
val CallBuilder.extensionReceiverType: KotlinType?
|
|
||||||
get() =
|
|
||||||
descriptor.extensionReceiverParameter?.type
|
|
||||||
|
|
||||||
val CallBuilder.dispatchReceiverType: KotlinType?
|
|
||||||
get() =
|
get() =
|
||||||
descriptor.dispatchReceiverParameter?.type
|
descriptor.dispatchReceiverParameter?.type
|
||||||
|
|
||||||
val CallBuilder.explicitReceiverParameter: ReceiverParameterDescriptor?
|
internal fun CallBuilder.setExplicitReceiverValue(explicitReceiverValue: IntermediateValue) {
|
||||||
get() =
|
|
||||||
descriptor.extensionReceiverParameter ?: descriptor.dispatchReceiverParameter
|
|
||||||
|
|
||||||
val CallBuilder.explicitReceiverType: KotlinType?
|
|
||||||
get() =
|
|
||||||
explicitReceiverParameter?.type
|
|
||||||
|
|
||||||
fun CallBuilder.setExplicitReceiverValue(explicitReceiverValue: IntermediateValue) {
|
|
||||||
val previousCallReceiver = callReceiver
|
val previousCallReceiver = callReceiver
|
||||||
callReceiver = object : CallReceiver {
|
callReceiver = object : CallReceiver {
|
||||||
override fun call(builder: CallExpressionBuilder): IrExpression {
|
override fun call(builder: CallExpressionBuilder): IrExpression {
|
||||||
|
|||||||
+1
-1
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
|||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
|
||||||
class DelegatedLocalPropertyLValue(
|
internal class DelegatedLocalPropertyLValue(
|
||||||
private val context: IrGeneratorContext,
|
private val context: IrGeneratorContext,
|
||||||
val startOffset: Int,
|
val startOffset: Int,
|
||||||
val endOffset: Int,
|
val endOffset: Int,
|
||||||
|
|||||||
+2
-2
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.ir.expressions.left
|
|||||||
import org.jetbrains.kotlin.ir.expressions.right
|
import org.jetbrains.kotlin.ir.expressions.right
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
|
||||||
class DynamicMemberLValue(
|
internal class DynamicMemberLValue(
|
||||||
private val context: IrGeneratorContext,
|
private val context: IrGeneratorContext,
|
||||||
private val startOffset: Int,
|
private val startOffset: Int,
|
||||||
private val endOffset: Int,
|
private val endOffset: Int,
|
||||||
@@ -69,4 +69,4 @@ class DynamicMemberLValue(
|
|||||||
if (extensionReceiverValue != null) throw AssertionError("Dynamic call $memberName should have no extension receiver")
|
if (extensionReceiverValue != null) throw AssertionError("Dynamic call $memberName should have no extension receiver")
|
||||||
return dispatchReceiverValue.load()
|
return dispatchReceiverValue.load()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.psi2ir.intermediate
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
|
|
||||||
class ExtensionInvokeCallReceiver(
|
internal class ExtensionInvokeCallReceiver(
|
||||||
private val callBuilder: CallBuilder,
|
private val callBuilder: CallBuilder,
|
||||||
private val functionReceiver: IntermediateValue,
|
private val functionReceiver: IntermediateValue,
|
||||||
private val extensionInvokeReceiver: IntermediateValue
|
private val extensionInvokeReceiver: IntermediateValue
|
||||||
@@ -35,4 +35,4 @@ class ExtensionInvokeCallReceiver(
|
|||||||
callBuilder.irValueArgumentsByIndex[0] = extensionInvokeReceiver.load()
|
callBuilder.irValueArgumentsByIndex[0] = extensionInvokeReceiver.load()
|
||||||
return builder.withReceivers(functionReceiver, null, emptyList())
|
return builder.withReceivers(functionReceiver, null, emptyList())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,10 +22,10 @@ import org.jetbrains.kotlin.ir.declarations.IrVariable
|
|||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||||
|
|
||||||
fun IrVariable.loadAt(startOffset: Int, endOffset: Int): IrExpression =
|
internal fun IrVariable.loadAt(startOffset: Int, endOffset: Int): IrExpression =
|
||||||
IrGetValueImpl(startOffset, endOffset, type, symbol)
|
IrGetValueImpl(startOffset, endOffset, type, symbol)
|
||||||
|
|
||||||
fun CallReceiver.adjustForCallee(callee: CallableMemberDescriptor): CallReceiver =
|
internal fun CallReceiver.adjustForCallee(callee: CallableMemberDescriptor): CallReceiver =
|
||||||
object : CallReceiver {
|
object : CallReceiver {
|
||||||
override fun call(builder: CallExpressionBuilder): IrExpression =
|
override fun call(builder: CallExpressionBuilder): IrExpression =
|
||||||
this@adjustForCallee.call { dispatchReceiverValue, extensionReceiverValue, contextReceiverValues ->
|
this@adjustForCallee.call { dispatchReceiverValue, extensionReceiverValue, contextReceiverValues ->
|
||||||
@@ -51,7 +51,7 @@ fun CallReceiver.adjustForCallee(callee: CallableMemberDescriptor): CallReceiver
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun computeSubstitutedSyntheticAccessor(
|
internal fun computeSubstitutedSyntheticAccessor(
|
||||||
propertyDescriptor: PropertyDescriptor,
|
propertyDescriptor: PropertyDescriptor,
|
||||||
accessorFunctionDescriptor: FunctionDescriptor,
|
accessorFunctionDescriptor: FunctionDescriptor,
|
||||||
substitutedExtensionAccessorDescriptor: PropertyAccessorDescriptor
|
substitutedExtensionAccessorDescriptor: PropertyAccessorDescriptor
|
||||||
@@ -94,4 +94,4 @@ private fun copyTypesFromExtensionAccessor(
|
|||||||
accessorFunctionDescriptor.modality,
|
accessorFunctionDescriptor.modality,
|
||||||
accessorFunctionDescriptor.visibility
|
accessorFunctionDescriptor.visibility
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
|||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.psi2ir.generators.CallGenerator
|
import org.jetbrains.kotlin.psi2ir.generators.CallGenerator
|
||||||
|
|
||||||
class LValueWithGetterAndSetterCalls(
|
internal class LValueWithGetterAndSetterCalls(
|
||||||
private val callGenerator: CallGenerator,
|
private val callGenerator: CallGenerator,
|
||||||
private val descriptor: CallableDescriptor,
|
private val descriptor: CallableDescriptor,
|
||||||
private val getterCall: () -> CallBuilder?,
|
private val getterCall: () -> CallBuilder?,
|
||||||
@@ -42,5 +42,4 @@ class LValueWithGetterAndSetterCalls(
|
|||||||
val call = setterCall(irExpression) ?: throw AssertionError("No setter call for $descriptor")
|
val call = setterCall(irExpression) ?: throw AssertionError("No setter call for $descriptor")
|
||||||
return callGenerator.generateCall(startOffset, endOffset, call, origin)
|
return callGenerator.generateCall(startOffset, endOffset, call, origin)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-5
@@ -19,16 +19,15 @@ package org.jetbrains.kotlin.psi2ir.intermediate
|
|||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.render
|
import org.jetbrains.kotlin.ir.util.render
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
|
||||||
|
|
||||||
abstract class ExpressionValue(override val type: IrType) : IntermediateValue
|
internal abstract class ExpressionValue(override val type: IrType) : IntermediateValue
|
||||||
|
|
||||||
inline fun generateExpressionValue(type: IrType, crossinline generate: () -> IrExpression) =
|
internal inline fun generateExpressionValue(type: IrType, crossinline generate: () -> IrExpression) =
|
||||||
object : ExpressionValue(type) {
|
object : ExpressionValue(type) {
|
||||||
override fun load(): IrExpression = generate()
|
override fun load(): IrExpression = generate()
|
||||||
}
|
}
|
||||||
|
|
||||||
class OnceExpressionValue(val irExpression: IrExpression) : LValue, AssignmentReceiver {
|
internal class OnceExpressionValue(val irExpression: IrExpression) : LValue, AssignmentReceiver {
|
||||||
private var instantiated = false
|
private var instantiated = false
|
||||||
|
|
||||||
override fun load(): IrExpression {
|
override fun load(): IrExpression {
|
||||||
@@ -45,4 +44,4 @@ class OnceExpressionValue(val irExpression: IrExpression) : LValue, AssignmentRe
|
|||||||
|
|
||||||
override fun assign(withLValue: (LValue) -> IrExpression): IrExpression =
|
override fun assign(withLValue: (LValue) -> IrExpression): IrExpression =
|
||||||
withLValue(this)
|
withLValue(this)
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-4
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
|||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext
|
import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext
|
||||||
|
|
||||||
abstract class PropertyLValueBase(
|
internal abstract class PropertyLValueBase(
|
||||||
protected val context: GeneratorContext,
|
protected val context: GeneratorContext,
|
||||||
val scope: Scope,
|
val scope: Scope,
|
||||||
val startOffset: Int,
|
val startOffset: Int,
|
||||||
@@ -72,7 +72,7 @@ abstract class PropertyLValueBase(
|
|||||||
protected abstract fun withReceiver(dispatchReceiver: VariableLValue?, extensionReceiver: VariableLValue?, contextReceivers: List<VariableLValue>): PropertyLValueBase
|
protected abstract fun withReceiver(dispatchReceiver: VariableLValue?, extensionReceiver: VariableLValue?, contextReceivers: List<VariableLValue>): PropertyLValueBase
|
||||||
}
|
}
|
||||||
|
|
||||||
class FieldPropertyLValue(
|
internal class FieldPropertyLValue(
|
||||||
context: GeneratorContext,
|
context: GeneratorContext,
|
||||||
scope: Scope,
|
scope: Scope,
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
@@ -127,7 +127,7 @@ class FieldPropertyLValue(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
class AccessorPropertyLValue(
|
internal class AccessorPropertyLValue(
|
||||||
context: GeneratorContext,
|
context: GeneratorContext,
|
||||||
scope: Scope,
|
scope: Scope,
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
@@ -207,4 +207,4 @@ class AccessorPropertyLValue(
|
|||||||
SimpleCallReceiver(dispatchReceiver, extensionReceiver, contextReceivers),
|
SimpleCallReceiver(dispatchReceiver, extensionReceiver, contextReceivers),
|
||||||
superQualifier
|
superQualifier
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-10
@@ -21,14 +21,8 @@ import org.jetbrains.kotlin.ir.builders.Scope
|
|||||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrStatementContainer
|
import org.jetbrains.kotlin.ir.expressions.IrStatementContainer
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
|
||||||
import org.jetbrains.kotlin.ir.util.shallowCopy
|
|
||||||
|
|
||||||
class RematerializableValue(override val type: IrType, val irExpression: IrExpression) : IntermediateValue {
|
internal fun Scope.createTemporaryVariableInBlock(
|
||||||
override fun load(): IrExpression = irExpression.shallowCopy()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun Scope.createTemporaryVariableInBlock(
|
|
||||||
context: IrGeneratorContext,
|
context: IrGeneratorContext,
|
||||||
irExpression: IrExpression,
|
irExpression: IrExpression,
|
||||||
block: IrStatementContainer,
|
block: IrStatementContainer,
|
||||||
@@ -42,7 +36,7 @@ fun Scope.createTemporaryVariableInBlock(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Scope.declareTemporaryVariableInBlock(
|
internal fun Scope.declareTemporaryVariableInBlock(
|
||||||
irExpression: IrExpression,
|
irExpression: IrExpression,
|
||||||
block: IrStatementContainer,
|
block: IrStatementContainer,
|
||||||
nameHint: String? = null,
|
nameHint: String? = null,
|
||||||
@@ -53,5 +47,3 @@ fun Scope.declareTemporaryVariableInBlock(
|
|||||||
block.statements.add(temporaryVariable)
|
block.statements.add(temporaryVariable)
|
||||||
return temporaryVariable
|
return temporaryVariable
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+3
-5
@@ -25,8 +25,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl
|
|||||||
import org.jetbrains.kotlin.ir.types.makeNullable
|
import org.jetbrains.kotlin.ir.types.makeNullable
|
||||||
import org.jetbrains.kotlin.psi2ir.generators.GeneratorWithScope
|
import org.jetbrains.kotlin.psi2ir.generators.GeneratorWithScope
|
||||||
|
|
||||||
|
internal class SafeCallReceiver(
|
||||||
class SafeCallReceiver(
|
|
||||||
val generator: GeneratorWithScope,
|
val generator: GeneratorWithScope,
|
||||||
val startOffset: Int,
|
val startOffset: Int,
|
||||||
val endOffset: Int,
|
val endOffset: Int,
|
||||||
@@ -67,8 +66,7 @@ class SafeCallReceiver(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal fun IrExpression.safeCallOnDispatchReceiver(
|
||||||
fun IrExpression.safeCallOnDispatchReceiver(
|
|
||||||
generator: GeneratorWithScope,
|
generator: GeneratorWithScope,
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
@@ -83,4 +81,4 @@ fun IrExpression.safeCallOnDispatchReceiver(
|
|||||||
).call { dispatchReceiverValue, _, contextReceiverValues ->
|
).call { dispatchReceiverValue, _, contextReceiverValues ->
|
||||||
assert(contextReceiverValues.isEmpty()) { "Context receivers in numeric promotion" }
|
assert(contextReceiverValues.isEmpty()) { "Context receivers in numeric promotion" }
|
||||||
ifNotNull(dispatchReceiverValue!!.load())
|
ifNotNull(dispatchReceiverValue!!.load())
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-5
@@ -24,13 +24,13 @@ import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
|||||||
import org.jetbrains.kotlin.ir.types.makeNullable
|
import org.jetbrains.kotlin.ir.types.makeNullable
|
||||||
import org.jetbrains.kotlin.psi2ir.generators.GeneratorWithScope
|
import org.jetbrains.kotlin.psi2ir.generators.GeneratorWithScope
|
||||||
|
|
||||||
class SafeExtensionInvokeCallReceiver(
|
internal class SafeExtensionInvokeCallReceiver(
|
||||||
val generator: GeneratorWithScope,
|
val generator: GeneratorWithScope,
|
||||||
val startOffset: Int,
|
val startOffset: Int,
|
||||||
val endOffset: Int,
|
val endOffset: Int,
|
||||||
val callBuilder: CallBuilder,
|
private val callBuilder: CallBuilder,
|
||||||
val functionReceiver: IntermediateValue,
|
private val functionReceiver: IntermediateValue,
|
||||||
val extensionInvokeReceiver: IntermediateValue
|
private val extensionInvokeReceiver: IntermediateValue
|
||||||
) : CallReceiver {
|
) : CallReceiver {
|
||||||
override fun call(builder: CallExpressionBuilder): IrExpression {
|
override fun call(builder: CallExpressionBuilder): IrExpression {
|
||||||
// extensionInvokeReceiver is actually a first argument:
|
// extensionInvokeReceiver is actually a first argument:
|
||||||
@@ -62,4 +62,3 @@ class SafeExtensionInvokeCallReceiver(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.psi2ir.intermediate
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
|
|
||||||
class SimpleCallReceiver(
|
internal class SimpleCallReceiver(
|
||||||
val dispatchReceiverValue: IntermediateValue?,
|
val dispatchReceiverValue: IntermediateValue?,
|
||||||
val extensionReceiverValue: IntermediateValue?,
|
val extensionReceiverValue: IntermediateValue?,
|
||||||
val contextReceiverValues: List<IntermediateValue>
|
val contextReceiverValues: List<IntermediateValue>
|
||||||
|
|||||||
+2
-2
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.ir.types.IrType
|
|||||||
import org.jetbrains.kotlin.psi.KtExpression
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
import org.jetbrains.kotlin.psi2ir.generators.StatementGenerator
|
import org.jetbrains.kotlin.psi2ir.generators.StatementGenerator
|
||||||
|
|
||||||
class SpecialExpressionAssignmentReceiver(
|
internal class SpecialExpressionAssignmentReceiver(
|
||||||
private val statementGenerator: StatementGenerator,
|
private val statementGenerator: StatementGenerator,
|
||||||
private val ktExpression: KtExpression,
|
private val ktExpression: KtExpression,
|
||||||
private val origin: IrStatementOrigin,
|
private val origin: IrStatementOrigin,
|
||||||
@@ -31,4 +31,4 @@ class SpecialExpressionAssignmentReceiver(
|
|||||||
|
|
||||||
override fun assign(withLValue: (LValue) -> IrExpression): IrExpression =
|
override fun assign(withLValue: (LValue) -> IrExpression): IrExpression =
|
||||||
withLValue(this)
|
withLValue(this)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -18,9 +18,8 @@ package org.jetbrains.kotlin.psi2ir.intermediate
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
|
||||||
|
|
||||||
class TransientReceiverValue(override val type: IrType) : IntermediateValue {
|
internal class TransientReceiverValue(override val type: IrType) : IntermediateValue {
|
||||||
|
|
||||||
override fun load(): IrExpression {
|
override fun load(): IrExpression {
|
||||||
throw AssertionError("Transient receiver should not be instantiated")
|
throw AssertionError("Transient receiver should not be instantiated")
|
||||||
|
|||||||
@@ -19,22 +19,22 @@ package org.jetbrains.kotlin.psi2ir.intermediate
|
|||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
|
||||||
interface IntermediateValue {
|
internal interface IntermediateValue {
|
||||||
fun load(): IrExpression
|
fun load(): IrExpression
|
||||||
fun loadIfExists(): IrExpression? = load()
|
fun loadIfExists(): IrExpression? = load()
|
||||||
val type: IrType
|
val type: IrType
|
||||||
}
|
}
|
||||||
|
|
||||||
interface LValue : IntermediateValue {
|
internal interface LValue : IntermediateValue {
|
||||||
fun store(irExpression: IrExpression): IrExpression
|
fun store(irExpression: IrExpression): IrExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
interface AssignmentReceiver {
|
internal interface AssignmentReceiver {
|
||||||
fun assign(withLValue: (LValue) -> IrExpression): IrExpression
|
fun assign(withLValue: (LValue) -> IrExpression): IrExpression
|
||||||
fun assign(value: IrExpression): IrExpression = assign { it.store(value) }
|
fun assign(value: IrExpression): IrExpression = assign { it.store(value) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun interface CallExpressionBuilder {
|
internal fun interface CallExpressionBuilder {
|
||||||
fun withReceivers(
|
fun withReceivers(
|
||||||
dispatchReceiver: IntermediateValue?,
|
dispatchReceiver: IntermediateValue?,
|
||||||
extensionReceiver: IntermediateValue?,
|
extensionReceiver: IntermediateValue?,
|
||||||
@@ -42,6 +42,6 @@ fun interface CallExpressionBuilder {
|
|||||||
): IrExpression
|
): IrExpression
|
||||||
}
|
}
|
||||||
|
|
||||||
interface CallReceiver {
|
internal interface CallReceiver {
|
||||||
fun call(builder: CallExpressionBuilder): IrExpression
|
fun call(builder: CallExpressionBuilder): IrExpression
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrSetValueImpl
|
|||||||
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
|
||||||
class VariableLValue(
|
internal class VariableLValue(
|
||||||
private val context: IrGeneratorContext,
|
private val context: IrGeneratorContext,
|
||||||
val startOffset: Int,
|
val startOffset: Int,
|
||||||
val endOffset: Int,
|
val endOffset: Int,
|
||||||
@@ -58,4 +58,4 @@ class VariableLValue(
|
|||||||
|
|
||||||
override fun assign(withLValue: (LValue) -> IrExpression): IrExpression =
|
override fun assign(withLValue: (LValue) -> IrExpression): IrExpression =
|
||||||
withLValue(this)
|
withLValue(this)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -57,7 +57,7 @@ import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
|
|||||||
import org.jetbrains.kotlin.types.typeUtil.*
|
import org.jetbrains.kotlin.types.typeUtil.*
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||||
|
|
||||||
fun insertImplicitCasts(file: IrFile, context: GeneratorContext) {
|
internal fun insertImplicitCasts(file: IrFile, context: GeneratorContext) {
|
||||||
InsertImplicitCasts(
|
InsertImplicitCasts(
|
||||||
context.irBuiltIns,
|
context.irBuiltIns,
|
||||||
context.typeTranslator,
|
context.typeTranslator,
|
||||||
|
|||||||
Reference in New Issue
Block a user