[JS IR] Fix string literal folder in codegen for js("...") function

Support `val v = "S"` and plus (`v1 + v2`) cases

Fix KT-48941, KT-47360 and probably KT-42681
This commit is contained in:
Roman Artemev
2021-09-27 21:54:13 +03:00
committed by TeamCityServer
parent f05c8ad953
commit 920daac0a2
@@ -8,9 +8,8 @@ package org.jetbrains.kotlin.ir.backend.js.transformers.irToJs
import com.google.gwt.dev.js.ThrowExceptionOnErrorReporter
import com.google.gwt.dev.js.rhino.CodePosition
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.expressions.IrConst
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrStringConcatenation
import org.jetbrains.kotlin.ir.declarations.IrVariable
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid
@@ -32,6 +31,31 @@ fun translateJsCodeIntoStatementList(code: IrExpression): List<JsStatement>? {
foldingFailed = true
}
override fun visitGetValue(expression: IrGetValue) {
expression.symbol.owner.acceptVoid(this)
}
override fun visitVariable(declaration: IrVariable) {
declaration.initializer?.let {
it.acceptVoid(this)
return
}
super.visitVariable(declaration)
}
override fun visitGetField(expression: IrGetField) {
expression.symbol.owner.initializer?.expression?.acceptVoid(this)
}
override fun visitCall(expression: IrCall) {
if (expression.origin != IrStatementOrigin.PLUS) {
return super.visitCall(expression)
}
expression.acceptChildrenVoid(this)
}
override fun <T> visitConst(expression: IrConst<T>) {
builder.append(expression.kind.valueOf(expression))
}