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 namespaceHeader
: "namespace" SimpleName{"."} SEMI? : modifiers "namespace" SimpleName{"."} SEMI?
; ;
import import
@@ -337,7 +337,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
parseFunctionLiteral(); parseFunctionLiteral();
} }
else if (!parseLiteralConstant()) { else if (!parseLiteralConstant()) {
// TODO // TODO: betters recovery if FIRST(expression) did not match
errorAndAdvance("Expecting an expression"); errorAndAdvance("Expecting an expression");
} }
} }
@@ -110,16 +110,21 @@ public class JetParsing extends AbstractJetParsing {
private void parsePreamble() { private void parsePreamble() {
/* /*
* namespaceHeader * namespaceHeader
* : "namespace" SimpleName{"."} SEMI? * : modifiers "namespace" SimpleName{"."} SEMI?
* ; * ;
*/ */
PsiBuilder.Marker firstEntry = mark();
parseModifierList();
if (at(NAMESPACE_KEYWORD)) { if (at(NAMESPACE_KEYWORD)) {
// TODO: Modifiers firstEntry.drop();
advance(); // NAMESPACE_KEYWORD advance(); // NAMESPACE_KEYWORD
parseNamespaceName(); parseNamespaceName();
consumeIf(SEMICOLON); consumeIf(SEMICOLON);
} else {
firstEntry.rollbackTo();
} }
while (at(IMPORT_KEYWORD)) { while (at(IMPORT_KEYWORD)) {
@@ -384,7 +389,6 @@ public class JetParsing extends AbstractJetParsing {
* ; * ;
*/ */
private JetNodeType parseNamespaceBlock() { private JetNodeType parseNamespaceBlock() {
// TODO: Modifiers
assert _at(NAMESPACE_KEYWORD); assert _at(NAMESPACE_KEYWORD);
advance(); // 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)('}')