Supported variable is value pattern matching.

This commit is contained in:
Pavel Talanov
2011-11-17 18:39:40 +04:00
parent 98bcfe7847
commit d4fb413778
4 changed files with 32 additions and 7 deletions
@@ -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();
@@ -11,6 +11,7 @@ import java.util.List;
/**
* @author Talanov Pavel
*/
//TODO: fix members order
public class WhenTranslator extends AbstractTranslator {
@NotNull
@@ -29,4 +29,9 @@ public final class PatternMatchingTest extends IncludeLibraryTest {
testFooBoxIsTrue("whenExecutesOnlyOnce.kt");
}
@Test
public void whenValue() throws Exception {
testFooBoxIsTrue("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)
}