From ca57aee0409be52da8a2c51fb0aea137a231e7f3 Mon Sep 17 00:00:00 2001 From: Pavel Talanov Date: Thu, 17 Nov 2011 20:19:34 +0400 Subject: [PATCH] Added tests and support for binary with type RHS expressions. --- .../k2js/translate/ExpressionVisitor.java | 8 ++++++ .../k2js/translate/OperatorTable.java | 5 ++++ .../k2js/test/PatternMatchingTest.java | 10 ++++++++ .../patternMatching/cases/whenNotValue.kt | 10 ++++++++ .../patternMatching/cases/whenValueOrType.kt | 25 +++++++++++++++++++ 5 files changed, 58 insertions(+) create mode 100644 translator/testFiles/patternMatching/cases/whenNotValue.kt create mode 100644 translator/testFiles/patternMatching/cases/whenValueOrType.kt diff --git a/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java b/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java index b6c5a451ad1..95d597ee496 100644 --- a/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java +++ b/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java @@ -394,4 +394,12 @@ public final class ExpressionVisitor extends TranslatorVisitor { } + @Override + @NotNull + public JsNode visitBinaryWithTypeRHSExpression(@NotNull JetBinaryExpressionWithTypeRHS expression, + @NotNull TranslationContext context) { + return Translation.translateExpression(expression.getLeft(), context); + } + + } diff --git a/translator/src/org/jetbrains/k2js/translate/OperatorTable.java b/translator/src/org/jetbrains/k2js/translate/OperatorTable.java index 748f86441e6..9eaf94f97a2 100644 --- a/translator/src/org/jetbrains/k2js/translate/OperatorTable.java +++ b/translator/src/org/jetbrains/k2js/translate/OperatorTable.java @@ -44,6 +44,11 @@ public final class OperatorTable { binaryOperatorsMap.put(JetTokens.ANDAND, JsBinaryOperator.AND); binaryOperatorsMap.put(JetTokens.EXCLEQ, JsBinaryOperator.NEQ); binaryOperatorsMap.put(JetTokens.PERC, JsBinaryOperator.MOD); + binaryOperatorsMap.put(JetTokens.PLUSEQ, JsBinaryOperator.ASG_ADD); + binaryOperatorsMap.put(JetTokens.MINUSEQ, JsBinaryOperator.ASG_SUB); + binaryOperatorsMap.put(JetTokens.DIVEQ, JsBinaryOperator.ASG_DIV); + binaryOperatorsMap.put(JetTokens.MULTEQ, JsBinaryOperator.ASG_MUL); + binaryOperatorsMap.put(JetTokens.PERCEQ, JsBinaryOperator.ASG_MOD); } static { diff --git a/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java b/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java index fa8478d4b7c..c0577d76191 100644 --- a/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java +++ b/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java @@ -34,4 +34,14 @@ public final class PatternMatchingTest extends IncludeLibraryTest { testFooBoxIsTrue("whenValue.kt"); } + @Test + public void whenNotValue() throws Exception { + testFooBoxIsTrue("whenNotValue.kt"); + } + + @Test + public void whenValueOrType() throws Exception { + testFooBoxIsTrue("whenValueOrType.kt"); + } + } diff --git a/translator/testFiles/patternMatching/cases/whenNotValue.kt b/translator/testFiles/patternMatching/cases/whenNotValue.kt new file mode 100644 index 00000000000..949ef0b068d --- /dev/null +++ b/translator/testFiles/patternMatching/cases/whenNotValue.kt @@ -0,0 +1,10 @@ +namespace foo + +fun box() : Boolean { + var a = 4 + when(a) { + !is 3 => a = 10; + !is 4 => a = 20; + } + return (a == 10) +} \ No newline at end of file diff --git a/translator/testFiles/patternMatching/cases/whenValueOrType.kt b/translator/testFiles/patternMatching/cases/whenValueOrType.kt new file mode 100644 index 00000000000..71afe50d300 --- /dev/null +++ b/translator/testFiles/patternMatching/cases/whenValueOrType.kt @@ -0,0 +1,25 @@ +namespace foo + +class A() { + +} + +class B() { + +} + +fun box() : Boolean { + var c : Int = 0 + var a = A() : Any? + var b = null : Any? + when(a) { + is null => c = 10; + is B => c = 10000 + is A => c = 20; + } + when(b) { + is null => c += 5 + is B => c += 100 + } + return (c == 25) +} \ No newline at end of file