From 3bb14ecd7f62d28240de2477c3041e1a7e9d0dff Mon Sep 17 00:00:00 2001 From: pTalanov Date: Fri, 15 Jun 2012 17:26:45 +0400 Subject: [PATCH] Add toString call when interpolating strings --- .../org/jetbrains/k2js/test/semantics/StringTest.java | 10 ++++++++++ .../expression/StringTemplateTranslator.java | 8 +++++++- .../testFiles/expression/string/cases/kt2227.kt | 6 ++++++ .../expression/string/cases/stringNotEqualToNumber.kt | 11 +++++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 js/js.translator/testFiles/expression/string/cases/kt2227.kt create mode 100644 js/js.translator/testFiles/expression/string/cases/stringNotEqualToNumber.kt diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/StringTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/StringTest.java index b7d2d4525e8..58b9e6b3f9f 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/StringTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/StringTest.java @@ -48,4 +48,14 @@ public final class StringTest extends AbstractExpressionTest { public void testObjectToStringCallInTemplate() throws Exception { fooBoxTest(); } + + public void testStringNotEqualToNumber() throws Exception { + fooBoxTest(); + } + + public void testKt2227() throws Exception { + fooBoxTest(); + } + + } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/expression/StringTemplateTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/expression/StringTemplateTranslator.java index 1971bb4af48..d8c982cd745 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/expression/StringTemplateTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/expression/StringTemplateTranslator.java @@ -17,6 +17,8 @@ package org.jetbrains.k2js.translate.expression; import com.google.dart.compiler.backend.js.ast.JsExpression; +import com.google.dart.compiler.backend.js.ast.JsNameRef; +import com.google.dart.compiler.util.AstUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.*; @@ -24,6 +26,7 @@ import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.general.AbstractTranslator; import org.jetbrains.k2js.translate.general.Translation; +import static org.jetbrains.k2js.translate.utils.JsAstUtils.setQualifier; import static org.jetbrains.k2js.translate.utils.JsAstUtils.sum; @@ -77,7 +80,10 @@ public final class StringTemplateTranslator extends AbstractTranslator { JetExpression entryExpression = entry.getExpression(); assert entryExpression != null : "JetStringTemplateEntryWithExpression must have not null entry expression."; - append(Translation.translateAsExpression(entryExpression, context())); + JsExpression translatedExpression = Translation.translateAsExpression(entryExpression, context()); + JsNameRef toString = AstUtil.newQualifiedNameRef("toString"); + setQualifier(toString, translatedExpression); + append(AstUtil.newInvocation(toString)); } @Override diff --git a/js/js.translator/testFiles/expression/string/cases/kt2227.kt b/js/js.translator/testFiles/expression/string/cases/kt2227.kt new file mode 100644 index 00000000000..1b8198cdf38 --- /dev/null +++ b/js/js.translator/testFiles/expression/string/cases/kt2227.kt @@ -0,0 +1,6 @@ +package foo + +fun box(): Boolean { + if ("${3}" != "3") return false + return "${3}" == "3" +} \ No newline at end of file diff --git a/js/js.translator/testFiles/expression/string/cases/stringNotEqualToNumber.kt b/js/js.translator/testFiles/expression/string/cases/stringNotEqualToNumber.kt new file mode 100644 index 00000000000..916260ab9ad --- /dev/null +++ b/js/js.translator/testFiles/expression/string/cases/stringNotEqualToNumber.kt @@ -0,0 +1,11 @@ +package foo + + +fun box(): Boolean { + val t1: Any = "3" + val t2: Any = 3 + val t3: Any = "4" + val t4: Any = 4 + if (t3 == t4) return false + return t1 != t2 +} \ No newline at end of file