diff options
author | Martin Odersky <odersky@gmail.com> | 2015-11-01 12:26:02 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2015-11-01 12:26:02 +0100 |
commit | 3badc4d8219385ad0f3bcc77790681a7e7c6d088 (patch) | |
tree | 232d86e4a522e9f2b8473ba7b347e5a4eebcf177 /src/dotty/tools/dotc/parsing | |
parent | 08e880231ff5facd55a80bed0391b22fe85a9f44 (diff) | |
download | dotty-3badc4d8219385ad0f3bcc77790681a7e7c6d088.tar.gz dotty-3badc4d8219385ad0f3bcc77790681a7e7c6d088.tar.bz2 dotty-3badc4d8219385ad0f3bcc77790681a7e7c6d088.zip |
Deal gracefully with missing return types of abstract menthods.
1) Better error message: "missing return type" instead of `=' expected.
2) Allow them under language:Scala2
Fixes #871
Diffstat (limited to 'src/dotty/tools/dotc/parsing')
-rw-r--r-- | src/dotty/tools/dotc/parsing/Parsers.scala | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/parsing/Parsers.scala b/src/dotty/tools/dotc/parsing/Parsers.scala index 4b22eac95..12cef900a 100644 --- a/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/src/dotty/tools/dotc/parsing/Parsers.scala @@ -1741,10 +1741,22 @@ object Parsers { val vparamss = paramClauses(name) var tpt = fromWithinReturnType(typedOpt()) val rhs = - if (tpt.isEmpty || in.token == EQUALS) { - if (atScala2Brace) tpt = scalaUnit else accept(EQUALS) + if (in.token == EQUALS) { + in.nextToken() + expr + } + else if (!tpt.isEmpty) + EmptyTree + else if (scala2mode) { + tpt = scalaUnit + if (in.token == LBRACE) expr() + else EmptyTree + } + else { + if (!isExprIntro) syntaxError("missing return type", in.lastOffset) + accept(EQUALS) expr() - } else EmptyTree + } DefDef(name, tparams, vparamss, tpt, rhs).withMods(mods1) } } |