Rename attributeOwnerIdBeforeInline to originalBeforeInline

This commit is contained in:
Ivan Kylchik
2023-02-13 14:16:54 +01:00
committed by Space Team
parent d148231bce
commit 4fc95624a0
20 changed files with 35 additions and 35 deletions
@@ -91,7 +91,7 @@ abstract class AbstractFir2IrLazyFunction<F : FirCallableDeclaration>(
override var correspondingPropertySymbol: IrPropertySymbol? = null
override var attributeOwnerId: IrAttributeContainer = this
override var attributeOwnerIdBeforeInline: IrAttributeContainer? = null
override var originalBeforeInline: IrAttributeContainer? = null
override var metadata: MetadataSource?
get() = null
@@ -72,7 +72,7 @@ class Fir2IrLazyClass(
get() = this
set(_) = mutationNotSupported()
override var attributeOwnerIdBeforeInline: IrAttributeContainer?
override var originalBeforeInline: IrAttributeContainer?
get() = null
set(_) {
error("Mutating Fir2Ir lazy elements is not possible")
@@ -235,5 +235,5 @@ class Fir2IrLazyProperty(
get() = fir.containerSource
override var attributeOwnerId: IrAttributeContainer = this
override var attributeOwnerIdBeforeInline: IrAttributeContainer? = null
override var originalBeforeInline: IrAttributeContainer? = null
}
@@ -142,7 +142,7 @@ abstract class InventNamesForLocalClasses(
}
override fun visitFunctionReference(expression: IrFunctionReference, data: Data) {
if (data.processingInlinedFunction && expression.attributeOwnerIdBeforeInline == null) {
if (data.processingInlinedFunction && expression.originalBeforeInline == null) {
// skip IrFunctionReference from `singleArgumentInlineFunction`
return
}
@@ -141,7 +141,7 @@ class FunctionInlining(
acceptVoid(object : IrElementVisitorVoid {
private fun IrAttributeContainer.setUpCorrectAttributeOwner() {
if (this.attributeOwnerId == this) return
this.attributeOwnerIdBeforeInline = this.attributeOwnerId
this.originalBeforeInline = this.attributeOwnerId
this.attributeOwnerId = this
}
@@ -372,7 +372,7 @@ private class AddContinuationLowering(context: JvmBackendContext) : SuspendLower
private fun IrSimpleFunction.isCapturingCrossinline(): Boolean {
var capturesCrossinline = false
(this.attributeOwnerIdBeforeInline ?: this).acceptVoid(object : IrElementVisitorVoid {
(this.originalBeforeInline ?: this).acceptVoid(object : IrElementVisitorVoid {
override fun visitElement(element: IrElement) {
element.acceptChildrenVoid(this)
}
@@ -63,7 +63,7 @@ open class JvmInventNamesForLocalClasses(
// TODO try to use only one "InventNames"
class JvmInventNamesForInlinedAnonymousObjects(context: JvmBackendContext) : JvmInventNamesForLocalClasses(context, true) {
override fun putLocalClassName(declaration: IrAttributeContainer, localClassName: String) {
if (declaration.attributeOwnerIdBeforeInline == null) return
if (declaration.originalBeforeInline == null) return
context.putLocalClassType(declaration, Type.getObjectType(localClassName))
}
}
@@ -101,7 +101,7 @@ class MarkNecessaryInlinedClassesAsRegeneratedLowering(val context: JvmBackendCo
}
if (!processingBeforeInlineDeclaration) {
processingBeforeInlineDeclaration = true
declaration.attributeOwnerIdBeforeInline?.acceptChildrenVoid(this) // check if we need to save THIS declaration
declaration.originalBeforeInline?.acceptChildrenVoid(this) // check if we need to save THIS declaration
processingBeforeInlineDeclaration = false
}
declaration.acceptChildrenVoid(this) // check if we need to save INNER declarations
@@ -211,7 +211,7 @@ class MarkNecessaryInlinedClassesAsRegeneratedLowering(val context: JvmBackendCo
this.acceptChildrenVoid(object : IrElementVisitorVoid {
private fun checkAndSetUpCorrectAttributes(element: IrAttributeContainer) {
when {
element !in mustBeRegenerated && element.attributeOwnerIdBeforeInline != null -> element.setUpOriginalAttributes()
element !in mustBeRegenerated && element.originalBeforeInline != null -> element.setUpOriginalAttributes()
else -> element.acceptChildrenVoid(this)
}
}
@@ -237,12 +237,12 @@ class MarkNecessaryInlinedClassesAsRegeneratedLowering(val context: JvmBackendCo
private fun IrElement.setUpOriginalAttributes() {
acceptVoid(object : IrElementVisitorVoid {
override fun visitElement(element: IrElement) {
if (element is IrAttributeContainer && element.attributeOwnerIdBeforeInline != null) {
// Basically we need to generate SEQUENCE of `element.attributeOwnerIdBeforeInline` and find the original one.
// But we process nested inlined functions first, so `element.attributeOwnerIdBeforeInline` will be processed already.
if (element is IrAttributeContainer && element.originalBeforeInline != null) {
// Basically we need to generate SEQUENCE of `element.originalBeforeInline` and find the original one.
// But we process nested inlined functions first, so `element.originalBeforeInline` will be processed already.
// This mean that when we start to precess current container, all inner ones in SEQUENCE will already be processed.
element.attributeOwnerId = element.attributeOwnerIdBeforeInline!!.attributeOwnerId
element.attributeOwnerIdBeforeInline = null
element.attributeOwnerId = element.originalBeforeInline!!.attributeOwnerId
element.originalBeforeInline = null
}
element.acceptChildrenVoid(this)
}
@@ -35,7 +35,7 @@ internal val removeDuplicatedInlinedLocalClasses = makeIrFilePhase(
// There are three types of inlined local classes:
// 1. MUST BE regenerated according to set of rules in AnonymousObjectTransformationInfo.
// They all have `attributeOwnerIdBeforeInline != null`.
// They all have `originalBeforeInline != null`.
// 2. MUST NOT BE regenerated and MUST BE CREATED only once because they are copied from call site.
// This lambda will not exist after inline, so we copy declaration into new temporary inline call `singleArgumentInlineFunction`.
// 3. MUST NOT BE created at all because will be created at callee site.
@@ -132,10 +132,10 @@ class RemoveDuplicatedInlinedLocalClassesLowering(val context: JvmBackendContext
}
// Basically we want to remove all anonymous classes after inline. Exceptions are:
// 1. classes that must be regenerated (declaration.attributeOwnerIdBeforeInline != null)
// 1. classes that must be regenerated (declaration.originalBeforeInline != null)
// 2. classes that are originally declared on call site or are default lambdas (data == true)
override fun visitClass(declaration: IrClass, data: Boolean): IrStatement {
if (!insideInlineBlock || declaration.attributeOwnerIdBeforeInline != null || !data) {
if (!insideInlineBlock || declaration.originalBeforeInline != null || !data) {
return super.visitClass(declaration, data)
}
@@ -92,7 +92,7 @@ fun IrFunction.isReifiable(): Boolean =
typeParameters.any { it.isReified }
private fun IrAttributeContainer.getDeclarationBeforeInline(): IrDeclaration? {
val original = this.attributeOwnerIdBeforeInline ?: return null
val original = this.originalBeforeInline ?: return null
return when (original) {
is IrClass -> return original
is IrFunctionExpression -> original.function
@@ -102,8 +102,8 @@ private fun IrAttributeContainer.getDeclarationBeforeInline(): IrDeclaration? {
}
fun IrAttributeContainer.getAttributeOwnerBeforeInline(): IrAttributeContainer? {
if (this.attributeOwnerIdBeforeInline == null) return null
return generateSequence(this) { it.attributeOwnerIdBeforeInline }.last()
if (this.originalBeforeInline == null) return null
return generateSequence(this) { it.originalBeforeInline }.last()
}
val IrDeclaration.fileParentBeforeInline: IrFile
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.ir.IrElement
* useful, for example, to keep track of generated names for anonymous declarations.
* @property attributeOwnerId original element before copying. Always satisfies the following
* invariant: this.attributeOwnerId == this.attributeOwnerId.attributeOwnerId.
* @property attributeOwnerIdBeforeInline original element before inlining. Useful only with IR
* @property originalBeforeInline original element before inlining. Useful only with IR
* inliner. null if the element wasn't inlined. Unlike [attributeOwnerId], doesn't have the
* idempotence invariant and can contain a chain of declarations.
* @sample org.jetbrains.kotlin.ir.generator.IrTree.attributeContainer
@@ -23,5 +23,5 @@ import org.jetbrains.kotlin.ir.IrElement
interface IrAttributeContainer : IrElement {
var attributeOwnerId: IrAttributeContainer
var attributeOwnerIdBeforeInline: IrAttributeContainer?
var originalBeforeInline: IrAttributeContainer?
}
@@ -22,7 +22,7 @@ abstract class IrExpression : IrElementBase(), IrStatement, IrVarargElement,
IrAttributeContainer {
override var attributeOwnerId: IrAttributeContainer = this
override var attributeOwnerIdBeforeInline: IrAttributeContainer? = null
override var originalBeforeInline: IrAttributeContainer? = null
abstract var type: IrType
@@ -17,7 +17,7 @@ import java.io.File
fun <D : IrAttributeContainer> D.copyAttributes(other: IrAttributeContainer?): D = apply {
if (other != null) {
attributeOwnerId = other.attributeOwnerId
attributeOwnerIdBeforeInline = other.attributeOwnerIdBeforeInline
originalBeforeInline = other.originalBeforeInline
}
}
@@ -57,7 +57,7 @@ open class IrClassImpl(
override var metadata: MetadataSource? = null
override var attributeOwnerId: IrAttributeContainer = this
override var attributeOwnerIdBeforeInline: IrAttributeContainer? = null
override var originalBeforeInline: IrAttributeContainer? = null
override var sealedSubclasses: List<IrClassSymbol> = emptyList()
}
@@ -64,7 +64,7 @@ abstract class IrFunctionCommonImpl(
@Suppress("LeakingThis")
override var attributeOwnerId: IrAttributeContainer = this
override var attributeOwnerIdBeforeInline: IrAttributeContainer? = null
override var originalBeforeInline: IrAttributeContainer? = null
override var correspondingPropertySymbol: IrPropertySymbol? = null
}
@@ -45,7 +45,7 @@ abstract class IrPropertyCommonImpl(
override var metadata: MetadataSource? = null
override var attributeOwnerId: IrAttributeContainer = this
override var attributeOwnerIdBeforeInline: IrAttributeContainer? = null
override var originalBeforeInline: IrAttributeContainer? = null
}
class IrPropertyImpl(
@@ -108,7 +108,7 @@ class IrLazyClass(
}
override var attributeOwnerId: IrAttributeContainer = this
override var attributeOwnerIdBeforeInline: IrAttributeContainer? = null
override var originalBeforeInline: IrAttributeContainer? = null
val classProto: ProtoBuf.Class? get() = (descriptor as? DeserializedClassDescriptor)?.classProto
val nameResolver: NameResolver? get() = (descriptor as? DeserializedClassDescriptor)?.c?.nameResolver
@@ -104,9 +104,9 @@ class IrLazyFunction(
get() = this
set(_) = error("We should never need to change attributeOwnerId of external declarations.")
override var attributeOwnerIdBeforeInline: IrAttributeContainer?
override var originalBeforeInline: IrAttributeContainer?
get() = null
set(_) = error("We should never need to change attributeOwnerIdBeforeInline of external declarations.")
set(_) = error("We should never need to change originalBeforeInline of external declarations.")
override var correspondingPropertySymbol: IrPropertySymbol? = null
@@ -89,7 +89,7 @@ class IrLazyProperty(
get() = this
set(_) = error("We should never need to change attributeOwnerId of external declarations.")
override var attributeOwnerIdBeforeInline: IrAttributeContainer?
override var originalBeforeInline: IrAttributeContainer?
get() = this
set(_) = error("We should never need to change attributeOwnerIdBeforeInline of external declarations.")
set(_) = error("We should never need to change originalBeforeInline of external declarations.")
}
@@ -175,13 +175,13 @@ object IrTree : AbstractTreeBuilder() {
useful, for example, to keep track of generated names for anonymous declarations.
@property attributeOwnerId original element before copying. Always satisfies the following
invariant: `this.attributeOwnerId == this.attributeOwnerId.attributeOwnerId`.
@property attributeOwnerIdBeforeInline original element before inlining. Useful only with IR
@property originalBeforeInline original element before inlining. Useful only with IR
inliner. `null` if the element wasn't inlined. Unlike [attributeOwnerId], doesn't have the
idempotence invariant and can contain a chain of declarations.
""".trimIndent()
+field("attributeOwnerId", attributeContainer)
+field("attributeOwnerIdBeforeInline", attributeContainer, nullable = true) // null <=> this element wasn't inlined
+field("originalBeforeInline", attributeContainer, nullable = true) // null <=> this element wasn't inlined
}
val anonymousInitializer: ElementConfig by element(Declaration) {
visitorParent = declarationBase
@@ -507,7 +507,7 @@ object IrTree : AbstractTreeBuilder() {
+field("attributeOwnerId", attributeContainer) {
baseDefaultValue = code("this")
}
+field("attributeOwnerIdBeforeInline", attributeContainer, nullable = true) {
+field("originalBeforeInline", attributeContainer, nullable = true) {
baseDefaultValue = code("null")
}
+field("type", irTypeType)