IR: remove some usages of deepCopyWithVariables
At this point, `deepCopyWithVariables` is the same as `deepCopyWithSymbols` except that the former doesn't call `patchDeclarationParents`, which most likely produces incorrect IR in some call sites.
This commit is contained in:
committed by
Space Team
parent
e7e8cba1b4
commit
1d38c01afc
+3
-4
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildVariable
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.deepCopyWithVariables
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.ir.symbols.IrReturnTargetSymbol
|
||||
@@ -23,7 +22,7 @@ import org.jetbrains.kotlin.ir.symbols.impl.IrReturnableBlockSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.isNothing
|
||||
import org.jetbrains.kotlin.ir.types.isUnit
|
||||
import org.jetbrains.kotlin.ir.util.setDeclarationsParent
|
||||
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
|
||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
@@ -290,7 +289,7 @@ class FinallyBlocksLowering(val context: CommonBackendContext, private val throw
|
||||
}
|
||||
|
||||
private inline fun <reified T : IrElement> IrBuilderWithScope.copy(element: T) =
|
||||
element.deepCopyWithVariables().setDeclarationsParent(parent)
|
||||
element.deepCopyWithSymbols(parent)
|
||||
|
||||
fun IrBuilderWithScope.irReturn(target: IrReturnTargetSymbol, value: IrExpression) =
|
||||
IrReturnImpl(startOffset, endOffset, context.irBuiltIns.nothingType, target, value)
|
||||
@@ -301,4 +300,4 @@ class FinallyBlocksLowering(val context: CommonBackendContext, private val throw
|
||||
IrBlockBuilder(context, scope, startOffset, endOffset, null, type, true)
|
||||
.block(body).statements
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-4
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.backend.common.lower
|
||||
import org.jetbrains.kotlin.backend.common.BackendContext
|
||||
import org.jetbrains.kotlin.backend.common.BodyLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.collectTailRecursionCalls
|
||||
import org.jetbrains.kotlin.ir.deepCopyWithVariables
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||
import org.jetbrains.kotlin.ir.builders.*
|
||||
@@ -29,6 +28,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
|
||||
import org.jetbrains.kotlin.ir.transformStatement
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
|
||||
import org.jetbrains.kotlin.ir.util.explicitParameters
|
||||
import org.jetbrains.kotlin.ir.util.getArgumentsWithIr
|
||||
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
||||
@@ -40,7 +40,6 @@ import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||
* This pass lowers tail recursion calls in `tailrec` functions.
|
||||
*
|
||||
* Note: it currently can't handle local functions and classes declared in default arguments.
|
||||
* See [deepCopyWithVariables].
|
||||
*/
|
||||
open class TailrecLowering(val context: BackendContext) : BodyLoweringPass {
|
||||
override fun lower(irBody: IrBody, container: IrDeclaration) {
|
||||
@@ -174,7 +173,7 @@ private class BodyTransformer(
|
||||
defaultValuedParameters.let { if (lowering.useProperComputationOrderOfTailrecDefaultParameters) it else it.asReversed() }
|
||||
.associateWithTo(parameterToArgument) { parameter ->
|
||||
val originalDefaultValue = parameter.defaultValue?.expression ?: throw Error("no argument specified for $parameter")
|
||||
irTemporary(originalDefaultValue.deepCopyWithVariables().patchDeclarationParents(parent).transform(remapper, null))
|
||||
irTemporary(originalDefaultValue.deepCopyWithSymbols(parent).transform(remapper, null))
|
||||
}
|
||||
|
||||
// Copy the new `val`s into the `var`s declared outside the loop:
|
||||
@@ -194,4 +193,4 @@ private fun IrValueParameterSymbol.suggestVariableName(): String =
|
||||
"$" + oldNameStr.substring(1, oldNameStr.length - 1)
|
||||
} else {
|
||||
owner.name.identifier
|
||||
}
|
||||
}
|
||||
|
||||
+2
-5
@@ -9,19 +9,16 @@ import org.jetbrains.kotlin.backend.common.DeclarationTransformer
|
||||
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.deepCopyWithVariables
|
||||
import org.jetbrains.kotlin.ir.inline.InlineFunctionResolverReplacingCoroutineIntrinsics
|
||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
||||
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
|
||||
|
||||
internal class SaveInlineFunctionsBeforeInlining(context: JsIrBackendContext) : DeclarationTransformer {
|
||||
private val inlineFunctionsBeforeInlining = context.mapping.inlineFunctionsBeforeInlining
|
||||
|
||||
override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? {
|
||||
if (declaration is IrFunction && declaration.isInline) {
|
||||
inlineFunctionsBeforeInlining[declaration] = declaration.deepCopyWithVariables().also {
|
||||
it.patchDeclarationParents(declaration.parent)
|
||||
}
|
||||
inlineFunctionsBeforeInlining[declaration] = declaration.deepCopyWithSymbols(declaration.parent)
|
||||
}
|
||||
|
||||
return null
|
||||
|
||||
@@ -921,10 +921,8 @@ fun IrValueParameter.copyTo(
|
||||
factory.createExpressionBody(
|
||||
startOffset = originalDefault.startOffset,
|
||||
endOffset = originalDefault.endOffset,
|
||||
expression = originalDefault.expression.deepCopyWithVariables(),
|
||||
).apply {
|
||||
expression.patchDeclarationParents(irFunction)
|
||||
}
|
||||
expression = originalDefault.expression.deepCopyWithSymbols(irFunction),
|
||||
)
|
||||
}
|
||||
return factory.createValueParameter(
|
||||
startOffset = startOffset,
|
||||
|
||||
Reference in New Issue
Block a user