[IR] Fixed a bunch of wrong parents
This commit is contained in:
+1
-1
@@ -287,7 +287,7 @@ internal class EnumClassLowering(val context: Context) : ClassLoweringPass {
|
|||||||
putValueArgument(0, irInt(it.index))
|
putValueArgument(0, irInt(it.index))
|
||||||
}
|
}
|
||||||
val initializer = it.value.initializerExpression!!
|
val initializer = it.value.initializerExpression!!
|
||||||
initializer.patchDeclarationParents(constructor)
|
initializer.setDeclarationsParent(constructor)
|
||||||
when {
|
when {
|
||||||
initializer is IrConstructorCall -> +initInstanceCall(instance, initializer)
|
initializer is IrConstructorCall -> +initInstanceCall(instance, initializer)
|
||||||
|
|
||||||
|
|||||||
+5
-6
@@ -24,10 +24,7 @@ import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
|||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrConstructorSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrConstructorSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.dump
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.ir.util.parentAsClass
|
|
||||||
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
|
||||||
import org.jetbrains.kotlin.ir.util.transformFlat
|
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -103,7 +100,7 @@ internal class EnumConstructorsLowering(val context: Context) : ClassLoweringPas
|
|||||||
val defaultValue = parameter.defaultValue ?: continue
|
val defaultValue = parameter.defaultValue ?: continue
|
||||||
defaultValue.transformChildrenVoid(ParameterMapper(enumConstructor, loweredEnumConstructor, true))
|
defaultValue.transformChildrenVoid(ParameterMapper(enumConstructor, loweredEnumConstructor, true))
|
||||||
loweredEnumConstructor.valueParameters[parameter.loweredIndex].defaultValue = defaultValue
|
loweredEnumConstructor.valueParameters[parameter.loweredIndex].defaultValue = defaultValue
|
||||||
defaultValue.patchDeclarationParents(loweredEnumConstructor)
|
defaultValue.setDeclarationsParent(loweredEnumConstructor)
|
||||||
}
|
}
|
||||||
|
|
||||||
return loweredEnumConstructor
|
return loweredEnumConstructor
|
||||||
@@ -129,7 +126,9 @@ internal class EnumConstructorsLowering(val context: Context) : ClassLoweringPas
|
|||||||
).apply {
|
).apply {
|
||||||
it.bind(this)
|
it.bind(this)
|
||||||
parent = constructor.parent
|
parent = constructor.parent
|
||||||
body = constructor.body!! // Will be transformed later.
|
val body = constructor.body!!
|
||||||
|
this.body = body // Will be transformed later.
|
||||||
|
body.setDeclarationsParent(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
-3
@@ -14,10 +14,12 @@ import org.jetbrains.kotlin.descriptors.MemberDescriptor
|
|||||||
import org.jetbrains.kotlin.ir.IrElement
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.*
|
import org.jetbrains.kotlin.ir.symbols.*
|
||||||
import org.jetbrains.kotlin.ir.util.DeepCopyIrTreeWithSymbols
|
import org.jetbrains.kotlin.ir.util.DeepCopyIrTreeWithSymbols
|
||||||
import org.jetbrains.kotlin.ir.util.DeepCopySymbolRemapper
|
import org.jetbrains.kotlin.ir.util.DeepCopySymbolRemapper
|
||||||
import org.jetbrains.kotlin.ir.util.DeepCopyTypeRemapper
|
import org.jetbrains.kotlin.ir.util.DeepCopyTypeRemapper
|
||||||
|
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||||
@@ -77,9 +79,12 @@ internal class ExpectToActualDefaultValueCopier(private val irModule: IrModuleFr
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
function.findActualForExpected().valueParameters[index].defaultValue = defaultValue.also {
|
val actualForExpected = function.findActualForExpected()
|
||||||
it.expression = it.expression.remapExpectValueSymbols()
|
actualForExpected.valueParameters[index].defaultValue =
|
||||||
}
|
IrExpressionBodyImpl(
|
||||||
|
defaultValue.startOffset, defaultValue.endOffset,
|
||||||
|
defaultValue.expression.remapExpectValueSymbols().patchDeclarationParents(actualForExpected)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-10
@@ -5,12 +5,9 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.backend.konan.lower
|
package org.jetbrains.kotlin.backend.konan.lower
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext
|
import org.jetbrains.kotlin.backend.common.*
|
||||||
import org.jetbrains.kotlin.backend.common.ScopeWithIr
|
|
||||||
import org.jetbrains.kotlin.backend.common.ir.createTemporaryVariableWithWrappedDescriptor
|
import org.jetbrains.kotlin.backend.common.ir.createTemporaryVariableWithWrappedDescriptor
|
||||||
import org.jetbrains.kotlin.backend.common.ir.Symbols
|
import org.jetbrains.kotlin.backend.common.ir.Symbols
|
||||||
import org.jetbrains.kotlin.backend.common.isBuiltInIntercepted
|
|
||||||
import org.jetbrains.kotlin.backend.common.isBuiltInSuspendCoroutineUninterceptedOrReturn
|
|
||||||
import org.jetbrains.kotlin.backend.common.lower.CoroutineIntrinsicLambdaOrigin
|
import org.jetbrains.kotlin.backend.common.lower.CoroutineIntrinsicLambdaOrigin
|
||||||
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
|
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
|
||||||
import org.jetbrains.kotlin.backend.konan.Context
|
import org.jetbrains.kotlin.backend.konan.Context
|
||||||
@@ -56,9 +53,8 @@ internal class FunctionInlining(val context: Context) : IrElementTransformerVoid
|
|||||||
|
|
||||||
val actualCallee = getFunctionDeclaration(callee.symbol)
|
val actualCallee = getFunctionDeclaration(callee.symbol)
|
||||||
|
|
||||||
actualCallee.transformChildrenVoid(this) // Process recursive inline.
|
|
||||||
|
|
||||||
val parent = allScopes.map { it.irElement }.filterIsInstance<IrDeclarationParent>().lastOrNull()
|
val parent = allScopes.map { it.irElement }.filterIsInstance<IrDeclarationParent>().lastOrNull()
|
||||||
|
|
||||||
val inliner = Inliner(expression, actualCallee, currentScope!!, parent, context)
|
val inliner = Inliner(expression, actualCallee, currentScope!!, parent, context)
|
||||||
return inliner.inline()
|
return inliner.inline()
|
||||||
}
|
}
|
||||||
@@ -107,7 +103,7 @@ internal class FunctionInlining(val context: Context) : IrElementTransformerVoid
|
|||||||
|
|
||||||
val substituteMap = mutableMapOf<IrValueParameter, IrElement>()
|
val substituteMap = mutableMapOf<IrValueParameter, IrElement>()
|
||||||
|
|
||||||
fun inline() = inlineFunction(callSite, callee)
|
fun inline() = inlineFunction(callSite, callee, true)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: JVM inliner crashed on attempt inline this function from transform.kt with:
|
* TODO: JVM inliner crashed on attempt inline this function from transform.kt with:
|
||||||
@@ -120,8 +116,12 @@ internal class FunctionInlining(val context: Context) : IrElementTransformerVoid
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun inlineFunction(callSite: IrFunctionAccessExpression, callee: IrFunction): IrReturnableBlock {
|
private fun inlineFunction(callSite: IrFunctionAccessExpression,
|
||||||
val copiedCallee = copyIrElement.copy(callee) as IrFunction
|
callee: IrFunction,
|
||||||
|
performRecursiveInline: Boolean): IrReturnableBlock {
|
||||||
|
val copiedCallee = if (performRecursiveInline)
|
||||||
|
visitElement(copyIrElement.copy(callee)) as IrFunction
|
||||||
|
else copyIrElement.copy(callee) as IrFunction
|
||||||
|
|
||||||
val evaluationStatements = evaluateArguments(callSite, copiedCallee)
|
val evaluationStatements = evaluateArguments(callSite, copiedCallee)
|
||||||
val statements = (copiedCallee.body as IrBlockBody).statements
|
val statements = (copiedCallee.body as IrBlockBody).statements
|
||||||
@@ -194,6 +194,7 @@ internal class FunctionInlining(val context: Context) : IrElementTransformerVoid
|
|||||||
return expression
|
return expression
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
patchDeclarationParents(parent) // TODO: Why it is not enough to just run SetDeclarationsParentVisitor?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -263,7 +264,7 @@ internal class FunctionInlining(val context: Context) : IrElementTransformerVoid
|
|||||||
return super.visitCall(expression)
|
return super.visitCall(expression)
|
||||||
|
|
||||||
val functionDeclaration = functionArgument.statements[0] as IrFunction
|
val functionDeclaration = functionArgument.statements[0] as IrFunction
|
||||||
val newExpression = inlineFunction(expression, functionDeclaration) // Inline the lambda. Lambda parameters will be substituted with lambda arguments.
|
val newExpression = inlineFunction(expression, functionDeclaration, false) // Inline the lambda. Lambda parameters will be substituted with lambda arguments.
|
||||||
return newExpression.transform(this, null) // Substitute lambda arguments with target function arguments.
|
return newExpression.transform(this, null) // Substitute lambda arguments with target function arguments.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -132,7 +132,7 @@ internal class InitializersLowering(val context: CommonBackendContext) : ClassLo
|
|||||||
return expression
|
return expression
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
initializer.patchDeclarationParents(initializeFun)
|
initializer.setDeclarationsParent(initializeFun)
|
||||||
}
|
}
|
||||||
|
|
||||||
return initializeFun.symbol
|
return initializeFun.symbol
|
||||||
@@ -166,7 +166,7 @@ internal class InitializersLowering(val context: CommonBackendContext) : ClassLo
|
|||||||
if (initializeMethodSymbol == null) {
|
if (initializeMethodSymbol == null) {
|
||||||
assert(declaration.isPrimary)
|
assert(declaration.isPrimary)
|
||||||
for (initializer in initializers)
|
for (initializer in initializers)
|
||||||
initializer.patchDeclarationParents(declaration)
|
initializer.setDeclarationsParent(declaration)
|
||||||
initializers
|
initializers
|
||||||
} else {
|
} else {
|
||||||
val startOffset = it.startOffset
|
val startOffset = it.startOffset
|
||||||
|
|||||||
@@ -75,6 +75,8 @@ internal fun IrFile.addTopLevelInitializer(expression: IrExpression, context: Ko
|
|||||||
).apply {
|
).apply {
|
||||||
descriptor.bind(this)
|
descriptor.bind(this)
|
||||||
|
|
||||||
|
expression.setDeclarationsParent(this)
|
||||||
|
|
||||||
if (threadLocal)
|
if (threadLocal)
|
||||||
annotations += buildSimpleAnnotation(context.irBuiltIns, startOffset, endOffset, context.ir.symbols.threadLocal.owner)
|
annotations += buildSimpleAnnotation(context.irBuiltIns, startOffset, endOffset, context.ir.symbols.threadLocal.owner)
|
||||||
|
|
||||||
@@ -315,6 +317,7 @@ fun IrBuilderWithScope.irCatch(type: IrType) =
|
|||||||
false
|
false
|
||||||
).apply {
|
).apply {
|
||||||
descriptor.bind(this)
|
descriptor.bind(this)
|
||||||
|
parent = this@irCatch.parent
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user