Skip to content

Commit e1b92f0

Browse files
committed
Add empty case class params check. Add test.
1 parent 36707c7 commit e1b92f0

File tree

4 files changed

+12
-4
lines changed

4 files changed

+12
-4
lines changed

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2396,7 +2396,15 @@ object Parsers {
23962396
}
23972397
else Nil
23982398
}
2399-
recur(firstClause = true, 0, ofInstance)
2399+
2400+
val start = in.lastOffset
2401+
val params = recur(firstClause = true, 0, ofInstance)
2402+
2403+
if(ofCaseClass && params.isEmpty)
2404+
syntaxError( "case classes without a parameter list are not allowed;\n"+
2405+
"use either case objects or case classes with an explicit `()' as a parameter list.", start)
2406+
2407+
params
24002408
}
24012409

24022410
/* -------- DEFS ------------------------------------------- */

tests/pos/gadt-GadtStlc.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ object GadtStlc {
1010
// Var[M[W]]
1111
sealed trait Var[A]
1212
object VarW extends Var[W]
13-
case class VarM[A] extends Var[M[A]]
13+
case class VarM[A]() extends Var[M[A]]
1414

1515
// \s.e
1616
sealed trait Abs[S, E]

tests/pos/i4176-gadt.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
object i4176 {
22
sealed trait TNat
33
case class TZero() extends TNat
4-
case class TSucc[N <: TNat] extends TNat
4+
case class TSucc[N <: TNat]() extends TNat
55

66
object TNatSum {
77
sealed trait TSum[M, N, R]

tests/pos/i4316.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
object Test {
22

3-
case class Bar[A]
3+
case class Bar[A]()
44

55
def meth[A](consumer: A => Unit, s: Bar[A]): Unit = {
66
s match {

0 commit comments

Comments
 (0)