Skip to content

Commit 1654ebc

Browse files
committed
Merge pull request #900 from dotty-staging/fix-#871
Deal gracefully with missing return types of abstract menthods.
2 parents d3e5a69 + 3badc4d commit 1654ebc

File tree

5 files changed

+30
-4
lines changed

5 files changed

+30
-4
lines changed

src/dotty/tools/dotc/parsing/Parsers.scala

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1742,10 +1742,22 @@ object Parsers {
17421742
val vparamss = paramClauses(name)
17431743
var tpt = fromWithinReturnType(typedOpt())
17441744
val rhs =
1745-
if (tpt.isEmpty || in.token == EQUALS) {
1746-
if (atScala2Brace) tpt = scalaUnit else accept(EQUALS)
1745+
if (in.token == EQUALS) {
1746+
in.nextToken()
1747+
expr
1748+
}
1749+
else if (!tpt.isEmpty)
1750+
EmptyTree
1751+
else if (scala2mode) {
1752+
tpt = scalaUnit
1753+
if (in.token == LBRACE) expr()
1754+
else EmptyTree
1755+
}
1756+
else {
1757+
if (!isExprIntro) syntaxError("missing return type", in.lastOffset)
1758+
accept(EQUALS)
17471759
expr()
1748-
} else EmptyTree
1760+
}
17491761
DefDef(name, tparams, vparamss, tpt, rhs).withMods(mods1)
17501762
}
17511763
}

test/dotc/tests.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class tests extends CompilerTest {
3737

3838
val allowDeepSubtypes = defaultOptions diff List("-Yno-deep-subtypes")
3939
val allowDoubleBindings = defaultOptions diff List("-Yno-double-bindings")
40+
val scala2mode = List("-language:Scala2")
4041

4142
val testsDir = "./tests/"
4243
val posDir = testsDir + "pos/"
@@ -92,14 +93,16 @@ class tests extends CompilerTest {
9293
@Test def pos_valueclasses = compileFiles(posDir + "valueclasses/", twice)
9394
@Test def pos_nullarify = compileFile(posDir, "nullarify", args = "-Ycheck:nullarify" :: Nil)
9495
@Test def pos_subtyping = compileFile(posDir, "subtyping", twice)
95-
@Test def pos_t2613 = compileFile(posSpecialDir, "t2613")(allowDeepSubtypes)
9696
@Test def pos_packageObj = compileFile(posDir, "i0239", twice)
9797
@Test def pos_anonClassSubtyping = compileFile(posDir, "anonClassSubtyping", twice)
9898
@Test def pos_extmethods = compileFile(posDir, "extmethods", twice)
9999
@Test def pos_companions = compileFile(posDir, "companions", twice)
100100

101101
@Test def pos_all = compileFiles(posDir) // twice omitted to make tests run faster
102102

103+
@Test def pos_t2613 = compileFile(posSpecialDir, "t2613")(allowDeepSubtypes)
104+
@Test def pos_i871 = compileFile(posSpecialDir, "i871", scala2mode)
105+
103106
@Test def new_all = compileFiles(newDir, twice)
104107

105108
@Test def neg_abstractOverride() = compileFile(negDir, "abstract-override", xerrors = 2)
@@ -134,6 +137,7 @@ class tests extends CompilerTest {
134137
@Test def neg_t2994 = compileFile(negDir, "t2994", xerrors = 2)
135138
@Test def neg_subtyping = compileFile(negDir, "subtyping", xerrors = 5)
136139
@Test def neg_variances = compileFile(negDir, "variances", xerrors = 2)
140+
@Test def neg_i871_missingReturnType = compileFile(negDir, "i871", xerrors = 2)
137141
@Test def neg_badAuxConstr = compileFile(negDir, "badAuxConstr", xerrors = 2)
138142
@Test def neg_typetest = compileFile(negDir, "typetest", xerrors = 1)
139143
@Test def neg_t1569_failedAvoid = compileFile(negDir, "t1569-failedAvoid", xerrors = 1)

tests/neg/i871.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
trait Message {
2+
def first(x: Int)
3+
def second
4+
1
5+
}

tests/pos-special/i871.flags

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
-language:Scala2

tests/pos-special/i871.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
trait Message {
2+
def first(x: Int)
3+
def second
4+
}

0 commit comments

Comments
 (0)