Properties without accessors are generated as
IrGetBackingField / IrSetBackingField expressions.
This commit is contained in:
committed by
Dmitry Petrov
parent
a1ad828ea8
commit
ceeccfa1b7
+22
-3
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor
|
|||||||
import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor
|
import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrOperator
|
import org.jetbrains.kotlin.ir.expressions.IrOperator
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrThisReferenceImpl
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||||
@@ -108,8 +109,14 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
|||||||
val descriptor = resolvedCall.candidateDescriptor
|
val descriptor = resolvedCall.candidateDescriptor
|
||||||
|
|
||||||
return when (descriptor) {
|
return when (descriptor) {
|
||||||
is SyntheticFieldDescriptor ->
|
is SyntheticFieldDescriptor -> {
|
||||||
BackingFieldLValue(ktLeft.startOffset, ktLeft.endOffset, descriptor.propertyDescriptor, operator)
|
val receiverValue = resolvedCall.dispatchReceiver?.let {
|
||||||
|
statementGenerator.generateReceiver(ktLeft, it)
|
||||||
|
}
|
||||||
|
BackingFieldLValue(ktLeft.startOffset, ktLeft.endOffset, descriptor.propertyDescriptor,
|
||||||
|
receiverValue, operator)
|
||||||
|
|
||||||
|
}
|
||||||
is LocalVariableDescriptor ->
|
is LocalVariableDescriptor ->
|
||||||
if (descriptor.isDelegated)
|
if (descriptor.isDelegated)
|
||||||
DelegatedLocalPropertyLValue(ktLeft.startOffset, ktLeft.endOffset, descriptor, operator)
|
DelegatedLocalPropertyLValue(ktLeft.startOffset, ktLeft.endOffset, descriptor, operator)
|
||||||
@@ -131,7 +138,10 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
|||||||
resolvedCall: ResolvedCall<*>
|
resolvedCall: ResolvedCall<*>
|
||||||
): AssignmentReceiver {
|
): AssignmentReceiver {
|
||||||
if (isValInitializationInConstructor(descriptor, resolvedCall)) {
|
if (isValInitializationInConstructor(descriptor, resolvedCall)) {
|
||||||
return BackingFieldLValue(ktLeft.startOffset, ktLeft.endOffset, descriptor, null)
|
val thisClass = getThisClass()
|
||||||
|
val irThis = IrThisReferenceImpl(ktLeft.startOffset, ktLeft.endOffset, thisClass.defaultType, thisClass)
|
||||||
|
return BackingFieldLValue(ktLeft.startOffset, ktLeft.endOffset, descriptor,
|
||||||
|
RematerializableValue(irThis), null)
|
||||||
}
|
}
|
||||||
|
|
||||||
val propertyReceiver = statementGenerator.generateCallReceiver(
|
val propertyReceiver = statementGenerator.generateCallReceiver(
|
||||||
@@ -148,6 +158,15 @@ class AssignmentGenerator(statementGenerator: StatementGenerator) : StatementGen
|
|||||||
statementGenerator.scopeOwner.let { it is ConstructorDescriptor || it is ClassDescriptor } &&
|
statementGenerator.scopeOwner.let { it is ConstructorDescriptor || it is ClassDescriptor } &&
|
||||||
resolvedCall.dispatchReceiver is ThisClassReceiver
|
resolvedCall.dispatchReceiver is ThisClassReceiver
|
||||||
|
|
||||||
|
private fun getThisClass(): ClassDescriptor {
|
||||||
|
val scopeOwner = statementGenerator.scopeOwner
|
||||||
|
return when (scopeOwner) {
|
||||||
|
is ConstructorDescriptor -> scopeOwner.containingDeclaration
|
||||||
|
is ClassDescriptor -> scopeOwner
|
||||||
|
else -> scopeOwner.containingDeclaration as ClassDescriptor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun generateArrayAccessAssignmentReceiver(ktLeft: KtArrayAccessExpression, irOperator: IrOperator): ArrayAccessAssignmentReceiver {
|
private fun generateArrayAccessAssignmentReceiver(ktLeft: KtArrayAccessExpression, irOperator: IrOperator): ArrayAccessAssignmentReceiver {
|
||||||
val irArray = statementGenerator.generateExpression(ktLeft.arrayExpression!!)
|
val irArray = statementGenerator.generateExpression(ktLeft.arrayExpression!!)
|
||||||
val irIndexExpressions = ktLeft.indexExpressions.map { statementGenerator.generateExpression(it) }
|
val irIndexExpressions = ktLeft.indexExpressions.map { statementGenerator.generateExpression(it) }
|
||||||
|
|||||||
@@ -288,7 +288,7 @@ class BodyGenerator(val scopeOwner: DeclarationDescriptor, override val context:
|
|||||||
val valueParameterDescriptor = getOrFail(BindingContext.VALUE_PARAMETER, ktParameter)
|
val valueParameterDescriptor = getOrFail(BindingContext.VALUE_PARAMETER, ktParameter)
|
||||||
|
|
||||||
irBlockBody.addStatement(
|
irBlockBody.addStatement(
|
||||||
createPropertyInitializationExpression(
|
initializePropertyInPrimaryConstructor(
|
||||||
ktParameter, propertyDescriptor,
|
ktParameter, propertyDescriptor,
|
||||||
IrGetVariableImpl(ktParameter.startOffset, ktParameter.endOffset,
|
IrGetVariableImpl(ktParameter.startOffset, ktParameter.endOffset,
|
||||||
valueParameterDescriptor, IrOperator.INITIALIZE_PROPERTY_FROM_PARAMETER)
|
valueParameterDescriptor, IrOperator.INITIALIZE_PROPERTY_FROM_PARAMETER)
|
||||||
@@ -298,7 +298,15 @@ class BodyGenerator(val scopeOwner: DeclarationDescriptor, override val context:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createPropertyInitializationExpression(ktElement: KtElement, propertyDescriptor: PropertyDescriptor, value: IrExpression) =
|
private fun initializePropertyInPrimaryConstructor(
|
||||||
IrSetBackingFieldImpl(ktElement.startOffset, ktElement.endOffset, propertyDescriptor, value)
|
ktElement: KtElement,
|
||||||
|
propertyDescriptor: PropertyDescriptor,
|
||||||
|
value: IrExpression
|
||||||
|
): IrExpression {
|
||||||
|
val thisClass = propertyDescriptor.containingDeclaration as ClassDescriptor
|
||||||
|
return IrSetBackingFieldImpl(ktElement.startOffset, ktElement.endOffset, propertyDescriptor,
|
||||||
|
IrThisReferenceImpl(ktElement.startOffset, ktElement.endOffset, thisClass.defaultType, thisClass),
|
||||||
|
value)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -85,13 +85,15 @@ class CallGenerator(statementGenerator: StatementGenerator): StatementGeneratorE
|
|||||||
call: CallBuilder
|
call: CallBuilder
|
||||||
): IrExpression {
|
): IrExpression {
|
||||||
return call.callReceiver.call { dispatchReceiverValue, extensionReceiverValue ->
|
return call.callReceiver.call { dispatchReceiverValue, extensionReceiverValue ->
|
||||||
val getter = descriptor.getter ?:
|
descriptor.getter?.let { getter ->
|
||||||
context.syntheticDescriptorsFactory.getOrCreatePropertyGetter(descriptor)
|
IrGetterCallImpl(startOffset, endOffset, getter,
|
||||||
IrGetterCallImpl(startOffset, endOffset, getter,
|
dispatchReceiverValue?.load(),
|
||||||
dispatchReceiverValue?.load(),
|
extensionReceiverValue?.load(),
|
||||||
extensionReceiverValue?.load(),
|
IrOperator.GET_PROPERTY,
|
||||||
IrOperator.GET_PROPERTY,
|
call.superQualifier)
|
||||||
call.superQualifier)
|
} ?: IrGetBackingFieldImpl(startOffset, endOffset, descriptor,
|
||||||
|
dispatchReceiverValue?.load(),
|
||||||
|
IrOperator.GET_PROPERTY, call.superQualifier)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+9
-10
@@ -16,10 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.psi2ir.generators
|
package org.jetbrains.kotlin.psi2ir.generators
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.VariableAccessorDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.VariableDescriptorWithAccessors
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrLocalDelegatedPropertyDelegateDescriptor
|
import org.jetbrains.kotlin.ir.descriptors.IrLocalDelegatedPropertyDelegateDescriptor
|
||||||
@@ -35,10 +32,7 @@ import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
|||||||
import org.jetbrains.kotlin.psi2ir.builders.irBlockBody
|
import org.jetbrains.kotlin.psi2ir.builders.irBlockBody
|
||||||
import org.jetbrains.kotlin.psi2ir.builders.irGet
|
import org.jetbrains.kotlin.psi2ir.builders.irGet
|
||||||
import org.jetbrains.kotlin.psi2ir.builders.irReturn
|
import org.jetbrains.kotlin.psi2ir.builders.irReturn
|
||||||
import org.jetbrains.kotlin.psi2ir.intermediate.BackingFieldLValue
|
import org.jetbrains.kotlin.psi2ir.intermediate.*
|
||||||
import org.jetbrains.kotlin.psi2ir.intermediate.IntermediateValue
|
|
||||||
import org.jetbrains.kotlin.psi2ir.intermediate.VariableLValue
|
|
||||||
import org.jetbrains.kotlin.psi2ir.intermediate.setExplicitReceiverValue
|
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|
||||||
@@ -82,8 +76,13 @@ class DelegatedPropertyGenerator(override val context: GeneratorContext) : Gener
|
|||||||
return irProperty
|
return irProperty
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createBackingFieldValueForDelegate(delegateDescriptor: IrPropertyDelegateDescriptor, ktDelegate: KtPropertyDelegate) =
|
private fun createBackingFieldValueForDelegate(delegateDescriptor: IrPropertyDelegateDescriptor, ktDelegate: KtPropertyDelegate): IntermediateValue {
|
||||||
BackingFieldLValue(ktDelegate.startOffset, ktDelegate.endOffset, delegateDescriptor, null)
|
val thisClass = delegateDescriptor.correspondingProperty.containingDeclaration as? ClassDescriptor
|
||||||
|
val thisValue = thisClass?.let {
|
||||||
|
RematerializableValue(IrThisReferenceImpl(ktDelegate.startOffset, ktDelegate.endOffset, thisClass.defaultType, thisClass))
|
||||||
|
}
|
||||||
|
return BackingFieldLValue(ktDelegate.startOffset, ktDelegate.endOffset, delegateDescriptor, thisValue, null)
|
||||||
|
}
|
||||||
|
|
||||||
private fun createCallableReference(ktElement: KtElement, type: KotlinType, referencedDescriptor: CallableDescriptor): IrCallableReference =
|
private fun createCallableReference(ktElement: KtElement, type: KotlinType, referencedDescriptor: CallableDescriptor): IrCallableReference =
|
||||||
IrCallableReferenceImpl(ktElement.startOffset, ktElement.endOffset, type,
|
IrCallableReferenceImpl(ktElement.startOffset, ktElement.endOffset, type,
|
||||||
|
|||||||
+3
-2
@@ -24,15 +24,16 @@ class BackingFieldLValue(
|
|||||||
val startOffset: Int,
|
val startOffset: Int,
|
||||||
val endOffset: Int,
|
val endOffset: Int,
|
||||||
val descriptor: PropertyDescriptor,
|
val descriptor: PropertyDescriptor,
|
||||||
|
val receiver: IntermediateValue?,
|
||||||
val operator: IrOperator?
|
val operator: IrOperator?
|
||||||
) : LValue, AssignmentReceiver {
|
) : LValue, AssignmentReceiver {
|
||||||
override val type: KotlinType get() = descriptor.type
|
override val type: KotlinType get() = descriptor.type
|
||||||
|
|
||||||
override fun store(irExpression: IrExpression): IrExpression =
|
override fun store(irExpression: IrExpression): IrExpression =
|
||||||
IrSetBackingFieldImpl(startOffset, endOffset, descriptor, irExpression, operator)
|
IrSetBackingFieldImpl(startOffset, endOffset, descriptor, receiver?.load(), irExpression, operator)
|
||||||
|
|
||||||
override fun load(): IrExpression =
|
override fun load(): IrExpression =
|
||||||
IrGetBackingFieldImpl(startOffset, endOffset, descriptor, operator)
|
IrGetBackingFieldImpl(startOffset, endOffset, descriptor, receiver?.load(), operator)
|
||||||
|
|
||||||
override fun assign(withLValue: (LValue) -> IrExpression): IrExpression =
|
override fun assign(withLValue: (LValue) -> IrExpression): IrExpression =
|
||||||
withLValue(this)
|
withLValue(this)
|
||||||
|
|||||||
+17
-13
@@ -37,23 +37,27 @@ class SimplePropertyLValue(
|
|||||||
|
|
||||||
override fun load(): IrExpression =
|
override fun load(): IrExpression =
|
||||||
callReceiver.call { dispatchReceiverValue, extensionReceiverValue ->
|
callReceiver.call { dispatchReceiverValue, extensionReceiverValue ->
|
||||||
val getter = descriptor.getter ?: context.syntheticDescriptorsFactory.getOrCreatePropertyGetter(descriptor)
|
descriptor.getter?.let { getter ->
|
||||||
IrGetterCallImpl(startOffset, endOffset, getter,
|
IrGetterCallImpl(startOffset, endOffset, getter,
|
||||||
dispatchReceiverValue?.load(),
|
dispatchReceiverValue?.load(),
|
||||||
extensionReceiverValue?.load(),
|
extensionReceiverValue?.load(),
|
||||||
irOperator,
|
irOperator,
|
||||||
superQualifier)
|
superQualifier)
|
||||||
|
} ?: IrGetBackingFieldImpl(startOffset, endOffset, descriptor,
|
||||||
|
dispatchReceiverValue?.load(), irOperator, superQualifier)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun store(irExpression: IrExpression) =
|
override fun store(irExpression: IrExpression) =
|
||||||
callReceiver.call { dispatchReceiverValue, extensionReceiverValue ->
|
callReceiver.call { dispatchReceiverValue, extensionReceiverValue ->
|
||||||
val setter = descriptor.setter ?: context.syntheticDescriptorsFactory.getOrCreatePropertySetter(descriptor)
|
descriptor.setter?.let { setter ->
|
||||||
IrSetterCallImpl(startOffset, endOffset, setter,
|
IrSetterCallImpl(startOffset, endOffset, setter,
|
||||||
dispatchReceiverValue?.load(),
|
dispatchReceiverValue?.load(),
|
||||||
extensionReceiverValue?.load(),
|
extensionReceiverValue?.load(),
|
||||||
irExpression,
|
irExpression,
|
||||||
irOperator,
|
irOperator,
|
||||||
superQualifier)
|
superQualifier)
|
||||||
|
} ?: IrSetBackingFieldImpl(startOffset, endOffset, descriptor,
|
||||||
|
dispatchReceiverValue?.load(), irExpression, irOperator, superQualifier)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun assign(withLValue: (LValue) -> IrExpression) =
|
override fun assign(withLValue: (LValue) -> IrExpression) =
|
||||||
|
|||||||
+15
-8
@@ -55,7 +55,7 @@ class InsertImplicitCasts(val builtIns: KotlinBuiltIns): IrElementVisitorVoid {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitBlock(expression: IrBlock) {
|
override fun visitBlock(expression: IrBlock) {
|
||||||
expression.acceptChildren(this, null)
|
expression.acceptChildrenVoid(this)
|
||||||
val type = expression.type
|
val type = expression.type
|
||||||
if (KotlinBuiltIns.isUnit(type)) return
|
if (KotlinBuiltIns.isUnit(type)) return
|
||||||
if (expression.statements.isEmpty()) return
|
if (expression.statements.isEmpty()) return
|
||||||
@@ -67,25 +67,31 @@ class InsertImplicitCasts(val builtIns: KotlinBuiltIns): IrElementVisitorVoid {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitReturn(expression: IrReturn) {
|
override fun visitReturn(expression: IrReturn) {
|
||||||
expression.acceptChildren(this, null)
|
expression.acceptChildrenVoid(this)
|
||||||
|
|
||||||
expression.value?.replaceWithCast(expression.returnTarget.returnType)
|
expression.value?.replaceWithCast(expression.returnTarget.returnType)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitSetVariable(expression: IrSetVariable) {
|
override fun visitSetVariable(expression: IrSetVariable) {
|
||||||
expression.acceptChildren(this, null)
|
expression.acceptChildrenVoid(this)
|
||||||
|
|
||||||
|
expression.value.replaceWithCast(expression.descriptor.type)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun visitSetBackingField(expression: IrSetBackingField) {
|
||||||
|
expression.acceptChildrenVoid(this)
|
||||||
|
|
||||||
expression.value.replaceWithCast(expression.descriptor.type)
|
expression.value.replaceWithCast(expression.descriptor.type)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitVariable(declaration: IrVariable) {
|
override fun visitVariable(declaration: IrVariable) {
|
||||||
declaration.acceptChildren(this, null)
|
declaration.acceptChildrenVoid(this)
|
||||||
|
|
||||||
declaration.initializer?.replaceWithCast(declaration.descriptor.type)
|
declaration.initializer?.replaceWithCast(declaration.descriptor.type)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitWhen(expression: IrWhen) {
|
override fun visitWhen(expression: IrWhen) {
|
||||||
expression.acceptChildren(this, null)
|
expression.acceptChildrenVoid(this)
|
||||||
|
|
||||||
for (branchIndex in expression.branchIndices) {
|
for (branchIndex in expression.branchIndices) {
|
||||||
expression.getNthCondition(branchIndex)!!.replaceWithCast(builtIns.booleanType)
|
expression.getNthCondition(branchIndex)!!.replaceWithCast(builtIns.booleanType)
|
||||||
@@ -95,19 +101,19 @@ class InsertImplicitCasts(val builtIns: KotlinBuiltIns): IrElementVisitorVoid {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitLoop(loop: IrLoop) {
|
override fun visitLoop(loop: IrLoop) {
|
||||||
loop.acceptChildren(this, null)
|
loop.acceptChildrenVoid(this)
|
||||||
|
|
||||||
loop.condition.replaceWithCast(builtIns.booleanType)
|
loop.condition.replaceWithCast(builtIns.booleanType)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitThrow(expression: IrThrow) {
|
override fun visitThrow(expression: IrThrow) {
|
||||||
expression.acceptChildren(this, null)
|
expression.acceptChildrenVoid(this)
|
||||||
|
|
||||||
expression.value.replaceWithCast(builtIns.throwable.defaultType)
|
expression.value.replaceWithCast(builtIns.throwable.defaultType)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitTryCatch(tryCatch: IrTryCatch) {
|
override fun visitTryCatch(tryCatch: IrTryCatch) {
|
||||||
tryCatch.acceptChildren(this, null)
|
tryCatch.acceptChildrenVoid(this)
|
||||||
|
|
||||||
val resultType = tryCatch.type
|
val resultType = tryCatch.type
|
||||||
|
|
||||||
@@ -119,6 +125,7 @@ class InsertImplicitCasts(val builtIns: KotlinBuiltIns): IrElementVisitorVoid {
|
|||||||
|
|
||||||
override fun visitVararg(expression: IrVararg) {
|
override fun visitVararg(expression: IrVararg) {
|
||||||
expression.acceptChildrenVoid(this)
|
expression.acceptChildrenVoid(this)
|
||||||
|
|
||||||
for (element in expression.elements) {
|
for (element in expression.elements) {
|
||||||
when (element) {
|
when (element) {
|
||||||
is IrSpreadElement -> element.expression.replaceWithCast(expression.type)
|
is IrSpreadElement -> element.expression.replaceWithCast(expression.type)
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val EXPECTED_OCCURRENCES_PATTERN = Regex("""^\s*//\s*(\d+)\s*(.*)$""")
|
private val EXPECTED_OCCURRENCES_PATTERN = Regex("""^\s*//\s*(\d+)\s*(.*)$""")
|
||||||
private val IR_TREES_TXT_PATTERN = Regex("""// \s*<<<\s+(.*)$""")
|
private val IR_FILE_TXT_PATTERN = Regex("""// IR_FILE: (.*)$""")
|
||||||
private val IGNORE_ERRORS_PATTERN = Regex("""// !IGNORE_ERRORS""")
|
private val IGNORE_ERRORS_PATTERN = Regex("""// !IGNORE_ERRORS""")
|
||||||
|
|
||||||
internal fun shouldIgnoreErrors(wholeFile: File): Boolean =
|
internal fun shouldIgnoreErrors(wholeFile: File): Boolean =
|
||||||
@@ -84,14 +84,14 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() {
|
|||||||
val regexps = ArrayList<RegexpInText>()
|
val regexps = ArrayList<RegexpInText>()
|
||||||
val treeFiles = ArrayList<IrTreeFileLabel>()
|
val treeFiles = ArrayList<IrTreeFileLabel>()
|
||||||
|
|
||||||
for ((lineNumber, line) in testFile.content.split("\n").withIndex()) {
|
for (line in testFile.content.split("\n")) {
|
||||||
EXPECTED_OCCURRENCES_PATTERN.matchEntire(line)?.let { matchResult ->
|
EXPECTED_OCCURRENCES_PATTERN.matchEntire(line)?.let { matchResult ->
|
||||||
regexps.add(RegexpInText(matchResult.groupValues[1], matchResult.groupValues[2].trim()))
|
regexps.add(RegexpInText(matchResult.groupValues[1], matchResult.groupValues[2].trim()))
|
||||||
}
|
}
|
||||||
?: IR_TREES_TXT_PATTERN.find(line)?.let { matchResult ->
|
?: IR_FILE_TXT_PATTERN.find(line)?.let { matchResult ->
|
||||||
val fileName = matchResult.groupValues[1].trim()
|
val fileName = matchResult.groupValues[1].trim()
|
||||||
val file = createExpectedTextFile(testFile, dir, fileName)
|
val file = createExpectedTextFile(testFile, dir, fileName)
|
||||||
treeFiles.add(IrTreeFileLabel(file, lineNumber))
|
treeFiles.add(IrTreeFileLabel(file, 0))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ const val ARGUMENT0_SLOT = 0
|
|||||||
const val ARGUMENT1_SLOT = 1
|
const val ARGUMENT1_SLOT = 1
|
||||||
const val DISPATCH_RECEIVER_SLOT = -1
|
const val DISPATCH_RECEIVER_SLOT = -1
|
||||||
const val EXTENSION_RECEIVER_SLOT = -2
|
const val EXTENSION_RECEIVER_SLOT = -2
|
||||||
|
const val BACKING_FIELD_RECEIVER_SLOT = -1
|
||||||
const val FUNCTION_BODY_SLOT = -1
|
const val FUNCTION_BODY_SLOT = -1
|
||||||
const val ANONYMOUS_INITIALIZER_BODY_SLOT = -1
|
const val ANONYMOUS_INITIALIZER_BODY_SLOT = -1
|
||||||
const val MODULE_SLOT = 0
|
const val MODULE_SLOT = 0
|
||||||
|
|||||||
+55
-12
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.expressions
|
package org.jetbrains.kotlin.ir.expressions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.ir.*
|
import org.jetbrains.kotlin.ir.*
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
@@ -24,6 +25,8 @@ import org.jetbrains.kotlin.types.typeUtil.builtIns
|
|||||||
|
|
||||||
interface IrBackingFieldExpression : IrDeclarationReference {
|
interface IrBackingFieldExpression : IrDeclarationReference {
|
||||||
override val descriptor: PropertyDescriptor
|
override val descriptor: PropertyDescriptor
|
||||||
|
val superQualifier: ClassDescriptor?
|
||||||
|
var receiver: IrExpression?
|
||||||
val operator: IrOperator?
|
val operator: IrOperator?
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,20 +41,54 @@ abstract class IrBackingFieldExpressionBase(
|
|||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
descriptor: PropertyDescriptor,
|
descriptor: PropertyDescriptor,
|
||||||
type: KotlinType,
|
type: KotlinType,
|
||||||
override val operator: IrOperator? = null
|
override val operator: IrOperator? = null,
|
||||||
) : IrDeclarationReferenceBase<PropertyDescriptor>(startOffset, endOffset, type, descriptor), IrBackingFieldExpression
|
override val superQualifier: ClassDescriptor? = null
|
||||||
|
) : IrDeclarationReferenceBase<PropertyDescriptor>(startOffset, endOffset, type, descriptor), IrBackingFieldExpression {
|
||||||
|
override final var receiver: IrExpression? = null
|
||||||
|
set(value) {
|
||||||
|
value?.assertDetached()
|
||||||
|
field?.detach()
|
||||||
|
field = value
|
||||||
|
value?.setTreeLocation(this, BACKING_FIELD_RECEIVER_SLOT)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getChild(slot: Int): IrElement? =
|
||||||
|
when (slot) {
|
||||||
|
BACKING_FIELD_RECEIVER_SLOT -> receiver
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun replaceChild(slot: Int, newChild: IrElement) {
|
||||||
|
when (slot) {
|
||||||
|
BACKING_FIELD_RECEIVER_SLOT -> receiver = newChild.assertCast()
|
||||||
|
else -> throwNoSuchSlot(slot)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class IrGetBackingFieldImpl(
|
class IrGetBackingFieldImpl(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
descriptor: PropertyDescriptor,
|
descriptor: PropertyDescriptor,
|
||||||
operator: IrOperator? = null
|
operator: IrOperator? = null,
|
||||||
) : IrBackingFieldExpressionBase(startOffset, endOffset, descriptor, descriptor.type, operator), IrGetBackingField {
|
superQualifier: ClassDescriptor? = null
|
||||||
|
) : IrBackingFieldExpressionBase(startOffset, endOffset, descriptor, descriptor.type, operator, superQualifier), IrGetBackingField {
|
||||||
|
constructor(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int,
|
||||||
|
descriptor: PropertyDescriptor,
|
||||||
|
receiver: IrExpression?,
|
||||||
|
operator: IrOperator? = null,
|
||||||
|
superQualifier: ClassDescriptor? = null
|
||||||
|
) : this(startOffset, endOffset, descriptor, operator, superQualifier) {
|
||||||
|
this.receiver = receiver
|
||||||
|
}
|
||||||
|
|
||||||
override fun getChild(slot: Int): IrElement? =
|
override fun getChild(slot: Int): IrElement? =
|
||||||
null
|
super.getChild(slot)
|
||||||
|
|
||||||
override fun replaceChild(slot: Int, newChild: IrElement) {
|
override fun replaceChild(slot: Int, newChild: IrElement) {
|
||||||
throwNoSuchSlot(slot)
|
super.replaceChild(slot, newChild)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||||
@@ -59,7 +96,7 @@ class IrGetBackingFieldImpl(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
||||||
// no children
|
receiver?.accept(visitor, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,15 +104,19 @@ class IrSetBackingFieldImpl(
|
|||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
descriptor: PropertyDescriptor,
|
descriptor: PropertyDescriptor,
|
||||||
operator: IrOperator? = null
|
operator: IrOperator? = null,
|
||||||
) : IrBackingFieldExpressionBase(startOffset, endOffset, descriptor, descriptor.type.builtIns.unitType, operator), IrSetBackingField {
|
superQualifier: ClassDescriptor? = null
|
||||||
|
) : IrBackingFieldExpressionBase(startOffset, endOffset, descriptor, descriptor.type.builtIns.unitType, operator, superQualifier), IrSetBackingField {
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
descriptor: PropertyDescriptor,
|
descriptor: PropertyDescriptor,
|
||||||
|
receiver: IrExpression?,
|
||||||
value: IrExpression,
|
value: IrExpression,
|
||||||
operator: IrOperator? = null
|
operator: IrOperator? = null,
|
||||||
) : this(startOffset, endOffset, descriptor, operator) {
|
superQualifier: ClassDescriptor? = null
|
||||||
|
) : this(startOffset, endOffset, descriptor, operator, superQualifier) {
|
||||||
|
this.receiver = receiver
|
||||||
this.value = value
|
this.value = value
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,12 +133,13 @@ class IrSetBackingFieldImpl(
|
|||||||
override fun getChild(slot: Int): IrElement? =
|
override fun getChild(slot: Int): IrElement? =
|
||||||
when (slot) {
|
when (slot) {
|
||||||
CHILD_EXPRESSION_SLOT -> value
|
CHILD_EXPRESSION_SLOT -> value
|
||||||
else -> null
|
else -> super.getChild(slot)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun replaceChild(slot: Int, newChild: IrElement) {
|
override fun replaceChild(slot: Int, newChild: IrElement) {
|
||||||
when (slot) {
|
when (slot) {
|
||||||
CHILD_EXPRESSION_SLOT -> value = newChild.assertCast()
|
CHILD_EXPRESSION_SLOT -> value = newChild.assertCast()
|
||||||
|
else -> super.replaceChild(slot, newChild)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,6 +148,7 @@ class IrSetBackingFieldImpl(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
|
||||||
|
receiver?.accept(visitor, data)
|
||||||
value.accept(visitor, data)
|
value.accept(visitor, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -94,6 +94,19 @@ class DumpIrTreeVisitor(out: Appendable): IrElementVisitor<Unit, String> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitGetBackingField(expression: IrGetBackingField, data: String) {
|
||||||
|
expression.dumpLabeledElementWith(data) {
|
||||||
|
expression.receiver?.accept(this, "receiver")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun visitSetBackingField(expression: IrSetBackingField, data: String) {
|
||||||
|
expression.dumpLabeledElementWith(data) {
|
||||||
|
expression.receiver?.accept(this, "receiver")
|
||||||
|
expression.value.accept(this, "value")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun visitWhen(expression: IrWhen, data: String) {
|
override fun visitWhen(expression: IrWhen, data: String) {
|
||||||
expression.dumpLabeledElementWith(data) {
|
expression.dumpLabeledElementWith(data) {
|
||||||
for (i in 0 .. expression.branchesCount - 1) {
|
for (i in 0 .. expression.branchesCount - 1) {
|
||||||
|
|||||||
@@ -62,8 +62,9 @@ interface IrElementVisitor<out R, in D> {
|
|||||||
fun visitGetEnumValue(expression: IrGetEnumValue, data: D) = visitSingletonReference(expression, data)
|
fun visitGetEnumValue(expression: IrGetEnumValue, data: D) = visitSingletonReference(expression, data)
|
||||||
fun visitGetVariable(expression: IrGetVariable, data: D) = visitDeclarationReference(expression, data)
|
fun visitGetVariable(expression: IrGetVariable, data: D) = visitDeclarationReference(expression, data)
|
||||||
fun visitSetVariable(expression: IrSetVariable, data: D) = visitDeclarationReference(expression, data)
|
fun visitSetVariable(expression: IrSetVariable, data: D) = visitDeclarationReference(expression, data)
|
||||||
fun visitGetBackingField(expression: IrGetBackingField, data: D) = visitDeclarationReference(expression, data)
|
fun visitBackingFieldReference(expression: IrBackingFieldExpression, data: D) = visitDeclarationReference(expression, data)
|
||||||
fun visitSetBackingField(expression: IrSetBackingField, data: D) = visitDeclarationReference(expression, data)
|
fun visitGetBackingField(expression: IrGetBackingField, data: D) = visitBackingFieldReference(expression, data)
|
||||||
|
fun visitSetBackingField(expression: IrSetBackingField, data: D) = visitBackingFieldReference(expression, data)
|
||||||
fun visitGetExtensionReceiver(expression: IrGetExtensionReceiver, data: D) = visitDeclarationReference(expression, data)
|
fun visitGetExtensionReceiver(expression: IrGetExtensionReceiver, data: D) = visitDeclarationReference(expression, data)
|
||||||
fun visitGeneralCall(expression: IrGeneralCall, data: D) = visitDeclarationReference(expression, data)
|
fun visitGeneralCall(expression: IrGeneralCall, data: D) = visitDeclarationReference(expression, data)
|
||||||
fun visitCall(expression: IrCall, data: D) = visitGeneralCall(expression, data)
|
fun visitCall(expression: IrCall, data: D) = visitGeneralCall(expression, data)
|
||||||
|
|||||||
@@ -129,10 +129,13 @@ interface IrElementVisitorVoid : IrElementVisitor<Unit, Nothing?> {
|
|||||||
fun visitSetVariable(expression: IrSetVariable) = visitDeclarationReference(expression)
|
fun visitSetVariable(expression: IrSetVariable) = visitDeclarationReference(expression)
|
||||||
override fun visitSetVariable(expression: IrSetVariable, data: Nothing?) = visitSetVariable(expression)
|
override fun visitSetVariable(expression: IrSetVariable, data: Nothing?) = visitSetVariable(expression)
|
||||||
|
|
||||||
fun visitGetBackingField(expression: IrGetBackingField) = visitDeclarationReference(expression)
|
fun visitBackingFieldReference(expression: IrBackingFieldExpression) = visitDeclarationReference(expression)
|
||||||
|
override fun visitBackingFieldReference(expression: IrBackingFieldExpression, data: Nothing?) = visitBackingFieldReference(expression)
|
||||||
|
|
||||||
|
fun visitGetBackingField(expression: IrGetBackingField) = visitBackingFieldReference(expression)
|
||||||
override fun visitGetBackingField(expression: IrGetBackingField, data: Nothing?) = visitGetBackingField(expression)
|
override fun visitGetBackingField(expression: IrGetBackingField, data: Nothing?) = visitGetBackingField(expression)
|
||||||
|
|
||||||
fun visitSetBackingField(expression: IrSetBackingField) = visitDeclarationReference(expression)
|
fun visitSetBackingField(expression: IrSetBackingField) = visitBackingFieldReference(expression)
|
||||||
override fun visitSetBackingField(expression: IrSetBackingField, data: Nothing?) = visitSetBackingField(expression)
|
override fun visitSetBackingField(expression: IrSetBackingField, data: Nothing?) = visitSetBackingField(expression)
|
||||||
|
|
||||||
fun visitGetExtensionReceiver(expression: IrGetExtensionReceiver) = visitDeclarationReference(expression)
|
fun visitGetExtensionReceiver(expression: IrGetExtensionReceiver) = visitDeclarationReference(expression)
|
||||||
|
|||||||
+4
-2
@@ -4,9 +4,11 @@ FILE /argumentReorderingInDelegatingConstructorCall.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Any
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
||||||
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public open class Base type=Base
|
||||||
|
value: GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
SET_BACKING_FIELD y type=kotlin.Unit operator=null
|
SET_BACKING_FIELD y type=kotlin.Unit operator=null
|
||||||
GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public open class Base type=Base
|
||||||
|
value: GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=Base
|
INSTANCE_INITIALIZER_CALL classDescriptor=Base
|
||||||
PROPERTY public final val x: kotlin.Int
|
PROPERTY public final val x: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
|
|||||||
+4
-2
@@ -6,9 +6,11 @@ FILE /classMembers.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Any
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
SET_BACKING_FIELD y type=kotlin.Unit operator=null
|
SET_BACKING_FIELD y type=kotlin.Unit operator=null
|
||||||
GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class C type=C
|
||||||
|
value: GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
SET_BACKING_FIELD z type=kotlin.Unit operator=null
|
SET_BACKING_FIELD z type=kotlin.Unit operator=null
|
||||||
GET_VAR z type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class C type=C
|
||||||
|
value: GET_VAR z type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=C
|
INSTANCE_INITIALIZER_CALL classDescriptor=C
|
||||||
PROPERTY public final val y: kotlin.Int
|
PROPERTY public final val y: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
|
|||||||
+6
-3
@@ -4,11 +4,14 @@ FILE /dataClasses.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Any
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
||||||
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final data class Test1 type=Test1
|
||||||
|
value: GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
SET_BACKING_FIELD y type=kotlin.Unit operator=null
|
SET_BACKING_FIELD y type=kotlin.Unit operator=null
|
||||||
GET_VAR y type=kotlin.String operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final data class Test1 type=Test1
|
||||||
|
value: GET_VAR y type=kotlin.String operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
SET_BACKING_FIELD z type=kotlin.Unit operator=null
|
SET_BACKING_FIELD z type=kotlin.Unit operator=null
|
||||||
GET_VAR z type=kotlin.Any operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final data class Test1 type=Test1
|
||||||
|
value: GET_VAR z type=kotlin.Any operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=Test1
|
INSTANCE_INITIALIZER_CALL classDescriptor=Test1
|
||||||
PROPERTY public final val x: kotlin.Int
|
PROPERTY public final val x: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
|
|||||||
+6
-3
@@ -17,7 +17,8 @@ FILE /enum.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
ENUM_CONSTRUCTOR_CALL Enum super
|
ENUM_CONSTRUCTOR_CALL Enum super
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
||||||
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final enum class TestEnum2 : kotlin.Enum<TestEnum2> type=TestEnum2
|
||||||
|
value: GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=TestEnum2
|
INSTANCE_INITIALIZER_CALL classDescriptor=TestEnum2
|
||||||
PROPERTY public final val x: kotlin.Int
|
PROPERTY public final val x: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
@@ -61,7 +62,8 @@ FILE /enum.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
ENUM_CONSTRUCTOR_CALL Enum super
|
ENUM_CONSTRUCTOR_CALL Enum super
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
||||||
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final enum class TestEnum4 : kotlin.Enum<TestEnum4> type=TestEnum4
|
||||||
|
value: GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=TestEnum4
|
INSTANCE_INITIALIZER_CALL classDescriptor=TestEnum4
|
||||||
PROPERTY public final val x: kotlin.Int
|
PROPERTY public final val x: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
@@ -90,7 +92,8 @@ FILE /enum.kt
|
|||||||
ANONYMOUS_INITIALIZER TEST2
|
ANONYMOUS_INITIALIZER TEST2
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
SET_BACKING_FIELD z type=kotlin.Unit operator=null
|
SET_BACKING_FIELD z type=kotlin.Unit operator=null
|
||||||
CALL .<get-x> type=kotlin.Int operator=GET_PROPERTY
|
receiver: THIS enum entry TEST2 type=TestEnum4.TEST2
|
||||||
|
value: CALL .<get-x> type=kotlin.Int operator=GET_PROPERTY
|
||||||
$this: THIS enum entry TEST2 type=TestEnum4.TEST2
|
$this: THIS enum entry TEST2 type=TestEnum4.TEST2
|
||||||
FUN public open override /*1*/ fun foo(): kotlin.Unit
|
FUN public open override /*1*/ fun foo(): kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
|
|||||||
+2
-1
@@ -12,7 +12,8 @@ FILE /initBlock.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Any
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
||||||
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class Test2 type=Test2
|
||||||
|
value: GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=Test2
|
INSTANCE_INITIALIZER_CALL classDescriptor=Test2
|
||||||
PROPERTY public final val x: kotlin.Int
|
PROPERTY public final val x: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
|
|||||||
+4
-2
@@ -4,7 +4,8 @@ FILE /initVal.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Any
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
||||||
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class TestInitValFromParameter type=TestInitValFromParameter
|
||||||
|
value: GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=TestInitValFromParameter
|
INSTANCE_INITIALIZER_CALL classDescriptor=TestInitValFromParameter
|
||||||
PROPERTY public final val x: kotlin.Int
|
PROPERTY public final val x: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
@@ -26,4 +27,5 @@ FILE /initVal.kt
|
|||||||
ANONYMOUS_INITIALIZER TestInitValInInitBlock
|
ANONYMOUS_INITIALIZER TestInitValInInitBlock
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
||||||
CONST Int type=kotlin.Int value='0'
|
receiver: THIS public final class TestInitValInInitBlock type=TestInitValInInitBlock
|
||||||
|
value: CONST Int type=kotlin.Int value='0'
|
||||||
|
|||||||
+5
-4
@@ -4,7 +4,8 @@ FILE /initVar.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Any
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
||||||
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class TestInitVarFromParameter type=TestInitVarFromParameter
|
||||||
|
value: GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=TestInitVarFromParameter
|
INSTANCE_INITIALIZER_CALL classDescriptor=TestInitVarFromParameter
|
||||||
PROPERTY public final var x: kotlin.Int
|
PROPERTY public final var x: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
@@ -39,13 +40,13 @@ FILE /initVar.kt
|
|||||||
PROPERTY_SETTER public final fun <set-x>(/*0*/ value: kotlin.Int): kotlin.Unit
|
PROPERTY_SETTER public final fun <set-x>(/*0*/ value: kotlin.Int): kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=EQ
|
SET_BACKING_FIELD x type=kotlin.Unit operator=EQ
|
||||||
GET_VAR value type=kotlin.Int operator=null
|
value: GET_VAR value type=kotlin.Int operator=null
|
||||||
CLASS CLASS TestInitVarWithCustomSetterWithExplicitCtor
|
CLASS CLASS TestInitVarWithCustomSetterWithExplicitCtor
|
||||||
PROPERTY public final var x: kotlin.Int
|
PROPERTY public final var x: kotlin.Int
|
||||||
PROPERTY_SETTER public final fun <set-x>(/*0*/ value: kotlin.Int): kotlin.Unit
|
PROPERTY_SETTER public final fun <set-x>(/*0*/ value: kotlin.Int): kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=EQ
|
SET_BACKING_FIELD x type=kotlin.Unit operator=EQ
|
||||||
GET_VAR value type=kotlin.Int operator=null
|
value: GET_VAR value type=kotlin.Int operator=null
|
||||||
ANONYMOUS_INITIALIZER TestInitVarWithCustomSetterWithExplicitCtor
|
ANONYMOUS_INITIALIZER TestInitVarWithCustomSetterWithExplicitCtor
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
CALL .<set-x> type=kotlin.Unit operator=EQ
|
CALL .<set-x> type=kotlin.Unit operator=EQ
|
||||||
@@ -60,7 +61,7 @@ FILE /initVar.kt
|
|||||||
PROPERTY_SETTER public final fun <set-x>(/*0*/ value: kotlin.Int): kotlin.Unit
|
PROPERTY_SETTER public final fun <set-x>(/*0*/ value: kotlin.Int): kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=EQ
|
SET_BACKING_FIELD x type=kotlin.Unit operator=EQ
|
||||||
GET_VAR value type=kotlin.Int operator=null
|
value: GET_VAR value type=kotlin.Int operator=null
|
||||||
CONSTRUCTOR public constructor TestInitVarWithCustomSetterInCtor()
|
CONSTRUCTOR public constructor TestInitVarWithCustomSetterInCtor()
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Any
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
|
|||||||
@@ -16,5 +16,6 @@ FILE /objectWithInitializers.kt
|
|||||||
ANONYMOUS_INITIALIZER Test
|
ANONYMOUS_INITIALIZER Test
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
SET_BACKING_FIELD y type=kotlin.Unit operator=null
|
SET_BACKING_FIELD y type=kotlin.Unit operator=null
|
||||||
CALL .<get-x> type=kotlin.Int operator=GET_PROPERTY
|
receiver: THIS public object Test : Base type=Test
|
||||||
|
value: CALL .<get-x> type=kotlin.Int operator=GET_PROPERTY
|
||||||
$this: THIS public object Test : Base type=Test
|
$this: THIS public object Test : Base type=Test
|
||||||
|
|||||||
+10
-5
@@ -4,9 +4,11 @@ FILE /primaryConstructor.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Any
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
||||||
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class Test1 type=Test1
|
||||||
|
value: GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
SET_BACKING_FIELD y type=kotlin.Unit operator=null
|
SET_BACKING_FIELD y type=kotlin.Unit operator=null
|
||||||
GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class Test1 type=Test1
|
||||||
|
value: GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=Test1
|
INSTANCE_INITIALIZER_CALL classDescriptor=Test1
|
||||||
PROPERTY public final val x: kotlin.Int
|
PROPERTY public final val x: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
@@ -19,7 +21,8 @@ FILE /primaryConstructor.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Any
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
SET_BACKING_FIELD y type=kotlin.Unit operator=null
|
SET_BACKING_FIELD y type=kotlin.Unit operator=null
|
||||||
GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class Test2 type=Test2
|
||||||
|
value: GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=Test2
|
INSTANCE_INITIALIZER_CALL classDescriptor=Test2
|
||||||
PROPERTY public final val y: kotlin.Int
|
PROPERTY public final val y: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
@@ -32,7 +35,8 @@ FILE /primaryConstructor.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Any
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
SET_BACKING_FIELD y type=kotlin.Unit operator=null
|
SET_BACKING_FIELD y type=kotlin.Unit operator=null
|
||||||
GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class Test3 type=Test3
|
||||||
|
value: GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=Test3
|
INSTANCE_INITIALIZER_CALL classDescriptor=Test3
|
||||||
PROPERTY public final val y: kotlin.Int
|
PROPERTY public final val y: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
@@ -41,4 +45,5 @@ FILE /primaryConstructor.kt
|
|||||||
ANONYMOUS_INITIALIZER Test3
|
ANONYMOUS_INITIALIZER Test3
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
||||||
GET_VAR x type=kotlin.Int operator=null
|
receiver: THIS public final class Test3 type=Test3
|
||||||
|
value: GET_VAR x type=kotlin.Int operator=null
|
||||||
|
|||||||
+4
-2
@@ -19,9 +19,11 @@ FILE /primaryConstructorWithSuperConstructorCall.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Base
|
DELEGATING_CONSTRUCTOR_CALL Base
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
||||||
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class TestWithDelegatingConstructor : Base type=TestWithDelegatingConstructor
|
||||||
|
value: GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
SET_BACKING_FIELD y type=kotlin.Unit operator=null
|
SET_BACKING_FIELD y type=kotlin.Unit operator=null
|
||||||
GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class TestWithDelegatingConstructor : Base type=TestWithDelegatingConstructor
|
||||||
|
value: GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=TestWithDelegatingConstructor
|
INSTANCE_INITIALIZER_CALL classDescriptor=TestWithDelegatingConstructor
|
||||||
PROPERTY public final val x: kotlin.Int
|
PROPERTY public final val x: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
|
|||||||
+6
-3
@@ -9,7 +9,8 @@ FILE /sealedClasses.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Expr
|
DELEGATING_CONSTRUCTOR_CALL Expr
|
||||||
SET_BACKING_FIELD number type=kotlin.Unit operator=null
|
SET_BACKING_FIELD number type=kotlin.Unit operator=null
|
||||||
GET_VAR number type=kotlin.Double operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class Const : Expr type=Expr.Const
|
||||||
|
value: GET_VAR number type=kotlin.Double operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=Const
|
INSTANCE_INITIALIZER_CALL classDescriptor=Const
|
||||||
PROPERTY public final val number: kotlin.Double
|
PROPERTY public final val number: kotlin.Double
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
@@ -19,9 +20,11 @@ FILE /sealedClasses.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Expr
|
DELEGATING_CONSTRUCTOR_CALL Expr
|
||||||
SET_BACKING_FIELD e1 type=kotlin.Unit operator=null
|
SET_BACKING_FIELD e1 type=kotlin.Unit operator=null
|
||||||
GET_VAR e1 type=Expr operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class Sum : Expr type=Expr.Sum
|
||||||
|
value: GET_VAR e1 type=Expr operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
SET_BACKING_FIELD e2 type=kotlin.Unit operator=null
|
SET_BACKING_FIELD e2 type=kotlin.Unit operator=null
|
||||||
GET_VAR e2 type=Expr operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class Sum : Expr type=Expr.Sum
|
||||||
|
value: GET_VAR e2 type=Expr operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=Sum
|
INSTANCE_INITIALIZER_CALL classDescriptor=Sum
|
||||||
PROPERTY public final val e1: Expr
|
PROPERTY public final val e1: Expr
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
|
|||||||
+2
-1
@@ -17,7 +17,8 @@ FILE /secondaryConstructorWithInitializersFromClassBody.kt
|
|||||||
ANONYMOUS_INITIALIZER TestInitBlock
|
ANONYMOUS_INITIALIZER TestInitBlock
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
||||||
CONST Int type=kotlin.Int value='0'
|
receiver: THIS public final class TestInitBlock : Base type=TestInitBlock
|
||||||
|
value: CONST Int type=kotlin.Int value='0'
|
||||||
CONSTRUCTOR public constructor TestInitBlock()
|
CONSTRUCTOR public constructor TestInitBlock()
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Base
|
DELEGATING_CONSTRUCTOR_CALL Base
|
||||||
|
|||||||
@@ -21,7 +21,8 @@ FILE /delegatedProperties.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Any
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
SET_BACKING_FIELD map type=kotlin.Unit operator=null
|
SET_BACKING_FIELD map type=kotlin.Unit operator=null
|
||||||
GET_VAR map type=kotlin.collections.MutableMap<kotlin.String, kotlin.Any> operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class C type=C
|
||||||
|
value: GET_VAR map type=kotlin.collections.MutableMap<kotlin.String, kotlin.Any> operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=C
|
INSTANCE_INITIALIZER_CALL classDescriptor=C
|
||||||
PROPERTY public final val map: kotlin.collections.MutableMap<kotlin.String, kotlin.Any>
|
PROPERTY public final val map: kotlin.collections.MutableMap<kotlin.String, kotlin.Any>
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
@@ -41,6 +42,7 @@ FILE /delegatedProperties.kt
|
|||||||
RETURN type=kotlin.Nothing from=<get-test2>
|
RETURN type=kotlin.Nothing from=<get-test2>
|
||||||
CALL .getValue type=kotlin.Int operator=null
|
CALL .getValue type=kotlin.Int operator=null
|
||||||
$receiver: GET_BACKING_FIELD test2$delegate type=kotlin.Lazy<kotlin.Int> operator=null
|
$receiver: GET_BACKING_FIELD test2$delegate type=kotlin.Lazy<kotlin.Int> operator=null
|
||||||
|
receiver: THIS public final class C type=C
|
||||||
thisRef: THIS public final class C type=C
|
thisRef: THIS public final class C type=C
|
||||||
property: CALLABLE_REFERENCE test2 type=kotlin.reflect.KProperty1<C, kotlin.Int> operator=PROPERTY_REFERENCE_FOR_DELEGATE
|
property: CALLABLE_REFERENCE test2 type=kotlin.reflect.KProperty1<C, kotlin.Int> operator=PROPERTY_REFERENCE_FOR_DELEGATE
|
||||||
PROPERTY public final var test3: kotlin.Any
|
PROPERTY public final var test3: kotlin.Any
|
||||||
@@ -53,6 +55,7 @@ FILE /delegatedProperties.kt
|
|||||||
RETURN type=kotlin.Nothing from=<get-test3>
|
RETURN type=kotlin.Nothing from=<get-test3>
|
||||||
CALL .getValue type=kotlin.Any operator=null
|
CALL .getValue type=kotlin.Any operator=null
|
||||||
$receiver: GET_BACKING_FIELD test3$delegate type=kotlin.collections.MutableMap<kotlin.String, kotlin.Any> operator=null
|
$receiver: GET_BACKING_FIELD test3$delegate type=kotlin.collections.MutableMap<kotlin.String, kotlin.Any> operator=null
|
||||||
|
receiver: THIS public final class C type=C
|
||||||
thisRef: THIS public final class C type=C
|
thisRef: THIS public final class C type=C
|
||||||
property: CALLABLE_REFERENCE test3 type=kotlin.reflect.KMutableProperty1<C, kotlin.Any> operator=PROPERTY_REFERENCE_FOR_DELEGATE
|
property: CALLABLE_REFERENCE test3 type=kotlin.reflect.KMutableProperty1<C, kotlin.Any> operator=PROPERTY_REFERENCE_FOR_DELEGATE
|
||||||
PROPERTY_SETTER public final fun <set-test3>(/*0*/ <set-?>: kotlin.Any): kotlin.Unit
|
PROPERTY_SETTER public final fun <set-test3>(/*0*/ <set-?>: kotlin.Any): kotlin.Unit
|
||||||
@@ -60,6 +63,7 @@ FILE /delegatedProperties.kt
|
|||||||
RETURN type=kotlin.Nothing from=<set-test3>
|
RETURN type=kotlin.Nothing from=<set-test3>
|
||||||
CALL .setValue type=kotlin.Unit operator=null
|
CALL .setValue type=kotlin.Unit operator=null
|
||||||
$receiver: GET_BACKING_FIELD test3$delegate type=kotlin.collections.MutableMap<kotlin.String, kotlin.Any> operator=null
|
$receiver: GET_BACKING_FIELD test3$delegate type=kotlin.collections.MutableMap<kotlin.String, kotlin.Any> operator=null
|
||||||
|
receiver: THIS public final class C type=C
|
||||||
thisRef: THIS public final class C type=C
|
thisRef: THIS public final class C type=C
|
||||||
property: CALLABLE_REFERENCE test3 type=kotlin.reflect.KMutableProperty1<C, kotlin.Any> operator=PROPERTY_REFERENCE_FOR_DELEGATE
|
property: CALLABLE_REFERENCE test3 type=kotlin.reflect.KMutableProperty1<C, kotlin.Any> operator=PROPERTY_REFERENCE_FOR_DELEGATE
|
||||||
value: GET_VAR <set-?> type=kotlin.Any operator=null
|
value: GET_VAR <set-?> type=kotlin.Any operator=null
|
||||||
|
|||||||
@@ -16,7 +16,8 @@ FILE /arrayAugmentedAssignment1.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Any
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
||||||
GET_VAR x type=kotlin.IntArray operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class C type=C
|
||||||
|
value: GET_VAR x type=kotlin.IntArray operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=C
|
INSTANCE_INITIALIZER_CALL classDescriptor=C
|
||||||
PROPERTY public final val x: kotlin.IntArray
|
PROPERTY public final val x: kotlin.IntArray
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
|
|||||||
+2
-1
@@ -4,7 +4,8 @@ FILE /assignments.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Any
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
SET_BACKING_FIELD x type=kotlin.Unit operator=null
|
||||||
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class Ref type=Ref
|
||||||
|
value: GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=Ref
|
INSTANCE_INITIALIZER_CALL classDescriptor=Ref
|
||||||
PROPERTY public final var x: kotlin.Int
|
PROPERTY public final var x: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
|
|||||||
@@ -93,7 +93,8 @@ FILE /complexAugmentedAssignment.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Any
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
SET_BACKING_FIELD s type=kotlin.Unit operator=null
|
SET_BACKING_FIELD s type=kotlin.Unit operator=null
|
||||||
GET_VAR s type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class B type=B
|
||||||
|
value: GET_VAR s type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=B
|
INSTANCE_INITIALIZER_CALL classDescriptor=B
|
||||||
PROPERTY public final var s: kotlin.Int
|
PROPERTY public final var s: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
|
|||||||
@@ -5,6 +5,6 @@ object B {
|
|||||||
operator fun A.component2() = 2
|
operator fun A.component2() = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
fun B.test() { // <<< destructuring1.txt
|
fun B.test() {
|
||||||
val (x, y) = A
|
val (x, y) = A
|
||||||
}
|
}
|
||||||
+32
-13
@@ -1,13 +1,32 @@
|
|||||||
FUN public fun B.test(): kotlin.Unit
|
FILE /destructuring1.kt
|
||||||
BLOCK_BODY
|
CLASS OBJECT A
|
||||||
BLOCK type=kotlin.Unit operator=DESTRUCTURING_DECLARATION
|
CONSTRUCTOR private constructor A()
|
||||||
VAR val tmp0_container: A
|
BLOCK_BODY
|
||||||
GET_OBJECT A type=A
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
VAR val x: kotlin.Int
|
INSTANCE_INITIALIZER_CALL classDescriptor=A
|
||||||
CALL .component1 type=kotlin.Int operator=COMPONENT_N(index=1)
|
CLASS OBJECT B
|
||||||
$this: $RECEIVER of: test type=B
|
CONSTRUCTOR private constructor B()
|
||||||
$receiver: GET_VAR tmp0_container type=A operator=null
|
BLOCK_BODY
|
||||||
VAR val y: kotlin.Int
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
CALL .component2 type=kotlin.Int operator=COMPONENT_N(index=2)
|
INSTANCE_INITIALIZER_CALL classDescriptor=B
|
||||||
$this: $RECEIVER of: test type=B
|
FUN public final operator fun A.component1(): kotlin.Int
|
||||||
$receiver: GET_VAR tmp0_container type=A operator=null
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from=component1
|
||||||
|
CONST Int type=kotlin.Int value='1'
|
||||||
|
FUN public final operator fun A.component2(): kotlin.Int
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from=component2
|
||||||
|
CONST Int type=kotlin.Int value='2'
|
||||||
|
FUN public fun B.test(): kotlin.Unit
|
||||||
|
BLOCK_BODY
|
||||||
|
BLOCK type=kotlin.Unit operator=DESTRUCTURING_DECLARATION
|
||||||
|
VAR val tmp0_container: A
|
||||||
|
GET_OBJECT A type=A
|
||||||
|
VAR val x: kotlin.Int
|
||||||
|
CALL .component1 type=kotlin.Int operator=COMPONENT_N(index=1)
|
||||||
|
$this: $RECEIVER of: test type=B
|
||||||
|
$receiver: GET_VAR tmp0_container type=A operator=null
|
||||||
|
VAR val y: kotlin.Int
|
||||||
|
CALL .component2 type=kotlin.Int operator=COMPONENT_N(index=2)
|
||||||
|
$this: $RECEIVER of: test type=B
|
||||||
|
$receiver: GET_VAR tmp0_container type=A operator=null
|
||||||
|
|||||||
+2
-2
@@ -5,13 +5,13 @@ FILE /field.kt
|
|||||||
PROPERTY_SETTER public fun <set-testSimple>(/*0*/ value: kotlin.Int): kotlin.Unit
|
PROPERTY_SETTER public fun <set-testSimple>(/*0*/ value: kotlin.Int): kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
SET_BACKING_FIELD testSimple type=kotlin.Unit operator=EQ
|
SET_BACKING_FIELD testSimple type=kotlin.Unit operator=EQ
|
||||||
GET_VAR value type=kotlin.Int operator=null
|
value: GET_VAR value type=kotlin.Int operator=null
|
||||||
PROPERTY public var testAugmented: kotlin.Int
|
PROPERTY public var testAugmented: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
CONST Int type=kotlin.Int value='0'
|
CONST Int type=kotlin.Int value='0'
|
||||||
PROPERTY_SETTER public fun <set-testAugmented>(/*0*/ value: kotlin.Int): kotlin.Unit
|
PROPERTY_SETTER public fun <set-testAugmented>(/*0*/ value: kotlin.Int): kotlin.Unit
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
SET_BACKING_FIELD testAugmented type=kotlin.Unit operator=PLUSEQ
|
SET_BACKING_FIELD testAugmented type=kotlin.Unit operator=PLUSEQ
|
||||||
CALL .plus type=kotlin.Int operator=PLUSEQ
|
value: CALL .plus type=kotlin.Int operator=PLUSEQ
|
||||||
$this: GET_BACKING_FIELD testAugmented type=kotlin.Int operator=PLUSEQ
|
$this: GET_BACKING_FIELD testAugmented type=kotlin.Int operator=PLUSEQ
|
||||||
other: GET_VAR value type=kotlin.Int operator=null
|
other: GET_VAR value type=kotlin.Int operator=null
|
||||||
|
|||||||
@@ -9,7 +9,8 @@ FILE /forWithImplicitReceivers.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Any
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
SET_BACKING_FIELD value type=kotlin.Unit operator=null
|
SET_BACKING_FIELD value type=kotlin.Unit operator=null
|
||||||
GET_VAR value type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class IntCell type=IntCell
|
||||||
|
value: GET_VAR value type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=IntCell
|
INSTANCE_INITIALIZER_CALL classDescriptor=IntCell
|
||||||
PROPERTY public final var value: kotlin.Int
|
PROPERTY public final var value: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
// FILE: Derived.kt
|
||||||
|
// IR_FILE: jvmInstanceFieldReference.txt
|
||||||
|
class Derived: Base() {
|
||||||
|
init {
|
||||||
|
value = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getValue() = value
|
||||||
|
|
||||||
|
fun setValue(value: Int) {
|
||||||
|
this.value = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Base.java
|
||||||
|
public class Base {
|
||||||
|
public int value;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
FILE /Derived.kt
|
||||||
|
CLASS CLASS Derived
|
||||||
|
CONSTRUCTOR public constructor Derived()
|
||||||
|
BLOCK_BODY
|
||||||
|
DELEGATING_CONSTRUCTOR_CALL Base
|
||||||
|
INSTANCE_INITIALIZER_CALL classDescriptor=Derived
|
||||||
|
ANONYMOUS_INITIALIZER Derived
|
||||||
|
BLOCK_BODY
|
||||||
|
SET_BACKING_FIELD value type=kotlin.Unit operator=EQ
|
||||||
|
receiver: THIS public final class Derived : Base type=Derived
|
||||||
|
value: CONST Int type=kotlin.Int value='0'
|
||||||
|
FUN public final fun getValue(): kotlin.Int
|
||||||
|
BLOCK_BODY
|
||||||
|
RETURN type=kotlin.Nothing from=getValue
|
||||||
|
GET_BACKING_FIELD value type=kotlin.Int operator=GET_PROPERTY
|
||||||
|
receiver: THIS public final class Derived : Base type=Derived
|
||||||
|
FUN public final fun setValue(/*0*/ value: kotlin.Int): kotlin.Unit
|
||||||
|
BLOCK_BODY
|
||||||
|
SET_BACKING_FIELD value type=kotlin.Unit operator=EQ
|
||||||
|
receiver: THIS public final class Derived : Base type=Derived
|
||||||
|
value: GET_VAR value type=kotlin.Int operator=null
|
||||||
@@ -3,14 +3,14 @@ FILE /jvmStaticFieldReference.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
CALL .println type=kotlin.Unit operator=null
|
CALL .println type=kotlin.Unit operator=null
|
||||||
$this: TYPE_OP operator=IMPLICIT_NOTNULL typeOperand=java.io.PrintStream
|
$this: TYPE_OP operator=IMPLICIT_NOTNULL typeOperand=java.io.PrintStream
|
||||||
CALL .<get-out> type=java.io.PrintStream! operator=GET_PROPERTY
|
GET_BACKING_FIELD out type=java.io.PrintStream! operator=GET_PROPERTY
|
||||||
p0: CONST String type=kotlin.String value='testFun'
|
p0: CONST String type=kotlin.String value='testFun'
|
||||||
PROPERTY public var testProp: kotlin.Any
|
PROPERTY public var testProp: kotlin.Any
|
||||||
PROPERTY_GETTER public fun <get-testProp>(): kotlin.Any
|
PROPERTY_GETTER public fun <get-testProp>(): kotlin.Any
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
CALL .println type=kotlin.Unit operator=null
|
CALL .println type=kotlin.Unit operator=null
|
||||||
$this: TYPE_OP operator=IMPLICIT_NOTNULL typeOperand=java.io.PrintStream
|
$this: TYPE_OP operator=IMPLICIT_NOTNULL typeOperand=java.io.PrintStream
|
||||||
CALL .<get-out> type=java.io.PrintStream! operator=GET_PROPERTY
|
GET_BACKING_FIELD out type=java.io.PrintStream! operator=GET_PROPERTY
|
||||||
p0: CONST String type=kotlin.String value='testProp/get'
|
p0: CONST String type=kotlin.String value='testProp/get'
|
||||||
RETURN type=kotlin.Nothing from=<get-testProp>
|
RETURN type=kotlin.Nothing from=<get-testProp>
|
||||||
CONST Int type=kotlin.Int value='42'
|
CONST Int type=kotlin.Int value='42'
|
||||||
@@ -18,7 +18,7 @@ FILE /jvmStaticFieldReference.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
CALL .println type=kotlin.Unit operator=null
|
CALL .println type=kotlin.Unit operator=null
|
||||||
$this: TYPE_OP operator=IMPLICIT_NOTNULL typeOperand=java.io.PrintStream
|
$this: TYPE_OP operator=IMPLICIT_NOTNULL typeOperand=java.io.PrintStream
|
||||||
CALL .<get-out> type=java.io.PrintStream! operator=GET_PROPERTY
|
GET_BACKING_FIELD out type=java.io.PrintStream! operator=GET_PROPERTY
|
||||||
p0: CONST String type=kotlin.String value='testProp/set'
|
p0: CONST String type=kotlin.String value='testProp/set'
|
||||||
CLASS CLASS TestClass
|
CLASS CLASS TestClass
|
||||||
CONSTRUCTOR public constructor TestClass()
|
CONSTRUCTOR public constructor TestClass()
|
||||||
@@ -31,12 +31,12 @@ FILE /jvmStaticFieldReference.kt
|
|||||||
else: BLOCK type=kotlin.Int operator=null
|
else: BLOCK type=kotlin.Int operator=null
|
||||||
CALL .println type=kotlin.Unit operator=null
|
CALL .println type=kotlin.Unit operator=null
|
||||||
$this: TYPE_OP operator=IMPLICIT_NOTNULL typeOperand=java.io.PrintStream
|
$this: TYPE_OP operator=IMPLICIT_NOTNULL typeOperand=java.io.PrintStream
|
||||||
CALL .<get-out> type=java.io.PrintStream! operator=GET_PROPERTY
|
GET_BACKING_FIELD out type=java.io.PrintStream! operator=GET_PROPERTY
|
||||||
p0: CONST String type=kotlin.String value='TestClass/test'
|
p0: CONST String type=kotlin.String value='TestClass/test'
|
||||||
CONST Int type=kotlin.Int value='42'
|
CONST Int type=kotlin.Int value='42'
|
||||||
ANONYMOUS_INITIALIZER TestClass
|
ANONYMOUS_INITIALIZER TestClass
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
CALL .println type=kotlin.Unit operator=null
|
CALL .println type=kotlin.Unit operator=null
|
||||||
$this: TYPE_OP operator=IMPLICIT_NOTNULL typeOperand=java.io.PrintStream
|
$this: TYPE_OP operator=IMPLICIT_NOTNULL typeOperand=java.io.PrintStream
|
||||||
CALL .<get-out> type=java.io.PrintStream! operator=GET_PROPERTY
|
GET_BACKING_FIELD out type=java.io.PrintStream! operator=GET_PROPERTY
|
||||||
p0: CONST String type=kotlin.String value='TestClass/init'
|
p0: CONST String type=kotlin.String value='TestClass/init'
|
||||||
|
|||||||
+2
-1
@@ -4,7 +4,8 @@ FILE /safeCalls.kt
|
|||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
DELEGATING_CONSTRUCTOR_CALL Any
|
DELEGATING_CONSTRUCTOR_CALL Any
|
||||||
SET_BACKING_FIELD value type=kotlin.Unit operator=null
|
SET_BACKING_FIELD value type=kotlin.Unit operator=null
|
||||||
GET_VAR value type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
receiver: THIS public final class Ref type=Ref
|
||||||
|
value: GET_VAR value type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||||
INSTANCE_INITIALIZER_CALL classDescriptor=Ref
|
INSTANCE_INITIALIZER_CALL classDescriptor=Ref
|
||||||
PROPERTY public final var value: kotlin.Int
|
PROPERTY public final var value: kotlin.Int
|
||||||
EXPRESSION_BODY
|
EXPRESSION_BODY
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
// FILE: Derived.kt
|
||||||
|
// IR_FILE: setFieldWithImplicitCast.txt
|
||||||
|
class Derived : Base() {
|
||||||
|
fun setValue(v: Any) {
|
||||||
|
if (v is String) {
|
||||||
|
value = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: Base.java
|
||||||
|
public class Base {
|
||||||
|
public String value;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
FILE /Derived.kt
|
||||||
|
CLASS CLASS Derived
|
||||||
|
CONSTRUCTOR public constructor Derived()
|
||||||
|
BLOCK_BODY
|
||||||
|
DELEGATING_CONSTRUCTOR_CALL Base
|
||||||
|
INSTANCE_INITIALIZER_CALL classDescriptor=Derived
|
||||||
|
FUN public final fun setValue(/*0*/ v: kotlin.Any): kotlin.Unit
|
||||||
|
BLOCK_BODY
|
||||||
|
WHEN type=kotlin.Unit operator=IF
|
||||||
|
if: TYPE_OP operator=INSTANCEOF typeOperand=kotlin.String
|
||||||
|
GET_VAR v type=kotlin.Any operator=null
|
||||||
|
then: BLOCK type=kotlin.Unit operator=null
|
||||||
|
SET_BACKING_FIELD value type=kotlin.Unit operator=EQ
|
||||||
|
receiver: THIS public final class Derived : Base type=Derived
|
||||||
|
value: TYPE_OP operator=IMPLICIT_CAST typeOperand=kotlin.String!
|
||||||
|
GET_VAR v type=kotlin.Any operator=null
|
||||||
@@ -424,6 +424,12 @@ public class IrTextTestCaseGenerated extends AbstractIrTextTestCase {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("jvmInstanceFieldReference.kt")
|
||||||
|
public void testJvmInstanceFieldReference() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/expressions/jvmInstanceFieldReference.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("jvmStaticFieldReference.kt")
|
@TestMetadata("jvmStaticFieldReference.kt")
|
||||||
public void testJvmStaticFieldReference() throws Exception {
|
public void testJvmStaticFieldReference() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/expressions/jvmStaticFieldReference.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/expressions/jvmStaticFieldReference.kt");
|
||||||
@@ -466,6 +472,12 @@ public class IrTextTestCaseGenerated extends AbstractIrTextTestCase {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("setFieldWithImplicitCast.kt")
|
||||||
|
public void testSetFieldWithImplicitCast() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/expressions/setFieldWithImplicitCast.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("simpleOperators.kt")
|
@TestMetadata("simpleOperators.kt")
|
||||||
public void testSimpleOperators() throws Exception {
|
public void testSimpleOperators() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/expressions/simpleOperators.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/expressions/simpleOperators.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user