diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt index b3514112dca..f8a1a248ada 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrElementToJsExpressionTransformer.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrConst +import org.jetbrains.kotlin.ir.expressions.IrConstKind import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.js.backend.ast.* @@ -21,8 +22,19 @@ class IrElementToJsExpressionTransformer : BaseIrElementToJsNodeTransformer visitConst(expression: IrConst, data: Nothing?): JsExpression { - // TODO: support all cases - return JsStringLiteral(expression.value.toString()) + val kind = expression.kind + return when (kind) { + is IrConstKind.String -> JsStringLiteral(kind.valueOf(expression)) + is IrConstKind.Null -> JsNullLiteral() + is IrConstKind.Boolean -> JsBooleanLiteral(kind.valueOf(expression)) + is IrConstKind.Byte -> JsIntLiteral(kind.valueOf(expression).toInt()) + is IrConstKind.Short -> JsIntLiteral(kind.valueOf(expression).toInt()) + is IrConstKind.Int -> JsIntLiteral(kind.valueOf(expression)) + is IrConstKind.Long, + is IrConstKind.Char -> super.visitConst(expression, data) + is IrConstKind.Float -> JsDoubleLiteral(kind.valueOf(expression).toDouble()) + is IrConstKind.Double -> JsDoubleLiteral(kind.valueOf(expression)) + } } override fun visitCall(expression: IrCall, data: Nothing?): JsExpression {