Supported variable is value pattern matching.
This commit is contained in:
@@ -1,19 +1,15 @@
|
|||||||
package org.jetbrains.k2js.translate;
|
package org.jetbrains.k2js.translate;
|
||||||
|
|
||||||
import com.google.dart.compiler.backend.js.ast.JsExpression;
|
import com.google.dart.compiler.backend.js.ast.*;
|
||||||
import com.google.dart.compiler.backend.js.ast.JsName;
|
|
||||||
import com.google.dart.compiler.backend.js.ast.JsNameRef;
|
|
||||||
import com.google.dart.compiler.util.AstUtil;
|
import com.google.dart.compiler.util.AstUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.JetIsExpression;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.psi.JetPattern;
|
|
||||||
import org.jetbrains.jet.lang.psi.JetTypePattern;
|
|
||||||
import org.jetbrains.jet.lang.psi.JetTypeReference;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Talanov Pavel
|
* @author Talanov Pavel
|
||||||
*/
|
*/
|
||||||
|
//TODO: fix members order
|
||||||
public final class PatternTranslator extends AbstractTranslator {
|
public final class PatternTranslator extends AbstractTranslator {
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -56,9 +52,22 @@ public final class PatternTranslator extends AbstractTranslator {
|
|||||||
if (pattern instanceof JetTypePattern) {
|
if (pattern instanceof JetTypePattern) {
|
||||||
return translateTypePattern(expressionToMatch, (JetTypePattern) pattern);
|
return translateTypePattern(expressionToMatch, (JetTypePattern) pattern);
|
||||||
}
|
}
|
||||||
|
if (pattern instanceof JetExpressionPattern) {
|
||||||
|
return translateExpressionPattern(expressionToMatch, (JetExpressionPattern) pattern);
|
||||||
|
}
|
||||||
throw new AssertionError("Unsupported pattern type " + pattern.getClass());
|
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
|
@NotNull
|
||||||
private JetPattern getPattern(@NotNull JetIsExpression expression) {
|
private JetPattern getPattern(@NotNull JetIsExpression expression) {
|
||||||
JetPattern pattern = expression.getPattern();
|
JetPattern pattern = expression.getPattern();
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import java.util.List;
|
|||||||
/**
|
/**
|
||||||
* @author Talanov Pavel
|
* @author Talanov Pavel
|
||||||
*/
|
*/
|
||||||
|
//TODO: fix members order
|
||||||
public class WhenTranslator extends AbstractTranslator {
|
public class WhenTranslator extends AbstractTranslator {
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
@@ -29,4 +29,9 @@ public final class PatternMatchingTest extends IncludeLibraryTest {
|
|||||||
testFooBoxIsTrue("whenExecutesOnlyOnce.kt");
|
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)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user