Represent class instance initialization "as from resolve".

This commit is contained in:
Dmitry Petrov
2016-09-01 18:32:07 +03:00
committed by Dmitry Petrov
parent c3c758c7cc
commit 1b5dd50359
43 changed files with 322 additions and 164 deletions
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.psi2ir.generators
import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.declarations.IrFunctionBase import org.jetbrains.kotlin.ir.declarations.IrFunctionBase
import org.jetbrains.kotlin.ir.descriptors.IrPropertyDelegateDescriptor import org.jetbrains.kotlin.ir.descriptors.IrPropertyDelegateDescriptor
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
@@ -32,7 +31,6 @@ import org.jetbrains.kotlin.psi2ir.builders.irReturn
import org.jetbrains.kotlin.psi2ir.intermediate.VariableLValue import org.jetbrains.kotlin.psi2ir.intermediate.VariableLValue
import org.jetbrains.kotlin.psi2ir.intermediate.setExplicitReceiverValue import org.jetbrains.kotlin.psi2ir.intermediate.setExplicitReceiverValue
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
import java.lang.AssertionError
import java.util.* import java.util.*
class BodyGenerator(val scopeOwner: DeclarationDescriptor, override val context: GeneratorContext): GeneratorWithScope { class BodyGenerator(val scopeOwner: DeclarationDescriptor, override val context: GeneratorContext): GeneratorWithScope {
@@ -146,7 +144,9 @@ class BodyGenerator(val scopeOwner: DeclarationDescriptor, override val context:
generateSuperConstructorCall(irBlockBody, ktClassOrObject) generateSuperConstructorCall(irBlockBody, ktClassOrObject)
generateInitializersForPropertiesDefinedInPrimaryConstructor(irBlockBody, ktClassOrObject) generateInitializersForPropertiesDefinedInPrimaryConstructor(irBlockBody, ktClassOrObject)
generateInitializersForClassBody(irBlockBody, ktClassOrObject)
val classDescriptor = (scopeOwner as ConstructorDescriptor).containingDeclaration
irBlockBody.addStatement(IrInstanceInitializerCallImpl(ktClassOrObject.startOffset, ktClassOrObject.endOffset, classDescriptor))
return irBlockBody return irBlockBody
} }
@@ -157,7 +157,7 @@ class BodyGenerator(val scopeOwner: DeclarationDescriptor, override val context:
generateDelegatingConstructorCall(irBlockBody, ktConstructor) generateDelegatingConstructorCall(irBlockBody, ktConstructor)
val classDescriptor = getOrFail(BindingContext.CONSTRUCTOR, ktConstructor).containingDeclaration val classDescriptor = getOrFail(BindingContext.CONSTRUCTOR, ktConstructor).containingDeclaration
irBlockBody.addStatement(IrNestedInitializersCallImpl(ktConstructor.startOffset, ktConstructor.endOffset, classDescriptor)) irBlockBody.addStatement(IrInstanceInitializerCallImpl(ktConstructor.startOffset, ktConstructor.endOffset, classDescriptor))
ktConstructor.bodyExpression?.let { ktBody -> ktConstructor.bodyExpression?.let { ktBody ->
createStatementGenerator().generateBlockBodyStatements(irBlockBody, ktBody) createStatementGenerator().generateBlockBodyStatements(irBlockBody, ktBody)
@@ -197,6 +197,18 @@ class BodyGenerator(val scopeOwner: DeclarationDescriptor, override val context:
return generateEnumConstructorCallOrSuperCall(ktEnumEntry, enumEntryDescriptor.containingDeclaration as ClassDescriptor, null) return generateEnumConstructorCallOrSuperCall(ktEnumEntry, enumEntryDescriptor.containingDeclaration as ClassDescriptor, null)
} }
fun generateAnonymousInitializerBody(ktAnonymousInitializer: KtAnonymousInitializer): IrBlockBody {
val ktBody = ktAnonymousInitializer.body!!
val irBlockBody = IrBlockBodyImpl(ktBody.startOffset, ktBody.endOffset)
if (ktBody is KtBlockExpression) {
createStatementGenerator().generateBlockBodyStatements(irBlockBody, ktBody)
}
else {
irBlockBody.addStatement(createStatementGenerator().generateStatement(ktBody))
}
return irBlockBody
}
fun generateEnumEntryInitializer(ktEnumEntry: KtEnumEntry, enumEntryDescriptor: ClassDescriptor): IrExpression { fun generateEnumEntryInitializer(ktEnumEntry: KtEnumEntry, enumEntryDescriptor: ClassDescriptor): IrExpression {
if (ktEnumEntry.declarations.isNotEmpty()) { if (ktEnumEntry.declarations.isNotEmpty()) {
val enumEntryConstructor = enumEntryDescriptor.unsubstitutedPrimaryConstructor!! val enumEntryConstructor = enumEntryDescriptor.unsubstitutedPrimaryConstructor!!
@@ -229,41 +241,6 @@ class BodyGenerator(val scopeOwner: DeclarationDescriptor, override val context:
enumClassConstructor, enumEntryOrNull) enumClassConstructor, enumEntryOrNull)
} }
fun generateNestedInitializersBody(ktClassOrObject: KtClassOrObject): IrBody {
val irBody = IrBlockBodyImpl(ktClassOrObject.startOffset, ktClassOrObject.endOffset)
generateInitializersForClassBody(irBody, ktClassOrObject)
return irBody
}
private fun generateInitializersForClassBody(irBlockBody: IrBlockBodyImpl, ktClassOrObject: KtClassOrObject) {
ktClassOrObject.getBody()?.let { ktClassBody ->
for (ktDeclaration in ktClassBody.declarations) {
when (ktDeclaration) {
is KtProperty -> generateInitializerForPropertyDefinedInClassBody(irBlockBody, ktDeclaration)
is KtClassInitializer -> generateAnonymousInitializer(irBlockBody, ktDeclaration)
}
}
}
}
private fun generateAnonymousInitializer(irBlockBody: IrBlockBodyImpl, ktClassInitializer: KtClassInitializer) {
if (ktClassInitializer.body == null) return
val irInitializer = generateAnonymousInitializer(ktClassInitializer)
irBlockBody.addStatement(irInitializer)
}
fun generateAnonymousInitializer(ktInitializer: KtAnonymousInitializer): IrStatement {
return createStatementGenerator().generateStatement(ktInitializer.body!!)
}
private fun generateInitializerForPropertyDefinedInClassBody(irBlockBody: IrBlockBodyImpl, ktProperty: KtProperty) {
val propertyDescriptor = getOrFail(BindingContext.VARIABLE, ktProperty) as PropertyDescriptor
ktProperty.initializer?.let { ktInitializer ->
irBlockBody.addStatement(createPropertyInitializationExpression(
ktProperty, propertyDescriptor, createStatementGenerator().generateExpression(ktInitializer)))
}
}
private fun generateInitializersForPropertiesDefinedInPrimaryConstructor(irBlockBody: IrBlockBodyImpl, ktClassOrObject: KtClassOrObject) { private fun generateInitializersForPropertiesDefinedInPrimaryConstructor(irBlockBody: IrBlockBodyImpl, ktClassOrObject: KtClassOrObject) {
ktClassOrObject.getPrimaryConstructor()?.let { ktPrimaryConstructor -> ktClassOrObject.getPrimaryConstructor()?.let { ktPrimaryConstructor ->
for (ktParameter in ktPrimaryConstructor.valueParameters) { for (ktParameter in ktPrimaryConstructor.valueParameters) {
@@ -21,10 +21,11 @@ import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrExpressionBodyImpl import org.jetbrains.kotlin.ir.expressions.IrExpressionBodyImpl
import org.jetbrains.kotlin.ir.expressions.IrGetVariableImpl import org.jetbrains.kotlin.ir.expressions.IrGetVariableImpl
import org.jetbrains.kotlin.ir.expressions.IrOperator import org.jetbrains.kotlin.ir.expressions.IrOperator
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtEnumEntry
import org.jetbrains.kotlin.psi.KtParameter
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
import org.jetbrains.kotlin.psi2ir.isConstructorDelegatingToSuper
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
class ClassGenerator(val declarationGenerator: DeclarationGenerator) : Generator { class ClassGenerator(val declarationGenerator: DeclarationGenerator) : Generator {
@@ -40,10 +41,6 @@ class ClassGenerator(val declarationGenerator: DeclarationGenerator) : Generator
generateMembersDeclaredInClassBody(irClass, ktClassOrObject) generateMembersDeclaredInClassBody(irClass, ktClassOrObject)
if (shouldGenerateNestedInitializers(ktClassOrObject)) {
irClass.nestedInitializers = BodyGenerator(descriptor, context).generateNestedInitializersBody(ktClassOrObject)
}
if (descriptor.isData) { if (descriptor.isData) {
generateAdditionalMembersForDataClass(irClass, ktClassOrObject) generateAdditionalMembersForDataClass(irClass, ktClassOrObject)
} }
@@ -63,12 +60,6 @@ class ClassGenerator(val declarationGenerator: DeclarationGenerator) : Generator
EnumClassMembersGenerator(context).generateSpecialMembers(irClass) EnumClassMembersGenerator(context).generateSpecialMembers(irClass)
} }
private fun shouldGenerateNestedInitializers(ktClassOrObject: KtClassOrObject): Boolean {
val ktClassBody = ktClassOrObject.getBody() ?: return false
return ktClassBody.declarations.any { it is KtSecondaryConstructor && it.isConstructorDelegatingToSuper(context.bindingContext) }
}
private fun generatePrimaryConstructor(irClass: IrClassImpl, ktClassOrObject: KtClassOrObject) { private fun generatePrimaryConstructor(irClass: IrClassImpl, ktClassOrObject: KtClassOrObject) {
val primaryConstructorDescriptor = irClass.descriptor.unsubstitutedPrimaryConstructor ?: return val primaryConstructorDescriptor = irClass.descriptor.unsubstitutedPrimaryConstructor ?: return
@@ -97,10 +88,7 @@ class ClassGenerator(val declarationGenerator: DeclarationGenerator) : Generator
private fun generateMembersDeclaredInClassBody(irClass: IrClassImpl, ktClassOrObject: KtClassOrObject) { private fun generateMembersDeclaredInClassBody(irClass: IrClassImpl, ktClassOrObject: KtClassOrObject) {
ktClassOrObject.getBody()?.let { ktClassBody -> ktClassOrObject.getBody()?.let { ktClassBody ->
for (ktDeclaration in ktClassBody.declarations) { for (ktDeclaration in ktClassBody.declarations) {
if (ktDeclaration is KtAnonymousInitializer) continue val irMember = declarationGenerator.generateClassMemberDeclaration(ktDeclaration, irClass.descriptor)
val irMember = declarationGenerator.generateMemberDeclaration(ktDeclaration)
irClass.addMember(irMember) irClass.addMember(irMember)
} }
} }
@@ -32,12 +32,8 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
when (ktDeclaration) { when (ktDeclaration) {
is KtNamedFunction -> is KtNamedFunction ->
generateFunctionDeclaration(ktDeclaration) generateFunctionDeclaration(ktDeclaration)
is KtSecondaryConstructor ->
generateSecondaryConstructor(ktDeclaration)
is KtProperty -> is KtProperty ->
generatePropertyDeclaration(ktDeclaration) generatePropertyDeclaration(ktDeclaration)
is KtEnumEntry ->
generateEnumEntryDeclaration(ktDeclaration)
is KtClassOrObject -> is KtClassOrObject ->
generateClassOrObjectDeclaration(ktDeclaration) generateClassOrObjectDeclaration(ktDeclaration)
is KtTypeAlias -> is KtTypeAlias ->
@@ -49,6 +45,18 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
) )
} }
fun generateClassMemberDeclaration(ktDeclaration: KtDeclaration, classDescriptor: ClassDescriptor): IrDeclaration =
when (ktDeclaration) {
is KtAnonymousInitializer ->
generateAnonymousInitializerDeclaration(ktDeclaration, classDescriptor)
is KtSecondaryConstructor ->
generateSecondaryConstructor(ktDeclaration)
is KtEnumEntry ->
generateEnumEntryDeclaration(ktDeclaration)
else ->
generateMemberDeclaration(ktDeclaration)
}
private fun generateEnumEntryDeclaration(ktEnumEntry: KtEnumEntry): IrEnumEntry = private fun generateEnumEntryDeclaration(ktEnumEntry: KtEnumEntry): IrEnumEntry =
ClassGenerator(this).generateEnumEntry(ktEnumEntry) ClassGenerator(this).generateEnumEntry(ktEnumEntry)
@@ -59,6 +67,13 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
IrTypeAliasImpl(ktDeclaration.startOffset, ktDeclaration.endOffset, IrDeclarationOrigin.DEFINED, IrTypeAliasImpl(ktDeclaration.startOffset, ktDeclaration.endOffset, IrDeclarationOrigin.DEFINED,
getOrFail(BindingContext.TYPE_ALIAS, ktDeclaration)) getOrFail(BindingContext.TYPE_ALIAS, ktDeclaration))
fun generateAnonymousInitializerDeclaration(ktAnonymousInitializer: KtAnonymousInitializer, classDescriptor: ClassDescriptor): IrDeclaration {
val irAnonymousInitializer = IrAnonymousInitializerImpl(ktAnonymousInitializer.startOffset, ktAnonymousInitializer.endOffset,
IrDeclarationOrigin.DEFINED, classDescriptor)
irAnonymousInitializer.body = BodyGenerator(classDescriptor, context).generateAnonymousInitializerBody(ktAnonymousInitializer)
return irAnonymousInitializer
}
fun generateFunctionDeclaration(ktFunction: KtNamedFunction): IrGeneralFunction { fun generateFunctionDeclaration(ktFunction: KtNamedFunction): IrGeneralFunction {
val functionDescriptor = getOrFail(BindingContext.FUNCTION, ktFunction) val functionDescriptor = getOrFail(BindingContext.FUNCTION, ktFunction)
val irFunction = IrFunctionImpl(ktFunction.startOffset, ktFunction.endOffset, IrDeclarationOrigin.DEFINED, functionDescriptor) val irFunction = IrFunctionImpl(ktFunction.startOffset, ktFunction.endOffset, IrDeclarationOrigin.DEFINED, functionDescriptor)
@@ -23,6 +23,7 @@ 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 FUNCTION_BODY_SLOT = -1 const val FUNCTION_BODY_SLOT = -1
const val ANONYMOUS_INITIALIZER_BODY_SLOT = -1
const val MODULE_SLOT = 0 const val MODULE_SLOT = 0
const val INITIALIZER_SLOT = 0 const val INITIALIZER_SLOT = 0
const val IF_CONDITION_SLOT = 0 const val IF_CONDITION_SLOT = 0
@@ -0,0 +1,68 @@
/*
* Copyright 2010-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.ir.declarations
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.ir.*
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
interface IrAnonymousInitializer : IrDeclaration {
override val descriptor: ClassDescriptor // TODO special descriptor for anonymous initializer blocks
override val declarationKind: IrDeclarationKind
get() = IrDeclarationKind.ANONYMOUS_INITIALIZER
var body: IrBlockBody
}
class IrAnonymousInitializerImpl(
startOffset: Int,
endOffset: Int,
origin: IrDeclarationOrigin,
override val descriptor: ClassDescriptor
) : IrDeclarationBase(startOffset, endOffset, origin), IrAnonymousInitializer {
private var bodyImpl: IrBlockBody? = null
override var body: IrBlockBody
get() = bodyImpl!!
set(value) {
value.assertDetached()
bodyImpl?.detach()
bodyImpl = value
value.setTreeLocation(this, ANONYMOUS_INITIALIZER_BODY_SLOT)
}
override fun getChild(slot: Int): IrElement? =
when (slot) {
ANONYMOUS_INITIALIZER_BODY_SLOT -> body
else -> null
}
override fun replaceChild(slot: Int, newChild: IrElement) {
when (slot) {
ANONYMOUS_INITIALIZER_BODY_SLOT -> body = newChild.assertCast()
}
}
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitAnonymousInitializer(this, data)
}
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
body.accept(visitor, data)
}
}
@@ -29,10 +29,23 @@ interface IrClass : IrDeclaration {
override val descriptor: ClassDescriptor override val descriptor: ClassDescriptor
val members: List<IrDeclaration> val members: List<IrDeclaration>
var nestedInitializers: IrBody?
} }
fun IrClass.getInstanceInitializerMembers() =
members.filter {
when (it) {
is IrDelegate ->
true
is IrAnonymousInitializer ->
true
is IrSimpleProperty ->
it.valueInitializer != null
is IrDelegatedProperty ->
true
else -> false
}
}
class IrClassImpl( class IrClassImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
@@ -47,41 +60,21 @@ class IrClassImpl(
members.add(member) members.add(member)
} }
override var nestedInitializers: IrBody? = null
set(value) {
value?.assertDetached()
field?.detach()
field = value
value?.setTreeLocation(this, NESTED_INITIALIZERS_SLOT)
}
override fun getChild(slot: Int): IrElement? = override fun getChild(slot: Int): IrElement? =
when (slot) { members.getOrNull(slot)
NESTED_INITIALIZERS_SLOT -> nestedInitializers
else -> members.getOrNull(slot)
}
override fun replaceChild(slot: Int, newChild: IrElement) { override fun replaceChild(slot: Int, newChild: IrElement) {
when (slot) { newChild.assertDetached()
NESTED_INITIALIZERS_SLOT -> members.getOrNull(slot)?.detach() ?: throwNoSuchSlot(slot)
nestedInitializers = newChild.assertCast() members[slot] = newChild.assertCast()
else -> { newChild.setTreeLocation(this, slot)
newChild.assertDetached()
members.getOrNull(slot)?.detach() ?: throwNoSuchSlot(slot)
members[slot] = newChild.assertCast()
newChild.setTreeLocation(this, slot)
}
}
} }
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitClass(this, data) visitor.visitClass(this, data)
override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) { override fun <D> acceptChildren(visitor: IrElementVisitor<Unit, D>, data: D) {
nestedInitializers?.accept(visitor, data)
members.forEach { it.accept(visitor, data) } members.forEach { it.accept(visitor, data) }
} }
} }
@@ -39,6 +39,7 @@ enum class IrDeclarationKind {
CLASS, CLASS,
TYPEALIAS, TYPEALIAS,
ENUM_ENTRY, ENUM_ENTRY,
ANONYMOUS_INITIALIZER,
DUMMY; DUMMY;
} }
@@ -20,16 +20,16 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
interface IrNestedInitializersCall : IrExpression { interface IrInstanceInitializerCall : IrExpression {
val classDescriptor: ClassDescriptor val classDescriptor: ClassDescriptor
} }
class IrNestedInitializersCallImpl( class IrInstanceInitializerCallImpl(
startOffset: Int, startOffset: Int,
endOffset: Int, endOffset: Int,
override val classDescriptor: ClassDescriptor override val classDescriptor: ClassDescriptor
) : IrTerminalExpressionBase(startOffset, endOffset, classDescriptor.builtIns.unitType), IrNestedInitializersCall { ) : IrTerminalExpressionBase(startOffset, endOffset, classDescriptor.builtIns.unitType), IrInstanceInitializerCall {
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R { override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitNestedInitializersCall(this, data) return visitor.visitInstanceInitializerCall(this, data)
} }
} }
@@ -60,15 +60,6 @@ class DumpIrTreeVisitor(out: Appendable): IrElementVisitor<Unit, String> {
} }
} }
override fun visitClass(declaration: IrClass, data: String) {
declaration.dumpLabeledElementWith(data) {
declaration.nestedInitializers?.accept(this, "nestedInitializers")
declaration.members.forEach {
it.accept(this, "")
}
}
}
override fun visitEnumEntry(declaration: IrEnumEntry, data: String) { override fun visitEnumEntry(declaration: IrEnumEntry, data: String) {
declaration.dumpLabeledElementWith(data) { declaration.dumpLabeledElementWith(data) {
declaration.initializerExpression.accept(this, "init") declaration.initializerExpression.accept(this, "init")
@@ -69,6 +69,9 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
override fun visitEnumEntry(declaration: IrEnumEntry, data: Nothing?): String = override fun visitEnumEntry(declaration: IrEnumEntry, data: Nothing?): String =
"ENUM_ENTRY ${declaration.descriptor.render()}" "ENUM_ENTRY ${declaration.descriptor.render()}"
override fun visitAnonymousInitializer(declaration: IrAnonymousInitializer, data: Nothing?): String =
"ANONYMOUS_INITIALIZER ${declaration.descriptor.name}"
override fun visitExpressionBody(body: IrExpressionBody, data: Nothing?): String = override fun visitExpressionBody(body: IrExpressionBody, data: Nothing?): String =
"EXPRESSION_BODY" "EXPRESSION_BODY"
@@ -119,8 +122,8 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
else enumEntryDescriptor.name else enumEntryDescriptor.name
} }
override fun visitNestedInitializersCall(expression: IrNestedInitializersCall, data: Nothing?): String = override fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: Nothing?): String =
"NESTED_INITIALIZERS_CALL classDescriptor=${expression.classDescriptor.name}" "INSTANCE_INITIALIZER_CALL classDescriptor=${expression.classDescriptor.name}"
override fun visitGetVariable(expression: IrGetVariable, data: Nothing?): String = override fun visitGetVariable(expression: IrGetVariable, data: Nothing?): String =
"GET_VAR ${expression.descriptor.name} type=${expression.type.render()} operator=${expression.operator}" "GET_VAR ${expression.descriptor.name} type=${expression.type.render()} operator=${expression.operator}"
@@ -39,6 +39,7 @@ interface IrElementVisitor<out R, in D> {
fun visitVariable(declaration: IrVariable, data: D) = visitDeclaration(declaration, data) fun visitVariable(declaration: IrVariable, data: D) = visitDeclaration(declaration, data)
fun visitDelegate(declaration: IrDelegate, data: D) = visitDeclaration(declaration, data) fun visitDelegate(declaration: IrDelegate, data: D) = visitDeclaration(declaration, data)
fun visitEnumEntry(declaration: IrEnumEntry, data: D) = visitDeclaration(declaration, data) fun visitEnumEntry(declaration: IrEnumEntry, data: D) = visitDeclaration(declaration, data)
fun visitAnonymousInitializer(declaration: IrAnonymousInitializer, data: D) = visitDeclaration(declaration, data)
fun visitBody(body: IrBody, data: D) = visitElement(body, data) fun visitBody(body: IrBody, data: D) = visitElement(body, data)
fun visitExpressionBody(body: IrExpressionBody, data: D) = visitBody(body, data) fun visitExpressionBody(body: IrExpressionBody, data: D) = visitBody(body, data)
@@ -71,7 +72,7 @@ interface IrElementVisitor<out R, in D> {
fun visitCallableReference(expression: IrCallableReference, data: D) = visitDeclarationReference(expression, data) fun visitCallableReference(expression: IrCallableReference, data: D) = visitDeclarationReference(expression, data)
fun visitClassReference(expression: IrClassReference, data: D) = visitDeclarationReference(expression, data) fun visitClassReference(expression: IrClassReference, data: D) = visitDeclarationReference(expression, data)
fun visitNestedInitializersCall(expression: IrNestedInitializersCall, data: D) = visitExpression(expression, data) fun visitInstanceInitializerCall(expression: IrInstanceInitializerCall, data: D) = visitExpression(expression, data)
fun visitTypeOperator(expression: IrTypeOperatorCall, data: D) = visitExpression(expression, data) fun visitTypeOperator(expression: IrTypeOperatorCall, data: D) = visitExpression(expression, data)
@@ -6,6 +6,7 @@ FILE /argumentReorderingInDelegatingConstructorCall.kt
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER 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 GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
INSTANCE_INITIALIZER_CALL classDescriptor=Base
PROPERTY public final val x: kotlin.Int PROPERTY public final val x: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
@@ -23,8 +24,8 @@ FILE /argumentReorderingInDelegatingConstructorCall.kt
CALL .<init> type=Base operator=SUPER_CONSTRUCTOR_CALL CALL .<init> type=Base operator=SUPER_CONSTRUCTOR_CALL
x: GET_VAR tmp1_x type=kotlin.Int operator=null x: GET_VAR tmp1_x type=kotlin.Int operator=null
y: GET_VAR tmp0_y type=kotlin.Int operator=null y: GET_VAR tmp0_y type=kotlin.Int operator=null
INSTANCE_INITIALIZER_CALL classDescriptor=Test1
CLASS CLASS Test2 CLASS CLASS Test2
nestedInitializers: BLOCK_BODY
CONSTRUCTOR public constructor Test2(/*0*/ xx: kotlin.Int, /*1*/ yy: kotlin.Int) CONSTRUCTOR public constructor Test2(/*0*/ xx: kotlin.Int, /*1*/ yy: kotlin.Int)
BLOCK_BODY BLOCK_BODY
BLOCK type=Base operator=ARGUMENTS_REORDERING_FOR_CALL BLOCK type=Base operator=ARGUMENTS_REORDERING_FOR_CALL
@@ -36,7 +37,7 @@ FILE /argumentReorderingInDelegatingConstructorCall.kt
DELEGATING_CONSTRUCTOR_CALL Base DELEGATING_CONSTRUCTOR_CALL Base
x: GET_VAR tmp1_x type=kotlin.Int operator=null x: GET_VAR tmp1_x type=kotlin.Int operator=null
y: GET_VAR tmp0_y type=kotlin.Int operator=null y: GET_VAR tmp0_y type=kotlin.Int operator=null
NESTED_INITIALIZERS_CALL classDescriptor=Test2 INSTANCE_INITIALIZER_CALL classDescriptor=Test2
CONSTRUCTOR public constructor Test2(/*0*/ xxx: kotlin.Int, /*1*/ yyy: kotlin.Int, /*2*/ a: kotlin.Any) CONSTRUCTOR public constructor Test2(/*0*/ xxx: kotlin.Int, /*1*/ yyy: kotlin.Int, /*2*/ a: kotlin.Any)
BLOCK_BODY BLOCK_BODY
BLOCK type=Test2 operator=ARGUMENTS_REORDERING_FOR_CALL BLOCK type=Test2 operator=ARGUMENTS_REORDERING_FOR_CALL
+3 -2
View File
@@ -8,8 +8,7 @@ FILE /classMembers.kt
GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER 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 GET_VAR z type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
SET_BACKING_FIELD property type=kotlin.Unit operator=null INSTANCE_INITIALIZER_CALL classDescriptor=C
CONST Int type=kotlin.Int value='0'
PROPERTY public final val y: kotlin.Int PROPERTY public final val y: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
@@ -52,6 +51,7 @@ FILE /classMembers.kt
CLASS CLASS NestedClass CLASS CLASS NestedClass
CONSTRUCTOR public constructor NestedClass() CONSTRUCTOR public constructor NestedClass()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=NestedClass
FUN public final fun function(): kotlin.Unit FUN public final fun function(): kotlin.Unit
BLOCK_BODY BLOCK_BODY
CALL .println type=kotlin.Unit operator=null CALL .println type=kotlin.Unit operator=null
@@ -70,3 +70,4 @@ FILE /classMembers.kt
CLASS OBJECT Companion CLASS OBJECT Companion
CONSTRUCTOR private constructor Companion() CONSTRUCTOR private constructor Companion()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=Companion
+4
View File
@@ -2,17 +2,21 @@ FILE /classes.kt
CLASS CLASS TestClass CLASS CLASS TestClass
CONSTRUCTOR public constructor TestClass() CONSTRUCTOR public constructor TestClass()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=TestClass
CLASS INTERFACE TestInterface CLASS INTERFACE TestInterface
CLASS OBJECT TestObject CLASS OBJECT TestObject
CONSTRUCTOR private constructor TestObject() CONSTRUCTOR private constructor TestObject()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=TestObject
CLASS ANNOTATION_CLASS TestAnnotationClass CLASS ANNOTATION_CLASS TestAnnotationClass
CONSTRUCTOR public constructor TestAnnotationClass() CONSTRUCTOR public constructor TestAnnotationClass()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=TestAnnotationClass
CLASS ENUM_CLASS TestEnumClass CLASS ENUM_CLASS TestEnumClass
CONSTRUCTOR private constructor TestEnumClass() CONSTRUCTOR private constructor TestEnumClass()
BLOCK_BODY BLOCK_BODY
ENUM_CONSTRUCTOR_CALL Enum super ENUM_CONSTRUCTOR_CALL Enum super
INSTANCE_INITIALIZER_CALL classDescriptor=TestEnumClass
FUN public final /*synthesized*/ fun values(): kotlin.Array<TestEnumClass> FUN public final /*synthesized*/ fun values(): kotlin.Array<TestEnumClass>
SYNTHETIC_BODY kind=ENUM_VALUES SYNTHETIC_BODY kind=ENUM_VALUES
FUN public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): TestEnumClass FUN public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): TestEnumClass
@@ -2,12 +2,16 @@ FILE /companionObject.kt
CLASS CLASS Test1 CLASS CLASS Test1
CONSTRUCTOR public constructor Test1() CONSTRUCTOR public constructor Test1()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=Test1
CLASS OBJECT Companion CLASS OBJECT Companion
CONSTRUCTOR private constructor Companion() CONSTRUCTOR private constructor Companion()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=Companion
CLASS CLASS Test2 CLASS CLASS Test2
CONSTRUCTOR public constructor Test2() CONSTRUCTOR public constructor Test2()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=Test2
CLASS OBJECT Named CLASS OBJECT Named
CONSTRUCTOR private constructor Named() CONSTRUCTOR private constructor Named()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=Named
+1
View File
@@ -8,6 +8,7 @@ FILE /dataClasses.kt
GET_VAR y type=kotlin.String operator=INITIALIZE_PROPERTY_FROM_PARAMETER 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 GET_VAR z type=kotlin.Any operator=INITIALIZE_PROPERTY_FROM_PARAMETER
INSTANCE_INITIALIZER_CALL classDescriptor=Test1
PROPERTY public final val x: kotlin.Int PROPERTY public final val x: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
@@ -2,16 +2,16 @@ FILE /delegatingConstructorCallsInSecondaryConstructors.kt
CLASS CLASS Base CLASS CLASS Base
CONSTRUCTOR public constructor Base() CONSTRUCTOR public constructor Base()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=Base
CLASS CLASS Test CLASS CLASS Test
nestedInitializers: BLOCK_BODY
CONSTRUCTOR public constructor Test() CONSTRUCTOR public constructor Test()
BLOCK_BODY BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL Base DELEGATING_CONSTRUCTOR_CALL Base
NESTED_INITIALIZERS_CALL classDescriptor=Test INSTANCE_INITIALIZER_CALL classDescriptor=Test
CONSTRUCTOR public constructor Test(/*0*/ xx: kotlin.Int) CONSTRUCTOR public constructor Test(/*0*/ xx: kotlin.Int)
BLOCK_BODY BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL Base DELEGATING_CONSTRUCTOR_CALL Base
NESTED_INITIALIZERS_CALL classDescriptor=Test INSTANCE_INITIALIZER_CALL classDescriptor=Test
CONSTRUCTOR public constructor Test(/*0*/ xx: kotlin.Short) CONSTRUCTOR public constructor Test(/*0*/ xx: kotlin.Short)
BLOCK_BODY BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL Test DELEGATING_CONSTRUCTOR_CALL Test
+12 -4
View File
@@ -3,6 +3,7 @@ FILE /enum.kt
CONSTRUCTOR private constructor TestEnum1() CONSTRUCTOR private constructor TestEnum1()
BLOCK_BODY BLOCK_BODY
ENUM_CONSTRUCTOR_CALL Enum super ENUM_CONSTRUCTOR_CALL Enum super
INSTANCE_INITIALIZER_CALL classDescriptor=TestEnum1
ENUM_ENTRY enum entry TEST1 ENUM_ENTRY enum entry TEST1
init: ENUM_CONSTRUCTOR_CALL TestEnum1 TEST1 init: ENUM_CONSTRUCTOR_CALL TestEnum1 TEST1
ENUM_ENTRY enum entry TEST2 ENUM_ENTRY enum entry TEST2
@@ -17,6 +18,7 @@ FILE /enum.kt
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 GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
INSTANCE_INITIALIZER_CALL classDescriptor=TestEnum2
PROPERTY public final val x: kotlin.Int PROPERTY public final val x: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
@@ -37,12 +39,14 @@ FILE /enum.kt
CONSTRUCTOR private constructor TestEnum3() CONSTRUCTOR private constructor TestEnum3()
BLOCK_BODY BLOCK_BODY
ENUM_CONSTRUCTOR_CALL Enum super ENUM_CONSTRUCTOR_CALL Enum super
INSTANCE_INITIALIZER_CALL classDescriptor=TestEnum3
ENUM_ENTRY enum entry TEST ENUM_ENTRY enum entry TEST
init: ENUM_CONSTRUCTOR_CALL TEST TEST init: ENUM_CONSTRUCTOR_CALL TEST TEST
class: CLASS ENUM_ENTRY TEST class: CLASS ENUM_ENTRY TEST
CONSTRUCTOR private constructor TEST() CONSTRUCTOR private constructor TEST()
BLOCK_BODY BLOCK_BODY
ENUM_CONSTRUCTOR_CALL TestEnum3 super ENUM_CONSTRUCTOR_CALL TestEnum3 super
INSTANCE_INITIALIZER_CALL classDescriptor=TEST
FUN public open override /*1*/ fun foo(): kotlin.Unit FUN public open override /*1*/ fun foo(): kotlin.Unit
BLOCK_BODY BLOCK_BODY
CALL .println type=kotlin.Unit operator=null CALL .println type=kotlin.Unit operator=null
@@ -58,6 +62,7 @@ FILE /enum.kt
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 GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
INSTANCE_INITIALIZER_CALL classDescriptor=TestEnum4
PROPERTY public final val x: kotlin.Int PROPERTY public final val x: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
@@ -68,6 +73,7 @@ FILE /enum.kt
BLOCK_BODY BLOCK_BODY
ENUM_CONSTRUCTOR_CALL TestEnum4 super ENUM_CONSTRUCTOR_CALL TestEnum4 super
x: CONST Int type=kotlin.Int value='1' x: CONST Int type=kotlin.Int value='1'
INSTANCE_INITIALIZER_CALL classDescriptor=TEST1
FUN public open override /*1*/ fun foo(): kotlin.Unit FUN public open override /*1*/ fun foo(): kotlin.Unit
BLOCK_BODY BLOCK_BODY
CALL .println type=kotlin.Unit operator=null CALL .println type=kotlin.Unit operator=null
@@ -79,11 +85,13 @@ FILE /enum.kt
BLOCK_BODY BLOCK_BODY
ENUM_CONSTRUCTOR_CALL TestEnum4 super ENUM_CONSTRUCTOR_CALL TestEnum4 super
x: CONST Int type=kotlin.Int value='2' x: CONST Int type=kotlin.Int value='2'
BLOCK type=kotlin.Unit operator=null INSTANCE_INITIALIZER_CALL classDescriptor=TEST2
SET_BACKING_FIELD z type=kotlin.Unit operator=null
CALL .<get-x> type=kotlin.Int operator=GET_PROPERTY
$this: THIS enum entry TEST2 type=TestEnum4.TEST2
PROPERTY public final val z: kotlin.Int PROPERTY public final val z: kotlin.Int
ANONYMOUS_INITIALIZER TEST2
BLOCK_BODY
SET_BACKING_FIELD z type=kotlin.Unit operator=null
CALL .<get-x> type=kotlin.Int operator=GET_PROPERTY
$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
CALL .println type=kotlin.Unit operator=null CALL .println type=kotlin.Unit operator=null
+31
View File
@@ -0,0 +1,31 @@
class Test1 {
init {
println()
}
}
class Test2(val x: Int) {
init {
println()
}
}
class Test3 {
init {
println()
}
constructor()
}
class Test4 {
init {
println("1")
}
constructor()
init {
println("2")
}
}
+41
View File
@@ -0,0 +1,41 @@
FILE /initBlock.kt
CLASS CLASS Test1
CONSTRUCTOR public constructor Test1()
BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=Test1
ANONYMOUS_INITIALIZER Test1
BLOCK_BODY
CALL .println type=kotlin.Unit operator=null
CLASS CLASS Test2
CONSTRUCTOR public constructor Test2(/*0*/ x: kotlin.Int)
BLOCK_BODY
SET_BACKING_FIELD x type=kotlin.Unit operator=null
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
INSTANCE_INITIALIZER_CALL classDescriptor=Test2
PROPERTY public final val x: kotlin.Int
EXPRESSION_BODY
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
ANONYMOUS_INITIALIZER Test2
BLOCK_BODY
CALL .println type=kotlin.Unit operator=null
CLASS CLASS Test3
ANONYMOUS_INITIALIZER Test3
BLOCK_BODY
CALL .println type=kotlin.Unit operator=null
CONSTRUCTOR public constructor Test3()
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL Any
INSTANCE_INITIALIZER_CALL classDescriptor=Test3
CLASS CLASS Test4
ANONYMOUS_INITIALIZER Test4
BLOCK_BODY
CALL .println type=kotlin.Unit operator=null
message: CONST String type=kotlin.String value='1'
CONSTRUCTOR public constructor Test4()
BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL Any
INSTANCE_INITIALIZER_CALL classDescriptor=Test4
ANONYMOUS_INITIALIZER Test4
BLOCK_BODY
CALL .println type=kotlin.Unit operator=null
message: CONST String type=kotlin.String value='2'
+7 -5
View File
@@ -4,21 +4,23 @@ FILE /initVal.kt
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=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
INSTANCE_INITIALIZER_CALL classDescriptor=TestInitValFromParameter
PROPERTY public final val x: kotlin.Int PROPERTY public final val x: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
CLASS CLASS TestInitValInClass CLASS CLASS TestInitValInClass
CONSTRUCTOR public constructor TestInitValInClass() CONSTRUCTOR public constructor TestInitValInClass()
BLOCK_BODY BLOCK_BODY
SET_BACKING_FIELD x type=kotlin.Unit operator=null INSTANCE_INITIALIZER_CALL classDescriptor=TestInitValInClass
CONST Int type=kotlin.Int value='0'
PROPERTY public final val x: kotlin.Int = 0 PROPERTY public final val x: kotlin.Int = 0
EXPRESSION_BODY EXPRESSION_BODY
CONST Int type=kotlin.Int value='0' CONST Int type=kotlin.Int value='0'
CLASS CLASS TestInitValInInitBlock CLASS CLASS TestInitValInInitBlock
CONSTRUCTOR public constructor TestInitValInInitBlock() CONSTRUCTOR public constructor TestInitValInInitBlock()
BLOCK_BODY BLOCK_BODY
BLOCK type=kotlin.Unit operator=null INSTANCE_INITIALIZER_CALL classDescriptor=TestInitValInInitBlock
SET_BACKING_FIELD x type=kotlin.Unit operator=null
CONST Int type=kotlin.Int value='0'
PROPERTY public final val x: kotlin.Int PROPERTY public final val x: kotlin.Int
ANONYMOUS_INITIALIZER TestInitValInInitBlock
BLOCK_BODY
SET_BACKING_FIELD x type=kotlin.Unit operator=null
CONST Int type=kotlin.Int value='0'
+16 -16
View File
@@ -4,30 +4,31 @@ FILE /initVar.kt
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=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
INSTANCE_INITIALIZER_CALL classDescriptor=TestInitVarFromParameter
PROPERTY public final var x: kotlin.Int PROPERTY public final var x: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
CLASS CLASS TestInitVarInClass CLASS CLASS TestInitVarInClass
CONSTRUCTOR public constructor TestInitVarInClass() CONSTRUCTOR public constructor TestInitVarInClass()
BLOCK_BODY BLOCK_BODY
SET_BACKING_FIELD x type=kotlin.Unit operator=null INSTANCE_INITIALIZER_CALL classDescriptor=TestInitVarInClass
CONST Int type=kotlin.Int value='0'
PROPERTY public final var x: kotlin.Int PROPERTY public final var x: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
CONST Int type=kotlin.Int value='0' CONST Int type=kotlin.Int value='0'
CLASS CLASS TestInitVarInInitBlock CLASS CLASS TestInitVarInInitBlock
CONSTRUCTOR public constructor TestInitVarInInitBlock() CONSTRUCTOR public constructor TestInitVarInInitBlock()
BLOCK_BODY BLOCK_BODY
BLOCK type=kotlin.Unit operator=null INSTANCE_INITIALIZER_CALL classDescriptor=TestInitVarInInitBlock
CALL .<set-x> type=kotlin.Unit operator=EQ
$this: THIS public final class TestInitVarInInitBlock type=TestInitVarInInitBlock
<set-?>: CONST Int type=kotlin.Int value='0'
PROPERTY public final var x: kotlin.Int PROPERTY public final var x: kotlin.Int
ANONYMOUS_INITIALIZER TestInitVarInInitBlock
BLOCK_BODY
CALL .<set-x> type=kotlin.Unit operator=EQ
$this: THIS public final class TestInitVarInInitBlock type=TestInitVarInInitBlock
<set-?>: CONST Int type=kotlin.Int value='0'
CLASS CLASS TestInitVarWithCustomSetter CLASS CLASS TestInitVarWithCustomSetter
CONSTRUCTOR public constructor TestInitVarWithCustomSetter() CONSTRUCTOR public constructor TestInitVarWithCustomSetter()
BLOCK_BODY BLOCK_BODY
SET_BACKING_FIELD x type=kotlin.Unit operator=null INSTANCE_INITIALIZER_CALL classDescriptor=TestInitVarWithCustomSetter
CONST Int type=kotlin.Int value='0'
PROPERTY public final var x: kotlin.Int PROPERTY public final var x: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
CONST Int type=kotlin.Int value='0' CONST Int type=kotlin.Int value='0'
@@ -36,22 +37,21 @@ FILE /initVar.kt
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 GET_VAR value type=kotlin.Int operator=null
CLASS CLASS TestInitVarWithCustomSetterWithExplicitCtor CLASS CLASS TestInitVarWithCustomSetterWithExplicitCtor
nestedInitializers: BLOCK_BODY
BLOCK type=kotlin.Unit operator=null
CALL .<set-x> type=kotlin.Unit operator=EQ
$this: THIS public final class TestInitVarWithCustomSetterWithExplicitCtor type=TestInitVarWithCustomSetterWithExplicitCtor
value: CONST Int type=kotlin.Int value='0'
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 GET_VAR value type=kotlin.Int operator=null
ANONYMOUS_INITIALIZER TestInitVarWithCustomSetterWithExplicitCtor
BLOCK_BODY
CALL .<set-x> type=kotlin.Unit operator=EQ
$this: THIS public final class TestInitVarWithCustomSetterWithExplicitCtor type=TestInitVarWithCustomSetterWithExplicitCtor
value: CONST Int type=kotlin.Int value='0'
CONSTRUCTOR public constructor TestInitVarWithCustomSetterWithExplicitCtor() CONSTRUCTOR public constructor TestInitVarWithCustomSetterWithExplicitCtor()
BLOCK_BODY BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL Any DELEGATING_CONSTRUCTOR_CALL Any
NESTED_INITIALIZERS_CALL classDescriptor=TestInitVarWithCustomSetterWithExplicitCtor INSTANCE_INITIALIZER_CALL classDescriptor=TestInitVarWithCustomSetterWithExplicitCtor
CLASS CLASS TestInitVarWithCustomSetterInCtor CLASS CLASS TestInitVarWithCustomSetterInCtor
nestedInitializers: BLOCK_BODY
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
@@ -60,7 +60,7 @@ FILE /initVar.kt
CONSTRUCTOR public constructor TestInitVarWithCustomSetterInCtor() CONSTRUCTOR public constructor TestInitVarWithCustomSetterInCtor()
BLOCK_BODY BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL Any DELEGATING_CONSTRUCTOR_CALL Any
NESTED_INITIALIZERS_CALL classDescriptor=TestInitVarWithCustomSetterInCtor INSTANCE_INITIALIZER_CALL classDescriptor=TestInitVarWithCustomSetterInCtor
CALL .<set-x> type=kotlin.Unit operator=EQ CALL .<set-x> type=kotlin.Unit operator=EQ
$this: THIS public final class TestInitVarWithCustomSetterInCtor type=TestInitVarWithCustomSetterInCtor $this: THIS public final class TestInitVarWithCustomSetterInCtor type=TestInitVarWithCustomSetterInCtor
value: CONST Int type=kotlin.Int value='42' value: CONST Int type=kotlin.Int value='42'
+1
View File
@@ -4,6 +4,7 @@ FILE /localClasses.kt
CLASS CLASS LocalClass CLASS CLASS LocalClass
CONSTRUCTOR public constructor LocalClass() CONSTRUCTOR public constructor LocalClass()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=LocalClass
FUN public final fun foo(): kotlin.Unit FUN public final fun foo(): kotlin.Unit
BLOCK_BODY BLOCK_BODY
CALL .foo type=kotlin.Unit operator=null CALL .foo type=kotlin.Unit operator=null
@@ -7,6 +7,7 @@ FILE /objectLiteralExpressions.kt
CLASS CLASS <no name provided> CLASS CLASS <no name provided>
CONSTRUCTOR public constructor <no name provided>() CONSTRUCTOR public constructor <no name provided>()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=<no name provided>
CALL .<init> type=test1.<no name provided> operator=OBJECT_LITERAL CALL .<init> type=test1.<no name provided> operator=OBJECT_LITERAL
PROPERTY public val test2: IFoo PROPERTY public val test2: IFoo
EXPRESSION_BODY EXPRESSION_BODY
@@ -14,6 +15,7 @@ FILE /objectLiteralExpressions.kt
CLASS CLASS <no name provided> CLASS CLASS <no name provided>
CONSTRUCTOR public constructor <no name provided>() CONSTRUCTOR public constructor <no name provided>()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=<no name provided>
FUN public open override /*1*/ fun foo(): kotlin.Unit FUN public open override /*1*/ fun foo(): kotlin.Unit
BLOCK_BODY BLOCK_BODY
CALL .println type=kotlin.Unit operator=null CALL .println type=kotlin.Unit operator=null
@@ -22,9 +24,11 @@ FILE /objectLiteralExpressions.kt
CLASS CLASS Outer CLASS CLASS Outer
CONSTRUCTOR public constructor Outer() CONSTRUCTOR public constructor Outer()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=Outer
CLASS CLASS Inner CLASS CLASS Inner
CONSTRUCTOR public constructor Inner() CONSTRUCTOR public constructor Inner()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=Inner
FUN public final fun test3(): Outer.Inner FUN public final fun test3(): Outer.Inner
BLOCK_BODY BLOCK_BODY
RETURN type=kotlin.Nothing from=test3 RETURN type=kotlin.Nothing from=test3
@@ -34,6 +38,7 @@ FILE /objectLiteralExpressions.kt
BLOCK_BODY BLOCK_BODY
CALL .<init> type=Outer.Inner operator=SUPER_CONSTRUCTOR_CALL CALL .<init> type=Outer.Inner operator=SUPER_CONSTRUCTOR_CALL
$this: THIS public final class Outer type=Outer $this: THIS public final class Outer type=Outer
INSTANCE_INITIALIZER_CALL classDescriptor=<no name provided>
FUN public open override /*1*/ fun foo(): kotlin.Unit FUN public open override /*1*/ fun foo(): kotlin.Unit
BLOCK_BODY BLOCK_BODY
CALL .println type=kotlin.Unit operator=null CALL .println type=kotlin.Unit operator=null
@@ -48,6 +53,7 @@ FILE /objectLiteralExpressions.kt
BLOCK_BODY BLOCK_BODY
CALL .<init> type=Outer.Inner operator=SUPER_CONSTRUCTOR_CALL CALL .<init> type=Outer.Inner operator=SUPER_CONSTRUCTOR_CALL
$this: $RECEIVER of: test4 type=Outer $this: $RECEIVER of: test4 type=Outer
INSTANCE_INITIALIZER_CALL classDescriptor=<no name provided>
FUN public open override /*1*/ fun foo(): kotlin.Unit FUN public open override /*1*/ fun foo(): kotlin.Unit
BLOCK_BODY BLOCK_BODY
CALL .println type=kotlin.Unit operator=null CALL .println type=kotlin.Unit operator=null
+7 -5
View File
@@ -6,6 +6,7 @@ FILE /primaryConstructor.kt
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER 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 GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
INSTANCE_INITIALIZER_CALL classDescriptor=Test1
PROPERTY public final val x: kotlin.Int PROPERTY public final val x: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
@@ -17,8 +18,7 @@ FILE /primaryConstructor.kt
BLOCK_BODY BLOCK_BODY
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 GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
SET_BACKING_FIELD x type=kotlin.Unit operator=null INSTANCE_INITIALIZER_CALL classDescriptor=Test2
GET_VAR x type=kotlin.Int operator=null
PROPERTY public final val y: kotlin.Int PROPERTY public final val y: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
@@ -30,10 +30,12 @@ FILE /primaryConstructor.kt
BLOCK_BODY BLOCK_BODY
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 GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
BLOCK type=kotlin.Unit operator=null INSTANCE_INITIALIZER_CALL classDescriptor=Test3
SET_BACKING_FIELD x type=kotlin.Unit operator=null
GET_VAR x type=kotlin.Int operator=null
PROPERTY public final val y: kotlin.Int PROPERTY public final val y: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
PROPERTY public final val x: kotlin.Int PROPERTY public final val x: kotlin.Int
ANONYMOUS_INITIALIZER Test3
BLOCK_BODY
SET_BACKING_FIELD x type=kotlin.Unit operator=null
GET_VAR x type=kotlin.Int operator=null
@@ -2,14 +2,17 @@ FILE /primaryConstructorWithSuperConstructorCall.kt
CLASS CLASS Base CLASS CLASS Base
CONSTRUCTOR public constructor Base() CONSTRUCTOR public constructor Base()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=Base
CLASS CLASS TestImplicitPrimaryConstructor CLASS CLASS TestImplicitPrimaryConstructor
CONSTRUCTOR public constructor TestImplicitPrimaryConstructor() CONSTRUCTOR public constructor TestImplicitPrimaryConstructor()
BLOCK_BODY BLOCK_BODY
CALL .<init> type=Base operator=SUPER_CONSTRUCTOR_CALL CALL .<init> type=Base operator=SUPER_CONSTRUCTOR_CALL
INSTANCE_INITIALIZER_CALL classDescriptor=TestImplicitPrimaryConstructor
CLASS CLASS TestExplicitPrimaryConstructor CLASS CLASS TestExplicitPrimaryConstructor
CONSTRUCTOR public constructor TestExplicitPrimaryConstructor() CONSTRUCTOR public constructor TestExplicitPrimaryConstructor()
BLOCK_BODY BLOCK_BODY
CALL .<init> type=Base operator=SUPER_CONSTRUCTOR_CALL CALL .<init> type=Base operator=SUPER_CONSTRUCTOR_CALL
INSTANCE_INITIALIZER_CALL classDescriptor=TestExplicitPrimaryConstructor
CLASS CLASS TestWithDelegatingConstructor CLASS CLASS TestWithDelegatingConstructor
CONSTRUCTOR public constructor TestWithDelegatingConstructor(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.Int) CONSTRUCTOR public constructor TestWithDelegatingConstructor(/*0*/ x: kotlin.Int, /*1*/ y: kotlin.Int)
BLOCK_BODY BLOCK_BODY
@@ -18,6 +21,7 @@ FILE /primaryConstructorWithSuperConstructorCall.kt
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER 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 GET_VAR y type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
INSTANCE_INITIALIZER_CALL classDescriptor=TestWithDelegatingConstructor
PROPERTY public final val x: kotlin.Int PROPERTY public final val x: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
@@ -18,6 +18,7 @@ FILE /qualifiedSuperCalls.kt
CLASS CLASS CBoth CLASS CLASS CBoth
CONSTRUCTOR public constructor CBoth() CONSTRUCTOR public constructor CBoth()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=CBoth
FUN public open override /*2*/ fun foo(): kotlin.Unit FUN public open override /*2*/ fun foo(): kotlin.Unit
BLOCK_BODY BLOCK_BODY
CALL .foo superQualifier=ILeft type=kotlin.Unit operator=null CALL .foo superQualifier=ILeft type=kotlin.Unit operator=null
@@ -2,24 +2,22 @@ FILE /secondaryConstructorWithInitializersFromClassBody.kt
CLASS CLASS Base CLASS CLASS Base
CONSTRUCTOR public constructor Base() CONSTRUCTOR public constructor Base()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=Base
CLASS CLASS TestProperty CLASS CLASS TestProperty
nestedInitializers: BLOCK_BODY
SET_BACKING_FIELD x type=kotlin.Unit operator=null
CONST Int type=kotlin.Int value='0'
PROPERTY public final val x: kotlin.Int = 0 PROPERTY public final val x: kotlin.Int = 0
EXPRESSION_BODY EXPRESSION_BODY
CONST Int type=kotlin.Int value='0' CONST Int type=kotlin.Int value='0'
CONSTRUCTOR public constructor TestProperty() CONSTRUCTOR public constructor TestProperty()
BLOCK_BODY BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL Base DELEGATING_CONSTRUCTOR_CALL Base
NESTED_INITIALIZERS_CALL classDescriptor=TestProperty INSTANCE_INITIALIZER_CALL classDescriptor=TestProperty
CLASS CLASS TestInitBlock CLASS CLASS TestInitBlock
nestedInitializers: BLOCK_BODY PROPERTY public final val x: kotlin.Int
BLOCK type=kotlin.Unit operator=null ANONYMOUS_INITIALIZER TestInitBlock
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' CONST Int type=kotlin.Int value='0'
PROPERTY public final val x: kotlin.Int
CONSTRUCTOR public constructor TestInitBlock() CONSTRUCTOR public constructor TestInitBlock()
BLOCK_BODY BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL Base DELEGATING_CONSTRUCTOR_CALL Base
NESTED_INITIALIZERS_CALL classDescriptor=TestInitBlock INSTANCE_INITIALIZER_CALL classDescriptor=TestInitBlock
@@ -1,6 +1,5 @@
FILE /secondaryConstructors.kt FILE /secondaryConstructors.kt
CLASS CLASS C CLASS CLASS C
nestedInitializers: BLOCK_BODY
CONSTRUCTOR public constructor C() CONSTRUCTOR public constructor C()
BLOCK_BODY BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL C DELEGATING_CONSTRUCTOR_CALL C
@@ -8,4 +7,4 @@ FILE /secondaryConstructors.kt
CONSTRUCTOR public constructor C(/*0*/ x: kotlin.Int) CONSTRUCTOR public constructor C(/*0*/ x: kotlin.Int)
BLOCK_BODY BLOCK_BODY
DELEGATING_CONSTRUCTOR_CALL Any DELEGATING_CONSTRUCTOR_CALL Any
NESTED_INITIALIZERS_CALL classDescriptor=C INSTANCE_INITIALIZER_CALL classDescriptor=C
+2 -2
View File
@@ -2,8 +2,7 @@ FILE /superCalls.kt
CLASS CLASS Base CLASS CLASS Base
CONSTRUCTOR public constructor Base() CONSTRUCTOR public constructor Base()
BLOCK_BODY BLOCK_BODY
SET_BACKING_FIELD bar type=kotlin.Unit operator=null INSTANCE_INITIALIZER_CALL classDescriptor=Base
CONST String type=kotlin.String value=''
FUN public open fun foo(): kotlin.Unit FUN public open fun foo(): kotlin.Unit
BLOCK_BODY BLOCK_BODY
PROPERTY public open val bar: kotlin.String = "" PROPERTY public open val bar: kotlin.String = ""
@@ -13,6 +12,7 @@ FILE /superCalls.kt
CONSTRUCTOR public constructor Derived() CONSTRUCTOR public constructor Derived()
BLOCK_BODY BLOCK_BODY
CALL .<init> type=Base operator=SUPER_CONSTRUCTOR_CALL CALL .<init> type=Base operator=SUPER_CONSTRUCTOR_CALL
INSTANCE_INITIALIZER_CALL classDescriptor=Derived
FUN public open override /*1*/ fun foo(): kotlin.Unit FUN public open override /*1*/ fun foo(): kotlin.Unit
BLOCK_BODY BLOCK_BODY
CALL .foo superQualifier=Base type=kotlin.Unit operator=null CALL .foo superQualifier=Base type=kotlin.Unit operator=null
@@ -21,6 +21,7 @@ FILE /delegatedProperties.kt
BLOCK_BODY BLOCK_BODY
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 GET_VAR map type=kotlin.collections.MutableMap<kotlin.String, kotlin.Any> operator=INITIALIZE_PROPERTY_FROM_PARAMETER
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
GET_VAR map type=kotlin.collections.MutableMap<kotlin.String, kotlin.Any> operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR map type=kotlin.collections.MutableMap<kotlin.String, kotlin.Any> operator=INITIALIZE_PROPERTY_FROM_PARAMETER
@@ -16,6 +16,7 @@ FILE /arrayAugmentedAssignment1.kt
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.IntArray operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR x type=kotlin.IntArray operator=INITIALIZE_PROPERTY_FROM_PARAMETER
INSTANCE_INITIALIZER_CALL classDescriptor=C
PROPERTY public final val x: kotlin.IntArray PROPERTY public final val x: kotlin.IntArray
EXPRESSION_BODY EXPRESSION_BODY
GET_VAR x type=kotlin.IntArray operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR x type=kotlin.IntArray operator=INITIALIZE_PROPERTY_FROM_PARAMETER
@@ -4,6 +4,7 @@ FILE /assignments.kt
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=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
INSTANCE_INITIALIZER_CALL classDescriptor=Ref
PROPERTY public final var x: kotlin.Int PROPERTY public final var x: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR x type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
@@ -2,6 +2,7 @@ FILE /augmentedAssignment2.kt
CLASS CLASS A CLASS CLASS A
CONSTRUCTOR public constructor A() CONSTRUCTOR public constructor A()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=A
FUN public operator fun A.plusAssign(/*0*/ s: kotlin.String): kotlin.Unit FUN public operator fun A.plusAssign(/*0*/ s: kotlin.String): kotlin.Unit
BLOCK_BODY BLOCK_BODY
FUN public operator fun A.minusAssign(/*0*/ s: kotlin.String): kotlin.Unit FUN public operator fun A.minusAssign(/*0*/ s: kotlin.String): kotlin.Unit
@@ -2,6 +2,7 @@ FILE /chainOfSafeCalls.kt
CLASS CLASS C CLASS CLASS C
CONSTRUCTOR public constructor C() CONSTRUCTOR public constructor C()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=C
FUN public final fun foo(): C FUN public final fun foo(): C
BLOCK_BODY BLOCK_BODY
RETURN type=kotlin.Nothing from=foo RETURN type=kotlin.Nothing from=foo
@@ -2,11 +2,13 @@ FILE /forWithImplicitReceivers.kt
CLASS OBJECT FiveTimes CLASS OBJECT FiveTimes
CONSTRUCTOR private constructor FiveTimes() CONSTRUCTOR private constructor FiveTimes()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=FiveTimes
CLASS CLASS IntCell CLASS CLASS IntCell
CONSTRUCTOR public constructor IntCell(/*0*/ value: kotlin.Int) CONSTRUCTOR public constructor IntCell(/*0*/ value: kotlin.Int)
BLOCK_BODY BLOCK_BODY
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 GET_VAR value type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
INSTANCE_INITIALIZER_CALL classDescriptor=IntCell
PROPERTY public final var value: kotlin.Int PROPERTY public final var value: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
GET_VAR value type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR value type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
@@ -23,19 +23,7 @@ FILE /jvmStaticFieldReference.kt
CLASS CLASS TestClass CLASS CLASS TestClass
CONSTRUCTOR public constructor TestClass() CONSTRUCTOR public constructor TestClass()
BLOCK_BODY BLOCK_BODY
SET_BACKING_FIELD test type=kotlin.Unit operator=null INSTANCE_INITIALIZER_CALL classDescriptor=TestClass
WHEN type=kotlin.Int operator=WHEN
else: BLOCK type=kotlin.Int operator=null
CALL .println type=kotlin.Unit operator=null
$this: TYPE_OP operator=IMPLICIT_NOTNULL typeOperand=java.io.PrintStream
CALL .<get-out> type=java.io.PrintStream! operator=GET_PROPERTY
p0: CONST String type=kotlin.String value='TestClass/test'
CONST Int type=kotlin.Int value='42'
BLOCK type=kotlin.Unit operator=null
CALL .println type=kotlin.Unit operator=null
$this: TYPE_OP operator=IMPLICIT_NOTNULL typeOperand=java.io.PrintStream
CALL .<get-out> type=java.io.PrintStream! operator=GET_PROPERTY
p0: CONST String type=kotlin.String value='TestClass/init'
PROPERTY public final val test: kotlin.Int PROPERTY public final val test: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
WHEN type=kotlin.Int operator=WHEN WHEN type=kotlin.Int operator=WHEN
@@ -45,3 +33,9 @@ FILE /jvmStaticFieldReference.kt
CALL .<get-out> type=java.io.PrintStream! operator=GET_PROPERTY CALL .<get-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
BLOCK_BODY
CALL .println type=kotlin.Unit operator=null
$this: TYPE_OP operator=IMPLICIT_NOTNULL typeOperand=java.io.PrintStream
CALL .<get-out> type=java.io.PrintStream! operator=GET_PROPERTY
p0: CONST String type=kotlin.String value='TestClass/init'
@@ -2,6 +2,7 @@ FILE /safeCallWithIncrementDecrement.kt
CLASS CLASS C CLASS CLASS C
CONSTRUCTOR public constructor C() CONSTRUCTOR public constructor C()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=C
PROPERTY public var test.C?.p: kotlin.Int PROPERTY public var test.C?.p: kotlin.Int
PROPERTY_GETTER public fun test.C?.<get-p>(): kotlin.Int PROPERTY_GETTER public fun test.C?.<get-p>(): kotlin.Int
BLOCK_BODY BLOCK_BODY
+1
View File
@@ -4,6 +4,7 @@ FILE /safeCalls.kt
BLOCK_BODY BLOCK_BODY
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 GET_VAR value type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
INSTANCE_INITIALIZER_CALL classDescriptor=Ref
PROPERTY public final var value: kotlin.Int PROPERTY public final var value: kotlin.Int
EXPRESSION_BODY EXPRESSION_BODY
GET_VAR value type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER GET_VAR value type=kotlin.Int operator=INITIALIZE_PROPERTY_FROM_PARAMETER
+4
View File
@@ -3,6 +3,7 @@ FILE /values.kt
CONSTRUCTOR private constructor Enum() CONSTRUCTOR private constructor Enum()
BLOCK_BODY BLOCK_BODY
ENUM_CONSTRUCTOR_CALL Enum super ENUM_CONSTRUCTOR_CALL Enum super
INSTANCE_INITIALIZER_CALL classDescriptor=Enum
ENUM_ENTRY enum entry A ENUM_ENTRY enum entry A
init: ENUM_CONSTRUCTOR_CALL Enum A init: ENUM_CONSTRUCTOR_CALL Enum A
FUN public final /*synthesized*/ fun values(): kotlin.Array<Enum> FUN public final /*synthesized*/ fun values(): kotlin.Array<Enum>
@@ -12,15 +13,18 @@ FILE /values.kt
CLASS OBJECT A CLASS OBJECT A
CONSTRUCTOR private constructor A() CONSTRUCTOR private constructor A()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=A
PROPERTY public val a: kotlin.Int = 0 PROPERTY public val a: kotlin.Int = 0
EXPRESSION_BODY EXPRESSION_BODY
CONST Int type=kotlin.Int value='0' CONST Int type=kotlin.Int value='0'
CLASS CLASS Z CLASS CLASS Z
CONSTRUCTOR public constructor Z() CONSTRUCTOR public constructor Z()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=Z
CLASS OBJECT Companion CLASS OBJECT Companion
CONSTRUCTOR private constructor Companion() CONSTRUCTOR private constructor Companion()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=Companion
FUN public fun test1(): Enum FUN public fun test1(): Enum
BLOCK_BODY BLOCK_BODY
RETURN type=kotlin.Nothing from=test1 RETURN type=kotlin.Nothing from=test1
+1
View File
@@ -2,6 +2,7 @@ FILE /when.kt
CLASS OBJECT A CLASS OBJECT A
CONSTRUCTOR private constructor A() CONSTRUCTOR private constructor A()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=A
FUN public fun testWithSubject(/*0*/ x: kotlin.Any?): kotlin.String FUN public fun testWithSubject(/*0*/ x: kotlin.Any?): kotlin.String
BLOCK_BODY BLOCK_BODY
RETURN type=kotlin.Nothing from=testWithSubject RETURN type=kotlin.Nothing from=testWithSubject
@@ -2,9 +2,11 @@ FILE /multipleImplicitReceivers.kt
CLASS OBJECT A CLASS OBJECT A
CONSTRUCTOR private constructor A() CONSTRUCTOR private constructor A()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=A
CLASS OBJECT B CLASS OBJECT B
CONSTRUCTOR private constructor B() CONSTRUCTOR private constructor B()
BLOCK_BODY BLOCK_BODY
INSTANCE_INITIALIZER_CALL classDescriptor=B
CLASS INTERFACE IFoo CLASS INTERFACE IFoo
PROPERTY public open val A.foo: B PROPERTY public open val A.foo: B
PROPERTY_GETTER public open fun A.<get-foo>(): B PROPERTY_GETTER public open fun A.<get-foo>(): B
@@ -85,6 +85,12 @@ public class IrTextTestCaseGenerated extends AbstractIrTextTestCase {
doTest(fileName); doTest(fileName);
} }
@TestMetadata("initBlock.kt")
public void testInitBlock() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/classes/initBlock.kt");
doTest(fileName);
}
@TestMetadata("initVal.kt") @TestMetadata("initVal.kt")
public void testInitVal() throws Exception { public void testInitVal() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/classes/initVal.kt"); String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/ir/irText/classes/initVal.kt");