[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:
committed by
TeamCityServer
parent
f05c8ad953
commit
920daac0a2
+27
-3
@@ -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))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user