[K/JS] Remove unused Unit_getInstance import into generated code

This commit is contained in:
Artem Kobzar
2023-03-09 16:51:07 +00:00
committed by Space Team
parent 60787e9fe4
commit 484e5afb59
4 changed files with 42 additions and 21 deletions
@@ -90,50 +90,56 @@ class IrElementToJsStatementTransformer : BaseIrElementToJsNodeTransformer<JsSta
return JsContinue(context.getNameForLoop(jump.loop)?.let { JsNameRef(it) }).withSource(jump, context)
}
private fun IrExpression.maybeOptimizeIntoSwitch(context: JsGenerationContext, transformer: (JsExpression) -> JsStatement): JsStatement {
private fun IrExpression.maybeOptimizeIntoSwitch(
context: JsGenerationContext,
transformer: (() -> JsExpression) -> JsStatement
): JsStatement {
if (this is IrWhen) {
val stmtTransformer = { stmt: JsStatement ->
assert(stmt is JsExpressionStatement) { "${render()} is not a statement $stmt" }
transformer((stmt as JsExpressionStatement).expression)
val stmtTransformer: (() -> JsStatement) -> JsStatement = {
transformer {
val stmt = it()
assert(stmt is JsExpressionStatement) { "${render()} is not a statement $stmt" }
(stmt as JsExpressionStatement).expression
}
}
SwitchOptimizer(context, isExpression = true, stmtTransformer).tryOptimize(this)?.let { return it }
}
return transformer(accept(IrElementToJsExpressionTransformer(), context))
return transformer { accept(IrElementToJsExpressionTransformer(), context) }
}
override fun visitSetField(expression: IrSetField, context: JsGenerationContext): JsStatement {
val fieldName = context.getNameForField(expression.symbol.owner)
val expressionTransformer = IrElementToJsExpressionTransformer()
val dest = jsElementAccess(fieldName, expression.receiver?.accept(expressionTransformer, context))
return expression.value.maybeOptimizeIntoSwitch(context) { jsAssignment(dest, it).withSource(expression, context).makeStmt() }
return expression.value.maybeOptimizeIntoSwitch(context) { jsAssignment(dest, it()).withSource(expression, context).makeStmt() }
}
override fun visitSetValue(expression: IrSetValue, context: JsGenerationContext): JsStatement {
val owner = expression.symbol.owner
val ref = JsNameRef(context.getNameForValueDeclaration(owner))
return expression.value.maybeOptimizeIntoSwitch(context) { jsAssignment(ref, it).withSource(expression, context).makeStmt() }
return expression.value.maybeOptimizeIntoSwitch(context) { jsAssignment(ref, it()).withSource(expression, context).makeStmt() }
}
override fun visitReturn(expression: IrReturn, context: JsGenerationContext): JsStatement {
val targetSymbol = expression.returnTargetSymbol
val lastStatementTransformer: (JsExpression) -> JsStatement =
val lastStatementTransformer: (() -> JsExpression) -> JsStatement =
if (targetSymbol is IrReturnableBlockSymbol) {
// TODO assert that value is Unit?
{
context.getNameForReturnableBlock(targetSymbol.owner)
.takeIf { !expression.isTheLastReturnStatementIn(targetSymbol) }
?.run { JsBreak(makeRef()) } ?: JsEmpty
.takeIf { !expression.isTheLastReturnStatementIn(targetSymbol) }
?.run { JsBreak(makeRef()) } ?: JsEmpty
}
} else {
{ JsReturn(it) }
{ JsReturn(it()) }
}
return expression.value.maybeOptimizeIntoSwitch(context, lastStatementTransformer).withSource(expression, context)
}
override fun visitThrow(expression: IrThrow, context: JsGenerationContext): JsStatement {
return expression.value.maybeOptimizeIntoSwitch(context) { JsThrow(it) }.withSource(expression, context)
return expression.value.maybeOptimizeIntoSwitch(context) { JsThrow(it()) }.withSource(expression, context)
}
override fun visitVariable(declaration: IrVariable, context: JsGenerationContext): JsStatement {
@@ -142,8 +148,8 @@ class IrElementToJsStatementTransformer : BaseIrElementToJsNodeTransformer<JsSta
if (value is IrWhen) {
val varRef = varName.makeRef()
val transformer = { stmt: JsStatement ->
val expr = (stmt as JsExpressionStatement).expression
val transformer: (() -> JsStatement) -> JsStatement = {
val expr = (it() as JsExpressionStatement).expression
JsBinaryOperation(JsBinaryOperator.ASG, varRef, expr).makeStmt()
}
@@ -11,10 +11,14 @@ import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.js.backend.ast.*
class SwitchOptimizer(private val context: JsGenerationContext, private val isExpression: Boolean, private val lastStatementTransformer: (JsStatement) -> JsStatement) {
class SwitchOptimizer(
private val context: JsGenerationContext,
private val isExpression: Boolean,
private val lastStatementTransformer: (() -> JsStatement) -> JsStatement
) {
// TODO: reimplement optimization on top of IR
constructor(context: JsGenerationContext) : this(context, isExpression = false, { it })
constructor(context: JsGenerationContext) : this(context, isExpression = false, { it() })
private val jsEqeqeq = context.staticContext.backendContext.intrinsics.jsEqeqeq
private val jsEqeq = context.staticContext.backendContext.intrinsics.jsEqeq
@@ -145,8 +149,7 @@ class SwitchOptimizer(private val context: JsGenerationContext, private val isEx
}
val lastStatement = if (isExpression) {
val expression = case.body.accept(exprTransformer, context).makeStmt()
val lastStatement = lastStatementTransformer(expression)
val lastStatement = lastStatementTransformer { case.body.accept(exprTransformer, context).makeStmt() }
jsCase.statements += lastStatement
lastStatement
} else {
@@ -154,7 +157,7 @@ class SwitchOptimizer(private val context: JsGenerationContext, private val isEx
var lastStatement = jsBody.statements.lastOrNull()
if (lastStatement != null) {
lastStatement = lastStatementTransformer(lastStatement)
lastStatement = lastStatementTransformer { lastStatement!! }
jsBody.statements[jsBody.statements.lastIndex] = lastStatement
}
@@ -12,6 +12,12 @@ STEP 3:
STEP 4:
libs: lib1, main
dirty js: main
STEP 5..9:
STEP 5..6:
libs: lib1, main
dirty js: lib1, main
STEP 7:
libs: lib1, main
dirty js: main
STEP 8..9:
libs: lib1, main
dirty js: lib1, main
@@ -1,6 +1,12 @@
MODULES: lib1, main
STEP 0..3:
STEP 0..1:
libs: lib1, main
dirty js: lib1, main
STEP 2:
libs: lib1, main
dirty js: lib1
STEP 3:
libs: lib1, main
dirty js: lib1, main
STEP 4: