diff options
-rw-r--r-- | src/dotty/tools/dotc/parsing/Parsers.scala | 18 | ||||
-rw-r--r-- | test/dotc/tests.scala | 6 | ||||
-rw-r--r-- | tests/neg/i871.scala | 5 | ||||
-rw-r--r-- | tests/pos-special/i871.flags | 1 | ||||
-rw-r--r-- | tests/pos-special/i871.scala | 4 |
5 files changed, 30 insertions, 4 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) } } diff --git a/test/dotc/tests.scala b/test/dotc/tests.scala index 381f522cf..927815b5a 100644 --- a/test/dotc/tests.scala +++ b/test/dotc/tests.scala @@ -35,6 +35,7 @@ class tests extends CompilerTest { val allowDeepSubtypes = defaultOptions diff List("-Yno-deep-subtypes") val allowDoubleBindings = defaultOptions diff List("-Yno-double-bindings") + val scala2mode = List("-language:Scala2") val testsDir = "./tests/" val posDir = testsDir + "pos/" @@ -90,7 +91,6 @@ class tests extends CompilerTest { @Test def pos_valueclasses = compileFiles(posDir + "valueclasses/", twice) @Test def pos_nullarify = compileFile(posDir, "nullarify", args = "-Ycheck:nullarify" :: Nil) @Test def pos_subtyping = compileFile(posDir, "subtyping", twice) - @Test def pos_t2613 = compileFile(posSpecialDir, "t2613")(allowDeepSubtypes) @Test def pos_packageObj = compileFile(posDir, "i0239", twice) @Test def pos_anonClassSubtyping = compileFile(posDir, "anonClassSubtyping", twice) @Test def pos_extmethods = compileFile(posDir, "extmethods", twice) @@ -98,6 +98,9 @@ class tests extends CompilerTest { @Test def pos_all = compileFiles(posDir) // twice omitted to make tests run faster + @Test def pos_t2613 = compileFile(posSpecialDir, "t2613")(allowDeepSubtypes) + @Test def pos_i871 = compileFile(posSpecialDir, "i871", scala2mode) + @Test def new_all = compileFiles(newDir, twice) @Test def neg_abstractOverride() = compileFile(negDir, "abstract-override", xerrors = 2) @@ -132,6 +135,7 @@ class tests extends CompilerTest { @Test def neg_t2994 = compileFile(negDir, "t2994", xerrors = 2) @Test def neg_subtyping = compileFile(negDir, "subtyping", xerrors = 5) @Test def neg_variances = compileFile(negDir, "variances", xerrors = 2) + @Test def neg_i871_missingReturnType = compileFile(negDir, "i871", xerrors = 2) @Test def neg_badAuxConstr = compileFile(negDir, "badAuxConstr", xerrors = 2) @Test def neg_typetest = compileFile(negDir, "typetest", xerrors = 1) @Test def neg_t1569_failedAvoid = compileFile(negDir, "t1569-failedAvoid", xerrors = 1) diff --git a/tests/neg/i871.scala b/tests/neg/i871.scala new file mode 100644 index 000000000..d8e1111a0 --- /dev/null +++ b/tests/neg/i871.scala @@ -0,0 +1,5 @@ +trait Message { + def first(x: Int) + def second + 1 +} diff --git a/tests/pos-special/i871.flags b/tests/pos-special/i871.flags new file mode 100644 index 000000000..a5c112f5a --- /dev/null +++ b/tests/pos-special/i871.flags @@ -0,0 +1 @@ +-language:Scala2
\ No newline at end of file diff --git a/tests/pos-special/i871.scala b/tests/pos-special/i871.scala new file mode 100644 index 000000000..2e5f100d8 --- /dev/null +++ b/tests/pos-special/i871.scala @@ -0,0 +1,4 @@ +trait Message { + def first(x: Int) + def second +} |