diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/LoopTranslator.kt b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/LoopTranslator.kt index 5524e703da4..d8d13ed8109 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/LoopTranslator.kt +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/expression/LoopTranslator.kt @@ -99,7 +99,10 @@ private val indicesFqName = FqName("kotlin.collections.indices") private val sequenceFqName = FqName("kotlin.sequences.Sequence") fun translateForExpression(expression: KtForExpression, context: TranslationContext): JsStatement { - val loopRange = KtPsiUtil.deparenthesize(getLoopRange(expression))!! + val loopRange = getLoopRange(expression).let { + val deparenthesized = KtPsiUtil.deparenthesize(it)!! + if (deparenthesized is KtStringTemplateExpression) it else deparenthesized + } val rangeType = getTypeForExpression(context.bindingContext(), loopRange) fun isForOverRange(): Boolean { diff --git a/js/js.translator/testData/box/expression/for/forIteratesOverLiteralRange.kt b/js/js.translator/testData/box/expression/for/forIteratesOverLiteralRange.kt index 5da0ee29a39..ffbe81465fd 100644 --- a/js/js.translator/testData/box/expression/for/forIteratesOverLiteralRange.kt +++ b/js/js.translator/testData/box/expression/for/forIteratesOverLiteralRange.kt @@ -47,6 +47,19 @@ fun box(): String { sLong += i assertEquals(55L, sLong) + // KT-22376 + global = "" + for (s in "AB") + global += s + assertEquals("AB", global) + + for (s in (("CD"))) + global += s + assertEquals("ABCD", global) + + for (s in (("EF"))) + global += s + assertEquals("ABCDEF", global) return "OK" } \ No newline at end of file