diff options
author | Martin Odersky <odersky@gmail.com> | 2017-02-27 17:44:02 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2017-04-04 13:29:38 +0200 |
commit | 91a26b3f42d1218015acb9b7e1bfc180e3ed779b (patch) | |
tree | 63ba813e4b2a806da9f170624f03bad72d0e08dd /compiler/src/dotty/tools/dotc/parsing/Parsers.scala | |
parent | cf10e28a54aaeab124f9a939f71da7e09d299bcb (diff) | |
download | dotty-91a26b3f42d1218015acb9b7e1bfc180e3ed779b.tar.gz dotty-91a26b3f42d1218015acb9b7e1bfc180e3ed779b.tar.bz2 dotty-91a26b3f42d1218015acb9b7e1bfc180e3ed779b.zip |
Support comma-separated enum constants
Diffstat (limited to 'compiler/src/dotty/tools/dotc/parsing/Parsers.scala')
-rw-r--r-- | compiler/src/dotty/tools/dotc/parsing/Parsers.scala | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala index ee736179a..9864281a5 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala @@ -2149,8 +2149,8 @@ object Parsers { } /** EnumCaseStats = EnumCaseStat {semi EnumCaseStat */ - def enumCaseStats(): List[MemberDef] = { - val cases = new ListBuffer[MemberDef] += enumCaseStat() + def enumCaseStats(): List[DefTree] = { + val cases = new ListBuffer[DefTree] += enumCaseStat() while (in.token != RBRACE) { acceptStatSep() cases += enumCaseStat() @@ -2159,19 +2159,24 @@ object Parsers { } /** EnumCaseStat = {Annotation [nl]} {Modifier} EnumCase */ - def enumCaseStat(): MemberDef = + def enumCaseStat(): DefTree = enumCase(in.offset, defAnnotsMods(modifierTokens)) /** EnumCase = `case' (EnumClassDef | ObjectDef) */ - def enumCase(start: Offset, mods: Modifiers): MemberDef = { + def enumCase(start: Offset, mods: Modifiers): DefTree = { val mods1 = mods.withAddedMod(atPos(in.offset)(Mod.EnumCase())) | Case accept(CASE) atPos(start, nameStart) { - val name = ident() + val id = termIdent() if (in.token == LBRACKET || in.token == LPAREN) - classDefRest(start, mods1, name.toTypeName) + classDefRest(start, mods1, id.name.toTypeName) + else if (in.token == COMMA) { + in.nextToken() + val ids = commaSeparated(termIdent) + PatDef(mods1, id :: ids, TypeTree(), EmptyTree) + } else - objectDefRest(start, mods1, name) + objectDefRest(start, mods1, id.name.asTermName) } } |