Skip to content

Commit

Permalink
[IR] IrMemberAccessExpression - restore type/valueArguments as arrays
Browse files Browse the repository at this point in the history
  • Loading branch information
mcpiroman committed Mar 21, 2023
1 parent d460153 commit 3018aa7
Show file tree
Hide file tree
Showing 12 changed files with 43 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ abstract class IrMemberAccessExpression<S : IrSymbol> : IrDeclarationReference()

abstract var origin: IrStatementOrigin?

abstract val valueArguments: MutableList<IrExpression?>
abstract val valueArguments: Array<IrExpression?>

abstract val typeArguments: MutableList<IrType?>
abstract val typeArguments: Array<IrType?>

val valueArgumentsCount: Int
get() = valueArguments.size
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ class IrCallImpl(
override var origin: IrStatementOrigin? = null,
override var superQualifierSymbol: IrClassSymbol? = null
) : IrCall() {
override val typeArguments = MutableList<IrType?>(typeArgumentsCount) { null }
override val typeArguments = arrayOfNulls<IrType?>(typeArgumentsCount)

override val valueArguments = MutableList<IrExpression?>(valueArgumentsCount) { null }
override val valueArguments = arrayOfNulls<IrExpression?>(valueArgumentsCount)

override var contextReceiversCount = 0

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ class IrConstructorCallImpl(
override var origin: IrStatementOrigin? = null,
override var source: SourceElement = SourceElement.NO_SOURCE
) : IrConstructorCall() {
override val typeArguments = MutableList<IrType?>(typeArgumentsCount) { null }
override val typeArguments = arrayOfNulls<IrType?>(typeArgumentsCount)

override val valueArguments = MutableList<IrExpression?>(valueArgumentsCount) { null }
override val valueArguments = arrayOfNulls<IrExpression?>(valueArgumentsCount)

override var contextReceiversCount = 0

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ class IrDelegatingConstructorCallImpl(
) : IrDelegatingConstructorCall() {
override var origin: IrStatementOrigin? = null

override val typeArguments = MutableList<IrType?>(typeArgumentsCount) { null }
override val typeArguments = arrayOfNulls<IrType?>(typeArgumentsCount)

override val valueArguments = MutableList<IrExpression?>(valueArgumentsCount) { null }
override val valueArguments = arrayOfNulls<IrExpression?>(valueArgumentsCount)

override var contextReceiversCount = 0

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ class IrEnumConstructorCallImpl(
) : IrEnumConstructorCall() {
override var origin: IrStatementOrigin? = null

override val typeArguments = MutableList<IrType?>(typeArgumentsCount) { null }
override val typeArguments = arrayOfNulls<IrType?>(typeArgumentsCount)

override val valueArguments = MutableList<IrExpression?>(valueArgumentsCount) { null }
override val valueArguments = arrayOfNulls<IrExpression?>(valueArgumentsCount)

override var contextReceiversCount = 0

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ class IrFunctionReferenceImpl(
override var reflectionTarget: IrFunctionSymbol? = symbol,
override var origin: IrStatementOrigin? = null,
) : IrFunctionReference() {
override val typeArguments = MutableList<IrType?>(typeArgumentsCount) { null }
override val typeArguments = arrayOfNulls<IrType?>(typeArgumentsCount)

override val valueArguments = MutableList<IrExpression?>(valueArgumentsCount) { null }
override val valueArguments = arrayOfNulls<IrExpression?>(valueArgumentsCount)

companion object {
@ObsoleteDescriptorBasedAPI
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class IrLocalDelegatedPropertyReferenceImpl(
override var setter: IrSimpleFunctionSymbol?,
override var origin: IrStatementOrigin? = null,
) : IrLocalDelegatedPropertyReference() {
override val typeArguments = ArrayList<IrType?>(0)
override val typeArguments = emptyArray<IrType?>()

override val valueArguments = ArrayList<IrExpression?>(0)
override val valueArguments = emptyArray<IrExpression?>()
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class IrPropertyReferenceImpl(
override var setter: IrSimpleFunctionSymbol?,
override var origin: IrStatementOrigin? = null,
) : IrPropertyReference() {
override val typeArguments = MutableList<IrType?>(typeArgumentsCount) { null }
override val typeArguments = arrayOfNulls<IrType?>(typeArgumentsCount)

override val valueArguments = ArrayList<IrExpression?>(0)
override val valueArguments = emptyArray<IrExpression?>()
}
11 changes: 11 additions & 0 deletions compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/transform.kt
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,17 @@ fun <T : IrElement, D> MutableList<T?>.transformInPlace(transformer: IrElementTr
}
}

@JvmName("transformInPlaceNullable")
fun <T : IrElement, D> Array<T?>.transformInPlace(transformer: IrElementTransformer<D>, data: D) {
for (i in 0 until size) {
// Cast to IrElementBase to avoid casting to interface and invokeinterface, both of which are slow.
(get(i) as IrElementBase?)?.let {
@Suppress("UNCHECKED_CAST")
set(i, it.transform(transformer, data) as T)
}
}
}

/**
* Transforms a mutable list in place.
* Each element `it` is replaced with a result of `transformation(it)`,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,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 @@ -600,8 +601,8 @@ object IrTree : AbstractTreeBuilder() {
}
+symbol(s)
+field("origin", statementOriginType, nullable = true)
+listField("valueArguments", expression.copy(nullable = true), mutability = List, isChild = true)
+listField("typeArguments", irTypeType.copy(nullable = true), mutability = List)
+listField("valueArguments", expression.copy(nullable = true), mutability = Array, isChild = true)
+listField("typeArguments", irTypeType.copy(nullable = true), mutability = Array)

generationCallback = {
addFunction(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ class ListFieldConfig(
enum class Mutability {
Immutable,
Var,
List
List,
Array
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,17 @@ fun config2model(config: Config): Model {
fc.baseGetter
)
is ListFieldConfig -> {
val listType = if (fc.mutability == ListFieldConfig.Mutability.List) type(
"kotlin.collections",
"MutableList"
) else type("kotlin.collections", "List")
val listType = when (fc.mutability) {
ListFieldConfig.Mutability.List -> type(
"kotlin.collections",
"MutableList"
)
ListFieldConfig.Mutability.Array -> type(
"kotlin.",
"Array"
)
else -> type("kotlin.collections", "List")
}
ListField(
fc,
fc.name,
Expand Down

0 comments on commit 3018aa7

Please sign in to comment.