[IR] Autogenerate IrMemberAccessExpression
This commit is contained in:
committed by
Alexander Udalov
parent
9145cf7035
commit
9831a4b9ec
+8
-5
@@ -1,18 +1,23 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// This file was generated automatically. See compiler/ir/ir.tree/tree-generator/ReadMe.md.
|
||||||
|
// DO NOT MODIFY IT MANUALLY.
|
||||||
|
|
||||||
package org.jetbrains.kotlin.ir.expressions
|
package org.jetbrains.kotlin.ir.expressions
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
import org.jetbrains.kotlin.ir.util.transformInPlace
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
|
|
||||||
// todo: autogenerate
|
|
||||||
/**
|
/**
|
||||||
* A non-leaf IR tree element.
|
* A non-leaf IR tree element.
|
||||||
|
*
|
||||||
|
* Generated from: [org.jetbrains.kotlin.ir.generator.IrTree.memberAccessExpression]
|
||||||
*/
|
*/
|
||||||
abstract class IrMemberAccessExpression<S : IrSymbol> : IrDeclarationReference() {
|
abstract class IrMemberAccessExpression<S : IrSymbol> : IrDeclarationReference() {
|
||||||
var dispatchReceiver: IrExpression? = null
|
var dispatchReceiver: IrExpression? = null
|
||||||
@@ -42,9 +47,7 @@ abstract class IrMemberAccessExpression<S : IrSymbol> : IrDeclarationReference()
|
|||||||
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
|
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
|
||||||
dispatchReceiver = dispatchReceiver?.transform(transformer, data)
|
dispatchReceiver = dispatchReceiver?.transform(transformer, data)
|
||||||
extensionReceiver = extensionReceiver?.transform(transformer, data)
|
extensionReceiver = extensionReceiver?.transform(transformer, data)
|
||||||
valueArguments.forEachIndexed { i, irExpression ->
|
valueArguments.transformInPlace(transformer, data)
|
||||||
valueArguments[i] = irExpression?.transform(transformer, data)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getValueArgument(index: Int): IrExpression? {
|
fun getValueArgument(index: Int): IrExpression? {
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.ir.generator
|
package org.jetbrains.kotlin.ir.generator
|
||||||
|
|
||||||
import com.squareup.kotlinpoet.FunSpec
|
import com.squareup.kotlinpoet.FunSpec
|
||||||
|
import com.squareup.kotlinpoet.PropertySpec
|
||||||
import com.squareup.kotlinpoet.KModifier
|
import com.squareup.kotlinpoet.KModifier
|
||||||
import com.squareup.kotlinpoet.MemberName
|
import com.squareup.kotlinpoet.MemberName
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
@@ -15,6 +16,7 @@ import org.jetbrains.kotlin.descriptors.ValueClassRepresentation
|
|||||||
import org.jetbrains.kotlin.ir.generator.config.AbstractTreeBuilder
|
import org.jetbrains.kotlin.ir.generator.config.AbstractTreeBuilder
|
||||||
import org.jetbrains.kotlin.ir.generator.config.ElementConfig
|
import org.jetbrains.kotlin.ir.generator.config.ElementConfig
|
||||||
import org.jetbrains.kotlin.ir.generator.config.ElementConfig.Category.*
|
import org.jetbrains.kotlin.ir.generator.config.ElementConfig.Category.*
|
||||||
|
import org.jetbrains.kotlin.ir.generator.config.ListFieldConfig.Mutability.Array
|
||||||
import org.jetbrains.kotlin.ir.generator.config.ListFieldConfig.Mutability.List
|
import org.jetbrains.kotlin.ir.generator.config.ListFieldConfig.Mutability.List
|
||||||
import org.jetbrains.kotlin.ir.generator.config.ListFieldConfig.Mutability.Var
|
import org.jetbrains.kotlin.ir.generator.config.ListFieldConfig.Mutability.Var
|
||||||
import org.jetbrains.kotlin.ir.generator.config.SimpleFieldConfig
|
import org.jetbrains.kotlin.ir.generator.config.SimpleFieldConfig
|
||||||
@@ -592,7 +594,6 @@ object IrTree : AbstractTreeBuilder() {
|
|||||||
//diff: no accept
|
//diff: no accept
|
||||||
}
|
}
|
||||||
val memberAccessExpression: ElementConfig by element(Expression) {
|
val memberAccessExpression: ElementConfig by element(Expression) {
|
||||||
suppressPrint = true //todo: generate this element too
|
|
||||||
visitorParent = declarationReference
|
visitorParent = declarationReference
|
||||||
visitorName = "memberAccess"
|
visitorName = "memberAccess"
|
||||||
transformerReturnType = rootElement
|
transformerReturnType = rootElement
|
||||||
@@ -601,15 +602,69 @@ object IrTree : AbstractTreeBuilder() {
|
|||||||
parent(declarationReference)
|
parent(declarationReference)
|
||||||
|
|
||||||
+field("dispatchReceiver", expression, nullable = true, isChild = true) {
|
+field("dispatchReceiver", expression, nullable = true, isChild = true) {
|
||||||
baseDefaultValue = code("this")
|
baseDefaultValue = code("null")
|
||||||
}
|
}
|
||||||
+field("extensionReceiver", expression, nullable = true, isChild = true) {
|
+field("extensionReceiver", expression, nullable = true, isChild = true) {
|
||||||
baseDefaultValue = code("this")
|
baseDefaultValue = code("null")
|
||||||
}
|
}
|
||||||
+symbol(s)
|
+symbol(s)
|
||||||
+field("origin", statementOriginType, nullable = true)
|
+field("origin", statementOriginType, nullable = true, mutable = false)
|
||||||
+field("typeArgumentsCount", int)
|
+listField("valueArguments", expression.copy(nullable = true), mutability = Array, isChild = true) {
|
||||||
+field("typeArgumentsByIndex", type<Array<*>>(irTypeType.copy(nullable = true)))
|
generationCallback = {
|
||||||
|
addModifiers(KModifier.PROTECTED)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+listField("typeArguments", irTypeType.copy(nullable = true), mutability = Array) {
|
||||||
|
generationCallback = {
|
||||||
|
addModifiers(KModifier.PROTECTED)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val checkArgumentSlotAccess = MemberName("org.jetbrains.kotlin.ir.expressions", "checkArgumentSlotAccess", true)
|
||||||
|
generationCallback = {
|
||||||
|
addFunction(
|
||||||
|
FunSpec.builder("getValueArgument")
|
||||||
|
.addParameter("index", int.toPoet())
|
||||||
|
.returns(expression.toPoet().copy(nullable = true))
|
||||||
|
.addCode("%M(\"value\", index, valueArguments.size)\n", checkArgumentSlotAccess)
|
||||||
|
.addCode("return valueArguments[index]")
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
addFunction(
|
||||||
|
FunSpec.builder("getTypeArgument")
|
||||||
|
.addParameter("index", int.toPoet())
|
||||||
|
.returns(irTypeType.toPoet().copy(nullable = true))
|
||||||
|
.addCode("%M(\"type\", index, typeArguments.size)\n", checkArgumentSlotAccess)
|
||||||
|
.addCode("return typeArguments[index]")
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
addFunction(
|
||||||
|
FunSpec.builder("putValueArgument")
|
||||||
|
.addParameter("index", int.toPoet())
|
||||||
|
.addParameter("valueArgument", expression.toPoet().copy(nullable = true))
|
||||||
|
.addCode("%M(\"value\", index, valueArguments.size)\n", checkArgumentSlotAccess)
|
||||||
|
.addCode("valueArguments[index] = valueArgument")
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
addFunction(
|
||||||
|
FunSpec.builder("putTypeArgument")
|
||||||
|
.addParameter("index", int.toPoet())
|
||||||
|
.addParameter("type", irTypeType.toPoet().copy(nullable = true))
|
||||||
|
.addCode("%M(\"type\", index, typeArguments.size)\n", checkArgumentSlotAccess)
|
||||||
|
.addCode("typeArguments[index] = type")
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
addProperty(
|
||||||
|
PropertySpec.builder("valueArgumentsCount", int.toPoet())
|
||||||
|
.getter(FunSpec.getterBuilder().addCode("return valueArguments.size").build())
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
addProperty(
|
||||||
|
PropertySpec.builder("typeArgumentsCount", int.toPoet())
|
||||||
|
.getter(FunSpec.getterBuilder().addCode("return typeArguments.size").build())
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
val functionAccessExpression: ElementConfig by element(Expression) {
|
val functionAccessExpression: ElementConfig by element(Expression) {
|
||||||
visitorParent = memberAccessExpression
|
visitorParent = memberAccessExpression
|
||||||
|
|||||||
Reference in New Issue
Block a user