[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.
|
||||
*/
|
||||
|
||||
// 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
|
||||
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
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.IrElementVisitor
|
||||
|
||||
// todo: autogenerate
|
||||
/**
|
||||
* A non-leaf IR tree element.
|
||||
*
|
||||
* Generated from: [org.jetbrains.kotlin.ir.generator.IrTree.memberAccessExpression]
|
||||
*/
|
||||
abstract class IrMemberAccessExpression<S : IrSymbol> : IrDeclarationReference() {
|
||||
var dispatchReceiver: IrExpression? = null
|
||||
@@ -42,9 +47,7 @@ abstract class IrMemberAccessExpression<S : IrSymbol> : IrDeclarationReference()
|
||||
override fun <D> transformChildren(transformer: IrElementTransformer<D>, data: D) {
|
||||
dispatchReceiver = dispatchReceiver?.transform(transformer, data)
|
||||
extensionReceiver = extensionReceiver?.transform(transformer, data)
|
||||
valueArguments.forEachIndexed { i, irExpression ->
|
||||
valueArguments[i] = irExpression?.transform(transformer, data)
|
||||
}
|
||||
valueArguments.transformInPlace(transformer, data)
|
||||
}
|
||||
|
||||
fun getValueArgument(index: Int): IrExpression? {
|
||||
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.ir.generator
|
||||
|
||||
import com.squareup.kotlinpoet.FunSpec
|
||||
import com.squareup.kotlinpoet.PropertySpec
|
||||
import com.squareup.kotlinpoet.KModifier
|
||||
import com.squareup.kotlinpoet.MemberName
|
||||
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.ElementConfig
|
||||
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.Var
|
||||
import org.jetbrains.kotlin.ir.generator.config.SimpleFieldConfig
|
||||
@@ -592,7 +594,6 @@ object IrTree : AbstractTreeBuilder() {
|
||||
//diff: no accept
|
||||
}
|
||||
val memberAccessExpression: ElementConfig by element(Expression) {
|
||||
suppressPrint = true //todo: generate this element too
|
||||
visitorParent = declarationReference
|
||||
visitorName = "memberAccess"
|
||||
transformerReturnType = rootElement
|
||||
@@ -601,15 +602,69 @@ object IrTree : AbstractTreeBuilder() {
|
||||
parent(declarationReference)
|
||||
|
||||
+field("dispatchReceiver", expression, nullable = true, isChild = true) {
|
||||
baseDefaultValue = code("this")
|
||||
baseDefaultValue = code("null")
|
||||
}
|
||||
+field("extensionReceiver", expression, nullable = true, isChild = true) {
|
||||
baseDefaultValue = code("this")
|
||||
baseDefaultValue = code("null")
|
||||
}
|
||||
+symbol(s)
|
||||
+field("origin", statementOriginType, nullable = true)
|
||||
+field("typeArgumentsCount", int)
|
||||
+field("typeArgumentsByIndex", type<Array<*>>(irTypeType.copy(nullable = true)))
|
||||
+field("origin", statementOriginType, nullable = true, mutable = false)
|
||||
+listField("valueArguments", expression.copy(nullable = true), mutability = Array, isChild = 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) {
|
||||
visitorParent = memberAccessExpression
|
||||
|
||||
Reference in New Issue
Block a user