initial support for binding patterns in pattern matching (very fragile in terms of stack manipulation :( )

This commit is contained in:
Dmitry Jemerov
2011-07-06 18:39:18 +02:00
parent a744c183c4
commit 889345e7f7
3 changed files with 130 additions and 56 deletions
@@ -64,7 +64,7 @@ public class PatternMatchingTest extends CodegenTestCase {
}
public void testTuplePattern() throws Exception {
loadText("fun foo(x: Tuple2<Any, Any>) = when(x) { is (1,2) => \"one,two\"; else => \"something\" }");
loadText("fun foo(x: (Any, Any)) = when(x) { is (1,2) => \"one,two\"; else => \"something\" }");
Method foo = generateFunction();
assertEquals("one,two", foo.invoke(null, new Tuple2<Integer, Integer>(1, 2)));
assertEquals("something", foo.invoke(null, new Tuple2<String, String>("not", "tuple")));
@@ -76,4 +76,11 @@ public class PatternMatchingTest extends CodegenTestCase {
assertEquals("JetBrains", foo.invoke(null, "Java"));
assertEquals("something", foo.invoke(null, "C#"));
}
public void testNames() throws Exception {
loadText("fun foo(x: (Any, Any)) = when(x) { is (val a is String, *) => a; else => \"something\" }");
Method foo = generateFunction();
assertEquals("JetBrains", foo.invoke(null, new Tuple2<String, String>("JetBrains", "s.r.o.")));
assertEquals("something", foo.invoke(null, new Tuple2<Integer, Integer>(1, 2)));
}
}