aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/parsing
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-11-01 12:26:02 +0100
committerMartin Odersky <odersky@gmail.com>2015-11-01 12:26:02 +0100
commit3badc4d8219385ad0f3bcc77790681a7e7c6d088 (patch)
tree232d86e4a522e9f2b8473ba7b347e5a4eebcf177 /src/dotty/tools/dotc/parsing
parent08e880231ff5facd55a80bed0391b22fe85a9f44 (diff)
downloaddotty-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.scala18
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)
}
}