diff --git a/translator/src/org/jetbrains/k2js/translate/PatternTranslator.java b/translator/src/org/jetbrains/k2js/translate/PatternTranslator.java index 2abb504754d..cc18391e265 100644 --- a/translator/src/org/jetbrains/k2js/translate/PatternTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/PatternTranslator.java @@ -1,19 +1,15 @@ package org.jetbrains.k2js.translate; -import com.google.dart.compiler.backend.js.ast.JsExpression; -import com.google.dart.compiler.backend.js.ast.JsName; -import com.google.dart.compiler.backend.js.ast.JsNameRef; +import com.google.dart.compiler.backend.js.ast.*; import com.google.dart.compiler.util.AstUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; -import org.jetbrains.jet.lang.psi.JetIsExpression; -import org.jetbrains.jet.lang.psi.JetPattern; -import org.jetbrains.jet.lang.psi.JetTypePattern; -import org.jetbrains.jet.lang.psi.JetTypeReference; +import org.jetbrains.jet.lang.psi.*; /** * @author Talanov Pavel */ +//TODO: fix members order public final class PatternTranslator extends AbstractTranslator { @NotNull @@ -56,9 +52,22 @@ public final class PatternTranslator extends AbstractTranslator { if (pattern instanceof JetTypePattern) { return translateTypePattern(expressionToMatch, (JetTypePattern) pattern); } + if (pattern instanceof JetExpressionPattern) { + return translateExpressionPattern(expressionToMatch, (JetExpressionPattern) pattern); + } throw new AssertionError("Unsupported pattern type " + pattern.getClass()); } + @NotNull + private JsExpression translateExpressionPattern(JsExpression expressionToMatch, JetExpressionPattern pattern) { + JetExpression patternExpression = pattern.getExpression(); + assert patternExpression != null : "Expression patter should have an expression."; + JsExpression expressionToMatchAgainst = + Translation.translateAsExpression(patternExpression, translationContext()); + //TODO: should call equals method here + return new JsBinaryOperation(JsBinaryOperator.REF_EQ, expressionToMatch, expressionToMatchAgainst); + } + @NotNull private JetPattern getPattern(@NotNull JetIsExpression expression) { JetPattern pattern = expression.getPattern(); diff --git a/translator/src/org/jetbrains/k2js/translate/WhenTranslator.java b/translator/src/org/jetbrains/k2js/translate/WhenTranslator.java index ae42bb5e031..cfa1c136fe7 100644 --- a/translator/src/org/jetbrains/k2js/translate/WhenTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/WhenTranslator.java @@ -11,6 +11,7 @@ import java.util.List; /** * @author Talanov Pavel */ +//TODO: fix members order public class WhenTranslator extends AbstractTranslator { @NotNull diff --git a/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java b/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java index a6406f84b7a..fa8478d4b7c 100644 --- a/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java +++ b/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java @@ -29,4 +29,9 @@ public final class PatternMatchingTest extends IncludeLibraryTest { testFooBoxIsTrue("whenExecutesOnlyOnce.kt"); } + @Test + public void whenValue() throws Exception { + testFooBoxIsTrue("whenValue.kt"); + } + } diff --git a/translator/testFiles/patternMatching/cases/whenValue.kt b/translator/testFiles/patternMatching/cases/whenValue.kt new file mode 100644 index 00000000000..52093a79b4c --- /dev/null +++ b/translator/testFiles/patternMatching/cases/whenValue.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 == 20) +} \ No newline at end of file