[BE IR] Skip comments for determining startOffset of declaration
This commit is contained in:
committed by
Dmitry Savvinov
parent
633f665b7f
commit
00036ba498
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch
|
||||
@@ -74,7 +74,7 @@ fun MemberScope.findSingleFunction(name: Name): FunctionDescriptor =
|
||||
fun KotlinBuiltIns.findSingleFunction(name: Name): FunctionDescriptor =
|
||||
builtInsPackageScope.findSingleFunction(name)
|
||||
|
||||
val PsiElement?.startOffsetOrUndefined get() = this?.startOffset ?: UNDEFINED_OFFSET
|
||||
val PsiElement?.startOffsetOrUndefined get() = this?.startOffsetSkippingComments ?: UNDEFINED_OFFSET
|
||||
val PsiElement?.endOffsetOrUndefined get() = this?.endOffset ?: UNDEFINED_OFFSET
|
||||
|
||||
val PropertyDescriptor.unwrappedGetMethod: FunctionDescriptor?
|
||||
@@ -83,5 +83,5 @@ val PropertyDescriptor.unwrappedGetMethod: FunctionDescriptor?
|
||||
val PropertyDescriptor.unwrappedSetMethod: FunctionDescriptor?
|
||||
get() = if (this is SyntheticPropertyDescriptor) this.setMethod else setter
|
||||
|
||||
val KtPureElement?.pureStartOffsetOrUndefined get() = this?.psiOrParent?.startOffset ?: UNDEFINED_OFFSET
|
||||
val KtPureElement?.pureStartOffsetOrUndefined get() = this?.psiOrParent?.startOffsetSkippingComments ?: UNDEFINED_OFFSET
|
||||
val KtPureElement?.pureEndOffsetOrUndefined get() = this?.psiOrParent?.endOffset ?: UNDEFINED_OFFSET
|
||||
+3
-3
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
||||
import org.jetbrains.kotlin.psi.KtAnonymousInitializer
|
||||
import org.jetbrains.kotlin.psi.KtBlockExpression
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
|
||||
class AnonymousInitializerGenerator(
|
||||
declarationGenerator: DeclarationGenerator
|
||||
@@ -34,12 +34,12 @@ class AnonymousInitializerGenerator(
|
||||
classDescriptor: ClassDescriptor
|
||||
): IrDeclaration =
|
||||
context.symbolTable.declareAnonymousInitializer(
|
||||
ktAnonymousInitializer.startOffset, ktAnonymousInitializer.endOffset, IrDeclarationOrigin.DEFINED, classDescriptor
|
||||
ktAnonymousInitializer.startOffsetSkippingComments, ktAnonymousInitializer.endOffset, IrDeclarationOrigin.DEFINED, classDescriptor
|
||||
).buildWithScope { irAnonymousInitializer ->
|
||||
val bodyGenerator = createBodyGenerator(irAnonymousInitializer.symbol)
|
||||
val statementGenerator = bodyGenerator.createStatementGenerator()
|
||||
val ktBody = ktAnonymousInitializer.body!!
|
||||
val irBlockBody = IrBlockBodyImpl(ktBody.startOffset, ktBody.endOffset)
|
||||
val irBlockBody = IrBlockBodyImpl(ktBody.startOffsetSkippingComments, ktBody.endOffset)
|
||||
if (ktBody is KtBlockExpression) {
|
||||
statementGenerator.generateStatements(ktBody.statements, irBlockBody)
|
||||
} else {
|
||||
|
||||
+9
-9
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.ir.expressions.IrExpressionWithCopy
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.*
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
@@ -44,7 +44,7 @@ fun StatementGenerator.generateReceiverOrNull(ktDefaultElement: KtElement, recei
|
||||
receiver?.let { generateReceiver(ktDefaultElement, receiver) }
|
||||
|
||||
fun StatementGenerator.generateReceiver(ktDefaultElement: KtElement, receiver: ReceiverValue): IntermediateValue =
|
||||
generateReceiver(ktDefaultElement.startOffset, ktDefaultElement.endOffset, receiver)
|
||||
generateReceiver(ktDefaultElement.startOffsetSkippingComments, ktDefaultElement.endOffset, receiver)
|
||||
|
||||
fun StatementGenerator.generateReceiver(defaultStartOffset: Int, defaultEndOffset: Int, receiver: ReceiverValue): IntermediateValue {
|
||||
val irReceiverType = receiver.type.toIrType()
|
||||
@@ -71,7 +71,7 @@ fun StatementGenerator.generateReceiver(defaultStartOffset: Int, defaultEndOffse
|
||||
generateExpression(receiver.expression)
|
||||
is ClassValueReceiver ->
|
||||
IrGetObjectValueImpl(
|
||||
receiver.expression.startOffset, receiver.expression.endOffset, irReceiverType,
|
||||
receiver.expression.startOffsetSkippingComments, receiver.expression.endOffset, irReceiverType,
|
||||
context.symbolTable.referenceClass(receiver.classQualifier.descriptor as ClassDescriptor)
|
||||
)
|
||||
is ExtensionReceiver ->
|
||||
@@ -132,7 +132,7 @@ private fun StatementGenerator.generateThisOrSuperReceiver(receiver: ReceiverVal
|
||||
receiver as? ExpressionReceiver ?: throw AssertionError("'this' or 'super' receiver should be an expression receiver")
|
||||
val ktReceiver = expressionReceiver.expression
|
||||
return IrGetValueImpl(
|
||||
ktReceiver.startOffset, ktReceiver.endOffset,
|
||||
ktReceiver.startOffsetSkippingComments, ktReceiver.endOffset,
|
||||
expressionReceiver.type.toIrType(),
|
||||
context.symbolTable.referenceValueParameter(classDescriptor.thisAsReceiverParameter)
|
||||
)
|
||||
@@ -164,7 +164,7 @@ fun StatementGenerator.generateCallReceiver(
|
||||
"Call for member imported from object $calleeDescriptor has non-null dispatch receiver $dispatchReceiver"
|
||||
}
|
||||
dispatchReceiverValue =
|
||||
generateReceiverForCalleeImportedFromObject(ktDefaultElement.startOffset, ktDefaultElement.endOffset, calleeDescriptor)
|
||||
generateReceiverForCalleeImportedFromObject(ktDefaultElement.startOffsetSkippingComments, ktDefaultElement.endOffset, calleeDescriptor)
|
||||
extensionReceiverValue = generateReceiverOrNull(ktDefaultElement, extensionReceiver)
|
||||
}
|
||||
is TypeAliasConstructorDescriptor -> {
|
||||
@@ -186,7 +186,7 @@ fun StatementGenerator.generateCallReceiver(
|
||||
SimpleCallReceiver(dispatchReceiverValue, extensionReceiverValue)
|
||||
extensionReceiverValue != null || dispatchReceiverValue != null ->
|
||||
SafeCallReceiver(
|
||||
this, ktDefaultElement.startOffset, ktDefaultElement.endOffset,
|
||||
this, ktDefaultElement.startOffsetSkippingComments, ktDefaultElement.endOffset,
|
||||
extensionReceiverValue, dispatchReceiverValue, isAssignmentReceiver
|
||||
)
|
||||
else ->
|
||||
@@ -218,7 +218,7 @@ fun StatementGenerator.generateVarargExpression(
|
||||
}
|
||||
|
||||
val varargStartOffset = varargArgument.arguments.fold(Int.MAX_VALUE) { minStartOffset, argument ->
|
||||
Math.min(minStartOffset, argument.asElement().startOffset)
|
||||
Math.min(minStartOffset, argument.asElement().startOffsetSkippingComments)
|
||||
}
|
||||
val varargEndOffset = varargArgument.arguments.fold(Int.MIN_VALUE) { maxEndOffset, argument ->
|
||||
Math.max(maxEndOffset, argument.asElement().endOffset)
|
||||
@@ -235,7 +235,7 @@ fun StatementGenerator.generateVarargExpression(
|
||||
val irVarargElement =
|
||||
if (argument.getSpreadElement() != null)
|
||||
IrSpreadElementImpl(
|
||||
ktArgumentExpression.startOffset, ktArgumentExpression.endOffset,
|
||||
ktArgumentExpression.startOffsetSkippingComments, ktArgumentExpression.endOffset,
|
||||
generateExpression(ktArgumentExpression)
|
||||
)
|
||||
else
|
||||
@@ -333,7 +333,7 @@ fun StatementGenerator.pregenerateExtensionInvokeCall(resolvedCall: ResolvedCall
|
||||
call.callReceiver =
|
||||
if (resolvedCall.call.isSafeCall())
|
||||
SafeExtensionInvokeCallReceiver(
|
||||
this, ktCallElement.startOffset, ktCallElement.endOffset,
|
||||
this, ktCallElement.startOffsetSkippingComments, ktCallElement.endOffset,
|
||||
call, functionReceiverValue, extensionInvokeReceiverValue
|
||||
)
|
||||
else
|
||||
|
||||
+11
-11
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||
import org.jetbrains.kotlin.ir.util.referenceFunction
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.*
|
||||
import org.jetbrains.kotlin.psi2ir.unwrappedGetMethod
|
||||
import org.jetbrains.kotlin.psi2ir.unwrappedSetMethod
|
||||
@@ -76,7 +76,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
||||
val irAssignmentReceiver = generateAssignmentReceiver(ktBaseExpression, origin)
|
||||
|
||||
return irAssignmentReceiver.assign { irLValue ->
|
||||
irBlock(ktExpression.startOffset, ktExpression.endOffset, origin, irLValue.type) {
|
||||
irBlock(ktExpression.startOffsetSkippingComments, ktExpression.endOffset, origin, irLValue.type) {
|
||||
val opCall = statementGenerator.pregenerateCall(opResolvedCall)
|
||||
opCall.setExplicitReceiverValue(irLValue)
|
||||
val irOpCall = CallGenerator(statementGenerator).generateCall(ktExpression, opCall, origin)
|
||||
@@ -92,7 +92,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
||||
val irAssignmentReceiver = generateAssignmentReceiver(ktBaseExpression, origin)
|
||||
|
||||
return irAssignmentReceiver.assign { irLValue ->
|
||||
irBlock(ktExpression.startOffset, ktExpression.endOffset, origin, irLValue.type) {
|
||||
irBlock(ktExpression.startOffsetSkippingComments, ktExpression.endOffset, origin, irLValue.type) {
|
||||
val temporary = irTemporary(irLValue.load())
|
||||
val opCall = statementGenerator.pregenerateCall(opResolvedCall)
|
||||
opCall.setExplicitReceiverValue(
|
||||
@@ -116,7 +116,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
||||
return when (descriptor) {
|
||||
is SyntheticFieldDescriptor -> {
|
||||
val receiverValue =
|
||||
statementGenerator.generateBackingFieldReceiver(ktLeft.startOffset, ktLeft.endOffset, resolvedCall, descriptor)
|
||||
statementGenerator.generateBackingFieldReceiver(ktLeft.startOffsetSkippingComments, ktLeft.endOffset, resolvedCall, descriptor)
|
||||
createBackingFieldLValue(ktLeft, descriptor.propertyDescriptor, receiverValue, origin)
|
||||
}
|
||||
is LocalVariableDescriptor ->
|
||||
@@ -124,7 +124,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
||||
if (descriptor.isDelegated)
|
||||
DelegatedLocalPropertyLValue(
|
||||
context,
|
||||
ktLeft.startOffset, ktLeft.endOffset,
|
||||
ktLeft.startOffsetSkippingComments, ktLeft.endOffset,
|
||||
descriptor.type.toIrType(),
|
||||
descriptor.getter?.let { context.symbolTable.referenceDeclaredFunction(it) },
|
||||
descriptor.setter?.let { context.symbolTable.referenceDeclaredFunction(it) },
|
||||
@@ -148,7 +148,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
||||
) =
|
||||
VariableLValue(
|
||||
context,
|
||||
ktExpression.startOffset, ktExpression.endOffset,
|
||||
ktExpression.startOffsetSkippingComments, ktExpression.endOffset,
|
||||
context.symbolTable.referenceValue(descriptor),
|
||||
descriptor.type.toIrType(),
|
||||
origin
|
||||
@@ -162,7 +162,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
||||
): BackingFieldLValue =
|
||||
BackingFieldLValue(
|
||||
context,
|
||||
ktExpression.startOffset, ktExpression.endOffset,
|
||||
ktExpression.startOffsetSkippingComments, ktExpression.endOffset,
|
||||
descriptor.type.toIrType(),
|
||||
context.symbolTable.referenceField(descriptor),
|
||||
receiverValue, origin
|
||||
@@ -179,7 +179,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
||||
val thisAsReceiverParameter = thisClass.thisAsReceiverParameter
|
||||
val thisType = thisAsReceiverParameter.type.toIrType()
|
||||
val irThis = IrGetValueImpl(
|
||||
ktLeft.startOffset, ktLeft.endOffset,
|
||||
ktLeft.startOffsetSkippingComments, ktLeft.endOffset,
|
||||
thisType,
|
||||
context.symbolTable.referenceValueParameter(thisAsReceiverParameter)
|
||||
)
|
||||
@@ -222,7 +222,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
||||
AccessorPropertyLValue(
|
||||
context,
|
||||
scope,
|
||||
ktExpression.startOffset, ktExpression.endOffset, origin,
|
||||
ktExpression.startOffsetSkippingComments, ktExpression.endOffset, origin,
|
||||
propertyIrType,
|
||||
getterSymbol,
|
||||
getterDescriptor,
|
||||
@@ -236,7 +236,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
||||
FieldPropertyLValue(
|
||||
context,
|
||||
scope,
|
||||
ktExpression.startOffset, ktExpression.endOffset, origin,
|
||||
ktExpression.startOffsetSkippingComments, ktExpression.endOffset, origin,
|
||||
context.symbolTable.referenceField(descriptor),
|
||||
propertyIrType,
|
||||
propertyReceiver,
|
||||
@@ -275,7 +275,7 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
||||
return ArrayAccessAssignmentReceiver(
|
||||
irArray, irIndexExpressions, indexedGetCall, indexedSetCall,
|
||||
CallGenerator(statementGenerator),
|
||||
ktLeft.startOffset, ktLeft.endOffset, origin
|
||||
ktLeft.startOffsetSkippingComments, ktLeft.endOffset, origin
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.pureEndOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.pureStartOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.psi.synthetics.findClassDescriptor
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.VariableLValue
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
@@ -52,7 +53,7 @@ class BodyGenerator(
|
||||
fun generateFunctionBody(ktBody: KtExpression): IrBody {
|
||||
val statementGenerator = createStatementGenerator()
|
||||
|
||||
val irBlockBody = IrBlockBodyImpl(ktBody.startOffset, ktBody.endOffset)
|
||||
val irBlockBody = IrBlockBodyImpl(ktBody.startOffsetSkippingComments, ktBody.endOffset)
|
||||
if (ktBody is KtBlockExpression) {
|
||||
statementGenerator.generateStatements(ktBody.statements, irBlockBody)
|
||||
} else {
|
||||
@@ -69,14 +70,14 @@ class BodyGenerator(
|
||||
val statementGenerator = createStatementGenerator()
|
||||
|
||||
val ktBody = ktFun.bodyExpression!!
|
||||
val irBlockBody = IrBlockBodyImpl(ktBody.startOffset, ktBody.endOffset)
|
||||
val irBlockBody = IrBlockBodyImpl(ktBody.startOffsetSkippingComments, ktBody.endOffset)
|
||||
|
||||
for (ktParameter in ktFun.valueParameters) {
|
||||
val ktDestructuringDeclaration = ktParameter.destructuringDeclaration ?: continue
|
||||
val valueParameter = getOrFail(BindingContext.VALUE_PARAMETER, ktParameter)
|
||||
val parameterValue = VariableLValue(
|
||||
context,
|
||||
ktDestructuringDeclaration.startOffset, ktDestructuringDeclaration.endOffset,
|
||||
ktDestructuringDeclaration.startOffsetSkippingComments, ktDestructuringDeclaration.endOffset,
|
||||
context.symbolTable.referenceValue(valueParameter),
|
||||
valueParameter.type.toIrType(),
|
||||
IrStatementOrigin.DESTRUCTURING_DECLARATION
|
||||
@@ -94,9 +95,9 @@ class BodyGenerator(
|
||||
} else {
|
||||
irBlockBody.statements.add(
|
||||
generateReturnExpression(
|
||||
ktBody.startOffset, ktBody.endOffset,
|
||||
ktBody.startOffsetSkippingComments, ktBody.endOffset,
|
||||
IrGetObjectValueImpl(
|
||||
ktBody.startOffset, ktBody.endOffset, context.irBuiltIns.unitType,
|
||||
ktBody.startOffsetSkippingComments, ktBody.endOffset, context.irBuiltIns.unitType,
|
||||
context.symbolTable.referenceClass(context.builtIns.unit)
|
||||
)
|
||||
)
|
||||
@@ -134,7 +135,7 @@ class BodyGenerator(
|
||||
|
||||
|
||||
fun generateSecondaryConstructorBody(ktConstructor: KtSecondaryConstructor): IrBody {
|
||||
val irBlockBody = IrBlockBodyImpl(ktConstructor.startOffset, ktConstructor.endOffset)
|
||||
val irBlockBody = IrBlockBodyImpl(ktConstructor.startOffsetSkippingComments, ktConstructor.endOffset)
|
||||
|
||||
generateDelegatingConstructorCall(irBlockBody, ktConstructor)
|
||||
|
||||
@@ -164,7 +165,7 @@ class BodyGenerator(
|
||||
|
||||
val delegatingConstructorCall = statementGenerator.pregenerateCall(delegatingConstructorResolvedCall)
|
||||
val irDelegatingConstructorCall = CallGenerator(statementGenerator).generateDelegatingConstructorCall(
|
||||
ktDelegatingConstructorCall.startOffset, ktDelegatingConstructorCall.endOffset,
|
||||
ktDelegatingConstructorCall.startOffsetSkippingComments, ktDelegatingConstructorCall.endOffset,
|
||||
delegatingConstructorCall
|
||||
)
|
||||
irBlockBody.statements.add(irDelegatingConstructorCall)
|
||||
@@ -197,14 +198,14 @@ class BodyGenerator(
|
||||
}
|
||||
|
||||
fun generateSecondaryConstructorBodyWithNestedInitializers(ktConstructor: KtSecondaryConstructor): IrBody {
|
||||
val irBlockBody = IrBlockBodyImpl(ktConstructor.startOffset, ktConstructor.endOffset)
|
||||
val irBlockBody = IrBlockBodyImpl(ktConstructor.startOffsetSkippingComments, ktConstructor.endOffset)
|
||||
|
||||
generateDelegatingConstructorCall(irBlockBody, ktConstructor)
|
||||
|
||||
val classDescriptor = getOrFail(BindingContext.CONSTRUCTOR, ktConstructor).containingDeclaration as ClassDescriptor
|
||||
irBlockBody.statements.add(
|
||||
IrInstanceInitializerCallImpl(
|
||||
ktConstructor.startOffset, ktConstructor.endOffset,
|
||||
ktConstructor.startOffsetSkippingComments, ktConstructor.endOffset,
|
||||
context.symbolTable.referenceClass(classDescriptor),
|
||||
context.irBuiltIns.unitType
|
||||
)
|
||||
@@ -239,7 +240,7 @@ class BodyGenerator(
|
||||
if (ktSuperTypeListEntry is KtSuperTypeCallEntry) {
|
||||
val superConstructorCall = statementGenerator.pregenerateCall(getResolvedCall(ktSuperTypeListEntry)!!)
|
||||
val irSuperConstructorCall = CallGenerator(statementGenerator).generateDelegatingConstructorCall(
|
||||
ktSuperTypeListEntry.startOffset, ktSuperTypeListEntry.endOffset, superConstructorCall
|
||||
ktSuperTypeListEntry.startOffsetSkippingComments, ktSuperTypeListEntry.endOffset, superConstructorCall
|
||||
)
|
||||
irBlockBody.statements.add(irSuperConstructorCall)
|
||||
return
|
||||
@@ -278,7 +279,7 @@ class BodyGenerator(
|
||||
val enumConstructor = context.builtIns.enum.constructors.single()
|
||||
irBlockBody.statements.add(
|
||||
IrEnumConstructorCallImpl(
|
||||
ktElement.startOffset, ktElement.endOffset,
|
||||
ktElement.startOffsetSkippingComments, ktElement.endOffset,
|
||||
context.irBuiltIns.unitType,
|
||||
context.symbolTable.referenceConstructor(enumConstructor),
|
||||
1 // kotlin.Enum<T> has a single type parameter
|
||||
@@ -296,7 +297,7 @@ class BodyGenerator(
|
||||
if (ktEnumEntry.declarations.isNotEmpty()) {
|
||||
val enumEntryConstructor = enumEntryDescriptor.unsubstitutedPrimaryConstructor!!
|
||||
return IrEnumConstructorCallImpl(
|
||||
ktEnumEntry.startOffset, ktEnumEntry.endOffset,
|
||||
ktEnumEntry.startOffsetSkippingComments, ktEnumEntry.endOffset,
|
||||
context.irBuiltIns.unitType,
|
||||
context.symbolTable.referenceConstructor(enumEntryConstructor),
|
||||
0 // enums can't be generic
|
||||
@@ -328,7 +329,7 @@ class BodyGenerator(
|
||||
ktEnumEntry: KtEnumEntry
|
||||
) =
|
||||
CallGenerator(this).generateEnumConstructorSuperCall(
|
||||
ktEnumEntry.startOffset, ktEnumEntry.endOffset,
|
||||
ktEnumEntry.startOffsetSkippingComments, ktEnumEntry.endOffset,
|
||||
pregenerateCall(constructorCall)
|
||||
)
|
||||
|
||||
|
||||
+11
-11
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.classifierOrNull
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.psi2ir.deparenthesize
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.defaultLoad
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
@@ -71,12 +71,12 @@ class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : Sta
|
||||
): IrWhen {
|
||||
if (irBranches.size == 1) {
|
||||
val irBranch0 = irBranches[0]
|
||||
return buildStatement(ktIf.startOffset, ktIf.endOffset) {
|
||||
return buildStatement(ktIf.startOffsetSkippingComments, ktIf.endOffset) {
|
||||
irIfThenMaybeElse(resultType, irBranch0.condition, irBranch0.result, irElseResult)
|
||||
}
|
||||
}
|
||||
|
||||
val irWhen = IrWhenImpl(ktIf.startOffset, ktIf.endOffset, resultType, IrStatementOrigin.WHEN)
|
||||
val irWhen = IrWhenImpl(ktIf.startOffsetSkippingComments, ktIf.endOffset, resultType, IrStatementOrigin.WHEN)
|
||||
|
||||
irWhen.branches.addAll(irBranches)
|
||||
|
||||
@@ -108,7 +108,7 @@ class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : Sta
|
||||
else -> context.irBuiltIns.unitType
|
||||
}
|
||||
|
||||
val irWhen = IrWhenImpl(expression.startOffset, expression.endOffset, resultType, IrStatementOrigin.WHEN)
|
||||
val irWhen = IrWhenImpl(expression.startOffsetSkippingComments, expression.endOffset, resultType, IrStatementOrigin.WHEN)
|
||||
|
||||
for (ktEntry in expression.entries) {
|
||||
if (ktEntry.isElse) {
|
||||
@@ -169,16 +169,16 @@ class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : Sta
|
||||
private fun generateWhenBody(expression: KtWhenExpression, irSubject: IrVariable?, irWhen: IrWhen): IrExpression =
|
||||
if (irSubject == null) {
|
||||
if (irWhen.branches.isEmpty())
|
||||
IrBlockImpl(expression.startOffset, expression.endOffset, context.irBuiltIns.unitType, IrStatementOrigin.WHEN)
|
||||
IrBlockImpl(expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.unitType, IrStatementOrigin.WHEN)
|
||||
else
|
||||
irWhen
|
||||
} else {
|
||||
if (irWhen.branches.isEmpty()) {
|
||||
val irBlock = IrBlockImpl(expression.startOffset, expression.endOffset, context.irBuiltIns.unitType, IrStatementOrigin.WHEN)
|
||||
val irBlock = IrBlockImpl(expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.unitType, IrStatementOrigin.WHEN)
|
||||
irBlock.statements.add(irSubject)
|
||||
irBlock
|
||||
} else {
|
||||
val irBlock = IrBlockImpl(expression.startOffset, expression.endOffset, irWhen.type, IrStatementOrigin.WHEN)
|
||||
val irBlock = IrBlockImpl(expression.startOffsetSkippingComments, expression.endOffset, irWhen.type, IrStatementOrigin.WHEN)
|
||||
irBlock.statements.add(irSubject)
|
||||
irBlock.statements.add(irWhen)
|
||||
irBlock
|
||||
@@ -206,7 +206,7 @@ class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : Sta
|
||||
val irTypeOperand = typeOperand.toIrType()
|
||||
val typeSymbol = irTypeOperand.classifierOrNull ?: throw AssertionError("Not a classifier type: $typeOperand")
|
||||
val irInstanceOf = IrTypeOperatorCallImpl(
|
||||
ktCondition.startOffset, ktCondition.endOffset,
|
||||
ktCondition.startOffsetSkippingComments, ktCondition.endOffset,
|
||||
context.irBuiltIns.booleanType,
|
||||
IrTypeOperator.INSTANCEOF,
|
||||
irTypeOperand, typeSymbol,
|
||||
@@ -214,7 +214,7 @@ class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : Sta
|
||||
)
|
||||
return if (ktCondition.isNegated)
|
||||
IrUnaryPrimitiveImpl(
|
||||
ktCondition.startOffset, ktCondition.endOffset,
|
||||
ktCondition.startOffsetSkippingComments, ktCondition.endOffset,
|
||||
context.irBuiltIns.booleanType,
|
||||
IrStatementOrigin.EXCL, context.irBuiltIns.booleanNotSymbol,
|
||||
irInstanceOf
|
||||
@@ -233,7 +233,7 @@ class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : Sta
|
||||
irInCall
|
||||
IrStatementOrigin.NOT_IN ->
|
||||
IrUnaryPrimitiveImpl(
|
||||
ktCondition.startOffset, ktCondition.endOffset,
|
||||
ktCondition.startOffsetSkippingComments, ktCondition.endOffset,
|
||||
context.irBuiltIns.booleanType,
|
||||
IrStatementOrigin.EXCL, context.irBuiltIns.booleanNotSymbol,
|
||||
irInCall
|
||||
@@ -246,7 +246,7 @@ class BranchingExpressionGenerator(statementGenerator: StatementGenerator) : Sta
|
||||
val ktExpression = ktCondition.expression
|
||||
val irExpression = ktExpression!!.genExpr()
|
||||
return OperatorExpressionGenerator(statementGenerator).generateEquality(
|
||||
ktCondition.startOffset, ktCondition.endOffset, IrStatementOrigin.EQEQ,
|
||||
ktCondition.startOffsetSkippingComments, ktCondition.endOffset, IrStatementOrigin.EQEQ,
|
||||
irSubject.defaultLoad(), irExpression,
|
||||
context.bindingContext[BindingContext.PRIMITIVE_NUMERIC_COMPARISON_INFO, ktExpression]
|
||||
)
|
||||
|
||||
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.ir.util.referenceFunction
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.*
|
||||
import org.jetbrains.kotlin.psi2ir.unwrappedGetMethod
|
||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||
@@ -260,7 +260,7 @@ class CallGenerator(statementGenerator: StatementGenerator) : StatementGenerator
|
||||
}
|
||||
|
||||
fun CallGenerator.generateCall(ktElement: KtElement, call: CallBuilder, origin: IrStatementOrigin? = null) =
|
||||
generateCall(ktElement.startOffset, ktElement.endOffset, call, origin)
|
||||
generateCall(ktElement.startOffsetSkippingComments, ktElement.endOffset, call, origin)
|
||||
|
||||
fun CallGenerator.generateCall(irExpression: IrExpression, call: CallBuilder, origin: IrStatementOrigin? = null) =
|
||||
generateCall(irExpression.startOffset, irExpression.endOffset, call, origin)
|
||||
|
||||
@@ -35,7 +35,7 @@ import org.jetbrains.kotlin.psi.KtPureClassOrObject
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.pureEndOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.pureStartOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.psi.synthetics.SyntheticClassOrObjectDescriptor
|
||||
import org.jetbrains.kotlin.psi.synthetics.findClassDescriptor
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
@@ -141,7 +141,7 @@ class ClassGenerator(
|
||||
?: throw AssertionError("Unexpected supertype constructor for delegation: $superTypeConstructorDescriptor")
|
||||
val delegateDescriptor = IrImplementingDelegateDescriptorImpl(irClass.descriptor, delegateType, superType)
|
||||
val irDelegateField = context.symbolTable.declareField(
|
||||
ktDelegateExpression.startOffset, ktDelegateExpression.endOffset,
|
||||
ktDelegateExpression.startOffsetSkippingComments, ktDelegateExpression.endOffset,
|
||||
IrDeclarationOrigin.DELEGATE,
|
||||
delegateDescriptor, delegateDescriptor.type.toIrType(),
|
||||
createBodyGenerator(irClass.symbol).generateExpressionBody(ktDelegateExpression)
|
||||
@@ -385,7 +385,7 @@ class ClassGenerator(
|
||||
fun generateEnumEntry(ktEnumEntry: KtEnumEntry): IrEnumEntry {
|
||||
val enumEntryDescriptor = getOrFail(BindingContext.CLASS, ktEnumEntry)
|
||||
return context.symbolTable.declareEnumEntry(
|
||||
ktEnumEntry.startOffset,
|
||||
ktEnumEntry.startOffsetSkippingComments,
|
||||
ktEnumEntry.endOffset,
|
||||
IrDeclarationOrigin.DEFINED,
|
||||
enumEntryDescriptor
|
||||
|
||||
+3
-3
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.util.withScope
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.psi2ir.endOffsetOrUndefined
|
||||
import org.jetbrains.kotlin.psi2ir.pureEndOffsetOrUndefined
|
||||
import org.jetbrains.kotlin.psi2ir.pureStartOffsetOrUndefined
|
||||
@@ -53,7 +53,7 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
|
||||
generateTypeAliasDeclaration(ktDeclaration)
|
||||
else ->
|
||||
IrErrorDeclarationImpl(
|
||||
ktDeclaration.startOffset, ktDeclaration.endOffset,
|
||||
ktDeclaration.startOffsetSkippingComments, ktDeclaration.endOffset,
|
||||
getOrFail(BindingContext.DECLARATION_TO_DESCRIPTOR, ktDeclaration)
|
||||
)
|
||||
}
|
||||
@@ -82,7 +82,7 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
|
||||
|
||||
private fun generateTypeAliasDeclaration(ktDeclaration: KtTypeAlias): IrDeclaration =
|
||||
IrTypeAliasImpl(
|
||||
ktDeclaration.startOffset, ktDeclaration.endOffset, IrDeclarationOrigin.DEFINED,
|
||||
ktDeclaration.startOffsetSkippingComments, ktDeclaration.endOffset, IrDeclarationOrigin.DEFINED,
|
||||
getOrFail(BindingContext.TYPE_ALIAS, ktDeclaration)
|
||||
)
|
||||
|
||||
|
||||
+16
-16
@@ -39,7 +39,7 @@ import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtProperty
|
||||
import org.jetbrains.kotlin.psi.KtPropertyDelegate
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.*
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
@@ -56,7 +56,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
|
||||
val kPropertyType = getKPropertyTypeForDelegatedProperty(propertyDescriptor)
|
||||
|
||||
val irProperty = IrPropertyImpl(
|
||||
ktProperty.startOffset, ktProperty.endOffset, IrDeclarationOrigin.DEFINED,
|
||||
ktProperty.startOffsetSkippingComments, ktProperty.endOffset, IrDeclarationOrigin.DEFINED,
|
||||
isDelegated = true,
|
||||
descriptor = propertyDescriptor
|
||||
).apply {
|
||||
@@ -97,7 +97,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
|
||||
generateBody: (IrFunction) -> IrBody
|
||||
): IrSimpleFunction =
|
||||
context.symbolTable.declareSimpleFunctionWithOverrides(
|
||||
ktDelegate.startOffset, ktDelegate.endOffset,
|
||||
ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset,
|
||||
IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR,
|
||||
accessorDescriptor
|
||||
).buildWithScope { irAccessor ->
|
||||
@@ -125,7 +125,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
|
||||
val delegateDescriptor = createPropertyDelegateDescriptor(propertyDescriptor, delegateType, kPropertyType)
|
||||
|
||||
return context.symbolTable.declareField(
|
||||
ktDelegate.startOffset, ktDelegate.endOffset, IrDeclarationOrigin.DELEGATE,
|
||||
ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset, IrDeclarationOrigin.DELEGATE,
|
||||
delegateDescriptor, delegateDescriptor.type.toIrType()
|
||||
).also { irDelegate ->
|
||||
irDelegate.initializer = generateInitializerBodyForPropertyDelegate(
|
||||
@@ -152,7 +152,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
|
||||
provideDelegateCall.setExplicitReceiverValue(OnceExpressionValue(irDelegateInitializer.expression))
|
||||
provideDelegateCall.irValueArgumentsByIndex[1] = createCallableReference(ktDelegate, kPropertyType, property, scopeOwner)
|
||||
val irProvideDelegate =
|
||||
CallGenerator(statementGenerator).generateCall(ktDelegate.startOffset, ktDelegate.endOffset, provideDelegateCall)
|
||||
CallGenerator(statementGenerator).generateCall(ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset, provideDelegateCall)
|
||||
return IrExpressionBodyImpl(irProvideDelegate)
|
||||
}
|
||||
|
||||
@@ -164,7 +164,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
|
||||
val thisValue = createThisValueForDelegate(thisClass, ktDelegate)
|
||||
return BackingFieldLValue(
|
||||
context,
|
||||
ktDelegate.startOffset, ktDelegate.endOffset,
|
||||
ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset,
|
||||
irDelegateField.descriptor.type.toIrType(),
|
||||
irDelegateField,
|
||||
thisValue,
|
||||
@@ -177,7 +177,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
|
||||
generateExpressionValue(it.thisAsReceiverParameter.type.toIrType()) {
|
||||
val thisAsReceiverParameter = thisClass.thisAsReceiverParameter
|
||||
IrGetValueImpl(
|
||||
ktDelegate.startOffset, ktDelegate.endOffset,
|
||||
ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset,
|
||||
thisAsReceiverParameter.type.toIrType(),
|
||||
context.symbolTable.referenceValueParameter(thisAsReceiverParameter)
|
||||
)
|
||||
@@ -191,7 +191,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
|
||||
statementGenerator: StatementGenerator
|
||||
): IrCallableReference =
|
||||
ReflectionReferencesGenerator(statementGenerator).generateCallableReference(
|
||||
ktElement.startOffset, ktElement.endOffset, type,
|
||||
ktElement.startOffsetSkippingComments, ktElement.endOffset, type,
|
||||
referencedDescriptor,
|
||||
null, IrStatementOrigin.PROPERTY_REFERENCE_FOR_DELEGATE
|
||||
)
|
||||
@@ -215,7 +215,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
|
||||
scopeOwner: IrSymbol
|
||||
): IrLocalDelegatedPropertyReference =
|
||||
ReflectionReferencesGenerator(createBodyGenerator(scopeOwner).createStatementGenerator()).generateLocalDelegatedPropertyReference(
|
||||
ktElement.startOffset, ktElement.endOffset,
|
||||
ktElement.startOffsetSkippingComments, ktElement.endOffset,
|
||||
type, variableDescriptor, irDelegateSymbol,
|
||||
IrStatementOrigin.PROPERTY_REFERENCE_FOR_DELEGATE
|
||||
)
|
||||
@@ -229,7 +229,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
|
||||
val kPropertyType = getKPropertyTypeForLocalDelegatedProperty(variableDescriptor)
|
||||
|
||||
val irLocalDelegatedProperty = IrLocalDelegatedPropertyImpl(
|
||||
ktProperty.startOffset, ktProperty.endOffset, IrDeclarationOrigin.DEFINED,
|
||||
ktProperty.startOffsetSkippingComments, ktProperty.endOffset, IrDeclarationOrigin.DEFINED,
|
||||
variableDescriptor,
|
||||
variableDescriptor.type.toIrType()
|
||||
).apply {
|
||||
@@ -280,7 +280,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
|
||||
val delegateDescriptor = createLocalPropertyDelegatedDescriptor(variableDescriptor, delegateType, kPropertyType)
|
||||
|
||||
return context.symbolTable.declareVariable(
|
||||
ktDelegate.startOffset, ktDelegate.endOffset, IrDeclarationOrigin.DELEGATE,
|
||||
ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset, IrDeclarationOrigin.DELEGATE,
|
||||
delegateDescriptor, delegateDescriptor.type.toIrType()
|
||||
).also { irVariable ->
|
||||
irVariable.initializer = generateInitializerForLocalDelegatedPropertyDelegate(
|
||||
@@ -323,11 +323,11 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
|
||||
createLocalDelegatedPropertyReference(ktDelegate, kPropertyType, variableDescriptor, delegateSymbol, scopeOwner)
|
||||
}
|
||||
|
||||
return CallGenerator(statementGenerator).generateCall(ktDelegate.startOffset, ktDelegate.endOffset, provideDelegateCall)
|
||||
return CallGenerator(statementGenerator).generateCall(ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset, provideDelegateCall)
|
||||
}
|
||||
|
||||
private fun createVariableValueForDelegate(irDelegate: IrVariableSymbol, ktDelegate: KtPropertyDelegate) =
|
||||
VariableLValue(context, ktDelegate.startOffset, ktDelegate.endOffset, irDelegate, irDelegate.descriptor.type.toIrType())
|
||||
VariableLValue(context, ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset, irDelegate, irDelegate.descriptor.type.toIrType())
|
||||
|
||||
private inline fun createLocalPropertyAccessor(
|
||||
getterDescriptor: VariableAccessorDescriptor,
|
||||
@@ -335,7 +335,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
|
||||
generateBody: (IrFunction) -> IrBody
|
||||
) =
|
||||
context.symbolTable.declareSimpleFunctionWithOverrides(
|
||||
ktDelegate.startOffset, ktDelegate.endOffset,
|
||||
ktDelegate.startOffsetSkippingComments, ktDelegate.endOffset,
|
||||
IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR,
|
||||
getterDescriptor
|
||||
).buildWithScope { irAccessor ->
|
||||
@@ -369,7 +369,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
|
||||
irPropertyReference: IrCallableReference
|
||||
): IrBody =
|
||||
with(createBodyGenerator(irGetter.symbol)) {
|
||||
val startOffset = ktDelegate.startOffset
|
||||
val startOffset = ktDelegate.startOffsetSkippingComments
|
||||
val endOffset = ktDelegate.endOffset
|
||||
irBlockBody(startOffset, endOffset) {
|
||||
val statementGenerator = createStatementGenerator()
|
||||
@@ -394,7 +394,7 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D
|
||||
delegateReceiverValue: IntermediateValue,
|
||||
irPropertyReference: IrCallableReference
|
||||
): IrBody = with(createBodyGenerator(irSetter.symbol)) {
|
||||
val startOffset = ktDelegate.startOffset
|
||||
val startOffset = ktDelegate.startOffsetSkippingComments
|
||||
val endOffset = ktDelegate.endOffset
|
||||
irBlockBody(startOffset, endOffset) {
|
||||
val statementGenerator = createStatementGenerator()
|
||||
|
||||
+4
-4
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrErrorCallExpressionImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.types.ErrorUtils
|
||||
|
||||
class ErrorExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
@@ -41,7 +41,7 @@ class ErrorExpressionGenerator(statementGenerator: StatementGenerator) : Stateme
|
||||
else
|
||||
ErrorUtils.createErrorType("")
|
||||
IrErrorExpressionImpl(
|
||||
ktElement.startOffset, ktElement.endOffset,
|
||||
ktElement.startOffsetSkippingComments, ktElement.endOffset,
|
||||
errorExpressionType.toIrType(),
|
||||
e.message ?: ""
|
||||
)
|
||||
@@ -50,7 +50,7 @@ class ErrorExpressionGenerator(statementGenerator: StatementGenerator) : Stateme
|
||||
fun generateErrorCall(ktCall: KtCallExpression): IrExpression = generateErrorExpression(ktCall) {
|
||||
val type = getErrorExpressionType(ktCall).toIrType()
|
||||
|
||||
val irErrorCall = IrErrorCallExpressionImpl(ktCall.startOffset, ktCall.endOffset, type, "") // TODO problem description?
|
||||
val irErrorCall = IrErrorCallExpressionImpl(ktCall.startOffsetSkippingComments, ktCall.endOffset, type, "") // TODO problem description?
|
||||
irErrorCall.explicitReceiver = (ktCall.parent as? KtDotQualifiedExpression)?.run {
|
||||
receiverExpression.genExpr()
|
||||
}
|
||||
@@ -71,7 +71,7 @@ class ErrorExpressionGenerator(statementGenerator: StatementGenerator) : Stateme
|
||||
fun generateErrorSimpleName(ktName: KtSimpleNameExpression): IrExpression = generateErrorExpression(ktName) {
|
||||
val type = getErrorExpressionType(ktName).toIrType()
|
||||
|
||||
val irErrorCall = IrErrorCallExpressionImpl(ktName.startOffset, ktName.endOffset, type, "") // TODO problem description?
|
||||
val irErrorCall = IrErrorCallExpressionImpl(ktName.startOffsetSkippingComments, ktName.endOffset, type, "") // TODO problem description?
|
||||
irErrorCall.explicitReceiver = (ktName.parent as? KtDotQualifiedExpression)?.let { ktParent ->
|
||||
if (ktParent.receiverExpression == ktName) null
|
||||
else ktParent.receiverExpression.genExpr()
|
||||
|
||||
+4
-4
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.pureEndOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.pureStartOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.psi2ir.*
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
@@ -144,7 +144,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
||||
): IrBlockBody {
|
||||
val property = getter.correspondingProperty
|
||||
|
||||
val startOffset = ktProperty.startOffset
|
||||
val startOffset = ktProperty.startOffsetSkippingComments
|
||||
val endOffset = ktProperty.endOffset
|
||||
val irBody = IrBlockBodyImpl(startOffset, endOffset)
|
||||
|
||||
@@ -172,7 +172,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
||||
): IrBlockBody {
|
||||
val property = setter.correspondingProperty
|
||||
|
||||
val startOffset = ktProperty.startOffset
|
||||
val startOffset = ktProperty.startOffsetSkippingComments
|
||||
val endOffset = ktProperty.endOffset
|
||||
val irBody = IrBlockBodyImpl(startOffset, endOffset)
|
||||
|
||||
@@ -197,7 +197,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
||||
is ClassDescriptor -> {
|
||||
val thisAsReceiverParameter = containingDeclaration.thisAsReceiverParameter
|
||||
IrGetValueImpl(
|
||||
ktProperty.startOffset, ktProperty.endOffset,
|
||||
ktProperty.startOffsetSkippingComments, ktProperty.endOffset,
|
||||
thisAsReceiverParameter.type.toIrType(),
|
||||
context.symbolTable.referenceValue(thisAsReceiverParameter)
|
||||
)
|
||||
|
||||
+2
-2
@@ -23,11 +23,11 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtObjectLiteralExpression
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
|
||||
class LocalClassGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
fun generateObjectLiteral(ktObjectLiteral: KtObjectLiteralExpression): IrStatement {
|
||||
val startOffset = ktObjectLiteral.startOffset
|
||||
val startOffset = ktObjectLiteral.startOffsetSkippingComments
|
||||
val endOffset = ktObjectLiteral.endOffset
|
||||
val objectLiteralType = getInferredTypeWithImplicitCastsOrFail(ktObjectLiteral).toIrType()
|
||||
val irBlock = IrBlockImpl(startOffset, endOffset, objectLiteralType, IrStatementOrigin.OBJECT_LITERAL)
|
||||
|
||||
+3
-3
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl
|
||||
import org.jetbrains.kotlin.psi.KtLambdaExpression
|
||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
|
||||
class LocalFunctionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
fun generateLambda(ktLambda: KtLambdaExpression): IrStatement {
|
||||
@@ -50,14 +50,14 @@ class LocalFunctionGenerator(statementGenerator: StatementGenerator) : Statement
|
||||
} else {
|
||||
// anonymous function expression
|
||||
val funExpressionType = getInferredTypeWithImplicitCastsOrFail(ktFun).toIrType()
|
||||
val irBlock = IrBlockImpl(ktFun.startOffset, ktFun.endOffset, funExpressionType, IrStatementOrigin.ANONYMOUS_FUNCTION)
|
||||
val irBlock = IrBlockImpl(ktFun.startOffsetSkippingComments, ktFun.endOffset, funExpressionType, IrStatementOrigin.ANONYMOUS_FUNCTION)
|
||||
|
||||
val irFun = generateFunctionDeclaration(ktFun)
|
||||
irBlock.statements.add(irFun)
|
||||
|
||||
irBlock.statements.add(
|
||||
IrFunctionReferenceImpl(
|
||||
ktFun.startOffset, ktFun.endOffset, funExpressionType,
|
||||
ktFun.startOffsetSkippingComments, ktFun.endOffset, funExpressionType,
|
||||
irFun.symbol, irFun.symbol.descriptor, 0,
|
||||
IrStatementOrigin.ANONYMOUS_FUNCTION
|
||||
)
|
||||
|
||||
+10
-10
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.VariableLValue
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.setExplicitReceiverValue
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.resolve.BindingContext
|
||||
class LoopExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
fun generateWhileLoop(ktWhile: KtWhileExpression): IrExpression {
|
||||
val irLoop = IrWhileLoopImpl(
|
||||
ktWhile.startOffset, ktWhile.endOffset,
|
||||
ktWhile.startOffsetSkippingComments, ktWhile.endOffset,
|
||||
context.irBuiltIns.unitType, IrStatementOrigin.WHILE_LOOP
|
||||
)
|
||||
|
||||
@@ -54,7 +54,7 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen
|
||||
|
||||
fun generateDoWhileLoop(ktDoWhile: KtDoWhileExpression): IrExpression {
|
||||
val irLoop = IrDoWhileLoopImpl(
|
||||
ktDoWhile.startOffset, ktDoWhile.endOffset,
|
||||
ktDoWhile.startOffsetSkippingComments, ktDoWhile.endOffset,
|
||||
context.irBuiltIns.unitType, IrStatementOrigin.DO_WHILE_LOOP
|
||||
)
|
||||
|
||||
@@ -71,21 +71,21 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen
|
||||
|
||||
irLoop.label = getLoopLabel(ktDoWhile)
|
||||
|
||||
return IrBlockImpl(ktDoWhile.startOffset, ktDoWhile.endOffset, context.irBuiltIns.unitType).apply {
|
||||
return IrBlockImpl(ktDoWhile.startOffsetSkippingComments, ktDoWhile.endOffset, context.irBuiltIns.unitType).apply {
|
||||
statements.add(irLoop)
|
||||
}
|
||||
}
|
||||
|
||||
private fun generateWhileLoopBody(ktLoopBody: KtBlockExpression): IrExpression =
|
||||
IrBlockImpl(
|
||||
ktLoopBody.startOffset, ktLoopBody.endOffset, context.irBuiltIns.unitType, null,
|
||||
ktLoopBody.startOffsetSkippingComments, ktLoopBody.endOffset, context.irBuiltIns.unitType, null,
|
||||
ktLoopBody.statements.map { it.genStmt() }
|
||||
)
|
||||
|
||||
|
||||
private fun generateDoWhileLoopBody(ktLoopBody: KtBlockExpression): IrExpression =
|
||||
IrCompositeImpl(
|
||||
ktLoopBody.startOffset, ktLoopBody.endOffset, context.irBuiltIns.unitType, null,
|
||||
ktLoopBody.startOffsetSkippingComments, ktLoopBody.endOffset, context.irBuiltIns.unitType, null,
|
||||
ktLoopBody.statements.map { it.genStmt() }
|
||||
)
|
||||
|
||||
@@ -93,7 +93,7 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen
|
||||
val parentLoop = findParentLoop(ktBreak) ?: return ErrorExpressionGenerator(statementGenerator).generateErrorExpression(
|
||||
ktBreak, RuntimeException("Loop not found for break expression: ${ktBreak.text}")
|
||||
)
|
||||
return IrBreakImpl(ktBreak.startOffset, ktBreak.endOffset, context.irBuiltIns.nothingType, parentLoop).apply {
|
||||
return IrBreakImpl(ktBreak.startOffsetSkippingComments, ktBreak.endOffset, context.irBuiltIns.nothingType, parentLoop).apply {
|
||||
label = ktBreak.getLabelName()
|
||||
}
|
||||
}
|
||||
@@ -102,7 +102,7 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen
|
||||
val parentLoop = findParentLoop(ktContinue) ?: return ErrorExpressionGenerator(statementGenerator).generateErrorExpression(
|
||||
ktContinue, RuntimeException("Loop not found for continue expression: ${ktContinue.text}")
|
||||
)
|
||||
return IrContinueImpl(ktContinue.startOffset, ktContinue.endOffset, context.irBuiltIns.nothingType, parentLoop).apply {
|
||||
return IrContinueImpl(ktContinue.startOffsetSkippingComments, ktContinue.endOffset, context.irBuiltIns.nothingType, parentLoop).apply {
|
||||
label = ktContinue.getLabelName()
|
||||
}
|
||||
}
|
||||
@@ -154,7 +154,7 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen
|
||||
|
||||
val callGenerator = CallGenerator(statementGenerator)
|
||||
|
||||
val startOffset = ktFor.startOffset
|
||||
val startOffset = ktFor.startOffsetSkippingComments
|
||||
val endOffset = ktFor.endOffset
|
||||
|
||||
val irForBlock = IrBlockImpl(startOffset, endOffset, context.irBuiltIns.unitType, IrStatementOrigin.FOR_LOOP)
|
||||
@@ -185,7 +185,7 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen
|
||||
if (ktLoopParameter != null && ktLoopDestructuringDeclaration == null) {
|
||||
val loopParameter = getOrFail(BindingContext.VALUE_PARAMETER, ktLoopParameter)
|
||||
context.symbolTable.declareVariable(
|
||||
ktLoopParameter.startOffset, ktLoopParameter.endOffset, IrDeclarationOrigin.FOR_LOOP_VARIABLE,
|
||||
ktLoopParameter.startOffsetSkippingComments, ktLoopParameter.endOffset, IrDeclarationOrigin.FOR_LOOP_VARIABLE,
|
||||
loopParameter, loopParameter.type.toIrType(),
|
||||
irNextCall
|
||||
)
|
||||
|
||||
+14
-14
@@ -33,7 +33,7 @@ import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.psi2ir.containsNull
|
||||
import org.jetbrains.kotlin.psi2ir.findSingleFunction
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.safeCallOnDispatchReceiver
|
||||
@@ -52,7 +52,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
||||
|
||||
private fun createErrorExpression(ktExpression: KtExpression, text: String) =
|
||||
IrErrorExpressionImpl(
|
||||
ktExpression.startOffset,
|
||||
ktExpression.startOffsetSkippingComments,
|
||||
ktExpression.endOffset,
|
||||
context.irBuiltIns.nothingType,
|
||||
text
|
||||
@@ -103,7 +103,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
||||
}
|
||||
|
||||
return IrTypeOperatorCallImpl(
|
||||
expression.startOffset, expression.endOffset, resultType.toIrType(), irOperator, rhsType.toIrType(),
|
||||
expression.startOffsetSkippingComments, expression.endOffset, resultType.toIrType(), irOperator, rhsType.toIrType(),
|
||||
context.symbolTable.referenceClassifier(rhsType.constructor.declarationDescriptor!!),
|
||||
expression.left.genExpr()
|
||||
)
|
||||
@@ -115,7 +115,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
||||
val againstType = getOrFail(BindingContext.TYPE, expression.typeReference)
|
||||
|
||||
return IrTypeOperatorCallImpl(
|
||||
expression.startOffset, expression.endOffset, context.irBuiltIns.booleanType, irOperator,
|
||||
expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.booleanType, irOperator,
|
||||
againstType.toIrType(),
|
||||
context.symbolTable.referenceClassifier(againstType.constructor.declarationDescriptor!!),
|
||||
expression.leftHandSide.genExpr()
|
||||
@@ -151,7 +151,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
||||
val irArgument0 = expression.left!!.genExpr()
|
||||
val irArgument1 = expression.right!!.genExpr()
|
||||
|
||||
return irBlock(expression.startOffset, expression.endOffset, IrStatementOrigin.ELVIS, resultType) {
|
||||
return irBlock(expression.startOffsetSkippingComments, expression.endOffset, IrStatementOrigin.ELVIS, resultType) {
|
||||
val temporary = irTemporary(irArgument0, "elvis_lhs")
|
||||
+irIfNull(
|
||||
resultType,
|
||||
@@ -167,9 +167,9 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
||||
val irArgument1 = expression.right!!.genExpr()
|
||||
return when (irOperator) {
|
||||
IrStatementOrigin.OROR ->
|
||||
context.oror(expression.startOffset, expression.endOffset, irArgument0, irArgument1)
|
||||
context.oror(expression.startOffsetSkippingComments, expression.endOffset, irArgument0, irArgument1)
|
||||
IrStatementOrigin.ANDAND ->
|
||||
context.andand(expression.startOffset, expression.endOffset, irArgument0, irArgument1)
|
||||
context.andand(expression.startOffsetSkippingComments, expression.endOffset, irArgument0, irArgument1)
|
||||
else ->
|
||||
throw AssertionError("Unexpected binary boolean operator $irOperator")
|
||||
}
|
||||
@@ -185,7 +185,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
||||
irContainsCall
|
||||
IrStatementOrigin.NOT_IN ->
|
||||
IrUnaryPrimitiveImpl(
|
||||
expression.startOffset, expression.endOffset,
|
||||
expression.startOffsetSkippingComments, expression.endOffset,
|
||||
context.irBuiltIns.booleanType,
|
||||
IrStatementOrigin.NOT_IN,
|
||||
context.irBuiltIns.booleanNotSymbol,
|
||||
@@ -202,7 +202,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
||||
val irArgument1 = expression.right!!.genExpr()
|
||||
|
||||
val irIdentityEquals = IrBinaryPrimitiveImpl(
|
||||
expression.startOffset, expression.endOffset,
|
||||
expression.startOffsetSkippingComments, expression.endOffset,
|
||||
context.irBuiltIns.booleanType,
|
||||
irOperator,
|
||||
context.irBuiltIns.eqeqeqSymbol,
|
||||
@@ -214,7 +214,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
||||
irIdentityEquals
|
||||
IrStatementOrigin.EXCLEQEQ ->
|
||||
IrUnaryPrimitiveImpl(
|
||||
expression.startOffset, expression.endOffset,
|
||||
expression.startOffsetSkippingComments, expression.endOffset,
|
||||
context.irBuiltIns.booleanType,
|
||||
IrStatementOrigin.EXCLEQEQ,
|
||||
context.irBuiltIns.booleanNotSymbol,
|
||||
@@ -241,7 +241,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
||||
?: context.irBuiltIns.eqeqSymbol
|
||||
|
||||
val irEquals = IrBinaryPrimitiveImpl(
|
||||
expression.startOffset, expression.endOffset,
|
||||
expression.startOffsetSkippingComments, expression.endOffset,
|
||||
context.irBuiltIns.booleanType,
|
||||
irOperator,
|
||||
eqeqSymbol,
|
||||
@@ -254,7 +254,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
||||
irEquals
|
||||
IrStatementOrigin.EXCLEQ ->
|
||||
IrUnaryPrimitiveImpl(
|
||||
expression.startOffset, expression.endOffset,
|
||||
expression.startOffsetSkippingComments, expression.endOffset,
|
||||
context.irBuiltIns.booleanType,
|
||||
IrStatementOrigin.EXCLEQ,
|
||||
context.irBuiltIns.booleanNotSymbol,
|
||||
@@ -354,7 +354,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
||||
}
|
||||
|
||||
private fun generateComparisonOperator(expression: KtBinaryExpression, origin: IrStatementOrigin): IrExpression {
|
||||
val startOffset = expression.startOffset
|
||||
val startOffset = expression.startOffsetSkippingComments
|
||||
val endOffset = expression.endOffset
|
||||
|
||||
val comparisonInfo = getPrimitiveNumericComparisonInfo(expression)
|
||||
@@ -403,7 +403,7 @@ class OperatorExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
||||
|
||||
val resultType = irArgument.type.makeNotNull()
|
||||
|
||||
return irBlock(ktOperator.startOffset, ktOperator.endOffset, origin, resultType) {
|
||||
return irBlock(ktOperator.startOffsetSkippingComments, ktOperator.endOffset, origin, resultType) {
|
||||
val temporary = irTemporary(irArgument, "notnull")
|
||||
+irIfNull(
|
||||
resultType,
|
||||
|
||||
+6
-6
@@ -26,9 +26,9 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||
import org.jetbrains.kotlin.ir.util.declareFieldWithOverrides
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi2ir.pureEndOffsetOrUndefined
|
||||
import org.jetbrains.kotlin.psi2ir.pureStartOffsetOrUndefined
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.hasBackingField
|
||||
|
||||
@@ -47,7 +47,7 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
||||
|
||||
val irPropertyType = propertyDescriptor.type.toIrType()
|
||||
return IrPropertyImpl(
|
||||
ktParameter.startOffset, ktParameter.endOffset,
|
||||
ktParameter.startOffsetSkippingComments, ktParameter.endOffset,
|
||||
IrDeclarationOrigin.DEFINED, false,
|
||||
propertyDescriptor
|
||||
).also { irProperty ->
|
||||
@@ -55,7 +55,7 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
||||
generatePropertyBackingField(ktParameter, propertyDescriptor) {
|
||||
IrExpressionBodyImpl(
|
||||
IrGetValueImpl(
|
||||
ktParameter.startOffset, ktParameter.endOffset,
|
||||
ktParameter.startOffsetSkippingComments, ktParameter.endOffset,
|
||||
irPropertyType,
|
||||
irValueParameter.symbol,
|
||||
IrStatementOrigin.INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||
@@ -83,7 +83,7 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
||||
generateInitializer: (IrField) -> IrExpressionBody?
|
||||
): IrField =
|
||||
context.symbolTable.declareField(
|
||||
ktPropertyElement.startOffset, ktPropertyElement.endOffset,
|
||||
ktPropertyElement.startOffsetSkippingComments, ktPropertyElement.endOffset,
|
||||
IrDeclarationOrigin.PROPERTY_BACKING_FIELD,
|
||||
propertyDescriptor, propertyDescriptor.type.toIrType()
|
||||
).also {
|
||||
@@ -101,7 +101,7 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
||||
|
||||
private fun generateSimpleProperty(ktProperty: KtProperty, propertyDescriptor: PropertyDescriptor): IrProperty =
|
||||
IrPropertyImpl(
|
||||
ktProperty.startOffset, ktProperty.endOffset,
|
||||
ktProperty.startOffsetSkippingComments, ktProperty.endOffset,
|
||||
IrDeclarationOrigin.DEFINED,
|
||||
false,
|
||||
propertyDescriptor
|
||||
@@ -114,7 +114,7 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
||||
if (propertyDescriptor.isConst && compileTimeConst != null)
|
||||
IrExpressionBodyImpl(
|
||||
context.constantValueGenerator.generateConstantValueAsExpression(
|
||||
ktInitializer.startOffset, ktInitializer.endOffset,
|
||||
ktInitializer.startOffsetSkippingComments, ktInitializer.endOffset,
|
||||
compileTimeConst
|
||||
)
|
||||
)
|
||||
|
||||
+4
-4
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.ir.util.referenceFunction
|
||||
import org.jetbrains.kotlin.psi.KtCallableReferenceExpression
|
||||
import org.jetbrains.kotlin.psi.KtClassLiteralExpression
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.ImportedFromObjectCallableDescriptor
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
@@ -41,7 +41,7 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
|
||||
|
||||
return if (lhs is DoubleColonLHS.Expression && !lhs.isObjectQualifier) {
|
||||
IrGetClassImpl(
|
||||
ktClassLiteral.startOffset, ktClassLiteral.endOffset, resultType,
|
||||
ktClassLiteral.startOffsetSkippingComments, ktClassLiteral.endOffset, resultType,
|
||||
ktArgument.genExpr()
|
||||
)
|
||||
} else {
|
||||
@@ -49,7 +49,7 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
|
||||
val typeClass = typeConstructorDeclaration
|
||||
?: throw AssertionError("Unexpected type constructor for ${lhs.type}: $typeConstructorDeclaration")
|
||||
IrClassReferenceImpl(
|
||||
ktClassLiteral.startOffset, ktClassLiteral.endOffset, resultType,
|
||||
ktClassLiteral.startOffsetSkippingComments, ktClassLiteral.endOffset, resultType,
|
||||
context.symbolTable.referenceClassifier(typeClass), lhs.type.toIrType()
|
||||
)
|
||||
}
|
||||
@@ -62,7 +62,7 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
|
||||
val descriptorImportedFromObject = resultingDescriptor as? ImportedFromObjectCallableDescriptor<*>
|
||||
val referencedDescriptor = descriptorImportedFromObject?.callableFromObject ?: resultingDescriptor
|
||||
|
||||
val startOffset = ktCallableReference.startOffset
|
||||
val startOffset = ktCallableReference.startOffsetSkippingComments
|
||||
val endOffset = ktCallableReference.endOffset
|
||||
|
||||
return statementGenerator.generateCallReceiver(
|
||||
|
||||
+22
-22
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.util.referenceFunction
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.psi2ir.deparenthesize
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.IntermediateValue
|
||||
import org.jetbrains.kotlin.psi2ir.intermediate.createTemporaryVariableInBlock
|
||||
@@ -81,7 +81,7 @@ class StatementGenerator(
|
||||
|
||||
override fun visitExpression(expression: KtExpression, data: Nothing?): IrStatement =
|
||||
IrErrorExpressionImpl(
|
||||
expression.startOffset,
|
||||
expression.startOffsetSkippingComments,
|
||||
expression.endOffset,
|
||||
context.irBuiltIns.nothingType,
|
||||
expression::class.java.simpleName
|
||||
@@ -98,7 +98,7 @@ class StatementGenerator(
|
||||
}
|
||||
|
||||
return context.symbolTable.declareVariable(
|
||||
property.startOffset, property.endOffset, IrDeclarationOrigin.DEFINED,
|
||||
property.startOffsetSkippingComments, property.endOffset, IrDeclarationOrigin.DEFINED,
|
||||
variableDescriptor,
|
||||
variableDescriptor.type.toIrType(),
|
||||
property.initializer?.genExpr()
|
||||
@@ -116,7 +116,7 @@ class StatementGenerator(
|
||||
|
||||
override fun visitDestructuringDeclaration(multiDeclaration: KtDestructuringDeclaration, data: Nothing?): IrStatement {
|
||||
val irBlock = IrCompositeImpl(
|
||||
multiDeclaration.startOffset, multiDeclaration.endOffset,
|
||||
multiDeclaration.startOffsetSkippingComments, multiDeclaration.endOffset,
|
||||
context.irBuiltIns.unitType, IrStatementOrigin.DESTRUCTURING_DECLARATION
|
||||
)
|
||||
val ktInitializer = multiDeclaration.initializer!!
|
||||
@@ -145,11 +145,11 @@ class StatementGenerator(
|
||||
if (componentVariable.name.isSpecial) continue
|
||||
|
||||
val irComponentCall = callGenerator.generateCall(
|
||||
ktEntry.startOffset, ktEntry.endOffset, componentSubstitutedCall,
|
||||
ktEntry.startOffsetSkippingComments, ktEntry.endOffset, componentSubstitutedCall,
|
||||
IrStatementOrigin.COMPONENT_N.withIndex(index + 1)
|
||||
)
|
||||
val irComponentVar = context.symbolTable.declareVariable(
|
||||
ktEntry.startOffset, ktEntry.endOffset, IrDeclarationOrigin.DEFINED,
|
||||
ktEntry.startOffsetSkippingComments, ktEntry.endOffset, IrDeclarationOrigin.DEFINED,
|
||||
componentVariable, componentVariable.type.toIrType(), irComponentCall
|
||||
)
|
||||
irBlock.statements.add(irComponentVar)
|
||||
@@ -161,7 +161,7 @@ class StatementGenerator(
|
||||
if (isBlockBody) throw AssertionError("Use IrBlockBody and corresponding body generator to generate blocks as function bodies")
|
||||
|
||||
val returnType = getInferredTypeWithImplicitCasts(expression) ?: context.builtIns.unitType
|
||||
val irBlock = IrBlockImpl(expression.startOffset, expression.endOffset, returnType.toIrType())
|
||||
val irBlock = IrBlockImpl(expression.startOffsetSkippingComments, expression.endOffset, returnType.toIrType())
|
||||
|
||||
expression.statements.forEach {
|
||||
irBlock.statements.add(it.genStmt())
|
||||
@@ -173,11 +173,11 @@ class StatementGenerator(
|
||||
override fun visitReturnExpression(expression: KtReturnExpression, data: Nothing?): IrStatement {
|
||||
val returnTarget = getReturnExpressionTarget(expression)
|
||||
val irReturnedExpression = expression.returnedExpression?.genExpr() ?: IrGetObjectValueImpl(
|
||||
expression.startOffset, expression.endOffset, context.irBuiltIns.unitType,
|
||||
expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.unitType,
|
||||
context.symbolTable.referenceClass(context.builtIns.unit)
|
||||
)
|
||||
return IrReturnImpl(
|
||||
expression.startOffset, expression.endOffset, context.irBuiltIns.nothingType,
|
||||
expression.startOffsetSkippingComments, expression.endOffset, context.irBuiltIns.nothingType,
|
||||
context.symbolTable.referenceFunction(returnTarget), irReturnedExpression
|
||||
)
|
||||
}
|
||||
@@ -207,7 +207,7 @@ class StatementGenerator(
|
||||
|
||||
override fun visitThrowExpression(expression: KtThrowExpression, data: Nothing?): IrStatement {
|
||||
return IrThrowImpl(
|
||||
expression.startOffset,
|
||||
expression.startOffsetSkippingComments,
|
||||
expression.endOffset,
|
||||
context.irBuiltIns.nothingType,
|
||||
expression.thrownExpression!!.genExpr()
|
||||
@@ -223,7 +223,7 @@ class StatementGenerator(
|
||||
|
||||
fun generateConstantExpression(expression: KtExpression, constant: CompileTimeConstant<*>): IrExpression =
|
||||
context.constantValueGenerator.generateConstantValueAsExpression(
|
||||
expression.startOffset,
|
||||
expression.startOffsetSkippingComments,
|
||||
expression.endOffset,
|
||||
constant.toConstantValue(getInferredTypeWithImplicitCastsOrFail(expression))
|
||||
)
|
||||
@@ -237,20 +237,20 @@ class StatementGenerator(
|
||||
if (irArg is IrConst<*> && irArg.kind == IrConstKind.String)
|
||||
irArg
|
||||
else
|
||||
IrStringConcatenationImpl(expression.startOffset, expression.endOffset, resultType, listOf(irArg))
|
||||
IrStringConcatenationImpl(expression.startOffsetSkippingComments, expression.endOffset, resultType, listOf(irArg))
|
||||
}
|
||||
0 ->
|
||||
IrConstImpl.string(expression.startOffset, expression.endOffset, resultType, "")
|
||||
IrConstImpl.string(expression.startOffsetSkippingComments, expression.endOffset, resultType, "")
|
||||
else ->
|
||||
IrStringConcatenationImpl(expression.startOffset, expression.endOffset, resultType, entries.map { it.genExpr() })
|
||||
IrStringConcatenationImpl(expression.startOffsetSkippingComments, expression.endOffset, resultType, entries.map { it.genExpr() })
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitLiteralStringTemplateEntry(entry: KtLiteralStringTemplateEntry, data: Nothing?): IrStatement =
|
||||
IrConstImpl.string(entry.startOffset, entry.endOffset, context.irBuiltIns.stringType, entry.text)
|
||||
IrConstImpl.string(entry.startOffsetSkippingComments, entry.endOffset, context.irBuiltIns.stringType, entry.text)
|
||||
|
||||
override fun visitEscapeStringTemplateEntry(entry: KtEscapeStringTemplateEntry, data: Nothing?): IrStatement =
|
||||
IrConstImpl.string(entry.startOffset, entry.endOffset, context.irBuiltIns.stringType, entry.unescapedValue)
|
||||
IrConstImpl.string(entry.startOffsetSkippingComments, entry.endOffset, context.irBuiltIns.stringType, entry.unescapedValue)
|
||||
|
||||
override fun visitStringTemplateEntryWithExpression(entry: KtStringTemplateEntryWithExpression, data: Nothing?): IrStatement =
|
||||
entry.expression!!.genExpr()
|
||||
@@ -283,7 +283,7 @@ class StatementGenerator(
|
||||
resolvedCall: ResolvedCall<*>?
|
||||
): IrExpression =
|
||||
CallGenerator(this).generateValueReference(
|
||||
expression.startOffset, expression.endOffset,
|
||||
expression.startOffsetSkippingComments, expression.endOffset,
|
||||
descriptor, resolvedCall, null
|
||||
)
|
||||
|
||||
@@ -304,14 +304,14 @@ class StatementGenerator(
|
||||
else
|
||||
null
|
||||
|
||||
return CallGenerator(this).generateCall(expression.startOffset, expression.endOffset, pregenerateCall(resolvedCall), origin)
|
||||
return CallGenerator(this).generateCall(expression.startOffsetSkippingComments, expression.endOffset, pregenerateCall(resolvedCall), origin)
|
||||
}
|
||||
|
||||
override fun visitArrayAccessExpression(expression: KtArrayAccessExpression, data: Nothing?): IrStatement {
|
||||
val indexedGetCall = getOrFail(BindingContext.INDEXED_LVALUE_GET, expression)
|
||||
|
||||
return CallGenerator(this).generateCall(
|
||||
expression.startOffset, expression.endOffset,
|
||||
expression.startOffsetSkippingComments, expression.endOffset,
|
||||
pregenerateCall(indexedGetCall), IrStatementOrigin.GET_ARRAY_ELEMENT
|
||||
)
|
||||
}
|
||||
@@ -329,7 +329,7 @@ class StatementGenerator(
|
||||
val thisAsReceiverParameter = referenceTarget.thisAsReceiverParameter
|
||||
val thisType = thisAsReceiverParameter.type.toIrType()
|
||||
IrGetValueImpl(
|
||||
expression.startOffset, expression.endOffset,
|
||||
expression.startOffsetSkippingComments, expression.endOffset,
|
||||
thisType,
|
||||
context.symbolTable.referenceValueParameter(thisAsReceiverParameter)
|
||||
)
|
||||
@@ -339,7 +339,7 @@ class StatementGenerator(
|
||||
val extensionReceiver = referenceTarget.extensionReceiverParameter ?: TODO("No extension receiver: $referenceTarget")
|
||||
val extensionReceiverType = extensionReceiver.type.toIrType()
|
||||
IrGetValueImpl(
|
||||
expression.startOffset, expression.endOffset,
|
||||
expression.startOffsetSkippingComments, expression.endOffset,
|
||||
extensionReceiverType,
|
||||
context.symbolTable.referenceValueParameter(extensionReceiver)
|
||||
)
|
||||
@@ -402,7 +402,7 @@ class StatementGenerator(
|
||||
|
||||
override fun visitTypeAlias(typeAlias: KtTypeAlias, data: Nothing?): IrStatement =
|
||||
IrTypeAliasImpl(
|
||||
typeAlias.startOffset, typeAlias.endOffset, IrDeclarationOrigin.DEFINED,
|
||||
typeAlias.startOffsetSkippingComments, typeAlias.endOffset, IrDeclarationOrigin.DEFINED,
|
||||
getOrFail(BindingContext.TYPE_ALIAS, typeAlias)
|
||||
)
|
||||
|
||||
|
||||
+4
-4
@@ -22,13 +22,13 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrCatchImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrTryImpl
|
||||
import org.jetbrains.kotlin.psi.KtTryExpression
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffsetSkippingComments
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
|
||||
class TryCatchExpressionGenerator(statementGenerator: StatementGenerator) : StatementGeneratorExtension(statementGenerator) {
|
||||
fun generateTryCatch(ktTry: KtTryExpression): IrExpression {
|
||||
val resultType = getInferredTypeWithImplicitCastsOrFail(ktTry).toIrType()
|
||||
val irTryCatch = IrTryImpl(ktTry.startOffset, ktTry.endOffset, resultType)
|
||||
val irTryCatch = IrTryImpl(ktTry.startOffsetSkippingComments, ktTry.endOffset, resultType)
|
||||
|
||||
irTryCatch.tryResult = ktTry.tryBlock.genExpr()
|
||||
|
||||
@@ -38,9 +38,9 @@ class TryCatchExpressionGenerator(statementGenerator: StatementGenerator) : Stat
|
||||
val catchParameterDescriptor = getOrFail(BindingContext.VALUE_PARAMETER, ktCatchParameter)
|
||||
|
||||
val irCatch = IrCatchImpl(
|
||||
ktCatchClause.startOffset, ktCatchClause.endOffset,
|
||||
ktCatchClause.startOffsetSkippingComments, ktCatchClause.endOffset,
|
||||
context.symbolTable.declareVariable(
|
||||
ktCatchParameter.startOffset, ktCatchParameter.endOffset,
|
||||
ktCatchParameter.startOffsetSkippingComments, ktCatchParameter.endOffset,
|
||||
IrDeclarationOrigin.CATCH_PARAMETER,
|
||||
catchParameterDescriptor, catchParameterDescriptor.type.toIrType()
|
||||
)
|
||||
|
||||
@@ -296,11 +296,18 @@ val PsiElement.endOffset: Int
|
||||
get() = textRange.endOffset
|
||||
|
||||
val KtPureElement.pureStartOffset: Int
|
||||
get() = psiOrParent.textRange.startOffset
|
||||
get() = psiOrParent.textRangeWithoutComments.startOffset
|
||||
|
||||
val KtPureElement.pureEndOffset: Int
|
||||
get() = psiOrParent.textRange.endOffset
|
||||
get() = psiOrParent.textRangeWithoutComments.endOffset
|
||||
|
||||
val PsiElement.startOffsetSkippingComments: Int
|
||||
get() {
|
||||
if (!startsWithComment()) return startOffset // fastpath
|
||||
val firstNonCommentChild = generateSequence(firstChild) { it.nextSibling }
|
||||
.firstOrNull { it !is PsiWhiteSpace && it !is PsiComment }
|
||||
return firstNonCommentChild?.startOffset ?: startOffset
|
||||
}
|
||||
|
||||
fun PsiElement.getStartOffsetIn(ancestor: PsiElement): Int {
|
||||
var offset = 0
|
||||
@@ -357,10 +364,10 @@ private fun findFirstLeafWhollyInRange(file: PsiFile, range: TextRange): PsiElem
|
||||
}
|
||||
|
||||
val PsiElement.textRangeWithoutComments: TextRange
|
||||
get() {
|
||||
val firstNonCommentChild = children.firstOrNull { it !is PsiWhiteSpace && it !is PsiComment } ?: return textRange
|
||||
return TextRange(firstNonCommentChild.startOffset, endOffset)
|
||||
}
|
||||
get() = if (!startsWithComment()) textRange else TextRange(startOffsetSkippingComments, endOffset)
|
||||
|
||||
fun PsiElement.startsWithComment(): Boolean = firstChild is PsiComment
|
||||
|
||||
|
||||
// ---------------------------------- Debug/logging ----------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
// One-line comment
|
||||
class Foo {
|
||||
|
||||
// Several
|
||||
// lines
|
||||
// of
|
||||
// oneline
|
||||
// commentaries
|
||||
inner class Inner /* comment for constructor */ private constructor(x: Int) {
|
||||
/** dangling comment at the end of body*/
|
||||
} // Comment for closing bracket
|
||||
|
||||
/*
|
||||
very
|
||||
long
|
||||
multiline
|
||||
comment
|
||||
*/
|
||||
protected open fun foo(y: Int) { // Comment for opening bracket
|
||||
|
||||
/* Comment for closing bracket */ }
|
||||
|
||||
/**
|
||||
* Javadoc comment
|
||||
*/
|
||||
val x: Int = 42
|
||||
// Comment for getter
|
||||
get() = field + 1
|
||||
// Dangling comment
|
||||
|
||||
fun test() {
|
||||
foo(/* comment inside call */ 42)
|
||||
}
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
@0:0..33:1 FILE fqName:<root> fileName:/comments.kt
|
||||
@1:0..33:1 CLASS CLASS name:Foo modality:FINAL visibility:public flags: superTypes:[kotlin.Any]
|
||||
@1:0..33:1 VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:Foo flags:
|
||||
@1:0..33:1 CONSTRUCTOR visibility:public <> () returnType:Foo flags:primary
|
||||
@1:0..33:1 BLOCK_BODY
|
||||
@1:0..33:1 DELEGATING_CONSTRUCTOR_CALL 'constructor Any()'
|
||||
@1:0..33:1 INSTANCE_INITIALIZER_CALL classDescriptor='Foo'
|
||||
@8:4..10:36 CLASS CLASS name:Inner modality:FINAL visibility:public flags:inner superTypes:[kotlin.Any]
|
||||
@8:4..10:36 VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:Foo.Inner flags:
|
||||
@8:4..10:36 CONSTRUCTOR visibility:private <> ($this:Foo, x:kotlin.Int) returnType:Foo.Inner flags:primary
|
||||
@8:52..79 VALUE_PARAMETER name:<this> type:Foo flags:
|
||||
@8:72..78 VALUE_PARAMETER name:x index:0 type:kotlin.Int flags:
|
||||
@8:4..10:36 BLOCK_BODY
|
||||
@8:4..10:36 DELEGATING_CONSTRUCTOR_CALL 'constructor Any()'
|
||||
@8:4..10:36 INSTANCE_INITIALIZER_CALL classDescriptor='Inner'
|
||||
@8:4..10:36 FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
||||
@8:4..10:36 VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||
@-1:-1..-1 VALUE_PARAMETER name:other index:0 type:kotlin.Any? flags:
|
||||
@8:4..10:36 FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int flags:
|
||||
@8:4..10:36 VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||
@8:4..10:36 FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
||||
@8:4..10:36 VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||
@18:4..20:39 FUN name:foo visibility:protected modality:OPEN <> ($this:Foo, y:kotlin.Int) returnType:kotlin.Unit flags:
|
||||
@18:4..20:39 VALUE_PARAMETER name:<this> type:Foo flags:
|
||||
@18:27..33 VALUE_PARAMETER name:y index:0 type:kotlin.Int flags:
|
||||
@18:35..20:39 BLOCK_BODY
|
||||
@25:4..27:25 PROPERTY name:x visibility:public modality:FINAL flags:val
|
||||
@25:4..27:25 FIELD PROPERTY_BACKING_FIELD name:x type:kotlin.Int visibility:public flags:final
|
||||
@25:17..19 EXPRESSION_BODY
|
||||
@25:17..19 CONST Int type=kotlin.Int value=42
|
||||
@27:8..25 FUN name:<get-x> visibility:public modality:FINAL <> ($this:Foo) returnType:kotlin.Int flags:
|
||||
@27:8..25 VALUE_PARAMETER name:<this> type:Foo flags:
|
||||
@27:16..25 BLOCK_BODY
|
||||
@27:16..25 RETURN type=kotlin.Nothing from='<get-x>(): Int'
|
||||
@27:16..25 CALL 'plus(Int): Int' type=kotlin.Int origin=PLUS
|
||||
@27:16..21 GET_FIELD 'x: Int' type=kotlin.Int origin=null
|
||||
@27:16..21 GET_VAR 'this@Foo: Foo' type=Foo origin=null
|
||||
@27:24..25 CONST Int type=kotlin.Int value=1
|
||||
@30:4..32:5 FUN name:test visibility:public modality:FINAL <> ($this:Foo) returnType:kotlin.Unit flags:
|
||||
@30:4..32:5 VALUE_PARAMETER name:<this> type:Foo flags:
|
||||
@30:15..32:5 BLOCK_BODY
|
||||
@31:8..41 CALL 'foo(Int): Unit' type=kotlin.Unit origin=null
|
||||
@31:8..41 GET_VAR 'this@Foo: Foo' type=Foo origin=null
|
||||
@31:38..40 CONST Int type=kotlin.Int value=42
|
||||
@1:0..33:1 FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
||||
@1:0..33:1 VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||
@-1:-1..-1 VALUE_PARAMETER name:other index:0 type:kotlin.Any? flags:
|
||||
@1:0..33:1 FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int flags:
|
||||
@1:0..33:1 VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||
@1:0..33:1 FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
||||
@1:0..33:1 VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||
+16
-16
@@ -1,24 +1,24 @@
|
||||
@0:0..26:1 FILE fqName:<root> fileName:/kt17108.kt
|
||||
@0:0..26:1 CLASS INTERFACE name:Boolean modality:ABSTRACT visibility:public flags: superTypes:[kotlin.Any]
|
||||
@0:0..26:1 VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:Boolean flags:
|
||||
@5:4..8:38 FUN name:not visibility:public modality:ABSTRACT <> ($this:Boolean) returnType:Boolean flags:
|
||||
@5:4..8:38 VALUE_PARAMETER name:<this> type:Boolean flags:
|
||||
@10:4..13:42 FUN name:and visibility:public modality:ABSTRACT <> ($this:Boolean, other:Boolean) returnType:Boolean flags:
|
||||
@10:4..13:42 VALUE_PARAMETER name:<this> type:Boolean flags:
|
||||
@4:0..26:1 CLASS INTERFACE name:Boolean modality:ABSTRACT visibility:public flags: superTypes:[kotlin.Any]
|
||||
@4:0..26:1 VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:Boolean flags:
|
||||
@8:4..38 FUN name:not visibility:public modality:ABSTRACT <> ($this:Boolean) returnType:Boolean flags:
|
||||
@8:4..38 VALUE_PARAMETER name:<this> type:Boolean flags:
|
||||
@13:4..42 FUN name:and visibility:public modality:ABSTRACT <> ($this:Boolean, other:Boolean) returnType:Boolean flags:
|
||||
@13:4..42 VALUE_PARAMETER name:<this> type:Boolean flags:
|
||||
@13:18..32 VALUE_PARAMETER name:other index:0 type:Boolean flags:
|
||||
@15:4..18:41 FUN name:or visibility:public modality:ABSTRACT <> ($this:Boolean, other:Boolean) returnType:Boolean flags:
|
||||
@15:4..18:41 VALUE_PARAMETER name:<this> type:Boolean flags:
|
||||
@18:4..41 FUN name:or visibility:public modality:ABSTRACT <> ($this:Boolean, other:Boolean) returnType:Boolean flags:
|
||||
@18:4..41 VALUE_PARAMETER name:<this> type:Boolean flags:
|
||||
@18:17..31 VALUE_PARAMETER name:other index:0 type:Boolean flags:
|
||||
@20:4..23:42 FUN name:xor visibility:public modality:ABSTRACT <> ($this:Boolean, other:Boolean) returnType:Boolean flags:
|
||||
@20:4..23:42 VALUE_PARAMETER name:<this> type:Boolean flags:
|
||||
@23:4..42 FUN name:xor visibility:public modality:ABSTRACT <> ($this:Boolean, other:Boolean) returnType:Boolean flags:
|
||||
@23:4..42 VALUE_PARAMETER name:<this> type:Boolean flags:
|
||||
@23:18..32 VALUE_PARAMETER name:other index:0 type:Boolean flags:
|
||||
@25:4..38 FUN name:compareTo visibility:public modality:ABSTRACT <> ($this:Boolean, other:Boolean) returnType:kotlin.Int flags:
|
||||
@25:4..38 VALUE_PARAMETER name:<this> type:Boolean flags:
|
||||
@25:18..32 VALUE_PARAMETER name:other index:0 type:Boolean flags:
|
||||
@0:0..26:1 FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
||||
@0:0..26:1 VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||
@4:0..26:1 FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags:
|
||||
@4:0..26:1 VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||
@-1:-1..-1 VALUE_PARAMETER name:other index:0 type:kotlin.Any? flags:
|
||||
@0:0..26:1 FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int flags:
|
||||
@0:0..26:1 VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||
@0:0..26:1 FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
||||
@0:0..26:1 VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||
@4:0..26:1 FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int flags:
|
||||
@4:0..26:1 VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||
@4:0..26:1 FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags:
|
||||
@4:0..26:1 VALUE_PARAMETER name:<this> type:kotlin.Any flags:
|
||||
|
||||
@@ -34,6 +34,11 @@ public class IrSourceRangesTestCaseGenerated extends AbstractIrSourceRangesTestC
|
||||
runTest("compiler/testData/ir/sourceRanges/augmentedAssignmentWithExpression.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("comments.kt")
|
||||
public void testComments() throws Exception {
|
||||
runTest("compiler/testData/ir/sourceRanges/comments.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt17108.kt")
|
||||
public void testKt17108() throws Exception {
|
||||
runTest("compiler/testData/ir/sourceRanges/kt17108.kt");
|
||||
|
||||
Reference in New Issue
Block a user