Replace all usages of inlineFunctionSymbol with inlineFunction

This commit is contained in:
Ivan Kylchik
2022-12-15 16:09:19 +01:00
committed by Space Team
parent 1d30a68285
commit ef78196cbc
14 changed files with 117 additions and 58 deletions
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.ir.backend.js.dce
import org.jetbrains.kotlin.backend.common.ir.inlineFunction
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.backend.js.JsCommonBackendContext
import org.jetbrains.kotlin.ir.backend.js.utils.hasJsPolyfill
@@ -54,7 +55,7 @@ abstract class UsefulDeclarationProcessor(
super.visitBlock(expression, data)
if (expression is IrReturnableBlock) {
expression.inlineFunctionSymbol?.owner?.addToUsefulPolyfilledDeclarations()
expression.inlineFunction?.addToUsefulPolyfilledDeclarations()
}
}
@@ -68,7 +68,7 @@ class JsReturnableBlockTransformer(val context: CommonBackendContext) : IrElemen
val builder = context.createIrBuilder(expression.symbol)
expression.type = context.irBuiltIns.unitType
expression.type = unitType
return builder.irComposite(expression, expression.origin, variable.type) {
+variable
+expression
@@ -6,9 +6,9 @@
package org.jetbrains.kotlin.ir.backend.js.lower.cleanup
import org.jetbrains.kotlin.backend.common.BodyLoweringPass
import org.jetbrains.kotlin.backend.common.ir.isPure
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.backend.common.ir.isPure
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.types.isNothing
@@ -37,8 +37,8 @@ private class BlockRemover : IrElementVisitorVoid {
private fun process(container: IrStatementContainer) {
container.statements.transformFlat { statement ->
when (statement) {
// returnable blocks required for sourcemaps generation, so keep them
is IrReturnableBlock -> null
// returnable and inlined function blocks required for sourcemaps generation, so keep them
is IrReturnableBlock, is IrInlinedFunctionBlock -> null
is IrStatementContainer -> statement.statements
else -> null
}
@@ -5,11 +5,12 @@
package org.jetbrains.kotlin.ir.backend.js.transformers.irToJs
import org.jetbrains.kotlin.ir.backend.js.utils.isTheLastReturnStatementIn
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
import org.jetbrains.kotlin.backend.common.ir.inlineFunction
import org.jetbrains.kotlin.backend.common.ir.innerInlinedBlockOrThis
import org.jetbrains.kotlin.ir.backend.js.JsLoweredDeclarationOrigin
import org.jetbrains.kotlin.ir.backend.js.utils.JsGenerationContext
import org.jetbrains.kotlin.ir.backend.js.utils.emptyScope
import org.jetbrains.kotlin.ir.backend.js.utils.isTheLastReturnStatementIn
import org.jetbrains.kotlin.ir.declarations.IrFunction
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.declarations.IrVariable
@@ -36,11 +37,12 @@ class IrElementToJsStatementTransformer : BaseIrElementToJsNodeTransformer<JsSta
}
override fun visitBlock(expression: IrBlock, context: JsGenerationContext): JsStatement {
val newContext = (expression as? IrReturnableBlock)?.inlineFunctionSymbol?.let {
context.newFile(it.owner.file, context.currentFunction, context.localNames)
val newContext = (expression as? IrReturnableBlock)?.inlineFunction?.let {
context.newFile(it.file, context.currentFunction, context.localNames)
} ?: context
val statements = expression.statements.map { it.accept(this, newContext) }
val container = expression.innerInlinedBlockOrThis.statements
val statements = container.map { it.accept(this, newContext) }
return if (expression is IrReturnableBlock) {
val label = context.getNameForReturnableBlock(expression)
@@ -57,9 +59,9 @@ class IrElementToJsStatementTransformer : BaseIrElementToJsNodeTransformer<JsSta
}
private fun List<JsStatement>.wrapInCommentsInlineFunctionCall(expression: IrReturnableBlock): List<JsStatement> {
val inlineFunctionSymbol = expression.inlineFunctionSymbol ?: return this
val correspondingProperty = (inlineFunctionSymbol.owner as? IrSimpleFunction)?.correspondingPropertySymbol
val owner = correspondingProperty?.owner ?: inlineFunctionSymbol.owner
val inlineFunction = expression.inlineFunction ?: return this
val correspondingProperty = (inlineFunction as? IrSimpleFunction)?.correspondingPropertySymbol
val owner = correspondingProperty?.owner ?: inlineFunction
val funName = owner.fqNameWhenAvailable ?: owner.name
return listOf(JsSingleLineComment(" Inline function '$funName' call")) + this
}
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression
import org.jetbrains.kotlin.ir.expressions.IrInlinedFunctionBlock
import org.jetbrains.kotlin.ir.expressions.IrReturn
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl
@@ -45,6 +46,10 @@ fun IrDeclaration?.isExportedInterface(context: JsIrBackendContext) =
this is IrClass && kind.isInterface && isExported(context)
fun IrReturn.isTheLastReturnStatementIn(target: IrReturnableBlockSymbol): Boolean {
val ownerFirstStatement = target.owner.statements.singleOrNull()
if (ownerFirstStatement is IrInlinedFunctionBlock) {
return ownerFirstStatement.statements.lastOrNull() === this
}
return target.owner.statements.lastOrNull() === this
}