Modifiers for namespaces fixed

This commit is contained in:
Andrey Breslav
2011-01-04 00:52:26 +03:00
parent 27c4494d69
commit 1f09ee1965
5 changed files with 74 additions and 5 deletions
+1 -1
View File
@@ -11,7 +11,7 @@ preamble
;
namespaceHeader
: "namespace" SimpleName{"."} SEMI?
: modifiers "namespace" SimpleName{"."} SEMI?
;
import
@@ -337,7 +337,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
parseFunctionLiteral();
}
else if (!parseLiteralConstant()) {
// TODO
// TODO: betters recovery if FIRST(expression) did not match
errorAndAdvance("Expecting an expression");
}
}
@@ -110,16 +110,21 @@ public class JetParsing extends AbstractJetParsing {
private void parsePreamble() {
/*
* namespaceHeader
* : "namespace" SimpleName{"."} SEMI?
* : modifiers "namespace" SimpleName{"."} SEMI?
* ;
*/
PsiBuilder.Marker firstEntry = mark();
parseModifierList();
if (at(NAMESPACE_KEYWORD)) {
// TODO: Modifiers
firstEntry.drop();
advance(); // NAMESPACE_KEYWORD
parseNamespaceName();
consumeIf(SEMICOLON);
} else {
firstEntry.rollbackTo();
}
while (at(IMPORT_KEYWORD)) {
@@ -384,7 +389,6 @@ public class JetParsing extends AbstractJetParsing {
* ;
*/
private JetNodeType parseNamespaceBlock() {
// TODO: Modifiers
assert _at(NAMESPACE_KEYWORD);
advance(); // NAMESPACE_KEYWORD
+9
View File
@@ -0,0 +1,9 @@
public [a] namespace name;
[a] namespace a {
val foo
private namespace b {
}
}
+56
View File
@@ -0,0 +1,56 @@
JetFile: NamespaceModifiers.jet
NAMESPACE
MODIFIER_LIST
PsiElement(public)('public')
PsiWhiteSpace(' ')
ATTRIBUTE_ANNOTATION
PsiElement(LBRACKET)('[')
ATTRIBUTE
USER_TYPE
PsiElement(IDENTIFIER)('a')
PsiElement(RBRACKET)(']')
PsiWhiteSpace(' ')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('name')
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n\n')
NAMESPACE
MODIFIER_LIST
ATTRIBUTE_ANNOTATION
PsiElement(LBRACKET)('[')
ATTRIBUTE
USER_TYPE
PsiElement(IDENTIFIER)('a')
PsiElement(RBRACKET)(']')
PsiWhiteSpace(' ')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
NAMESPACE_BODY
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n\n ')
NAMESPACE
MODIFIER_LIST
PsiElement(private)('private')
PsiWhiteSpace(' ')
PsiElement(namespace)('namespace')
PsiWhiteSpace(' ')
NAMESPACE_NAME
PsiElement(IDENTIFIER)('b')
PsiWhiteSpace(' ')
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n\n ')
NAMESPACE_BODY
<empty list>
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')