summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/scala/tools/nsc/ast/parser/Parsers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/Parsers.scala24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
index b942f73b22..282d2b5ce3 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
@@ -1132,11 +1132,19 @@ trait Parsers requires SyntaxAnalyzer {
/** Modifiers ::= {Modifier}
* Modifier ::= LocalModifier
- * | private [ "[" Id "]" ]
- * | protected | override
+ * | override
+ * | (private | protected) [ "[" Id "]" ]
*/
def modifiers(): Modifiers = {
var privateWithin: Name = nme.EMPTY.toTypeName;
+ def qualifierOpt: unit =
+ if (in.token == LBRACKET) {
+ in.nextToken()
+ if (privateWithin != nme.EMPTY.toTypeName)
+ syntaxError("duplicate private/protected qualifier", false)
+ privateWithin = ident().toTypeName
+ accept(RBRACKET)
+ }
def loop(mods: int): int = in.token match {
case ABSTRACT =>
loop(addMod(mods, Flags.ABSTRACT))
@@ -1146,15 +1154,13 @@ trait Parsers requires SyntaxAnalyzer {
loop(addMod(mods, Flags.SEALED))
case PRIVATE =>
var mods1 = addMod(mods, Flags.PRIVATE)
- if (in.token == LBRACKET) {
- in.nextToken()
- privateWithin = ident().toTypeName
- accept(RBRACKET)
- mods1 = mods
- }
+ qualifierOpt
+ if (privateWithin != nme.EMPTY.toTypeName) mods1 = mods
loop(mods1)
case PROTECTED =>
- loop(addMod(mods, Flags.PROTECTED))
+ val mods1 = addMod(mods, Flags.PROTECTED)
+ qualifierOpt
+ loop(mods1)
case OVERRIDE =>
loop(addMod(mods, Flags.OVERRIDE))
case IMPLICIT =>