Decomposer patterns supported: any expression resolvable in the context of the matched one and returning a tuple is a decomposer

This commit is contained in:
Andrey Breslav
2011-05-20 22:24:13 +04:00
parent 0afddb4d9e
commit a1e055af89
19 changed files with 256 additions and 59 deletions
+5 -1
View File
@@ -43,5 +43,9 @@ fun test() {
is (1, 1) => 1
is (1, <error>"1"</error>) => 1
is <error>(1, "1", *)</error> => 1
is boo @ (1, <error>"a"</error>, *) => 1
is boo @ <error>(1, *)</error> => 1
}
}
}
val (Int, Int).boo : (Int, Int, Int) = (1, 1, 1)
+1 -1
View File
@@ -107,7 +107,7 @@ JetFile: RootNamespace.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -1,4 +1,5 @@
fun foo() {
dd<(Int, Int, Int)>(if (true) (1, 1, 1) else (2, 2, 2))
foo(bar<a, b, c>(d))
foo(bar<a, b+1, c>(d))
foo(bar<a, f(), c>(d))
@@ -11,6 +11,78 @@ JetFile: TypeExpressionAmbiguities_ERR.jet
BLOCK
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('dd')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
TUPLE_TYPE
PsiElement(LPAR)('(')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Int')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Int')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Int')
PsiElement(RPAR)(')')
PsiElement(GT)('>')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
VALUE_ARGUMENT
IF
PsiElement(if)('if')
PsiWhiteSpace(' ')
PsiElement(LPAR)('(')
CONDITION
BOOLEAN_CONSTANT
PsiElement(true)('true')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
THEN
TUPLE
PsiElement(LPAR)('(')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(else)('else')
PsiWhiteSpace(' ')
ELSE
TUPLE
PsiElement(LPAR)('(')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('2')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('2')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('2')
PsiElement(RPAR)(')')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n ')
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
+29 -29
View File
@@ -145,7 +145,7 @@ JetFile: When.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -153,7 +153,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -178,7 +178,7 @@ JetFile: When.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -186,7 +186,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -465,13 +465,13 @@ JetFile: When.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
EXPRESSION_PATTERN
NULL
PsiElement(null)('null')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
BINDING_PATTERN
PsiElement(val)('val')
PsiWhiteSpace(' ')
@@ -495,7 +495,7 @@ JetFile: When.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -503,7 +503,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -528,7 +528,7 @@ JetFile: When.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -536,7 +536,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -565,7 +565,7 @@ JetFile: When.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -573,7 +573,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -602,7 +602,7 @@ JetFile: When.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
@@ -614,7 +614,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
PsiElement(IDENTIFIER)('bar')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
@@ -651,7 +651,7 @@ JetFile: When.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -659,7 +659,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -684,7 +684,7 @@ JetFile: When.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
BINDING_PATTERN
PsiElement(val)('val')
PsiWhiteSpace(' ')
@@ -699,7 +699,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('T')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -724,7 +724,7 @@ JetFile: When.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -732,7 +732,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('b')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
EXPRESSION_PATTERN
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
@@ -952,7 +952,7 @@ JetFile: When.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -1080,13 +1080,13 @@ JetFile: When.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
EXPRESSION_PATTERN
NULL
PsiElement(null)('null')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
BINDING_PATTERN
PsiElement(val)('val')
PsiWhiteSpace(' ')
@@ -1105,7 +1105,7 @@ JetFile: When.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -1113,7 +1113,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -1169,7 +1169,7 @@ JetFile: When.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -1177,7 +1177,7 @@ JetFile: When.jet
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -1206,14 +1206,14 @@ JetFile: When.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
BINDING_PATTERN
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('b')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
+8 -8
View File
@@ -1351,13 +1351,13 @@ JetFile: BinaryTree.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
EXPRESSION_PATTERN
NULL
PsiElement(null)('null')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
EXPRESSION_PATTERN
NULL
PsiElement(null)('null')
@@ -1392,13 +1392,13 @@ JetFile: BinaryTree.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
EXPRESSION_PATTERN
NULL
PsiElement(null)('null')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -1435,7 +1435,7 @@ JetFile: BinaryTree.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -1443,7 +1443,7 @@ JetFile: BinaryTree.jet
PsiElement(IDENTIFIER)('left')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
EXPRESSION_PATTERN
NULL
PsiElement(null)('null')
@@ -1478,7 +1478,7 @@ JetFile: BinaryTree.jet
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT_LIST
PsiElement(LPAR)('(')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
@@ -1486,7 +1486,7 @@ JetFile: BinaryTree.jet
PsiElement(IDENTIFIER)('left')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
DECOMPOSER_ARGUMENT
TUPLE_PATTERN_ENTRY
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE