Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
硅谷海盗
kotlin
提交
48180072
K
kotlin
项目概览
硅谷海盗
/
kotlin
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kotlin
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
48180072
编写于
2月 08, 2011
作者:
A
Andrey Breslav
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
New syntax fro patterns
上级
691c79c4
变更
7
显示空白变更内容
内联
并排
Showing
7 changed file
with
105 addition
and
54 deletion
+105
-54
grammar/src/expressions.grm
grammar/src/expressions.grm
+5
-5
grammar/src/when.grm
grammar/src/when.grm
+7
-13
idea/src/org/jetbrains/jet/JetNodeTypes.java
idea/src/org/jetbrains/jet/JetNodeTypes.java
+1
-0
idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java
.../org/jetbrains/jet/lang/parsing/JetExpressionParsing.java
+23
-21
idea/testData/psi/AttributesOnPatterns.jet
idea/testData/psi/AttributesOnPatterns.jet
+3
-1
idea/testData/psi/AttributesOnPatterns.txt
idea/testData/psi/AttributesOnPatterns.txt
+56
-4
idea/testData/psi/When.jet
idea/testData/psi/When.jet
+10
-10
未找到文件。
grammar/src/expressions.grm
浏览文件 @
48180072
...
...
@@ -43,12 +43,12 @@ comparison
;
namedInfixOrTypeExpression
: elvis
Operation (inOperation elvisOperat
ion)*
: elvis
Operat
ion (isOperation isRHS)?
: elvis
Operat
ion (typeOperation type)?
: elvis
Expression (inOperation elvisExpress
ion)*
: elvis
Express
ion (isOperation isRHS)?
: elvis
Express
ion (typeOperation type)?
;
elvis
Operat
ion
elvis
Express
ion
: infixFunctionCall ("?:" infixFunctionCall)*
;
...
...
@@ -170,7 +170,7 @@ postfixUnaryOperation
: typeArguments? valueArguments
: typeArguments
: arrayAccess
: memberAccessOperation
atomicExpression
: memberAccessOperation
postfixUnaryOperation // TODO: Review
;
memberAccessOperation
...
...
grammar/src/when.grm
浏览文件 @
48180072
...
...
@@ -15,6 +15,7 @@ whenConditionIf
whenCondition
: expression
// : "." atomicExpression typeArguments? valueArguments?
: ("in" | "!in") expression
: ("is" | "!is") isRHS
;
...
...
@@ -22,17 +23,18 @@ whenCondition
pattern
: attributes pattern
: type // '[a] T' is a type-pattern 'T' with an attribute '[a]', not a type-pattern '[a] T'
// this makes sense because is-ch
a
ck may be different for a type with attributes
// this makes sense because is-ch
e
ck may be different for a type with attributes
: tuplePattern
: decomposerPattern
: constantPattern
: bindingPattern
:
expressionP
attern
:
"*" // wildcard p
attern
;
decomposerPattern
: type
: qualifiedName typeParameters? (tuplePattern)?
// TODO : typeParameters will be consumed by the expression
: elvisExpression typeParameters? '@' tuplePattern
;
constantPattern
...
...
@@ -44,7 +46,7 @@ tuplePattern
;
bindingPattern
: "
?" SimpleName?
binding?
: "
val" SimpleName
binding?
;
binding
...
...
@@ -52,13 +54,5 @@ binding
: "!is" pattern
: "in" expression
: "!in" expression
: "=" expression
;
qualifiedName
: ("namespace" ".")? SimpleName{","}
;
expressionPattern
: "=" expression
: ":" type
;
\ No newline at end of file
idea/src/org/jetbrains/jet/JetNodeTypes.java
浏览文件 @
48180072
...
...
@@ -114,6 +114,7 @@ public interface JetNodeTypes {
JetNodeType
TYPE_PATTERN
=
new
JetNodeType
(
"TYPE_PATTERN"
);
JetNodeType
EXPRESSION_PATTERN
=
new
JetNodeType
(
"EXPRESSION_PATTERN"
);
JetNodeType
BINDING_PATTERN
=
new
JetNodeType
(
"BINDING_PATTERN"
);
JetNodeType
WILDCARD_PATTERN
=
new
JetNodeType
(
"WILDCARD_PATTERN"
);
JetNodeType
WHEN
=
new
JetNodeType
(
"WHEN"
,
JetWhenExpression
.
class
);
JetNodeType
WHEN_ENTRY
=
new
JetNodeType
(
"WHEN_ENTRY"
,
JetWhenEntry
.
class
);
JetNodeType
WHEN_CONDITION
=
new
JetNodeType
(
"WHEN_CONDITION"
);
...
...
idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java
浏览文件 @
48180072
...
...
@@ -171,7 +171,6 @@ public class JetExpressionParsing extends AbstractJetParsing {
}
private
final
JetParsing
myJetParsing
;
private
TokenSet
expressionFollow
=
null
;
private
TokenSet
decomposerExpressionFollow
=
null
;
public
JetExpressionParsing
(
SemanticWhitespaceAwarePsiBuilder
builder
,
JetParsing
jetParsing
)
{
...
...
@@ -181,6 +180,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
private
TokenSet
getDecomposerExpressionFollow
()
{
// TODO : memoize
if
(
decomposerExpressionFollow
==
null
)
{
List
<
IElementType
>
elvisFollow
=
new
ArrayList
<
IElementType
>();
Precedence
precedence
=
Precedence
.
ELVIS
;
while
(
precedence
!=
null
)
{
...
...
@@ -190,7 +190,9 @@ public class JetExpressionParsing extends AbstractJetParsing {
}
precedence
=
precedence
.
higher
;
}
return
TokenSet
.
orSet
(
EXPRESSION_FOLLOW
,
TokenSet
.
create
(
elvisFollow
.
toArray
(
new
IElementType
[
elvisFollow
.
size
()])));
decomposerExpressionFollow
=
TokenSet
.
orSet
(
EXPRESSION_FOLLOW
,
TokenSet
.
create
(
elvisFollow
.
toArray
(
new
IElementType
[
elvisFollow
.
size
()])));
}
return
decomposerExpressionFollow
;
}
/*
...
...
@@ -690,13 +692,12 @@ public class JetExpressionParsing extends AbstractJetParsing {
parseTuplePattern
(
TUPLE_PATTERN_ENTRY
);
pattern
.
done
(
TUPLE_PATTERN
);
}
else
if
(
at
(
QUEST
))
{
else
if
(
at
(
MUL
))
{
advance
();
// MUL
pattern
.
done
(
WILDCARD_PATTERN
);
}
else
if
(
at
(
VAL_KEYWORD
))
{
parseBindingPattern
();
pattern
.
done
(
BINDING_PATTERN
);
}
else
if
(
at
(
EQ
))
{
advance
();
// EQ
parseExpression
();
pattern
.
done
(
EXPRESSION_PATTERN
);
}
else
if
(
parseLiteralConstant
())
{
pattern
.
done
(
EXPRESSION_PATTERN
);
}
else
{
...
...
@@ -741,7 +742,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
/*
* bindingPattern
* : "
?" SimpleName?
binding?
* : "
val" SimpleName
binding?
* ;
*
* binding
...
...
@@ -749,15 +750,15 @@ public class JetExpressionParsing extends AbstractJetParsing {
* : "!is" pattern
* : "in" expression
* : "!in" expression
* : "
=" expression
* : "
:" type
* ;
*/
private
void
parseBindingPattern
()
{
assert
_at
(
QUEST
);
assert
_at
(
VAL_KEYWORD
);
advance
();
//
QUEST
advance
();
//
VAL_KEYWORD
consumeIf
(
IDENTIFIER
);
expect
(
IDENTIFIER
,
"Expecting an identifier"
);
if
(
at
(
IS_KEYWORD
)
||
at
(
NOT_IS
))
{
advance
();
// IS_KEYWORD or NOT_IS
...
...
@@ -767,12 +768,13 @@ public class JetExpressionParsing extends AbstractJetParsing {
advance
();
// IN_KEYWORD ot NOT_IN
parseExpression
();
}
else
if
(
at
(
EQ
))
{
}
else
if
(
at
(
COLON
))
{
advance
();
// EQ
parseExpression
();
myJetParsing
.
parseTypeRef
();
}
}
/*
* arrayAccess
* : "[" expression{","} "]"
...
...
idea/testData/psi/AttributesOnPatterns.jet
浏览文件 @
48180072
fun foo() {
when (e) {
is [a] =2 => d
is [a] val a => d
is [a] val a is foo => d
is [a] * => d
is [a] 2 => d
is [a] T => d
is [a] T @ () => d
...
...
idea/testData/psi/AttributesOnPatterns.txt
浏览文件 @
48180072
...
...
@@ -27,7 +27,7 @@ JetFile: AttributesOnPatterns.jet
WHEN_CONDITION
PsiElement(is)('is')
PsiWhiteSpace(' ')
EXPRESSION
_PATTERN
BINDING
_PATTERN
ATTRIBUTE_ANNOTATION
PsiElement(LBRACKET)('[')
ATTRIBUTE
...
...
@@ -37,9 +37,61 @@ JetFile: AttributesOnPatterns.jet
PsiElement(IDENTIFIER)('a')
PsiElement(RBRACKET)(']')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('2')
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
PsiElement(DOUBLE_ARROW)('=>')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('d')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION
PsiElement(is)('is')
PsiWhiteSpace(' ')
BINDING_PATTERN
ATTRIBUTE_ANNOTATION
PsiElement(LBRACKET)('[')
ATTRIBUTE
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(RBRACKET)(']')
PsiWhiteSpace(' ')
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
PsiElement(is)('is')
PsiWhiteSpace(' ')
TYPE_PATTERN
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace(' ')
PsiElement(DOUBLE_ARROW)('=>')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('d')
PsiWhiteSpace('\n ')
WHEN_ENTRY
WHEN_CONDITION
PsiElement(is)('is')
PsiWhiteSpace(' ')
WILDCARD_PATTERN
ATTRIBUTE_ANNOTATION
PsiElement(LBRACKET)('[')
ATTRIBUTE
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(RBRACKET)(']')
PsiWhiteSpace(' ')
PsiElement(MUL)('*')
PsiWhiteSpace(' ')
PsiElement(DOUBLE_ARROW)('=>')
PsiWhiteSpace(' ')
...
...
idea/testData/psi/When.jet
浏览文件 @
48180072
...
...
@@ -26,10 +26,9 @@ fun foo() {
is 'c' => foo
is "sadfsa" => foo
is """ddd""" => foo
is ? => foo
is ? is Foo => foo
is ?a is Foo => foo
is (?a is Foo, b) => foo
is * => foo
is val a is Foo => foo
is (val a is Foo, b) => foo
}
when (when(when (e) {
...
...
@@ -43,21 +42,22 @@ fun foo() {
fun foo() {
when (val a = e) {
is Tree => c
is Tree @ (null,
?
r) => c
is Tree @ (null,
val
r) => c
is a @ (a, b) => c
is a @ (a, b) => c
is a.a @ (a, b) => c
is a.a @ (foo = a, bar = b) => c
is namespace.a.a @ (a, b) => c
is a @ (
?
a is T, b) => c
is a @ (
val
a is T, b) => c
is a @ (b, 1) => c
in 1..2 => dsf
!in 2 => sd
!is t => d
is {(foo) : Bar} => fgpp
is (1,
?a is Foo, ?, ? is
Foo, bar) => d
is (Foo,
?a in 1..2, ?, ? !is Foo, ?bar = foo.bar<a>
(a)) => d
is (1,
val a is Foo, *,
Foo, bar) => d
is (Foo,
val a in 1..2, *, val _ !is Foo, val bar is foo.bar<a> @
(a)) => d
is (Int, Int) => 2
is val a : Foo => 2
else => foo
else continue
}
...
...
@@ -66,11 +66,11 @@ fun foo() {
fun foo() {
when (val a = e) {
is Tree,
is Tree @ (null,
?
r),
is Tree @ (null,
val
r),
is a @ (a, b) => c
1, foo(), bar, 2 + 3,
is a @ (a, b) => c
is a.a @ (
=a + 3, b
) => c
is a.a @ (
val b, b) if (b == a + 3
) => c
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录