Skip to content

Commit

Permalink
[IR] Autogenerate IrMemberAccessExpression
Browse files Browse the repository at this point in the history
  • Loading branch information
mcpiroman authored and udalov committed Apr 12, 2023
1 parent fd48720 commit c7befb5
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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? {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down

0 comments on commit c7befb5

Please sign in to comment.