From e378bde43e1b58be88d8f0bb272d29ce86612639 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Mon, 8 Dec 2014 17:34:54 +0300 Subject: [PATCH] JS backend: fix "is Boolean" check. --- .../k2js/test/semantics/RTTITest.java | 4 +++ .../expression/PatternTranslator.java | 3 ++ .../functions/patterns/NamePredicate.java | 3 ++ .../testData/rtti/cases/isJsPrimitiveType.kt | 32 +++++++++++++++++++ 4 files changed, 42 insertions(+) create mode 100644 js/js.translator/testData/rtti/cases/isJsPrimitiveType.kt diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/RTTITest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/RTTITest.java index 459309f4e56..aeafd1d943e 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/RTTITest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/RTTITest.java @@ -51,4 +51,8 @@ public class RTTITest extends SingleFileTranslationTest { public void testStdlibEmptyListClass() throws Exception { checkFooBoxIsOk(); } + + public void testIsJsPrimitiveType() throws Exception { + checkFooBoxIsOk(); + } } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java index cc0bb33d834..586227efca1 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java @@ -93,6 +93,9 @@ public final class PatternTranslator extends AbstractTranslator { if (NamePredicate.STRING.apply(typeName)) { jsSTypeName = "string"; } + else if (NamePredicate.BOOLEAN.apply(typeName)) { + jsSTypeName = "boolean"; + } else if (NamePredicate.LONG.apply(typeName)) { return JsAstUtils.isLong(expressionToMatch); } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/NamePredicate.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/NamePredicate.java index f5578b03f95..a86e0dfdc3b 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/NamePredicate.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/NamePredicate.java @@ -59,6 +59,9 @@ public final class NamePredicate implements Predicate { @NotNull public static final NamePredicate NUMBER = new NamePredicate("Number"); + @NotNull + public static final NamePredicate BOOLEAN = new NamePredicate("Boolean"); + @NotNull public static final NamePredicate CHAR = new NamePredicate(PrimitiveType.CHAR.getTypeName()); diff --git a/js/js.translator/testData/rtti/cases/isJsPrimitiveType.kt b/js/js.translator/testData/rtti/cases/isJsPrimitiveType.kt new file mode 100644 index 00000000000..70e9f60fafc --- /dev/null +++ b/js/js.translator/testData/rtti/cases/isJsPrimitiveType.kt @@ -0,0 +1,32 @@ +package foo + +enum class Type { + NUMBER + STRING + BOOLEAN + OBJECT +} + +fun test(a: Any, actualType: Type) { + assertEquals(actualType == Type.NUMBER, a is Int, "$a is Int") + assertEquals(actualType == Type.NUMBER, a is Number, "$a is Number") + assertEquals(actualType == Type.NUMBER, a is Double, "$a is Double") + assertEquals(actualType == Type.BOOLEAN, a is Boolean, "$a is Boolean") + assertEquals(actualType == Type.STRING, a is String, "$a is String") +} + +fun box(): String { + test(1, Type.NUMBER) + + test(12.3, Type.NUMBER) + test(12.3f, Type.NUMBER) + + test("text", Type.STRING) + + test(true, Type.BOOLEAN) + test(false, Type.BOOLEAN) + + test(object {}, Type.OBJECT) + + return "OK" +} \ No newline at end of file