diff options
author | Martin Odersky <odersky@gmail.com> | 2005-12-21 13:47:53 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2005-12-21 13:47:53 +0000 |
commit | 99b6474dabc8a4bcc9282f041d48fb9671c4f2b8 (patch) | |
tree | c701a1fac4866e0c7c0d41e49edd69c0c633f06f /src/compiler/scala/tools/nsc/ast/parser/Parsers.scala | |
parent | 7ccea812b72c15670fb3c5026acb7856a36e7fad (diff) | |
download | scala-99b6474dabc8a4bcc9282f041d48fb9671c4f2b8.tar.gz scala-99b6474dabc8a4bcc9282f041d48fb9671c4f2b8.tar.bz2 scala-99b6474dabc8a4bcc9282f041d48fb9671c4f2b8.zip |
Diffstat (limited to 'src/compiler/scala/tools/nsc/ast/parser/Parsers.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/ast/parser/Parsers.scala | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala index 0634ace4d0..36f6d5890e 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala @@ -1552,8 +1552,11 @@ import Tokens._; /** ClassTemplate ::= [`extends' TemplateParents] [[NL] TemplateBody] * TemplateParents ::= SimpleType {`(' [Exprs] `)'} {`with' SimpleType} */ - def classTemplate(mods: Modifiers, name: Name, vparamss: List[List[ValDef]]): Template = { - val ret = atPos(in.currentPos) { + def classTemplate(mods: Modifiers, name: Name, vparamss: List[List[ValDef]]): Template = + atPos(in.currentPos) { + def acceptEmptyTemplateBody(msg: String): unit = + if (!(in.token == SEMI || in.token == NEWLINE || in.token == COMMA || in.token == RBRACE)) + syntaxError(msg, true); val parents = new ListBuffer[Tree]; val argss = new ListBuffer[List[Tree]]; if (in.token == EXTENDS) { @@ -1568,25 +1571,21 @@ import Tokens._; in.nextToken(); parents += simpleType() } - } else argss += List(); + } else { + if (in.token != LBRACE) acceptEmptyTemplateBody("`extends' or `{' expected"); + argss += List() + } if (name != nme.ScalaObject.toTypeName) parents += scalaScalaObjectConstr; if (mods.hasFlag(Flags.CASE)) parents += caseClassConstr; val ps = parents.toList; if (in.token == NEWLINE && in.next.token == LBRACE) in.nextToken(); var body = - if (in.token == LBRACE) { - templateBody() - } else { - if (!(in.token == SEMI || in.token == NEWLINE || in.token == COMMA || in.token == RBRACE)) - syntaxError("`extends' or `{' expected", true); - List() - } + if (in.token == LBRACE) templateBody() + else { acceptEmptyTemplateBody("`{' expected"); List() } if (!mods.hasFlag(Flags.TRAIT)) Template(ps, vparamss, argss.toList, body) else Template(ps, body) } - ret; - } ////////// TEMPLATES //////////////////////////////////////////////////////////// |